Payout balance, eligibility and status
Everything a "Pay out" button needs in one call: balances, the minimum, the payout method and whether a payout request would be accepted right now.
/api/external/payouts/summaryNewEverything a "Pay out" button needs in one call: balances, the minimum, the payout method and whether a payout request would be accepted right now.
It returns the balance per bucket and per side, the minimum, the default payout method (masked), the open request, whether a payout is being sent, the upcoming releases, and whether a payout request would be accepted right now.
All money is integer cents. The balance is everything the account owns — its creator side (own sales), agency side (income from managed creators and AI personas), referral commission and partner shares — the same totals as the creator's Payouts page.
ineligibleReasons lists every gate that fails, in the order POST /payouts/requests checks them, with the same codes it answers with: kyc_required, payouts_disabled, consumer_account, no_method, masspay_not_activated, below_minimum, request_open, in_flight.
Authentication
Send the creator's API key as a bearer token: Authorization: Bearer dpfn_…. See Authentication & API keys.
An agency's own key can call this for a creator it manages by adding X-Dropfans-Account: <account id> (needs canViewStats). See Agencies.
Responses
| Name | Type | Description | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
accountId | string | The account this describes. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
currency | string | Always "USD". One of: USD | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
pendingCents | integer | Integer **cents**. Money the account owns (all sides) still inside the chargeback hold window; not payable yet. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
availableCents | integer | Integer cents. Money the account owns (all sides) that cleared the hold and is not in a payout yet. Can be negative (a refund of money already paid out is netted against future earnings). | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
processingCents | integer | Integer cents. Money the account owns (all sides) inside a payout that is being sent. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
paidOutCents | integer | Integer cents. Lifetime money the account owns (all sides) already paid out. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
sides | object | The same four buckets per side, integer cents.Show child attributes
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
requestableCents | integer | Integer cents a payout request would ask for right now: the available balance of every side that has money and no open request. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
minimumPayoutCents | integer | Integer cents. The available balance must reach this before a payout can be requested. 0 = no minimum. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
payoutsEnabled | boolean | False when Dropfans has paused payouts for the account. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
kycVerified | boolean | True once the account passed the ID check. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
defaultMethod | PayoutMethodSummary | null | Where payouts go, masked. Null when no method is set up (the creator adds one in the dashboard).Show child attributes
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
openRequest | Payout | null | The newest open payout request (requested, approved or processing), or null.Show child attributes
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
inFlight | boolean | True while a payout is pending or processing. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
upcoming | object[] | Creator-side earnings and partner shares still on hold, by the UTC day they become available. Soonest first.Show child attributes
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
eligible | boolean | True when POST /api/external/payouts/requests would be accepted now. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
ineligibleReasons | string[] | Every reason it would be refused, in the order the request checks them. Empty when eligible. |
{
"accountId": "clx2f8a1b0001qw3k",
"currency": "USD",
"pendingCents": 12050,
"availableCents": 34210,
"processingCents": 0,
"paidOutCents": 187500,
"sides": {
"creator": {
"pendingCents": 12050,
"availableCents": 34210,
"processingCents": 0,
"paidOutCents": 175500
},
"agency": {
"pendingCents": 0,
"availableCents": 0,
"processingCents": 0,
"paidOutCents": 12000
},
"affiliate": {
"pendingCents": 0,
"availableCents": 0,
"processingCents": 0,
"paidOutCents": 0
},
"share": {
"pendingCents": 0,
"availableCents": 0,
"processingCents": 0,
"paidOutCents": 0
}
},
"requestableCents": 34210,
"minimumPayoutCents": 2000,
"payoutsEnabled": true,
"kycVerified": true,
"defaultMethod": {
"id": "clxpm0001method",
"type": "MASSPAY",
"isDefault": true,
"nickname": null,
"label": "Payout wallet · SWE",
"holderType": "INDIVIDUAL",
"createdAt": "2026-09-02T10:00:00.000Z",
"paxum": null,
"masspay": {
"country": "SWE",
"currency": null,
"payerName": null,
"activated": true
},
"bank": null
},
"openRequest": null,
"inFlight": false,
"upcoming": [
{
"availableOn": "2026-11-04",
"amountCents": 4500
}
],
"eligible": true,
"ineligibleReasons": []
}Errors
| Status | Body | When |
|---|---|---|
| 401 | {"error":"Unauthorized","code":"unauthorized"} | Missing or invalid API key. |
| 400 | {"error":"X-Dropfans-Account must be an account id (from GET /api/external/agency/creators), not a username.","code":"invalid_account_header"} | `X-Dropfans-Account` is not an account id. |
| 403 | {"error":"This key cannot act for that account.","code":"account_not_managed"} | `X-Dropfans-Account` names an account this key cannot act for: not an agency’s own key, no ACCEPTED management, or the agency or account is suspended, banned or deleted (an unknown id gets the same answer). |
| 403 | {"error":"The agency does not have permission for this on that account.","code":"permission_denied","permission":"canViewStats"} | With `X-Dropfans-Account`: the agency lacks `canViewStats` on that account. |
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/payouts/summary" \
-H "Authorization: Bearer $DROPFANS_API_KEY"const res = await fetch(`https://www.dropfans.io/api/external/payouts/summary`, {
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/payouts/summary",
headers={"Authorization": f"Bearer {os.environ['DROPFANS_API_KEY']}"},
)
print(res.json())Notes
requestableCents is what a request would ask for: the available balance of every side that has money and no open request. The minimum is checked against the combined availableCents. A negative availableCents (a refund of money already paid out) is netted against future earnings.
Questions? [email protected]
