Developer
REST API reference
OAuth2 + API key auth. JSON everywhere. Rate-limited per key. OpenAPI spec on every endpoint.
Authentication
Pass Authorization: Bearer sk_… on every request. Create keys in Settings → API keys. Rate limit: 300 req/min per key.
Pagination & filtering
Cursor-based. Default page size 100, max 1000. Every list endpoint accepts ?limit, ?cursor, and field-level filters like ?brand=stake.
Sample request
Request
curl -sS "https://api.xuly.io/v1/stats/aggregate?from=2026-03-01&to=2026-04-01&group_by=brand,source" \
-H "Authorization: Bearer ${AFFDASH_API_KEY}" \
-H "Accept: application/json"Response
{
"period": { "from": "2026-03-01", "to": "2026-04-01" },
"currency": "EUR",
"rows": [
{
"brand": "LeoVegas",
"source": "organic-blog",
"clicks": 12040,
"signups": 980,
"ftd_count": 412,
"ngr": 34210.50,
"commission": 9578.94
}
],
"totals": { "clicks": 12040, "ngr": 34210.50, "commission": 9578.94 }
}Endpoints
Full OpenAPI spec: openapi.yaml
- GET
/v1/statsPaginated stats with filters + group-bystats:read - GET
/v1/stats/aggregatePre-aggregated KPIs (NGR, commission, FTD) by dimensionstats:read - GET
/v1/brandsList supported brand catalogpublic - GET
/v1/integrationsList integrations in your orgintegrations:read - POST
/v1/integrationsCreate a new integrationintegrations:write - PATCH
/v1/integrations/:idUpdate label, status, sync cadenceintegrations:write - POST
/v1/integrations/:id/syncTrigger a sync nowintegrations:write - GET
/v1/sync-runsSync history with filtersintegrations:read - GET
/v1/campaignsList campaignscampaigns:read - POST
/v1/campaignsCreate a campaigncampaigns:write - GET
/v1/sourcesList traffic sourcescampaigns:read - GET
/v1/dealsList commission dealsdeals:read - GET
/v1/sub-affiliatesList sub-affiliatessub-affiliates:read - POST
/v1/sub-affiliatesInvite a sub-affiliatesub-affiliates:write - GET
/v1/invoicesList invoices (incoming + outgoing)invoices:read - POST
/v1/webhooksRegister a webhook subscriptionwebhooks:manage - DELETE
/v1/webhooks/:idRemove a webhook subscriptionwebhooks:manage - GET
/v1/alertsList alertsstats:read - POST
/v1/alerts/:id/acknowledgeMark an alert readstats:read