Skip to main content

Endpoint reference

Every route in the partner API. All require a bearer key and are scoped to your domains. Base URL: /api/v1.

note

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.

Request
curl -s https://your-host/api/v1/me -H "Authorization: Bearer wk_live_xxxx"
Response
{
"ok": true,
"data": { "workerId": "…", "displayName": "Acme Media", "domains": 3 }
}

Stats

GET /v1/stats

Funnel + acquisition money + your earnings for a date range.

QueryTypeDescription
fromISO dateRange start. Default: 30 days ago.
toISO dateRange end. Default: now. Max span 92 days.
Request
curl -s "https://your-host/api/v1/stats?from=2026-06-01&to=2026-06-19" \
-H "Authorization: Bearer wk_live_xxxx"
Response
{
"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.

QueryTypeDescription
dimenumclickId | utm_source | utm_campaign | utm_medium | utm_content | geo | domain | landing. Default clickId.
from / toISO dateRange (same rules as /stats).
Request
curl -s "https://your-host/api/v1/stats/breakdown?dim=utm_campaign" \
-H "Authorization: Bearer wk_live_xxxx"
Response
{
"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.

QueryTypeDescription
typeenumall | registration | deposit. Default all.
from / toISO dateRange (max span 92 days).
limitintPage size. Default 100, max 500.
cursorstringOpaque cursor from the previous page.
Request
curl -s "https://your-host/api/v1/conversions?type=deposit&limit=100" \
-H "Authorization: Bearer wk_live_xxxx"
Response
{
"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.

QueryTypeDescription
from / toISO dateRegistration date range.
limitintDefault 100, max 500.
cursorstringOpaque cursor for the next page.
depositedbooldeposited=true → only leads that deposited.
Request
curl -s "https://your-host/api/v1/leads?deposited=true&limit=50" \
-H "Authorization: Bearer wk_live_xxxx"
Response
{
"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.

Request
curl -s https://your-host/api/v1/leads/<id> -H "Authorization: Bearer wk_live_xxxx"
Response (additional fields)
{
"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://…" }
]
}
}
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.

Request
curl -s -X POST https://your-host/api/v1/leads/<id>/login-link \
-H "Authorization: Bearer wk_live_xxxx"
Response
{
"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.

Request
curl -s https://your-host/api/v1/earnings -H "Authorization: Bearer wk_live_xxxx"
Response
{
"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.

Request
curl -s https://your-host/api/v1/domains -H "Authorization: Bearer wk_live_xxxx"
Response
{
"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"
}
]
}
}