Payout history (paginated)
API reference

Payout history (paginated)

The account's payout history, newest first — the same rows as the creator's Payouts page, in integer cents.

View as MarkdownUpdated Oct 30, 2026
GET/api/external/payoutsNew

The account's payout history, newest first — the same rows as the creator's Payouts page, in integer cents.

It lists payouts sent by Dropfans (kind: "payout"), payouts recorded by an admin ("manual") and payout requests not fulfilled yet ("request"). Once a request is paid it is replaced by the payout that fulfilled it (requestId links them). Money in integer cents.

Like the dashboard, payout attempts that never moved money (failed / cancelled) are left out unless you ask for them with status, and a wallet load that was sent back is hidden together with its negative twin unless includeReversed=true (the pair nets to zero).

Keep the filters the same while you follow nextCursor.

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.

Query parameters

NameTypeRequiredDescription
sincestringOptionalOnly rows created (requests: made) at or after this time.
Format: date-time
untilstringOptionalOnly rows created at or before this time.
Format: date-time
statusstringOptionalComma-separated subset of requested, approved, pending, processing, paid, failed, cancelled, rejected. Default: everything except failed / cancelled payout attempts.
kindstringOptionalComma-separated subset of payout, manual, request. Default: all three.
includeReversedbooleanOptionalAlso return reversed wallet loads and their negative reversal rows.
Default: false
limitintegerOptionalPage size.
Default: 50
Min: 1
Max: 100
cursorstringOptionalnextCursor from the previous page.

Responses

200A page of rows. Money in cents.
NameTypeDescription
payoutsPayout[]Newest first.
Show child attributes
idstringId of the row. Unique across the three kinds — use it with GET /api/external/payouts/{id}.
kindstringpayout: sent by Dropfans (Paxum, MassPay wallet load, or settled by an admin). manual: paid outside the platform and recorded by an admin. request: a payout request the account made that has not been fulfilled into a payout yet.
One of: payout, manual, request
statusstringRequests: requested → approved → (processing for Paxum, from the moment they are made) → paid, or rejected / cancelled. Payouts: pending (in a batch, not sent yet) → processing (sent) → paid or failed; cancelled when an attempt was dropped. Manual payouts are always paid.
One of: requested, approved, pending, processing, paid, failed, cancelled, rejected
amountCentsintegerInteger **cents**. What is paid out (negative only on a reversal row).
currencystringAlways "USD".
One of: USD
sidestringWhich balance it draws from: creator (own sales), agency (income from managed creators / AI personas), affiliate (referral commission), share (partner shares of other accounts’ sales), or combined (several sides in one transfer — see sides).
sidesobjectThe amount split by side, integer cents. Adds up to amountCents.
Show child attributes
creatorCentsintegerCreator side, cents.
agencyCentsintegerAgency side, cents.
affiliateCentsintegerReferral commission, cents.
shareCentsintegerPartner shares, cents.
methodobject | nullThe destination frozen when the payout or request was made, masked. Null for manual payouts.
Show child attributes
typestringProvider method type.
One of: PAXUM_P2P, MASSPAY, BANK_SWIFT
labelstringDisplay label — the creator’s nickname, or e.g. "Paxum · j***@example.com", "Payout wallet · SWE", "Bank transfer · ••••1234". Never a full e-mail, IBAN or token.
notestring | nullRequests: the note sent with the request. Manual payouts: the note the admin recorded for the payee. Otherwise null.
failureMessagestring | nullWhy a failed payout failed, as reported by the provider. Null unless status is failed.
invoiceNumberinteger | nullPayout invoice number once the invoice exists. The invoice itself is in the dashboard.
requestIdstring | nullkind payout / manual: the request this payout fulfilled, if any.
payoutIdstring | nullkind request: the payout or manual payout that fulfilled it, if any.
createdAtstringWhen the payout was created or the request made. The list is ordered by this.
Format: date-time
initiatedAtstring | nullWhen the payout was sent to the provider.
Format: date-time
paidAtstring | nullWhen it was paid. Null unless status is paid (requests carry it on the fulfilling payout instead).
Format: date-time
failedAtstring | nullWhen it failed. Null unless status is failed.
Format: date-time
reversedAtstring | nullSet on a paid wallet load that was sent back (spendback): the money is available again. Its negative twin has reversalOfId. Both are hidden from GET /payouts unless includeReversed=true.
Format: date-time
reversalOfIdstring | nullSet on the negative row that reverses the payout with this id.
nextCursorstring | nullPass as cursor for the next page; null on the last page.
Example response
{
  "payouts": [
    {
      "id": "clxpr0001request",
      "kind": "request",
      "status": "requested",
      "amountCents": 34210,
      "currency": "USD",
      "side": "creator",
      "sides": {
        "creatorCents": 34210,
        "agencyCents": 0,
        "affiliateCents": 0,
        "shareCents": 0
      },
      "method": {
        "type": "MASSPAY",
        "label": "Payout wallet · SWE"
      },
      "note": "October",
      "failureMessage": null,
      "invoiceNumber": null,
      "requestId": null,
      "payoutId": null,
      "createdAt": "2026-10-30T09:12:00.000Z",
      "initiatedAt": null,
      "paidAt": null,
      "failedAt": null,
      "reversedAt": null,
      "reversalOfId": null
    },
    {
      "id": "clxpo0001payout",
      "kind": "payout",
      "status": "paid",
      "amountCents": 52000,
      "currency": "USD",
      "side": "combined",
      "sides": {
        "creatorCents": 40000,
        "agencyCents": 12000,
        "affiliateCents": 0,
        "shareCents": 0
      },
      "method": {
        "type": "PAXUM_P2P",
        "label": "Paxum · j***@example.com"
      },
      "note": null,
      "failureMessage": null,
      "invoiceNumber": 1042,
      "requestId": "clxpr0000request",
      "payoutId": null,
      "createdAt": "2026-10-15T08:00:00.000Z",
      "initiatedAt": "2026-10-15T08:00:05.000Z",
      "paidAt": "2026-10-15T08:03:41.000Z",
      "failedAt": null,
      "reversedAt": null,
      "reversalOfId": null
    }
  ],
  "nextCursor": null
}

Errors

StatusBodyWhen
400{"error":"since must be an ISO date","code":"invalid_since"}Unparseable `since` (`invalid_until` for `until`).
400{"error":"status must be a comma-separated subset of requested,approved,pending,processing,paid,failed,cancelled,rejected","code":"invalid_status"}Unknown status (`invalid_kind` for an unknown kind).
400{"error":"limit must be an integer from 1 to 100","code":"invalid_limit"}`limit` out of range.
400{"error":"Invalid cursor","code":"invalid_cursor"}The cursor was not one we returned.
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?since=2026-01-01T00%3A00%3A00Z&status=paid" \
  -H "Authorization: Bearer $DROPFANS_API_KEY"

Questions? [email protected]