Home/Docs/OnlyFans reference

OnlyFans API Reference

Generated from the CreatorAPI capability catalog, including native routes and CreatorAPI services. Historical catalog flags are not current end-to-end test results; check each operation's notes. Full OnlyFansAPI parity is not established. 312 capabilities · 200 GET routes · 112 write routes · 44 groups.

Instructify ad tracking

OnlyFans click-level attribution is available through CreatorAPI's own /go/{id} redirects. This is not the old aggregate-only native campaign view. Use the returned traffic_redirect_url in the ad, not the native campaign URL or the unrelated general-purpose /l/ short-link endpoint.

Full integration guide covers creation, exact fields, polling, billing and cleanup. The following three GET endpoints implement the Instructify report shapes; a readonly key with access to the active creator suffices.

ReportPathResponse
Links/api/smart-links?account_ids={account}&limit=100&offset=0data: array of links
Clicks/api/smart-links/{id}/clicksdata: {summary, rows, filters}
Conversions/api/smart-links/{id}/conversionsdata: {summary, rows, filters}

For a client that appends /smart-links, configure https://api.creator-api.com/api as its reporting base URL. Creation still uses POST /v1/{account}/smart-links with a full key. Replace placeholders with IDs returned by CreatorAPI. Never put an API key in an ad URL.

Reports accept limit 1–100 and offset >= 0. Click/conversion time filters are date_start and date_end, timezone-qualified ISO 8601 timestamps with inclusive boundaries. Rows are newest first, then by stable ID. Conversions additionally accept conversion_type=new_subscriber or new_transaction. Invalid filters return 422; rate limits return 429 with Retry-After.

Clicks include stable ID, UTC time, all five utm fields, external_click_id (ecid), fbclid, gclid, ttclid, referrer, country_code, browser_device_type and bot/duplicate flags. An acquisition can claim one eligible unused click from the same offer in the preceding seven days. Bots and duplicates cannot be assigned. This is last-eligible-click attribution, not proof of a visitor's identity. Unmatched published conversions have click: null.

Later confirmed payments retain the acquisition click without a lifetime cutoff. Published amounts are numeric gross/net USD from native evidence, including signed reversals; known free subscriptions are 0/0. Subscriptions with missing or ambiguous financial evidence remain pending, exposed by pending_subscribers_total / pending_subscribers_count, rather than being falsely reported as free. Upsert stable conversion IDs and poll overlapping dates (at least seven days); the normal ingestion interval is five minutes and source delays can extend it.

Existing native campaign purchases

For legacy campaigns, use GET /v1/{account}/tracking-links/{campaign_id}/transactions or /spenders, with date_start/date_end, limit/offset and optional fan_id. These read actual campaign membership and gross/net financial records. A cold scan returns HTTP 202 and Retry-After: 2; repeat the same GET until 200. Pending status polls are free. Each completed report costs one native-read credit. Both reports share a five-minute key-scoped snapshot. Large histories may require a narrower time window. Native memberships can overlap between campaigns.

Legacy links never captured CreatorAPI click IDs or UTMs: their purchase rows have click: null. Do not mix these reports with first-party ad-attribution reports or add overlapping campaign totals as unique acquisition revenue.

Verification and integration handoff

Existing real campaign purchases and their per-fan sums were checked through the production API. Isolated tests also cover the first-party click/subscription/payment pipeline, but do not prove a real phone/desktop click-to-purchase chain. Instructify integration acceptance and the subsequent week-long comparison remain with the integrating team. Polling is supported; the optional Instructify-specific webhook event dialect is not implemented.

Profitability reporting

Implemented OF/Fansly net, explicit commission/cost inputs, batch and history: profitability guide. Supports asynchronous 202 polling; no guessed forecasts or missing-cost defaults.

Revenue and subscription metrics

All endpoints below use GET and existing account/workspace/read permissions.

  • /v1/{account}/analytics/earnings: total_gross, total_net, total_fees, count, by_type and by_type_details.
  • /v1/{account}/analytics/transactions/summary: totals and counts grouped by native payment status.
  • /v1/{account}/analytics/transactions/by-type: counts and gross/net/fees per native revenue type.
  • /v1/{account}/analytics/transactions/count: period transaction count; not an existence flag.
  • /v1/{account}/analytics/historical: monetary series; interval=day or month (default). Defaults to the preceding 365 days.
  • /v1/{account}/analytics/comparison: period_a_start, period_a_end, period_b_start, period_b_end; gross revenue comparison.
  • /v1/{account}/analytics/fans: period revenue per stable fan_id, including deleted fans; optional fan_id, limit (1–1000, default 100), offset. Descending gross revenue. Missing identities stay in a separate unattributed bucket. fan_count is not the number of subscribers.
  • /v1/{account}/analytics/subscribers: historical total/new/renewed subscription-event counts, including daily count, new_count and renewed_count. Requires inclusive YYYY-MM-DD UTC dates, at most 366 days. Total must equal new plus renewed on every day, otherwise the request fails with 502.

Revenue routes accept start_date/end_date. Date-only ends include the entire UTC day; timestamp ends are exclusive. Other revenue routes default to the preceding 30 days. Invalid dates return 422. Gross excludes buyer taxes; net is the native ledger amount, not agency profit. Decimal sums return rounded USD JSON numbers. Native revenue types are preserved. Reversals use signed amounts; ambiguous positive reversals fail rather than guessing the sign. Unknown statuses remain grouped and are not counted as successful payments.

Pagination validates identities, duplicate changes, descending dates, cursor progress and completion. Incomplete data returns 502. History uses transactions, not post counts; zero days are filled only after a complete scan. Forecasts include completed zero-revenue days and start today. Forecasts are estimates.

With detailed=true (the default), detailed.paid_subscriptions and detailed.free_subscriptions count events with an observed historical subscription price; detailed.unknown_subscriptions is the remaining chart count. Unknown is not a deleted-fan count: it also includes missing history and unsupported event shapes. detailed.complete is false whenever unknown is nonzero. Current profile prices and renewedAt are not used to reconstruct historical payments. These are subscription-event counts, not revenue totals or unique fans.

Use detailed=false for chart totals without scanning fan histories. Charts are read in batches of at most 31 days. Detailed reads are limited to 50 pages and checked against a 60-second budget between calls; incomplete, repeated or invalid pages fail with 502. Shorten the period if a detailed request exceeds those bounds. Known paid and free counts may understate the true categories when unknown is nonzero.

Subscription verification: fresh January native charts reconcile to 518 total, 518 new and 0 renewed events, day by day. A seven-event day contains six dated free subscription records and one missing history, returned as unknown. Positive paid and renewal cases, partial history, pagination and failures were tested with synthetic fixtures; no paid subscription or renewal was created for testing.

Historical subscription events must not be replaced by current active fans. The two native subscriber-count endpoints returned different current values in the audit; no equivalence is claimed. New/renewed event counts use the historical chart filters. Paid/free classification uses dated subscription history; missing historical prices remain unknown. The attempted native earnings-chart query returned empty; revenue verification therefore used complete payout-transaction pages.

Example: GET /v1/{account}/analytics/fans?start_date=2026-01-01&end_date=2026-01-31

Verification: 37 January transactions from two freshly captured native pages and 18 fan IDs reconcile through isolated candidate HTTP for gross/net/fees, types, fans, daily/monthly history and comparisons. The 31-day subscription chart reconciles to 518 events. Correctness was checked with captured live data through isolated HTTP before deployment.

Fan lifetime spend and campaign revenue

GET /v1/{account}/analytics/fans/{fan_id}/lifetime reads the native user relationship summary. fan_id is a positive numeric OnlyFans user ID. The response provides total_reported and by_type (tips, subscriptions, messages, posts, streams), source_field, observed_at and reconciliation flags. Amounts are provider-reported lifetime spend in USD; they are not identified as net earnings, a selected date range or campaign-attributed revenue. total_net and total_fees are null. Missing native totals return available=false and total_reported=null; a real reported zero stays zero. Missing categories remain null. Conflicting relationship totals and malformed values fail with 502. A provider error is not converted to zero.

GET /v1/{account}/smart-links/{smart_link_id}/spenders now returns only observed attributed gross revenue in revenue.total. This corrects the previous maximum of attributed revenue and unrelated lifetime spend, so affected totals may decrease. revenue.basis=observed_attributed_gross and coverage=recorded_conversions_only make the accounting boundary explicit. Use the separate lifetime endpoint for lifetime totals.

GET /v1/{account}/smart-links/{smart_link_id}/cohort-arps counts each identified fan once at their first observed acquisition for this link, before applying acquisition_start/acquisition_end filters. Date-only acquisition ends include the whole UTC day; timestamps are exclusive. Each completed N-day window includes transactions from acquisition (inclusive) to acquisition plus N days (exclusive). Pre-acquisition transactions and duplicate acquisition events do not inflate revenue. revenue_basis=net|gross (default net). Missing amounts, mixed currencies and ambiguous positive refunds fail instead of producing an understated or overstated total. Signed reversals are included.

These Smart Link reports describe recorded conversions. See the tracking reliability section for recovery behavior and delivery limits. ROAS and campaign totals must not be interpreted as a complete reconstruction of all historical earnings.

Verification: isolated tests cover lifetime source validation, real-zero versus missing, permission rejection, read-only key access, cohort boundaries, duplicate acquisitions, maturity, currency/amount failures and signed refunds. A freshly read native user response confirmed the lifetime relationship field shape. This is not a claim that every customer's upstream data or campaign ingestion has been tested.

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 · catalog flag: 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 · catalog flag: 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 · catalog flag: 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 · catalog flag: 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());

ad-tracking

Get ad tracking clicks

Individual recorded visits with unchanged utm fields, external_click_id, fbclid, referrer and bot/duplicate flags.

GET /api/smart-links/{smart_link_id}/clicks · free · data:{summary,rows,filters}; date_start/date_end are inclusive timezone-qualified ISO timestamps. Reports free; see integration guide for attribution limits.

Path params: smart_link_id

Shell
curl -X GET \
  -H "X-API-Key: $CREATORS_API_KEY" \
  "https://api.creator-api.com/api/smart-links/{smart_link_id}/clicks?date_start=2026-10-01T00:00:00Z&date_end=2026-10-08T23:59:59Z&limit=100&offset=0"
Python
import requests
r = requests.get(
    "https://api.creator-api.com/api/smart-links/{smart_link_id}/clicks?date_start=2026-10-01T00:00:00Z&date_end=2026-10-08T23:59:59Z&limit=100&offset=0",
    headers={"X-API-Key": KEY},
)
print(r.json())
JavaScript
const r = await fetch("https://api.creator-api.com/api/smart-links/{smart_link_id}/clicks?date_start=2026-10-01T00:00:00Z&date_end=2026-10-08T23:59:59Z&limit=100&offset=0", {
  method: "GET",
  headers: { "X-API-Key": KEY },
});
console.log(await r.json());

Get ad tracking conversions

new_subscriber and new_transaction rows with stable IDs, numeric gross/net USD and a complete acquisition click object or null.

GET /api/smart-links/{smart_link_id}/conversions · free · Unresolved subscription amounts remain pending, not free. Confirmed signed reversals included. Upsert by ID and poll overlapping dates; full live ad funnel is not claimed.

Path params: smart_link_id

Shell
curl -X GET \
  -H "X-API-Key: $CREATORS_API_KEY" \
  "https://api.creator-api.com/api/smart-links/{smart_link_id}/conversions?conversion_type=new_transaction&date_start=2026-10-01T00:00:00Z&date_end=2026-10-08T23:59:59Z&limit=100&offset=0"
Python
import requests
r = requests.get(
    "https://api.creator-api.com/api/smart-links/{smart_link_id}/conversions?conversion_type=new_transaction&date_start=2026-10-01T00:00:00Z&date_end=2026-10-08T23:59:59Z&limit=100&offset=0",
    headers={"X-API-Key": KEY},
)
print(r.json())
JavaScript
const r = await fetch("https://api.creator-api.com/api/smart-links/{smart_link_id}/conversions?conversion_type=new_transaction&date_start=2026-10-01T00:00:00Z&date_end=2026-10-08T23:59:59Z&limit=100&offset=0", {
  method: "GET",
  headers: { "X-API-Key": KEY },
});
console.log(await r.json());

Get native tracking spenders

Group the same native campaign financial records by fan, including signed reversals; not profile lifetime spending.

GET /v1/{account}/tracking-links/{campaign_id}/spenders · 1 credit(s) · Same date/fan selection shares the transaction snapshot for five minutes. Cold HTTP 202 polls free; completed reports one read credit. Optional fan_id. Native campaign memberships may overlap; do not claim unique attribution across campaigns.

Path params: account, campaign_id

Shell
curl -X GET \
  -H "X-API-Key: $CREATORS_API_KEY" \
  "https://api.creator-api.com/v1/{account}/tracking-links/{campaign_id}/spenders?date_start=2026-09-01T00:00:00Z&date_end=2026-10-01T00:00:00Z&limit=100&offset=0"
Python
import requests
r = requests.get(
    "https://api.creator-api.com/v1/{account}/tracking-links/{campaign_id}/spenders?date_start=2026-09-01T00:00:00Z&date_end=2026-10-01T00:00:00Z&limit=100&offset=0",
    headers={"X-API-Key": KEY},
)
print(r.json())
JavaScript
const r = await fetch("https://api.creator-api.com/v1/{account}/tracking-links/{campaign_id}/spenders?date_start=2026-09-01T00:00:00Z&date_end=2026-10-01T00:00:00Z&limit=100&offset=0", {
  method: "GET",
  headers: { "X-API-Key": KEY },
});
console.log(await r.json());

Get native tracking transactions

Read real existing payments for native campaign claimers, with exact gross/net USD and stable native payment identity.

GET /v1/{account}/tracking-links/{campaign_id}/transactions · 1 credit(s) · OnlyFans only. Cold HTTP 202 / Retry-After: 2 status polls are free; repeat the same GET until 200. Each completed report costs one read credit. Historic click:null, no retroactive UTMs. Existing real payments verified through production, not a full attributed ad funnel.

Path params: account, campaign_id

Shell
curl -X GET \
  -H "X-API-Key: $CREATORS_API_KEY" \
  "https://api.creator-api.com/v1/{account}/tracking-links/{campaign_id}/transactions?date_start=2026-09-01T00:00:00Z&date_end=2026-10-01T00:00:00Z&limit=100&offset=0"
Python
import requests
r = requests.get(
    "https://api.creator-api.com/v1/{account}/tracking-links/{campaign_id}/transactions?date_start=2026-09-01T00:00:00Z&date_end=2026-10-01T00:00:00Z&limit=100&offset=0",
    headers={"X-API-Key": KEY},
)
print(r.json())
JavaScript
const r = await fetch("https://api.creator-api.com/v1/{account}/tracking-links/{campaign_id}/transactions?date_start=2026-09-01T00:00:00Z&date_end=2026-10-01T00:00:00Z&limit=100&offset=0", {
  method: "GET",
  headers: { "X-API-Key": KEY },
});
console.log(await r.json());

analytics

Get analytics earnings overview · catalog flag: 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 · free

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

Get analytics fan lifetime revenue

Provider-reported lifetime fan spend; missing totals remain null. Separate from net earnings and campaign attribution.

GET /v1/{account}/analytics/fans/{fan_id}/lifetime · free · Native field shape observed; isolated auth and source validation tested. No direct authenticated production metric call in this release.

Path params: account, fan_id

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

Get analytics historical performance · catalog flag: verified

Daily/monthly monetary history from complete payout transactions; start_date, end_date and interval=day|month.

GET /v1/{account}/analytics/historical · free

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

Get analytics period comparison · catalog flag: 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 · free

Shell
curl -X GET \
  -H "X-API-Key: $CREATORS_API_KEY" \
  "https://api.creator-api.com/v1/{account}/analytics/comparison?period_a_start=2026-01-01&period_a_end=2026-01-31&period_b_start=2026-02-01&period_b_end=2026-02-28"
Python
import requests
r = requests.get(
    "https://api.creator-api.com/v1/{account}/analytics/comparison?period_a_start=2026-01-01&period_a_end=2026-01-31&period_b_start=2026-02-01&period_b_end=2026-02-28",
    headers={"X-API-Key": KEY},
)
print(r.json())
JavaScript
const r = await fetch("https://api.creator-api.com/v1/{account}/analytics/comparison?period_a_start=2026-01-01&period_a_end=2026-01-31&period_b_start=2026-02-01&period_b_end=2026-02-28", {
  method: "GET",
  headers: { "X-API-Key": KEY },
});
console.log(await r.json());

Get analytics revenue forecast · catalog flag: 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 · free

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

Get analytics subscriber metrics

Historical total/new/renewed subscription events with daily reconciliation. detailed=true adds known paid/free historical prices and an explicit unknown remainder; unknown is not a deleted-fan count.

GET /v1/{account}/analytics/subscribers · free · start_date/end_date required; inclusive UTC dates, at most 366 days. detailed=false avoids fan-history reads. Native read fixtures and isolated authenticated HTTP tested; no paid subscription or renewal created for verification.

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

Get analytics transaction summary · catalog flag: 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 · free

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

Get analytics transactions by type · catalog flag: 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 · free

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

analytics-financial

List transactions · catalog flag: verified

[transactions] GET /payouts/transactions. Creator earnings ledger; marker pagination.

GET /v1/{account}/native/payouts/transactions · 1 credit(s) · Follow nextMarker until the requested period is complete.

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

analytics-summary

Get earnings overview · catalog flag: 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 · catalog flag: 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 · catalog flag: 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 · free

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 · catalog flag: 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 · catalog flag: 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 · catalog flag: 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 · catalog flag: 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 · catalog flag: 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 · catalog flag: 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 · catalog flag: 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 · catalog flag: 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 · catalog flag: 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());

List direct message stats · catalog flag: verified

[chat-messages] GET /users/me/stats/messages/direct?startDate=&endDate=&limit=20. Statistics for every message with media sent to a single fan: id, messageId, toUserId, date, text, price, purchasedCount (0 or 1), viewedCount, sentCount and the media list with ids. The reliable way to attribute a PPV purchase to the exact message and fan. Dates as "YYYY-MM-DD HH:MM:SS" UTC. The route ignores offset: request the next page with endDate set to one second before the oldest row. For full history use the direct_messages export dataset. Live verified 2026-09-18.

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

Path params: account

Shell
curl -X GET \
  -H "X-API-Key: $CREATORS_API_KEY" \
  "https://api.creator-api.com/v1/{account}/native/users/me/stats/messages/direct?limit=50"
Python
import requests
r = requests.get(
    "https://api.creator-api.com/v1/{account}/native/users/me/stats/messages/direct?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/messages/direct?limit=50", {
  method: "GET",
  headers: { "X-API-Key": KEY },
});
console.log(await r.json());

Upload media · catalog flag: 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 "file=@photo.jpg" \
  "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 · catalog flag: 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 · catalog flag: 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 · catalog flag: verified

[data-exports] POST /v1/exports/{job_id}/cancel. Shared job API for OnlyFans, Fansly and 4based; dataset availability varies by platform. Fanvue exports are not enabled in this production release. Stops a queued or running export job.

POST /v1/exports/{job_id}/cancel · free

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 · catalog flag: verified

[data-exports] POST /v1/{account}/exports. Shared job API for OnlyFans, Fansly and 4based; dataset availability varies by platform. Fanvue exports are not enabled in this production release. Body: {dataset, fmt ("csv" default; also "jsonl", "xlsx", "zip"), max_rows, params}. XLSX preserves large IDs as text and does not execute formula-like text. ZIP contains data.csv and manifest.json for data datasets. Original-media ZIP export (media_vault) is not enabled or listed in this release. Live account checks returned CDN 403 with IP-bound signed URLs; the bounded archive implementation remains behind a closed release gate. Data ZIP contains records, not original media. Fansly media archives are also unavailable. CSV/ZIP formula-like strings, including column headers, are escaped with an apostrophe; JSONL preserves raw values. CSV/XLSX/ZIP use a private 512 MiB row spool; Excel cell/row limits fail the job without a partial download. OnlyFans/Fansly malformed pages, repeated pages, cursor cycles and exhausted safety budgets fail/refund rather than pretending to be complete. Explicit max_rows intentionally limits the output. Native snapshots, retention and provider data ceilings can still limit completeness. Date-only transaction and new dataset end dates include the full UTC day; timestamp ends are exclusive. chat_messages requires params.chat_id (numeric fan ID on OF or Fansly), one conversation per export with native cursor pagination; it sends no explicit read-receipt request, but provider-side unread state is not guaranteed unchanged. public_profiles requires 1-100 comma-separated params.usernames and returns only public fields from the connected OF account, not a broad profile database. trial_links, tracking_links, payouts, chargebacks and smart_links accept optional start_date/end_date. Native payout invoiceId, amounts and units are preserved; chargebacks retain their native payment object, not a synthesized signed transaction. smart_links exports only exactly owned workspace links and excludes delivery secrets/ownerless legacy links. New scans fail at 10000 pages/30 minutes checked around native requests, with a 16 MiB page limit; Fansly fan-to-group lookup uses at most 20 pages. Limits are not hard transport deadlines. Dataset params: subscribers takes {"type": "active" | "expired" | "all"}; mass_messages and direct_messages take {"startDate", "endDate"} as "YYYY-MM-DD HH:MM:SS" UTC and default to the last 365 days. transactions returns the full payout history newest first and also takes {"startDate", "endDate"} (ISO or "YYYY-MM-DD HH:MM:SS", UTC) to bound the window. mass_messages and direct_messages rows carry price, purchasedCount, viewedCount and the media ids per message (direct rows also messageId and toUserId), which is how purchases are attributed to content. One flat charge per job, whatever the size. 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 · 10 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());

Delete export

[data-exports] DELETE /v1/exports/{job_id}. Permanently removes an exactly owned, terminal export job and its output. Requires a full-scope key and export-manage permission for staff. Foreign or ownerless jobs return 404; queued, running or locked jobs return 409. Cancel and await a terminal state first. Storage removal failures return 503 and retain the job. Success returns {id, deleted: true}, invalidates download tokens, and preserves any required refund recovery intent. This deletes only the export copy, never source platform data. Tested through isolated HTTP; provider writes are not used.

DELETE /v1/exports/{job_id} · free

Path params: job_id

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

Download export · catalog flag: verified

[data-exports] GET /v1/exports/{job_id}/download?token=. Shared job API for OnlyFans, Fansly and 4based; dataset availability varies by platform. Fanvue exports are not enabled in this production release. 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 · free

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 · catalog flag: verified

[data-exports] GET /v1/exports/{job_id}. Shared job API for OnlyFans, Fansly and 4based; dataset availability varies by platform. Fanvue exports are not enabled in this production release. 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} · free

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 · catalog flag: verified

[data-exports] GET /v1/exports/datasets?platform=onlyfans|fansly|4based (platform optional). Shared job API for OnlyFans, Fansly and 4based; dataset availability varies by platform. Fanvue exports are not enabled in this production release. Lists the dataset names available for bulk export. OnlyFans: subscribers, expired_fans, following, transactions, posts, chats, mass_messages, direct_messages, profile_visitors, trial_links, tracking_links, chat_messages, payouts, chargebacks, public_profiles and smart_links. Fansly additionally supports chat_messages alongside subscribers, subscriptions, transactions, chats and following. profile_visitors requires params={start_date,end_date}, inclusive YYYY-MM-DD UTC dates for 1–366 non-future days. It returns daily total visit counts, not visitor identities, with date, visitors, visitor_type=total and period_complete. Today is marked incomplete. Reads use at most 31 days per request; missing, duplicate or non-daily dates fail the job rather than inventing zeros. All four formats work. It is OnlyFans-only. chats returns conversation metadata, not a full message transcript. subscribers and following walk OnlyFans own fan lists and are complete at any size (verified against an account with 41648 fans). expired_fans stops at 5000 rows because OnlyFans serves no more than that for expired subscriptions. A running job reports its progress in row_count, so a large export can be followed while it writes. Live verified 2026-09-23.

GET /v1/exports/datasets · free

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 · catalog flag: verified

[data-exports] GET /v1/{account}/exports. Shared job API for OnlyFans, Fansly and 4based; dataset availability varies by platform. Fanvue exports are not enabled in this production release. Lists export jobs for the account, scoped to the calling key. Live verified 2026-08-14.

GET /v1/{account}/exports · free

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 · catalog flag: verified

[data-exports] POST /v1/exports/{job_id}/retry. Shared job API for OnlyFans, Fansly and 4based; dataset availability varies by platform. Fanvue exports are not enabled in this production release. Re-runs a failed export job.

POST /v1/exports/{job_id}/retry · free

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 · catalog flag: 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 · catalog flag: verified

[mass-messaging] GET /messages/queue.

GET /v1/{account}/native/messages/queue · 1 credit(s) · only mass messages still queued or scheduled, so empty when nothing is pending. Sent ones with price, purchases and views: /users/me/stats/messages/group or the mass_messages export

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 · catalog flag: verified

[engagement-messages] GET /messages/queue.

GET /v1/{account}/native/messages/queue · 1 credit(s) · only mass messages still queued or scheduled, so empty when nothing is pending. Sent ones with price, purchases and views: /users/me/stats/messages/group or the mass_messages export

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 · catalog flag: 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 · catalog flag: 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) · only mass messages still queued or scheduled, so empty when nothing is pending. Sent ones with price, purchases and views: /users/me/stats/messages/group or the mass_messages export

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 · catalog flag: 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

Count fan awards · catalog flag: verified

[fans] GET /subscriptions/subscribers/awards/count. How many fans carry a badge. Query: filter. Live verified 2026-09-23 (route read off the OnlyFans web client build 202609221225).

GET /v1/{account}/native/subscriptions/subscribers/awards/count · 1 credit(s) · filter (live verified 2026-09-23)

Shell
curl -X GET \
  -H "X-API-Key: $CREATORS_API_KEY" \
  "https://api.creator-api.com/v1/{account}/native/subscriptions/subscribers/awards/count?limit=50"
Python
import requests
r = requests.get(
    "https://api.creator-api.com/v1/{account}/native/subscriptions/subscribers/awards/count?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/awards/count?limit=50", {
  method: "GET",
  headers: { "X-API-Key": KEY },
});
console.log(await r.json());

List active fans · catalog flag: 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 · catalog flag: 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 chat users · catalog flag: verified

[fans] GET /chats/users. The fans this account has a conversation with. Query: limit, offset. Live verified 2026-09-23 (route read off the OnlyFans web client build 202609221225).

GET /v1/{account}/native/chats/users · 1 credit(s) · fans with a conversation, limit, offset (live verified 2026-09-23)

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

List expired fans · catalog flag: 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 fan awards · catalog flag: verified

[fans] GET /subscriptions/subscribers/awards. Fan badges. Query: filter, limit, offset. Live verified 2026-09-23 (route read off the OnlyFans web client build 202609221225).

GET /v1/{account}/native/subscriptions/subscribers/awards · 1 credit(s) · fan badges, filter, limit, offset (live verified 2026-09-23)

Shell
curl -X GET \
  -H "X-API-Key: $CREATORS_API_KEY" \
  "https://api.creator-api.com/v1/{account}/native/subscriptions/subscribers/awards?limit=50"
Python
import requests
r = requests.get(
    "https://api.creator-api.com/v1/{account}/native/subscriptions/subscribers/awards?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/awards?limit=50", {
  method: "GET",
  headers: { "X-API-Key": KEY },
});
console.log(await r.json());

List latest fans · catalog flag: 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 mentionable users · catalog flag: verified

[fans] GET /users/mention. Users that can be mentioned. Query: query, limit, offset, format. Live verified 2026-09-23 (route read off the OnlyFans web client build 202609221225).

GET /v1/{account}/native/users/mention · 1 credit(s) · query, limit, offset, format (live verified 2026-09-23)

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

List top fans · catalog flag: 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());

List unsubscribe reasons · catalog flag: verified

[fans] GET /unsubscribe/reasons. The reasons a fan can pick when leaving. Live verified 2026-09-23 (route read off the OnlyFans web client build 202609221225).

GET /v1/{account}/native/unsubscribe/reasons · 1 credit(s) · the reasons a fan can pick when leaving (live verified 2026-09-23)

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

Search users · catalog flag: verified

[fans] GET /users. User search. Query: query, limit, offset, view, all_users. Live verified 2026-09-23 (route read off the OnlyFans web client build 202609221225).

GET /v1/{account}/native/users · 1 credit(s) · query, limit, offset, view, all_users (live verified 2026-09-23)

Shell
curl -X GET \
  -H "X-API-Key: $CREATORS_API_KEY" \
  "https://api.creator-api.com/v1/{account}/native/users?limit=50"
Python
import requests
r = requests.get(
    "https://api.creator-api.com/v1/{account}/native/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?limit=50", {
  method: "GET",
  headers: { "X-API-Key": KEY },
});
console.log(await r.json());

following

List active followings · catalog flag: 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 · catalog flag: 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 · catalog flag: 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 · catalog flag: 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());

mass-messaging

List mass message stats · catalog flag: verified

[mass-messaging] GET /users/me/stats/messages/group?startDate=&endDate=&limit=20. One row per mass message send: id, date, text, isFree, price, purchasedCount, viewedCount, sentCount and the media list with ids. Buyers of a row: messages/queue/{id}/buyers. Same date paging as the direct statistics route. For full history use the mass_messages export dataset. Live verified 2026-09-18.

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

Path params: account

Shell
curl -X GET \
  -H "X-API-Key: $CREATORS_API_KEY" \
  "https://api.creator-api.com/v1/{account}/native/users/me/stats/messages/group?limit=50"
Python
import requests
r = requests.get(
    "https://api.creator-api.com/v1/{account}/native/users/me/stats/messages/group?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/messages/group?limit=50", {
  method: "GET",
  headers: { "X-API-Key": KEY },
});
console.log(await r.json());

media-mirror

Media mirror create · catalog flag: 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 "file=@photo.jpg" \
  "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 · catalog flag: 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 · free

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 · catalog flag: 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} · free

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 · catalog flag: 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 processing media · catalog flag: verified

[media-vault] GET /vault/media/processing. Uploads still being processed, empty when none are. Live verified 2026-09-23 (route read off the OnlyFans web client build 202609221225).

GET /v1/{account}/native/vault/media/processing · 1 credit(s) · uploads still being processed (live verified 2026-09-23)

Shell
curl -X GET \
  -H "X-API-Key: $CREATORS_API_KEY" \
  "https://api.creator-api.com/v1/{account}/native/vault/media/processing?limit=50"
Python
import requests
r = requests.get(
    "https://api.creator-api.com/v1/{account}/native/vault/media/processing?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/processing?limit=50", {
  method: "GET",
  headers: { "X-API-Key": KEY },
});
console.log(await r.json());

List release form media · catalog flag: verified

[media-vault] GET /vault/media/release-forms. Vault media that carries a release form. Live verified 2026-09-23 (route read off the OnlyFans web client build 202609221225).

GET /v1/{account}/native/vault/media/release-forms · 1 credit(s) · vault media that carries a release form (live verified 2026-09-23)

Shell
curl -X GET \
  -H "X-API-Key: $CREATORS_API_KEY" \
  "https://api.creator-api.com/v1/{account}/native/vault/media/release-forms?limit=50"
Python
import requests
r = requests.get(
    "https://api.creator-api.com/v1/{account}/native/vault/media/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/vault/media/release-forms?limit=50", {
  method: "GET",
  headers: { "X-API-Key": KEY },
});
console.log(await r.json());

List vault media · catalog flag: 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());

List vault media types · catalog flag: verified

[media-vault] GET /vault/media/types. Which media kinds the vault holds (photo, video, gif, audio). Live verified 2026-09-23 (route read off the OnlyFans web client build 202609221225).

GET /v1/{account}/native/vault/media/types · 1 credit(s) · which media kinds the vault holds (live verified 2026-09-23)

Shell
curl -X GET \
  -H "X-API-Key: $CREATORS_API_KEY" \
  "https://api.creator-api.com/v1/{account}/native/vault/media/types?limit=50"
Python
import requests
r = requests.get(
    "https://api.creator-api.com/v1/{account}/native/vault/media/types?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/types?limit=50", {
  method: "GET",
  headers: { "X-API-Key": KEY },
});
console.log(await r.json());

Media vault upload · catalog flag: 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 "file=@photo.jpg" \
  "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 · catalog flag: 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} · free

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 · catalog flag: 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 · catalog flag: 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 · catalog flag: 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 · catalog flag: 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 · catalog flag: 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 · catalog flag: 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 · catalog flag: 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 · catalog flag: 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 · catalog flag: 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 · catalog flag: 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 · catalog flag: 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 · catalog flag: 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 · catalog flag: 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 · catalog flag: 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 · catalog flag: 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 · catalog flag: 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 · catalog flag: 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 · catalog flag: 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 · catalog flag: 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 · catalog flag: 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 · catalog flag: 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 · catalog flag: 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 · catalog flag: 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 · catalog flag: 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 · catalog flag: 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 · catalog flag: 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 · catalog flag: 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 · catalog flag: 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 · catalog flag: 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 · catalog flag: 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 · catalog flag: 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 · catalog flag: 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 · catalog flag: 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 · catalog flag: 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 · catalog flag: 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 · catalog flag: 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 · catalog flag: 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 · catalog flag: 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 · catalog flag: 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 · catalog flag: 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 · catalog flag: 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 · catalog flag: 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 · catalog flag: 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 · catalog flag: 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 · catalog flag: 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 · catalog flag: 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 · catalog flag: 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 · catalog flag: 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 · catalog flag: 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 · catalog flag: 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 · catalog flag: verified

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

GET /v1/{account}/native/posts/{post_id}/stats · 1 credit(s) · Returns lookCount (views), likeCount and commentCount plus daily charts. Live 200 on real posts 2026-09-18. Some posts have no statistics (check hasStats), those can answer 404.

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 · catalog flag: 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 · catalog flag: 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 · catalog flag: 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 · catalog flag: 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 · catalog flag: 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 · catalog flag: 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 · catalog flag: 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 · catalog flag: 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 · catalog flag: 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 · catalog flag: 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 · catalog flag: 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 · catalog flag: 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 · catalog flag: 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 · catalog flag: 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 · catalog flag: 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 · catalog flag: 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 · catalog flag: 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 · catalog flag: 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 · catalog flag: 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 · catalog flag: 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 · catalog flag: 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 · catalog flag: 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

Can add vat documents · catalog flag: verified

[payouts] GET /payouts/can-add-vat-documents. Whether VAT documents may be submitted right now. Live verified 2026-09-23 (route read off the OnlyFans web client build 202609221225).

GET /v1/{account}/native/payouts/can-add-vat-documents · 1 credit(s) · whether VAT documents may be submitted (live verified 2026-09-23)

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

Get account balances · catalog flag: 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 · catalog flag: 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 earnings total · catalog flag: verified

[payouts] GET /payouts/chart. One earnings total plus the delta. Query: startDate, endDate, withTotal, filter[total]. Live verified 2026-09-23 (route read off the OnlyFans web client build 202609221225).

GET /v1/{account}/native/payouts/chart · 1 credit(s) · startDate, endDate, withTotal, filter[total]: one total plus the delta (live verified 2026-09-23)

Shell
curl -X GET \
  -H "X-API-Key: $CREATORS_API_KEY" \
  "https://api.creator-api.com/v1/{account}/native/payouts/chart?limit=50"
Python
import requests
r = requests.get(
    "https://api.creator-api.com/v1/{account}/native/payouts/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/chart?limit=50", {
  method: "GET",
  headers: { "X-API-Key": KEY },
});
console.log(await r.json());

Get eligibility · catalog flag: 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());

Get payout balances · catalog flag: verified

[payouts] GET /payouts/balances. Available and pending balance, payout limits and the withdrawal period. Live verified 2026-09-23 (route read off the OnlyFans web client build 202609221225).

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 vat details · catalog flag: verified

[payouts] GET /payouts/vat. The VAT registration on file. Live verified 2026-09-23 (route read off the OnlyFans web client build 202609221225).

GET /v1/{account}/native/payouts/vat · 1 credit(s) · the VAT registration on file (live verified 2026-09-23)

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

List payout methods · catalog flag: verified

[payouts] GET /payouts/other/bank. The payout methods this account can use. Live verified 2026-09-23 (route read off the OnlyFans web client build 202609221225).

GET /v1/{account}/native/payouts/other/bank · 1 credit(s) · the payout methods this account can use (live verified 2026-09-23)

Shell
curl -X GET \
  -H "X-API-Key: $CREATORS_API_KEY" \
  "https://api.creator-api.com/v1/{account}/native/payouts/other/bank?limit=50"
Python
import requests
r = requests.get(
    "https://api.creator-api.com/v1/{account}/native/payouts/other/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/other/bank?limit=50", {
  method: "GET",
  headers: { "X-API-Key": KEY },
});
console.log(await r.json());

List payout requests · catalog flag: 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());

List referral payout requests · catalog flag: verified

[payouts] GET /payouts/requests/referral. Referral payout requests, empty when none were requested. Live verified 2026-09-23 (route read off the OnlyFans web client build 202609221225).

GET /v1/{account}/native/payouts/requests/referral · 1 credit(s) · empty when none were requested (live verified 2026-09-23)

Shell
curl -X GET \
  -H "X-API-Key: $CREATORS_API_KEY" \
  "https://api.creator-api.com/v1/{account}/native/payouts/requests/referral?limit=50"
Python
import requests
r = requests.get(
    "https://api.creator-api.com/v1/{account}/native/payouts/requests/referral?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/referral?limit=50", {
  method: "GET",
  headers: { "X-API-Key": KEY },
});
console.log(await r.json());

List stripe payout requests · catalog flag: verified

[payouts] GET /payouts/requests/stripe. Stripe payout requests. Query: limit, lastPayoutId. Empty when none were requested. Live verified 2026-09-23 (route read off the OnlyFans web client build 202609221225).

GET /v1/{account}/native/payouts/requests/stripe · 1 credit(s) · limit, lastPayoutId; empty when none were requested (live verified 2026-09-23)

Shell
curl -X GET \
  -H "X-API-Key: $CREATORS_API_KEY" \
  "https://api.creator-api.com/v1/{account}/native/payouts/requests/stripe?limit=50"
Python
import requests
r = requests.get(
    "https://api.creator-api.com/v1/{account}/native/payouts/requests/stripe?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/stripe?limit=50", {
  method: "GET",
  headers: { "X-API-Key": KEY },
});
console.log(await r.json());

List vat document requests · catalog flag: verified

[payouts] GET /payouts/requests/vat-documents. Submitted VAT documents, empty when none were submitted. Live verified 2026-09-23 (route read off the OnlyFans web client build 202609221225).

GET /v1/{account}/native/payouts/requests/vat-documents · 1 credit(s) · empty when none were submitted (live verified 2026-09-23)

Shell
curl -X GET \
  -H "X-API-Key: $CREATORS_API_KEY" \
  "https://api.creator-api.com/v1/{account}/native/payouts/requests/vat-documents?limit=50"
Python
import requests
r = requests.get(
    "https://api.creator-api.com/v1/{account}/native/payouts/requests/vat-documents?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/vat-documents?limit=50", {
  method: "GET",
  headers: { "X-API-Key": KEY },
});
console.log(await r.json());

List vat entries · catalog flag: verified

[payouts] GET /payouts/vats. VAT entries, empty when the account has none. Live verified 2026-09-23 (route read off the OnlyFans web client build 202609221225).

GET /v1/{account}/native/payouts/vats · 1 credit(s) · empty when the account has no VAT entries (live verified 2026-09-23)

Shell
curl -X GET \
  -H "X-API-Key: $CREATORS_API_KEY" \
  "https://api.creator-api.com/v1/{account}/native/payouts/vats?limit=50"
Python
import requests
r = requests.get(
    "https://api.creator-api.com/v1/{account}/native/payouts/vats?limit=50",
    headers={"X-API-Key": KEY},
)
print(r.json())
JavaScript
const r = await fetch("https://api.creator-api.com/v1/{account}/native/payouts/vats?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 · catalog flag: 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 · catalog flag: 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 on this day posts · catalog flag: verified

[posts] GET /users/posts/on-this-day. Own posts from this day in earlier years. Live verified 2026-09-23 (route read off the OnlyFans web client build 202609221225).

GET /v1/{account}/native/users/posts/on-this-day · 1 credit(s) · own posts from this day in earlier years (live verified 2026-09-23)

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

List paid post authors · catalog flag: verified

[posts] GET /posts/paid/authors. Creators this account bought paid posts from. Query: query. Live verified 2026-09-23 (route read off the OnlyFans web client build 202609221225).

GET /v1/{account}/native/posts/paid/authors · 1 credit(s) · query (live verified 2026-09-23)

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

List post buyers · catalog flag: verified

[posts] GET /posts/{id}/buyers?limit=. Fans who unlocked a paid post. Returns {list, hasMore, marker}. Live verified 2026-09-18.

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

Path params: account, post_id

Shell
curl -X GET \
  -H "X-API-Key: $CREATORS_API_KEY" \
  "https://api.creator-api.com/v1/{account}/native/posts/{post_id}/buyers?limit=50"
Python
import requests
r = requests.get(
    "https://api.creator-api.com/v1/{account}/native/posts/{post_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/posts/{post_id}/buyers?limit=50", {
  method: "GET",
  headers: { "X-API-Key": KEY },
});
console.log(await r.json());

List posts · catalog flag: 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());

List taggable friends · catalog flag: verified

[posts] GET /posts/tagged-friend-users. Friends that can be tagged in a post. Live verified 2026-09-23 (route read off the OnlyFans web client build 202609221225).

GET /v1/{account}/native/posts/tagged-friend-users · 1 credit(s) · friends taggable in a post (live verified 2026-09-23)

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

Send post · catalog flag: 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());

Show top post stats · catalog flag: verified

[posts] GET /users/me/stats/top/post?startDate=&endDate=. The top post of the window per metric: comments, likes, purchases, tips and views, each with the full post object and its stats. Live verified 2026-09-18.

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

Path params: account

Shell
curl -X GET \
  -H "X-API-Key: $CREATORS_API_KEY" \
  "https://api.creator-api.com/v1/{account}/native/users/me/stats/top/post?limit=50"
Python
import requests
r = requests.get(
    "https://api.creator-api.com/v1/{account}/native/users/me/stats/top/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/me/stats/top/post?limit=50", {
  method: "GET",
  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());

Get promotion claims · catalog flag: verified

[promotions] GET /promotions/claims. Claimed and unclaimed offer counts. Live verified 2026-09-23 (route read off the OnlyFans web client build 202609221225).

GET /v1/{account}/native/promotions/claims · 1 credit(s) · claimed and unclaimed offer counts (live verified 2026-09-23)

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

List own promotions · catalog flag: verified

[promotions] GET /users/promotions. The promotion campaigns of this account. Live verified 2026-09-23 (route read off the OnlyFans web client build 202609221225).

GET /v1/{account}/native/users/promotions · 1 credit(s) · the promotion campaigns of this account (live verified 2026-09-23)

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

List promotion offers · catalog flag: verified

[promotions] GET /promotions/offers. Promotion offers on the account. Query: limit, offset, skip_users. Live verified 2026-09-23 (route read off the OnlyFans web client build 202609221225).

GET /v1/{account}/native/promotions/offers · 1 credit(s) · limit, offset, skip_users (live verified 2026-09-23)

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

List promotions · catalog flag: 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 · catalog flag: 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 · catalog flag: 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 · catalog flag: 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 · catalog flag: 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 · catalog flag: 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 · catalog flag: 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 · catalog flag: 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 · catalog flag: 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 · catalog flag: 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 · catalog flag: 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 · catalog flag: 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 · catalog flag: 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 · catalog flag: 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 · catalog flag: 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 · catalog flag: 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 · catalog flag: 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 · catalog flag: 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 call settings · catalog flag: verified

[settings] GET /users/settings/calls. Video and audio call prices and whether incoming calls are on. Live verified 2026-09-23 (route read off the OnlyFans web client build 202609221225).

GET /v1/{account}/native/users/settings/calls · 1 credit(s) · video and audio call prices, incoming calls on or off (live verified 2026-09-23)

Shell
curl -X GET \
  -H "X-API-Key: $CREATORS_API_KEY" \
  "https://api.creator-api.com/v1/{account}/native/users/settings/calls?limit=50"
Python
import requests
r = requests.get(
    "https://api.creator-api.com/v1/{account}/native/users/settings/calls?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/calls?limit=50", {
  method: "GET",
  headers: { "X-API-Key": KEY },
});
console.log(await r.json());

Get drm status · catalog flag: 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 · catalog flag: 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 story settings · catalog flag: verified

[settings] GET /users/settings/story. Who may reply to stories. Live verified 2026-09-23 (route read off the OnlyFans web client build 202609221225).

GET /v1/{account}/native/users/settings/story · 1 credit(s) · who may reply to stories (live verified 2026-09-23)

Shell
curl -X GET \
  -H "X-API-Key: $CREATORS_API_KEY" \
  "https://api.creator-api.com/v1/{account}/native/users/settings/story?limit=50"
Python
import requests
r = requests.get(
    "https://api.creator-api.com/v1/{account}/native/users/settings/story?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/story?limit=50", {
  method: "GET",
  headers: { "X-API-Key": KEY },
});
console.log(await r.json());

Get stream settings · catalog flag: verified

[settings] GET /users/settings/streams. Price limits and what this account may stream. Live verified 2026-09-23 (route read off the OnlyFans web client build 202609221225).

GET /v1/{account}/native/users/settings/streams · 1 credit(s) · price limits and what this account may stream (live verified 2026-09-23)

Shell
curl -X GET \
  -H "X-API-Key: $CREATORS_API_KEY" \
  "https://api.creator-api.com/v1/{account}/native/users/settings/streams?limit=50"
Python
import requests
r = requests.get(
    "https://api.creator-api.com/v1/{account}/native/users/settings/streams?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/streams?limit=50", {
  method: "GET",
  headers: { "X-API-Key": KEY },
});
console.log(await r.json());

Get welcome message · catalog flag: 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 notification transports · catalog flag: verified

[settings] GET /users/settings/notifications/transports. The channels OnlyFans can notify on. Live verified 2026-09-23 (route read off the OnlyFans web client build 202609221225).

GET /v1/{account}/native/users/settings/notifications/transports · 1 credit(s) · the channels OnlyFans can notify on (live verified 2026-09-23)

Shell
curl -X GET \
  -H "X-API-Key: $CREATORS_API_KEY" \
  "https://api.creator-api.com/v1/{account}/native/users/settings/notifications/transports?limit=50"
Python
import requests
r = requests.get(
    "https://api.creator-api.com/v1/{account}/native/users/settings/notifications/transports?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/notifications/transports?limit=50", {
  method: "GET",
  headers: { "X-API-Key": KEY },
});
console.log(await r.json());

List social media buttons · catalog flag: 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 · catalog flag: 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 · catalog flag: 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 · catalog flag: 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

GET /v1/{account}/analytics/transactions/count. Complete period count.

GET /v1/{account}/analytics/transactions/count · free · start_date/end_date; incomplete pagination fails.

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

Get earnings · catalog flag: verified

[statistics] GET /earnings/chart.

GET /v1/{account}/native/earnings/chart · 1 credit(s) · empty without query; a bare call through this API defaults to monthlyTotal=1 (one row per month, net + gross). Day series: startDate, endDate, withTotal plus filter[total_amount], filter[subscribes_amount], filter[tips_amount], filter[post_amount], filter[messages_amount]

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 following count · catalog flag: verified

[statistics] GET /subscriptions/subscribes/count. How many accounts this creator follows. Live verified 2026-09-23 (route read off the OnlyFans web client build 202609221225).

GET /v1/{account}/native/subscriptions/subscribes/count · 1 credit(s) · how many accounts this creator follows (live verified 2026-09-23)

Shell
curl -X GET \
  -H "X-API-Key: $CREATORS_API_KEY" \
  "https://api.creator-api.com/v1/{account}/native/subscriptions/subscribes/count?limit=50"
Python
import requests
r = requests.get(
    "https://api.creator-api.com/v1/{account}/native/subscriptions/subscribes/count?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/count?limit=50", {
  method: "GET",
  headers: { "X-API-Key": KEY },
});
console.log(await r.json());

Get posts chart · catalog flag: verified

[statistics] GET /posts/chart. Posts and views per day. Query: startDate, endDate, withTotal, filter[posts], filter[views]. Live verified 2026-09-23 (route read off the OnlyFans web client build 202609221225).

GET /v1/{account}/native/posts/chart · 1 credit(s) · startDate, endDate, withTotal, filter[posts], filter[views] (live verified 2026-09-23)

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

Get profile qr views · catalog flag: verified

[statistics] GET /users/me/profile/views/qr. Profile visits that came from the QR code. Live verified 2026-09-23 (route read off the OnlyFans web client build 202609221225).

GET /v1/{account}/native/users/me/profile/views/qr · 1 credit(s) · profile visits that came from the QR code (live verified 2026-09-23)

Shell
curl -X GET \
  -H "X-API-Key: $CREATORS_API_KEY" \
  "https://api.creator-api.com/v1/{account}/native/users/me/profile/views/qr?limit=50"
Python
import requests
r = requests.get(
    "https://api.creator-api.com/v1/{account}/native/users/me/profile/views/qr?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/views/qr?limit=50", {
  method: "GET",
  headers: { "X-API-Key": KEY },
});
console.log(await r.json());

Get profile visitors · catalog flag: 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 count · catalog flag: verified

[statistics] GET /subscriptions/subscribers/count. One number: the fan total, far cheaper than paging the subscriber list. Live verified 2026-09-23 (route read off the OnlyFans web client build 202609221225).

GET /v1/{account}/native/subscriptions/subscribers/count · 1 credit(s) · one number, the fastest way to a total fan count (live verified 2026-09-23)

Shell
curl -X GET \
  -H "X-API-Key: $CREATORS_API_KEY" \
  "https://api.creator-api.com/v1/{account}/native/subscriptions/subscribers/count?limit=50"
Python
import requests
r = requests.get(
    "https://api.creator-api.com/v1/{account}/native/subscriptions/subscribers/count?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/count?limit=50", {
  method: "GET",
  headers: { "X-API-Key": KEY },
});
console.log(await r.json());

Get subscriber statistics · catalog flag: verified

[statistics] GET /subscriptions/count/all.

GET /v1/{account}/native/subscriptions/count/all · 1 credit(s) · This native route returns current counts. For historical total/new/renewed events use GET /v1/{account}/analytics/subscribers with start_date/end_date. detailed=true adds known paid/free historical-price counts and an unknown remainder, not a deleted-fan count. Incomplete reads fail; detailed=false skips historical-price paging.

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

Get today activity · catalog flag: verified

[statistics] GET /users/me/stats/today-activity. Stories, posts, chats and streams sent today. Live verified 2026-09-23 (route read off the OnlyFans web client build 202609221225).

GET /v1/{account}/native/users/me/stats/today-activity · 1 credit(s) · stories, posts, chats and streams sent today (live verified 2026-09-23)

Shell
curl -X GET \
  -H "X-API-Key: $CREATORS_API_KEY" \
  "https://api.creator-api.com/v1/{account}/native/users/me/stats/today-activity?limit=50"
Python
import requests
r = requests.get(
    "https://api.creator-api.com/v1/{account}/native/users/me/stats/today-activity?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/today-activity?limit=50", {
  method: "GET",
  headers: { "X-API-Key": KEY },
});
console.log(await r.json());

Get top streak · catalog flag: verified

[statistics] GET /streaks/top. The best streak of this account. Live verified 2026-09-23 (route read off the OnlyFans web client build 202609221225).

GET /v1/{account}/native/streaks/top · 1 credit(s) · the account best streak (live verified 2026-09-23)

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

List streaks · catalog flag: verified

[statistics] GET /streaks. Posting streaks with day and post counts. Query: startDate, endDate. Live verified 2026-09-23 (route read off the OnlyFans web client build 202609221225).

GET /v1/{account}/native/streaks · 1 credit(s) · posting streaks with days and post counts, startDate and endDate (live verified 2026-09-23)

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

stories

Add to story · catalog flag: 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());

Get stories map · catalog flag: verified

[stories] GET /stories/map. The story rail as the app shows it. Live verified 2026-09-23 (route read off the OnlyFans web client build 202609221225).

GET /v1/{account}/native/stories/map · 1 credit(s) · the story rail as the app shows it (live verified 2026-09-23)

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

List active stories · catalog flag: 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 · catalog flag: 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());

streams

Count stream audience · catalog flag: verified

[streams] GET /streams/users/count. How many fans a stream would reach. Query: includeUserListIds, excludeUserListIds, excludedSubscribers. Live verified 2026-09-23 (route read off the OnlyFans web client build 202609221225).

GET /v1/{account}/native/streams/users/count · 1 credit(s) · includeUserListIds, excludeUserListIds, excludedSubscribers (live verified 2026-09-23)

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

Get stream feed · catalog flag: verified

[streams] GET /streams/feed. The stream feed. Query: limit. Live verified 2026-09-23 (route read off the OnlyFans web client build 202609221225).

GET /v1/{account}/native/streams/feed · 1 credit(s) · limit (live verified 2026-09-23)

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

Has active stream · catalog flag: verified

[streams] GET /streams/has-active. One boolean: is a stream live right now. Live verified 2026-09-23 (route read off the OnlyFans web client build 202609221225).

GET /v1/{account}/native/streams/has-active · 1 credit(s) · one boolean (live verified 2026-09-23)

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

List active streams · catalog flag: verified

[streams] GET /streams/active. Live streams, empty when nothing is live. Live verified 2026-09-23 (route read off the OnlyFans web client build 202609221225).

GET /v1/{account}/native/streams/active · 1 credit(s) · empty when nothing is live (live verified 2026-09-23)

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

List stream blocked users · catalog flag: verified

[streams] GET /streams/users/blocked. Fans blocked from streams, empty when nobody is. Live verified 2026-09-23 (route read off the OnlyFans web client build 202609221225).

GET /v1/{account}/native/streams/users/blocked · 1 credit(s) · empty when nobody is blocked (live verified 2026-09-23)

Shell
curl -X GET \
  -H "X-API-Key: $CREATORS_API_KEY" \
  "https://api.creator-api.com/v1/{account}/native/streams/users/blocked?limit=50"
Python
import requests
r = requests.get(
    "https://api.creator-api.com/v1/{account}/native/streams/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/streams/users/blocked?limit=50", {
  method: "GET",
  headers: { "X-API-Key": KEY },
});
console.log(await r.json());

List stream reminders · catalog flag: verified

[streams] GET /streams/reminder. Fans who asked to be reminded about a stream. Live verified 2026-09-23 (route read off the OnlyFans web client build 202609221225).

GET /v1/{account}/native/streams/reminder · 1 credit(s) · who asked to be reminded (live verified 2026-09-23)

Shell
curl -X GET \
  -H "X-API-Key: $CREATORS_API_KEY" \
  "https://api.creator-api.com/v1/{account}/native/streams/reminder?limit=50"
Python
import requests
r = requests.get(
    "https://api.creator-api.com/v1/{account}/native/streams/reminder?limit=50",
    headers={"X-API-Key": KEY},
)
print(r.json())
JavaScript
const r = await fetch("https://api.creator-api.com/v1/{account}/native/streams/reminder?limit=50", {
  method: "GET",
  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 · catalog flag: 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 · catalog flag: 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 · catalog flag: 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

Get own id · catalog flag: verified

[users] GET /users/me/id. Just the numeric account id. Live verified 2026-09-23 (route read off the OnlyFans web client build 202609221225).

GET /v1/{account}/native/users/me/id · 1 credit(s) · just the numeric id (live verified 2026-09-23)

Shell
curl -X GET \
  -H "X-API-Key: $CREATORS_API_KEY" \
  "https://api.creator-api.com/v1/{account}/native/users/me/id?limit=50"
Python
import requests
r = requests.get(
    "https://api.creator-api.com/v1/{account}/native/users/me/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/me/id?limit=50", {
  method: "GET",
  headers: { "X-API-Key": KEY },
});
console.log(await r.json());

List alerts · catalog flag: verified

[users] GET /users/alert. Account alerts, empty when there is nothing to show. Live verified 2026-09-23 (route read off the OnlyFans web client build 202609221225).

GET /v1/{account}/native/users/alert · 1 credit(s) · empty when there is nothing to show (live verified 2026-09-23)

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

List hints · catalog flag: verified

[users] GET /users/hints. Interface hints. Query: offset. Live verified 2026-09-23 (route read off the OnlyFans web client build 202609221225).

GET /v1/{account}/native/users/hints · 1 credit(s) · offset (live verified 2026-09-23)

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

List support tickets · catalog flag: verified

[users] GET /users/tickets. Support tickets of this account. Query: limit, offset. Live verified 2026-09-23 (route read off the OnlyFans web client build 202609221225).

GET /v1/{account}/native/users/tickets · 1 credit(s) · limit, offset (live verified 2026-09-23)

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

List ticket subjects · catalog flag: verified

[users] GET /users/tickets/form_subjects. The subjects a support ticket can use. Live verified 2026-09-23 (route read off the OnlyFans web client build 202609221225).

GET /v1/{account}/native/users/tickets/form_subjects · 1 credit(s) · the subjects a support ticket can use (live verified 2026-09-23)

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

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 · catalog flag: 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: [...], headers?: {"Authorization": "Bearer ..."}}. headers are optional custom request headers added to every delivery (up to 10, for an endpoint behind a sign in gate or API key check); their values are write only, later reads show only the header names. Every delivery is also signed: X-CreatorAPI-Signature: sha256=<hex HMAC SHA256 of the raw body with the whsec_ secret>, plus X-CreatorAPI-Event, X-CreatorAPI-Delivery (event id, stable across retries) and X-CreatorAPI-Timestamp. Delivery: every event is POSTed once and should be answered with a 2xx within 15 seconds. Occasional timeouts are normal for webhooks on the public internet (slow handlers, cold starts, proxies and network hops between us and your server), so delivery is at least once: an event that gets no 2xx in time is retried with backoff for up to 24 hours, and the same event can reach you more than once. Answer with 2xx right away, do slow work (API calls, database writes) after responding, and dedupe on X-CreatorAPI-Delivery. Deliveries are free; API calls your handler makes are billed like any other call, so a handler that calls the API before responding and does not dedupe pays again for every repeat. 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 · 1 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 · catalog flag: 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} · 1 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 · catalog flag: 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} · free

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 · catalog flag: 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 · free

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 · catalog flag: 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. subscriptions.new, messages.new, messages.purchased, posts.published) with a description. messages.purchased payloads name the content: message_id (join to messageId of the direct_messages export rows), queue_id (equals the id of the mass_messages export row when is_mass_message is true), media_ids, message_price, message_sent_at and content_match (notification when resolved, none when the platform gave no purchase notification within six minutes). posts.purchased carries the fan and the amounts only, the platform exposes no post id on the payment: resolve the post through posts/{post_id}/buyers of your paid posts. messages.new fires when a fan writes in a conversation, on OnlyFans and 4based, read from the conversation list once per cycle. What a platform can deliver differs: a 4based account gets messages.new, posts.published and the subscriber events, but no money events, because 4based exposes no transaction feed (its own earnings statistics endpoint answers empty for every date window). Live verified 2026-09-23.

GET /v1/webhooks/events · free

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 · catalog flag: 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 · free

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());

Replay webhook deliveries · catalog flag: verified

[webhooks] POST /v1/{account}/webhooks/{hook_id}/replay. Platform-agnostic. Re-sends events that failed to reach this webhook (endpoint returned 401, 5xx or was down) once you fixed the endpoint. Sends the original signed envelope again with the same event id, once per event, oldest first, using the current url and headers; events that already landed are skipped, so calling it again is safe. Failed events stay replayable, independent of the automatic retry schedule (backoff from 1 minute up to 24 hours). Body, all optional: delivery_ids (delivery or event ids), since / until (unix seconds), limit (default 500, max 1000), dry_run (count only). Stops early when the first 5 re-sends all fail. Free.

POST /v1/{account}/webhooks/{hook_id}/replay · free

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}/replay" -d '{}'
Python
import requests
r = requests.post(
    "https://api.creator-api.com/v1/{account}/webhooks/{hook_id}/replay",
    headers={"X-API-Key": KEY},
).json()
print(r.json())
JavaScript
const r = await fetch("https://api.creator-api.com/v1/{account}/webhooks/{hook_id}/replay", {
  method: "POST",
  headers: { "X-API-Key": KEY },
});
console.log(await r.json());

Test webhook · catalog flag: 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 · catalog flag: 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, headers}. headers replaces the custom header set, {} clears it, omitting it keeps the current headers. Live verified 2026-08-14 (toggled active=false).

PATCH /v1/{account}/webhooks/{hook_id} · 1 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.