Poker Panel Developer API
Read-only JSON API for venues running Poker Panel: real-time table events over WebSocket, player stats and profiles, full hand histories, webhooks. One key per card room — works the same for a single room or a network.
v1 · liveQuickstart
curl https://pokerpanel.app/v1 # public discovery — try it now
curl -H "Authorization: Bearer $POKERPANEL_API_KEY" \
https://pokerpanel.app/v1/players
Base URL https://pokerpanel.app/v1 · REST auth Authorization: Bearer · WebSocket auth ?key= · CORS on everything · 240 req/min + 5 sockets per key.
Endpoints
| Endpoint | Returns |
|---|---|
GET /v1 · /v1/key | Discovery · which venue this key belongs to |
GET /v1/venue | Venue, live flag, current game & stakes |
GET /v1/live/state | Table now: seats, stacks, board, pot, action |
WS /v1/live/events?key=… | Real-time events (below) |
GET /v1/players · /v1/players/{id} | Roster · profile + lifetime VPIP, PFR, 3-bet, AF, WTSD, W$SD, BB/100 |
GET /v1/leaderboard?period=YYYY-MM | Monthly or all-time (omit period) |
GET /v1/sessions · /v1/sessions/{uid} | Nights of poker |
GET /v1/hands?page=N · /v1/hands/{id} | Hand summaries · full action-by-action replay |
GET/POST /v1/webhooks · DELETE /v1/webhooks/{id} | HTTPS callbacks (hand.finished), HMAC-signed |
Historical endpoints serve 24/7 — even when the venue's Mac is off. player_id is a permanent UUID (survives renames and merges — safe to cache). v1 only changes additively: ignore unknown fields and event kinds and your integration keeps working.
The event stream
On connect: one state frame, then events. Kinds: start_hand · player_action · deal_street · street_advance · end_hand · payout_applied. Ordered by seq; the next state frame heals any drop.
{"type":"event","seq":4182,"ts":1786500000,"kind":"player_action",
"payload":{"hand_number":214,"seat_id":3,"action_type":"raise","amount":1200,"street":"turn"}}
Integrity rules
- No live hole cards, ever — enforced by a server-side whitelist, not a setting.
- Hand histories carry shown-at-showdown cards only; mucked hands have no hole_cards field.
- Money display is venue policy: big blinds (default), dollars, or hidden.
- Venues control the roster — which players appear and under what name.
- Real hands only; test and simulated deals never enter the API.
Networks of card rooms
The API is per-venue by design: one key per room, identical endpoints at every room. A network app is a loop over its keys — GET /v1/key tells you which room a key belongs to, and each room's operator can issue or revoke your key from their own rig, instantly. Aggregate leaderboards, cross-room player apps, and network dashboards are all client-side joins on player_id + venue.
Get a key
Ask the card room — venues on the Card Room plan issue read-only keys directly from Poker Panel, no middleman. Building something bigger, or want a sandbox venue? Email with what you're building.
[email protected]