List the creators you can act for
Every account your key can act for with /api/external/v1/creators/{creatorId}/…: the creators and AI personas your agency manages, and the accounts your app onboarded.
/api/external/v1/creatorsalso served at /api/external/creatorsNewEvery account your key can act for with /api/external/v1/creators/{creatorId}/…: the creators and AI personas your agency manages, and the accounts your app onboarded.
An agency’s own key sees its accepted creators (managed) and its personas (ai_persona). Your app owner’s own key sees the accounts your app created with POST /accounts (onboarded). A key that is both sees both; an account on both lists shows once, as the agency relationship.
active: false means a creator-scoped call would be refused right now (403 account_not_managed). For an onboarded account that happens when it is restricted, or when it no longer holds a key bound to your app — the creator revoked your access by deleting it.
Authentication
Send the creator's API key as a bearer token: Authorization: Bearer dpfn_…. See Authentication & API keys.
Query parameters
| Name | Type | Required | Description |
|---|---|---|---|
relationship | string | Optional | Only this relationship. One of: managed, ai_persona, onboarded |
active | string | Optional | Only accounts that are (true) or are not (false) usable right now.One of: true, false |
limit | integer | Optional | Page size. Default: 50Min: 1 Max: 100 |
cursor | string | Optional | nextCursor from the previous page. |
Responses
| Name | Type | Description | |||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
data | RosterCreator[] | The accounts.Show child attributes
| |||||||||||||||||||||||||||||||||||||||||||||
nextCursor | string | null | Pass as cursor for the next page; null on the last page. |
{
"data": [
{
"id": "cmh4v2q8k0003xy9z7w6v5u4t",
"username": "valeria",
"name": "Valeria",
"image": null,
"relationship": "ai_persona",
"active": true,
"permissions": {
"canEditProfile": true,
"canManageDrops": true,
"canManageVault": true,
"canViewStats": true,
"canManageCoPerformers": true
},
"creatorPath": "/api/external/v1/creators/cmh4v2q8k0003xy9z7w6v5u4t",
"profileUrl": "https://www.dropfans.io/u/valeria",
"since": "2026-10-20T09:00:00.000Z"
}
],
"nextCursor": null
}Errors
| Status | Body | When |
|---|---|---|
| 401 | {"error":"Unauthorized","code":"unauthorized"} | Missing or invalid API key. |
| 403 | {"error":"This endpoint needs a verified agency's own key or your app owner's own key.","code":"roster_key_required"} | Neither a verified agency’s own key nor the key of your app’s owner — e.g. a creator’s key, or a key an agency minted for one of its creators. |
| 400 | {"error":"This endpoint only acts as the key’s own account — send it without X-Dropfans-Account.","code":"account_header_not_allowed"} | The request carried `X-Dropfans-Account`. |
| 400 | {"error":"limit must be 1–100","code":"invalid_limit"} | Bad `limit` (also `invalid_relationship`, `invalid_active`). |
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/creators" \
-H "Authorization: Bearer $DROPFANS_API_KEY"const res = await fetch(`https://www.dropfans.io/api/external/v1/creators`, {
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/creators",
headers={"Authorization": f"Bearer {os.environ['DROPFANS_API_KEY']}"},
)
print(res.json())Questions? [email protected]
