Daily earnings per creator
API reference

Daily earnings per creator

One row per managed creator per day with revenue, across every account you may see stats for (`canViewStats`), in integer cents. Paged with a cursor.

View as MarkdownUpdated Oct 31, 2026
GET/api/external/v1/agency/earningsalso served at /api/external/agency/earningsNew

One row per managed creator per day with revenue, across every account you may see stats for (canViewStats), in integer cents. Paged with a cursor.

Rows come ordered by date, then creatorId; days without revenue have no row. The figures match GET /api/external/v1/earnings/summary for that creator: refunds and chargebacks are left out, and days are whole local days in timezone. The agency’s own sales are not included — read those with the summary, without X-Dropfans-Account.

Keep startDate, endDate and timezone the same while you follow nextCursor.

Authentication

Send the creator's API key as a bearer token: Authorization: Bearer dpfn_…. See Authentication & API keys.

Needs the agency's own key, sent without X-Dropfans-Account.

Query parameters

NameTypeRequiredDescription
startDatestringOptionalFirst local day (YYYY-MM-DD). Defaults to 29 days before endDate. At most 366 days per window.
Format: date
endDatestringOptionalLast local day (YYYY-MM-DD), inclusive. Defaults to today in timezone.
Format: date
timezonestringOptionalIANA timezone for the days. tz is accepted too; an unknown zone is a 400.
Default: "UTC"
Format: iana-timezone
limitintegerOptionalRows per page.
Default: 100
Min: 1
Max: 500
cursorstringOptionalnextCursor from the previous page.

Responses

200A page of rows. All money in cents.
NameTypeDescription
startDatestringThe window’s first day.
Format: date
endDatestringThe window’s last day (inclusive).
Format: date
timezonestringThe timezone used.
currencystringAlways USD.
dataobject[]Rows, by date then creatorId.
Show child attributes
creatorIdstringThe account id (as in GET /api/external/v1/agency/creators).
datestringThe local day.
Format: date
grossCentsintegerBuyer-paid minus VAT, before the platform fee.
netCentsintegerThe creator’s earnings after the platform fee.
countintegerTransactions that day.
nextCursorstring | nullPass as cursor for the next page; null on the last page.
Example response
{
  "startDate": "2026-10-01",
  "endDate": "2026-10-31",
  "timezone": "Europe/Stockholm",
  "currency": "USD",
  "data": [
    {
      "creatorId": "cmh4v2q8k0003xy9z7w6v5u4t",
      "date": "2026-10-01",
      "grossCents": 8200,
      "netCents": 6560,
      "count": 3
    },
    {
      "creatorId": "cmh3k9p2a0002cd5e6f7g8h9j",
      "date": "2026-10-01",
      "grossCents": 4050,
      "netCents": 3240,
      "count": 2
    }
  ],
  "nextCursor": "MjAyNi0xMC0wMXxjbWg0djJxOGswMDAzeHk5ejd3NnY1dTR0"
}

Errors

StatusBodyWhen
400{"error":"Agency endpoints act as the agency itself — send them without X-Dropfans-Account.","code":"account_header_not_allowed"}The request carried `X-Dropfans-Account`. Agency endpoints always act as the agency.
401{"error":"Unauthorized","code":"unauthorized"}Missing or invalid API key.
403{"error":"This endpoint needs a verified agency's own API key.","code":"agency_key_required"}The key is not a verified agency’s own key — a creator’s key, or a key an agency minted for one of its creators.
400{"error":"timezone must be an IANA timezone name, e.g. Europe/Stockholm","code":"invalid_timezone"}Unknown `timezone`.
400{"error":"startDate and endDate must be YYYY-MM-DD dates","code":"invalid_date"}Malformed or impossible date.
400{"error":"endDate must be on or after startDate","code":"invalid_date_range"}`startDate` is after `endDate`.
400{"error":"Date range too large — at most 366 days.","code":"range_too_large"}The window is longer than 366 days.
400{"error":"limit must be an integer from 1 to 500","code":"invalid_limit"}Bad `limit`.
400{"error":"Invalid cursor","code":"invalid_cursor"}The cursor was not one we returned.
400{"error":"This endpoint acts as the key’s own account or app — call it without /creators/{creatorId}.","code":"creator_scope_not_allowed"}Called under /api/external/v1/creators/{creatorId}/ — this endpoint always acts as the key’s own account, agency or app.
403{"error":"This app does not have the agency API category enabled. Contact support to enable it.","code":"api_category_disabled","category":"agency"}Your app has the Agency roster [API category](/developers/concepts/api-categories) switched off.

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/v1/agency/earnings?startDate=2026-10-01&endDate=2026-10-31&timezone=Europe%2FStockholm" \
  -H "Authorization: Bearer $DROPFANS_API_KEY"

Questions? [email protected]