Add a Paxum payout method
API reference

Add a Paxum payout method

Add a Paxum account as a payout method — what "Add Paxum" does in the dashboard, with a stricter e-mail check.

View as MarkdownUpdated Oct 30, 2026
POST/api/external/payouts/methodsNew

Add a Paxum account as a payout method — what "Add Paxum" does in the dashboard, with a stricter e-mail check.

The e-mail is looked up at Paxum and must be an active Paxum account: unknown or inactive accounts are refused with 422 paxum_account_not_active (the dashboard shows that on the card; an integration has nobody to show it to). If Paxum cannot be reached the answer is 502 paxum_unavailable — retry.

Safe to retry, no Idempotency-Key needed: adding an e-mail the account already has (case-insensitive) returns that existing method with 200 and Idempotent-Replayed: true instead of a duplicate; nickname / isDefault are then not applied (use PATCH).

isDefault: true makes it the method payouts go to. A MassPay wallet is set up with POST /payouts/masspay/profile instead.

The key's own account only (X-Dropfans-Account and agency-minted keys are refused) and only after the ID check (403 kyc_required).

Dropfans-operated integrations only, for now

At launch this endpoint answers 403 first_party_only to every other app. The read endpoints of this group are open to every key.

Authentication

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

Request body

Content type: application/json

NameTypeRequiredDescription
typestringRequiredThe method type. Only PAXUM_P2P is created here.
One of: PAXUM_P2P
paxumEmailstringRequiredThe e-mail of the creator’s Paxum account. Never returned unmasked.
Format: email
Max length: 254
nicknamestring | nullOptionalThe creator’s own label, shown instead of the masked e-mail.
Max length: 100
isDefaultbooleanOptionalMake it the default payout method.
Default: false
Paxum as the default method
{
  "type": "PAXUM_P2P",
  "paxumEmail": "[email protected]",
  "nickname": "Main Paxum",
  "isDefault": true
}

Responses

201The method was added (200 with `Idempotent-Replayed: true` when the account already had this e-mail).
NameTypeDescription
methodPayoutMethodSummaryThe method, masked.
Show child attributes
idstringPayout method id.
typestringProvider method type.
One of: PAXUM_P2P, MASSPAY, BANK_SWIFT
isDefaultbooleanTrue for the method payouts go to.
nicknamestring | nullThe creator’s own label for it.
labelstringDisplay label, masked (see Payout.method.label).
holderTypestring | nullWhether it was set up for the person or the company.
One of: INDIVIDUAL, BUSINESS
createdAtstringWhen the method was added.
Format: date-time
paxumobject | nullPAXUM_P2P only.
Show child attributes
emailstring | nullMasked Paxum e-mail, e.g. "j***@example.com".
lookupStatusstring | nullWhether the e-mail is a live Paxum account: active, inactive, not_found, unconfigured.
verificationStatusstring | nullPaxum identity match against the ID check: PENDING, COMPLETED, MISMATCH, UNAVAILABLE.
masspayobject | nullMASSPAY (payout wallet) only.
Show child attributes
countrystring | nullISO 3166-1 alpha-3 country.
currencystring | nullPayout currency (ISO 4217), when chosen.
payerNamestring | nullPayout option name, when chosen.
activatedbooleanTrue once the payee finished the wallet activation. Payout requests to a wallet need it.
bankobject | nullBANK_SWIFT only.
Show child attributes
last4string | nullLast 4 characters of the account number. The full IBAN / SWIFT is never returned.
countrystring | nullBank country (ISO alpha-2).
bankNamestring | nullBank name.
Example response
{
  "method": {
    "id": "clxpm0002method",
    "type": "PAXUM_P2P",
    "isDefault": true,
    "nickname": "Main Paxum",
    "label": "Main Paxum",
    "holderType": "INDIVIDUAL",
    "createdAt": "2026-10-30T10:00:00.000Z",
    "paxum": {
      "email": "j***@example.com",
      "lookupStatus": "active",
      "verificationStatus": null
    },
    "masspay": null,
    "bank": null
  }
}

Errors

StatusBodyWhen
400{"error":"paxumEmail is not a valid email","code":"invalid_paxum_email"}`paxumEmail` missing or not an e-mail.
400{"error":"type must be \"PAXUM_P2P\".","code":"unsupported_type"}`type` missing or another type (MASSPAY: use POST /payouts/masspay/profile).
400{"error":"Unknown field: iban. Allowed: type, paxumEmail, nickname, isDefault.","code":"unknown_field"}A field that is not in the table (`invalid_nickname` / `invalid_is_default` for a wrong type or length).
400{"error":"Invalid JSON body"}The body is not valid JSON (`invalid_body` when it is not an object).
401{"error":"Unauthorized","code":"unauthorized"}Missing or invalid API key.
403{"error":"Verify your identity (KYC) before setting up payouts.","code":"kyc_required"}The account has not passed the ID check.
403{"error":"Payout methods need the account’s own key — a key an agency minted for a managed account cannot read or change where payouts go.","code":"agency_key_not_allowed"}The key was minted by an agency for an account it manages.
403{"error":"This endpoint is only available to Dropfans-operated integrations.","code":"first_party_only"}During launch, payout-method endpoints are open to Dropfans-operated integrations only.
409{"error":"Another payout operation is running for this account. Try again in a moment.","code":"payout_busy"}Another payout operation holds the account’s payout lock. Retry.
422{"error":"No Paxum account uses this e-mail. Check it, or create the Paxum account first.","code":"paxum_account_not_active","lookupStatus":"not_found"}The e-mail is not an active Paxum account (`lookupStatus`: `not_found` or `inactive`).
502{"error":"Could not reach Paxum to check the e-mail. Try again in a moment.","code":"paxum_unavailable"}The Paxum lookup failed. Retry.
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` names another account. An agency can never change where a creator it manages is paid.

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 -X POST "https://www.dropfans.io/api/external/payouts/methods" \
  -H "Authorization: Bearer $DROPFANS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "type": "PAXUM_P2P",
  "paxumEmail": "[email protected]",
  "nickname": "Main Paxum",
  "isDefault": true
}'

Questions? [email protected]