Home/Docs/OnlyFans reference

OnlyFans API Reference

Auto generated from the verified native parity layer. Every path below is a real OnlyFans /api2/v2 route reached through the CreatorAPI proxy. GET routes marked verified were probed live (HTTP 200). Writes are harvested routes, verify on first call. 248 capabilities · 222 GET live verified · 110 writes · 41 groups.

How every call works

All native OnlyFans routes are reached through one pattern:

Text
{METHOD} https://api.creator-api.com/v1/{account}/native/{native_path}

{account} is the connected creator id. Auth header X-API-Key: <your key> (or Authorization: Bearer <your key>). GET is read only; POST/PUT/PATCH/DELETE need a full scope key. Billing: read = 1 credit, write = 2 credits.

account

Get current account · ✅ live verified

[account] GET /users/me.

GET /v1/{account}/native/users/me · 1 credit(s)

Shell
curl -X GET \
  -H "X-API-Key: $CREATORS_API_KEY" \
  "https://api.creator-api.com/v1/{account}/native/users/me?limit=50"
Python
import requests
r = requests.get(
    "https://api.creator-api.com/v1/{account}/native/users/me?limit=50",
    headers={"X-API-Key": KEY},
)
print(r.json())
JavaScript
const r = await fetch("https://api.creator-api.com/v1/{account}/native/users/me?limit=50", {
  method: "GET",
  headers: { "X-API-Key": KEY },
});
console.log(await r.json());

Get model start date · ✅ live verified

[account] GET /users/me/start-date-model.

GET /v1/{account}/native/users/me/start-date-model · 1 credit(s)

Shell
curl -X GET \
  -H "X-API-Key: $CREATORS_API_KEY" \
  "https://api.creator-api.com/v1/{account}/native/users/me/start-date-model?limit=50"
Python
import requests
r = requests.get(
    "https://api.creator-api.com/v1/{account}/native/users/me/start-date-model?limit=50",
    headers={"X-API-Key": KEY},
)
print(r.json())
JavaScript
const r = await fetch("https://api.creator-api.com/v1/{account}/native/users/me/start-date-model?limit=50", {
  method: "GET",
  headers: { "X-API-Key": KEY },
});
console.log(await r.json());

Update profile · ✅ live verified

[settings] PATCH /users/me.

PATCH /v1/{account}/native/users/me · 2 credit(s)

Shell
curl -X PATCH \
  -H "X-API-Key: $CREATORS_API_KEY" \
  "https://api.creator-api.com/v1/{account}/native/users/me" -d '{}'
Python
import requests
r = requests.patch(
    "https://api.creator-api.com/v1/{account}/native/users/me",
    headers={"X-API-Key": KEY},
).json()
print(r.json())
JavaScript
const r = await fetch("https://api.creator-api.com/v1/{account}/native/users/me", {
  method: "PATCH",
  headers: { "X-API-Key": KEY },
});
console.log(await r.json());

Update subscription price · ✅ live verified

[settings] PATCH /users/me. body: subscribePrice (number; OF daily price change limit applies)

PATCH /v1/{account}/native/users/me · 2 credit(s) · Consistently "Please refresh the page" on a healthy session -- unresolved, needs OF web-app JS-grep discovery. See needs-discovery.md.

Shell
curl -X PATCH \
  -H "X-API-Key: $CREATORS_API_KEY" \
  "https://api.creator-api.com/v1/{account}/native/users/me" -d '{}'
Python
import requests
r = requests.patch(
    "https://api.creator-api.com/v1/{account}/native/users/me",
    headers={"X-API-Key": KEY},
).json()
print(r.json())
JavaScript
const r = await fetch("https://api.creator-api.com/v1/{account}/native/users/me", {
  method: "PATCH",
  headers: { "X-API-Key": KEY },
});
console.log(await r.json());

analytics

Get analytics earnings overview · ✅ live verified

[analytics] GET /v1/{account}/analytics/earnings?start_date=&end_date=. Real total earnings plus a by-type breakdown over a date window (see by-type endpoint for the type-taxonomy note). Same date params and default window. Live verified 2026-08-14.

GET /v1/{account}/analytics/earnings · 1 credit(s)

Shell
curl -X GET \
  -H "X-API-Key: $CREATORS_API_KEY" \
  "https://api.creator-api.com/v1/{account}/analytics/earnings?limit=50"
Python
import requests
r = requests.get(
    "https://api.creator-api.com/v1/{account}/analytics/earnings?limit=50",
    headers={"X-API-Key": KEY},
)
print(r.json())
JavaScript
const r = await fetch("https://api.creator-api.com/v1/{account}/analytics/earnings?limit=50", {
  method: "GET",
  headers: { "X-API-Key": KEY },
});
console.log(await r.json());

Get analytics historical performance · ✅ live verified

[analytics] GET /v1/{account}/analytics/historical. OnlyFans' own real monthly earnings trend, reshaped from its stats/overview endpoint -- no synthesis, this is OF's own reported history. Live verified 2026-08-14.

GET /v1/{account}/analytics/historical · 1 credit(s)

Shell
curl -X GET \
  -H "X-API-Key: $CREATORS_API_KEY" \
  "https://api.creator-api.com/v1/{account}/analytics/historical"
Python
import requests
r = requests.get(
    "https://api.creator-api.com/v1/{account}/analytics/historical",
    headers={"X-API-Key": KEY},
)
print(r.json())
JavaScript
const r = await fetch("https://api.creator-api.com/v1/{account}/analytics/historical", {
  method: "GET",
  headers: { "X-API-Key": KEY },
});
console.log(await r.json());

Get analytics period comparison · ✅ live verified

[analytics] GET /v1/{account}/analytics/comparison?period_a_start=&period_a_end=&period_b_start=&period_b_end=. Real earnings totals for two explicit date windows, diffed (change + change_percentage). All four date params are required. Live verified 2026-08-14.

GET /v1/{account}/analytics/comparison · 1 credit(s)

Shell
curl -X GET \
  -H "X-API-Key: $CREATORS_API_KEY" \
  "https://api.creator-api.com/v1/{account}/analytics/comparison?limit=50"
Python
import requests
r = requests.get(
    "https://api.creator-api.com/v1/{account}/analytics/comparison?limit=50",
    headers={"X-API-Key": KEY},
)
print(r.json())
JavaScript
const r = await fetch("https://api.creator-api.com/v1/{account}/analytics/comparison?limit=50", {
  method: "GET",
  headers: { "X-API-Key": KEY },
});
console.log(await r.json());

Get analytics revenue forecast · ✅ live verified

[analytics] GET /v1/{account}/analytics/forecast?forecast_days=&historical_days=. A disclosed-methodology estimate, not a guarantee: linear least-squares trend fit over the last historical_days (default 90, 7-365) of real daily earnings, extrapolated forecast_days forward (default 30, 1-365). The response always states the exact model used (model field) and a plain-language note; if there is too little real transaction history to fit a trend, model says "insufficient_data" and forecast is empty rather than inventing numbers. Live verified 2026-08-14.

GET /v1/{account}/analytics/forecast · 1 credit(s)

Shell
curl -X GET \
  -H "X-API-Key: $CREATORS_API_KEY" \
  "https://api.creator-api.com/v1/{account}/analytics/forecast?limit=50"
Python
import requests
r = requests.get(
    "https://api.creator-api.com/v1/{account}/analytics/forecast?limit=50",
    headers={"X-API-Key": KEY},
)
print(r.json())
JavaScript
const r = await fetch("https://api.creator-api.com/v1/{account}/analytics/forecast?limit=50", {
  method: "GET",
  headers: { "X-API-Key": KEY },
});
console.log(await r.json());

Get analytics transaction summary · ✅ live verified

[analytics] GET /v1/{account}/analytics/transactions/summary?start_date=&end_date=. Real counts (succeeded/refunded/disputed, from OF's own transaction status field) plus gross/net/fee totals over a date window, computed server-side from the account's full transaction history. Same date params and default window as by-type above. Live verified 2026-08-14.

GET /v1/{account}/analytics/transactions/summary · 1 credit(s)

Shell
curl -X GET \
  -H "X-API-Key: $CREATORS_API_KEY" \
  "https://api.creator-api.com/v1/{account}/analytics/transactions/summary?limit=50"
Python
import requests
r = requests.get(
    "https://api.creator-api.com/v1/{account}/analytics/transactions/summary?limit=50",
    headers={"X-API-Key": KEY},
)
print(r.json())
JavaScript
const r = await fetch("https://api.creator-api.com/v1/{account}/analytics/transactions/summary?limit=50", {
  method: "GET",
  headers: { "X-API-Key": KEY },
});
console.log(await r.json());

Get analytics transactions by type · ✅ live verified

[analytics] GET /v1/{account}/analytics/transactions/by-type?start_date=&end_date=. Real server-side aggregation over the account's transaction history (OnlyFans: /payouts/transactions, paginated and summed here, not a raw passthrough): count and total amount grouped by OnlyFans' own transaction type strings (e.g. "message", "tips", "post", "subscription", "purchased_message" -- whatever OF actually reports, not a fixed/guessed taxonomy). start_date/end_date are ISO date or datetime strings, default to the last 30 days if omitted. Live verified against a real earning account 2026-08-14.

GET /v1/{account}/analytics/transactions/by-type · 1 credit(s)

Shell
curl -X GET \
  -H "X-API-Key: $CREATORS_API_KEY" \
  "https://api.creator-api.com/v1/{account}/analytics/transactions/by-type?limit=50"
Python
import requests
r = requests.get(
    "https://api.creator-api.com/v1/{account}/analytics/transactions/by-type?limit=50",
    headers={"X-API-Key": KEY},
)
print(r.json())
JavaScript
const r = await fetch("https://api.creator-api.com/v1/{account}/analytics/transactions/by-type?limit=50", {
  method: "GET",
  headers: { "X-API-Key": KEY },
});
console.log(await r.json());

analytics-financial

List transactions · ✅ live verified

[transactions] GET /payments/all/transactions. exists as get_all_transactions

GET /v1/{account}/native/payments/all/transactions · 1 credit(s) · summarise client-side

Shell
curl -X GET \
  -H "X-API-Key: $CREATORS_API_KEY" \
  "https://api.creator-api.com/v1/{account}/native/payments/all/transactions?limit=50"
Python
import requests
r = requests.get(
    "https://api.creator-api.com/v1/{account}/native/payments/all/transactions?limit=50",
    headers={"X-API-Key": KEY},
)
print(r.json())
JavaScript
const r = await fetch("https://api.creator-api.com/v1/{account}/native/payments/all/transactions?limit=50", {
  method: "GET",
  headers: { "X-API-Key": KEY },
});
console.log(await r.json());

analytics-summary

Get earnings overview · ✅ live verified

[analytics-summary] GET /users/me/stats/overview.

GET /v1/{account}/native/users/me/stats/overview · 1 credit(s)

Shell
curl -X GET \
  -H "X-API-Key: $CREATORS_API_KEY" \
  "https://api.creator-api.com/v1/{account}/native/users/me/stats/overview?limit=50"
Python
import requests
r = requests.get(
    "https://api.creator-api.com/v1/{account}/native/users/me/stats/overview?limit=50",
    headers={"X-API-Key": KEY},
)
print(r.json())
JavaScript
const r = await fetch("https://api.creator-api.com/v1/{account}/native/users/me/stats/overview?limit=50", {
  method: "GET",
  headers: { "X-API-Key": KEY },
});
console.log(await r.json());

Statistics overview · ✅ live verified

[statistics] GET /users/me/stats/overview.

GET /v1/{account}/native/users/me/stats/overview · 1 credit(s)

Shell
curl -X GET \
  -H "X-API-Key: $CREATORS_API_KEY" \
  "https://api.creator-api.com/v1/{account}/native/users/me/stats/overview?limit=50"
Python
import requests
r = requests.get(
    "https://api.creator-api.com/v1/{account}/native/users/me/stats/overview?limit=50",
    headers={"X-API-Key": KEY},
)
print(r.json())
JavaScript
const r = await fetch("https://api.creator-api.com/v1/{account}/native/users/me/stats/overview?limit=50", {
  method: "GET",
  headers: { "X-API-Key": KEY },
});
console.log(await r.json());

api-keys

Whoami · ✅ live verified

[api-keys] GET /v1/whoami. Platform-agnostic: works identically for any connected account (OnlyFans, Fansly, 4based, Fanvue), not an OnlyFans-specific feature. Returns the calling API key's own metadata (scope, connected accounts, rate limit, account limits). Live verified 2026-08-14.

GET /v1/whoami · 1 credit(s)

Shell
curl -X GET \
  -H "X-API-Key: $CREATORS_API_KEY" \
  "https://api.creator-api.com/v1/whoami"
Python
import requests
r = requests.get(
    "https://api.creator-api.com/v1/whoami",
    headers={"X-API-Key": KEY},
)
print(r.json())
JavaScript
const r = await fetch("https://api.creator-api.com/v1/whoami", {
  method: "GET",
  headers: { "X-API-Key": KEY },
});
console.log(await r.json());

banking

Get account country details · ✅ live verified

[banking] GET /payouts/account.

GET /v1/{account}/native/payouts/account · 1 credit(s)

Shell
curl -X GET \
  -H "X-API-Key: $CREATORS_API_KEY" \
  "https://api.creator-api.com/v1/{account}/native/payouts/account?limit=50"
Python
import requests
r = requests.get(
    "https://api.creator-api.com/v1/{account}/native/payouts/account?limit=50",
    headers={"X-API-Key": KEY},
)
print(r.json())
JavaScript
const r = await fetch("https://api.creator-api.com/v1/{account}/native/payouts/account?limit=50", {
  method: "GET",
  headers: { "X-API-Key": KEY },
});
console.log(await r.json());

Get bank payout details · ✅ live verified

[banking] GET /payouts/bank.

GET /v1/{account}/native/payouts/bank · 1 credit(s)

Shell
curl -X GET \
  -H "X-API-Key: $CREATORS_API_KEY" \
  "https://api.creator-api.com/v1/{account}/native/payouts/bank?limit=50"
Python
import requests
r = requests.get(
    "https://api.creator-api.com/v1/{account}/native/payouts/bank?limit=50",
    headers={"X-API-Key": KEY},
)
print(r.json())
JavaScript
const r = await fetch("https://api.creator-api.com/v1/{account}/native/payouts/bank?limit=50", {
  method: "GET",
  headers: { "X-API-Key": KEY },
});
console.log(await r.json());

Get dac7form details

[banking] GET /payouts/dac7. 403 gated (eligibility)

GET /v1/{account}/native/payouts/dac7 · 1 credit(s) · 403 gated (eligibility)

Shell
curl -X GET \
  -H "X-API-Key: $CREATORS_API_KEY" \
  "https://api.creator-api.com/v1/{account}/native/payouts/dac7?limit=50"
Python
import requests
r = requests.get(
    "https://api.creator-api.com/v1/{account}/native/payouts/dac7?limit=50",
    headers={"X-API-Key": KEY},
)
print(r.json())
JavaScript
const r = await fetch("https://api.creator-api.com/v1/{account}/native/payouts/dac7?limit=50", {
  method: "GET",
  headers: { "X-API-Key": KEY },
});
console.log(await r.json());

List available payout systems · ✅ live verified

[banking] GET /payouts/account. systems in account payload

GET /v1/{account}/native/payouts/account · 1 credit(s)

Shell
curl -X GET \
  -H "X-API-Key: $CREATORS_API_KEY" \
  "https://api.creator-api.com/v1/{account}/native/payouts/account?limit=50"
Python
import requests
r = requests.get(
    "https://api.creator-api.com/v1/{account}/native/payouts/account?limit=50",
    headers={"X-API-Key": KEY},
)
print(r.json())
JavaScript
const r = await fetch("https://api.creator-api.com/v1/{account}/native/payouts/account?limit=50", {
  method: "GET",
  headers: { "X-API-Key": KEY },
});
console.log(await r.json());

List countries · ✅ live verified

[banking] GET /countries/payouts.

GET /v1/{account}/native/countries/payouts · 1 credit(s)

Shell
curl -X GET \
  -H "X-API-Key: $CREATORS_API_KEY" \
  "https://api.creator-api.com/v1/{account}/native/countries/payouts?limit=50"
Python
import requests
r = requests.get(
    "https://api.creator-api.com/v1/{account}/native/countries/payouts?limit=50",
    headers={"X-API-Key": KEY},
)
print(r.json())
JavaScript
const r = await fetch("https://api.creator-api.com/v1/{account}/native/countries/payouts?limit=50", {
  method: "GET",
  headers: { "X-API-Key": KEY },
});
console.log(await r.json());

blocked-restricted-users

List blocked users · ✅ live verified

[blocked-restricted-users] GET /users/blocked.

GET /v1/{account}/native/users/blocked · 1 credit(s)

Shell
curl -X GET \
  -H "X-API-Key: $CREATORS_API_KEY" \
  "https://api.creator-api.com/v1/{account}/native/users/blocked?limit=50"
Python
import requests
r = requests.get(
    "https://api.creator-api.com/v1/{account}/native/users/blocked?limit=50",
    headers={"X-API-Key": KEY},
)
print(r.json())
JavaScript
const r = await fetch("https://api.creator-api.com/v1/{account}/native/users/blocked?limit=50", {
  method: "GET",
  headers: { "X-API-Key": KEY },
});
console.log(await r.json());

List restricted users · ✅ live verified

[blocked-restricted-users] GET /users/restrict.

GET /v1/{account}/native/users/restrict · 1 credit(s)

Shell
curl -X GET \
  -H "X-API-Key: $CREATORS_API_KEY" \
  "https://api.creator-api.com/v1/{account}/native/users/restrict?limit=50"
Python
import requests
r = requests.get(
    "https://api.creator-api.com/v1/{account}/native/users/restrict?limit=50",
    headers={"X-API-Key": KEY},
)
print(r.json())
JavaScript
const r = await fetch("https://api.creator-api.com/v1/{account}/native/users/restrict?limit=50", {
  method: "GET",
  headers: { "X-API-Key": KEY },
});
console.log(await r.json());

chargebacks

Calculate chargeback ratio · ✅ live verified

[chargebacks] GET /payouts/chargebacks/ratio.

GET /v1/{account}/native/payouts/chargebacks/ratio · 1 credit(s)

Shell
curl -X GET \
  -H "X-API-Key: $CREATORS_API_KEY" \
  "https://api.creator-api.com/v1/{account}/native/payouts/chargebacks/ratio?limit=50"
Python
import requests
r = requests.get(
    "https://api.creator-api.com/v1/{account}/native/payouts/chargebacks/ratio?limit=50",
    headers={"X-API-Key": KEY},
)
print(r.json())
JavaScript
const r = await fetch("https://api.creator-api.com/v1/{account}/native/payouts/chargebacks/ratio?limit=50", {
  method: "GET",
  headers: { "X-API-Key": KEY },
});
console.log(await r.json());

List chargeback statistics · ✅ live verified

[chargebacks] GET /payouts/chargebacks/chart.

GET /v1/{account}/native/payouts/chargebacks/chart · 1 credit(s)

Shell
curl -X GET \
  -H "X-API-Key: $CREATORS_API_KEY" \
  "https://api.creator-api.com/v1/{account}/native/payouts/chargebacks/chart?limit=50"
Python
import requests
r = requests.get(
    "https://api.creator-api.com/v1/{account}/native/payouts/chargebacks/chart?limit=50",
    headers={"X-API-Key": KEY},
)
print(r.json())
JavaScript
const r = await fetch("https://api.creator-api.com/v1/{account}/native/payouts/chargebacks/chart?limit=50", {
  method: "GET",
  headers: { "X-API-Key": KEY },
});
console.log(await r.json());

List chargebacks · ✅ live verified

[chargebacks] GET /payouts/chargebacks.

GET /v1/{account}/native/payouts/chargebacks · 1 credit(s)

Shell
curl -X GET \
  -H "X-API-Key: $CREATORS_API_KEY" \
  "https://api.creator-api.com/v1/{account}/native/payouts/chargebacks?limit=50"
Python
import requests
r = requests.get(
    "https://api.creator-api.com/v1/{account}/native/payouts/chargebacks?limit=50",
    headers={"X-API-Key": KEY},
)
print(r.json())
JavaScript
const r = await fetch("https://api.creator-api.com/v1/{account}/native/payouts/chargebacks?limit=50", {
  method: "GET",
  headers: { "X-API-Key": KEY },
});
console.log(await r.json());

chat-messages

Attach tags release forms to message

[chat-messages] POST /release-forms/attach. Body needs one of "postId", "messageId" or "storyId" (OF: "PostId is required" when all three are missing) plus the tag/release-form ids to attach. Live-probed 2026-08-12 (empty body -> 400 naming postId as required), full shape not yet confirmed -- exact optional fields unverified.

POST /v1/{account}/native/release-forms/attach · 2 credit(s) · Requires undocumented field(s), OF says: "PostId is required"

Shell
curl -X POST \
  -H "X-API-Key: $CREATORS_API_KEY" \
  "https://api.creator-api.com/v1/{account}/native/release-forms/attach" -d '{}'
Python
import requests
r = requests.post(
    "https://api.creator-api.com/v1/{account}/native/release-forms/attach",
    headers={"X-API-Key": KEY},
).json()
print(r.json())
JavaScript
const r = await fetch("https://api.creator-api.com/v1/{account}/native/release-forms/attach", {
  method: "POST",
  headers: { "X-API-Key": KEY },
});
console.log(await r.json());

Upload media · ✅ live verified

[chat-messages] POST /v1/{account}/media/upload. Upload a photo or video to a connected account before attaching it to a message or post. Send multipart form data with a "file" field (the media). Optional "lock" ("subscribers" gates it, Fansly only) and "tier_id". OnlyFans returns {platform, media_type, mime, size, md5, media_file}, put media_file as one item of a message's mediaFiles. Fansly returns {media_id, account_media_id, mime, size}, put account_media_id in a post's attachments. The descriptor is single use and time limited, send it promptly. Live verified in production, see "Send chat message" for the PPV DM example that follows an upload.

POST /v1/{account}/media/upload · 2 credit(s)

Shell
curl -X POST \
  -H "X-API-Key: $CREATORS_API_KEY" \
  -F "[email protected]" \
  "https://api.creator-api.com/v1/{account}/media/upload"
Python
import requests
r = requests.post(
    "https://api.creator-api.com/v1/{account}/media/upload",
    headers={"X-API-Key": KEY},
    files={"file": open("photo.jpg", "rb")},
).json()
print(r)
JavaScript
const form = new FormData();
form.append("file", fileInput.files[0]);
const r = await fetch("https://api.creator-api.com/v1/{account}/media/upload", {
  method: "POST",
  headers: { "X-API-Key": KEY },
  body: form,
});
console.log(await r.json());

chats

List chats · ✅ live verified

[chats] GET /chats. List chat threads (conversations with fans). Returns the accounts you have open conversations with -- use the id in each list item's "withUser" object as chat_id for the other chat/message endpoints. Was missing from the catalog until 2026-08-12 (found live during a Phase 0 audit; the route always worked, it just had no named capability).

GET /v1/{account}/native/chats · 1 credit(s) · exists as list_chats/iter_chats

Shell
curl -X GET \
  -H "X-API-Key: $CREATORS_API_KEY" \
  "https://api.creator-api.com/v1/{account}/native/chats?limit=50"
Python
import requests
r = requests.get(
    "https://api.creator-api.com/v1/{account}/native/chats?limit=50",
    headers={"X-API-Key": KEY},
)
print(r.json())
JavaScript
const r = await fetch("https://api.creator-api.com/v1/{account}/native/chats?limit=50", {
  method: "GET",
  headers: { "X-API-Key": KEY },
});
console.log(await r.json());

Mark all chats as read · ✅ live verified

[chats] POST /chats/mark-as-read.

POST /v1/{account}/native/chats/mark-as-read · 2 credit(s)

Shell
curl -X POST \
  -H "X-API-Key: $CREATORS_API_KEY" \
  "https://api.creator-api.com/v1/{account}/native/chats/mark-as-read" -d '{}'
Python
import requests
r = requests.post(
    "https://api.creator-api.com/v1/{account}/native/chats/mark-as-read",
    headers={"X-API-Key": KEY},
).json()
print(r.json())
JavaScript
const r = await fetch("https://api.creator-api.com/v1/{account}/native/chats/mark-as-read", {
  method: "POST",
  headers: { "X-API-Key": KEY },
});
console.log(await r.json());

data-exports

Cancel export · ✅ live verified

[data-exports] POST /v1/exports/{job_id}/cancel. Platform-agnostic: works identically for any connected account (OnlyFans, Fansly, 4based, Fanvue), not an OnlyFans-specific feature. Stops a queued or running export job.

POST /v1/exports/{job_id}/cancel · 1 credit(s)

Path params: job_id

Shell
curl -X POST \
  -H "X-API-Key: $CREATORS_API_KEY" \
  "https://api.creator-api.com/v1/exports/{job_id}/cancel" -d '{}'
Python
import requests
r = requests.post(
    "https://api.creator-api.com/v1/exports/{job_id}/cancel",
    headers={"X-API-Key": KEY},
).json()
print(r.json())
JavaScript
const r = await fetch("https://api.creator-api.com/v1/exports/{job_id}/cancel", {
  method: "POST",
  headers: { "X-API-Key": KEY },
});
console.log(await r.json());

Create export · ✅ live verified

[data-exports] POST /v1/{account}/exports. Platform-agnostic: works identically for any connected account (OnlyFans, Fansly, 4based, Fanvue), not an OnlyFans-specific feature. Body: {dataset, fmt ("csv" default), max_rows, params}. Paginates the whole dataset in the background and returns a job id to poll. Live verified 2026-08-14 (created, completed, downloaded, 5-row CSV).

POST /v1/{account}/exports · 2 credit(s)

Path params: account

Shell
curl -X POST \
  -H "X-API-Key: $CREATORS_API_KEY" \
  "https://api.creator-api.com/v1/{account}/exports" -d '{}'
Python
import requests
r = requests.post(
    "https://api.creator-api.com/v1/{account}/exports",
    headers={"X-API-Key": KEY},
).json()
print(r.json())
JavaScript
const r = await fetch("https://api.creator-api.com/v1/{account}/exports", {
  method: "POST",
  headers: { "X-API-Key": KEY },
});
console.log(await r.json());

Download export · ✅ live verified

[data-exports] GET /v1/exports/{job_id}/download?token=. Platform-agnostic: works identically for any connected account (OnlyFans, Fansly, 4based, Fanvue), not an OnlyFans-specific feature. Streams the completed export file; token comes from the download_url on a completed job's status. Live verified 2026-08-14.

GET /v1/exports/{job_id}/download · 1 credit(s)

Path params: job_id

Shell
curl -X GET \
  -H "X-API-Key: $CREATORS_API_KEY" \
  "https://api.creator-api.com/v1/exports/{job_id}/download?limit=50"
Python
import requests
r = requests.get(
    "https://api.creator-api.com/v1/exports/{job_id}/download?limit=50",
    headers={"X-API-Key": KEY},
)
print(r.json())
JavaScript
const r = await fetch("https://api.creator-api.com/v1/exports/{job_id}/download?limit=50", {
  method: "GET",
  headers: { "X-API-Key": KEY },
});
console.log(await r.json());

Get export status · ✅ live verified

[data-exports] GET /v1/exports/{job_id}. Platform-agnostic: works identically for any connected account (OnlyFans, Fansly, 4based, Fanvue), not an OnlyFans-specific feature. Job status (queued/running/completed/failed/cancelled) + row_count; a completed job includes a signed download_url. Live verified 2026-08-14.

GET /v1/exports/{job_id} · 1 credit(s)

Path params: job_id

Shell
curl -X GET \
  -H "X-API-Key: $CREATORS_API_KEY" \
  "https://api.creator-api.com/v1/exports/{job_id}"
Python
import requests
r = requests.get(
    "https://api.creator-api.com/v1/exports/{job_id}",
    headers={"X-API-Key": KEY},
)
print(r.json())
JavaScript
const r = await fetch("https://api.creator-api.com/v1/exports/{job_id}", {
  method: "GET",
  headers: { "X-API-Key": KEY },
});
console.log(await r.json());

List export datasets · ✅ live verified

[data-exports] GET /v1/exports/datasets. Platform-agnostic: works identically for any connected account (OnlyFans, Fansly, 4based, Fanvue), not an OnlyFans-specific feature. Lists the dataset names available for bulk export (e.g. "posts", "subscribers", "transactions", "vault"). Live verified 2026-08-14.

GET /v1/exports/datasets · 1 credit(s)

Shell
curl -X GET \
  -H "X-API-Key: $CREATORS_API_KEY" \
  "https://api.creator-api.com/v1/exports/datasets"
Python
import requests
r = requests.get(
    "https://api.creator-api.com/v1/exports/datasets",
    headers={"X-API-Key": KEY},
)
print(r.json())
JavaScript
const r = await fetch("https://api.creator-api.com/v1/exports/datasets", {
  method: "GET",
  headers: { "X-API-Key": KEY },
});
console.log(await r.json());

List exports · ✅ live verified

[data-exports] GET /v1/{account}/exports. Platform-agnostic: works identically for any connected account (OnlyFans, Fansly, 4based, Fanvue), not an OnlyFans-specific feature. Lists export jobs for the account, scoped to the calling key. Live verified 2026-08-14.

GET /v1/{account}/exports · 1 credit(s)

Path params: account

Shell
curl -X GET \
  -H "X-API-Key: $CREATORS_API_KEY" \
  "https://api.creator-api.com/v1/{account}/exports"
Python
import requests
r = requests.get(
    "https://api.creator-api.com/v1/{account}/exports",
    headers={"X-API-Key": KEY},
)
print(r.json())
JavaScript
const r = await fetch("https://api.creator-api.com/v1/{account}/exports", {
  method: "GET",
  headers: { "X-API-Key": KEY },
});
console.log(await r.json());

Retry export · ✅ live verified

[data-exports] POST /v1/exports/{job_id}/retry. Platform-agnostic: works identically for any connected account (OnlyFans, Fansly, 4based, Fanvue), not an OnlyFans-specific feature. Re-runs a failed export job.

POST /v1/exports/{job_id}/retry · 1 credit(s)

Path params: job_id

Shell
curl -X POST \
  -H "X-API-Key: $CREATORS_API_KEY" \
  "https://api.creator-api.com/v1/exports/{job_id}/retry" -d '{}'
Python
import requests
r = requests.post(
    "https://api.creator-api.com/v1/exports/{job_id}/retry",
    headers={"X-API-Key": KEY},
).json()
print(r.json())
JavaScript
const r = await fetch("https://api.creator-api.com/v1/exports/{job_id}/retry", {
  method: "POST",
  headers: { "X-API-Key": KEY },
});
console.log(await r.json());

engagement-messages

Get mass message overview · ✅ live verified

[mass-messaging] GET /messages/queue/chart.

GET /v1/{account}/native/messages/queue/chart · 1 credit(s)

Shell
curl -X GET \
  -H "X-API-Key: $CREATORS_API_KEY" \
  "https://api.creator-api.com/v1/{account}/native/messages/queue/chart?limit=50"
Python
import requests
r = requests.get(
    "https://api.creator-api.com/v1/{account}/native/messages/queue/chart?limit=50",
    headers={"X-API-Key": KEY},
)
print(r.json())
JavaScript
const r = await fetch("https://api.creator-api.com/v1/{account}/native/messages/queue/chart?limit=50", {
  method: "GET",
  headers: { "X-API-Key": KEY },
});
console.log(await r.json());

List mass message queue · ✅ live verified

[mass-messaging] GET /messages/queue.

GET /v1/{account}/native/messages/queue · 1 credit(s)

Shell
curl -X GET \
  -H "X-API-Key: $CREATORS_API_KEY" \
  "https://api.creator-api.com/v1/{account}/native/messages/queue?limit=50"
Python
import requests
r = requests.get(
    "https://api.creator-api.com/v1/{account}/native/messages/queue?limit=50",
    headers={"X-API-Key": KEY},
)
print(r.json())
JavaScript
const r = await fetch("https://api.creator-api.com/v1/{account}/native/messages/queue?limit=50", {
  method: "GET",
  headers: { "X-API-Key": KEY },
});
console.log(await r.json());

Mass messages · ✅ live verified

[engagement-messages] GET /messages/queue.

GET /v1/{account}/native/messages/queue · 1 credit(s)

Shell
curl -X GET \
  -H "X-API-Key: $CREATORS_API_KEY" \
  "https://api.creator-api.com/v1/{account}/native/messages/queue?limit=50"
Python
import requests
r = requests.get(
    "https://api.creator-api.com/v1/{account}/native/messages/queue?limit=50",
    headers={"X-API-Key": KEY},
)
print(r.json())
JavaScript
const r = await fetch("https://api.creator-api.com/v1/{account}/native/messages/queue?limit=50", {
  method: "GET",
  headers: { "X-API-Key": KEY },
});
console.log(await r.json());

Mass messages chart · ✅ live verified

[engagement-messages] GET /messages/queue/chart.

GET /v1/{account}/native/messages/queue/chart · 1 credit(s)

Shell
curl -X GET \
  -H "X-API-Key: $CREATORS_API_KEY" \
  "https://api.creator-api.com/v1/{account}/native/messages/queue/chart?limit=50"
Python
import requests
r = requests.get(
    "https://api.creator-api.com/v1/{account}/native/messages/queue/chart?limit=50",
    headers={"X-API-Key": KEY},
)
print(r.json())
JavaScript
const r = await fetch("https://api.creator-api.com/v1/{account}/native/messages/queue/chart?limit=50", {
  method: "GET",
  headers: { "X-API-Key": KEY },
});
console.log(await r.json());

Send mass message · ✅ live verified

[mass-messaging] POST /messages/queue. Bulk DM to an audience. Body needs an audience: "userLists" (e.g. ["fans"]) and/or "userIds", plus optional "excludedLists". Same PPV options as a 1:1 send: "price" (a number between 3 and 200) with "lockedText" and/or "mediaFiles" (upload first via POST /v1/{account}/media/upload). Optional "scheduledDate" (ISO 8601 UTC) queues it for later instead of sending now. Returns the queue item ({id, canUnsend, ...}); recall it with DELETE /messages/queue/{id}. Live verified in production, including a scheduled locked media PPV mass message that was recalled cleanly before it reached anyone.

POST /v1/{account}/native/messages/queue · 2 credit(s)

Shell
curl -X POST \
  -H "X-API-Key: $CREATORS_API_KEY" \
  "https://api.creator-api.com/v1/{account}/native/messages/queue" -d '{}'
Python
import requests
r = requests.post(
    "https://api.creator-api.com/v1/{account}/native/messages/queue",
    headers={"X-API-Key": KEY},
).json()
print(r.json())
JavaScript
const r = await fetch("https://api.creator-api.com/v1/{account}/native/messages/queue", {
  method: "POST",
  headers: { "X-API-Key": KEY },
});
console.log(await r.json());

Top message · ✅ live verified

[engagement-messages] GET /users/me/stats/top/message.

GET /v1/{account}/native/users/me/stats/top/message · 1 credit(s)

Shell
curl -X GET \
  -H "X-API-Key: $CREATORS_API_KEY" \
  "https://api.creator-api.com/v1/{account}/native/users/me/stats/top/message?limit=50"
Python
import requests
r = requests.get(
    "https://api.creator-api.com/v1/{account}/native/users/me/stats/top/message?limit=50",
    headers={"X-API-Key": KEY},
)
print(r.json())
JavaScript
const r = await fetch("https://api.creator-api.com/v1/{account}/native/users/me/stats/top/message?limit=50", {
  method: "GET",
  headers: { "X-API-Key": KEY },
});
console.log(await r.json());

fans

List active fans · ✅ live verified

[fans] GET /subscriptions/subscribers. type=active

GET /v1/{account}/native/subscriptions/subscribers · 1 credit(s) · type=active

Shell
curl -X GET \
  -H "X-API-Key: $CREATORS_API_KEY" \
  "https://api.creator-api.com/v1/{account}/native/subscriptions/subscribers?limit=50"
Python
import requests
r = requests.get(
    "https://api.creator-api.com/v1/{account}/native/subscriptions/subscribers?limit=50",
    headers={"X-API-Key": KEY},
)
print(r.json())
JavaScript
const r = await fetch("https://api.creator-api.com/v1/{account}/native/subscriptions/subscribers?limit=50", {
  method: "GET",
  headers: { "X-API-Key": KEY },
});
console.log(await r.json());

List all fans · ✅ live verified

[fans] GET /subscriptions/subscribers. all

GET /v1/{account}/native/subscriptions/subscribers · 1 credit(s) · type=active

Shell
curl -X GET \
  -H "X-API-Key: $CREATORS_API_KEY" \
  "https://api.creator-api.com/v1/{account}/native/subscriptions/subscribers?limit=50"
Python
import requests
r = requests.get(
    "https://api.creator-api.com/v1/{account}/native/subscriptions/subscribers?limit=50",
    headers={"X-API-Key": KEY},
)
print(r.json())
JavaScript
const r = await fetch("https://api.creator-api.com/v1/{account}/native/subscriptions/subscribers?limit=50", {
  method: "GET",
  headers: { "X-API-Key": KEY },
});
console.log(await r.json());

List expired fans · ✅ live verified

[fans] GET /subscriptions/subscribers/recent-expired.

GET /v1/{account}/native/subscriptions/subscribers/recent-expired · 1 credit(s)

Shell
curl -X GET \
  -H "X-API-Key: $CREATORS_API_KEY" \
  "https://api.creator-api.com/v1/{account}/native/subscriptions/subscribers/recent-expired?limit=50"
Python
import requests
r = requests.get(
    "https://api.creator-api.com/v1/{account}/native/subscriptions/subscribers/recent-expired?limit=50",
    headers={"X-API-Key": KEY},
)
print(r.json())
JavaScript
const r = await fetch("https://api.creator-api.com/v1/{account}/native/subscriptions/subscribers/recent-expired?limit=50", {
  method: "GET",
  headers: { "X-API-Key": KEY },
});
console.log(await r.json());

List latest fans · ✅ live verified

[fans] GET /subscriptions/subscribers/latest. exists as get_latest_fans

GET /v1/{account}/native/subscriptions/subscribers/latest · 1 credit(s) · exists as get_latest_fans

Shell
curl -X GET \
  -H "X-API-Key: $CREATORS_API_KEY" \
  "https://api.creator-api.com/v1/{account}/native/subscriptions/subscribers/latest?limit=50"
Python
import requests
r = requests.get(
    "https://api.creator-api.com/v1/{account}/native/subscriptions/subscribers/latest?limit=50",
    headers={"X-API-Key": KEY},
)
print(r.json())
JavaScript
const r = await fetch("https://api.creator-api.com/v1/{account}/native/subscriptions/subscribers/latest?limit=50", {
  method: "GET",
  headers: { "X-API-Key": KEY },
});
console.log(await r.json());

List top fans · ✅ live verified

[fans] GET /subscriptions/subscribers/top.

GET /v1/{account}/native/subscriptions/subscribers/top · 1 credit(s)

Shell
curl -X GET \
  -H "X-API-Key: $CREATORS_API_KEY" \
  "https://api.creator-api.com/v1/{account}/native/subscriptions/subscribers/top?limit=50"
Python
import requests
r = requests.get(
    "https://api.creator-api.com/v1/{account}/native/subscriptions/subscribers/top?limit=50",
    headers={"X-API-Key": KEY},
)
print(r.json())
JavaScript
const r = await fetch("https://api.creator-api.com/v1/{account}/native/subscriptions/subscribers/top?limit=50", {
  method: "GET",
  headers: { "X-API-Key": KEY },
});
console.log(await r.json());

following

List active followings · ✅ live verified

[following] GET /subscriptions/subscribes. type=active

GET /v1/{account}/native/subscriptions/subscribes · 1 credit(s) · type=active

Shell
curl -X GET \
  -H "X-API-Key: $CREATORS_API_KEY" \
  "https://api.creator-api.com/v1/{account}/native/subscriptions/subscribes?limit=50"
Python
import requests
r = requests.get(
    "https://api.creator-api.com/v1/{account}/native/subscriptions/subscribes?limit=50",
    headers={"X-API-Key": KEY},
)
print(r.json())
JavaScript
const r = await fetch("https://api.creator-api.com/v1/{account}/native/subscriptions/subscribes?limit=50", {
  method: "GET",
  headers: { "X-API-Key": KEY },
});
console.log(await r.json());

List all followings · ✅ live verified

[following] GET /subscriptions/subscribes. all

GET /v1/{account}/native/subscriptions/subscribes · 1 credit(s) · type=active

Shell
curl -X GET \
  -H "X-API-Key: $CREATORS_API_KEY" \
  "https://api.creator-api.com/v1/{account}/native/subscriptions/subscribes?limit=50"
Python
import requests
r = requests.get(
    "https://api.creator-api.com/v1/{account}/native/subscriptions/subscribes?limit=50",
    headers={"X-API-Key": KEY},
)
print(r.json())
JavaScript
const r = await fetch("https://api.creator-api.com/v1/{account}/native/subscriptions/subscribes?limit=50", {
  method: "GET",
  headers: { "X-API-Key": KEY },
});
console.log(await r.json());

List expired followings · ✅ live verified

[following] GET /subscriptions/subscribes. expired

GET /v1/{account}/native/subscriptions/subscribes · 1 credit(s) · type=active

Shell
curl -X GET \
  -H "X-API-Key: $CREATORS_API_KEY" \
  "https://api.creator-api.com/v1/{account}/native/subscriptions/subscribes?limit=50"
Python
import requests
r = requests.get(
    "https://api.creator-api.com/v1/{account}/native/subscriptions/subscribes?limit=50",
    headers={"X-API-Key": KEY},
)
print(r.json())
JavaScript
const r = await fetch("https://api.creator-api.com/v1/{account}/native/subscriptions/subscribes?limit=50", {
  method: "GET",
  headers: { "X-API-Key": KEY },
});
console.log(await r.json());

giphy

Search gifs · ✅ live verified

[giphy] GET /giphy/proxy/gifs/search. q (query), limit (max 50), offset

GET /v1/{account}/native/giphy/proxy/gifs/search · 1 credit(s) · q (query), limit, offset

Shell
curl -X GET \
  -H "X-API-Key: $CREATORS_API_KEY" \
  "https://api.creator-api.com/v1/{account}/native/giphy/proxy/gifs/search?limit=50"
Python
import requests
r = requests.get(
    "https://api.creator-api.com/v1/{account}/native/giphy/proxy/gifs/search?limit=50",
    headers={"X-API-Key": KEY},
)
print(r.json())
JavaScript
const r = await fetch("https://api.creator-api.com/v1/{account}/native/giphy/proxy/gifs/search?limit=50", {
  method: "GET",
  headers: { "X-API-Key": KEY },
});
console.log(await r.json());

media-mirror

Media mirror create · ✅ live verified

[media-mirror] POST /v1/{account}/media/mirror. Re-host an OnlyFans CDN media URL (the "url" field inside any post/vault/story response) under a stable CreatorAPI link that does not expire -- OF's own signed URLs do (CloudFront policy, time AND IP-limited). Body: {"source_url": "https://cdn2.onlyfans.com/..."}. Only onlyfans.com media hosts are accepted (cdn2-5/thumbs/public.onlyfans.com). Returns {id, status, mime, size, download_url, download_expires} -- download_expires refreshes on every GET of the job. Live verified 2026-08-12: fetched a real signed cdn2.onlyfans.com URL (1071584-byte JPEG), served it back through the token-gated download link, wrong token correctly rejected with 403.

POST /v1/{account}/media/mirror · 2 credit(s)

Shell
curl -X POST \
  -H "X-API-Key: $CREATORS_API_KEY" \
  -F "[email protected]" \
  "https://api.creator-api.com/v1/{account}/media/mirror"
Python
import requests
r = requests.post(
    "https://api.creator-api.com/v1/{account}/media/mirror",
    headers={"X-API-Key": KEY},
    files={"file": open("photo.jpg", "rb")},
).json()
print(r)
JavaScript
const form = new FormData();
form.append("file", fileInput.files[0]);
const r = await fetch("https://api.creator-api.com/v1/{account}/media/mirror", {
  method: "POST",
  headers: { "X-API-Key": KEY },
  body: form,
});
console.log(await r.json());

Media mirror download · ✅ live verified

[media-mirror] GET /v1/media/mirror/{job_id}/download?token=... . Downloads the mirrored file. The token from download_url is the intended way to use this -- no API key needed, safe to embed or share the link itself. Free. Live verified 2026-08-12.

GET /v1/media/mirror/{job_id}/download · 0 credit(s)

Path params: job_id

Shell
curl -X GET \
  -H "X-API-Key: $CREATORS_API_KEY" \
  "https://api.creator-api.com/v1/media/mirror/{job_id}/download?limit=50"
Python
import requests
r = requests.get(
    "https://api.creator-api.com/v1/media/mirror/{job_id}/download?limit=50",
    headers={"X-API-Key": KEY},
)
print(r.json())
JavaScript
const r = await fetch("https://api.creator-api.com/v1/media/mirror/{job_id}/download?limit=50", {
  method: "GET",
  headers: { "X-API-Key": KEY },
});
console.log(await r.json());

Media mirror status · ✅ live verified

[media-mirror] GET /v1/{account}/media/mirror/{job_id}. Fetch a mirror job and refresh its download link. Free. Live verified 2026-08-12.

GET /v1/{account}/media/mirror/{job_id} · 0 credit(s)

Path params: job_id

Shell
curl -X GET \
  -H "X-API-Key: $CREATORS_API_KEY" \
  "https://api.creator-api.com/v1/{account}/media/mirror/{job_id}"
Python
import requests
r = requests.get(
    "https://api.creator-api.com/v1/{account}/media/mirror/{job_id}",
    headers={"X-API-Key": KEY},
)
print(r.json())
JavaScript
const r = await fetch("https://api.creator-api.com/v1/{account}/media/mirror/{job_id}", {
  method: "GET",
  headers: { "X-API-Key": KEY },
});
console.log(await r.json());

media-vault

Delete vault media · ✅ live verified

[media-vault] PUT /vault/media/hidden. OF soft-delete: body {list:[mediaIds],hidden:true} (no hard-delete route)

PUT /v1/{account}/native/vault/media/hidden · 2 credit(s) · OF soft-delete: body {list:[mediaIds],hidden:true} (no hard-delete route)

Shell
curl -X PUT \
  -H "X-API-Key: $CREATORS_API_KEY" \
  "https://api.creator-api.com/v1/{account}/native/vault/media/hidden" -d '{}'
Python
import requests
r = requests.put(
    "https://api.creator-api.com/v1/{account}/native/vault/media/hidden",
    headers={"X-API-Key": KEY},
).json()
print(r.json())
JavaScript
const r = await fetch("https://api.creator-api.com/v1/{account}/native/vault/media/hidden", {
  method: "PUT",
  headers: { "X-API-Key": KEY },
});
console.log(await r.json());

List vault media · ✅ live verified

[media-vault] GET /vault/media. exists as get_vault_media

GET /v1/{account}/native/vault/media · 1 credit(s) · exists as get_vault_media

Shell
curl -X GET \
  -H "X-API-Key: $CREATORS_API_KEY" \
  "https://api.creator-api.com/v1/{account}/native/vault/media?limit=50"
Python
import requests
r = requests.get(
    "https://api.creator-api.com/v1/{account}/native/vault/media?limit=50",
    headers={"X-API-Key": KEY},
)
print(r.json())
JavaScript
const r = await fetch("https://api.creator-api.com/v1/{account}/native/vault/media?limit=50", {
  method: "GET",
  headers: { "X-API-Key": KEY },
});
console.log(await r.json());

Media vault upload · ✅ live verified

[media-vault] POST /v1/{account}/media/vault. Upload a photo or video and get back a PERSISTENT numeric vault media id -- unlike POST /media/upload, whose descriptor is single-use. OnlyFans only. Send either multipart form-data with a file field, OR a JSON body with file_url (fetched server-side) -- exactly one of the two. Optional async (bool): true always returns 202 immediately with a polling URL; left unset, a fast upload (typically a photo) returns 200 directly within ~20s, a slow one (video transcoding) falls back to the same 202 + polling response. Poll with GET /v1/{account}/media/vault/upload-status/{job_id} for pending/processing/completed/failed. Under the hood: OnlyFans has no direct-to-vault upload, so this uploads normally, attaches it to a throwaway post, waits for it to finish processing, deletes the post, and returns the media id that persists in the vault afterward. Live verified end to end 2026-08-12 (upload -> throwaway post -> vault_media_id returned -> confirmed present in GET /vault/media?sort=desc after the post was deleted), both sync and async=true paths, against a real account through the real public API.

POST /v1/{account}/media/vault · 2 credit(s)

Shell
curl -X POST \
  -H "X-API-Key: $CREATORS_API_KEY" \
  -F "[email protected]" \
  "https://api.creator-api.com/v1/{account}/media/vault"
Python
import requests
r = requests.post(
    "https://api.creator-api.com/v1/{account}/media/vault",
    headers={"X-API-Key": KEY},
    files={"file": open("photo.jpg", "rb")},
).json()
print(r)
JavaScript
const form = new FormData();
form.append("file", fileInput.files[0]);
const r = await fetch("https://api.creator-api.com/v1/{account}/media/vault", {
  method: "POST",
  headers: { "X-API-Key": KEY },
  body: form,
});
console.log(await r.json());

Media vault upload status · ✅ live verified

[media-vault] GET /v1/{account}/media/vault/upload-status/{job_id}. Poll a media/vault upload job. Returns {id, account, status, vault_media_id, media_type, filename, error, created_at, updated_at}. status is one of pending, processing, completed, failed. Free -- only the original upload (POST /media/vault) is billed. Live verified 2026-08-12 (async=true path: 202 immediately, polled through to completed).

GET /v1/{account}/media/vault/upload-status/{job_id} · 0 credit(s)

Path params: job_id

Shell
curl -X GET \
  -H "X-API-Key: $CREATORS_API_KEY" \
  "https://api.creator-api.com/v1/{account}/media/vault/upload-status/{job_id}"
Python
import requests
r = requests.get(
    "https://api.creator-api.com/v1/{account}/media/vault/upload-status/{job_id}",
    headers={"X-API-Key": KEY},
)
print(r.json())
JavaScript
const r = await fetch("https://api.creator-api.com/v1/{account}/media/vault/upload-status/{job_id}", {
  method: "GET",
  headers: { "X-API-Key": KEY },
});
console.log(await r.json());

media-vault-lists

Create vault list · ✅ live verified

[media-vault-lists] POST /vault/lists.

POST /v1/{account}/native/vault/lists · 2 credit(s) · exists as get_vault_lists (400 noparam)

Shell
curl -X POST \
  -H "X-API-Key: $CREATORS_API_KEY" \
  "https://api.creator-api.com/v1/{account}/native/vault/lists" -d '{}'
Python
import requests
r = requests.post(
    "https://api.creator-api.com/v1/{account}/native/vault/lists",
    headers={"X-API-Key": KEY},
).json()
print(r.json())
JavaScript
const r = await fetch("https://api.creator-api.com/v1/{account}/native/vault/lists", {
  method: "POST",
  headers: { "X-API-Key": KEY },
});
console.log(await r.json());

List vault lists · ✅ live verified

[media-vault-lists] GET /vault/lists. Requires a "view" query param; defaults to "main" (confirmed live 2026-08-13 -- "all"/"custom"/"vault" all rejected with "Bad view param", "main" returns the real vault-list breakdown). Caller can override by passing view=... explicitly.

GET /v1/{account}/native/vault/lists · 1 credit(s) · Requires query param view=main (e.g. GET /vault/lists?view=main). Other view values tested and rejected: all, custom, vault. Client now defaults view=main automatically (fixed 2026-08-13), caller no longer needs to know this.

Shell
curl -X GET \
  -H "X-API-Key: $CREATORS_API_KEY" \
  "https://api.creator-api.com/v1/{account}/native/vault/lists?limit=50"
Python
import requests
r = requests.get(
    "https://api.creator-api.com/v1/{account}/native/vault/lists?limit=50",
    headers={"X-API-Key": KEY},
)
print(r.json())
JavaScript
const r = await fetch("https://api.creator-api.com/v1/{account}/native/vault/lists?limit=50", {
  method: "GET",
  headers: { "X-API-Key": KEY },
});
console.log(await r.json());

misc

Add media to list · ✅ live verified

[media-vault-lists] POST /vault/lists/{id}/media.

POST /v1/{account}/native/vault/lists/{list_id}/media · 2 credit(s)

Path params: list_id

Shell
curl -X POST \
  -H "X-API-Key: $CREATORS_API_KEY" \
  "https://api.creator-api.com/v1/{account}/native/vault/lists/{list_id}/media" -d '{}'
Python
import requests
r = requests.post(
    "https://api.creator-api.com/v1/{account}/native/vault/lists/{list_id}/media",
    headers={"X-API-Key": KEY},
).json()
print(r.json())
JavaScript
const r = await fetch("https://api.creator-api.com/v1/{account}/native/vault/lists/{list_id}/media", {
  method: "POST",
  headers: { "X-API-Key": KEY },
});
console.log(await r.json());

Add story to highlight

[story-highlights] PUT /stories/highlights/{id}.

PUT /v1/{account}/native/stories/highlights/{highlight_id} · 2 credit(s)

Path params: highlight_id

Shell
curl -X PUT \
  -H "X-API-Key: $CREATORS_API_KEY" \
  "https://api.creator-api.com/v1/{account}/native/stories/highlights/{highlight_id}" -d '{}'
Python
import requests
r = requests.put(
    "https://api.creator-api.com/v1/{account}/native/stories/highlights/{highlight_id}",
    headers={"X-API-Key": KEY},
).json()
print(r.json())
JavaScript
const r = await fetch("https://api.creator-api.com/v1/{account}/native/stories/highlights/{highlight_id}", {
  method: "PUT",
  headers: { "X-API-Key": KEY },
});
console.log(await r.json());

Add users to user list · ✅ live verified

[user-list-collections] POST /lists/{id}/users/{id}. FIXED 2026-08-14: the bulk POST /lists/users {id,users:[...]} shape is unreliable (400 List id not found, matches app/services/of_api.py's own comment). Real working call is per-user, no body -- confirmed live end-to-end 2026-08-14 (create list, add, verify, pin, remove, delete list, all 200).

POST /v1/{account}/native/lists/{list_id}/users/{user_id} · 2 credit(s) · FIXED 2026-08-14 -- the mapped bulk path POST /lists/users {id, users:[...]} was genuinely broken (confirmed "List id not found" against a real, freshly created, verified-existing list -- not a guessing/timing issue). Root cause found in existing code, not guessed: app/services/of_api.py already documents this exact same finding and already uses a working per-user path instead (of_native.add_to_list, live in hold_list.py). Re-mapped add_users_to_user_list to the real working shape: POST /lists/{list_id}/users/{user_id}, no body, one call per user. Full roundtrip live-proven on gammaboy1 2026-08-14: create_user_list -> add (this fix) -> GET verify user present -> pin_unpin_user_in_user_list -> GET verify pinned -> remove_user_from_a_user_list -> GET verify empty -> delete_user_list. All 8 calls 200, list fully cleaned up after. Function signature changed from (creator_id, body) to (creator_id, list_id, user_id, body) in both of_native_parity.py copies.

Path params: list_id, user_id

Shell
curl -X POST \
  -H "X-API-Key: $CREATORS_API_KEY" \
  "https://api.creator-api.com/v1/{account}/native/lists/{list_id}/users/{user_id}" -d '{}'
Python
import requests
r = requests.post(
    "https://api.creator-api.com/v1/{account}/native/lists/{list_id}/users/{user_id}",
    headers={"X-API-Key": KEY},
).json()
print(r.json())
JavaScript
const r = await fetch("https://api.creator-api.com/v1/{account}/native/lists/{list_id}/users/{user_id}", {
  method: "POST",
  headers: { "X-API-Key": KEY },
});
console.log(await r.json());

Archive post · ✅ live verified

[posts] POST /posts/{id}/archive. native path /posts/{id}/{state}archive

POST /v1/{account}/native/posts/{post_id}/archive · 2 credit(s)

Path params: post_id

Shell
curl -X POST \
  -H "X-API-Key: $CREATORS_API_KEY" \
  "https://api.creator-api.com/v1/{account}/native/posts/{post_id}/archive" -d '{}'
Python
import requests
r = requests.post(
    "https://api.creator-api.com/v1/{account}/native/posts/{post_id}/archive",
    headers={"X-API-Key": KEY},
).json()
print(r.json())
JavaScript
const r = await fetch("https://api.creator-api.com/v1/{account}/native/posts/{post_id}/archive", {
  method: "POST",
  headers: { "X-API-Key": KEY },
});
console.log(await r.json());

Block user · ✅ live verified

[users] POST /users/{id}/block.

POST /v1/{account}/native/users/{user_id}/block · 2 credit(s) · Route confirmed via fake-id probe (specific 'User not found' response); real block effect intentionally never fired against a real fan.

Path params: user_id

Shell
curl -X POST \
  -H "X-API-Key: $CREATORS_API_KEY" \
  "https://api.creator-api.com/v1/{account}/native/users/{user_id}/block" -d '{}'
Python
import requests
r = requests.post(
    "https://api.creator-api.com/v1/{account}/native/users/{user_id}/block",
    headers={"X-API-Key": KEY},
).json()
print(r.json())
JavaScript
const r = await fetch("https://api.creator-api.com/v1/{account}/native/users/{user_id}/block", {
  method: "POST",
  headers: { "X-API-Key": KEY },
});
console.log(await r.json());

Clear user list · ✅ live verified

[user-list-collections] DELETE /lists/{id}/users.

DELETE /v1/{account}/native/lists/{list_id}/users · 2 credit(s)

Path params: list_id

Shell
curl -X DELETE \
  -H "X-API-Key: $CREATORS_API_KEY" \
  "https://api.creator-api.com/v1/{account}/native/lists/{list_id}/users" -d '{}'
Python
import requests
r = requests.delete(
    "https://api.creator-api.com/v1/{account}/native/lists/{list_id}/users",
    headers={"X-API-Key": KEY},
).json()
print(r.json())
JavaScript
const r = await fetch("https://api.creator-api.com/v1/{account}/native/lists/{list_id}/users", {
  method: "DELETE",
  headers: { "X-API-Key": KEY },
});
console.log(await r.json());

Create post comment · ✅ live verified

[post-comments] POST /posts/{id}/comments.

POST /v1/{account}/native/posts/{post_id}/comments · 2 credit(s)

Path params: post_id

Shell
curl -X POST \
  -H "X-API-Key: $CREATORS_API_KEY" \
  "https://api.creator-api.com/v1/{account}/native/posts/{post_id}/comments" -d '{}'
Python
import requests
r = requests.post(
    "https://api.creator-api.com/v1/{account}/native/posts/{post_id}/comments",
    headers={"X-API-Key": KEY},
).json()
print(r.json())
JavaScript
const r = await fetch("https://api.creator-api.com/v1/{account}/native/posts/{post_id}/comments", {
  method: "POST",
  headers: { "X-API-Key": KEY },
});
console.log(await r.json());

Delete bundle

[subscription-bundles] DELETE /subscriptions/bundles/{id}.

DELETE /v1/{account}/native/subscriptions/bundles/{bundle_id} · 2 credit(s)

Path params: bundle_id

Shell
curl -X DELETE \
  -H "X-API-Key: $CREATORS_API_KEY" \
  "https://api.creator-api.com/v1/{account}/native/subscriptions/bundles/{bundle_id}" -d '{}'
Python
import requests
r = requests.delete(
    "https://api.creator-api.com/v1/{account}/native/subscriptions/bundles/{bundle_id}",
    headers={"X-API-Key": KEY},
).json()
print(r.json())
JavaScript
const r = await fetch("https://api.creator-api.com/v1/{account}/native/subscriptions/bundles/{bundle_id}", {
  method: "DELETE",
  headers: { "X-API-Key": KEY },
});
console.log(await r.json());

Delete chat · ✅ live verified

[chats] DELETE /chats/{id}.

DELETE /v1/{account}/native/chats/{chat_id} · 2 credit(s)

Path params: chat_id

Shell
curl -X DELETE \
  -H "X-API-Key: $CREATORS_API_KEY" \
  "https://api.creator-api.com/v1/{account}/native/chats/{chat_id}" -d '{}'
Python
import requests
r = requests.delete(
    "https://api.creator-api.com/v1/{account}/native/chats/{chat_id}",
    headers={"X-API-Key": KEY},
).json()
print(r.json())
JavaScript
const r = await fetch("https://api.creator-api.com/v1/{account}/native/chats/{chat_id}", {
  method: "DELETE",
  headers: { "X-API-Key": KEY },
});
console.log(await r.json());

Delete message · ✅ live verified

[chat-messages] DELETE /messages/{id}.

DELETE /v1/{account}/native/messages/{message_id} · 2 credit(s)

Path params: message_id

Shell
curl -X DELETE \
  -H "X-API-Key: $CREATORS_API_KEY" \
  "https://api.creator-api.com/v1/{account}/native/messages/{message_id}" -d '{}'
Python
import requests
r = requests.delete(
    "https://api.creator-api.com/v1/{account}/native/messages/{message_id}",
    headers={"X-API-Key": KEY},
).json()
print(r.json())
JavaScript
const r = await fetch("https://api.creator-api.com/v1/{account}/native/messages/{message_id}", {
  method: "DELETE",
  headers: { "X-API-Key": KEY },
});
console.log(await r.json());

Delete post · ✅ live verified

[posts] DELETE /posts/{id}.

DELETE /v1/{account}/native/posts/{post_id} · 2 credit(s)

Path params: post_id

Shell
curl -X DELETE \
  -H "X-API-Key: $CREATORS_API_KEY" \
  "https://api.creator-api.com/v1/{account}/native/posts/{post_id}" -d '{}'
Python
import requests
r = requests.delete(
    "https://api.creator-api.com/v1/{account}/native/posts/{post_id}",
    headers={"X-API-Key": KEY},
).json()
print(r.json())
JavaScript
const r = await fetch("https://api.creator-api.com/v1/{account}/native/posts/{post_id}", {
  method: "DELETE",
  headers: { "X-API-Key": KEY },
});
console.log(await r.json());

Delete post comment · ✅ live verified

[post-comments] DELETE /comments/{id}.

DELETE /v1/{account}/native/comments/{comment_id} · 2 credit(s)

Path params: comment_id

Shell
curl -X DELETE \
  -H "X-API-Key: $CREATORS_API_KEY" \
  "https://api.creator-api.com/v1/{account}/native/comments/{comment_id}" -d '{}'
Python
import requests
r = requests.delete(
    "https://api.creator-api.com/v1/{account}/native/comments/{comment_id}",
    headers={"X-API-Key": KEY},
).json()
print(r.json())
JavaScript
const r = await fetch("https://api.creator-api.com/v1/{account}/native/comments/{comment_id}", {
  method: "DELETE",
  headers: { "X-API-Key": KEY },
});
console.log(await r.json());

Delete promotion

[promotions] DELETE /promotions/{id}.

DELETE /v1/{account}/native/promotions/{promotion_id} · 2 credit(s)

Path params: promotion_id

Shell
curl -X DELETE \
  -H "X-API-Key: $CREATORS_API_KEY" \
  "https://api.creator-api.com/v1/{account}/native/promotions/{promotion_id}" -d '{}'
Python
import requests
r = requests.delete(
    "https://api.creator-api.com/v1/{account}/native/promotions/{promotion_id}",
    headers={"X-API-Key": KEY},
).json()
print(r.json())
JavaScript
const r = await fetch("https://api.creator-api.com/v1/{account}/native/promotions/{promotion_id}", {
  method: "DELETE",
  headers: { "X-API-Key": KEY },
});
console.log(await r.json());

Delete social media button · ✅ live verified

[settings] DELETE /users/social/buttons/{id}.

DELETE /v1/{account}/native/users/social/buttons/{button_id} · 2 credit(s) · REAL DESTRUCTIVE ACTION EXECUTED 2026-08-14 with Maxim's explicit authorization -- hyladiaz's Instagram button is genuinely deleted, no API restore path exists.

Path params: button_id

Shell
curl -X DELETE \
  -H "X-API-Key: $CREATORS_API_KEY" \
  "https://api.creator-api.com/v1/{account}/native/users/social/buttons/{button_id}" -d '{}'
Python
import requests
r = requests.delete(
    "https://api.creator-api.com/v1/{account}/native/users/social/buttons/{button_id}",
    headers={"X-API-Key": KEY},
).json()
print(r.json())
JavaScript
const r = await fetch("https://api.creator-api.com/v1/{account}/native/users/social/buttons/{button_id}", {
  method: "DELETE",
  headers: { "X-API-Key": KEY },
});
console.log(await r.json());

Delete story · ✅ live verified

[stories] DELETE /stories/{id}.

DELETE /v1/{account}/native/stories/{story_id} · 2 credit(s)

Path params: story_id

Shell
curl -X DELETE \
  -H "X-API-Key: $CREATORS_API_KEY" \
  "https://api.creator-api.com/v1/{account}/native/stories/{story_id}" -d '{}'
Python
import requests
r = requests.delete(
    "https://api.creator-api.com/v1/{account}/native/stories/{story_id}",
    headers={"X-API-Key": KEY},
).json()
print(r.json())
JavaScript
const r = await fetch("https://api.creator-api.com/v1/{account}/native/stories/{story_id}", {
  method: "DELETE",
  headers: { "X-API-Key": KEY },
});
console.log(await r.json());

Delete story highlight

[story-highlights] DELETE /stories/highlights/{id}.

DELETE /v1/{account}/native/stories/highlights/{highlight_id} · 2 credit(s)

Path params: highlight_id

Shell
curl -X DELETE \
  -H "X-API-Key: $CREATORS_API_KEY" \
  "https://api.creator-api.com/v1/{account}/native/stories/highlights/{highlight_id}" -d '{}'
Python
import requests
r = requests.delete(
    "https://api.creator-api.com/v1/{account}/native/stories/highlights/{highlight_id}",
    headers={"X-API-Key": KEY},
).json()
print(r.json())
JavaScript
const r = await fetch("https://api.creator-api.com/v1/{account}/native/stories/highlights/{highlight_id}", {
  method: "DELETE",
  headers: { "X-API-Key": KEY },
});
console.log(await r.json());

Delete user list · ✅ live verified

[user-list-collections] DELETE /lists/{id}.

DELETE /v1/{account}/native/lists/{list_id} · 2 credit(s)

Path params: list_id

Shell
curl -X DELETE \
  -H "X-API-Key: $CREATORS_API_KEY" \
  "https://api.creator-api.com/v1/{account}/native/lists/{list_id}" -d '{}'
Python
import requests
r = requests.delete(
    "https://api.creator-api.com/v1/{account}/native/lists/{list_id}",
    headers={"X-API-Key": KEY},
).json()
print(r.json())
JavaScript
const r = await fetch("https://api.creator-api.com/v1/{account}/native/lists/{list_id}", {
  method: "DELETE",
  headers: { "X-API-Key": KEY },
});
console.log(await r.json());

Delete vault list · ✅ live verified

[media-vault-lists] DELETE /vault/lists/{id}.

DELETE /v1/{account}/native/vault/lists/{list_id} · 2 credit(s)

Path params: list_id

Shell
curl -X DELETE \
  -H "X-API-Key: $CREATORS_API_KEY" \
  "https://api.creator-api.com/v1/{account}/native/vault/lists/{list_id}" -d '{}'
Python
import requests
r = requests.delete(
    "https://api.creator-api.com/v1/{account}/native/vault/lists/{list_id}",
    headers={"X-API-Key": KEY},
).json()
print(r.json())
JavaScript
const r = await fetch("https://api.creator-api.com/v1/{account}/native/vault/lists/{list_id}", {
  method: "DELETE",
  headers: { "X-API-Key": KEY },
});
console.log(await r.json());

Get mass message · ✅ live verified

[mass-messaging] GET /messages/queue/{id}.

GET /v1/{account}/native/messages/queue/{queue_id} · 1 credit(s)

Path params: queue_id

Shell
curl -X GET \
  -H "X-API-Key: $CREATORS_API_KEY" \
  "https://api.creator-api.com/v1/{account}/native/messages/queue/{queue_id}?limit=50"
Python
import requests
r = requests.get(
    "https://api.creator-api.com/v1/{account}/native/messages/queue/{queue_id}?limit=50",
    headers={"X-API-Key": KEY},
)
print(r.json())
JavaScript
const r = await fetch("https://api.creator-api.com/v1/{account}/native/messages/queue/{queue_id}?limit=50", {
  method: "GET",
  headers: { "X-API-Key": KEY },
});
console.log(await r.json());

Get post · ✅ live verified

[posts] GET /posts/{id}.

GET /v1/{account}/native/posts/{post_id} · 1 credit(s)

Path params: post_id

Shell
curl -X GET \
  -H "X-API-Key: $CREATORS_API_KEY" \
  "https://api.creator-api.com/v1/{account}/native/posts/{post_id}?limit=50"
Python
import requests
r = requests.get(
    "https://api.creator-api.com/v1/{account}/native/posts/{post_id}?limit=50",
    headers={"X-API-Key": KEY},
)
print(r.json())
JavaScript
const r = await fetch("https://api.creator-api.com/v1/{account}/native/posts/{post_id}?limit=50", {
  method: "GET",
  headers: { "X-API-Key": KEY },
});
console.log(await r.json());

Get profile details · ✅ live verified

[public-profiles] GET /users/{id}. exists as get_profile (by handle)

GET /v1/{account}/native/users/{user_id} · 1 credit(s)

Path params: user_id

Shell
curl -X GET \
  -H "X-API-Key: $CREATORS_API_KEY" \
  "https://api.creator-api.com/v1/{account}/native/users/{user_id}?limit=50"
Python
import requests
r = requests.get(
    "https://api.creator-api.com/v1/{account}/native/users/{user_id}?limit=50",
    headers={"X-API-Key": KEY},
)
print(r.json())
JavaScript
const r = await fetch("https://api.creator-api.com/v1/{account}/native/users/{user_id}?limit=50", {
  method: "GET",
  headers: { "X-API-Key": KEY },
});
console.log(await r.json());

Get story stats · ✅ live verified

[stories] GET /stories/{id}/stats.

GET /v1/{account}/native/stories/{story_id}/stats · 1 credit(s)

Path params: story_id

Shell
curl -X GET \
  -H "X-API-Key: $CREATORS_API_KEY" \
  "https://api.creator-api.com/v1/{account}/native/stories/{story_id}/stats?limit=50"
Python
import requests
r = requests.get(
    "https://api.creator-api.com/v1/{account}/native/stories/{story_id}/stats?limit=50",
    headers={"X-API-Key": KEY},
)
print(r.json())
JavaScript
const r = await fetch("https://api.creator-api.com/v1/{account}/native/stories/{story_id}/stats?limit=50", {
  method: "GET",
  headers: { "X-API-Key": KEY },
});
console.log(await r.json());

Get subscription history · ✅ live verified

[fans] GET /subscriptions/{id}/history.

GET /v1/{account}/native/subscriptions/{subscription_id}/history · 1 credit(s) · The path param subscription_id is really the fan's user_id (e.g. from list_active_fans), not a separate subscription-record id.

Path params: subscription_id

Shell
curl -X GET \
  -H "X-API-Key: $CREATORS_API_KEY" \
  "https://api.creator-api.com/v1/{account}/native/subscriptions/{subscription_id}/history?limit=50"
Python
import requests
r = requests.get(
    "https://api.creator-api.com/v1/{account}/native/subscriptions/{subscription_id}/history?limit=50",
    headers={"X-API-Key": KEY},
)
print(r.json())
JavaScript
const r = await fetch("https://api.creator-api.com/v1/{account}/native/subscriptions/{subscription_id}/history?limit=50", {
  method: "GET",
  headers: { "X-API-Key": KEY },
});
console.log(await r.json());

Get transaction summary · ✅ live verified

[analytics-financial] GET /payouts/transactions (fixed 2026-08-14 -- was pointed at /payments/all/transactions, a narrow/incomplete feed; /payouts/transactions is the real, complete, currently-updating ledger). Raw OF page, summarise client-side, or use the real server-side aggregation at get_analytics_transaction_summary.

GET /v1/{account}/native/payouts/transactions · 1 credit(s) · summarise client-side

Shell
curl -X GET \
  -H "X-API-Key: $CREATORS_API_KEY" \
  "https://api.creator-api.com/v1/{account}/native/payouts/transactions?limit=50"
Python
import requests
r = requests.get(
    "https://api.creator-api.com/v1/{account}/native/payouts/transactions?limit=50",
    headers={"X-API-Key": KEY},
)
print(r.json())
JavaScript
const r = await fetch("https://api.creator-api.com/v1/{account}/native/payouts/transactions?limit=50", {
  method: "GET",
  headers: { "X-API-Key": KEY },
});
console.log(await r.json());

Get transactions by type · ✅ live verified

[analytics-financial] GET /payouts/transactions (fixed 2026-08-14, see get_transaction_summary docstring for why). Raw OF page, filter by type client-side, or use the real server-side aggregation at get_analytics_transactions_by_type.

GET /v1/{account}/native/payouts/transactions · 1 credit(s) · summarise client-side

Shell
curl -X GET \
  -H "X-API-Key: $CREATORS_API_KEY" \
  "https://api.creator-api.com/v1/{account}/native/payouts/transactions?limit=50"
Python
import requests
r = requests.get(
    "https://api.creator-api.com/v1/{account}/native/payouts/transactions?limit=50",
    headers={"X-API-Key": KEY},
)
print(r.json())
JavaScript
const r = await fetch("https://api.creator-api.com/v1/{account}/native/payouts/transactions?limit=50", {
  method: "GET",
  headers: { "X-API-Key": KEY },
});
console.log(await r.json());

Get user details · ✅ live verified

[users] GET /users/{id}.

GET /v1/{account}/native/users/{user_id} · 1 credit(s)

Path params: user_id

Shell
curl -X GET \
  -H "X-API-Key: $CREATORS_API_KEY" \
  "https://api.creator-api.com/v1/{account}/native/users/{user_id}?limit=50"
Python
import requests
r = requests.get(
    "https://api.creator-api.com/v1/{account}/native/users/{user_id}?limit=50",
    headers={"X-API-Key": KEY},
)
print(r.json())
JavaScript
const r = await fetch("https://api.creator-api.com/v1/{account}/native/users/{user_id}?limit=50", {
  method: "GET",
  headers: { "X-API-Key": KEY },
});
console.log(await r.json());

Get user list · ✅ live verified

[user-list-collections] GET /lists/{id}.

GET /v1/{account}/native/lists/{list_id} · 1 credit(s)

Path params: list_id

Shell
curl -X GET \
  -H "X-API-Key: $CREATORS_API_KEY" \
  "https://api.creator-api.com/v1/{account}/native/lists/{list_id}?limit=50"
Python
import requests
r = requests.get(
    "https://api.creator-api.com/v1/{account}/native/lists/{list_id}?limit=50",
    headers={"X-API-Key": KEY},
)
print(r.json())
JavaScript
const r = await fetch("https://api.creator-api.com/v1/{account}/native/lists/{list_id}?limit=50", {
  method: "GET",
  headers: { "X-API-Key": KEY },
});
console.log(await r.json());

Get vault media · ✅ live verified

[media-vault] GET /vault/media/{id}.

GET /v1/{account}/native/vault/media/{media_id} · 1 credit(s)

Path params: media_id

Shell
curl -X GET \
  -H "X-API-Key: $CREATORS_API_KEY" \
  "https://api.creator-api.com/v1/{account}/native/vault/media/{media_id}?limit=50"
Python
import requests
r = requests.get(
    "https://api.creator-api.com/v1/{account}/native/vault/media/{media_id}?limit=50",
    headers={"X-API-Key": KEY},
)
print(r.json())
JavaScript
const r = await fetch("https://api.creator-api.com/v1/{account}/native/vault/media/{media_id}?limit=50", {
  method: "GET",
  headers: { "X-API-Key": KEY },
});
console.log(await r.json());

Hide chat · ✅ live verified

[chats] POST /chats/{id}/hide.

POST /v1/{account}/native/chats/{chat_id}/hide · 2 credit(s)

Path params: chat_id

Shell
curl -X POST \
  -H "X-API-Key: $CREATORS_API_KEY" \
  "https://api.creator-api.com/v1/{account}/native/chats/{chat_id}/hide" -d '{}'
Python
import requests
r = requests.post(
    "https://api.creator-api.com/v1/{account}/native/chats/{chat_id}/hide",
    headers={"X-API-Key": KEY},
).json()
print(r.json())
JavaScript
const r = await fetch("https://api.creator-api.com/v1/{account}/native/chats/{chat_id}/hide", {
  method: "POST",
  headers: { "X-API-Key": KEY },
});
console.log(await r.json());

Like message · ✅ live verified

[chat-messages] POST /messages/{id}/like.

POST /v1/{account}/native/messages/{message_id}/like · 2 credit(s) · Needs retest against an inbound (fan-authored) message -- our test message was one we sent, likely why 'like' rejected it while pin/unpin on the same id worked.

Path params: message_id

Shell
curl -X POST \
  -H "X-API-Key: $CREATORS_API_KEY" \
  "https://api.creator-api.com/v1/{account}/native/messages/{message_id}/like" -d '{}'
Python
import requests
r = requests.post(
    "https://api.creator-api.com/v1/{account}/native/messages/{message_id}/like",
    headers={"X-API-Key": KEY},
).json()
print(r.json())
JavaScript
const r = await fetch("https://api.creator-api.com/v1/{account}/native/messages/{message_id}/like", {
  method: "POST",
  headers: { "X-API-Key": KEY },
});
console.log(await r.json());

Like post comment · ✅ live verified

[post-comments] POST /comments/{id}/like.

POST /v1/{account}/native/comments/{comment_id}/like · 2 credit(s)

Path params: comment_id

Shell
curl -X POST \
  -H "X-API-Key: $CREATORS_API_KEY" \
  "https://api.creator-api.com/v1/{account}/native/comments/{comment_id}/like" -d '{}'
Python
import requests
r = requests.post(
    "https://api.creator-api.com/v1/{account}/native/comments/{comment_id}/like",
    headers={"X-API-Key": KEY},
).json()
print(r.json())
JavaScript
const r = await fetch("https://api.creator-api.com/v1/{account}/native/comments/{comment_id}/like", {
  method: "POST",
  headers: { "X-API-Key": KEY },
});
console.log(await r.json());

List chat messages · ✅ live verified

[chat-messages] GET /chats/{id}/messages. exists as get_chat_messages. Each message includes an isOpened field, but it never reflects true read status, confirmed live against a real read message: it stays false even when the fan has demonstrably opened it. The field that actually works is isNew: it stays true until the fan genuinely opens the chat thread, then flips to false, confirmed live with a real read and unread control pair, and does not flip on its own just from polling it. Building per fan read tracking this way costs one call per fan per check at 1 credit each, cheap for a small audience but adds up fast for a mass message sent to hundreds or thousands of fans, and more importantly means many rapid sequential calls against the same connected account, which risks tripping OnlyFans own rate limiting or a session logout if pushed too hard in a short window. Test on a small audience first and pace repeated polls per fan rather than hammering this endpoint for every recipient of a big blast at once.

GET /v1/{account}/native/chats/{chat_id}/messages · 1 credit(s)

Path params: chat_id

Shell
curl -X GET \
  -H "X-API-Key: $CREATORS_API_KEY" \
  "https://api.creator-api.com/v1/{account}/native/chats/{chat_id}/messages?limit=50"
Python
import requests
r = requests.get(
    "https://api.creator-api.com/v1/{account}/native/chats/{chat_id}/messages?limit=50",
    headers={"X-API-Key": KEY},
)
print(r.json())
JavaScript
const r = await fetch("https://api.creator-api.com/v1/{account}/native/chats/{chat_id}/messages?limit=50", {
  method: "GET",
  headers: { "X-API-Key": KEY },
});
console.log(await r.json());

List pinned users in user list · ✅ live verified

[user-list-collections] GET /lists/{id}/users/pinned.

GET /v1/{account}/native/lists/{list_id}/users/pinned · 1 credit(s)

Path params: list_id

Shell
curl -X GET \
  -H "X-API-Key: $CREATORS_API_KEY" \
  "https://api.creator-api.com/v1/{account}/native/lists/{list_id}/users/pinned?limit=50"
Python
import requests
r = requests.get(
    "https://api.creator-api.com/v1/{account}/native/lists/{list_id}/users/pinned?limit=50",
    headers={"X-API-Key": KEY},
)
print(r.json())
JavaScript
const r = await fetch("https://api.creator-api.com/v1/{account}/native/lists/{list_id}/users/pinned?limit=50", {
  method: "GET",
  headers: { "X-API-Key": KEY },
});
console.log(await r.json());

List post comments · ✅ live verified

[post-comments] GET /posts/{id}/comments.

GET /v1/{account}/native/posts/{post_id}/comments · 1 credit(s) · Route confirmed via create_post_comment succeeding on a fresh post in the same run; this specific test post had comments disabled.

Path params: post_id

Shell
curl -X GET \
  -H "X-API-Key: $CREATORS_API_KEY" \
  "https://api.creator-api.com/v1/{account}/native/posts/{post_id}/comments?limit=50"
Python
import requests
r = requests.get(
    "https://api.creator-api.com/v1/{account}/native/posts/{post_id}/comments?limit=50",
    headers={"X-API-Key": KEY},
)
print(r.json())
JavaScript
const r = await fetch("https://api.creator-api.com/v1/{account}/native/posts/{post_id}/comments?limit=50", {
  method: "GET",
  headers: { "X-API-Key": KEY },
});
console.log(await r.json());

List story highlights · ✅ live verified

[story-highlights] GET /users/{id}/stories/highlights.

GET /v1/{account}/native/users/{user_id}/stories/highlights · 1 credit(s)

Path params: user_id

Shell
curl -X GET \
  -H "X-API-Key: $CREATORS_API_KEY" \
  "https://api.creator-api.com/v1/{account}/native/users/{user_id}/stories/highlights?limit=50"
Python
import requests
r = requests.get(
    "https://api.creator-api.com/v1/{account}/native/users/{user_id}/stories/highlights?limit=50",
    headers={"X-API-Key": KEY},
)
print(r.json())
JavaScript
const r = await fetch("https://api.creator-api.com/v1/{account}/native/users/{user_id}/stories/highlights?limit=50", {
  method: "GET",
  headers: { "X-API-Key": KEY },
});
console.log(await r.json());

List story viewers · ✅ live verified

[stories] GET /stories/{id}/viewers.

GET /v1/{account}/native/stories/{story_id}/viewers · 1 credit(s)

Path params: story_id

Shell
curl -X GET \
  -H "X-API-Key: $CREATORS_API_KEY" \
  "https://api.creator-api.com/v1/{account}/native/stories/{story_id}/viewers?limit=50"
Python
import requests
r = requests.get(
    "https://api.creator-api.com/v1/{account}/native/stories/{story_id}/viewers?limit=50",
    headers={"X-API-Key": KEY},
)
print(r.json())
JavaScript
const r = await fetch("https://api.creator-api.com/v1/{account}/native/stories/{story_id}/viewers?limit=50", {
  method: "GET",
  headers: { "X-API-Key": KEY },
});
console.log(await r.json());

List user list users · ✅ live verified

[user-list-collections] GET /lists/{id}/users.

GET /v1/{account}/native/lists/{list_id}/users · 1 credit(s)

Path params: list_id

Shell
curl -X GET \
  -H "X-API-Key: $CREATORS_API_KEY" \
  "https://api.creator-api.com/v1/{account}/native/lists/{list_id}/users?limit=50"
Python
import requests
r = requests.get(
    "https://api.creator-api.com/v1/{account}/native/lists/{list_id}/users?limit=50",
    headers={"X-API-Key": KEY},
)
print(r.json())
JavaScript
const r = await fetch("https://api.creator-api.com/v1/{account}/native/lists/{list_id}/users?limit=50", {
  method: "GET",
  headers: { "X-API-Key": KEY },
});
console.log(await r.json());

Mark chat as read · ✅ live verified

[chats] POST /chats/{id}/mark-as-read.

POST /v1/{account}/native/chats/{chat_id}/mark-as-read · 2 credit(s)

Path params: chat_id

Shell
curl -X POST \
  -H "X-API-Key: $CREATORS_API_KEY" \
  "https://api.creator-api.com/v1/{account}/native/chats/{chat_id}/mark-as-read" -d '{}'
Python
import requests
r = requests.post(
    "https://api.creator-api.com/v1/{account}/native/chats/{chat_id}/mark-as-read",
    headers={"X-API-Key": KEY},
).json()
print(r.json())
JavaScript
const r = await fetch("https://api.creator-api.com/v1/{account}/native/chats/{chat_id}/mark-as-read", {
  method: "POST",
  headers: { "X-API-Key": KEY },
});
console.log(await r.json());

Mark chat as unread · ✅ live verified

[chats] DELETE /chats/{id}/mark-as-read.

DELETE /v1/{account}/native/chats/{chat_id}/mark-as-read · 2 credit(s)

Path params: chat_id

Shell
curl -X DELETE \
  -H "X-API-Key: $CREATORS_API_KEY" \
  "https://api.creator-api.com/v1/{account}/native/chats/{chat_id}/mark-as-read" -d '{}'
Python
import requests
r = requests.delete(
    "https://api.creator-api.com/v1/{account}/native/chats/{chat_id}/mark-as-read",
    headers={"X-API-Key": KEY},
).json()
print(r.json())
JavaScript
const r = await fetch("https://api.creator-api.com/v1/{account}/native/chats/{chat_id}/mark-as-read", {
  method: "DELETE",
  headers: { "X-API-Key": KEY },
});
console.log(await r.json());

Mark story as watched · ✅ live verified

[stories] PUT /stories/{id}/watched.

PUT /v1/{account}/native/stories/{story_id}/watched · 2 credit(s)

Path params: story_id

Shell
curl -X PUT \
  -H "X-API-Key: $CREATORS_API_KEY" \
  "https://api.creator-api.com/v1/{account}/native/stories/{story_id}/watched" -d '{}'
Python
import requests
r = requests.put(
    "https://api.creator-api.com/v1/{account}/native/stories/{story_id}/watched",
    headers={"X-API-Key": KEY},
).json()
print(r.json())
JavaScript
const r = await fetch("https://api.creator-api.com/v1/{account}/native/stories/{story_id}/watched", {
  method: "PUT",
  headers: { "X-API-Key": KEY },
});
console.log(await r.json());

Message buyers · ✅ live verified

[engagement-messages] GET /messages/queue/{id}/buyers. sample 404 (no qmsg id on hyla)

GET /v1/{account}/native/messages/queue/{queue_id}/buyers · 1 credit(s)

Path params: queue_id

Shell
curl -X GET \
  -H "X-API-Key: $CREATORS_API_KEY" \
  "https://api.creator-api.com/v1/{account}/native/messages/queue/{queue_id}/buyers?limit=50"
Python
import requests
r = requests.get(
    "https://api.creator-api.com/v1/{account}/native/messages/queue/{queue_id}/buyers?limit=50",
    headers={"X-API-Key": KEY},
)
print(r.json())
JavaScript
const r = await fetch("https://api.creator-api.com/v1/{account}/native/messages/queue/{queue_id}/buyers?limit=50", {
  method: "GET",
  headers: { "X-API-Key": KEY },
});
console.log(await r.json());

Mute chat notifications · ✅ live verified

[chats] POST /chats/{id}/mute.

POST /v1/{account}/native/chats/{chat_id}/mute · 2 credit(s)

Path params: chat_id

Shell
curl -X POST \
  -H "X-API-Key: $CREATORS_API_KEY" \
  "https://api.creator-api.com/v1/{account}/native/chats/{chat_id}/mute" -d '{}'
Python
import requests
r = requests.post(
    "https://api.creator-api.com/v1/{account}/native/chats/{chat_id}/mute",
    headers={"X-API-Key": KEY},
).json()
print(r.json())
JavaScript
const r = await fetch("https://api.creator-api.com/v1/{account}/native/chats/{chat_id}/mute", {
  method: "POST",
  headers: { "X-API-Key": KEY },
});
console.log(await r.json());

Pin message · ✅ live verified

[chat-messages] POST /messages/{id}/pin.

POST /v1/{account}/native/messages/{message_id}/pin · 2 credit(s)

Path params: message_id

Shell
curl -X POST \
  -H "X-API-Key: $CREATORS_API_KEY" \
  "https://api.creator-api.com/v1/{account}/native/messages/{message_id}/pin" -d '{}'
Python
import requests
r = requests.post(
    "https://api.creator-api.com/v1/{account}/native/messages/{message_id}/pin",
    headers={"X-API-Key": KEY},
).json()
print(r.json())
JavaScript
const r = await fetch("https://api.creator-api.com/v1/{account}/native/messages/{message_id}/pin", {
  method: "POST",
  headers: { "X-API-Key": KEY },
});
console.log(await r.json());

Pin post comment · ✅ live verified

[post-comments] POST /comments/{id}/pin.

POST /v1/{account}/native/comments/{comment_id}/pin · 2 credit(s)

Path params: comment_id

Shell
curl -X POST \
  -H "X-API-Key: $CREATORS_API_KEY" \
  "https://api.creator-api.com/v1/{account}/native/comments/{comment_id}/pin" -d '{}'
Python
import requests
r = requests.post(
    "https://api.creator-api.com/v1/{account}/native/comments/{comment_id}/pin",
    headers={"X-API-Key": KEY},
).json()
print(r.json())
JavaScript
const r = await fetch("https://api.creator-api.com/v1/{account}/native/comments/{comment_id}/pin", {
  method: "POST",
  headers: { "X-API-Key": KEY },
});
console.log(await r.json());

Pin unpin post · ✅ live verified

[posts] POST /posts/{id}/pin.

POST /v1/{account}/native/posts/{post_id}/pin · 2 credit(s)

Path params: post_id

Shell
curl -X POST \
  -H "X-API-Key: $CREATORS_API_KEY" \
  "https://api.creator-api.com/v1/{account}/native/posts/{post_id}/pin" -d '{}'
Python
import requests
r = requests.post(
    "https://api.creator-api.com/v1/{account}/native/posts/{post_id}/pin",
    headers={"X-API-Key": KEY},
).json()
print(r.json())
JavaScript
const r = await fetch("https://api.creator-api.com/v1/{account}/native/posts/{post_id}/pin", {
  method: "POST",
  headers: { "X-API-Key": KEY },
});
console.log(await r.json());

Pin unpin user in user list · ✅ live verified

[user-list-collections] POST /lists/{id}/users/{id}/pin.

POST /v1/{account}/native/lists/{list_id}/users/{user_id}/pin · 2 credit(s) · CONFIRMED live 2026-08-14 as part of the same roundtrip: POST /lists/{list_id}/users/{user_id}/pin -> 200 {"success":true}, verified via GET /lists/{list_id}/users/pinned showing the user. Was previously blocked only because add_users_to_user_list couldn't get a user into a list to pin -- not broken itself.

Path params: list_id, user_id

Shell
curl -X POST \
  -H "X-API-Key: $CREATORS_API_KEY" \
  "https://api.creator-api.com/v1/{account}/native/lists/{list_id}/users/{user_id}/pin" -d '{}'
Python
import requests
r = requests.post(
    "https://api.creator-api.com/v1/{account}/native/lists/{list_id}/users/{user_id}/pin",
    headers={"X-API-Key": KEY},
).json()
print(r.json())
JavaScript
const r = await fetch("https://api.creator-api.com/v1/{account}/native/lists/{list_id}/users/{user_id}/pin", {
  method: "POST",
  headers: { "X-API-Key": KEY },
});
console.log(await r.json());

Publish queue item

[queue] PUT /schedules/{id}/publish.

PUT /v1/{account}/native/schedules/{schedule_id}/publish · 2 credit(s)

Path params: schedule_id

Shell
curl -X PUT \
  -H "X-API-Key: $CREATORS_API_KEY" \
  "https://api.creator-api.com/v1/{account}/native/schedules/{schedule_id}/publish" -d '{}'
Python
import requests
r = requests.put(
    "https://api.creator-api.com/v1/{account}/native/schedules/{schedule_id}/publish",
    headers={"X-API-Key": KEY},
).json()
print(r.json())
JavaScript
const r = await fetch("https://api.creator-api.com/v1/{account}/native/schedules/{schedule_id}/publish", {
  method: "PUT",
  headers: { "X-API-Key": KEY },
});
console.log(await r.json());

Remove media from list · ✅ live verified

[media-vault-lists] DELETE /vault/lists/{id}/media.

DELETE /v1/{account}/native/vault/lists/{list_id}/media · 2 credit(s)

Path params: list_id

Shell
curl -X DELETE \
  -H "X-API-Key: $CREATORS_API_KEY" \
  "https://api.creator-api.com/v1/{account}/native/vault/lists/{list_id}/media" -d '{}'
Python
import requests
r = requests.delete(
    "https://api.creator-api.com/v1/{account}/native/vault/lists/{list_id}/media",
    headers={"X-API-Key": KEY},
).json()
print(r.json())
JavaScript
const r = await fetch("https://api.creator-api.com/v1/{account}/native/vault/lists/{list_id}/media", {
  method: "DELETE",
  headers: { "X-API-Key": KEY },
});
console.log(await r.json());

Remove story from highlight

[story-highlights] DELETE /stories/highlights/{id}/{id}.

DELETE /v1/{account}/native/stories/highlights/{highlight_id}/{highlight_id2} · 2 credit(s)

Path params: highlight_id, highlight_id2

Shell
curl -X DELETE \
  -H "X-API-Key: $CREATORS_API_KEY" \
  "https://api.creator-api.com/v1/{account}/native/stories/highlights/{highlight_id}/{highlight_id2}" -d '{}'
Python
import requests
r = requests.delete(
    "https://api.creator-api.com/v1/{account}/native/stories/highlights/{highlight_id}/{highlight_id2}",
    headers={"X-API-Key": KEY},
).json()
print(r.json())
JavaScript
const r = await fetch("https://api.creator-api.com/v1/{account}/native/stories/highlights/{highlight_id}/{highlight_id2}", {
  method: "DELETE",
  headers: { "X-API-Key": KEY },
});
console.log(await r.json());

Remove user from a user list · ✅ live verified

[user-list-collections] DELETE /lists/{id}/users/{id}. exists as remove_from_list

DELETE /v1/{account}/native/lists/{list_id}/users/{user_id} · 2 credit(s) · CONFIRMED live 2026-08-14 as part of the add_users_to_user_list fix roundtrip on gammaboy1: DELETE /lists/{list_id}/users/{user_id} -> 200, user actually removed (GET list afterward returned empty users array). Was previously blocked only because there was no working way to get a user INTO a list to test removal on -- not broken itself.

Path params: list_id, user_id

Shell
curl -X DELETE \
  -H "X-API-Key: $CREATORS_API_KEY" \
  "https://api.creator-api.com/v1/{account}/native/lists/{list_id}/users/{user_id}" -d '{}'
Python
import requests
r = requests.delete(
    "https://api.creator-api.com/v1/{account}/native/lists/{list_id}/users/{user_id}",
    headers={"X-API-Key": KEY},
).json()
print(r.json())
JavaScript
const r = await fetch("https://api.creator-api.com/v1/{account}/native/lists/{list_id}/users/{user_id}", {
  method: "DELETE",
  headers: { "X-API-Key": KEY },
});
console.log(await r.json());

Rename vault list · ✅ live verified

[media-vault-lists] PATCH /vault/lists/{id}.

PATCH /v1/{account}/native/vault/lists/{list_id} · 2 credit(s)

Path params: list_id

Shell
curl -X PATCH \
  -H "X-API-Key: $CREATORS_API_KEY" \
  "https://api.creator-api.com/v1/{account}/native/vault/lists/{list_id}" -d '{}'
Python
import requests
r = requests.patch(
    "https://api.creator-api.com/v1/{account}/native/vault/lists/{list_id}",
    headers={"X-API-Key": KEY},
).json()
print(r.json())
JavaScript
const r = await fetch("https://api.creator-api.com/v1/{account}/native/vault/lists/{list_id}", {
  method: "PATCH",
  headers: { "X-API-Key": KEY },
});
console.log(await r.json());

Restrict user · ✅ live verified

[users] POST /users/{id}/restrict.

POST /v1/{account}/native/users/{user_id}/restrict · 2 credit(s) · Route confirmed via fake-id probe; real restrict effect intentionally never fired against a real fan.

Path params: user_id

Shell
curl -X POST \
  -H "X-API-Key: $CREATORS_API_KEY" \
  "https://api.creator-api.com/v1/{account}/native/users/{user_id}/restrict" -d '{}'
Python
import requests
r = requests.post(
    "https://api.creator-api.com/v1/{account}/native/users/{user_id}/restrict",
    headers={"X-API-Key": KEY},
).json()
print(r.json())
JavaScript
const r = await fetch("https://api.creator-api.com/v1/{account}/native/users/{user_id}/restrict", {
  method: "POST",
  headers: { "X-API-Key": KEY },
});
console.log(await r.json());

Search chat messages · ✅ live verified

[chat-messages] GET /chats/{id}/messages/search.

GET /v1/{account}/native/chats/{chat_id}/messages/search · 1 credit(s)

Path params: chat_id

Shell
curl -X GET \
  -H "X-API-Key: $CREATORS_API_KEY" \
  "https://api.creator-api.com/v1/{account}/native/chats/{chat_id}/messages/search?limit=50"
Python
import requests
r = requests.get(
    "https://api.creator-api.com/v1/{account}/native/chats/{chat_id}/messages/search?limit=50",
    headers={"X-API-Key": KEY},
)
print(r.json())
JavaScript
const r = await fetch("https://api.creator-api.com/v1/{account}/native/chats/{chat_id}/messages/search?limit=50", {
  method: "GET",
  headers: { "X-API-Key": KEY },
});
console.log(await r.json());

Send chat message · ✅ live verified

[chat-messages] POST /chats/{id}/messages. Send a direct message to one fan. chat_id is the fan user id. Body: {"text": "..."} sends a free text message and returns the created message object (has id). For a paid PPV message, add "price" (a number between 3 and 200) and either "lockedText": true (locks the text itself) or "mediaFiles": [...] (locks the attached media, upload it first via POST /v1/{account}/media/upload and pass its media_file object here). Optional "previews": [...] shows free preview media next to a locked send. Example: {"text": "check this out", "price": 5, "lockedText": false, "mediaFiles": [{"processId": "...", "host": "...", "name": "photo.jpg", "extra": {...}}]}. Live verified in production, including a real locked media PPV delivered and priced correctly for unlock. A send acts on the real account and reaches the fan immediately: treat every write as production, there is no sandbox.

POST /v1/{account}/native/chats/{chat_id}/messages · 2 credit(s)

Path params: chat_id

Shell
curl -X POST \
  -H "X-API-Key: $CREATORS_API_KEY" \
  "https://api.creator-api.com/v1/{account}/native/chats/{chat_id}/messages" -d '{}'
Python
import requests
r = requests.post(
    "https://api.creator-api.com/v1/{account}/native/chats/{chat_id}/messages",
    headers={"X-API-Key": KEY},
).json()
print(r.json())
JavaScript
const r = await fetch("https://api.creator-api.com/v1/{account}/native/chats/{chat_id}/messages", {
  method: "POST",
  headers: { "X-API-Key": KEY },
});
console.log(await r.json());

Show post statistics · ✅ live verified

[posts] GET /posts/{id}/stats.

GET /v1/{account}/native/posts/{post_id}/stats · 1 credit(s) · Live 404 on multiple real, confirmed-existing posts (2026-08-14) -- route exists but path/behavior is wrong, not resource-missing. Real path unknown.

Path params: post_id

Shell
curl -X GET \
  -H "X-API-Key: $CREATORS_API_KEY" \
  "https://api.creator-api.com/v1/{account}/native/posts/{post_id}/stats?limit=50"
Python
import requests
r = requests.get(
    "https://api.creator-api.com/v1/{account}/native/posts/{post_id}/stats?limit=50",
    headers={"X-API-Key": KEY},
)
print(r.json())
JavaScript
const r = await fetch("https://api.creator-api.com/v1/{account}/native/posts/{post_id}/stats?limit=50", {
  method: "GET",
  headers: { "X-API-Key": KEY },
});
console.log(await r.json());

Show story · ✅ live verified

[stories] GET /stories/{id}.

GET /v1/{account}/native/stories/{story_id} · 1 credit(s)

Path params: story_id

Shell
curl -X GET \
  -H "X-API-Key: $CREATORS_API_KEY" \
  "https://api.creator-api.com/v1/{account}/native/stories/{story_id}?limit=50"
Python
import requests
r = requests.get(
    "https://api.creator-api.com/v1/{account}/native/stories/{story_id}?limit=50",
    headers={"X-API-Key": KEY},
)
print(r.json())
JavaScript
const r = await fetch("https://api.creator-api.com/v1/{account}/native/stories/{story_id}?limit=50", {
  method: "GET",
  headers: { "X-API-Key": KEY },
});
console.log(await r.json());

Show story highlight · ✅ live verified

[story-highlights] GET /stories/highlights/{id}.

GET /v1/{account}/native/stories/highlights/{highlight_id} · 1 credit(s)

Path params: highlight_id

Shell
curl -X GET \
  -H "X-API-Key: $CREATORS_API_KEY" \
  "https://api.creator-api.com/v1/{account}/native/stories/highlights/{highlight_id}?limit=50"
Python
import requests
r = requests.get(
    "https://api.creator-api.com/v1/{account}/native/stories/highlights/{highlight_id}?limit=50",
    headers={"X-API-Key": KEY},
)
print(r.json())
JavaScript
const r = await fetch("https://api.creator-api.com/v1/{account}/native/stories/highlights/{highlight_id}?limit=50", {
  method: "GET",
  headers: { "X-API-Key": KEY },
});
console.log(await r.json());

Show vault list · ✅ live verified

[media-vault-lists] GET /vault/lists/{id}.

GET /v1/{account}/native/vault/lists/{list_id} · 1 credit(s)

Path params: list_id

Shell
curl -X GET \
  -H "X-API-Key: $CREATORS_API_KEY" \
  "https://api.creator-api.com/v1/{account}/native/vault/lists/{list_id}?limit=50"
Python
import requests
r = requests.get(
    "https://api.creator-api.com/v1/{account}/native/vault/lists/{list_id}?limit=50",
    headers={"X-API-Key": KEY},
)
print(r.json())
JavaScript
const r = await fetch("https://api.creator-api.com/v1/{account}/native/vault/lists/{list_id}?limit=50", {
  method: "GET",
  headers: { "X-API-Key": KEY },
});
console.log(await r.json());

Stop promotion

[promotions] POST /promotions/{id}/finish.

POST /v1/{account}/native/promotions/{promotion_id}/finish · 2 credit(s)

Path params: promotion_id

Shell
curl -X POST \
  -H "X-API-Key: $CREATORS_API_KEY" \
  "https://api.creator-api.com/v1/{account}/native/promotions/{promotion_id}/finish" -d '{}'
Python
import requests
r = requests.post(
    "https://api.creator-api.com/v1/{account}/native/promotions/{promotion_id}/finish",
    headers={"X-API-Key": KEY},
).json()
print(r.json())
JavaScript
const r = await fetch("https://api.creator-api.com/v1/{account}/native/promotions/{promotion_id}/finish", {
  method: "POST",
  headers: { "X-API-Key": KEY },
});
console.log(await r.json());

Subscribe to user · ✅ live verified

[users] POST /users/{id}/subscribe.

POST /v1/{account}/native/users/{user_id}/subscribe · 2 credit(s) · Live-proven 2026-08-14 on the pre-authorized gammaboy1<->hyladiaz pair: POST /users/493820841/subscribe (gamma->hyla) returned 200 and created a real, verified active subscription (confirmed via GET /subscriptions/subscribes?type=active, hyla's id appeared). Used to unblock testing unsubscribe_from_user, which needed a fresh active subscription.

Path params: user_id

Shell
curl -X POST \
  -H "X-API-Key: $CREATORS_API_KEY" \
  "https://api.creator-api.com/v1/{account}/native/users/{user_id}/subscribe" -d '{}'
Python
import requests
r = requests.post(
    "https://api.creator-api.com/v1/{account}/native/users/{user_id}/subscribe",
    headers={"X-API-Key": KEY},
).json()
print(r.json())
JavaScript
const r = await fetch("https://api.creator-api.com/v1/{account}/native/users/{user_id}/subscribe", {
  method: "POST",
  headers: { "X-API-Key": KEY },
});
console.log(await r.json());

Unblock user · ✅ live verified

[users] DELETE /users/{id}/block.

DELETE /v1/{account}/native/users/{user_id}/block · 2 credit(s)

Path params: user_id

Shell
curl -X DELETE \
  -H "X-API-Key: $CREATORS_API_KEY" \
  "https://api.creator-api.com/v1/{account}/native/users/{user_id}/block" -d '{}'
Python
import requests
r = requests.delete(
    "https://api.creator-api.com/v1/{account}/native/users/{user_id}/block",
    headers={"X-API-Key": KEY},
).json()
print(r.json())
JavaScript
const r = await fetch("https://api.creator-api.com/v1/{account}/native/users/{user_id}/block", {
  method: "DELETE",
  headers: { "X-API-Key": KEY },
});
console.log(await r.json());

Unlike message · ✅ live verified

[chat-messages] DELETE /messages/{id}/like.

DELETE /v1/{account}/native/messages/{message_id}/like · 2 credit(s) · Same caveat as like_message.

Path params: message_id

Shell
curl -X DELETE \
  -H "X-API-Key: $CREATORS_API_KEY" \
  "https://api.creator-api.com/v1/{account}/native/messages/{message_id}/like" -d '{}'
Python
import requests
r = requests.delete(
    "https://api.creator-api.com/v1/{account}/native/messages/{message_id}/like",
    headers={"X-API-Key": KEY},
).json()
print(r.json())
JavaScript
const r = await fetch("https://api.creator-api.com/v1/{account}/native/messages/{message_id}/like", {
  method: "DELETE",
  headers: { "X-API-Key": KEY },
});
console.log(await r.json());

Unlike post comment · ✅ live verified

[post-comments] DELETE /comments/{id}/like.

DELETE /v1/{account}/native/comments/{comment_id}/like · 2 credit(s)

Path params: comment_id

Shell
curl -X DELETE \
  -H "X-API-Key: $CREATORS_API_KEY" \
  "https://api.creator-api.com/v1/{account}/native/comments/{comment_id}/like" -d '{}'
Python
import requests
r = requests.delete(
    "https://api.creator-api.com/v1/{account}/native/comments/{comment_id}/like",
    headers={"X-API-Key": KEY},
).json()
print(r.json())
JavaScript
const r = await fetch("https://api.creator-api.com/v1/{account}/native/comments/{comment_id}/like", {
  method: "DELETE",
  headers: { "X-API-Key": KEY },
});
console.log(await r.json());

Unmute chat notifications · ✅ live verified

[chats] DELETE /chats/{id}/mute.

DELETE /v1/{account}/native/chats/{chat_id}/mute · 2 credit(s)

Path params: chat_id

Shell
curl -X DELETE \
  -H "X-API-Key: $CREATORS_API_KEY" \
  "https://api.creator-api.com/v1/{account}/native/chats/{chat_id}/mute" -d '{}'
Python
import requests
r = requests.delete(
    "https://api.creator-api.com/v1/{account}/native/chats/{chat_id}/mute",
    headers={"X-API-Key": KEY},
).json()
print(r.json())
JavaScript
const r = await fetch("https://api.creator-api.com/v1/{account}/native/chats/{chat_id}/mute", {
  method: "DELETE",
  headers: { "X-API-Key": KEY },
});
console.log(await r.json());

Unpin message · ✅ live verified

[chat-messages] DELETE /messages/{id}/pin.

DELETE /v1/{account}/native/messages/{message_id}/pin · 2 credit(s)

Path params: message_id

Shell
curl -X DELETE \
  -H "X-API-Key: $CREATORS_API_KEY" \
  "https://api.creator-api.com/v1/{account}/native/messages/{message_id}/pin" -d '{}'
Python
import requests
r = requests.delete(
    "https://api.creator-api.com/v1/{account}/native/messages/{message_id}/pin",
    headers={"X-API-Key": KEY},
).json()
print(r.json())
JavaScript
const r = await fetch("https://api.creator-api.com/v1/{account}/native/messages/{message_id}/pin", {
  method: "DELETE",
  headers: { "X-API-Key": KEY },
});
console.log(await r.json());

Unpin post comment · ✅ live verified

[post-comments] DELETE /comments/{id}/pin.

DELETE /v1/{account}/native/comments/{comment_id}/pin · 2 credit(s)

Path params: comment_id

Shell
curl -X DELETE \
  -H "X-API-Key: $CREATORS_API_KEY" \
  "https://api.creator-api.com/v1/{account}/native/comments/{comment_id}/pin" -d '{}'
Python
import requests
r = requests.delete(
    "https://api.creator-api.com/v1/{account}/native/comments/{comment_id}/pin",
    headers={"X-API-Key": KEY},
).json()
print(r.json())
JavaScript
const r = await fetch("https://api.creator-api.com/v1/{account}/native/comments/{comment_id}/pin", {
  method: "DELETE",
  headers: { "X-API-Key": KEY },
});
console.log(await r.json());

Unrestrict user · ✅ live verified

[users] DELETE /users/{id}/restrict.

DELETE /v1/{account}/native/users/{user_id}/restrict · 2 credit(s)

Path params: user_id

Shell
curl -X DELETE \
  -H "X-API-Key: $CREATORS_API_KEY" \
  "https://api.creator-api.com/v1/{account}/native/users/{user_id}/restrict" -d '{}'
Python
import requests
r = requests.delete(
    "https://api.creator-api.com/v1/{account}/native/users/{user_id}/restrict",
    headers={"X-API-Key": KEY},
).json()
print(r.json())
JavaScript
const r = await fetch("https://api.creator-api.com/v1/{account}/native/users/{user_id}/restrict", {
  method: "DELETE",
  headers: { "X-API-Key": KEY },
});
console.log(await r.json());

Unsend delete mass message · ✅ live verified

[mass-messaging] DELETE /messages/queue/{id}.

DELETE /v1/{account}/native/messages/queue/{queue_id} · 2 credit(s)

Path params: queue_id

Shell
curl -X DELETE \
  -H "X-API-Key: $CREATORS_API_KEY" \
  "https://api.creator-api.com/v1/{account}/native/messages/queue/{queue_id}" -d '{}'
Python
import requests
r = requests.delete(
    "https://api.creator-api.com/v1/{account}/native/messages/queue/{queue_id}",
    headers={"X-API-Key": KEY},
).json()
print(r.json())
JavaScript
const r = await fetch("https://api.creator-api.com/v1/{account}/native/messages/queue/{queue_id}", {
  method: "DELETE",
  headers: { "X-API-Key": KEY },
});
console.log(await r.json());

Unsubscribe from user · ✅ live verified

[users] DELETE /users/{id}/subscribe.

DELETE /v1/{account}/native/users/{user_id}/subscribe · 2 credit(s) · SOLVED 2026-08-14. The required 'reason' value is a numeric enum in the JSON body -- {"reason": 1} returns 200. Confirmed live: created a fresh active subscription via subscribe_to_user, then unsubscribed with reason=1, then verified via GET /subscriptions/subscribes?type=active that hyla's id was gone -- state matched the exact pre-test baseline. Earlier attempts failed for two stacked reasons: string reason values ('other' etc.) always get "Invalid reason", and separately gamma's prior subscription to hyla (from the July audit) had already lapsed by 2026-08-14 -- confirmed via GET /subscriptions/subscribes?type=active and type=expired, hyla's id was in neither list -- so early numeric attempts (reason=0/5) failed with "Subscription not found", not "Invalid reason", which was the clue that led to testing against a freshly created subscription instead.

Path params: user_id

Shell
curl -X DELETE \
  -H "X-API-Key: $CREATORS_API_KEY" \
  "https://api.creator-api.com/v1/{account}/native/users/{user_id}/subscribe" -d '{}'
Python
import requests
r = requests.delete(
    "https://api.creator-api.com/v1/{account}/native/users/{user_id}/subscribe",
    headers={"X-API-Key": KEY},
).json()
print(r.json())
JavaScript
const r = await fetch("https://api.creator-api.com/v1/{account}/native/users/{user_id}/subscribe", {
  method: "DELETE",
  headers: { "X-API-Key": KEY },
});
console.log(await r.json());

Update mass message · ✅ live verified

[mass-messaging] PUT /messages/queue/{id}.

PUT /v1/{account}/native/messages/queue/{queue_id} · 2 credit(s)

Path params: queue_id

Shell
curl -X PUT \
  -H "X-API-Key: $CREATORS_API_KEY" \
  "https://api.creator-api.com/v1/{account}/native/messages/queue/{queue_id}" -d '{}'
Python
import requests
r = requests.put(
    "https://api.creator-api.com/v1/{account}/native/messages/queue/{queue_id}",
    headers={"X-API-Key": KEY},
).json()
print(r.json())
JavaScript
const r = await fetch("https://api.creator-api.com/v1/{account}/native/messages/queue/{queue_id}", {
  method: "PUT",
  headers: { "X-API-Key": KEY },
});
console.log(await r.json());

Update post · ✅ live verified

[posts] PUT /posts/{id}.

PUT /v1/{account}/native/posts/{post_id} · 2 credit(s)

Path params: post_id

Shell
curl -X PUT \
  -H "X-API-Key: $CREATORS_API_KEY" \
  "https://api.creator-api.com/v1/{account}/native/posts/{post_id}" -d '{}'
Python
import requests
r = requests.put(
    "https://api.creator-api.com/v1/{account}/native/posts/{post_id}",
    headers={"X-API-Key": KEY},
).json()
print(r.json())
JavaScript
const r = await fetch("https://api.creator-api.com/v1/{account}/native/posts/{post_id}", {
  method: "PUT",
  headers: { "X-API-Key": KEY },
});
console.log(await r.json());

Update social media button

[settings] PUT /users/social/buttons/{id}.

PUT /v1/{account}/native/users/social/buttons/{button_id} · 2 credit(s) · Requires {socialMedia, label, link} -- exact valid 'link' format for existing platforms not resolved.

Path params: button_id

Shell
curl -X PUT \
  -H "X-API-Key: $CREATORS_API_KEY" \
  "https://api.creator-api.com/v1/{account}/native/users/social/buttons/{button_id}" -d '{}'
Python
import requests
r = requests.put(
    "https://api.creator-api.com/v1/{account}/native/users/social/buttons/{button_id}",
    headers={"X-API-Key": KEY},
).json()
print(r.json())
JavaScript
const r = await fetch("https://api.creator-api.com/v1/{account}/native/users/social/buttons/{button_id}", {
  method: "PUT",
  headers: { "X-API-Key": KEY },
});
console.log(await r.json());

Update story highlight

[story-highlights] PATCH /stories/highlights/{id}.

PATCH /v1/{account}/native/stories/highlights/{highlight_id} · 2 credit(s)

Path params: highlight_id

Shell
curl -X PATCH \
  -H "X-API-Key: $CREATORS_API_KEY" \
  "https://api.creator-api.com/v1/{account}/native/stories/highlights/{highlight_id}" -d '{}'
Python
import requests
r = requests.patch(
    "https://api.creator-api.com/v1/{account}/native/stories/highlights/{highlight_id}",
    headers={"X-API-Key": KEY},
).json()
print(r.json())
JavaScript
const r = await fetch("https://api.creator-api.com/v1/{account}/native/stories/highlights/{highlight_id}", {
  method: "PATCH",
  headers: { "X-API-Key": KEY },
});
console.log(await r.json());

Update user list · ✅ live verified

[user-list-collections] PATCH /lists/{id}.

PATCH /v1/{account}/native/lists/{list_id} · 2 credit(s)

Path params: list_id

Shell
curl -X PATCH \
  -H "X-API-Key: $CREATORS_API_KEY" \
  "https://api.creator-api.com/v1/{account}/native/lists/{list_id}" -d '{}'
Python
import requests
r = requests.patch(
    "https://api.creator-api.com/v1/{account}/native/lists/{list_id}",
    headers={"X-API-Key": KEY},
).json()
print(r.json())
JavaScript
const r = await fetch("https://api.creator-api.com/v1/{account}/native/lists/{list_id}", {
  method: "PATCH",
  headers: { "X-API-Key": KEY },
});
console.log(await r.json());

notifications

Get notification counts · ✅ live verified

[notifications] GET /users/notifications/count.

GET /v1/{account}/native/users/notifications/count · 1 credit(s)

Shell
curl -X GET \
  -H "X-API-Key: $CREATORS_API_KEY" \
  "https://api.creator-api.com/v1/{account}/native/users/notifications/count?limit=50"
Python
import requests
r = requests.get(
    "https://api.creator-api.com/v1/{account}/native/users/notifications/count?limit=50",
    headers={"X-API-Key": KEY},
)
print(r.json())
JavaScript
const r = await fetch("https://api.creator-api.com/v1/{account}/native/users/notifications/count?limit=50", {
  method: "GET",
  headers: { "X-API-Key": KEY },
});
console.log(await r.json());

Get notification tabs order · ✅ live verified

[notifications] GET /users/notifications/settings/tabs-order.

GET /v1/{account}/native/users/notifications/settings/tabs-order · 1 credit(s)

Shell
curl -X GET \
  -H "X-API-Key: $CREATORS_API_KEY" \
  "https://api.creator-api.com/v1/{account}/native/users/notifications/settings/tabs-order?limit=50"
Python
import requests
r = requests.get(
    "https://api.creator-api.com/v1/{account}/native/users/notifications/settings/tabs-order?limit=50",
    headers={"X-API-Key": KEY},
)
print(r.json())
JavaScript
const r = await fetch("https://api.creator-api.com/v1/{account}/native/users/notifications/settings/tabs-order?limit=50", {
  method: "GET",
  headers: { "X-API-Key": KEY },
});
console.log(await r.json());

List notifications · ✅ live verified

[notifications] GET /users/notifications. exists as get_notifications

GET /v1/{account}/native/users/notifications · 1 credit(s) · exists as get_notifications

Shell
curl -X GET \
  -H "X-API-Key: $CREATORS_API_KEY" \
  "https://api.creator-api.com/v1/{account}/native/users/notifications?limit=50"
Python
import requests
r = requests.get(
    "https://api.creator-api.com/v1/{account}/native/users/notifications?limit=50",
    headers={"X-API-Key": KEY},
)
print(r.json())
JavaScript
const r = await fetch("https://api.creator-api.com/v1/{account}/native/users/notifications?limit=50", {
  method: "GET",
  headers: { "X-API-Key": KEY },
});
console.log(await r.json());

Mark all notifications as read · ✅ live verified

[notifications] POST /users/notifications/read.

POST /v1/{account}/native/users/notifications/read · 2 credit(s)

Shell
curl -X POST \
  -H "X-API-Key: $CREATORS_API_KEY" \
  "https://api.creator-api.com/v1/{account}/native/users/notifications/read" -d '{}'
Python
import requests
r = requests.post(
    "https://api.creator-api.com/v1/{account}/native/users/notifications/read",
    headers={"X-API-Key": KEY},
).json()
print(r.json())
JavaScript
const r = await fetch("https://api.creator-api.com/v1/{account}/native/users/notifications/read", {
  method: "POST",
  headers: { "X-API-Key": KEY },
});
console.log(await r.json());

Search users in notifications · ✅ live verified

[notifications] GET /users/notifications/users. Needs a real search term in the query (OF: "Query parameter is empty or missing" on ?limit=5 alone, matches the prior "400 needs query" note) -- exact param name not yet confirmed. Live-probed 2026-08-12.

GET /v1/{account}/native/users/notifications/users · 1 credit(s) · 400 needs query

Shell
curl -X GET \
  -H "X-API-Key: $CREATORS_API_KEY" \
  "https://api.creator-api.com/v1/{account}/native/users/notifications/users?limit=50"
Python
import requests
r = requests.get(
    "https://api.creator-api.com/v1/{account}/native/users/notifications/users?limit=50",
    headers={"X-API-Key": KEY},
)
print(r.json())
JavaScript
const r = await fetch("https://api.creator-api.com/v1/{account}/native/users/notifications/users?limit=50", {
  method: "GET",
  headers: { "X-API-Key": KEY },
});
console.log(await r.json());

Update notification tabs order · ✅ live verified

[notifications] POST /users/notifications/settings/tabs-order. Body needs "tabs" (OF: "Tabs is required" on an empty body) -- an ordered array, exact item shape not yet confirmed. Live-probed 2026-08-12.

POST /v1/{account}/native/users/notifications/settings/tabs-order · 2 credit(s) · Body must be {"tabs": [...]}, not a bare array.

Shell
curl -X POST \
  -H "X-API-Key: $CREATORS_API_KEY" \
  "https://api.creator-api.com/v1/{account}/native/users/notifications/settings/tabs-order" -d '{}'
Python
import requests
r = requests.post(
    "https://api.creator-api.com/v1/{account}/native/users/notifications/settings/tabs-order",
    headers={"X-API-Key": KEY},
).json()
print(r.json())
JavaScript
const r = await fetch("https://api.creator-api.com/v1/{account}/native/users/notifications/settings/tabs-order", {
  method: "POST",
  headers: { "X-API-Key": KEY },
});
console.log(await r.json());

payouts

Get account balances · ✅ live verified

[payouts] GET /payouts/balances.

GET /v1/{account}/native/payouts/balances · 1 credit(s)

Shell
curl -X GET \
  -H "X-API-Key: $CREATORS_API_KEY" \
  "https://api.creator-api.com/v1/{account}/native/payouts/balances?limit=50"
Python
import requests
r = requests.get(
    "https://api.creator-api.com/v1/{account}/native/payouts/balances?limit=50",
    headers={"X-API-Key": KEY},
)
print(r.json())
JavaScript
const r = await fetch("https://api.creator-api.com/v1/{account}/native/payouts/balances?limit=50", {
  method: "GET",
  headers: { "X-API-Key": KEY },
});
console.log(await r.json());

Get earning statistics · ✅ live verified

[payouts] GET /payouts/stats.

GET /v1/{account}/native/payouts/stats · 1 credit(s)

Shell
curl -X GET \
  -H "X-API-Key: $CREATORS_API_KEY" \
  "https://api.creator-api.com/v1/{account}/native/payouts/stats?limit=50"
Python
import requests
r = requests.get(
    "https://api.creator-api.com/v1/{account}/native/payouts/stats?limit=50",
    headers={"X-API-Key": KEY},
)
print(r.json())
JavaScript
const r = await fetch("https://api.creator-api.com/v1/{account}/native/payouts/stats?limit=50", {
  method: "GET",
  headers: { "X-API-Key": KEY },
});
console.log(await r.json());

Get eligibility · ✅ live verified

[payouts] GET /payouts/check-receive.

GET /v1/{account}/native/payouts/check-receive · 1 credit(s)

Shell
curl -X GET \
  -H "X-API-Key: $CREATORS_API_KEY" \
  "https://api.creator-api.com/v1/{account}/native/payouts/check-receive?limit=50"
Python
import requests
r = requests.get(
    "https://api.creator-api.com/v1/{account}/native/payouts/check-receive?limit=50",
    headers={"X-API-Key": KEY},
)
print(r.json())
JavaScript
const r = await fetch("https://api.creator-api.com/v1/{account}/native/payouts/check-receive?limit=50", {
  method: "GET",
  headers: { "X-API-Key": KEY },
});
console.log(await r.json());

List payout requests · ✅ live verified

[payouts] GET /payouts/requests.

GET /v1/{account}/native/payouts/requests · 1 credit(s)

Shell
curl -X GET \
  -H "X-API-Key: $CREATORS_API_KEY" \
  "https://api.creator-api.com/v1/{account}/native/payouts/requests?limit=50"
Python
import requests
r = requests.get(
    "https://api.creator-api.com/v1/{account}/native/payouts/requests?limit=50",
    headers={"X-API-Key": KEY},
)
print(r.json())
JavaScript
const r = await fetch("https://api.creator-api.com/v1/{account}/native/payouts/requests?limit=50", {
  method: "GET",
  headers: { "X-API-Key": KEY },
});
console.log(await r.json());

Request manual withdrawal

[payouts] POST /payouts/requests.

POST /v1/{account}/native/payouts/requests · 2 credit(s)

Shell
curl -X POST \
  -H "X-API-Key: $CREATORS_API_KEY" \
  "https://api.creator-api.com/v1/{account}/native/payouts/requests" -d '{}'
Python
import requests
r = requests.post(
    "https://api.creator-api.com/v1/{account}/native/payouts/requests",
    headers={"X-API-Key": KEY},
).json()
print(r.json())
JavaScript
const r = await fetch("https://api.creator-api.com/v1/{account}/native/payouts/requests", {
  method: "POST",
  headers: { "X-API-Key": KEY },
});
console.log(await r.json());

Update payout frequency

[payouts] PATCH /payouts/requests.

PATCH /v1/{account}/native/payouts/requests · 2 credit(s)

Shell
curl -X PATCH \
  -H "X-API-Key: $CREATORS_API_KEY" \
  "https://api.creator-api.com/v1/{account}/native/payouts/requests" -d '{}'
Python
import requests
r = requests.patch(
    "https://api.creator-api.com/v1/{account}/native/payouts/requests",
    headers={"X-API-Key": KEY},
).json()
print(r.json())
JavaScript
const r = await fetch("https://api.creator-api.com/v1/{account}/native/payouts/requests", {
  method: "PATCH",
  headers: { "X-API-Key": KEY },
});
console.log(await r.json());

post-labels

Create label · ✅ live verified

[post-labels] POST /labels.

POST /v1/{account}/native/labels · 2 credit(s) · Confirmed working (smoke-test creation returned 200); no delete_label route exists in our catalog to clean up test labels -- 'zz_audit_test_DELETE_ME' label left on hyladiaz, remove manually.

Shell
curl -X POST \
  -H "X-API-Key: $CREATORS_API_KEY" \
  "https://api.creator-api.com/v1/{account}/native/labels" -d '{}'
Python
import requests
r = requests.post(
    "https://api.creator-api.com/v1/{account}/native/labels",
    headers={"X-API-Key": KEY},
).json()
print(r.json())
JavaScript
const r = await fetch("https://api.creator-api.com/v1/{account}/native/labels", {
  method: "POST",
  headers: { "X-API-Key": KEY },
});
console.log(await r.json());

List labels · ✅ live verified

[post-labels] GET /labels.

GET /v1/{account}/native/labels · 1 credit(s)

Shell
curl -X GET \
  -H "X-API-Key: $CREATORS_API_KEY" \
  "https://api.creator-api.com/v1/{account}/native/labels?limit=50"
Python
import requests
r = requests.get(
    "https://api.creator-api.com/v1/{account}/native/labels?limit=50",
    headers={"X-API-Key": KEY},
)
print(r.json())
JavaScript
const r = await fetch("https://api.creator-api.com/v1/{account}/native/labels?limit=50", {
  method: "GET",
  headers: { "X-API-Key": KEY },
});
console.log(await r.json());

posts

List posts · ✅ live verified

[posts] GET /posts.

GET /v1/{account}/native/posts · 1 credit(s)

Shell
curl -X GET \
  -H "X-API-Key: $CREATORS_API_KEY" \
  "https://api.creator-api.com/v1/{account}/native/posts?limit=50"
Python
import requests
r = requests.get(
    "https://api.creator-api.com/v1/{account}/native/posts?limit=50",
    headers={"X-API-Key": KEY},
)
print(r.json())
JavaScript
const r = await fetch("https://api.creator-api.com/v1/{account}/native/posts?limit=50", {
  method: "GET",
  headers: { "X-API-Key": KEY },
});
console.log(await r.json());

Send post · ✅ live verified

[posts] POST /posts.

POST /v1/{account}/native/posts · 2 credit(s)

Shell
curl -X POST \
  -H "X-API-Key: $CREATORS_API_KEY" \
  "https://api.creator-api.com/v1/{account}/native/posts" -d '{}'
Python
import requests
r = requests.post(
    "https://api.creator-api.com/v1/{account}/native/posts",
    headers={"X-API-Key": KEY},
).json()
print(r.json())
JavaScript
const r = await fetch("https://api.creator-api.com/v1/{account}/native/posts", {
  method: "POST",
  headers: { "X-API-Key": KEY },
});
console.log(await r.json());

promotions

Create promotion

[promotions] POST /promotions.

POST /v1/{account}/native/promotions · 2 credit(s)

Shell
curl -X POST \
  -H "X-API-Key: $CREATORS_API_KEY" \
  "https://api.creator-api.com/v1/{account}/native/promotions" -d '{}'
Python
import requests
r = requests.post(
    "https://api.creator-api.com/v1/{account}/native/promotions",
    headers={"X-API-Key": KEY},
).json()
print(r.json())
JavaScript
const r = await fetch("https://api.creator-api.com/v1/{account}/native/promotions", {
  method: "POST",
  headers: { "X-API-Key": KEY },
});
console.log(await r.json());

List promotions · ✅ live verified

[promotions] GET /promotions.

GET /v1/{account}/native/promotions · 1 credit(s)

Shell
curl -X GET \
  -H "X-API-Key: $CREATORS_API_KEY" \
  "https://api.creator-api.com/v1/{account}/native/promotions?limit=50"
Python
import requests
r = requests.get(
    "https://api.creator-api.com/v1/{account}/native/promotions?limit=50",
    headers={"X-API-Key": KEY},
)
print(r.json())
JavaScript
const r = await fetch("https://api.creator-api.com/v1/{account}/native/promotions?limit=50", {
  method: "GET",
  headers: { "X-API-Key": KEY },
});
console.log(await r.json());

public-profiles

Search profiles · ✅ live verified

[public-profiles] GET /users/performers-search. exists as search_performers

GET /v1/{account}/native/users/performers-search · 1 credit(s) · exists as search_performers

Shell
curl -X GET \
  -H "X-API-Key: $CREATORS_API_KEY" \
  "https://api.creator-api.com/v1/{account}/native/users/performers-search?limit=50"
Python
import requests
r = requests.get(
    "https://api.creator-api.com/v1/{account}/native/users/performers-search?limit=50",
    headers={"X-API-Key": KEY},
)
print(r.json())
JavaScript
const r = await fetch("https://api.creator-api.com/v1/{account}/native/users/performers-search?limit=50", {
  method: "GET",
  headers: { "X-API-Key": KEY },
});
console.log(await r.json());

queue

Count queue items · ✅ live verified

[queue] GET /schedules/counters.

GET /v1/{account}/native/schedules/counters · 1 credit(s)

Shell
curl -X GET \
  -H "X-API-Key: $CREATORS_API_KEY" \
  "https://api.creator-api.com/v1/{account}/native/schedules/counters?limit=50"
Python
import requests
r = requests.get(
    "https://api.creator-api.com/v1/{account}/native/schedules/counters?limit=50",
    headers={"X-API-Key": KEY},
)
print(r.json())
JavaScript
const r = await fetch("https://api.creator-api.com/v1/{account}/native/schedules/counters?limit=50", {
  method: "GET",
  headers: { "X-API-Key": KEY },
});
console.log(await r.json());

List queue items · ✅ live verified

[queue] GET /schedules.

GET /v1/{account}/native/schedules · 1 credit(s)

Shell
curl -X GET \
  -H "X-API-Key: $CREATORS_API_KEY" \
  "https://api.creator-api.com/v1/{account}/native/schedules?limit=50"
Python
import requests
r = requests.get(
    "https://api.creator-api.com/v1/{account}/native/schedules?limit=50",
    headers={"X-API-Key": KEY},
)
print(r.json())
JavaScript
const r = await fetch("https://api.creator-api.com/v1/{account}/native/schedules?limit=50", {
  method: "GET",
  headers: { "X-API-Key": KEY },
});
console.log(await r.json());

release-forms

Create release form

[release-forms] POST /release-form-documents.

POST /v1/{account}/native/release-form-documents · 2 credit(s) · Requires an uploaded signedDocument + identityFrontPage file (png/jpg/pdf), not just a name.

Shell
curl -X POST \
  -H "X-API-Key: $CREATORS_API_KEY" \
  "https://api.creator-api.com/v1/{account}/native/release-form-documents" -d '{}'
Python
import requests
r = requests.post(
    "https://api.creator-api.com/v1/{account}/native/release-form-documents",
    headers={"X-API-Key": KEY},
).json()
print(r.json())
JavaScript
const r = await fetch("https://api.creator-api.com/v1/{account}/native/release-form-documents", {
  method: "POST",
  headers: { "X-API-Key": KEY },
});
console.log(await r.json());

Hide unhide release form

[release-forms] PATCH /release-forms/toggle-show.

PATCH /v1/{account}/native/release-forms/toggle-show · 2 credit(s)

Shell
curl -X PATCH \
  -H "X-API-Key: $CREATORS_API_KEY" \
  "https://api.creator-api.com/v1/{account}/native/release-forms/toggle-show" -d '{}'
Python
import requests
r = requests.patch(
    "https://api.creator-api.com/v1/{account}/native/release-forms/toggle-show",
    headers={"X-API-Key": KEY},
).json()
print(r.json())
JavaScript
const r = await fetch("https://api.creator-api.com/v1/{account}/native/release-forms/toggle-show", {
  method: "PATCH",
  headers: { "X-API-Key": KEY },
});
console.log(await r.json());

List mentions · ✅ live verified

[release-forms] GET /release-forms/mentions. exists as get_release_form_mentions

GET /v1/{account}/native/release-forms/mentions · 1 credit(s) · exists as get_release_form_mentions

Shell
curl -X GET \
  -H "X-API-Key: $CREATORS_API_KEY" \
  "https://api.creator-api.com/v1/{account}/native/release-forms/mentions?limit=50"
Python
import requests
r = requests.get(
    "https://api.creator-api.com/v1/{account}/native/release-forms/mentions?limit=50",
    headers={"X-API-Key": KEY},
)
print(r.json())
JavaScript
const r = await fetch("https://api.creator-api.com/v1/{account}/native/release-forms/mentions?limit=50", {
  method: "GET",
  headers: { "X-API-Key": KEY },
});
console.log(await r.json());

List release forms · ✅ live verified

[release-forms] GET /release-forms.

GET /v1/{account}/native/release-forms · 1 credit(s)

Shell
curl -X GET \
  -H "X-API-Key: $CREATORS_API_KEY" \
  "https://api.creator-api.com/v1/{account}/native/release-forms?limit=50"
Python
import requests
r = requests.get(
    "https://api.creator-api.com/v1/{account}/native/release-forms?limit=50",
    headers={"X-API-Key": KEY},
)
print(r.json())
JavaScript
const r = await fetch("https://api.creator-api.com/v1/{account}/native/release-forms?limit=50", {
  method: "GET",
  headers: { "X-API-Key": KEY },
});
console.log(await r.json());

List taggable users · ✅ live verified

[release-forms] GET /release-forms/mentions. same native route

GET /v1/{account}/native/release-forms/mentions · 1 credit(s) · exists as get_release_form_mentions

Shell
curl -X GET \
  -H "X-API-Key: $CREATORS_API_KEY" \
  "https://api.creator-api.com/v1/{account}/native/release-forms/mentions?limit=50"
Python
import requests
r = requests.get(
    "https://api.creator-api.com/v1/{account}/native/release-forms/mentions?limit=50",
    headers={"X-API-Key": KEY},
)
print(r.json())
JavaScript
const r = await fetch("https://api.creator-api.com/v1/{account}/native/release-forms/mentions?limit=50", {
  method: "GET",
  headers: { "X-API-Key": KEY },
});
console.log(await r.json());

Rename release form

[release-forms] PATCH /release-forms/rename.

PATCH /v1/{account}/native/release-forms/rename · 2 credit(s)

Shell
curl -X PATCH \
  -H "X-API-Key: $CREATORS_API_KEY" \
  "https://api.creator-api.com/v1/{account}/native/release-forms/rename" -d '{}'
Python
import requests
r = requests.patch(
    "https://api.creator-api.com/v1/{account}/native/release-forms/rename",
    headers={"X-API-Key": KEY},
).json()
print(r.json())
JavaScript
const r = await fetch("https://api.creator-api.com/v1/{account}/native/release-forms/rename", {
  method: "PATCH",
  headers: { "X-API-Key": KEY },
});
console.log(await r.json());

saved-for-later-messages

Disable automatic messaging · ✅ live verified

[saved-for-later-messages] PATCH /users/me/settings/messages.

PATCH /v1/{account}/native/users/me/settings/messages · 2 credit(s) · Consistently "Please refresh the page" on a healthy session -- unresolved, needs OF web-app JS-grep discovery. See needs-discovery.md.

Shell
curl -X PATCH \
  -H "X-API-Key: $CREATORS_API_KEY" \
  "https://api.creator-api.com/v1/{account}/native/users/me/settings/messages" -d '{}'
Python
import requests
r = requests.patch(
    "https://api.creator-api.com/v1/{account}/native/users/me/settings/messages",
    headers={"X-API-Key": KEY},
).json()
print(r.json())
JavaScript
const r = await fetch("https://api.creator-api.com/v1/{account}/native/users/me/settings/messages", {
  method: "PATCH",
  headers: { "X-API-Key": KEY },
});
console.log(await r.json());

Enable update automatic messaging · ✅ live verified

[saved-for-later-messages] PATCH /users/me/settings/messages.

PATCH /v1/{account}/native/users/me/settings/messages · 2 credit(s) · Consistently "Please refresh the page" on a healthy session -- unresolved, needs OF web-app JS-grep discovery. See needs-discovery.md.

Shell
curl -X PATCH \
  -H "X-API-Key: $CREATORS_API_KEY" \
  "https://api.creator-api.com/v1/{account}/native/users/me/settings/messages" -d '{}'
Python
import requests
r = requests.patch(
    "https://api.creator-api.com/v1/{account}/native/users/me/settings/messages",
    headers={"X-API-Key": KEY},
).json()
print(r.json())
JavaScript
const r = await fetch("https://api.creator-api.com/v1/{account}/native/users/me/settings/messages", {
  method: "PATCH",
  headers: { "X-API-Key": KEY },
});
console.log(await r.json());

Get message settings · ✅ live verified

[saved-for-later-messages] GET /users/settings/chat. auto-reply settings

GET /v1/{account}/native/users/settings/chat · 1 credit(s) · auto-reply settings

Shell
curl -X GET \
  -H "X-API-Key: $CREATORS_API_KEY" \
  "https://api.creator-api.com/v1/{account}/native/users/settings/chat?limit=50"
Python
import requests
r = requests.get(
    "https://api.creator-api.com/v1/{account}/native/users/settings/chat?limit=50",
    headers={"X-API-Key": KEY},
)
print(r.json())
JavaScript
const r = await fetch("https://api.creator-api.com/v1/{account}/native/users/settings/chat?limit=50", {
  method: "GET",
  headers: { "X-API-Key": KEY },
});
console.log(await r.json());

List saved for later messages · ✅ live verified

[saved-for-later-messages] GET /messages/templates.

GET /v1/{account}/native/messages/templates · 1 credit(s)

Shell
curl -X GET \
  -H "X-API-Key: $CREATORS_API_KEY" \
  "https://api.creator-api.com/v1/{account}/native/messages/templates?limit=50"
Python
import requests
r = requests.get(
    "https://api.creator-api.com/v1/{account}/native/messages/templates?limit=50",
    headers={"X-API-Key": KEY},
)
print(r.json())
JavaScript
const r = await fetch("https://api.creator-api.com/v1/{account}/native/messages/templates?limit=50", {
  method: "GET",
  headers: { "X-API-Key": KEY },
});
console.log(await r.json());

saved-for-later-posts

Disable automatic posting · ✅ live verified

[saved-for-later-posts] PATCH /users/settings/post.

PATCH /v1/{account}/native/users/settings/post · 2 credit(s) · Consistently "Please refresh the page" on a healthy session -- unresolved, needs OF web-app JS-grep discovery. See needs-discovery.md.

Shell
curl -X PATCH \
  -H "X-API-Key: $CREATORS_API_KEY" \
  "https://api.creator-api.com/v1/{account}/native/users/settings/post" -d '{}'
Python
import requests
r = requests.patch(
    "https://api.creator-api.com/v1/{account}/native/users/settings/post",
    headers={"X-API-Key": KEY},
).json()
print(r.json())
JavaScript
const r = await fetch("https://api.creator-api.com/v1/{account}/native/users/settings/post", {
  method: "PATCH",
  headers: { "X-API-Key": KEY },
});
console.log(await r.json());

Enable update automatic posting · ✅ live verified

[saved-for-later-posts] PATCH /users/settings/post.

PATCH /v1/{account}/native/users/settings/post · 2 credit(s) · Consistently "Please refresh the page" on a healthy session -- unresolved, needs OF web-app JS-grep discovery. See needs-discovery.md.

Shell
curl -X PATCH \
  -H "X-API-Key: $CREATORS_API_KEY" \
  "https://api.creator-api.com/v1/{account}/native/users/settings/post" -d '{}'
Python
import requests
r = requests.patch(
    "https://api.creator-api.com/v1/{account}/native/users/settings/post",
    headers={"X-API-Key": KEY},
).json()
print(r.json())
JavaScript
const r = await fetch("https://api.creator-api.com/v1/{account}/native/users/settings/post", {
  method: "PATCH",
  headers: { "X-API-Key": KEY },
});
console.log(await r.json());

Get post settings · ✅ live verified

[saved-for-later-posts] GET /users/settings/post.

GET /v1/{account}/native/users/settings/post · 1 credit(s)

Shell
curl -X GET \
  -H "X-API-Key: $CREATORS_API_KEY" \
  "https://api.creator-api.com/v1/{account}/native/users/settings/post?limit=50"
Python
import requests
r = requests.get(
    "https://api.creator-api.com/v1/{account}/native/users/settings/post?limit=50",
    headers={"X-API-Key": KEY},
)
print(r.json())
JavaScript
const r = await fetch("https://api.creator-api.com/v1/{account}/native/users/settings/post?limit=50", {
  method: "GET",
  headers: { "X-API-Key": KEY },
});
console.log(await r.json());

List saved for later posts · ✅ live verified

[saved-for-later-posts] GET /posts/bookmarks/categories. bookmarked drafts

GET /v1/{account}/native/posts/bookmarks/categories · 1 credit(s) · bookmarked drafts

Shell
curl -X GET \
  -H "X-API-Key: $CREATORS_API_KEY" \
  "https://api.creator-api.com/v1/{account}/native/posts/bookmarks/categories?limit=50"
Python
import requests
r = requests.get(
    "https://api.creator-api.com/v1/{account}/native/posts/bookmarks/categories?limit=50",
    headers={"X-API-Key": KEY},
)
print(r.json())
JavaScript
const r = await fetch("https://api.creator-api.com/v1/{account}/native/posts/bookmarks/categories?limit=50", {
  method: "GET",
  headers: { "X-API-Key": KEY },
});
console.log(await r.json());

settings

Add social media button

[settings] POST /users/social/buttons. Body needs "buttonIds" (OF: "ButtonIds is required" / "ButtonIds are invalid" on an empty body) -- plural and array-shaped, which reads more like selecting from a fixed set of button/platform types than freely creating one with an arbitrary label+url. NOT confirmed: the competitor's equivalent endpoint takes {label, type, value} instead, which may reflect a different abstraction on their side rather than the raw native shape. Needs an OF web-app JS grep to nail down for real -- live-probed 2026-08-12, empty body only.

POST /v1/{account}/native/users/social/buttons · 2 credit(s)

Shell
curl -X POST \
  -H "X-API-Key: $CREATORS_API_KEY" \
  "https://api.creator-api.com/v1/{account}/native/users/social/buttons" -d '{}'
Python
import requests
r = requests.post(
    "https://api.creator-api.com/v1/{account}/native/users/social/buttons",
    headers={"X-API-Key": KEY},
).json()
print(r.json())
JavaScript
const r = await fetch("https://api.creator-api.com/v1/{account}/native/users/social/buttons", {
  method: "POST",
  headers: { "X-API-Key": KEY },
});
console.log(await r.json());

Check username availability · ✅ live verified

[settings] POST /users/exists.

POST /v1/{account}/native/users/exists · 2 credit(s)

Shell
curl -X POST \
  -H "X-API-Key: $CREATORS_API_KEY" \
  "https://api.creator-api.com/v1/{account}/native/users/exists" -d '{}'
Python
import requests
r = requests.post(
    "https://api.creator-api.com/v1/{account}/native/users/exists",
    headers={"X-API-Key": KEY},
).json()
print(r.json())
JavaScript
const r = await fetch("https://api.creator-api.com/v1/{account}/native/users/exists", {
  method: "POST",
  headers: { "X-API-Key": KEY },
});
console.log(await r.json());

Enable disable drm · ✅ live verified

[settings] PUT /users/me/settings/security. body: isDrmEnabled (bool)

PUT /v1/{account}/native/users/me/settings/security · 2 credit(s) · Consistently "Please refresh the page" on a healthy session -- unresolved, needs OF web-app JS-grep discovery. See needs-discovery.md.

Shell
curl -X PUT \
  -H "X-API-Key: $CREATORS_API_KEY" \
  "https://api.creator-api.com/v1/{account}/native/users/me/settings/security" -d '{}'
Python
import requests
r = requests.put(
    "https://api.creator-api.com/v1/{account}/native/users/me/settings/security",
    headers={"X-API-Key": KEY},
).json()
print(r.json())
JavaScript
const r = await fetch("https://api.creator-api.com/v1/{account}/native/users/me/settings/security", {
  method: "PUT",
  headers: { "X-API-Key": KEY },
});
console.log(await r.json());

Enable disable welcome message

[settings] POST /messages/templates/reply_on_subscribe.

POST /v1/{account}/native/messages/templates/reply_on_subscribe · 2 credit(s) · the new-subscriber welcome template

Shell
curl -X POST \
  -H "X-API-Key: $CREATORS_API_KEY" \
  "https://api.creator-api.com/v1/{account}/native/messages/templates/reply_on_subscribe" -d '{}'
Python
import requests
r = requests.post(
    "https://api.creator-api.com/v1/{account}/native/messages/templates/reply_on_subscribe",
    headers={"X-API-Key": KEY},
).json()
print(r.json())
JavaScript
const r = await fetch("https://api.creator-api.com/v1/{account}/native/messages/templates/reply_on_subscribe", {
  method: "POST",
  headers: { "X-API-Key": KEY },
});
console.log(await r.json());

Get blocked countries · ✅ live verified

[settings] GET /users/me/settings. blockedCountries field

GET /v1/{account}/native/users/me/settings · 1 credit(s) · exists as get_settings

Shell
curl -X GET \
  -H "X-API-Key: $CREATORS_API_KEY" \
  "https://api.creator-api.com/v1/{account}/native/users/me/settings?limit=50"
Python
import requests
r = requests.get(
    "https://api.creator-api.com/v1/{account}/native/users/me/settings?limit=50",
    headers={"X-API-Key": KEY},
)
print(r.json())
JavaScript
const r = await fetch("https://api.creator-api.com/v1/{account}/native/users/me/settings?limit=50", {
  method: "GET",
  headers: { "X-API-Key": KEY },
});
console.log(await r.json());

Get drm status · ✅ live verified

[settings] GET /users/me/settings. drm field

GET /v1/{account}/native/users/me/settings · 1 credit(s) · exists as get_settings

Shell
curl -X GET \
  -H "X-API-Key: $CREATORS_API_KEY" \
  "https://api.creator-api.com/v1/{account}/native/users/me/settings?limit=50"
Python
import requests
r = requests.get(
    "https://api.creator-api.com/v1/{account}/native/users/me/settings?limit=50",
    headers={"X-API-Key": KEY},
)
print(r.json())
JavaScript
const r = await fetch("https://api.creator-api.com/v1/{account}/native/users/me/settings?limit=50", {
  method: "GET",
  headers: { "X-API-Key": KEY },
});
console.log(await r.json());

Get settings · ✅ live verified

[settings] GET /users/me/settings. exists as get_settings

GET /v1/{account}/native/users/me/settings · 1 credit(s) · exists as get_settings

Shell
curl -X GET \
  -H "X-API-Key: $CREATORS_API_KEY" \
  "https://api.creator-api.com/v1/{account}/native/users/me/settings?limit=50"
Python
import requests
r = requests.get(
    "https://api.creator-api.com/v1/{account}/native/users/me/settings?limit=50",
    headers={"X-API-Key": KEY},
)
print(r.json())
JavaScript
const r = await fetch("https://api.creator-api.com/v1/{account}/native/users/me/settings?limit=50", {
  method: "GET",
  headers: { "X-API-Key": KEY },
});
console.log(await r.json());

Get welcome message · ✅ live verified

[settings] GET /messages/templates/reply_on_subscribe.

GET /v1/{account}/native/messages/templates/reply_on_subscribe · 1 credit(s) · Live-exercised repeatedly 2026-08-14 in both states: returns a full template object (id, text, price, isActive, media, etc.) when a template exists, and a clean 404 {"error":{"message":"Template not found."}} when none exists (verified on both hyladiaz and gammaboy1). Previously marked UNTESTABLE; reclassified now that both response shapes have been observed live.

Shell
curl -X GET \
  -H "X-API-Key: $CREATORS_API_KEY" \
  "https://api.creator-api.com/v1/{account}/native/messages/templates/reply_on_subscribe?limit=50"
Python
import requests
r = requests.get(
    "https://api.creator-api.com/v1/{account}/native/messages/templates/reply_on_subscribe?limit=50",
    headers={"X-API-Key": KEY},
)
print(r.json())
JavaScript
const r = await fetch("https://api.creator-api.com/v1/{account}/native/messages/templates/reply_on_subscribe?limit=50", {
  method: "GET",
  headers: { "X-API-Key": KEY },
});
console.log(await r.json());

List social media buttons · ✅ live verified

[settings] GET /users/social/buttons.

GET /v1/{account}/native/users/social/buttons · 1 credit(s)

Shell
curl -X GET \
  -H "X-API-Key: $CREATORS_API_KEY" \
  "https://api.creator-api.com/v1/{account}/native/users/social/buttons?limit=50"
Python
import requests
r = requests.get(
    "https://api.creator-api.com/v1/{account}/native/users/social/buttons?limit=50",
    headers={"X-API-Key": KEY},
)
print(r.json())
JavaScript
const r = await fetch("https://api.creator-api.com/v1/{account}/native/users/social/buttons?limit=50", {
  method: "GET",
  headers: { "X-API-Key": KEY },
});
console.log(await r.json());

Reorder social media buttons · ✅ live verified

[settings] PUT /users/social/buttons.

PUT /v1/{account}/native/users/social/buttons · 2 credit(s) · This IS what add_social_media_button's documented route actually does -- see that entry.

Shell
curl -X PUT \
  -H "X-API-Key: $CREATORS_API_KEY" \
  "https://api.creator-api.com/v1/{account}/native/users/social/buttons" -d '{}'
Python
import requests
r = requests.put(
    "https://api.creator-api.com/v1/{account}/native/users/social/buttons",
    headers={"X-API-Key": KEY},
).json()
print(r.json())
JavaScript
const r = await fetch("https://api.creator-api.com/v1/{account}/native/users/social/buttons", {
  method: "PUT",
  headers: { "X-API-Key": KEY },
});
console.log(await r.json());

Update blocked countries · ✅ live verified

[settings] PUT /users/me/settings/security. body: blockedCountries (list of ISO country codes)

PUT /v1/{account}/native/users/me/settings/security · 2 credit(s) · Consistently "Please refresh the page" on a healthy session -- unresolved, needs OF web-app JS-grep discovery. See needs-discovery.md.

Shell
curl -X PUT \
  -H "X-API-Key: $CREATORS_API_KEY" \
  "https://api.creator-api.com/v1/{account}/native/users/me/settings/security" -d '{}'
Python
import requests
r = requests.put(
    "https://api.creator-api.com/v1/{account}/native/users/me/settings/security",
    headers={"X-API-Key": KEY},
).json()
print(r.json())
JavaScript
const r = await fetch("https://api.creator-api.com/v1/{account}/native/users/me/settings/security", {
  method: "PUT",
  headers: { "X-API-Key": KEY },
});
console.log(await r.json());

Update welcome message · ✅ live verified

[settings] POST /messages/templates/reply_on_subscribe.

POST /v1/{account}/native/messages/templates/reply_on_subscribe · 2 credit(s) · the new-subscriber welcome template ADDITIONAL 2026-08-14: DELETE /messages/templates/reply_on_subscribe also works (200 {"success":true}) and fully clears the template back to the true empty state (subsequent GET returns 404 "Template not found.", not just an empty-text POST -- empty string "" in POST's text field is itself rejected with "Text is not valid", so DELETE is the only real way to reset. Confirmed live on both hyladiaz and gammaboy1, used to clean up test artifacts from this session.

Shell
curl -X POST \
  -H "X-API-Key: $CREATORS_API_KEY" \
  "https://api.creator-api.com/v1/{account}/native/messages/templates/reply_on_subscribe" -d '{}'
Python
import requests
r = requests.post(
    "https://api.creator-api.com/v1/{account}/native/messages/templates/reply_on_subscribe",
    headers={"X-API-Key": KEY},
).json()
print(r.json())
JavaScript
const r = await fetch("https://api.creator-api.com/v1/{account}/native/messages/templates/reply_on_subscribe", {
  method: "POST",
  headers: { "X-API-Key": KEY },
});
console.log(await r.json());

statistics

Calculate total transactions · ✅ live verified

[statistics] GET /payments/all/has-transactions.

GET /v1/{account}/native/payments/all/has-transactions · 1 credit(s)

Shell
curl -X GET \
  -H "X-API-Key: $CREATORS_API_KEY" \
  "https://api.creator-api.com/v1/{account}/native/payments/all/has-transactions?limit=50"
Python
import requests
r = requests.get(
    "https://api.creator-api.com/v1/{account}/native/payments/all/has-transactions?limit=50",
    headers={"X-API-Key": KEY},
)
print(r.json())
JavaScript
const r = await fetch("https://api.creator-api.com/v1/{account}/native/payments/all/has-transactions?limit=50", {
  method: "GET",
  headers: { "X-API-Key": KEY },
});
console.log(await r.json());

Get earnings · ✅ live verified

[statistics] GET /earnings/chart.

GET /v1/{account}/native/earnings/chart · 1 credit(s)

Shell
curl -X GET \
  -H "X-API-Key: $CREATORS_API_KEY" \
  "https://api.creator-api.com/v1/{account}/native/earnings/chart?limit=50"
Python
import requests
r = requests.get(
    "https://api.creator-api.com/v1/{account}/native/earnings/chart?limit=50",
    headers={"X-API-Key": KEY},
)
print(r.json())
JavaScript
const r = await fetch("https://api.creator-api.com/v1/{account}/native/earnings/chart?limit=50", {
  method: "GET",
  headers: { "X-API-Key": KEY },
});
console.log(await r.json());

Get profile visitors · ✅ live verified

[statistics] GET /users/me/profile/stats.

GET /v1/{account}/native/users/me/profile/stats · 1 credit(s)

Shell
curl -X GET \
  -H "X-API-Key: $CREATORS_API_KEY" \
  "https://api.creator-api.com/v1/{account}/native/users/me/profile/stats?limit=50"
Python
import requests
r = requests.get(
    "https://api.creator-api.com/v1/{account}/native/users/me/profile/stats?limit=50",
    headers={"X-API-Key": KEY},
)
print(r.json())
JavaScript
const r = await fetch("https://api.creator-api.com/v1/{account}/native/users/me/profile/stats?limit=50", {
  method: "GET",
  headers: { "X-API-Key": KEY },
});
console.log(await r.json());

Get subscriber statistics · ✅ live verified

[statistics] GET /subscriptions/count/all.

GET /v1/{account}/native/subscriptions/count/all · 1 credit(s)

Shell
curl -X GET \
  -H "X-API-Key: $CREATORS_API_KEY" \
  "https://api.creator-api.com/v1/{account}/native/subscriptions/count/all?limit=50"
Python
import requests
r = requests.get(
    "https://api.creator-api.com/v1/{account}/native/subscriptions/count/all?limit=50",
    headers={"X-API-Key": KEY},
)
print(r.json())
JavaScript
const r = await fetch("https://api.creator-api.com/v1/{account}/native/subscriptions/count/all?limit=50", {
  method: "GET",
  headers: { "X-API-Key": KEY },
});
console.log(await r.json());

stories

Add to story · ✅ live verified

[stories] POST /stories.

POST /v1/{account}/native/stories · 2 credit(s)

Shell
curl -X POST \
  -H "X-API-Key: $CREATORS_API_KEY" \
  "https://api.creator-api.com/v1/{account}/native/stories" -d '{}'
Python
import requests
r = requests.post(
    "https://api.creator-api.com/v1/{account}/native/stories",
    headers={"X-API-Key": KEY},
).json()
print(r.json())
JavaScript
const r = await fetch("https://api.creator-api.com/v1/{account}/native/stories", {
  method: "POST",
  headers: { "X-API-Key": KEY },
});
console.log(await r.json());

List active stories · ✅ live verified

[stories] GET /users/me/stories.

GET /v1/{account}/native/users/me/stories · 1 credit(s)

Shell
curl -X GET \
  -H "X-API-Key: $CREATORS_API_KEY" \
  "https://api.creator-api.com/v1/{account}/native/users/me/stories?limit=50"
Python
import requests
r = requests.get(
    "https://api.creator-api.com/v1/{account}/native/users/me/stories?limit=50",
    headers={"X-API-Key": KEY},
)
print(r.json())
JavaScript
const r = await fetch("https://api.creator-api.com/v1/{account}/native/users/me/stories?limit=50", {
  method: "GET",
  headers: { "X-API-Key": KEY },
});
console.log(await r.json());

List story archive · ✅ live verified

[stories] GET /stories/archive.

GET /v1/{account}/native/stories/archive · 1 credit(s)

Shell
curl -X GET \
  -H "X-API-Key: $CREATORS_API_KEY" \
  "https://api.creator-api.com/v1/{account}/native/stories/archive?limit=50"
Python
import requests
r = requests.get(
    "https://api.creator-api.com/v1/{account}/native/stories/archive?limit=50",
    headers={"X-API-Key": KEY},
)
print(r.json())
JavaScript
const r = await fetch("https://api.creator-api.com/v1/{account}/native/stories/archive?limit=50", {
  method: "GET",
  headers: { "X-API-Key": KEY },
});
console.log(await r.json());

story-highlights

Create story highlight

[story-highlights] POST /stories/highlights.

POST /v1/{account}/native/stories/highlights · 2 credit(s)

Shell
curl -X POST \
  -H "X-API-Key: $CREATORS_API_KEY" \
  "https://api.creator-api.com/v1/{account}/native/stories/highlights" -d '{}'
Python
import requests
r = requests.post(
    "https://api.creator-api.com/v1/{account}/native/stories/highlights",
    headers={"X-API-Key": KEY},
).json()
print(r.json())
JavaScript
const r = await fetch("https://api.creator-api.com/v1/{account}/native/stories/highlights", {
  method: "POST",
  headers: { "X-API-Key": KEY },
});
console.log(await r.json());

subscription-bundles

Create bundle

[subscription-bundles] POST /subscriptions/bundles.

POST /v1/{account}/native/subscriptions/bundles · 2 credit(s)

Shell
curl -X POST \
  -H "X-API-Key: $CREATORS_API_KEY" \
  "https://api.creator-api.com/v1/{account}/native/subscriptions/bundles" -d '{}'
Python
import requests
r = requests.post(
    "https://api.creator-api.com/v1/{account}/native/subscriptions/bundles",
    headers={"X-API-Key": KEY},
).json()
print(r.json())
JavaScript
const r = await fetch("https://api.creator-api.com/v1/{account}/native/subscriptions/bundles", {
  method: "POST",
  headers: { "X-API-Key": KEY },
});
console.log(await r.json());

List bundles · ✅ live verified

[subscription-bundles] GET /subscriptions/bundles.

GET /v1/{account}/native/subscriptions/bundles · 1 credit(s)

Shell
curl -X GET \
  -H "X-API-Key: $CREATORS_API_KEY" \
  "https://api.creator-api.com/v1/{account}/native/subscriptions/bundles?limit=50"
Python
import requests
r = requests.get(
    "https://api.creator-api.com/v1/{account}/native/subscriptions/bundles?limit=50",
    headers={"X-API-Key": KEY},
)
print(r.json())
JavaScript
const r = await fetch("https://api.creator-api.com/v1/{account}/native/subscriptions/bundles?limit=50", {
  method: "GET",
  headers: { "X-API-Key": KEY },
});
console.log(await r.json());

user-list-collections

Create user list · ✅ live verified

[user-list-collections] POST /lists.

POST /v1/{account}/native/lists · 2 credit(s)

Shell
curl -X POST \
  -H "X-API-Key: $CREATORS_API_KEY" \
  "https://api.creator-api.com/v1/{account}/native/lists" -d '{}'
Python
import requests
r = requests.post(
    "https://api.creator-api.com/v1/{account}/native/lists",
    headers={"X-API-Key": KEY},
).json()
print(r.json())
JavaScript
const r = await fetch("https://api.creator-api.com/v1/{account}/native/lists", {
  method: "POST",
  headers: { "X-API-Key": KEY },
});
console.log(await r.json());

List user lists · ✅ live verified

[user-list-collections] GET /lists.

GET /v1/{account}/native/lists · 1 credit(s)

Shell
curl -X GET \
  -H "X-API-Key: $CREATORS_API_KEY" \
  "https://api.creator-api.com/v1/{account}/native/lists?limit=50"
Python
import requests
r = requests.get(
    "https://api.creator-api.com/v1/{account}/native/lists?limit=50",
    headers={"X-API-Key": KEY},
)
print(r.json())
JavaScript
const r = await fetch("https://api.creator-api.com/v1/{account}/native/lists?limit=50", {
  method: "GET",
  headers: { "X-API-Key": KEY },
});
console.log(await r.json());

users

Mass list user details

[users] GET /users/list. Needs real "ids" in the query (OF: "Invalid request" on ?limit=5 alone, matches the prior "400 needs ids" note). Live-probed 2026-08-12, exact param name/shape (comma-list vs repeated ids[] vs other) not confirmed.

GET /v1/{account}/native/users/list · 1 credit(s) · Requires undocumented field(s), OF says: "Invalid request"

Shell
curl -X GET \
  -H "X-API-Key: $CREATORS_API_KEY" \
  "https://api.creator-api.com/v1/{account}/native/users/list?limit=50"
Python
import requests
r = requests.get(
    "https://api.creator-api.com/v1/{account}/native/users/list?limit=50",
    headers={"X-API-Key": KEY},
)
print(r.json())
JavaScript
const r = await fetch("https://api.creator-api.com/v1/{account}/native/users/list?limit=50", {
  method: "GET",
  headers: { "X-API-Key": KEY },
});
console.log(await r.json());

webhooks

Create webhook · ✅ live verified

[webhooks] POST /v1/{account}/webhooks. Platform-agnostic: works identically for any connected account (OnlyFans, Fansly, 4based, Fanvue), not an OnlyFans-specific feature. Body: {url, events: [...]}. Returns the webhook including its signing secret (shown once). Live verified 2026-08-14 (created, delivered a real test POST, cleaned up).

POST /v1/{account}/webhooks · 2 credit(s)

Path params: account

Shell
curl -X POST \
  -H "X-API-Key: $CREATORS_API_KEY" \
  "https://api.creator-api.com/v1/{account}/webhooks" -d '{}'
Python
import requests
r = requests.post(
    "https://api.creator-api.com/v1/{account}/webhooks",
    headers={"X-API-Key": KEY},
).json()
print(r.json())
JavaScript
const r = await fetch("https://api.creator-api.com/v1/{account}/webhooks", {
  method: "POST",
  headers: { "X-API-Key": KEY },
});
console.log(await r.json());

Delete webhook · ✅ live verified

[webhooks] DELETE /v1/{account}/webhooks/{hook_id}. Platform-agnostic: works identically for any connected account (OnlyFans, Fansly, 4based, Fanvue), not an OnlyFans-specific feature. Live verified 2026-08-14.

DELETE /v1/{account}/webhooks/{hook_id} · 2 credit(s)

Path params: account, hook_id

Shell
curl -X DELETE \
  -H "X-API-Key: $CREATORS_API_KEY" \
  "https://api.creator-api.com/v1/{account}/webhooks/{hook_id}" -d '{}'
Python
import requests
r = requests.delete(
    "https://api.creator-api.com/v1/{account}/webhooks/{hook_id}",
    headers={"X-API-Key": KEY},
).json()
print(r.json())
JavaScript
const r = await fetch("https://api.creator-api.com/v1/{account}/webhooks/{hook_id}", {
  method: "DELETE",
  headers: { "X-API-Key": KEY },
});
console.log(await r.json());

Get webhook · ✅ live verified

[webhooks] GET /v1/{account}/webhooks/{hook_id}. Platform-agnostic: works identically for any connected account (OnlyFans, Fansly, 4based, Fanvue), not an OnlyFans-specific feature. Live verified 2026-08-14.

GET /v1/{account}/webhooks/{hook_id} · 1 credit(s)

Path params: account, hook_id

Shell
curl -X GET \
  -H "X-API-Key: $CREATORS_API_KEY" \
  "https://api.creator-api.com/v1/{account}/webhooks/{hook_id}"
Python
import requests
r = requests.get(
    "https://api.creator-api.com/v1/{account}/webhooks/{hook_id}",
    headers={"X-API-Key": KEY},
)
print(r.json())
JavaScript
const r = await fetch("https://api.creator-api.com/v1/{account}/webhooks/{hook_id}", {
  method: "GET",
  headers: { "X-API-Key": KEY },
});
console.log(await r.json());

List webhook deliveries · ✅ live verified

[webhooks] GET /v1/{account}/webhooks/{hook_id}/deliveries?limit=. Platform-agnostic: works identically for any connected account (OnlyFans, Fansly, 4based, Fanvue), not an OnlyFans-specific feature. Recent delivery attempts and their outcomes. Live verified 2026-08-14.

GET /v1/{account}/webhooks/{hook_id}/deliveries · 1 credit(s)

Path params: account, hook_id

Shell
curl -X GET \
  -H "X-API-Key: $CREATORS_API_KEY" \
  "https://api.creator-api.com/v1/{account}/webhooks/{hook_id}/deliveries?limit=50"
Python
import requests
r = requests.get(
    "https://api.creator-api.com/v1/{account}/webhooks/{hook_id}/deliveries?limit=50",
    headers={"X-API-Key": KEY},
)
print(r.json())
JavaScript
const r = await fetch("https://api.creator-api.com/v1/{account}/webhooks/{hook_id}/deliveries?limit=50", {
  method: "GET",
  headers: { "X-API-Key": KEY },
});
console.log(await r.json());

List webhook events · ✅ live verified

[webhooks] GET /v1/webhooks/events. Platform-agnostic: works identically for any connected account (OnlyFans, Fansly, 4based, Fanvue), not an OnlyFans-specific feature. Lists every event type a webhook can subscribe to (e.g. messages.received, messages.purchased, subscriptions.new) with a description. Live verified 2026-08-14.

GET /v1/webhooks/events · 1 credit(s)

Shell
curl -X GET \
  -H "X-API-Key: $CREATORS_API_KEY" \
  "https://api.creator-api.com/v1/webhooks/events"
Python
import requests
r = requests.get(
    "https://api.creator-api.com/v1/webhooks/events",
    headers={"X-API-Key": KEY},
)
print(r.json())
JavaScript
const r = await fetch("https://api.creator-api.com/v1/webhooks/events", {
  method: "GET",
  headers: { "X-API-Key": KEY },
});
console.log(await r.json());

List webhooks · ✅ live verified

[webhooks] GET /v1/{account}/webhooks. Platform-agnostic: works identically for any connected account (OnlyFans, Fansly, 4based, Fanvue), not an OnlyFans-specific feature. Lists webhooks configured for the account. Live verified 2026-08-14.

GET /v1/{account}/webhooks · 1 credit(s)

Path params: account

Shell
curl -X GET \
  -H "X-API-Key: $CREATORS_API_KEY" \
  "https://api.creator-api.com/v1/{account}/webhooks"
Python
import requests
r = requests.get(
    "https://api.creator-api.com/v1/{account}/webhooks",
    headers={"X-API-Key": KEY},
)
print(r.json())
JavaScript
const r = await fetch("https://api.creator-api.com/v1/{account}/webhooks", {
  method: "GET",
  headers: { "X-API-Key": KEY },
});
console.log(await r.json());

Test webhook · ✅ live verified

[webhooks] POST /v1/{account}/webhooks/{hook_id}/test. Platform-agnostic: works identically for any connected account (OnlyFans, Fansly, 4based, Fanvue), not an OnlyFans-specific feature. Sends a real test delivery to the webhook's URL and reports the real response status. Live verified 2026-08-14 (a real 405 came back from a URL that does not accept POST, proving this is a genuine delivery attempt, not a fake success).

POST /v1/{account}/webhooks/{hook_id}/test · 1 credit(s)

Path params: account, hook_id

Shell
curl -X POST \
  -H "X-API-Key: $CREATORS_API_KEY" \
  "https://api.creator-api.com/v1/{account}/webhooks/{hook_id}/test" -d '{}'
Python
import requests
r = requests.post(
    "https://api.creator-api.com/v1/{account}/webhooks/{hook_id}/test",
    headers={"X-API-Key": KEY},
).json()
print(r.json())
JavaScript
const r = await fetch("https://api.creator-api.com/v1/{account}/webhooks/{hook_id}/test", {
  method: "POST",
  headers: { "X-API-Key": KEY },
});
console.log(await r.json());

Update webhook · ✅ live verified

[webhooks] PATCH /v1/{account}/webhooks/{hook_id}. Platform-agnostic: works identically for any connected account (OnlyFans, Fansly, 4based, Fanvue), not an OnlyFans-specific feature. Body: any of {url, events, active}. Live verified 2026-08-14 (toggled active=false).

PATCH /v1/{account}/webhooks/{hook_id} · 2 credit(s)

Path params: account, hook_id

Shell
curl -X PATCH \
  -H "X-API-Key: $CREATORS_API_KEY" \
  "https://api.creator-api.com/v1/{account}/webhooks/{hook_id}" -d '{}'
Python
import requests
r = requests.patch(
    "https://api.creator-api.com/v1/{account}/webhooks/{hook_id}",
    headers={"X-API-Key": KEY},
).json()
print(r.json())
JavaScript
const r = await fetch("https://api.creator-api.com/v1/{account}/webhooks/{hook_id}", {
  method: "PATCH",
  headers: { "X-API-Key": KEY },
});
console.log(await r.json());
No endpoint matches that filter.