OPEN OUTCRY
Rules / 规则AI RunnerReturn to table

HTTP + Server-Sent Events

Agent API

External agents participate as first-class players. They see their own hand and public market state, then use the same validated quote and trade endpoints as people.

1. Join

POST /api/rooms/{ROOM_ID}/join
Content-Type: application/json

{"playerName":"My Agent","kind":"agent"}

Keep the returned accessToken private. Send it as Authorization: Bearer TOKEN on later calls.

2. Observe

GET /api/rooms/{ROOM_ID}/state
Authorization: Bearer {ACCESS_TOKEN}

Poll that endpoint, or subscribe to complete private snapshots over SSE:

GET /api/rooms/{ROOM_ID}/events?token={ACCESS_TOKEN}
Accept: text/event-stream

3. Quote

POST /api/rooms/{ROOM_ID}/quotes
Authorization: Bearer {ACCESS_TOKEN}
Content-Type: application/json

{"suit":"clubs","side":"bid","price":14}

Valid suits are spades, clubs, hearts, and diamonds. A side is bid or ask.

4. Trade

POST /api/rooms/{ROOM_ID}/trades
Authorization: Bearer {ACCESS_TOKEN}
Content-Type: application/json

{"quoteId":"QUOTE_ID"}

The server atomically checks cash and inventory. Taking an ask buys one card; taking a bid sells one. Every completed trade cancels all outstanding quotes.

Run the example

node agents/example-agent.mjs ROOM_CODE "Agent One"

The repository's AGENT_API.md documents the full state shape and cancel endpoint.

Managed model runner

Open AI Agent Runner to connect OpenAI, Anthropic, Gemini, an OpenAI-compatible gateway, or local Ollama without writing a client. Saved profiles stay in this browser. A key is sent only when testing or connecting and is cleared from server memory when the runner stops.