{"openapi":"3.0.3","info":{"title":"Remix.gg Server API","description":"Public API for Remix.gg restricted game jam partner workflows.","version":"1.0.0"},"tags":[{"name":"Game Jam Partners","description":"Restricted partner-only endpoints for approved game jam integrations. These routes require a partner API key and only return data scoped to the configured game jam."},{"name":"System","description":"System and health-check endpoints."}],"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"API Key"}},"schemas":{}},"paths":{"/health":{"get":{"tags":["System"],"summary":"Health check","operationId":"getHealth"}},"/v1/{gameJamSlug}/games":{"get":{"security":[{"bearerAuth":[]}],"tags":["Game Jam Partners"],"summary":"List partner game jam submissions","description":"Restricted game jam partner endpoint. Requires the configured partner API key and returns only games submitted to the allowed partner game jam. Each game includes `name` (display title) and `iconUrl` (app icon image URL, or null). Use test=true to return deterministic fake data for integration testing without reading real user or game data.","parameters":[{"name":"gameJamSlug","in":"path","required":true,"schema":{"type":"string"}},{"name":"cursor","in":"query","required":false,"schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"schema":{"type":"string"}},{"name":"test","in":"query","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Response for status 200","content":{"application/json":{"schema":{"type":"object","required":["success","data"],"properties":{"success":{"const":true,"type":"boolean"},"data":{"type":"object","required":["games","pageInfo"],"properties":{"games":{"type":"array","items":{"type":"object","required":["gameId","gameJamId","name","iconUrl","submittedAt","author","stats"],"properties":{"gameId":{"type":"string"},"gameJamId":{"type":"string"},"name":{"type":"string"},"iconUrl":{"anyOf":[{"type":"string"},{"type":"null"}]},"submittedAt":{"anyOf":[{"type":"string"},{"type":"null"}]},"author":{"type":"object","required":["email","handle","displayName"],"properties":{"email":{"anyOf":[{"type":"string"},{"type":"null"}]},"handle":{"type":"string"},"displayName":{"type":"string"}}},"stats":{"type":"object","required":["plays","likes"],"properties":{"plays":{"type":"number"},"likes":{"type":"number"}}}}}},"test":{"type":"boolean"},"pageInfo":{"type":"object","required":["nextCursor","hasMore"],"properties":{"nextCursor":{"anyOf":[{"type":"string"},{"type":"null"}]},"hasMore":{"type":"boolean"}}}}}}}}}},"400":{"description":"Response for status 400","content":{"application/json":{"schema":{"type":"object","required":["success","error"],"properties":{"success":{"const":false,"type":"boolean"},"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{}}}}}}}},"401":{"description":"Response for status 401","content":{"application/json":{"schema":{"type":"object","required":["success","error"],"properties":{"success":{"const":false,"type":"boolean"},"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{}}}}}}}},"404":{"description":"Response for status 404","content":{"application/json":{"schema":{"type":"object","required":["success","error"],"properties":{"success":{"const":false,"type":"boolean"},"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{}}}}}}}},"429":{"description":"Response for status 429","content":{"application/json":{"schema":{"type":"object","required":["success","error"],"properties":{"success":{"const":false,"type":"boolean"},"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{}}}}}}}}},"operationId":"getV1ByGameJamSlugGames"}},"/v1/{gameJamSlug}/user":{"get":{"security":[{"bearerAuth":[]}],"tags":["Game Jam Partners"],"summary":"List partner game jam stats for users","description":"Restricted game jam partner endpoint. Requires the configured partner API key and returns per-user, per-game aggregate stats for requested email addresses on games submitted to the allowed partner game jam. Each game row includes gameName, iconUrl (app icon image URL, or null), playCount, and highScore. Use test=true to return deterministic fake data for integration testing without reading real user or game data.","parameters":[{"name":"gameJamSlug","in":"path","required":true,"schema":{"type":"string"}},{"name":"emails","in":"query","required":false,"schema":{"type":"string"}},{"name":"cursor","in":"query","required":false,"schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"schema":{"type":"string"}},{"name":"test","in":"query","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Response for status 200","content":{"application/json":{"schema":{"type":"object","required":["success","data"],"properties":{"success":{"const":true,"type":"boolean"},"data":{"type":"object","required":["users","pageInfo"],"properties":{"users":{"type":"array","items":{"type":"object","required":["email","games"],"properties":{"email":{"type":"string"},"games":{"type":"array","items":{"type":"object","required":["gameId","gameName","gameJamId","iconUrl","playCount","highScore"],"properties":{"gameId":{"type":"string"},"gameName":{"type":"string"},"gameJamId":{"type":"string"},"iconUrl":{"anyOf":[{"type":"string"},{"type":"null"}]},"playCount":{"type":"number"},"highScore":{"type":"number"}}}}}}},"test":{"type":"boolean"},"pageInfo":{"type":"object","required":["nextCursor","hasMore"],"properties":{"nextCursor":{"anyOf":[{"type":"string"},{"type":"null"}]},"hasMore":{"type":"boolean"}}}}}}}}}},"400":{"description":"Response for status 400","content":{"application/json":{"schema":{"type":"object","required":["success","error"],"properties":{"success":{"const":false,"type":"boolean"},"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{}}}}}}}},"401":{"description":"Response for status 401","content":{"application/json":{"schema":{"type":"object","required":["success","error"],"properties":{"success":{"const":false,"type":"boolean"},"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{}}}}}}}},"404":{"description":"Response for status 404","content":{"application/json":{"schema":{"type":"object","required":["success","error"],"properties":{"success":{"const":false,"type":"boolean"},"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{}}}}}}}},"429":{"description":"Response for status 429","content":{"application/json":{"schema":{"type":"object","required":["success","error"],"properties":{"success":{"const":false,"type":"boolean"},"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{}}}}}}}}},"operationId":"getV1ByGameJamSlugUser"}}}}