Onboard & sync players
Register a player the moment they sign up, keep their profile current, or find them by your own external_id. All in natural language.
TPP Public API · MCP connector
The whole public API, exposed as 28 agent-callable tools over the Model Context Protocol. Connect your agent, paste your existing API key, and run loyalty operations in natural language.
Works with
Register a player the moment they sign up, keep their profile current, or find them by your own external_id. All in natural language.
Credit a bonus, debit a redemption, or read the balance and its movement history. Money moves under a row lock, so an agent's retries can't double-spend.
Search products visible to your sub-brand and inspect their variants. Prices and availability are resolved and veiled server-side, so the agent only ever sees sell prices.
Reserve an order, follow it from pending to delivered, read carrier and tracking, or cancel before it ships. The agent confirms before anything destructive.
List the sub-brand's stores and read their configuration and catalogs, so the agent can point a player to the right store or attribute a redemption.
Reward whole cohorts in one sentence: “give 1000 coins to everyone who registered before June 2026” or “gift the VIPs”. Target by coins, order count, dates, country or segment.
In the backoffice, open Sub-brand → API keys and mint a tpp_live_* token with only the scopes the agent needs.
In ChatGPT (Developer Mode) or Claude, add a custom connector: paste the endpoint URL and your token as the Bearer credential.
The client lists the tools automatically. Ask in plain language and the agent picks the right calls, confirming before anything destructive.
Connector URL
Click to copy, then paste it with your bearer token into the connector settings.
Prefer to introspect first? The machine-readable manifest, with a JSON Schema per tool, lives at /api/mcp/tools.
The same operations a partner runs over HTTP, driven by an agent in plain language. Each reply names the tools it called.
Ask anything
Illustrative. Real replies depend on your data and your key's scopes.
Generated from the same registry the connector uses, so it is always in sync.
| Tool | Proxies to | Scope | Hints |
|---|---|---|---|
adjust_customer_coins | POST /customers/{id}/coins | customers:coins | idempotent |
bulk_adjust_customer_coins | POST /customers/bulk/coins | customers:coins | idempotent |
cancel_order | DELETE /orders/{id} | orders:delete | destructiveidempotent |
create_customer | POST /customers | customers:create | idempotent |
create_store_session | POST /store-sessions | store_sessions:create | |
delete_customer | DELETE /customers/{id} | customers:delete | destructiveidempotent |
get_brand_sub_brand | GET /brands/{brandId}/sub-brands/{subBrandId} | brands:read | read-only |
get_catalog | GET /catalogs/{id} | catalogs:read | read-only |
get_customer | GET /customers/{id} | customers:read | read-only |
get_customer_coins | GET /customers/{id}/coins | customers:read | read-only |
get_health | GET /health | customers:read | read-only |
get_order | GET /orders/{id} | orders:read | read-only |
get_order_reservation_request | GET /order-reservations/{id} | orders:read | read-only |
get_order_shipping | GET /orders/{id}/shipping | orders:read | read-only |
get_product | GET /products/{id} | products:read | read-only |
get_store | GET /stores/{id} | stores:read | read-only |
ingest_engine_event | POST /engine/events | engine:events | idempotent |
ingest_engine_webhook | POST /engine/webhooks/{code} | engine:events | |
list_catalogs | GET /catalogs | catalogs:read | read-only |
list_categories | GET /categories | categories:read | read-only |
list_customer_coin_movements | GET /customers/{id}/coins/movements | customers:read | read-only |
list_customers | GET /customers | customers:read | read-only |
list_orders | GET /orders | orders:read | read-only |
list_stores | GET /stores | stores:read | read-only |
reserve_order | POST /orders | orders:create | idempotent |
search_products | GET /products | products:read | read-only |
update_customer | PATCH /customers/{id} | customers:update | |
update_order_shipping | PATCH /orders/{id}/shipping | orders:update |
The connector forwards your bearer verbatim and stores no credentials. A tool whose endpoint needs a scope your key lacks simply returns 403, so a read-only key can't be talked into writing.
Money endpoints get an auto-generated Idempotency-Key per call, so an agent that retries when unsure never double-charges. Pass your own idempotency_key to repeat a call deliberately.
cancel_order and delete_customer are flagged destructive, so the client asks for confirmation before running them. Reads are flagged read-only and run freely.
Sub-brand scoping, the provider veil, rate limits and the audit log are all enforced by the API. The MCP is a thin passthrough, so nothing is weaker than a direct HTTP integration.
Write code against the REST API, or let an agent drive the same endpoints over MCP. Same key, same scopes, same guarantees.