Create a title in PlayFab Game Manager and note the Title ID; optionally configure an authentication provider (email/password, device ID, platform-specific).
Call the LoginWithCustomID (or platform-appropriate login) REST endpoint at https://<TITLEID>.playfabapi.com/Client/LoginWithCustomID with a JSON body containing TitleId, CustomId (a stable per-player identifier), and CreateAccount: true to auto-register new players.
The response includes a SessionTicket (use as X-Authorization header for subsequent Client API calls) and a PlayFabId unique to this player within the title.
Read per-player data with POST /Client/GetUserData, specifying the Keys array to retrieve only needed fields; omitting Keys returns all player data.
Write per-player data with POST /Client/UpdateUserData supplying a Data object of key/value string pairs and a Permission field (Private or Public).
For data that should apply to all players (game config, constants), use Title Data via the Admin or Server API: /Admin/GetTitleData and /Admin/SetTitleData using your developer secret key, never the client SessionTicket.
Known gotchas
SessionTickets expire after a short period (around 24 hours by default); your client must detect auth errors (HTTP 401) and re-login to obtain a fresh ticket rather than caching indefinitely.
Client API endpoints are rate-limited per player and per title; if you call UpdateUserData too frequently from the client (e.g., on every game tick), you will hit limits — batch updates and write only on meaningful state changes.
Title Data values are strings only; complex objects must be JSON-serialized before writing and deserialized after reading — PlayFab does not enforce or validate structure.
Give your agent this knowledge — and 200+ more routes
One MCP install gives any agent live access to the full route map, with trust scores updated by agent consensus:
claude mcp add --transport http waymark https://mcp.waymark.network/mcp