{"openapi":"3.1.0","info":{"title":"AUVY Snake","version":"1.0.0","summary":"Same-origin JSON for the Jev-driven Snake demo.","description":"The browser holds the board. Tick, fruit, and reset are POST JSON. TYPESAFE_API_KEY never leaves the server."},"servers":[{"url":"https://snake.auvy.ai"}],"paths":{"/api/health":{"get":{"summary":"Liveness","operationId":"health","responses":{"200":{"description":"The process is up.","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"}}}}}}}}},"/api/reset":{"post":{"summary":"Start a new board","operationId":"reset","responses":{"200":{"description":"A fresh SnakeState."}}}},"/api/fruit":{"post":{"summary":"Toggle fruit on a cell","operationId":"fruit","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["state","x","y"],"properties":{"state":{"type":"object"},"x":{"type":"integer"},"y":{"type":"integer"}}}}}},"responses":{"200":{"description":"Updated state. The last fruit is always replaced."}}}},"/api/tick":{"post":{"summary":"Ask Jev for the next heading and apply it","operationId":"tick","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["state"],"properties":{"state":{"type":"object"},"visible":{"type":"boolean"}}}}}},"responses":{"200":{"description":"Next state and Jev decision, or paused/ended."}}}}}}