MassPay payout profile
The MassPay payout profile behind the payout wallet, read live from MassPay, with the required fields it still lacks in `missingFields`.
/api/external/v1/payouts/masspay/profilealso served at /api/external/payouts/masspay/profileNewThe MassPay payout profile behind the payout wallet, read live from MassPay, with the required fields it still lacks in missingFields.
Before the payee exists (provisioned: false) the profile is a prefill from the account (name, e-mail, country) for your form. A payee created automatically at the ID check often has no address yet: missingFields then lists what POST /payouts/masspay/profile has to send. Personal data — the key's own account only.
Payouts are an API category that is off for every app until we switch it on — ask support. Personal keys can read payouts but get 403 app_key_required here.
Authentication
Send the creator's API key as a bearer token: Authorization: Bearer dpfn_…. See Authentication & API keys.
Responses
| Name | Type | Description | |||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
provisioned | boolean | True once the payee exists at MassPay. | |||||||||||||||||||||||||||||||||||||||||||||
status | string | null | MassPay’s status for the payee (e.g. ACTIVE). Null before it exists. | |||||||||||||||||||||||||||||||||||||||||||||
missingFields | string[] | Required fields blank at MassPay. Empty when complete (and before the payee exists). | |||||||||||||||||||||||||||||||||||||||||||||
profile | MasspayProfile | The values. Blank fields are empty strings.Show child attributes
|
{
"provisioned": true,
"status": "ACTIVE",
"missingFields": [
"address1",
"city",
"stateProvince",
"postalCode"
],
"profile": {
"accountType": "INDIVIDUAL",
"businessName": "",
"firstName": "Jane",
"middleName": "",
"lastName": "Doe",
"email": "jane@example.com",
"mobileNumber": "46701234567",
"language": "en",
"dateOfBirth": "1994-05-17",
"country": "SWE",
"address1": "",
"address2": "",
"city": "",
"stateProvince": "",
"postalCode": ""
}
}Errors
| Status | Body | When |
|---|---|---|
| 401 | {"error":"Unauthorized","code":"unauthorized"} | Missing or invalid API key. |
| 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 needs a key bound to an app with the payouts API category enabled — personal keys cannot use it.","code":"app_key_required","category":"payouts"} | A personal key (not bound to an app). Personal keys may read payouts, but not change them. |
| 502 | {"error":"Could not read your MassPay profile. Try again in a moment.","code":"masspay_unavailable"} | MassPay did not answer. Retry. |
| 503 | {"error":"MassPay is not available right now.","code":"not_configured"} | MassPay payouts are switched off on this environment. |
| 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. |
| 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 payouts API category enabled. Contact support to enable it.","code":"api_category_disabled","category":"payouts"} | Your app has the Payouts [API category](/developers/concepts/api-categories) switched off (the default for new apps). |
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/payouts/masspay/profile" \
-H "Authorization: Bearer $DROPFANS_API_KEY"const res = await fetch(`https://www.dropfans.io/api/external/v1/payouts/masspay/profile`, {
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/v1/payouts/masspay/profile",
headers={"Authorization": f"Bearer {os.environ['DROPFANS_API_KEY']}"},
)
print(res.json())Questions? support@dropfans.io
