Endpoint reference
Every route in the partner API. All require a bearer key and are scoped to your domains. Base URL: /api/v1.
Money fields are USD/your currency, rounded to 2 decimals. Timestamps are ISO-8601 (UTC). Conversion-rate fields are fractions (e.g. 0.12 = 12%).
Identity
GET /v1/me
Returns your account identity and domain count — useful as a key/health check.
curl -s https://your-host/api/v1/me -H "Authorization: Bearer wk_live_xxxx"
{
"ok": true,
"data": { "workerId": "…", "displayName": "Acme Media", "domains": 3 }
}
Stats
GET /v1/stats
Funnel + acquisition money + your earnings for a date range.
| Query | Type | Description |
|---|---|---|
from | ISO date | Range start. Default: 30 days ago. |
to | ISO date | Range end. Default: now. Max span 92 days. |
curl -s "https://your-host/api/v1/stats?from=2026-06-01&to=2026-06-19" \
-H "Authorization: Bearer wk_live_xxxx"
{
"ok": true,
"data": {
"range": { "from": "2026-06-01T00:00:00.000Z", "to": "2026-06-19T00:00:00.000Z" },
"funnel": {
"visits": 12840, "leads": 980, "registrations": 910,
"ftd": 142, "depositors": 156, "deposits": 233, "repeatDeposits": 77
},
"money": {
"depositSum": 11620.50, "avgDeposit": 49.87,
"arpu": 12.77, "arppu": 74.49, "earnings": 3486.15
},
"conversion": { "crVisitReg": 0.0709, "crRegDep": 0.1714, "crVisitDep": 0.0121 },
"earningsLifecycle": { "pendingUsd": 1240.00, "inFlightUsd": 0, "paidUsd": 2246.15 }
}
}
Stats breakdown
GET /v1/stats/breakdown
The same funnel pivoted by an acquisition dimension.
| Query | Type | Description |
|---|---|---|
dim | enum | clickId | utm_source | utm_campaign | utm_medium | utm_content | geo | domain | landing. Default clickId. |
from / to | ISO date | Range (same rules as /stats). |
curl -s "https://your-host/api/v1/stats/breakdown?dim=utm_campaign" \
-H "Authorization: Bearer wk_live_xxxx"
{
"ok": true,
"data": {
"dim": "utm_campaign",
"range": { "from": "…", "to": "…" },
"items": [
{
"key": "camp1", "label": "camp1",
"registrations": 320, "ftd": 51, "depositors": 60,
"deposits": 88, "depositSum": 4310.00, "arppu": 71.83,
"crRegDep": 0.1875, "visits": null
}
]
}
}
visits is only populated for dim=domain; it's null otherwise.
Conversions feed
GET /v1/conversions
The CAPI source stream: a unified, ascending feed of registration and deposit events. Poll forward with nextCursor. Each item carries attribution and match signals.
| Query | Type | Description |
|---|---|---|
type | enum | all | registration | deposit. Default all. |
from / to | ISO date | Range (max span 92 days). |
limit | int | Page size. Default 100, max 500. |
cursor | string | Opaque cursor from the previous page. |
curl -s "https://your-host/api/v1/conversions?type=deposit&limit=100" \
-H "Authorization: Bearer wk_live_xxxx"
{
"ok": true,
"data": {
"items": [
{
"id": "dep:9f2c…", "type": "deposit",
"occurredAt": "2026-06-18T20:14:03.000Z",
"leadId": "…", "eventId": "dep:9f2c…", "externalId": "…",
"pixelId": "123456789",
"geo": "DE", "locale": "es", "timezone": "America/Mexico_City",
"domain": "play.example.com",
"eventSourceUrl": "https://play.example.com/?subid=abc123",
"value": 50.00, "currency": "USDT",
"clickId": "abc123", "utmSource": "fb", "utmMedium": null,
"utmCampaign": "camp1", "utmContent": null, "utmTerm": null,
"sub2": "adset_7", "sub3": null,
"ip": "203.0.113.7", "userAgent": "Mozilla/5.0 …",
"fbp": "fb.1.…", "fbc": "fb.1.…", "fbclid": "IwAR…"
}
],
"nextCursor": "eyJ0cyI6…"
}
}
Registration events have value and currency set to null. The id is stable (reg:<leadId> / dep:<depositId>) — use it to dedupe on your side.
:::note CAPI dedup contract
Our browser Pixel fires Lead / Purchase with eventID equal to this feed's eventId. Send the same value as event_id (with the matching event_name: registration → Lead, deposit → Purchase) in your Conversions API POST so Meta collapses both into one event. Use externalId as user_data.external_id, ip / userAgent / fbp / fbc for match quality, geo as user_data.country (lowercase, hashed) and eventSourceUrl as event_source_url. For deposit values report currency USD when the feed says USDT (1:1 accounting).
:::
Leads
GET /v1/leads
Your registered players with attribution and a per-lead deposit rollup, newest first.
| Query | Type | Description |
|---|---|---|
from / to | ISO date | Registration date range. |
limit | int | Default 100, max 500. |
cursor | string | Opaque cursor for the next page. |
deposited | bool | deposited=true → only leads that deposited. |
curl -s "https://your-host/api/v1/leads?deposited=true&limit=50" \
-H "Authorization: Bearer wk_live_xxxx"
{
"ok": true,
"data": {
"items": [
{
"id": "…", "createdAt": "2026-06-18T19:55:00.000Z",
"geo": "DE", "locale": "es", "timezone": "America/Mexico_City",
"domain": "play.example.com",
"clickId": "abc123", "utmSource": "fb", "utmMedium": null,
"utmCampaign": "camp1", "utmContent": null, "utmTerm": null,
"sub2": "adset_7", "sub3": null,
"hasDeposited": true, "depositCount": 2,
"depositSum": 100.00, "firstDepositAt": "2026-06-18T20:14:03.000Z"
}
],
"nextCursor": "eyJ0cyI6…"
}
}
Lead detail
GET /v1/leads/{id}
Full profile for one of your leads. Returns 404 if the lead isn't on one of your domains. Includes everything from the list item plus match signals, your accrued income for the lead, and the deposit/event history.
curl -s https://your-host/api/v1/leads/<id> -H "Authorization: Bearer wk_live_xxxx"
{
"ok": true,
"data": {
"id": "…", "createdAt": "…", "geo": "DE", "locale": "es",
"timezone": "America/Mexico_City", "domain": "play.example.com",
"clickId": "abc123", "utmSource": "fb", "sub2": "adset_7",
"hasDeposited": true, "depositCount": 2, "depositSum": 100.00,
"firstDepositAt": "…",
"pixelId": "123456789", "fbp": "fb.1.…", "fbc": "fb.1.…",
"fbclid": "IwAR…", "landingUrl": "https://play.example.com/?subid=abc123",
"ip": "203.0.113.7", "userAgent": "Mozilla/5.0 …",
"earning": 30.00,
"deposits": [
{ "id": "…", "createdAt": "…", "amount": 50.00, "currency": "USDT", "status": "APPROVED" }
],
"events": [
{ "id": "…", "createdAt": "…", "eventName": "Purchase", "url": "https://…" }
]
}
}
Login link (session recovery)
POST /v1/leads/{id}/login-link
Issues a one-time sign-in link for one of YOUR leads. Use it when a player lost their session (registered in incognito, cleared cookies): send them the URL and they re-enter as the same user — balance, deposits and progress intact. Advise the player not to open it in incognito mode again.
curl -s -X POST https://your-host/api/v1/leads/<id>/login-link \
-H "Authorization: Bearer wk_live_xxxx"
{
"ok": true,
"data": {
"url": "https://play.example.com/r/6vJq…",
"expiresAt": "2026-06-21T20:14:03.000Z",
"ttlHours": 72,
"singleUse": true
}
}
Links are single-use, expire after 72 hours and are rate-limited per account. Returns 404 if the lead isn't on one of your domains and 400 if the lead is not eligible (e.g. banned).
Earnings
GET /v1/earnings
Your earnings lifecycle totals plus recent payouts.
curl -s https://your-host/api/v1/earnings -H "Authorization: Bearer wk_live_xxxx"
{
"ok": true,
"data": {
"pendingUsd": 1240.00, "inFlightUsd": 0, "paidUsd": 2246.15,
"payouts": [
{
"id": "…", "createdAt": "2026-06-10T12:00:00.000Z",
"chain": "TRON", "currency": "USDT", "amount": 2246.15,
"txHash": "0x…", "status": "CONFIRMED"
}
]
}
}
Domains
GET /v1/domains
Your domains and their provisioning/health status.
curl -s https://your-host/api/v1/domains -H "Authorization: Bearer wk_live_xxxx"
{
"ok": true,
"data": {
"domains": [
{
"id": "…", "host": "play.example.com", "label": "EU",
"enabled": true, "status": "ACTIVE",
"dnsVerifiedAt": "2026-05-01T10:00:00.000Z",
"currency": "USDT", "landingVariant": "default",
"pixelDefault": "123456789", "createdAt": "2026-04-28T09:00:00.000Z"
}
]
}
}