{"openapi":"3.1.0","info":{"title":"Would You Rather API","version":"0.1.0","description":"A real, stateless, playable 'Would You Rather' game session engine with a 110+ original dilemma bank, no-repeat tracking, category filtering, and genuine majority/unanimous/split round scoring. Every tool call takes the full session 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://wouldurather.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"hr@unifydynamics.com","url":"https://connectorbay.com/wouldurather/docs"},"termsOfService":"https://connectorbay.com/wouldurather/terms"},"servers":[{"url":"https://wouldurather.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/wouldurather/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/list_categories":{"post":{"operationId":"list_categories","summary":"Lists the dilemma categories available for filtering. Use for \"what categories are there\".","description":"Lists the dilemma categories available for filtering. Use for \"what categories are there\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"list_categoriesArguments","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/new_session":{"post":{"operationId":"new_session","summary":"Starts a fresh Would You Rather session and returns its initial (round-less) state. Use for","description":"Starts a fresh Would You Rather session and returns its initial (round-less) state. Use for\n    \"let's play would you rather\", \"start a new round of would you rather\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"players":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"default":null,"description":"Optional list of player names. Leave empty for solo/freeform play (picks are then keyed by any single label you choose, e.g. 'you').","title":"Players"},"category":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Optional category to restrict every round in this session to. See list_categories.","title":"Category"}},"title":"new_sessionArguments","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/new_round":{"post":{"operationId":"new_round","summary":"Serves a fresh dilemma never before served in this session (no-repeat mechanic backed by","description":"Serves a fresh dilemma never before served in this session (no-repeat mechanic backed by\n    served_ids). Fails with bad_input if every dilemma matching the filter has already been served\n    this session. Use for \"give us a would-you-rather\", \"next round\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"state":{"additionalProperties":true,"description":"The current session state, exactly as returned by new_session/new_round/submit_picks.","examples":[{"category_filter":null,"current_round":{"category":"everyday","id":"wur_003","option_a":"...","option_b":"..."},"players":["Alice","Bob"],"rounds":[],"served_ids":["wur_003"],"tally":{"a":0,"b":0}}],"title":"State","type":"object"},"category":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Override the session's category filter for just this round. Omit to use the session's existing filter (or none).","title":"Category"}},"required":["state"],"title":"new_roundArguments","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/submit_picks":{"post":{"operationId":"submit_picks","summary":"Records who picked which side for the current round and computes the round result:","description":"Records who picked which side for the current round and computes the round result:\n    unanimous_a/unanimous_b, majority_a/majority_b, or split. Updates the session-wide tally. Use\n    for \"Alice picked A, Bob picked B\", \"we both said B\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"state":{"additionalProperties":true,"description":"The current session state, exactly as returned by new_session/new_round/submit_picks.","examples":[{"category_filter":null,"current_round":{"category":"everyday","id":"wur_003","option_a":"...","option_b":"..."},"players":["Alice","Bob"],"rounds":[],"served_ids":["wur_003"],"tally":{"a":0,"b":0}}],"title":"State","type":"object"},"picks":{"additionalProperties":{"type":"string"},"description":"Maps a player name (or any single label if solo) to 'a' or 'b'.","examples":[{"Alice":"a","Bob":"b"}],"title":"Picks","type":"object"}},"required":["state","picks"],"title":"submit_picksArguments","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 summary: the current round (if any), recent round results, and the","description":"A human-readable summary: the current round (if any), recent round results, and the\n    session-wide tally. Use for \"how are we doing\", \"show the current dilemma\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"state":{"additionalProperties":true,"description":"The current session state, exactly as returned by new_session/new_round/submit_picks.","examples":[{"category_filter":null,"current_round":{"category":"everyday","id":"wur_003","option_a":"...","option_b":"..."},"players":["Alice","Bob"],"rounds":[],"served_ids":["wur_003"],"tally":{"a":0,"b":0}}],"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}}}}