List your connected accounts
Your integration dashboard’s Accounts tab: every account your app has generated links for, with its all-time sales through your links and the commission booked on them.
/api/external/crm/accountsNewYour integration dashboard’s Accounts tab: every account your app has generated links for, with its all-time sales through your links and the commission booked on them.
Accounts that sold through your links without you generating them are listed too.
An account is connected while your app is the one that generated its links most recently. When another CRM generated them after you, movedAway.at says when; which CRM is never disclosed. Agencies are the sum of their children (their creators and their own sales as a creator); pass flat=true to get only those rows, each with agencyId, so that a column sums without double counting.
Amounts are integer US cents, excluding tax, before our platform fee; refunded and charged-back sales are left out.
Authentication
Send the creator's API key as a bearer token: Authorization: Bearer dpfn_…. See Authentication & API keys.
Query parameters
| Name | Type | Required | Description |
|---|---|---|---|
flat | boolean | Optional | true: no nesting — plain accounts plus every agency’s rows, each with agencyId; agency sum rows left out.Default: false |
Responses
| Name | Type | Description | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
currency | string | Currency of every *Cents field. One of: USD | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
accounts | CrmConnectedAccount[] | Connected first, then by viaLinksCents.Show child attributes
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
totals | CrmAccountsTotals | Sums over every account.Show child attributes
|
{
"currency": "USD",
"accounts": [
{
"id": "clxac0001acct",
"username": "valeria",
"name": "Valeria",
"kind": "account",
"connected": true,
"connectedAt": "2026-10-17T16:05:00.000Z",
"movedAway": null,
"links": 4,
"allTimeGrossCents": 250000,
"viaLinksCents": 64000,
"crmEarnedCents": 3200
},
{
"id": "clxac0002acct",
"username": "nora",
"name": "Nora",
"kind": "account",
"connected": false,
"connectedAt": "2026-09-02T10:00:00.000Z",
"movedAway": {
"at": "2026-10-20T08:30:00.000Z"
},
"links": 2,
"allTimeGrossCents": 90000,
"viaLinksCents": 12000,
"crmEarnedCents": 600
}
],
"totals": {
"links": 6,
"allTimeGrossCents": 340000,
"viaLinksCents": 76000,
"crmEarnedCents": 3800
}
}Errors
| Status | Body | When |
|---|---|---|
| 400 | {"error":"flat must be true or false.","code":"invalid_input","field":"flat"} | Anything else. |
| 401 | {"error":"Unauthorized","code":"unauthorized"} | Missing or invalid API key. |
| 403 | {"error":"This endpoint needs a key bound to an approved app.","code":"app_key_required"} | A Personal key was used. |
| 403 | {"error":"Use the app owner's key for this endpoint.","code":"owner_key_required"} | The key was minted by a creator for themselves. App-level calls need a key held by your app owner: their own, or one their agency minted for its personas or managed creators. |
| 400 | {"error":"This endpoint only acts as the key’s own account — send it without X-Dropfans-Account.","code":"account_header_not_allowed"} | `X-Dropfans-Account` was sent. These endpoints always answer for the key’s app. |
Rate limiting
Every response carries the X-RateLimit-Tier header and, on limited tiers, the per-minute and per-day trios — read X-RateLimit-Remaining and X-RateLimit-Reset instead of hardcoding limits. Details in Rate limits.
Code samples
curl "https://www.dropfans.io/api/external/crm/accounts" \
-H "Authorization: Bearer $DROPFANS_API_KEY"const res = await fetch(`https://www.dropfans.io/api/external/crm/accounts`, {
headers: {
Authorization: `Bearer ${process.env.DROPFANS_API_KEY}`,
},
});
console.log(await res.json());import os
import requests
res = requests.get(
"https://www.dropfans.io/api/external/crm/accounts",
headers={"Authorization": f"Bearer {os.environ['DROPFANS_API_KEY']}"},
)
print(res.json())Questions? [email protected]
