{"openapi":"3.1.0","info":{"title":"Platform Mini API","version":"0.1.0","description":"A real, stateless, minimal platformer physics engine: real gravity simulation, real AABB-vs-tile collision, hazard death/restart, and goal detection, with level generation that proves traversability by running the physics engine before shipping a level. Every tool call takes the full game state and returns the new state; nothing is stored server-side.\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://platformmini.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"hr@unifydynamics.com","url":"https://connectorbay.com/platformmini/docs"},"termsOfService":"https://connectorbay.com/platformmini/terms"},"servers":[{"url":"https://platformmini.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/platformmini/docs"},"security":[{},{"bearer":[]}],"components":{"securitySchemes":{"bearer":{"type":"http","scheme":"bearer","description":"Optional. A Pro API key raises rate limits; no credentials are required."}},"schemas":{"Error":{"type":"object","properties":{"ok":{"const":false},"error":{"type":"object"}}}}},"paths":{"/v1/tools/new_level":{"post":{"operationId":"new_level","summary":"Generates a level and returns the initial state. The level is verified solvable BEFORE being","description":"Generates a level and returns the initial state. The level is verified solvable BEFORE being\n    returned: the server actually runs this same physics engine with a play-through policy from\n    spawn to goal, discarding and regenerating any roll that isn't genuinely traversable. Use for\n    \"let's play a platformer\", \"generate a hard level\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"difficulty":{"default":"easy","description":"'easy', 'medium', or 'hard'.","title":"Difficulty","type":"string"},"seed":{"anyOf":[{"type":"integer"},{"type":"null"}],"default":null,"description":"Optional RNG seed for a reproducible level.","title":"Seed"}},"title":"new_levelArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/step":{"post":{"operationId":"step","summary":"Advances the simulation exactly one tick: applies gravity, horizontal movement, and a jump","description":"Advances the simulation exactly one tick: applies gravity, horizontal movement, and a jump\n    impulse (if grounded), resolves real AABB-vs-tile collision, and checks hazard/goal/fall-off.\n    Returns the new state plus event (moved/landed/died/won/finished). Use for \"move right\", \"jump\n    right\", \"stay still and fall\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"state":{"additionalProperties":true,"description":"The current game state, exactly as returned by new_level/step.","title":"State","type":"object"},"move":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"'left', 'right', or omit/None for no horizontal input.","title":"Move"},"jump":{"default":false,"description":"Attempt a jump this tick. Only takes effect while the player is on the ground.","title":"Jump","type":"boolean"}},"required":["state"],"title":"stepArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/render":{"post":{"operationId":"render","summary":"A human-readable ASCII level: '#' solid ground, '^' hazard, 'G' goal, 'P' the player, '.'","description":"A human-readable ASCII level: '#' solid ground, '^' hazard, 'G' goal, 'P' the player, '.'\n    open air. Use for \"show me the level\", \"where am I\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"state":{"additionalProperties":true,"description":"The current game state, exactly as returned by new_level/step.","title":"State","type":"object"}},"required":["state"],"title":"renderArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}}}}