List paid orders (per-fan references)
API reference

List paid orders (per-fan references)

Paid drop orders of the key's account, newest first — the polling twin of the [drop.paid webhook](/developers/webhooks/overview).

View as MarkdownUpdated Oct 17, 2026
GET/api/external/ordersNew

Paid drop orders of the key's account, newest first — the polling twin of the drop.paid webhook.

Filter by externalRef to answer "did this fan pay?" on a shared drop, or by productId / since to sweep. Refunded and charged-back orders stay in the list with their status — act on status: "paid" only.

Authentication

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

Query parameters

NameTypeRequiredDescription
productIdstringOptionalOnly orders for this drop.
externalRefstringOptionalOnly orders bought through links carrying this reference.
Max length: 32
Pattern: ^[A-Za-z0-9_-]{1,32}$
sincestringOptionalOnly orders paid at or after this time.
Format: date-time
limitintegerOptionalPage size.
Default: 50
Min: 1
Max: 100
cursorstringOptionalnextCursor from the previous page.

Responses

200A page of orders.
NameTypeDescription
ordersOrder[]Newest first.
Show child attributes
orderIdstringThe order id. Unique per sale — dedupe on it.
productIdstringThe drop that was bought.
accountIdstringThe creator who sold it (the account behind the key).
externalRefstring | nullYour per-fan checkout reference from the link the buyer opened (?m= on the web, b_{productId}_{ref} in Telegram). Null when the buyer came without one. Not proof of identity — the buyer can edit the link.
Max length: 32
Pattern: ^[A-Za-z0-9_-]{1,32}$
amountCentsintegerGross buyer-paid total in **cents** (VAT included).
currencystringAlways USD.
One of: USD
paidAtstring | nullWhen the payment settled (UTC).
Format: date-time
paidWithstringCard, or the buyer’s prepaid wallet credits.
One of: card, credits
statusstringCurrent state of the sale.
One of: paid, refunded, charged_back
buyerobjectWho paid. Every field may be null for a guest checkout.
Show child attributes
idstring | nullThe buyer’s account id, when signed in.
emailstring | nullBilling / account email.
Format: email
telegramUserIdstring | nullTelegram user id (as a string) when the buyer used the Mini App — cross-check it against your externalRef.
telegramUsernamestring | nullTelegram @username without the @, when known.
nextCursorstring | nullPass as cursor for the next page; null on the last page.
Example response
{
  "orders": [
    {
      "orderId": "clxor0001order",
      "productId": "clxdr0p000001prod",
      "accountId": "clx2f8a1b0001qw3k",
      "externalRef": "tg_48213377",
      "amountCents": 2750,
      "currency": "USD",
      "paidAt": "2026-10-17T16:20:00.000Z",
      "paidWith": "card",
      "status": "paid",
      "buyer": {
        "id": "clxbu0001buyer",
        "email": "[email protected]",
        "telegramUserId": "48213377",
        "telegramUsername": "fan_one"
      }
    }
  ],
  "nextCursor": null
}

Errors

StatusBodyWhen
400{"error":"externalRef must be 1–32 of A-Z a-z 0-9 _ -"}Malformed reference.
400{"error":"since must be an ISO date"}Unparseable `since`.
401{"error":"Unauthorized","code":"unauthorized"}Missing or invalid API key.

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/orders?productId=clxdr0p000001prod&externalRef=tg_48213377" \
  -H "Authorization: Bearer $DROPFANS_API_KEY"

Questions? [email protected]