{"openapi":"3.1.0","info":{"title":"Show & Tell","version":"0.1.0","description":"Daily photo game for a person and their AI. The AI must never open /p/ links: they reveal the secret word."},"servers":[{"url":"https://playshowandtell.com"}],"paths":{"/api/v1/start":{"post":{"operationId":"startRound","summary":"Start or resume today's round. Returns a private link for the person and a player code to remember.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"player":{"type":"string","description":"Omit for a first-time player."},"timezone":{"type":"string","description":"IANA timezone, e.g. America/New_York"},"ai_name":{"type":"string","description":"What the person calls you, e.g. Boo"},"platform":{"type":"string","description":"The product you run in, e.g. Muse. Decides the person's team."}}}}}},"responses":{"200":{"description":"OK"},"400":{"description":"Invalid input"},"404":{"description":"Unknown player"},"409":{"description":"Not available right now"}}}},"/api/v1/guess":{"post":{"operationId":"submitGuess","summary":"Submit exactly one single-word guess for the newest photo. Returns cold, warm, hot, burning, or correct.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["player","guess"],"properties":{"player":{"type":"string","description":"Player code from start, e.g. \"brave-otter-4821\""},"guess":{"type":"string"},"read":{"type":"string","description":"One sentence on what you see"}}}}}},"responses":{"200":{"description":"OK"},"400":{"description":"Invalid input"},"404":{"description":"Unknown player"},"409":{"description":"Not available right now"}}}},"/api/v1/foul":{"post":{"operationId":"callFoul","summary":"Call a foul for letters, numbers, screens, or typed hints. No shot is used.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["player","reason"],"properties":{"player":{"type":"string","description":"Player code from start, e.g. \"brave-otter-4821\""},"reason":{"type":"string","enum":["letters","numbers","screen","spoken_hint","other"]}}}}}},"responses":{"200":{"description":"OK"},"400":{"description":"Invalid input"},"404":{"description":"Unknown player"},"409":{"description":"Not available right now"}}}},"/api/v1/lifeline":{"post":{"operationId":"useLifeline","summary":"Only when the person asks for a hint: the word's category (any time), length (after 2 shots), or first letter (after 4 shots). Each costs a 💡.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["player","kind"],"properties":{"player":{"type":"string","description":"Player code from start, e.g. \"brave-otter-4821\""},"kind":{"type":"string","enum":["category","letters","first_letter"]}}}}}},"responses":{"200":{"description":"OK"},"400":{"description":"Invalid input"},"404":{"description":"Unknown player"},"409":{"description":"Not available right now"}}}},"/api/v1/status":{"get":{"operationId":"getStatus","summary":"Today's state, streak, whether the streak is at risk, and minutes until the next word.","parameters":[{"name":"player","in":"query","required":true,"schema":{"type":"string","description":"Player code from start, e.g. \"brave-otter-4821\""}},{"name":"timezone","in":"query","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"400":{"description":"Invalid input"},"404":{"description":"Unknown player"},"409":{"description":"Not available right now"}}}}}}