Go from zero to a working multiplayer lobby in 5 minutes using nothing but curl.
This guide gets you a working lobby in under 5 minutes. No dashboard setup. No player auth. Just curl.By the end, you’ll have created a lobby, joined it with a second player, updated player state, and torn it all down.
The default in the URL is a lobby config name. If no config with that name exists in your dashboard, PlayFlow uses sensible defaults:
maxPlayers: 2
timeout: 300s
serverSize: small
Build: latest default
For production games, you’ll create named configs in the dashboard (casual, ranked_2v2, etc.) with custom matchmaking rules and server overrides. But you don’t need to yet.
Returns the full lobby state. If you’re not in a lobby, returns 404.
/me is the player-centric primitive throughout the API. Instead of tracking lobby IDs in your game, just use /me endpoints — PlayFlow finds your lobby automatically from the x-player-id header.
Use server.ports[0].host and server.ports[0].port to connect your game client. The server transitions from launching → running in ~10-30 seconds (or ~5s with pool servers).
Only the host can start the game. If a non-host tries, they get a 403 Not host.
When the last player leaves, the lobby auto-deletes. The response is {"status": "lobby_deleted"}.If the host leaves while others remain, host transfers to the next player automatically.
You’ve now exercised the full lobby lifecycle using just 6 API calls. The full API adds matchmaking, host-only actions (kick, settings), invite code joining, lobby browsing, real-time SSE updates, and more — but this is the 80% of what most games need.
Lobby Lifecycle
Host-only actions (kick, settings, transfer host), leaving behavior, error handling.
Matchmaking
Skip the manual “start” — let PlayFlow find opponents automatically.