CRM API
The normalized layer — 95 endpoints that work for both OnlyFans and Fansly.
Endpoints on this surface return normalized data: OnlyFans and Fansly rows are projected to the same shape, and several routes are server-side aggregations with no platform equivalent at all.
Base URL https://theonlyapi.com/api/crm/{crm_id}, authenticated with an
X-API-Key header. Responses put data in a sibling key alongside success
rather than nesting it — see Responses & errors.
This is the surface to build on. Reach for the OnlyFans passthrough only when you need something here does not cover.
Auth · 3 endpoints
Connect a creator account (OnlyFans or Fansly) and complete 2FA. All three routes accept platform: "onlyfans" | "fansly" and are rate limited to 10 requests/minute.
Accounts · 7 endpoints
Manage connected creator accounts (OnlyFans and Fansly), their polling settings, proxies, and slots.
Panel & Usage · 9 endpoints
Panel signup, health, key→panel resolution, and plan/usage counters. Works for OnlyFans and Fansly panels alike.
API Keys · 5 endpoints
Primary + secondary API key management. POST /api-keys and DELETE /api-keys/{key_id} are PRIMARY-KEY ONLY (a secondary key gets 403). The primary Default key cannot be revoked — rotate it via POST /rotate-key.
Earnings · 5 endpoints
Revenue & earnings data, including the cross-account GET /earnings/summary aggregation. Fansly-aware.
Transactions · 4 endpoints
Payout & purchase transactions, live and cached.
Payouts · 3 endpoints
Withdrawal requests and payout account details. Creating a withdrawal is OnlyFans only.
Referrals · 3 endpoints
OnlyFans referral programme — who the account referred, what it earned, and referral payout history. OnlyFans only: Fansly accounts get 501 platform_not_supported (feature: "referrals"). Live reads, no cache; one quota call per request. OnlyFans' referral response bodies are passed through with minimal normalization — only the list/hasMore/marker envelope keys are read, and the raw body is echoed under data. Fields inside a referral row are unverified: do not depend on them without checking against a live account.
Subscribers · 6 endpoints
Subscriber reads. Live routes hit the platform; /subscribers/cached, /subscribers/new, and /subscribers/stats cost zero platform requests and normalize OnlyFans + Fansly rows to the same shape.
Fans · 6 endpoints
Fan CRM across all accounts in the panel — tags, notes, per-fan cached transactions, profile refresh. Fansly-aware.
Messaging · 5 endpoints
Chats, single DMs/PPVs, mass DMs, and PPV performance stats. Fansly-aware.
Content · 1 endpoint
Media upload. Runs OnlyFans' four-stage signed-S3 pipeline server-side and returns a reference you attach to a post, message or story via mediaFiles. OnlyFans only.
Campaigns · 12 endpoints
Tracking link campaigns, claimers, campaign tags, and the tracked-campaign allowlist.
Notifications · 1 endpoint
Account notifications. Fansly-aware.
Cache & Sync · 3 endpoints
Async refresh, backfill, and job-status routes that populate the local cache. Refresh routes return 202 — poll the matching /refresh/status route or listen on GET /events/stream.
Events & Streaming · 2 endpoints
Real-time event feed — GET /events for polling, GET /events/stream for Server-Sent Events (rate-limit exempt).
Webhooks · 7 endpoints
Outbound webhook subscriptions, test fires, and delivery history.
Automations · 7 endpoints
Event-triggered automations, manual runs, and run history.
Exports · 6 endpoints
Async data export jobs producing a downloadable ZIP. Progress streams over GET /events/stream.
Integrations · 6 endpoints
Third-party integrations. One Telegram channel per panel: pair it once, then matching events are delivered to that chat. The bot token is encrypted at rest and is never returned by any route.
Settings · 5 endpoints
Account settings, subscription price & proxy management
Proxy · 1 endpoint
Generic authenticated OnlyFans API proxy (POST /accounts/{of_user_id}/request). OnlyFans only.
MCP · 1 endpoint
Hosted MCP server support. GET /api/whoami turns a bearer token into a tenant; PATCH /mcp/unsafe-proxy toggles non-GET tool access (off by default).
Bulk Import · 8 endpoints
Connect many creator accounts from one pasted list. POST /import/preview validates without side effects; POST /import/jobs runs the import in the background and streams import.progress / import.complete over GET /events/stream. Rows that hit a 2FA prompt park as needs_2fa until you supply a code.
116 endpoints, generated from the OpenAPI 3.1 spec.