# The Only API — OnlyFans passthrough reference > All 434 endpoints of the signed `/api2/v2` passthrough. OnlyFans only. Every response is wrapped in `{ success, status_code, data }`. Base URL: https://theonlyapi.com/api/crm/{crm_id}. Auth: `X-API-Key` header plus a `user-id` header naming the connected account. --- # OnlyFans Passthrough (/docs/of-api) {/* Generated by scripts/gen-api.ts — edit that script, not this file. */} A thin, signed proxy over OnlyFans' own `/api2/v2` API. We load the account's saved session, route through its proxy, generate fresh signed headers, and return the response. Every request needs an `X-API-Key` header **and** a `user-id` header naming the connected account. Every response is wrapped: ```json { "success": true, "status_code": 200, "data": { "…OnlyFans' own payload…" } } ``` A `user-id` belonging to a Fansly account is rejected on this surface. Use the platform-neutral [CRM routes](/docs/crm) instead — they are Fansly-aware. Direct proxy to OnlyFans user profile & settings endpoints. **OnlyFans only.** Requires `X-API-Key` + `user-id` headers. OnlyFans subscriber endpoints (via proxy). **OnlyFans only** — Fansly accounts are rejected on this surface. OnlyFans subscription management (via proxy). **OnlyFans only** — Fansly accounts are rejected on this surface. OnlyFans chats & messages (via proxy). **OnlyFans only** — Fansly accounts are rejected on this surface. OnlyFans posts, vault, labels (via proxy). **OnlyFans only** — Fansly accounts are rejected on this surface. OnlyFans stories (via proxy). **OnlyFans only** — Fansly accounts are rejected on this surface. OnlyFans live streams (via proxy). **OnlyFans only** — Fansly accounts are rejected on this surface. OnlyFans campaign endpoints (via proxy). **OnlyFans only** — Fansly accounts are rejected on this surface. OnlyFans promotions & trials (via proxy). **OnlyFans only** — Fansly accounts are rejected on this surface. OnlyFans user lists (via proxy). **OnlyFans only** — Fansly accounts are rejected on this surface. OnlyFans payout & payment endpoints (via proxy). **OnlyFans only** — Fansly accounts are rejected on this surface. OnlyFans notification endpoints (via proxy). **OnlyFans only** — Fansly accounts are rejected on this surface. OnlyFans helper/manager accounts (via proxy). **OnlyFans only** — Fansly accounts are rejected on this surface. Other OnlyFans endpoints. **OnlyFans only** — Fansly accounts are rejected on this surface. *433 endpoints, generated from the [OpenAPI 3.1 spec](https://theonlyapi.com/api/openapi.json).* --- # Campaigns (/docs/of-api/campaigns) {/* Generated by scripts/gen-api.ts — edit that script, not this file. */} OnlyFans campaign endpoints (via proxy). **OnlyFans only** — Fansly accounts are rejected on this surface. | Method | Endpoint | Path | | ------ | --------------------------------------------------------------------------- | ------------------------------------------- | | `GET` | [List campaigns](/docs/of-api/campaigns/list-campaigns-get) | `/api2/v2/campaigns` | | `POST` | [Create campaign](/docs/of-api/campaigns/create-campaign-post) | `/api2/v2/campaigns` | | `GET` | [Get campaign conversions](/docs/of-api/campaigns/get-campaign-conversions) | `/api2/v2/campaigns/{campaign_id}/claimers` | --- # Create campaign (/docs/of-api/campaigns/create-campaign-post) `POST https://theonlyapi.com/api/crm/your-crm-id/api2/v2/campaigns` **OnlyFans only.** Requests made with a `user-id` belonging to a Fansly account are rejected — use the platform-neutral CRM data routes (`/notifications`, `/balances`, `/chats`, `/purchases`, `/subscribers/cached`, ...) which are Fansly-aware. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Request body Content type: `application/json` - `name` (string) — e.g. `"My Campaign"`. ## Responses ### 200 — Campaign created - `id` (integer) — e.g. `12345`. - `campaignName` (string) — e.g. `"My Campaign"`. - `campaignCode` (string) — Short code / slug used in the tracking URL. - `countTransitions` (integer | object) — Number of link clicks. May be an integer or `{ count, date }` object when stats=true. - `countSubscribers` (integer | object) — Number of subscribers gained through this campaign. May be an integer or `{ count, date }` object. - `createdAt` (string) - `sharedWith` (object[]) — Users this campaign link is shared with. - `id` (integer) - `name` (string) - `username` (string) - `displayName` (string) - `about` (string) - `avatar` (string) — Avatar URL. - `avatarThumbs` (object) - `c50` (string) - `c144` (string) - `header` (string) — Profile header/banner URL. - `email` (string) - `isVerified` (boolean) - `isPerformer` (boolean) - `canEarn` (boolean) - `tipsEnabled` (boolean) - `subscribedBy` (boolean) — Whether you are subscribed to this user. - `subscribersCount` (integer) - `subscribesCount` (integer) - `postsCount` (integer) - `photosCount` (integer) - `videosCount` (integer) - `audiosCount` (integer) - `friendsCount` (integer) - `joinDate` (string) - `firstPublishedPostDate` (string) - `subscribePrice` (number) - `chatMessagesCount` (integer) — Unread chat messages. - `countPriorityChat` (integer) - `countPinnedChat` (integer) - `hasPurchasedPosts` (boolean) - `paidFeed` (boolean) - `openseaInfo` (object) ## Example ```bash curl -X POST "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/campaigns" \ -H "X-API-Key: " \ -H "user-id: …" \ -H "Content-Type: application/json" \ -d '{"name":"My Campaign"}' ``` --- # Get campaign conversions (/docs/of-api/campaigns/get-campaign-conversions) `GET https://theonlyapi.com/api/crm/your-crm-id/api2/v2/campaigns/{campaign_id}/claimers` **OnlyFans only.** Requests made with a `user-id` belonging to a Fansly account are rejected — use the platform-neutral CRM data routes (`/notifications`, `/balances`, `/chats`, `/purchases`, `/subscribers/cached`, ...) which are Fansly-aware. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Path parameters - `campaign_id` (string, required) ## Query parameters - `limit` (integer) — Default `10`. - `offset` (integer) — Default `0`. ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — Claimer list - `list` (object[]) - `id` (integer) - `name` (string) - `username` (string) - `displayName` (string) - `about` (string) - `avatar` (string) — Avatar URL. - `avatarThumbs` (object) - `c50` (string) - `c144` (string) - `header` (string) — Profile header/banner URL. - `email` (string) - `isVerified` (boolean) - `isPerformer` (boolean) - `canEarn` (boolean) - `tipsEnabled` (boolean) - `subscribedBy` (boolean) — Whether you are subscribed to this user. - `subscribersCount` (integer) - `subscribesCount` (integer) - `postsCount` (integer) - `photosCount` (integer) - `videosCount` (integer) - `audiosCount` (integer) - `friendsCount` (integer) - `joinDate` (string) - `firstPublishedPostDate` (string) - `subscribePrice` (number) - `chatMessagesCount` (integer) — Unread chat messages. - `countPriorityChat` (integer) - `countPinnedChat` (integer) - `hasPurchasedPosts` (boolean) - `paidFeed` (boolean) - `openseaInfo` (object) - `hasMore` (boolean) ## Example ```bash curl -X GET "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/campaigns/{campaign_id}/claimers" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # List campaigns (/docs/of-api/campaigns/list-campaigns-get) `GET https://theonlyapi.com/api/crm/your-crm-id/api2/v2/campaigns` **OnlyFans only.** Requests made with a `user-id` belonging to a Fansly account are rejected — use the platform-neutral CRM data routes (`/notifications`, `/balances`, `/chats`, `/purchases`, `/subscribers/cached`, ...) which are Fansly-aware. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Query parameters - `limit` (integer) — Default `10`. - `offset` (integer) — Default `0`. - `pagination` (integer) — Default `1`. - `stats` (string) — Default `true`. ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — Campaign list - `list` (object[]) - `id` (integer) — e.g. `12345`. - `campaignName` (string) — e.g. `"My Campaign"`. - `campaignCode` (string) — Short code / slug used in the tracking URL. - `countTransitions` (integer | object) — Number of link clicks. May be an integer or `{ count, date }` object when stats=true. - `countSubscribers` (integer | object) — Number of subscribers gained through this campaign. May be an integer or `{ count, date }` object. - `createdAt` (string) - `sharedWith` (object[]) — Users this campaign link is shared with. - `id` (integer) - `name` (string) - `username` (string) - `displayName` (string) - `about` (string) - `avatar` (string) — Avatar URL. - `avatarThumbs` (object) - `header` (string) — Profile header/banner URL. - `email` (string) - `isVerified` (boolean) - `isPerformer` (boolean) - `canEarn` (boolean) - `tipsEnabled` (boolean) - `subscribedBy` (boolean) — Whether you are subscribed to this user. - `subscribersCount` (integer) - `subscribesCount` (integer) - `postsCount` (integer) - `photosCount` (integer) - `videosCount` (integer) - `audiosCount` (integer) - `friendsCount` (integer) - `joinDate` (string) - `firstPublishedPostDate` (string) - `subscribePrice` (number) - `chatMessagesCount` (integer) — Unread chat messages. - `countPriorityChat` (integer) - `countPinnedChat` (integer) - `hasPurchasedPosts` (boolean) - `paidFeed` (boolean) - `openseaInfo` (object) - `hasMore` (boolean) ## Example ```bash curl -X GET "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/campaigns" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Content (/docs/of-api/content) {/* Generated by scripts/gen-api.ts — edit that script, not this file. */} OnlyFans posts, vault, labels (via proxy). **OnlyFans only** — Fansly accounts are rejected on this surface. | Method | Endpoint | Path | | -------- | --------------------------------------------------------------------------------------------- | ------------------------------------------------------------- | | `DELETE` | [Delete a comment](/docs/of-api/content/delete-a-comment) | `/api2/v2/comments/{comment_id}` | | `POST` | [Like a comment](/docs/of-api/content/like-a-comment) | `/api2/v2/comments/{comment_id}/like` | | `DELETE` | [Unlike a comment](/docs/of-api/content/unlike-a-comment) | `/api2/v2/comments/{comment_id}/like` | | `POST` | [Pin a comment](/docs/of-api/content/pin-a-comment) | `/api2/v2/comments/{comment_id}/pin` | | `DELETE` | [Unpin a comment](/docs/of-api/content/unpin-a-comment) | `/api2/v2/comments/{comment_id}/pin` | | `GET` | [Get user labels](/docs/of-api/content/get-user-labels) | `/api2/v2/labels` | | `GET` | [Get posts feed](/docs/of-api/content/get-posts-feed) | `/api2/v2/posts` | | `POST` | [Create a new post](/docs/of-api/content/create-a-new-post) | `/api2/v2/posts` | | `GET` | [Get specific post](/docs/of-api/content/get-specific-post) | `/api2/v2/posts/{post_id}` | | `POST` | [Bookmark a post](/docs/of-api/content/bookmark-a-post) | `/api2/v2/posts/{post_id}/bookmarks` | | `DELETE` | [Remove post from bookmarks](/docs/of-api/content/remove-post-from-bookmarks) | `/api2/v2/posts/{post_id}/bookmarks` | | `GET` | [Get post comments](/docs/of-api/content/get-post-comments) | `/api2/v2/posts/{post_id}/comments` | | `POST` | [Like / favorite a post](/docs/of-api/content/like-favorite-a-post) | `/api2/v2/posts/{post_id}/favorites` | | `POST` | [Add post to favorites](/docs/of-api/content/add-post-to-favorites) | `/api2/v2/posts/{post_id}/favorites/{author_id}` | | `GET` | [Count fundraising contributors](/docs/of-api/content/count-fundraising-contributors) | `/api2/v2/posts/{post_id}/fund-raising-contributors/count` | | `PUT` | [Hide a post](/docs/of-api/content/hide-a-post) | `/api2/v2/posts/{post_id}/hide` | | `POST` | [Vote on a post poll](/docs/of-api/content/vote-on-a-post-poll) | `/api2/v2/posts/{post_id}/vote` | | `GET` | [Get bookmarked posts](/docs/of-api/content/get-bookmarked-posts) | `/api2/v2/posts/bookmarks` | | `GET` | [Get bookmark categories](/docs/of-api/content/get-bookmark-categories) | `/api2/v2/posts/bookmarks/categories` | | `PATCH` | [Rename bookmark category](/docs/of-api/content/rename-bookmark-category) | `/api2/v2/posts/bookmarks/categories/{category_id}` | | `DELETE` | [Delete a bookmark category](/docs/of-api/content/delete-a-bookmark-category) | `/api2/v2/posts/bookmarks/categories/{category_id}` | | `POST` | [Add post to bookmark category](/docs/of-api/content/add-post-to-bookmark-category) | `/api2/v2/posts/bookmarks/categories/{category_id}/{post_id}` | | `POST` | [Sort bookmark categories](/docs/of-api/content/sort-bookmark-categories) | `/api2/v2/posts/bookmarks/categories/sort` | | `POST` | [Sort pinned paid posts](/docs/of-api/content/sort-pinned-paid-posts) | `/api2/v2/posts/paid/pin/sort` | | `POST` | [Reorder pinned posts](/docs/of-api/content/reorder-pinned-posts) | `/api2/v2/posts/pinned/sort` | | `POST` | [Report post view/interaction stats](/docs/of-api/content/report-post-view-interaction-stats) | `/api2/v2/posts/stats-collect` | | `POST` | [Create release form link](/docs/of-api/content/create-release-form-link) | `/api2/v2/release-form-links` | | `POST` | [Attach release form](/docs/of-api/content/attach-release-form) | `/api2/v2/release-forms/attach` | | `GET` | [Get scheduled posts](/docs/of-api/content/get-scheduled-posts) | `/api2/v2/schedules` | | `PUT` | [Publish a scheduled item](/docs/of-api/content/publish-a-scheduled-item) | `/api2/v2/schedules/{schedule_id}/publish` | | `GET` | [Get scheduled-post counts per day](/docs/of-api/content/get-scheduled-post-counts-per-day) | `/api2/v2/schedules/counters` | | `POST` | [Create signed media upload](/docs/of-api/content/create-signed-media-upload) | `/api2/v2/upload/signed/create` | | `POST` | [Finish signed upload](/docs/of-api/content/finish-signed-upload) | `/api2/v2/upload/signed/finish` | | `GET` | [Get DRM certificate](/docs/of-api/content/get-drm-certificate) | `/api2/v2/users/media/drm/certificate` | | `GET` | [Get 'on this day' posts](/docs/of-api/content/get-on-this-day-posts) | `/api2/v2/users/posts/on-this-day` | | `GET` | [Get vault lists (folders)](/docs/of-api/content/get-vault-lists-folders) | `/api2/v2/vault/lists` | | `GET` | [Get vault media list](/docs/of-api/content/get-vault-media-list) | `/api2/v2/vault/lists/{list_id}` | | `PATCH` | [Rename a vault list](/docs/of-api/content/rename-a-vault-list) | `/api2/v2/vault/lists/{list_id}` | | `DELETE` | [Delete vault list](/docs/of-api/content/delete-vault-list) | `/api2/v2/vault/lists/{list_id}` | | `POST` | [Add media to vault list](/docs/of-api/content/add-media-to-vault-list) | `/api2/v2/vault/lists/{list_id}/media` | | `POST` | [Sort vault lists](/docs/of-api/content/sort-vault-lists) | `/api2/v2/vault/lists/sort` | | `GET` | [Get vault media](/docs/of-api/content/get-vault-media) | `/api2/v2/vault/media` | | `GET` | [Get vault media item](/docs/of-api/content/get-vault-media-item) | `/api2/v2/vault/media/{media_id}` | | `PUT` | [Attach vault media to post/message](/docs/of-api/content/attach-vault-media-to-post-message) | `/api2/v2/vault/media/{media_id}/attach` | | `GET` | [Get posts using a vault media item](/docs/of-api/content/get-posts-using-a-vault-media-item) | `/api2/v2/vault/media/{media_id}/posts` | | `GET` | [Get vault media release forms](/docs/of-api/content/get-vault-media-release-forms) | `/api2/v2/vault/media/{media_id}/release-forms` | | `GET` | [Find vault media by MD5 (dedupe)](/docs/of-api/content/find-vault-media-by-md5-dedupe) | `/api2/v2/vault/media/hash` | | `PUT` | [Hide vault media](/docs/of-api/content/hide-vault-media) | `/api2/v2/vault/media/hidden` | | `GET` | [Get vault media being processed](/docs/of-api/content/get-vault-media-being-processed) | `/api2/v2/vault/media/processing` | | `GET` | [Get vault media types present](/docs/of-api/content/get-vault-media-types-present) | `/api2/v2/vault/media/types` | --- # Add media to vault list (/docs/of-api/content/add-media-to-vault-list) `POST https://theonlyapi.com/api/crm/your-crm-id/api2/v2/vault/lists/{list_id}/media` Add one or more media items to a vault list (folder) for organization. **OnlyFans only.** Requests made with a `user-id` belonging to a Fansly account are rejected — use the platform-neutral CRM data routes (`/notifications`, `/balances`, `/chats`, `/purchases`, `/subscribers/cached`, ...) which are Fansly-aware. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Path parameters - `list_id` (integer, required) — Vault list ID. ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Request body Content type: `application/json` (required) - `mediaIds` (integer[], required) — Array of media IDs to add to the list. e.g. `[12345,67890]`. ## Responses ### 200 — Media added to list ## Example ```bash curl -X POST "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/vault/lists/{list_id}/media" \ -H "X-API-Key: " \ -H "user-id: …" \ -H "Content-Type: application/json" \ -d '{"mediaIds":[12345,67890]}' ``` --- # Add post to bookmark category (/docs/of-api/content/add-post-to-bookmark-category) `POST https://theonlyapi.com/api/crm/your-crm-id/api2/v2/posts/bookmarks/categories/{category_id}/{post_id}` Adds a post to a bookmark category. Called as ({categoryId, postId}). **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Path parameters - `category_id` (string, required) — ID of the bookmark category. - `post_id` (string, required) — ID of the post to add. ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X POST "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/posts/bookmarks/categories/{category_id}/{post_id}" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Add post to favorites (/docs/of-api/content/add-post-to-favorites) `POST https://theonlyapi.com/api/crm/your-crm-id/api2/v2/posts/{post_id}/favorites/{author_id}` Marks the given post (by the specified author) as a favorite for the current user. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Path parameters - `post_id` (string, required) — ID of the post to favorite. - `author_id` (string, required) — User ID of the post's author. ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X POST "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/posts/{post_id}/favorites/{author_id}" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Attach release form (/docs/of-api/content/attach-release-form) `POST https://theonlyapi.com/api/crm/your-crm-id/api2/v2/release-forms/attach` Attaches a release form (content consent document) to content. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Request body Content type: `application/json` ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X POST "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/release-forms/attach" \ -H "X-API-Key: " \ -H "user-id: …" \ -H "Content-Type: application/json" \ -d '{}' ``` --- # Attach vault media to post/message (/docs/of-api/content/attach-vault-media-to-post-message) `PUT https://theonlyapi.com/api/crm/your-crm-id/api2/v2/vault/media/{media_id}/attach` Attach a media item from the vault to an existing post or message. The media must already be uploaded. **OnlyFans only.** Requests made with a `user-id` belonging to a Fansly account are rejected — use the platform-neutral CRM data routes (`/notifications`, `/balances`, `/chats`, `/purchases`, `/subscribers/cached`, ...) which are Fansly-aware. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Path parameters - `media_id` (integer, required) — Vault media ID. ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Request body Content type: `application/json` - `postId` (integer) — Post ID to attach media to. - `messageId` (integer) — Message ID to attach media to. ## Responses ### 200 — Media attached ## Example ```bash curl -X PUT "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/vault/media/{media_id}/attach" \ -H "X-API-Key: " \ -H "user-id: …" \ -H "Content-Type: application/json" \ -d '{}' ``` --- # Bookmark a post (/docs/of-api/content/bookmark-a-post) `POST https://theonlyapi.com/api/crm/your-crm-id/api2/v2/posts/{post_id}/bookmarks` Adds a post to bookmarks; an optional chat_group_id body targets a specific bookmark group. DELETE on the same path removes the bookmark. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Path parameters - `post_id` (string, required) — ID of the post to bookmark. ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Request body Content type: `application/json` - `chat_group_id` (string) — Optional bookmark/chat group id; basic call sends no body. ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X POST "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/posts/{post_id}/bookmarks" \ -H "X-API-Key: " \ -H "user-id: …" \ -H "Content-Type: application/json" \ -d '{}' ``` --- # Count fundraising contributors (/docs/of-api/content/count-fundraising-contributors) `GET https://theonlyapi.com/api/crm/your-crm-id/api2/v2/posts/{post_id}/fund-raising-contributors/count` Returns the number of contributors to a post's fundraising campaign. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Path parameters - `post_id` (string, required) — ID of the post. ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X GET "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/posts/{post_id}/fund-raising-contributors/count" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Create a new post (/docs/of-api/content/create-a-new-post) `POST https://theonlyapi.com/api/crm/your-crm-id/api2/v2/posts` Create a new post on your profile. Supports text, media attachments, PPV pricing, polls, scheduled publishing (`isScheduled` + `scheduledDate`), and expiration dates. **Attaching a freshly uploaded file — use `mediaFiles`, not `media`.** `POST /accounts/{of_user_id}/media` returns a `media` object; put it in a **`mediaFiles`** array here, unchanged and complete. Verified live 2026-08-06, and the failure mode is silent — OnlyFans returns `200` and simply attaches nothing if you get this wrong: | body | result | |---|---| | `mediaFiles: [{processId, host, thumbId, name, extra}]` | media attached ✅ | | `media: [{…same object…}]` | post created, **0 media** | | `mediaFiles: [{processId}]` only | post created, **0 media** | So pass the whole object through — dropping `thumbId` or `name` silently loses the attachment. The vault row for the media is created by this call and appears in `GET /api2/v2/vault/media` roughly 10–15 seconds later. It survives deletion of the post. Media already in the vault is referenced by its integer ID from `GET /api2/v2/vault/media`. **OnlyFans only.** Requests made with a `user-id` belonging to a Fansly account are rejected — use the platform-neutral CRM data routes (`/notifications`, `/balances`, `/chats`, `/purchases`, `/subscribers/cached`, ...) which are Fansly-aware. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Request body Content type: `application/json` (required) - `text` (string) — Post text / caption. e.g. `"New exclusive content! 🔥"`. - `rawText` (string) — Raw text without formatting (used internally for search/indexing). - `price` (number) — PPV price in USD. If set, the post is locked behind a paywall. e.g. `15`. - `lockedText` (boolean) — If true, text content is hidden until PPV is purchased. Default `false`. - `media` (integer[]) — Media to attach: integer vault IDs (from `GET /api2/v2/vault/media`), and/or the `media` object returned by `POST /accounts/{of_user_id}/media` for a file you just uploaded. e.g. `[12345,67890]`. - `preview` (integer[]) — Preview media IDs visible before purchasing PPV content. - `postedAt` (string) — Schedule date for the post (ISO 8601). If in the future, the post is scheduled. e.g. `"2025-06-15T14:00:00.000Z"`. - `postedAtPrecise` (string) — Precise timestamp string (unix ms). Used internally for ordering. - `expiredAt` (string) — Expiration date — post auto-deletes after this time. e.g. `"2025-07-15T14:00:00.000Z"`. - `isPublishedWithPeriod` (boolean) — Whether the post is published for a specific time period (used with expiredAt). Default `false`. - `voting` (string[]) — Poll options. Each item is a poll choice string. Adds a poll/vote to the post. e.g. `["Option A","Option B","Option C"]`. - `linkedPosts` (integer[]) — Array of post IDs to link to this post (related content). - `releaseForms` (integer[]) — Release form IDs for compliance when media features other people. - `streamId` (integer) — Link this post to a live stream by stream ID. ## Responses ### 200 — Post created - `id` (integer) - `text` (string) - `rawText` (string) - `price` (number) - `isOpened` (boolean) - `isPinned` (boolean) - `postedAt` (string) - `postedAtPrecise` (string) - `expiredAt` (string) - `commentsCount` (integer) - `favoritesCount` (integer) - `tipsAmount` (number) - `media` (object[]) - `id` (integer) — Stable OnlyFans media ID — the only persistent identifier for the item. - `type` ("photo" | "video" | "audio" | "gif") - `createdAt` (string) - `duration` (integer) — Duration in seconds (video/audio; 0 for photos). - `convertedToVideo` (boolean) - `canView` (boolean) - `isReady` (boolean) — False while OnlyFans is still processing/transcoding the upload. - `hasError` (boolean) - `hasPosts` (boolean) — Whether the media is attached to any post. - `hasCustomPreview` (boolean) - `counters` (object) — Engagement counters (present on the vault view). - `buyersCount` (integer) - `likesCount` (integer) - `tipsSumm` (number) - `listStates` (object[]) — Which vault lists (folders) this media belongs to. - `id` (integer) — Vault list ID. - `name` (string) — Vault list name. - `hasMedia` (boolean) - `canAddMedia` (boolean) - `files` (object) — Signed, time-limited CDN URLs at several resolutions. `size` is frequently `0` — do not rely on it. - `full` (object) - `preview` (object) - `thumb` (object) - `squarePreview` (object) - `videoSources` (object) — Per-resolution video URLs (e.g. `240`, `720`); entries are null when not applicable. - `author` (object) - `canComment` (boolean) - `canEdit` (boolean) - `hasVoting` (boolean) - `voting` (object[]) - `id` (integer) - `text` (string) - `votesCount` (integer) - `isSelected` (boolean) ## Example **Simple text post** ```bash curl -X POST "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/posts" \ -H "X-API-Key: " \ -H "user-id: …" \ -H "Content-Type: application/json" \ -d '{"text":"Happy Monday everyone! ❤️"}' ``` **Post with media** ```bash curl -X POST "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/posts" \ -H "X-API-Key: " \ -H "user-id: …" \ -H "Content-Type: application/json" \ -d '{"text":"New photoset just dropped!","media":[12345,67890,11111]}' ``` **Pay-per-view post** ```bash curl -X POST "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/posts" \ -H "X-API-Key: " \ -H "user-id: …" \ -H "Content-Type: application/json" \ -d '{"text":"Unlock to see the full set 🔒","media":[12345,67890],"preview":[12345],"price":25,"lockedText":false}' ``` **Post with a poll** ```bash curl -X POST "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/posts" \ -H "X-API-Key: " \ -H "user-id: …" \ -H "Content-Type: application/json" \ -d '{"text":"What should I post next?","voting":["Beach photoshoot","Gym content","Behind the scenes"]}' ``` **Scheduled post** ```bash curl -X POST "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/posts" \ -H "X-API-Key: " \ -H "user-id: …" \ -H "Content-Type: application/json" \ -d '{"text":"Coming soon...","media":[12345],"postedAt":"2025-06-20T18:00:00.000Z"}' ``` --- # Create release form link (/docs/of-api/content/create-release-form-link) `POST https://theonlyapi.com/api/crm/your-crm-id/api2/v2/release-form-links` Creates a release-form link (content consent document link) from the supplied data. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Request body Content type: `application/json` ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X POST "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/release-form-links" \ -H "X-API-Key: " \ -H "user-id: …" \ -H "Content-Type: application/json" \ -d '{}' ``` --- # Create signed media upload (/docs/of-api/content/create-signed-media-upload) `POST https://theonlyapi.com/api/crm/your-crm-id/api2/v2/upload/signed/create` Stage 1 of OnlyFans' media upload. Returns pre-signed S3 URL(s) that you then PUT the bytes to. **Body** (verified live 2026-08-06): ```json { "key": "upload/{uuid4}/{nonce}/{url-encoded-lowercased-filename}", "parts": 1, "contentType": "image/jpeg", "secure": false } ``` The `key` prefix comes from `GET /api2/v2/init` → `upload.s3.uploadPath` (`upload/`, or `upload/secure/` when `secure` is true). `parts` is `floor(size / 5242880) + 1` for files ≥ 5 MiB, else `1`. **A wrong or missing `key` is what produces `400 {"error":{"message":"Bad key"}}`** — the field really is named `key`, and it must be a path under the account's upload prefix. Response: `{ keys: [{putUrl}], uploadId, putUrl, getUrl }`. Multipart when `keys[]` is populated and the file is ≥ 5 MiB; otherwise PUT the whole file to `putUrl`. **You normally don't call this directly** — `POST /accounts/{of_user_id}/media` runs all four stages for you. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Request body Content type: `application/json` (required) - `key` (string, required) — Storage PATH, not a filename — `{uploadPath}{uuid4}/{nonce}/{url-encoded lowercased filename}`. `uploadPath` comes from GET /api2/v2/init → `upload.s3.uploadPath` (`upload/`, or `upload/secure/` when secure=true). A missing or malformed value is what returns `400 Bad key`. e.g. `"upload/0e683d4d-1726-4506-a04d-2a5d05f5b9e1/1031326954680/photo.jpg"`. - `parts` (integer, required) — Number of 5 MiB S3 parts: `floor(size / 5242880) + 1` for files ≥ 5 MiB, otherwise 1. e.g. `1`. - `contentType` (string, required) — MIME type of the file. `.heic` must be sent as `image/heic`. e.g. `"image/jpeg"`. - `secure` (boolean) — Use the secure (DRM) upload prefix instead of the standard one. Default `false`. ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X POST "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/upload/signed/create" \ -H "X-API-Key: " \ -H "user-id: …" \ -H "Content-Type: application/json" \ -d '{"key":"upload/0e683d4d-1726-4506-a04d-2a5d05f5b9e1/1031326954680/photo.jpg","parts":1,"contentType":"image/jpeg","secure":false}' ``` --- # Delete a bookmark category (/docs/of-api/content/delete-a-bookmark-category) `DELETE https://theonlyapi.com/api/crm/your-crm-id/api2/v2/posts/bookmarks/categories/{category_id}` Deletes a post-bookmark category by id. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Path parameters - `category_id` (string, required) — Id of the bookmark category to delete. ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X DELETE "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/posts/bookmarks/categories/{category_id}" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Delete a comment (/docs/of-api/content/delete-a-comment) `DELETE https://theonlyapi.com/api/crm/your-crm-id/api2/v2/comments/{comment_id}` Deletes a specific comment by its id. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Path parameters - `comment_id` (string, required) — Id of the comment to delete. ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X DELETE "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/comments/{comment_id}" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Delete vault list (/docs/of-api/content/delete-vault-list) `DELETE https://theonlyapi.com/api/crm/your-crm-id/api2/v2/vault/lists/{list_id}` Deletes a vault media list, optionally also clearing its media. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Path parameters - `list_id` (string, required) — ID of the vault media list. ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X DELETE "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/vault/lists/{list_id}" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Find vault media by MD5 (dedupe) (/docs/of-api/content/find-vault-media-by-md5-dedupe) `GET https://theonlyapi.com/api/crm/your-crm-id/api2/v2/vault/media/hash` **Deduplication / file→vault-item lookup.** Given the MD5 of an original file, returns the matching vault media if that exact byte content was previously uploaded, or `404 Media Not Found` if not. This is the ONLY content-based way to correlate a local file with an existing vault item — OnlyFans stores no filename or hash on the media object. The hash is the MD5 of the **original uploaded bytes**: hashing a downloaded/CDN copy will NOT match (the served file differs from the original), and a file that was re-encoded/re-exported after upload will not match either. In that case, capture the media `id` at upload time and keep your own `source → id` map. Response is wrapped in the passthrough envelope. **OnlyFans only.** **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Query parameters - `h` (string, required) — MD5 hex digest of the ORIGINAL uploaded file bytes. Note the parameter is `h`, not `hash` — this was documented as `hash` in error until 2026-08-06. For a single-part upload the S3 ETag returned by `POST /accounts/{of_user_id}/media` is exactly this MD5, so you can feed it straight back in. - `size` (integer, required) — Size of the original file in bytes. OnlyFans' own client always sends this alongside `h`. ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — Matching media, wrapped in the passthrough envelope On no match: `success:false`, `status_code:404`, and `data.error.message = "Media Not Found"`. - `success` (boolean) - `status_code` (integer) - `data` (object) — Media item (photo/video/audio/gif). Returned by the vault endpoints and embedded in posts, messages, and stories. **No source fingerprint exists.** OnlyFans does NOT expose an original filename, content hash, upload source ID, or any immutable content fingerprint on this object — `id` is the only stable identifier. To correlate a local file with an existing vault item, use `GET /api2/v2/vault/media/hash?hash={md5}`. `files.*.size` is frequently `0` and must never be used as a fingerprint. - `id` (integer) — Stable OnlyFans media ID — the only persistent identifier for the item. - `type` ("photo" | "video" | "audio" | "gif") - `createdAt` (string) - `duration` (integer) — Duration in seconds (video/audio; 0 for photos). - `convertedToVideo` (boolean) - `canView` (boolean) - `isReady` (boolean) — False while OnlyFans is still processing/transcoding the upload. - `hasError` (boolean) - `hasPosts` (boolean) — Whether the media is attached to any post. - `hasCustomPreview` (boolean) - `counters` (object) — Engagement counters (present on the vault view). - `buyersCount` (integer) - `likesCount` (integer) - `tipsSumm` (number) - `listStates` (object[]) — Which vault lists (folders) this media belongs to. - `id` (integer) — Vault list ID. - `name` (string) — Vault list name. - `hasMedia` (boolean) - `canAddMedia` (boolean) - `files` (object) — Signed, time-limited CDN URLs at several resolutions. `size` is frequently `0` — do not rely on it. - `full` (object) - `preview` (object) - `thumb` (object) - `squarePreview` (object) - `videoSources` (object) — Per-resolution video URLs (e.g. `240`, `720`); entries are null when not applicable. ## Example ```bash curl -X GET "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/vault/media/hash" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Finish signed upload (/docs/of-api/content/finish-signed-upload) `POST https://theonlyapi.com/api/crm/your-crm-id/api2/v2/upload/signed/finish` Stage 3 of OnlyFans' media upload — completes an S3 **multipart** upload after every part has been PUT. **Body** (verified live 2026-08-06): ```json { "key": "", "parts": [{ "ETag": "\"abc…\"", "PartNumber": 1 }], "uploadId": "", "secure": false } ``` Returns `{ "ETag": "…" }` for the assembled object. Single-part uploads (< 5 MiB) **skip this call** — the ETag comes straight off the S3 PUT response. Note that neither this nor `create` puts anything in the vault; a fourth stage hands the S3 descriptor to OnlyFans' converter host (`GET /api2/v2/init` → `upload.geoUploadHosts`). `POST /accounts/{of_user_id}/media` does all of it for you. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Request body Content type: `application/json` (required) - `key` (string, required) — The same `key` passed to upload/signed/create. e.g. `"upload/0e683d4d-1726-4506-a04d-2a5d05f5b9e1/1031326954680/photo.jpg"`. - `parts` (object[], required) — One entry per uploaded S3 part, in order. `ETag` is the quoted value from that part's PUT response header. - `ETag` (string, required) — e.g. `"\"5623a10f3404a04d201a8e38aea195d6\""`. - `PartNumber` (integer, required) — e.g. `1`. - `uploadId` (string, required) — The `uploadId` returned by upload/signed/create. - `secure` (boolean) — Must match the value used on create. Default `false`. ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X POST "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/upload/signed/finish" \ -H "X-API-Key: " \ -H "user-id: …" \ -H "Content-Type: application/json" \ -d '{"key":"upload/0e683d4d-1726-4506-a04d-2a5d05f5b9e1/1031326954680/photo.jpg","parts":[{"ETag":"\"5623a10f3404a04d201a8e38aea195d6\"","PartNumber":1}],"uploadId":"2~abc123","secure":false}' ``` --- # Get bookmark categories (/docs/of-api/content/get-bookmark-categories) `GET https://theonlyapi.com/api/crm/your-crm-id/api2/v2/posts/bookmarks/categories` **OnlyFans only.** Requests made with a `user-id` belonging to a Fansly account are rejected — use the platform-neutral CRM data routes (`/notifications`, `/balances`, `/chats`, `/purchases`, `/subscribers/cached`, ...) which are Fansly-aware. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — Categories list - `[]` array of: - `id` (string) — 'all' for all bookmarks, or numeric ID. - `name` (string) ## Example ```bash curl -X GET "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/posts/bookmarks/categories" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Get bookmarked posts (/docs/of-api/content/get-bookmarked-posts) `GET https://theonlyapi.com/api/crm/your-crm-id/api2/v2/posts/bookmarks` **OnlyFans only.** Requests made with a `user-id` belonging to a Fansly account are rejected — use the platform-neutral CRM data routes (`/notifications`, `/balances`, `/chats`, `/purchases`, `/subscribers/cached`, ...) which are Fansly-aware. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Query parameters - `limit` (integer) — Default `10`. - `offset` (integer) — Default `0`. ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — Bookmarked posts - `list` (object[]) - `id` (integer) - `text` (string) - `rawText` (string) - `price` (number) - `isOpened` (boolean) - `isPinned` (boolean) - `postedAt` (string) - `postedAtPrecise` (string) - `expiredAt` (string) - `commentsCount` (integer) - `favoritesCount` (integer) - `tipsAmount` (number) - `media` (object[]) - `id` (integer) — Stable OnlyFans media ID — the only persistent identifier for the item. - `type` ("photo" | "video" | "audio" | "gif") - `createdAt` (string) - `duration` (integer) — Duration in seconds (video/audio; 0 for photos). - `convertedToVideo` (boolean) - `canView` (boolean) - `isReady` (boolean) — False while OnlyFans is still processing/transcoding the upload. - `hasError` (boolean) - `hasPosts` (boolean) — Whether the media is attached to any post. - `hasCustomPreview` (boolean) - `counters` (object) — Engagement counters (present on the vault view). - `listStates` (object[]) — Which vault lists (folders) this media belongs to. - `files` (object) — Signed, time-limited CDN URLs at several resolutions. `size` is frequently `0` — do not rely on it. - `videoSources` (object) — Per-resolution video URLs (e.g. `240`, `720`); entries are null when not applicable. - `author` (object) - `canComment` (boolean) - `canEdit` (boolean) - `hasVoting` (boolean) - `voting` (object[]) - `id` (integer) - `text` (string) - `votesCount` (integer) - `isSelected` (boolean) - `hasMore` (boolean) ## Example ```bash curl -X GET "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/posts/bookmarks" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Get DRM certificate (/docs/of-api/content/get-drm-certificate) `GET https://theonlyapi.com/api/crm/your-crm-id/api2/v2/users/media/drm/certificate` Retrieves the DRM certificate used for protected media playback. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. ✓ **Verified live** against a real OnlyFans account (2026-07-30); the `data` schema below is the real response shape. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — OnlyFans response — verified live; `data` is the real shape. - `success` (boolean) - `status_code` (integer) - `data` (string) ## Example ```bash curl -X GET "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/users/media/drm/certificate" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Get 'on this day' posts (/docs/of-api/content/get-on-this-day-posts) `GET https://theonlyapi.com/api/crm/your-crm-id/api2/v2/users/posts/on-this-day` Retrieves the current user's posts from this date in previous years ('on this day' memories). **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. ✓ **Verified live** against a real OnlyFans account (2026-07-30); the `data` schema below is the real response shape. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — OnlyFans response — verified live; `data` is the real shape. - `success` (boolean) - `status_code` (integer) - `data` (any[]) ## Example ```bash curl -X GET "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/users/posts/on-this-day" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Get post comments (/docs/of-api/content/get-post-comments) `GET https://theonlyapi.com/api/crm/your-crm-id/api2/v2/posts/{post_id}/comments` **OnlyFans only.** Requests made with a `user-id` belonging to a Fansly account are rejected — use the platform-neutral CRM data routes (`/notifications`, `/balances`, `/chats`, `/purchases`, `/subscribers/cached`, ...) which are Fansly-aware. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Path parameters - `post_id` (string, required) ## Query parameters - `limit` (integer) — Default `10`. - `offset` (integer) — Default `0`. ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — Comments list - `list` (object[]) - `id` (integer) - `text` (string) - `author` (object) — Full OnlyFans user profile object. - `id` (integer) - `name` (string) - `username` (string) - `displayName` (string) - `about` (string) - `avatar` (string) — Avatar URL. - `avatarThumbs` (object) - `header` (string) — Profile header/banner URL. - `email` (string) - `isVerified` (boolean) - `isPerformer` (boolean) - `canEarn` (boolean) - `tipsEnabled` (boolean) - `subscribedBy` (boolean) — Whether you are subscribed to this user. - `subscribersCount` (integer) - `subscribesCount` (integer) - `postsCount` (integer) - `photosCount` (integer) - `videosCount` (integer) - `audiosCount` (integer) - `friendsCount` (integer) - `joinDate` (string) - `firstPublishedPostDate` (string) - `subscribePrice` (number) - `chatMessagesCount` (integer) — Unread chat messages. - `countPriorityChat` (integer) - `countPinnedChat` (integer) - `hasPurchasedPosts` (boolean) - `paidFeed` (boolean) - `openseaInfo` (object) - `createdAt` (string) - `likesCount` (integer) - `hasMore` (boolean) ## Example ```bash curl -X GET "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/posts/{post_id}/comments" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Get posts feed (/docs/of-api/content/get-posts-feed) `GET https://theonlyapi.com/api/crm/your-crm-id/api2/v2/posts` **OnlyFans only.** Requests made with a `user-id` belonging to a Fansly account are rejected — use the platform-neutral CRM data routes (`/notifications`, `/balances`, `/chats`, `/purchases`, `/subscribers/cached`, ...) which are Fansly-aware. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Query parameters - `limit` (integer) — Default `10`. - `offset` (integer) — Default `0`. - `format` (string) — Default `infinite`. - `skip_users` (string) — Default `all`. ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — Posts list - `list` (object[]) - `id` (integer) - `text` (string) - `rawText` (string) - `price` (number) - `isOpened` (boolean) - `isPinned` (boolean) - `postedAt` (string) - `postedAtPrecise` (string) - `expiredAt` (string) - `commentsCount` (integer) - `favoritesCount` (integer) - `tipsAmount` (number) - `media` (object[]) - `id` (integer) — Stable OnlyFans media ID — the only persistent identifier for the item. - `type` ("photo" | "video" | "audio" | "gif") - `createdAt` (string) - `duration` (integer) — Duration in seconds (video/audio; 0 for photos). - `convertedToVideo` (boolean) - `canView` (boolean) - `isReady` (boolean) — False while OnlyFans is still processing/transcoding the upload. - `hasError` (boolean) - `hasPosts` (boolean) — Whether the media is attached to any post. - `hasCustomPreview` (boolean) - `counters` (object) — Engagement counters (present on the vault view). - `listStates` (object[]) — Which vault lists (folders) this media belongs to. - `files` (object) — Signed, time-limited CDN URLs at several resolutions. `size` is frequently `0` — do not rely on it. - `videoSources` (object) — Per-resolution video URLs (e.g. `240`, `720`); entries are null when not applicable. - `author` (object) - `canComment` (boolean) - `canEdit` (boolean) - `hasVoting` (boolean) - `voting` (object[]) - `id` (integer) - `text` (string) - `votesCount` (integer) - `isSelected` (boolean) - `hasMore` (boolean) ## Example ```bash curl -X GET "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/posts" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Get posts using a vault media item (/docs/of-api/content/get-posts-using-a-vault-media-item) `GET https://theonlyapi.com/api/crm/your-crm-id/api2/v2/vault/media/{media_id}/posts` List posts that use a specific vault media item. Response is wrapped in the passthrough envelope. **OnlyFans only.** **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Path parameters - `media_id` (integer, required) — Vault media ID. ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 Posts referencing the media, wrapped in the passthrough envelope. - `success` (boolean) - `status_code` (integer) - `data` (object) - `list` (object[]) - `id` (integer) - `text` (string) - `rawText` (string) - `price` (number) - `isOpened` (boolean) - `isPinned` (boolean) - `postedAt` (string) - `postedAtPrecise` (string) - `expiredAt` (string) - `commentsCount` (integer) - `favoritesCount` (integer) - `tipsAmount` (number) - `media` (object[]) - `author` (object) - `canComment` (boolean) - `canEdit` (boolean) - `hasVoting` (boolean) - `voting` (object[]) - `hasMore` (boolean) ## Example ```bash curl -X GET "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/vault/media/{media_id}/posts" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Get scheduled-post counts per day (/docs/of-api/content/get-scheduled-post-counts-per-day) `GET https://theonlyapi.com/api/crm/your-crm-id/api2/v2/schedules/counters` **OnlyFans only.** Requests made with a `user-id` belonging to a Fansly account are rejected — use the platform-neutral CRM data routes (`/notifications`, `/balances`, `/chats`, `/purchases`, `/subscribers/cached`, ...) which are Fansly-aware. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — Scheduled-post counts, wrapped in the passthrough envelope `data.list` is an OBJECT keyed by ISO date (e.g. "2026-07-28") whose value is `{ post: }` — it is NOT an array. - `success` (boolean) - `status_code` (integer) - `data` (object) - `list` (object) — Keyed by ISO date string. - `syncInProcess` (boolean) ## Example ```bash curl -X GET "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/schedules/counters" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Get scheduled posts (/docs/of-api/content/get-scheduled-posts) `GET https://theonlyapi.com/api/crm/your-crm-id/api2/v2/schedules` **OnlyFans only.** Requests made with a `user-id` belonging to a Fansly account are rejected — use the platform-neutral CRM data routes (`/notifications`, `/balances`, `/chats`, `/purchases`, `/subscribers/cached`, ...) which are Fansly-aware. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Query parameters - `limit` (integer) — Default `10`. - `offset` (integer) — Default `0`. ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — Scheduled posts - `list` (object[]) - `id` (integer) - `text` (string) - `rawText` (string) - `price` (number) - `isOpened` (boolean) - `isPinned` (boolean) - `postedAt` (string) - `postedAtPrecise` (string) - `expiredAt` (string) - `commentsCount` (integer) - `favoritesCount` (integer) - `tipsAmount` (number) - `media` (object[]) - `id` (integer) — Stable OnlyFans media ID — the only persistent identifier for the item. - `type` ("photo" | "video" | "audio" | "gif") - `createdAt` (string) - `duration` (integer) — Duration in seconds (video/audio; 0 for photos). - `convertedToVideo` (boolean) - `canView` (boolean) - `isReady` (boolean) — False while OnlyFans is still processing/transcoding the upload. - `hasError` (boolean) - `hasPosts` (boolean) — Whether the media is attached to any post. - `hasCustomPreview` (boolean) - `counters` (object) — Engagement counters (present on the vault view). - `listStates` (object[]) — Which vault lists (folders) this media belongs to. - `files` (object) — Signed, time-limited CDN URLs at several resolutions. `size` is frequently `0` — do not rely on it. - `videoSources` (object) — Per-resolution video URLs (e.g. `240`, `720`); entries are null when not applicable. - `author` (object) - `canComment` (boolean) - `canEdit` (boolean) - `hasVoting` (boolean) - `voting` (object[]) - `id` (integer) - `text` (string) - `votesCount` (integer) - `isSelected` (boolean) - `hasMore` (boolean) ## Example ```bash curl -X GET "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/schedules" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Get specific post (/docs/of-api/content/get-specific-post) `GET https://theonlyapi.com/api/crm/your-crm-id/api2/v2/posts/{post_id}` **OnlyFans only.** Requests made with a `user-id` belonging to a Fansly account are rejected — use the platform-neutral CRM data routes (`/notifications`, `/balances`, `/chats`, `/purchases`, `/subscribers/cached`, ...) which are Fansly-aware. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Path parameters - `post_id` (string, required) ## Query parameters - `skip_users` (string) — Default `all`. ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — Post object - `id` (integer) - `text` (string) - `rawText` (string) - `price` (number) - `isOpened` (boolean) - `isPinned` (boolean) - `postedAt` (string) - `postedAtPrecise` (string) - `expiredAt` (string) - `commentsCount` (integer) - `favoritesCount` (integer) - `tipsAmount` (number) - `media` (object[]) - `id` (integer) — Stable OnlyFans media ID — the only persistent identifier for the item. - `type` ("photo" | "video" | "audio" | "gif") - `createdAt` (string) - `duration` (integer) — Duration in seconds (video/audio; 0 for photos). - `convertedToVideo` (boolean) - `canView` (boolean) - `isReady` (boolean) — False while OnlyFans is still processing/transcoding the upload. - `hasError` (boolean) - `hasPosts` (boolean) — Whether the media is attached to any post. - `hasCustomPreview` (boolean) - `counters` (object) — Engagement counters (present on the vault view). - `buyersCount` (integer) - `likesCount` (integer) - `tipsSumm` (number) - `listStates` (object[]) — Which vault lists (folders) this media belongs to. - `id` (integer) — Vault list ID. - `name` (string) — Vault list name. - `hasMedia` (boolean) - `canAddMedia` (boolean) - `files` (object) — Signed, time-limited CDN URLs at several resolutions. `size` is frequently `0` — do not rely on it. - `full` (object) - `preview` (object) - `thumb` (object) - `squarePreview` (object) - `videoSources` (object) — Per-resolution video URLs (e.g. `240`, `720`); entries are null when not applicable. - `author` (object) - `canComment` (boolean) - `canEdit` (boolean) - `hasVoting` (boolean) - `voting` (object[]) - `id` (integer) - `text` (string) - `votesCount` (integer) - `isSelected` (boolean) ## Example ```bash curl -X GET "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/posts/{post_id}" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Get user labels (/docs/of-api/content/get-user-labels) `GET https://theonlyapi.com/api/crm/your-crm-id/api2/v2/labels` **OnlyFans only.** Requests made with a `user-id` belonging to a Fansly account are rejected — use the platform-neutral CRM data routes (`/notifications`, `/balances`, `/chats`, `/purchases`, `/subscribers/cached`, ...) which are Fansly-aware. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Query parameters - `limit` (integer) — Default `10`. - `offset` (integer) — Default `0`. ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — Labels list - `list` (object[]) - `id` (integer) - `name` (string) - `postsCount` (integer) - `type` (string) - `hasMore` (boolean) ## Example ```bash curl -X GET "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/labels" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Get vault lists (folders) (/docs/of-api/content/get-vault-lists-folders) `GET https://theonlyapi.com/api/crm/your-crm-id/api2/v2/vault/lists` List the vault folders for an account. **`view=main` is required** — omitting it makes OnlyFans respond `400 Bad view param` (passed through verbatim). The response is wrapped in the standard passthrough envelope (`{ success, status_code, data }`); the OnlyFans body is under `data`, where `data.list` is the folder array and `data.all` carries global counts across the whole vault. **OnlyFans only.** Requests made with a `user-id` belonging to a Fansly account are rejected — use the platform-neutral CRM data routes (`/notifications`, `/balances`, `/chats`, `/purchases`, `/subscribers/cached`, ...) which are Fansly-aware. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Query parameters - `view` ("main", required) — Required by OnlyFans. Use `main` — it returns the folder list plus the `all` bucket of global counts. Omitting it returns `400 Bad view param`. Default `main`. - `limit` (integer) — Default `10`. - `offset` (integer) — Default `0`. ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — Vault folders, wrapped in the passthrough envelope. - `success` (boolean) - `status_code` (integer) - `data` (object) - `all` (object) — Pseudo-folder holding global counts across the entire vault. - `photosCount` (integer) - `videosCount` (integer) - `gifsCount` (integer) - `audiosCount` (integer) - `list` (object[]) - `id` (integer) - `name` (string) - `photosCount` (integer) - `videosCount` (integer) - `gifsCount` (integer) - `audiosCount` (integer) - `hasMedia` (boolean) - `canUpdate` (boolean) - `canDelete` (boolean) - `medias` (object[]) — A few thumbnail previews (type + url) used as the folder cover. - `hasMore` (boolean) - `order` (string) - `sort` (string) - `canCreateVaultLists` (boolean) ## Example ```bash curl -X GET "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/vault/lists" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Get vault media (/docs/of-api/content/get-vault-media) `GET https://theonlyapi.com/api/crm/your-crm-id/api2/v2/vault/media` List vault media items. This is how you obtain the integer media IDs referenced by post creation, story creation, and messages. **Uploading new media:** use `POST /accounts/{of_user_id}/media`. A freshly uploaded file will **not** show up in this list right away — OnlyFans creates the vault entry when a post/message/story consumes the upload's `processId`, not at upload time. That is OnlyFans' own behaviour, not a limitation of this API: there is no upload-to-vault endpoint anywhere in the OnlyFans web client. (A `POST /api2/v2/media` upload route was documented in error until 2026-08-06 — it never existed and OnlyFans answers it with 404.) **Filtering (supported, but previously undocumented):** `list={list_id}` restricts results to one folder, `field=recent` chooses the ordering field, and `sort=asc|desc` the direction — combine with `limit`/`offset` for paging. The response is wrapped in the standard passthrough envelope; the OnlyFans body (`{ list, hasMore }`) is under `data`. **Matching a local file to an existing item:** the media object carries no filename or hash — use `GET /api2/v2/vault/media/hash?h={md5}&size={bytes}` instead. **OnlyFans only.** Requests made with a `user-id` belonging to a Fansly account are rejected — use the platform-neutral CRM data routes (`/notifications`, `/balances`, `/chats`, `/purchases`, `/subscribers/cached`, ...) which are Fansly-aware. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Query parameters - `list` (integer) — Restrict results to a single vault folder (a list ID from GET /vault/lists). - `field` ("recent") — Ordering field. `recent` orders by upload time. Default `recent`. - `sort` ("asc" | "desc") — Sort direction. Default `desc`. - `limit` (integer) — Default `24`. - `offset` (integer) — Default `0`. ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — Media items, wrapped in the passthrough envelope. - `success` (boolean) - `status_code` (integer) - `data` (object) - `list` (object[]) - `id` (integer) — Stable OnlyFans media ID — the only persistent identifier for the item. - `type` ("photo" | "video" | "audio" | "gif") - `createdAt` (string) - `duration` (integer) — Duration in seconds (video/audio; 0 for photos). - `convertedToVideo` (boolean) - `canView` (boolean) - `isReady` (boolean) — False while OnlyFans is still processing/transcoding the upload. - `hasError` (boolean) - `hasPosts` (boolean) — Whether the media is attached to any post. - `hasCustomPreview` (boolean) - `counters` (object) — Engagement counters (present on the vault view). - `listStates` (object[]) — Which vault lists (folders) this media belongs to. - `files` (object) — Signed, time-limited CDN URLs at several resolutions. `size` is frequently `0` — do not rely on it. - `videoSources` (object) — Per-resolution video URLs (e.g. `240`, `720`); entries are null when not applicable. - `hasMore` (boolean) ## Example ```bash curl -X GET "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/vault/media" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Get vault media being processed (/docs/of-api/content/get-vault-media-being-processed) `GET https://theonlyapi.com/api/crm/your-crm-id/api2/v2/vault/media/processing` List media still being processed/transcoded by OnlyFans (items whose `isReady` is false). `data` carries its OWN `success` flag alongside `list` — distinct from the outer envelope's `success`. Response is wrapped in the passthrough envelope. **OnlyFans only.** **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 Media currently processing, wrapped in the passthrough envelope. - `success` (boolean) - `status_code` (integer) - `data` (object) - `is_processing` (boolean) - `success` (boolean) — OnlyFans' own flag, nested inside data. - `list` (object[]) - `id` (integer) — Stable OnlyFans media ID — the only persistent identifier for the item. - `type` ("photo" | "video" | "audio" | "gif") - `createdAt` (string) - `duration` (integer) — Duration in seconds (video/audio; 0 for photos). - `convertedToVideo` (boolean) - `canView` (boolean) - `isReady` (boolean) — False while OnlyFans is still processing/transcoding the upload. - `hasError` (boolean) - `hasPosts` (boolean) — Whether the media is attached to any post. - `hasCustomPreview` (boolean) - `counters` (object) — Engagement counters (present on the vault view). - `listStates` (object[]) — Which vault lists (folders) this media belongs to. - `files` (object) — Signed, time-limited CDN URLs at several resolutions. `size` is frequently `0` — do not rely on it. - `videoSources` (object) — Per-resolution video URLs (e.g. `240`, `720`); entries are null when not applicable. ## Example ```bash curl -X GET "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/vault/media/processing" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Get vault media item (/docs/of-api/content/get-vault-media-item) `GET https://theonlyapi.com/api/crm/your-crm-id/api2/v2/vault/media/{media_id}` Get a single vault media item by ID. Response is wrapped in the passthrough envelope; the OnlyFans media object is under `data`. **OnlyFans only.** **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Path parameters - `media_id` (integer, required) — Vault media ID. ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — The media item, wrapped in the passthrough envelope. - `success` (boolean) - `status_code` (integer) - `data` (object) — Media item (photo/video/audio/gif). Returned by the vault endpoints and embedded in posts, messages, and stories. **No source fingerprint exists.** OnlyFans does NOT expose an original filename, content hash, upload source ID, or any immutable content fingerprint on this object — `id` is the only stable identifier. To correlate a local file with an existing vault item, use `GET /api2/v2/vault/media/hash?hash={md5}`. `files.*.size` is frequently `0` and must never be used as a fingerprint. - `id` (integer) — Stable OnlyFans media ID — the only persistent identifier for the item. - `type` ("photo" | "video" | "audio" | "gif") - `createdAt` (string) - `duration` (integer) — Duration in seconds (video/audio; 0 for photos). - `convertedToVideo` (boolean) - `canView` (boolean) - `isReady` (boolean) — False while OnlyFans is still processing/transcoding the upload. - `hasError` (boolean) - `hasPosts` (boolean) — Whether the media is attached to any post. - `hasCustomPreview` (boolean) - `counters` (object) — Engagement counters (present on the vault view). - `buyersCount` (integer) - `likesCount` (integer) - `tipsSumm` (number) - `listStates` (object[]) — Which vault lists (folders) this media belongs to. - `id` (integer) — Vault list ID. - `name` (string) — Vault list name. - `hasMedia` (boolean) - `canAddMedia` (boolean) - `files` (object) — Signed, time-limited CDN URLs at several resolutions. `size` is frequently `0` — do not rely on it. - `full` (object) - `preview` (object) - `thumb` (object) - `squarePreview` (object) - `videoSources` (object) — Per-resolution video URLs (e.g. `240`, `720`); entries are null when not applicable. ## Example ```bash curl -X GET "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/vault/media/{media_id}" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Get vault media list (/docs/of-api/content/get-vault-media-list) `GET https://theonlyapi.com/api/crm/your-crm-id/api2/v2/vault/lists/{list_id}` Retrieves a single vault media list by id. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Path parameters - `list_id` (string, required) — ID of the vault list. ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X GET "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/vault/lists/{list_id}" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Get vault media release forms (/docs/of-api/content/get-vault-media-release-forms) `GET https://theonlyapi.com/api/crm/your-crm-id/api2/v2/vault/media/{media_id}/release-forms` Returns the release forms attached to a vault media item identified by media_id. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Path parameters - `media_id` (string, required) — ID of the vault media item. ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X GET "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/vault/media/{media_id}/release-forms" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Get vault media types present (/docs/of-api/content/get-vault-media-types-present) `GET https://theonlyapi.com/api/crm/your-crm-id/api2/v2/vault/media/types` Report which media types exist in the vault. `data` is a flat object of booleans (NOT counts) — one per type. Response is wrapped in the passthrough envelope. **OnlyFans only.** **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 Booleans for which media types are present, wrapped in the passthrough envelope. - `success` (boolean) - `status_code` (integer) - `data` (object) - `hasPhoto` (boolean) - `hasVideo` (boolean) - `hasGif` (boolean) - `hasAudio` (boolean) ## Example ```bash curl -X GET "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/vault/media/types" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Hide a post (/docs/of-api/content/hide-a-post) `PUT https://theonlyapi.com/api/crm/your-crm-id/api2/v2/posts/{post_id}/hide` Hides the specified post. Defined alongside post pin, favorite, vote and delete calls. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Path parameters - `post_id` (string, required) — ID of the post to hide. ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X PUT "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/posts/{post_id}/hide" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Hide vault media (/docs/of-api/content/hide-vault-media) `PUT https://theonlyapi.com/api/crm/your-crm-id/api2/v2/vault/media/hidden` Marks the given vault media items as hidden. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Request body Content type: `application/json` - `mediaIds` (any[]) — Ids of the vault media to hide. ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X PUT "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/vault/media/hidden" \ -H "X-API-Key: " \ -H "user-id: …" \ -H "Content-Type: application/json" \ -d '{}' ``` --- # Like a comment (/docs/of-api/content/like-a-comment) `POST https://theonlyapi.com/api/crm/your-crm-id/api2/v2/comments/{comment_id}/like` Adds a like to the specified comment. Paired with a DELETE on the same path to unlike, plus comment pin/delete calls. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Path parameters - `comment_id` (string, required) — ID of the comment to like. ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X POST "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/comments/{comment_id}/like" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Like / favorite a post (/docs/of-api/content/like-favorite-a-post) `POST https://theonlyapi.com/api/crm/your-crm-id/api2/v2/posts/{post_id}/favorites` **OnlyFans only.** Requests made with a `user-id` belonging to a Fansly account are rejected — use the platform-neutral CRM data routes (`/notifications`, `/balances`, `/chats`, `/purchases`, `/subscribers/cached`, ...) which are Fansly-aware. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Path parameters - `post_id` (string, required) ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — Post liked ## Example ```bash curl -X POST "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/posts/{post_id}/favorites" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Pin a comment (/docs/of-api/content/pin-a-comment) `POST https://theonlyapi.com/api/crm/your-crm-id/api2/v2/comments/{comment_id}/pin` Pins the specified comment. Paired with a DELETE on the same path to unpin. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Path parameters - `comment_id` (string, required) — ID of the comment to pin. ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X POST "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/comments/{comment_id}/pin" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Publish a scheduled item (/docs/of-api/content/publish-a-scheduled-item) `PUT https://theonlyapi.com/api/crm/your-crm-id/api2/v2/schedules/{schedule_id}/publish` Publishes a scheduled entity (e.g. queued post/stream) immediately by its schedule id. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Path parameters - `schedule_id` (string, required) — ID of the scheduled item to publish. ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X PUT "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/schedules/{schedule_id}/publish" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Remove post from bookmarks (/docs/of-api/content/remove-post-from-bookmarks) `DELETE https://theonlyapi.com/api/crm/your-crm-id/api2/v2/posts/{post_id}/bookmarks` Removes the given post from the user's bookmarks; an optional chat_group_id can scope the removal to a specific bookmark group. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Path parameters - `post_id` (string, required) — Id of the post to un-bookmark. ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X DELETE "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/posts/{post_id}/bookmarks" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Rename a vault list (/docs/of-api/content/rename-a-vault-list) `PATCH https://theonlyapi.com/api/crm/your-crm-id/api2/v2/vault/lists/{list_id}` Renames a media vault list identified by list id. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Path parameters - `list_id` (string, required) — ID of the vault list. ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Request body Content type: `application/json` - `name` (string) — New name for the vault list. ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X PATCH "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/vault/lists/{list_id}" \ -H "X-API-Key: " \ -H "user-id: …" \ -H "Content-Type: application/json" \ -d '{}' ``` --- # Rename bookmark category (/docs/of-api/content/rename-bookmark-category) `PATCH https://theonlyapi.com/api/crm/your-crm-id/api2/v2/posts/bookmarks/categories/{category_id}` Renames a post-bookmark category (DELETE removes it, POST creates one). **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Path parameters - `category_id` (string, required) — ID of the bookmark category. ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Request body Content type: `application/json` - `name` (string) — New category name. ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X PATCH "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/posts/bookmarks/categories/{category_id}" \ -H "X-API-Key: " \ -H "user-id: …" \ -H "Content-Type: application/json" \ -d '{}' ``` --- # Reorder pinned posts (/docs/of-api/content/reorder-pinned-posts) `POST https://theonlyapi.com/api/crm/your-crm-id/api2/v2/posts/pinned/sort` Change the display order of your pinned posts on your profile. **OnlyFans only.** Requests made with a `user-id` belonging to a Fansly account are rejected — use the platform-neutral CRM data routes (`/notifications`, `/balances`, `/chats`, `/purchases`, `/subscribers/cached`, ...) which are Fansly-aware. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Request body Content type: `application/json` (required) - `order` (integer[], required) — Ordered array of pinned post IDs. First ID appears first on profile. e.g. `[999,888,777]`. ## Responses ### 200 — Pin order updated ## Example ```bash curl -X POST "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/posts/pinned/sort" \ -H "X-API-Key: " \ -H "user-id: …" \ -H "Content-Type: application/json" \ -d '{"order":[999,888,777]}' ``` --- # Report post view/interaction stats (/docs/of-api/content/report-post-view-interaction-stats) `POST https://theonlyapi.com/api/crm/your-crm-id/api2/v2/posts/stats-collect` Submit post view and interaction analytics. Used by the client to report which posts were viewed, scrolled past, or interacted with. **OnlyFans only.** Requests made with a `user-id` belonging to a Fansly account are rejected — use the platform-neutral CRM data routes (`/notifications`, `/balances`, `/chats`, `/purchases`, `/subscribers/cached`, ...) which are Fansly-aware. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Request body Content type: `application/json` - `actions` (object[], required) — Array of post interaction events. - `postId` (integer) - `type` (string) — Action type (e.g. 'view', 'scroll', 'click'). ## Responses ### 200 — Stats collected ## Example ```bash curl -X POST "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/posts/stats-collect" \ -H "X-API-Key: " \ -H "user-id: …" \ -H "Content-Type: application/json" \ -d '{"actions":[{}]}' ``` --- # Sort bookmark categories (/docs/of-api/content/sort-bookmark-categories) `POST https://theonlyapi.com/api/crm/your-crm-id/api2/v2/posts/bookmarks/categories/sort` Sets the sort order of post bookmark categories. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Request body Content type: `application/json` ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X POST "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/posts/bookmarks/categories/sort" \ -H "X-API-Key: " \ -H "user-id: …" \ -H "Content-Type: application/json" \ -d '{}' ``` --- # Sort pinned paid posts (/docs/of-api/content/sort-pinned-paid-posts) `POST https://theonlyapi.com/api/crm/your-crm-id/api2/v2/posts/paid/pin/sort` Reorders the creator's pinned paid posts. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Request body Content type: `application/json` ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X POST "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/posts/paid/pin/sort" \ -H "X-API-Key: " \ -H "user-id: …" \ -H "Content-Type: application/json" \ -d '{}' ``` --- # Sort vault lists (/docs/of-api/content/sort-vault-lists) `POST https://theonlyapi.com/api/crm/your-crm-id/api2/v2/vault/lists/sort` Reorders the creator's vault media lists. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Request body Content type: `application/json` ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X POST "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/vault/lists/sort" \ -H "X-API-Key: " \ -H "user-id: …" \ -H "Content-Type: application/json" \ -d '{}' ``` --- # Unlike a comment (/docs/of-api/content/unlike-a-comment) `DELETE https://theonlyapi.com/api/crm/your-crm-id/api2/v2/comments/{comment_id}/like` Removes the current user's like from a comment (POST on the same path adds a like). **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Path parameters - `comment_id` (string, required) — ID of the comment to unlike. ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X DELETE "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/comments/{comment_id}/like" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Unpin a comment (/docs/of-api/content/unpin-a-comment) `DELETE https://theonlyapi.com/api/crm/your-crm-id/api2/v2/comments/{comment_id}/pin` Removes the pinned status from a comment. The paired POST /comments/{id}/pin pins it. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Path parameters - `comment_id` (string, required) — ID of the comment to unpin. ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X DELETE "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/comments/{comment_id}/pin" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Vote on a post poll (/docs/of-api/content/vote-on-a-post-poll) `POST https://theonlyapi.com/api/crm/your-crm-id/api2/v2/posts/{post_id}/vote` Submit a vote on a post that has a poll attached. Get the `optionId` from the post's `voting` array. **OnlyFans only.** Requests made with a `user-id` belonging to a Fansly account are rejected — use the platform-neutral CRM data routes (`/notifications`, `/balances`, `/chats`, `/purchases`, `/subscribers/cached`, ...) which are Fansly-aware. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Path parameters - `post_id` (string, required) ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Request body Content type: `application/json` (required) - `optionId` (integer, required) — The poll option ID to vote for (from the post's voting array). ## Responses ### 200 — Vote recorded ## Example ```bash curl -X POST "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/posts/{post_id}/vote" \ -H "X-API-Key: " \ -H "user-id: …" \ -H "Content-Type: application/json" \ -d '{"optionId":0}' ``` --- # Helpers (/docs/of-api/helpers) {/* Generated by scripts/gen-api.ts — edit that script, not this file. */} OnlyFans helper/manager accounts (via proxy). **OnlyFans only** — Fansly accounts are rejected on this surface. | Method | Endpoint | Path | | ------ | --------------------------------------------------------------------- | ------------------------------ | | `GET` | [List account helpers](/docs/of-api/helpers/list-account-helpers) | `/api2/v2/helpers` | | `GET` | [Get helper permissions](/docs/of-api/helpers/get-helper-permissions) | `/api2/v2/helpers/permissions` | --- # Get helper permissions (/docs/of-api/helpers/get-helper-permissions) `GET https://theonlyapi.com/api/crm/your-crm-id/api2/v2/helpers/permissions` **OnlyFans only.** Requests made with a `user-id` belonging to a Fansly account are rejected — use the platform-neutral CRM data routes (`/notifications`, `/balances`, `/chats`, `/purchases`, `/subscribers/cached`, ...) which are Fansly-aware. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — Permissions config ## Example ```bash curl -X GET "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/helpers/permissions" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # List account helpers (/docs/of-api/helpers/list-account-helpers) `GET https://theonlyapi.com/api/crm/your-crm-id/api2/v2/helpers` **OnlyFans only.** Requests made with a `user-id` belonging to a Fansly account are rejected — use the platform-neutral CRM data routes (`/notifications`, `/balances`, `/chats`, `/purchases`, `/subscribers/cached`, ...) which are Fansly-aware. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — Helper list - `[]` array of: - `userId` (integer) - `user` (object) — Full OnlyFans user profile object. - `id` (integer) - `name` (string) - `username` (string) - `displayName` (string) - `about` (string) - `avatar` (string) — Avatar URL. - `avatarThumbs` (object) - `c50` (string) - `c144` (string) - `header` (string) — Profile header/banner URL. - `email` (string) - `isVerified` (boolean) - `isPerformer` (boolean) - `canEarn` (boolean) - `tipsEnabled` (boolean) - `subscribedBy` (boolean) — Whether you are subscribed to this user. - `subscribersCount` (integer) - `subscribesCount` (integer) - `postsCount` (integer) - `photosCount` (integer) - `videosCount` (integer) - `audiosCount` (integer) - `friendsCount` (integer) - `joinDate` (string) - `firstPublishedPostDate` (string) - `subscribePrice` (number) - `chatMessagesCount` (integer) — Unread chat messages. - `countPriorityChat` (integer) - `countPinnedChat` (integer) - `hasPurchasedPosts` (boolean) - `paidFeed` (boolean) - `openseaInfo` (object) ## Example ```bash curl -X GET "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/helpers" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Lists (/docs/of-api/lists) {/* Generated by scripts/gen-api.ts — edit that script, not this file. */} OnlyFans user lists (via proxy). **OnlyFans only** — Fansly accounts are rejected on this surface. | Method | Endpoint | Path | | -------- | ------------------------------------------------------------------------------------- | ---------------------------------------------------------------- | | `GET` | [Get a label by ID](/docs/of-api/lists/get-a-label-by-id) | `/api2/v2/labels/{label_id}` | | `PATCH` | [Rename a label](/docs/of-api/lists/rename-a-label) | `/api2/v2/labels/{label_id}` | | `DELETE` | [Delete a label](/docs/of-api/lists/delete-a-label) | `/api2/v2/labels/{label_id}` | | `DELETE` | [Remove post from label](/docs/of-api/lists/remove-post-from-label) | `/api2/v2/labels/{label_id}/post/{post_id}` | | `POST` | [Add posts to label](/docs/of-api/lists/add-posts-to-label) | `/api2/v2/labels/{label_id}/posts` | | `DELETE` | [Remove all posts from label](/docs/of-api/lists/remove-all-posts-from-label) | `/api2/v2/labels/{label_id}/posts` | | `POST` | [Sort labels](/docs/of-api/lists/sort-labels) | `/api2/v2/labels/sort` | | `GET` | [Get user lists](/docs/of-api/lists/get-user-lists) | `/api2/v2/lists` | | `POST` | [Create a new list](/docs/of-api/lists/create-a-new-list) | `/api2/v2/lists` | | `GET` | [Get a user list](/docs/of-api/lists/get-a-user-list) | `/api2/v2/lists/{list_id}` | | `PATCH` | [Update a list](/docs/of-api/lists/update-a-list) | `/api2/v2/lists/{list_id}` | | `DELETE` | [Delete a list](/docs/of-api/lists/delete-a-list) | `/api2/v2/lists/{list_id}` | | `POST` | [Sort users in list](/docs/of-api/lists/sort-users-in-list) | `/api2/v2/lists/{list_id}/sort` | | `GET` | [Get users in a list](/docs/of-api/lists/get-users-in-a-list) | `/api2/v2/lists/{list_id}/users` | | `POST` | [Add claimers to list](/docs/of-api/lists/add-claimers-to-list) | `/api2/v2/lists/{list_id}/users/{type}/{id}/claims` | | `POST` | [Add user to list](/docs/of-api/lists/add-user-to-list) | `/api2/v2/lists/{list_id}/users/{user_id}` | | `DELETE` | [Remove user from list](/docs/of-api/lists/remove-user-from-list) | `/api2/v2/lists/{list_id}/users/{user_id}` | | `POST` | [Pin user in list](/docs/of-api/lists/pin-user-in-list) | `/api2/v2/lists/{list_id}/users/{user_id}/pin` | | `POST` | [Add award-winning users to list](/docs/of-api/lists/add-award-winning-users-to-list) | `/api2/v2/lists/{list_id}/users/awards/{year}/{month}` | | `POST` | [Add campaign claimers to list](/docs/of-api/lists/add-campaign-claimers-to-list) | `/api2/v2/lists/{list_id}/users/campaign/{campaign_id}/claimers` | | `POST` | [Add media buyers to list](/docs/of-api/lists/add-media-buyers-to-list) | `/api2/v2/lists/{list_id}/users/media/{media_id}/buyers` | | `POST` | [Sort pinned list users](/docs/of-api/lists/sort-pinned-list-users) | `/api2/v2/lists/{list_id}/users/pinned/sort` | | `POST` | [Add queue buyers to list](/docs/of-api/lists/add-queue-buyers-to-list) | `/api2/v2/lists/{list_id}/users/queue/{queue_id}/buyers` | | `POST` | [Add story viewers to list](/docs/of-api/lists/add-story-viewers-to-list) | `/api2/v2/lists/{list_id}/users/story/{story_id}/{type}` | | `POST` | [Add stream audience to list](/docs/of-api/lists/add-stream-audience-to-list) | `/api2/v2/lists/{list_id}/users/stream/{stream_id}/{type}` | | `DELETE` | [Remove stream users from list](/docs/of-api/lists/remove-stream-users-from-list) | `/api2/v2/lists/{list_id}/users/stream/{stream_id}/{type}` | | `POST` | [Add subscribers to list](/docs/of-api/lists/add-subscribers-to-list) | `/api2/v2/lists/{list_id}/users/subscribers` | | `POST` | [Add top subscribers to list](/docs/of-api/lists/add-top-subscribers-to-list) | `/api2/v2/lists/{list_id}/users/top-subscribers` | | `GET` | [Check list membership](/docs/of-api/lists/check-list-membership) | `/api2/v2/lists/check/{list_id}/{user_id}` | | `POST` | [Sort user lists](/docs/of-api/lists/sort-user-lists) | `/api2/v2/lists/sort` | | `POST` | [Add users to lists](/docs/of-api/lists/add-users-to-lists) | `/api2/v2/lists/users` | --- # Add award-winning users to list (/docs/of-api/lists/add-award-winning-users-to-list) `POST https://theonlyapi.com/api/crm/your-crm-id/api2/v2/lists/{list_id}/users/awards/{year}/{month}` Adds users who received awards in the given year/month to the specified list. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Path parameters - `list_id` (string, required) — ID of the list. - `year` (string, required) — Year of the awards period. - `month` (string, required) — Month of the awards period. ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X POST "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/lists/{list_id}/users/awards/{year}/{month}" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Add campaign claimers to list (/docs/of-api/lists/add-campaign-claimers-to-list) `POST https://theonlyapi.com/api/crm/your-crm-id/api2/v2/lists/{list_id}/users/campaign/{campaign_id}/claimers` Adds the users who claimed a campaign to a custom list. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Path parameters - `list_id` (string, required) — ID of the list. - `campaign_id` (string, required) — ID of the campaign whose claimers are added. ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X POST "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/lists/{list_id}/users/campaign/{campaign_id}/claimers" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Add claimers to list (/docs/of-api/lists/add-claimers-to-list) `POST https://theonlyapi.com/api/crm/your-crm-id/api2/v2/lists/{list_id}/users/{type}/{id}/claims` Adds users who claimed a given entity (identified by type and id) to the specified list. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Path parameters - `list_id` (string, required) — ID of the target list. - `type` (string, required) — Claim entity type. - `id` (string, required) — ID of the entity of the given type. ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X POST "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/lists/{list_id}/users/{type}/{id}/claims" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Add media buyers to list (/docs/of-api/lists/add-media-buyers-to-list) `POST https://theonlyapi.com/api/crm/your-crm-id/api2/v2/lists/{list_id}/users/media/{media_id}/buyers` Adds users who purchased a given media item to a list (bulk add by media). **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Path parameters - `list_id` (string, required) — ID of the target list. - `media_id` (string, required) — ID of the media whose buyers are added. ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X POST "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/lists/{list_id}/users/media/{media_id}/buyers" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Add posts to label (/docs/of-api/lists/add-posts-to-label) `POST https://theonlyapi.com/api/crm/your-crm-id/api2/v2/labels/{label_id}/posts` Adds one or more posts to a label. Called as (labelId, posts[]). **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Path parameters - `label_id` (string, required) — ID of the label. ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Request body Content type: `application/json` - `posts` (any[]) — IDs of the posts to add to the label. ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X POST "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/labels/{label_id}/posts" \ -H "X-API-Key: " \ -H "user-id: …" \ -H "Content-Type: application/json" \ -d '{}' ``` --- # Add queue buyers to list (/docs/of-api/lists/add-queue-buyers-to-list) `POST https://theonlyapi.com/api/crm/your-crm-id/api2/v2/lists/{list_id}/users/queue/{queue_id}/buyers` Adds users who bought from a given queue to a list (bulk add by queue). **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Path parameters - `list_id` (string, required) — ID of the target list. - `queue_id` (string, required) — ID of the queue whose buyers are added. ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X POST "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/lists/{list_id}/users/queue/{queue_id}/buyers" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Add story viewers to list (/docs/of-api/lists/add-story-viewers-to-list) `POST https://theonlyapi.com/api/crm/your-crm-id/api2/v2/lists/{list_id}/users/story/{story_id}/{type}` Adds users who interacted with a given story (by interaction type) to the specified list. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Path parameters - `list_id` (string, required) — ID of the target list. - `story_id` (string, required) — ID of the story. - `type` (string, required) — Interaction type used to select users. ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X POST "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/lists/{list_id}/users/story/{story_id}/{type}" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Add stream audience to list (/docs/of-api/lists/add-stream-audience-to-list) `POST https://theonlyapi.com/api/crm/your-crm-id/api2/v2/lists/{list_id}/users/stream/{stream_id}/{type}` Adds users from a live stream (matching the given type/criteria) to a list, optionally filtered by tip/subscription thresholds. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Path parameters - `list_id` (string, required) — Id of the target list. - `stream_id` (string, required) — Id of the stream whose audience is added. - `type` (string, required) — Audience segment/type key (e.g. viewers/tippers). ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Request body Content type: `application/json` - `tippedOver` (number) — Only include users who tipped over this amount. - `subscribedOver` (number) — Only include users subscribed over this threshold. ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X POST "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/lists/{list_id}/users/stream/{stream_id}/{type}" \ -H "X-API-Key: " \ -H "user-id: …" \ -H "Content-Type: application/json" \ -d '{}' ``` --- # Add subscribers to list (/docs/of-api/lists/add-subscribers-to-list) `POST https://theonlyapi.com/api/crm/your-crm-id/api2/v2/lists/{list_id}/users/subscribers` Adds subscribers to the list identified by list_id. Enclosing fn is addSubscribersToList. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Path parameters - `list_id` (string, required) — ID of the list to add subscribers to. ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Request body Content type: `application/json` ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X POST "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/lists/{list_id}/users/subscribers" \ -H "X-API-Key: " \ -H "user-id: …" \ -H "Content-Type: application/json" \ -d '{}' ``` --- # Add top subscribers to list (/docs/of-api/lists/add-top-subscribers-to-list) `POST https://theonlyapi.com/api/crm/your-crm-id/api2/v2/lists/{list_id}/users/top-subscribers` Adds the account's top subscribers to the given list (addTopSubscribersToList). **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Path parameters - `list_id` (string, required) — ID of the list to add top subscribers to. ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Request body Content type: `application/json` ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X POST "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/lists/{list_id}/users/top-subscribers" \ -H "X-API-Key: " \ -H "user-id: …" \ -H "Content-Type: application/json" \ -d '{}' ``` --- # Add user to list (/docs/of-api/lists/add-user-to-list) `POST https://theonlyapi.com/api/crm/your-crm-id/api2/v2/lists/{list_id}/users/{user_id}` **OnlyFans only.** Requests made with a `user-id` belonging to a Fansly account are rejected — use the platform-neutral CRM data routes (`/notifications`, `/balances`, `/chats`, `/purchases`, `/subscribers/cached`, ...) which are Fansly-aware. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Path parameters - `list_id` (string, required) - `user_id` (string, required) ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — User added ## Example ```bash curl -X POST "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/lists/{list_id}/users/{user_id}" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Add users to lists (/docs/of-api/lists/add-users-to-lists) `POST https://theonlyapi.com/api/crm/your-crm-id/api2/v2/lists/users` Adds users to one or more lists in bulk. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Request body Content type: `application/json` ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X POST "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/lists/users" \ -H "X-API-Key: " \ -H "user-id: …" \ -H "Content-Type: application/json" \ -d '{}' ``` --- # Check list membership (/docs/of-api/lists/check-list-membership) `GET https://theonlyapi.com/api/crm/your-crm-id/api2/v2/lists/check/{list_id}/{user_id}` Checks whether a given user belongs to a specific list. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Path parameters - `list_id` (string, required) — ID of the list. - `user_id` (string, required) — ID of the user to check. ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X GET "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/lists/check/{list_id}/{user_id}" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Create a new list (/docs/of-api/lists/create-a-new-list) `POST https://theonlyapi.com/api/crm/your-crm-id/api2/v2/lists` **OnlyFans only.** Requests made with a `user-id` belonging to a Fansly account are rejected — use the platform-neutral CRM data routes (`/notifications`, `/balances`, `/chats`, `/purchases`, `/subscribers/cached`, ...) which are Fansly-aware. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Request body Content type: `application/json` - `name` (string) — e.g. `"My List"`. ## Responses ### 200 — List created ## Example ```bash curl -X POST "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/lists" \ -H "X-API-Key: " \ -H "user-id: …" \ -H "Content-Type: application/json" \ -d '{"name":"My List"}' ``` --- # Delete a label (/docs/of-api/lists/delete-a-label) `DELETE https://theonlyapi.com/api/crm/your-crm-id/api2/v2/labels/{label_id}` Deletes a label identified by label id. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Path parameters - `label_id` (string, required) — ID of the label to delete. ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X DELETE "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/labels/{label_id}" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Delete a list (/docs/of-api/lists/delete-a-list) `DELETE https://theonlyapi.com/api/crm/your-crm-id/api2/v2/lists/{list_id}` Deletes a user list by id (GET retrieves it, PATCH renames/updates it). **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Path parameters - `list_id` (string, required) — ID of the list to delete. ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X DELETE "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/lists/{list_id}" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Get a label by ID (/docs/of-api/lists/get-a-label-by-id) `GET https://theonlyapi.com/api/crm/your-crm-id/api2/v2/labels/{label_id}` Retrieves a single content label by its ID. Sibling calls create, rename, sort and delete labels. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Path parameters - `label_id` (string, required) — ID of the label to retrieve. ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X GET "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/labels/{label_id}" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Get a user list (/docs/of-api/lists/get-a-user-list) `GET https://theonlyapi.com/api/crm/your-crm-id/api2/v2/lists/{list_id}` Retrieves a single user list identified by list_id. Enclosing fn is getUsersList. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Path parameters - `list_id` (string, required) — ID of the list to retrieve. ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X GET "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/lists/{list_id}" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Get user lists (/docs/of-api/lists/get-user-lists) `GET https://theonlyapi.com/api/crm/your-crm-id/api2/v2/lists` **OnlyFans only.** Requests made with a `user-id` belonging to a Fansly account are rejected — use the platform-neutral CRM data routes (`/notifications`, `/balances`, `/chats`, `/purchases`, `/subscribers/cached`, ...) which are Fansly-aware. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Query parameters - `limit` (integer) — Default `10`. - `offset` (integer) — Default `0`. ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — Lists - `list` (object[]) - `id` (integer) - `name` (string) - `type` (string) — List type (e.g. 'archived', 'private_archived', or standard). - `postsCount` (integer) - `usersCount` (integer) - `customOrderEnabled` (boolean) - `hasMore` (boolean) ## Example ```bash curl -X GET "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/lists" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Get users in a list (/docs/of-api/lists/get-users-in-a-list) `GET https://theonlyapi.com/api/crm/your-crm-id/api2/v2/lists/{list_id}/users` **OnlyFans only.** Requests made with a `user-id` belonging to a Fansly account are rejected — use the platform-neutral CRM data routes (`/notifications`, `/balances`, `/chats`, `/purchases`, `/subscribers/cached`, ...) which are Fansly-aware. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Path parameters - `list_id` (string, required) ## Query parameters - `limit` (integer) — Default `10`. - `offset` (integer) — Default `0`. ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — User list - `list` (object[]) - `id` (integer) - `name` (string) - `username` (string) - `displayName` (string) - `about` (string) - `avatar` (string) — Avatar URL. - `avatarThumbs` (object) - `c50` (string) - `c144` (string) - `header` (string) — Profile header/banner URL. - `email` (string) - `isVerified` (boolean) - `isPerformer` (boolean) - `canEarn` (boolean) - `tipsEnabled` (boolean) - `subscribedBy` (boolean) — Whether you are subscribed to this user. - `subscribersCount` (integer) - `subscribesCount` (integer) - `postsCount` (integer) - `photosCount` (integer) - `videosCount` (integer) - `audiosCount` (integer) - `friendsCount` (integer) - `joinDate` (string) - `firstPublishedPostDate` (string) - `subscribePrice` (number) - `chatMessagesCount` (integer) — Unread chat messages. - `countPriorityChat` (integer) - `countPinnedChat` (integer) - `hasPurchasedPosts` (boolean) - `paidFeed` (boolean) - `openseaInfo` (object) - `hasMore` (boolean) ## Example ```bash curl -X GET "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/lists/{list_id}/users" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Pin user in list (/docs/of-api/lists/pin-user-in-list) `POST https://theonlyapi.com/api/crm/your-crm-id/api2/v2/lists/{list_id}/users/{user_id}/pin` Pins a user to the top of a custom list. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Path parameters - `list_id` (string, required) — ID of the list. - `user_id` (string, required) — ID of the user to pin. ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X POST "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/lists/{list_id}/users/{user_id}/pin" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Remove all posts from label (/docs/of-api/lists/remove-all-posts-from-label) `DELETE https://theonlyapi.com/api/crm/your-crm-id/api2/v2/labels/{label_id}/posts` Removes all posts from the specified label. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Path parameters - `label_id` (string, required) — Id of the label to clear. ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X DELETE "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/labels/{label_id}/posts" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Remove post from label (/docs/of-api/lists/remove-post-from-label) `DELETE https://theonlyapi.com/api/crm/your-crm-id/api2/v2/labels/{label_id}/post/{post_id}` Removes a single post from the specified label. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Path parameters - `label_id` (string, required) — ID of the label. - `post_id` (string, required) — ID of the post to remove from the label. ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X DELETE "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/labels/{label_id}/post/{post_id}" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Remove stream users from list (/docs/of-api/lists/remove-stream-users-from-list) `DELETE https://theonlyapi.com/api/crm/your-crm-id/api2/v2/lists/{list_id}/users/stream/{stream_id}/{type}` Removes stream-derived users (e.g. viewers who tipped or subscribed over a threshold) of a given type from a list. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Path parameters - `list_id` (string, required) — ID of the list. - `stream_id` (string, required) — ID of the stream. - `type` (string, required) — User selection type (passed as the trailing path segment). ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X DELETE "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/lists/{list_id}/users/stream/{stream_id}/{type}" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Remove user from list (/docs/of-api/lists/remove-user-from-list) `DELETE https://theonlyapi.com/api/crm/your-crm-id/api2/v2/lists/{list_id}/users/{user_id}` **OnlyFans only.** Requests made with a `user-id` belonging to a Fansly account are rejected — use the platform-neutral CRM data routes (`/notifications`, `/balances`, `/chats`, `/purchases`, `/subscribers/cached`, ...) which are Fansly-aware. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Path parameters - `list_id` (string, required) - `user_id` (string, required) ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — User removed ## Example ```bash curl -X DELETE "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/lists/{list_id}/users/{user_id}" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Rename a label (/docs/of-api/lists/rename-a-label) `PATCH https://theonlyapi.com/api/crm/your-crm-id/api2/v2/labels/{label_id}` Renames the label identified by label_id to the provided name. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Path parameters - `label_id` (string, required) — ID of the label to rename. ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Request body Content type: `application/json` - `name` (string) — New label name. ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X PATCH "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/labels/{label_id}" \ -H "X-API-Key: " \ -H "user-id: …" \ -H "Content-Type: application/json" \ -d '{}' ``` --- # Sort labels (/docs/of-api/lists/sort-labels) `POST https://theonlyapi.com/api/crm/your-crm-id/api2/v2/labels/sort` Reorders the user's labels according to the supplied order. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Request body Content type: `application/json` ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X POST "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/labels/sort" \ -H "X-API-Key: " \ -H "user-id: …" \ -H "Content-Type: application/json" \ -d '{}' ``` --- # Sort pinned list users (/docs/of-api/lists/sort-pinned-list-users) `POST https://theonlyapi.com/api/crm/your-crm-id/api2/v2/lists/{list_id}/users/pinned/sort` Reorders the pinned users within a list identified by list_id, per the provided order. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Path parameters - `list_id` (string, required) — ID of the list whose pinned users are sorted. ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Request body Content type: `application/json` - `order` (any[]) — Desired ordering of pinned user IDs. ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X POST "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/lists/{list_id}/users/pinned/sort" \ -H "X-API-Key: " \ -H "user-id: …" \ -H "Content-Type: application/json" \ -d '{}' ``` --- # Sort user lists (/docs/of-api/lists/sort-user-lists) `POST https://theonlyapi.com/api/crm/your-crm-id/api2/v2/lists/sort` Persists a new ordering of the user's lists. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Request body Content type: `application/json` ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X POST "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/lists/sort" \ -H "X-API-Key: " \ -H "user-id: …" \ -H "Content-Type: application/json" \ -d '{}' ``` --- # Sort users in list (/docs/of-api/lists/sort-users-in-list) `POST https://theonlyapi.com/api/crm/your-crm-id/api2/v2/lists/{list_id}/sort` Sorts the users within a list. Called as sortListUsers({listId, data}). **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Path parameters - `list_id` (string, required) — ID of the list. ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Request body Content type: `application/json` ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X POST "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/lists/{list_id}/sort" \ -H "X-API-Key: " \ -H "user-id: …" \ -H "Content-Type: application/json" \ -d '{}' ``` --- # Update a list (/docs/of-api/lists/update-a-list) `PATCH https://theonlyapi.com/api/crm/your-crm-id/api2/v2/lists/{list_id}` Updates the given user list (getUsersList/updateList module). Sibling calls create, delete and sort lists. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Path parameters - `list_id` (string, required) — ID of the list to update. ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Request body Content type: `application/json` ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X PATCH "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/lists/{list_id}" \ -H "X-API-Key: " \ -H "user-id: …" \ -H "Content-Type: application/json" \ -d '{}' ``` --- # Messaging (/docs/of-api/messaging) {/* Generated by scripts/gen-api.ts — edit that script, not this file. */} OnlyFans chats & messages (via proxy). **OnlyFans only** — Fansly accounts are rejected on this surface. | Method | Endpoint | Path | | -------- | --------------------------------------------------------------------------------------------------- | ------------------------------------------------ | | `GET` | [List recent chats](/docs/of-api/messaging/list-recent-chats) | `/api2/v2/chats` | | `POST` | [Mark chat as read](/docs/of-api/messaging/mark-chat-as-read) | `/api2/v2/chats/{user_id}/mark-as-read` | | `GET` | [Get chat messages](/docs/of-api/messaging/get-chat-messages) | `/api2/v2/chats/{user_id}/messages` | | `POST` | [Send a message](/docs/of-api/messaging/send-a-message) | `/api2/v2/chats/{user_id}/messages` | | `GET` | [Get single chat message](/docs/of-api/messaging/get-single-chat-message) | `/api2/v2/chats/{user_id}/messages/{message_id}` | | `GET` | [Search messages in chat](/docs/of-api/messaging/search-messages-in-chat) | `/api2/v2/chats/{user_id}/messages/search` | | `POST` | [Mark chats as read](/docs/of-api/messaging/mark-chats-as-read) | `/api2/v2/chats/mark-as-read` | | `PUT` | [Hide a message](/docs/of-api/messaging/hide-a-message) | `/api2/v2/messages/{message_id}/hide` | | `POST` | [Like / react to a message](/docs/of-api/messaging/like-react-to-a-message) | `/api2/v2/messages/{message_id}/like` | | `GET` | [Get queued mass messages](/docs/of-api/messaging/get-queued-mass-messages) | `/api2/v2/messages/queue` | | `POST` | [Create a mass message](/docs/of-api/messaging/create-a-mass-message) | `/api2/v2/messages/queue` | | `PUT` | [Update queued message](/docs/of-api/messaging/update-queued-message) | `/api2/v2/messages/queue/{queue_id}` | | `DELETE` | [Delete queued message](/docs/of-api/messaging/delete-queued-message) | `/api2/v2/messages/queue/{queue_id}` | | `POST` | [Calculate mass message audience size](/docs/of-api/messaging/calculate-mass-message-audience-size) | `/api2/v2/messages/queue/size` | | `GET` | [Get message templates](/docs/of-api/messaging/get-message-templates) | `/api2/v2/messages/templates` | | `DELETE` | [Delete message template](/docs/of-api/messaging/delete-message-template) | `/api2/v2/messages/templates/{template_id}` | | `POST` | [Set reply-on-subscribe template](/docs/of-api/messaging/set-reply-on-subscribe-template) | `/api2/v2/messages/templates/reply_on_subscribe` | --- # Calculate mass message audience size (/docs/of-api/messaging/calculate-mass-message-audience-size) `POST https://theonlyapi.com/api/crm/your-crm-id/api2/v2/messages/queue/size` Preview how many users would receive a mass message given the buyer filter criteria. **OnlyFans only.** Requests made with a `user-id` belonging to a Fansly account are rejected — use the platform-neutral CRM data routes (`/notifications`, `/balances`, `/chats`, `/purchases`, `/subscribers/cached`, ...) which are Fansly-aware. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Request body Content type: `application/json` - `queueBuyers` (object[]) — Same filter array as used in POST /messages/queue. Empty = all subscribers. e.g. `[]`. ## Responses ### 200 — Audience size estimate - `size` (integer) — Number of users who would receive the message. ## Example ```bash curl -X POST "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/messages/queue/size" \ -H "X-API-Key: " \ -H "user-id: …" \ -H "Content-Type: application/json" \ -d '{"queueBuyers":[]}' ``` --- # Create a mass message (/docs/of-api/messaging/create-a-mass-message) `POST https://theonlyapi.com/api/crm/your-crm-id/api2/v2/messages/queue` Queue a mass message to be sent to multiple subscribers. You can target all subscribers, specific lists, or exclude certain users. **Attaching media:** `POST /accounts/{of_user_id}/media` (raw bytes or a `source_url` we fetch for you) returns a `media` object — pass it through here. Media already in the vault is referenced by its integer ID from `GET /api2/v2/vault/media`. **OnlyFans only.** Requests made with a `user-id` belonging to a Fansly account are rejected — use the platform-neutral CRM data routes (`/notifications`, `/balances`, `/chats`, `/purchases`, `/subscribers/cached`, ...) which are Fansly-aware. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Request body Content type: `application/json` (required) - `text` (string) — Message text. e.g. `"Special offer just for you! 🎁"`. - `mediaFiles` (integer[]) — Media IDs from vault. - `price` (number) — PPV price for locked content. - `lockedText` (boolean) — Default `false`. - `releaseForms` (integer[]) - `queueBuyers` (object[]) — Target audience filters. Empty array = all subscribers. Can specify list IDs or user groups. e.g. `[]`. ## Responses ### 200 — Mass message queued successfully ## Example **Mass message to all subscribers** ```bash curl -X POST "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/messages/queue" \ -H "X-API-Key: " \ -H "user-id: …" \ -H "Content-Type: application/json" \ -d '{"text":"Happy weekend! Check your DMs for a surprise 🎁","mediaFiles":[12345],"price":5,"queueBuyers":[]}' ``` --- # Delete message template (/docs/of-api/messaging/delete-message-template) `DELETE https://theonlyapi.com/api/crm/your-crm-id/api2/v2/messages/templates/{template_id}` Deletes a saved message template. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Path parameters - `template_id` (string, required) — ID of the message template to delete. ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X DELETE "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/messages/templates/{template_id}" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Delete queued message (/docs/of-api/messaging/delete-queued-message) `DELETE https://theonlyapi.com/api/crm/your-crm-id/api2/v2/messages/queue/{queue_id}` Deletes a queued (scheduled) mass message by its queue ID. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Path parameters - `queue_id` (string, required) — ID of the queued/scheduled message. ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X DELETE "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/messages/queue/{queue_id}" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Get chat messages (/docs/of-api/messaging/get-chat-messages) `GET https://theonlyapi.com/api/crm/your-crm-id/api2/v2/chats/{user_id}/messages` **OnlyFans only.** Requests made with a `user-id` belonging to a Fansly account are rejected — use the platform-neutral CRM data routes (`/notifications`, `/balances`, `/chats`, `/purchases`, `/subscribers/cached`, ...) which are Fansly-aware. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Path parameters - `user_id` (string, required) ## Query parameters - `limit` (integer) — Default `20`. - `order` (string) — Default `desc`. - `id` (integer) — Message ID cursor for pagination. Returns messages before/after this ID depending on order. - `skip_users` (string) — Default `all`. ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — Message list - `list` (object[]) - `id` (integer) - `text` (string) - `price` (number) - `isFromQueue` (boolean) - `isOpened` (boolean) - `isNew` (boolean) - `createdAt` (string) - `changedAt` (string) - `isFree` (boolean) - `media` (object[]) - `id` (integer) — Stable OnlyFans media ID — the only persistent identifier for the item. - `type` ("photo" | "video" | "audio" | "gif") - `createdAt` (string) - `duration` (integer) — Duration in seconds (video/audio; 0 for photos). - `convertedToVideo` (boolean) - `canView` (boolean) - `isReady` (boolean) — False while OnlyFans is still processing/transcoding the upload. - `hasError` (boolean) - `hasPosts` (boolean) — Whether the media is attached to any post. - `hasCustomPreview` (boolean) - `counters` (object) — Engagement counters (present on the vault view). - `listStates` (object[]) — Which vault lists (folders) this media belongs to. - `files` (object) — Signed, time-limited CDN URLs at several resolutions. `size` is frequently `0` — do not rely on it. - `videoSources` (object) — Per-resolution video URLs (e.g. `240`, `720`); entries are null when not applicable. - `fromUser` (object) - `hasMore` (boolean) ## Example ```bash curl -X GET "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/chats/{user_id}/messages" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Get message templates (/docs/of-api/messaging/get-message-templates) `GET https://theonlyapi.com/api/crm/your-crm-id/api2/v2/messages/templates` Get saved message templates for quick replies. **OnlyFans only.** Requests made with a `user-id` belonging to a Fansly account are rejected — use the platform-neutral CRM data routes (`/notifications`, `/balances`, `/chats`, `/purchases`, `/subscribers/cached`, ...) which are Fansly-aware. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — Template list - `[]` array of: - `id` (integer) - `name` (string) - `content` (string) - `createdAt` (string) - `updatedAt` (string) ## Example ```bash curl -X GET "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/messages/templates" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Get queued mass messages (/docs/of-api/messaging/get-queued-mass-messages) `GET https://theonlyapi.com/api/crm/your-crm-id/api2/v2/messages/queue` List all scheduled/queued mass messages. These are messages waiting to be sent to multiple users. **OnlyFans only.** Requests made with a `user-id` belonging to a Fansly account are rejected — use the platform-neutral CRM data routes (`/notifications`, `/balances`, `/chats`, `/purchases`, `/subscribers/cached`, ...) which are Fansly-aware. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Query parameters - `limit` (integer) — Default `10`. - `offset` (integer) — Default `0`. ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — Queue list - `list` (object[]) - `hasMore` (boolean) ## Example ```bash curl -X GET "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/messages/queue" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Get single chat message (/docs/of-api/messaging/get-single-chat-message) `GET https://theonlyapi.com/api/crm/your-crm-id/api2/v2/chats/{user_id}/messages/{message_id}` Retrieves a specific message within the chat with a given user. Called as getMessage({userId, groupId}). **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Path parameters - `user_id` (string, required) — ID of the user the chat is with. - `message_id` (string, required) — ID of the message (passed as groupId in the caller). ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X GET "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/chats/{user_id}/messages/{message_id}" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Hide a message (/docs/of-api/messaging/hide-a-message) `PUT https://theonlyapi.com/api/crm/your-crm-id/api2/v2/messages/{message_id}/hide` Hides a chat message identified by message_id. The request body carries hide options. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Path parameters - `message_id` (string, required) — ID of the message to hide. ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Request body Content type: `application/json` ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X PUT "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/messages/{message_id}/hide" \ -H "X-API-Key: " \ -H "user-id: …" \ -H "Content-Type: application/json" \ -d '{}' ``` --- # Like / react to a message (/docs/of-api/messaging/like-react-to-a-message) `POST https://theonlyapi.com/api/crm/your-crm-id/api2/v2/messages/{message_id}/like` Send a like reaction to a specific message in a chat. **OnlyFans only.** Requests made with a `user-id` belonging to a Fansly account are rejected — use the platform-neutral CRM data routes (`/notifications`, `/balances`, `/chats`, `/purchases`, `/subscribers/cached`, ...) which are Fansly-aware. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Path parameters - `message_id` (integer, required) ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Request body Content type: `application/json` - `withUserId` (integer) — The user ID of the chat partner (recipient of the like notification). ## Responses ### 200 — Message liked ## Example ```bash curl -X POST "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/messages/{message_id}/like" \ -H "X-API-Key: " \ -H "user-id: …" \ -H "Content-Type: application/json" \ -d '{}' ``` --- # List recent chats (/docs/of-api/messaging/list-recent-chats) `GET https://theonlyapi.com/api/crm/your-crm-id/api2/v2/chats` **OnlyFans only.** Requests made with a `user-id` belonging to a Fansly account are rejected — use the platform-neutral CRM data routes (`/notifications`, `/balances`, `/chats`, `/purchases`, `/subscribers/cached`, ...) which are Fansly-aware. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Query parameters - `limit` (integer) — Default `10`. - `offset` (integer) — Default `0`. - `order` (string) — Default `recent`. - `skip_users` (string) — Default `all`. ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — Chat list - `list` (object[]) - `id` (integer) - `withUser` (object) — Full OnlyFans user profile object. - `id` (integer) - `name` (string) - `username` (string) - `displayName` (string) - `about` (string) - `avatar` (string) — Avatar URL. - `avatarThumbs` (object) - `header` (string) — Profile header/banner URL. - `email` (string) - `isVerified` (boolean) - `isPerformer` (boolean) - `canEarn` (boolean) - `tipsEnabled` (boolean) - `subscribedBy` (boolean) — Whether you are subscribed to this user. - `subscribersCount` (integer) - `subscribesCount` (integer) - `postsCount` (integer) - `photosCount` (integer) - `videosCount` (integer) - `audiosCount` (integer) - `friendsCount` (integer) - `joinDate` (string) - `firstPublishedPostDate` (string) - `subscribePrice` (number) - `chatMessagesCount` (integer) — Unread chat messages. - `countPriorityChat` (integer) - `countPinnedChat` (integer) - `hasPurchasedPosts` (boolean) - `paidFeed` (boolean) - `openseaInfo` (object) - `lastMessage` (object) — An OnlyFans chat message object. - `id` (integer) - `text` (string) - `price` (number) - `isFromQueue` (boolean) - `isOpened` (boolean) - `isNew` (boolean) - `createdAt` (string) - `changedAt` (string) - `isFree` (boolean) - `media` (object[]) - `fromUser` (object) - `unreadMessagesCount` (integer) - `hasMore` (boolean) ## Example ```bash curl -X GET "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/chats" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Mark chat as read (/docs/of-api/messaging/mark-chat-as-read) `POST https://theonlyapi.com/api/crm/your-crm-id/api2/v2/chats/{user_id}/mark-as-read` **OnlyFans only.** Requests made with a `user-id` belonging to a Fansly account are rejected — use the platform-neutral CRM data routes (`/notifications`, `/balances`, `/chats`, `/purchases`, `/subscribers/cached`, ...) which are Fansly-aware. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Path parameters - `user_id` (string, required) ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — Marked as read ## Example ```bash curl -X POST "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/chats/{user_id}/mark-as-read" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Mark chats as read (/docs/of-api/messaging/mark-chats-as-read) `POST https://theonlyapi.com/api/crm/your-crm-id/api2/v2/chats/mark-as-read` Marks one or more chats as read for the current user. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Request body Content type: `application/json` ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X POST "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/chats/mark-as-read" \ -H "X-API-Key: " \ -H "user-id: …" \ -H "Content-Type: application/json" \ -d '{}' ``` --- # Search messages in chat (/docs/of-api/messaging/search-messages-in-chat) `GET https://theonlyapi.com/api/crm/your-crm-id/api2/v2/chats/{user_id}/messages/search` **OnlyFans only.** Requests made with a `user-id` belonging to a Fansly account are rejected — use the platform-neutral CRM data routes (`/notifications`, `/balances`, `/chats`, `/purchases`, `/subscribers/cached`, ...) which are Fansly-aware. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Path parameters - `user_id` (string, required) ## Query parameters - `query` (string, required) ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — Search results - `list` (object[]) - `id` (integer) - `text` (string) - `price` (number) - `isFromQueue` (boolean) - `isOpened` (boolean) - `isNew` (boolean) - `createdAt` (string) - `changedAt` (string) - `isFree` (boolean) - `media` (object[]) - `id` (integer) — Stable OnlyFans media ID — the only persistent identifier for the item. - `type` ("photo" | "video" | "audio" | "gif") - `createdAt` (string) - `duration` (integer) — Duration in seconds (video/audio; 0 for photos). - `convertedToVideo` (boolean) - `canView` (boolean) - `isReady` (boolean) — False while OnlyFans is still processing/transcoding the upload. - `hasError` (boolean) - `hasPosts` (boolean) — Whether the media is attached to any post. - `hasCustomPreview` (boolean) - `counters` (object) — Engagement counters (present on the vault view). - `listStates` (object[]) — Which vault lists (folders) this media belongs to. - `files` (object) — Signed, time-limited CDN URLs at several resolutions. `size` is frequently `0` — do not rely on it. - `videoSources` (object) — Per-resolution video URLs (e.g. `240`, `720`); entries are null when not applicable. - `fromUser` (object) - `hasMore` (boolean) ## Example ```bash curl -X GET "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/chats/{user_id}/messages/search" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Send a message (/docs/of-api/messaging/send-a-message) `POST https://theonlyapi.com/api/crm/your-crm-id/api2/v2/chats/{user_id}/messages` Send a direct message to a user. Supports text, media attachments (uploaded via the media upload endpoint first), PPV pricing, and locked text. Media must be uploaded to the vault first, then referenced by ID in the `mediaFiles` array. **OnlyFans only.** Requests made with a `user-id` belonging to a Fansly account are rejected — use the platform-neutral CRM data routes (`/notifications`, `/balances`, `/chats`, `/purchases`, `/subscribers/cached`, ...) which are Fansly-aware. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Path parameters - `user_id` (string, required) ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Request body Content type: `application/json` (required) - `text` (string) — Message text content. e.g. `"Hello! Check out this exclusive content 🔥"`. - `mediaFiles` (integer[]) — Media to attach. Two accepted forms: * an integer vault ID of media already in the vault (list them with `GET /api2/v2/vault/media`) * the `media` object returned by `POST /accounts/{of_user_id}/media` — a freshly uploaded file is referenced by `processId`, not a vault ID Upload new files with `POST /accounts/{of_user_id}/media` (raw bytes, or a `source_url` we fetch for you). e.g. `[12345,67890]`. - `price` (number) — PPV price in USD. If set, the message content is locked behind a paywall. e.g. `9.99`. - `lockedText` (boolean) — If true, the text is hidden until the user pays the PPV price. Default `false`. - `releaseForms` (integer[]) — Release form IDs for compliance. Required if media contains other people. - `replyToMessage` (integer) — Message ID to reply to (creates a threaded reply). ## Responses ### 200 — Message sent successfully - `id` (integer) - `text` (string) - `price` (number) - `isFromQueue` (boolean) - `isOpened` (boolean) - `isNew` (boolean) - `createdAt` (string) - `changedAt` (string) - `isFree` (boolean) - `media` (object[]) - `id` (integer) — Stable OnlyFans media ID — the only persistent identifier for the item. - `type` ("photo" | "video" | "audio" | "gif") - `createdAt` (string) - `duration` (integer) — Duration in seconds (video/audio; 0 for photos). - `convertedToVideo` (boolean) - `canView` (boolean) - `isReady` (boolean) — False while OnlyFans is still processing/transcoding the upload. - `hasError` (boolean) - `hasPosts` (boolean) — Whether the media is attached to any post. - `hasCustomPreview` (boolean) - `counters` (object) — Engagement counters (present on the vault view). - `buyersCount` (integer) - `likesCount` (integer) - `tipsSumm` (number) - `listStates` (object[]) — Which vault lists (folders) this media belongs to. - `id` (integer) — Vault list ID. - `name` (string) — Vault list name. - `hasMedia` (boolean) - `canAddMedia` (boolean) - `files` (object) — Signed, time-limited CDN URLs at several resolutions. `size` is frequently `0` — do not rely on it. - `full` (object) - `preview` (object) - `thumb` (object) - `squarePreview` (object) - `videoSources` (object) — Per-resolution video URLs (e.g. `240`, `720`); entries are null when not applicable. - `fromUser` (object) ## Example **Simple text message** ```bash curl -X POST "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/chats/{user_id}/messages" \ -H "X-API-Key: " \ -H "user-id: …" \ -H "Content-Type: application/json" \ -d '{"text":"Hey! How are you?"}' ``` **Message with media attachments** ```bash curl -X POST "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/chats/{user_id}/messages" \ -H "X-API-Key: " \ -H "user-id: …" \ -H "Content-Type: application/json" \ -d '{"text":"Here's your exclusive content!","mediaFiles":[12345,67890]}' ``` **Pay-per-view message** ```bash curl -X POST "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/chats/{user_id}/messages" \ -H "X-API-Key: " \ -H "user-id: …" \ -H "Content-Type: application/json" \ -d '{"text":"Unlock to see 🔒","mediaFiles":[12345],"price":15,"lockedText":true}' ``` --- # Set reply-on-subscribe template (/docs/of-api/messaging/set-reply-on-subscribe-template) `POST https://theonlyapi.com/api/crm/your-crm-id/api2/v2/messages/templates/reply_on_subscribe` Creates or updates the automatic welcome message template sent when a fan subscribes. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Request body Content type: `application/json` ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X POST "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/messages/templates/reply_on_subscribe" \ -H "X-API-Key: " \ -H "user-id: …" \ -H "Content-Type: application/json" \ -d '{}' ``` --- # Update queued message (/docs/of-api/messaging/update-queued-message) `PUT https://theonlyapi.com/api/crm/your-crm-id/api2/v2/messages/queue/{queue_id}` Updates a queued/scheduled message identified by its queue id with new message data. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Path parameters - `queue_id` (string, required) — ID of the queued/scheduled message. ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Request body Content type: `application/json` ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X PUT "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/messages/queue/{queue_id}" \ -H "X-API-Key: " \ -H "user-id: …" \ -H "Content-Type: application/json" \ -d '{}' ``` --- # Misc (/docs/of-api/misc) {/* Generated by scripts/gen-api.ts — edit that script, not this file. */} Other OnlyFans endpoints. **OnlyFans only** — Fansly accounts are rejected on this surface. | Method | Endpoint | Path | | -------- | -------------------------------------------------------------------------------------- | ------------------------------------------------------- | | `POST` | [Record address statistics](/docs/of-api/misc/record-address-statistics) | `/api2/v2/address/stat` | | `POST` | [Submit consent form](/docs/of-api/misc/submit-consent-form) | `/api2/v2/consent-form` | | `POST` | [Expand address for country](/docs/of-api/misc/expand-address-for-country) | `/api2/v2/countries/{country_id}/address/expand` | | `GET` | [List states for a country](/docs/of-api/misc/list-states-for-a-country) | `/api2/v2/countries/{country_id}/states` | | `GET` | [Get guest details](/docs/of-api/misc/get-guest-details) | `/api2/v2/guests/{guest_id}` | | `POST` | [Assign a guest](/docs/of-api/misc/assign-a-guest) | `/api2/v2/guests/{guest_id}/assign` | | `GET` | [App initialization data](/docs/of-api/misc/app-initialization-data) | `/api2/v2/init` | | `GET` | [Get client IP address](/docs/of-api/misc/get-client-ip-address) | `/api2/v2/ip` | | `GET` | [List states for country](/docs/of-api/misc/list-states-for-country) | `/api2/v2/iso/countries/{country_id}/states` | | `POST` | [Submit a legal inquiry](/docs/of-api/misc/submit-a-legal-inquiry) | `/api2/v2/legal-inquiry` | | `GET` | [Get legal inquiry](/docs/of-api/misc/get-legal-inquiry) | `/api2/v2/legal-inquiry/{inquiry_id}` | | `POST` | [Submit legal inquiry response](/docs/of-api/misc/submit-legal-inquiry-response) | `/api2/v2/legal-inquiry/{inquiry_id}` | | `GET` | [Get legal inquiry history](/docs/of-api/misc/get-legal-inquiry-history) | `/api2/v2/legal-inquiry/{inquiry_id}/history` | | `GET` | [Get legal inquiry update](/docs/of-api/misc/get-legal-inquiry-update) | `/api2/v2/legal-inquiry/{inquiry_id}/update/{hash}` | | `POST` | [Update a legal inquiry](/docs/of-api/misc/update-a-legal-inquiry) | `/api2/v2/legal-inquiry/{inquiry_id}/update/{hash}` | | `POST` | [Submit legal inquiry by counsel](/docs/of-api/misc/submit-legal-inquiry-by-counsel) | `/api2/v2/legal-inquiry/by-counsel` | | `POST` | [Change legal inquiry status](/docs/of-api/misc/change-legal-inquiry-status) | `/api2/v2/legal-inquiry/change-status/{inquiry_id}` | | `GET` | [Get legal inquiry form params](/docs/of-api/misc/get-legal-inquiry-form-params) | `/api2/v2/legal-inquiry/params` | | `POST` | [Send legal inquiry notification](/docs/of-api/misc/send-legal-inquiry-notification) | `/api2/v2/legal-inquiry/send-notification/{inquiry_id}` | | `POST` | [Submit client-side log entry](/docs/of-api/misc/submit-client-side-log-entry) | `/api2/v2/log` | | `GET` | [Get messages earnings chart](/docs/of-api/misc/get-messages-earnings-chart) | `/api2/v2/messages/queue/chart` | | `POST` | [Submit contact form](/docs/of-api/misc/submit-contact-form) | `/api2/v2/pages/contacts` | | `GET` | [Get payouts chart stats](/docs/of-api/misc/get-payouts-chart-stats) | `/api2/v2/payouts/chart` | | `GET` | [Get VAT payouts chart stats](/docs/of-api/misc/get-vat-payouts-chart-stats) | `/api2/v2/payouts/vat/chart` | | `GET` | [Get posts earnings chart](/docs/of-api/misc/get-posts-earnings-chart) | `/api2/v2/posts/chart` | | `GET` | [Get top posts stats](/docs/of-api/misc/get-top-posts-stats) | `/api2/v2/posts/top` | | `GET` | [Get promotions statistics chart](/docs/of-api/misc/get-promotions-statistics-chart) | `/api2/v2/promotions/chart` | | `POST` | [Upload release form document](/docs/of-api/misc/upload-release-form-document) | `/api2/v2/release-form-documents` | | `POST` | [Start release form link](/docs/of-api/misc/start-release-form-link) | `/api2/v2/release-form-links/{link_id}/start` | | `POST` | [Generate release form link URL](/docs/of-api/misc/generate-release-form-link-url) | `/api2/v2/release-form-links/{link_id}/url` | | `POST` | [Submit release form proof](/docs/of-api/misc/submit-release-form-proof) | `/api2/v2/release-form-proof` | | `GET` | [Get partner release forms](/docs/of-api/misc/get-partner-release-forms) | `/api2/v2/release-forms/partner/{partner_id}` | | `PATCH` | [Rename a release form](/docs/of-api/misc/rename-a-release-form) | `/api2/v2/release-forms/rename` | | `PATCH` | [Toggle release form visibility](/docs/of-api/misc/toggle-release-form-visibility) | `/api2/v2/release-forms/toggle-show` | | `GET` | [List content report reasons](/docs/of-api/misc/list-content-report-reasons) | `/api2/v2/reports/reasons` | | `GET` | [Get report reason detail options](/docs/of-api/misc/get-report-reason-detail-options) | `/api2/v2/reports/reasons/{reason_id}/details-options` | | `DELETE` | [Delete Shopify store](/docs/of-api/misc/delete-shopify-store) | `/api2/v2/shopify/stores/{store_id}` | | `GET` | [Get stories statistics chart](/docs/of-api/misc/get-stories-statistics-chart) | `/api2/v2/stories/chart` | | `GET` | [Get top stories stats](/docs/of-api/misc/get-top-stories-stats) | `/api2/v2/stories/top` | | `GET` | [Get streaks over date range](/docs/of-api/misc/get-streaks-over-date-range) | `/api2/v2/streaks` | | `GET` | [Get top streaks](/docs/of-api/misc/get-top-streaks) | `/api2/v2/streaks/top` | | `GET` | [Get streams stats chart](/docs/of-api/misc/get-streams-stats-chart) | `/api2/v2/streams/chart` | | `GET` | [Get top streams stats](/docs/of-api/misc/get-top-streams-stats) | `/api2/v2/streams/top` | | `GET` | [Get subscribers statistics chart](/docs/of-api/misc/get-subscribers-statistics-chart) | `/api2/v2/subscriptions/subscribers/chart` | | `GET` | [Get latest subscribers](/docs/of-api/misc/get-latest-subscribers) | `/api2/v2/subscriptions/subscribers/latest` | | `GET` | [Get top subscribers stats](/docs/of-api/misc/get-top-subscribers-stats) | `/api2/v2/subscriptions/subscribers/top` | | `PUT` | [Update a localization text](/docs/of-api/misc/update-a-localization-text) | `/api2/v2/texts/{code}` | | `POST` | [Search localization texts](/docs/of-api/misc/search-localization-texts) | `/api2/v2/texts/search` | | `GET` | [Get trials chart stats](/docs/of-api/misc/get-trials-chart-stats) | `/api2/v2/trials/chart` | | `GET` | [Get trial link statistics](/docs/of-api/misc/get-trial-link-statistics) | `/api2/v2/trials/stats` | | `POST` | [Report user click statistics](/docs/of-api/misc/report-user-click-statistics) | `/api2/v2/users/clicks-stats` | | `POST` | [Submit license form](/docs/of-api/misc/submit-license-form) | `/api2/v2/users/license_form` | | `GET` | [List referrals](/docs/of-api/misc/list-referrals) | `/api2/v2/users/me/referrals` | | `GET` | [Get messages statistics by type](/docs/of-api/misc/get-messages-statistics-by-type) | `/api2/v2/users/me/stats/messages/{type}` | | `GET` | [Get top fans stats](/docs/of-api/misc/get-top-fans-stats) | `/api2/v2/users/me/stats/top/fan` | | `GET` | [Get top messages stats](/docs/of-api/misc/get-top-messages-stats) | `/api2/v2/users/me/stats/top/message` | | `GET` | [Get top posts statistics](/docs/of-api/misc/get-top-posts-statistics) | `/api2/v2/users/me/stats/top/post` | | `GET` | [Get top stories stats](/docs/of-api/misc/get-top-stories-stats-get) | `/api2/v2/users/me/stats/top/story` | | `GET` | [Get top streams stats](/docs/of-api/misc/get-top-streams-stats-get) | `/api2/v2/users/me/stats/top/stream` | | `POST` | [Confirm terms acceptance](/docs/of-api/misc/confirm-terms-acceptance) | `/api2/v2/users/terms/confirm` | | `POST` | [Create a support ticket](/docs/of-api/misc/create-a-support-ticket) | `/api2/v2/users/tickets` | | `GET` | [Get support ticket](/docs/of-api/misc/get-support-ticket) | `/api2/v2/users/tickets/{ticket_id}` | | `PUT` | [Mark support ticket as read](/docs/of-api/misc/mark-support-ticket-as-read) | `/api2/v2/users/tickets/{ticket_id}/read` | | `PUT` | [Reopen a support ticket](/docs/of-api/misc/reopen-a-support-ticket) | `/api2/v2/users/tickets/{ticket_id}/reopen` | | `POST` | [Reply to support ticket](/docs/of-api/misc/reply-to-support-ticket) | `/api2/v2/users/tickets/{ticket_id}/reply` | | `POST` | [Mark support ticket solved](/docs/of-api/misc/mark-support-ticket-solved) | `/api2/v2/users/tickets/{ticket_id}/solve` | | `POST` | [Check support ticket allowed](/docs/of-api/misc/check-support-ticket-allowed) | `/api2/v2/users/tickets/allowed` | | `GET` | [Get support ticket subjects](/docs/of-api/misc/get-support-ticket-subjects) | `/api2/v2/users/tickets/form_subjects` | | `GET` | [Get state for a ZIP code](/docs/of-api/misc/get-state-for-a-zip-code) | `/api2/v2/zip/{zip_code}/state` | --- # App initialization data (/docs/of-api/misc/app-initialization-data) `GET https://theonlyapi.com/api/crm/your-crm-id/api2/v2/init` Returns comprehensive initialization data including authenticated user profile, feature flags, chat counts, and app configuration. **OnlyFans only.** Requests made with a `user-id` belonging to a Fansly account are rejected — use the platform-neutral CRM data routes (`/notifications`, `/balances`, `/chats`, `/purchases`, `/subscribers/cached`, ...) which are Fansly-aware. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — Init payload - `user` (object) — Full OnlyFans user profile object. - `id` (integer) - `name` (string) - `username` (string) - `displayName` (string) - `about` (string) - `avatar` (string) — Avatar URL. - `avatarThumbs` (object) - `c50` (string) - `c144` (string) - `header` (string) — Profile header/banner URL. - `email` (string) - `isVerified` (boolean) - `isPerformer` (boolean) - `canEarn` (boolean) - `tipsEnabled` (boolean) - `subscribedBy` (boolean) — Whether you are subscribed to this user. - `subscribersCount` (integer) - `subscribesCount` (integer) - `postsCount` (integer) - `photosCount` (integer) - `videosCount` (integer) - `audiosCount` (integer) - `friendsCount` (integer) - `joinDate` (string) - `firstPublishedPostDate` (string) - `subscribePrice` (number) - `chatMessagesCount` (integer) — Unread chat messages. - `countPriorityChat` (integer) - `countPinnedChat` (integer) - `hasPurchasedPosts` (boolean) - `paidFeed` (boolean) - `openseaInfo` (object) - `chatMessagesCount` (integer) - `countPriorityChat` (integer) - `countPinnedChat` (integer) - `hasPurchasedPosts` (boolean) - `paidFeed` (boolean) ## Example ```bash curl -X GET "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/init" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Assign a guest (/docs/of-api/misc/assign-a-guest) `POST https://theonlyapi.com/api/crm/your-crm-id/api2/v2/guests/{guest_id}/assign` Assigns a guest (co-performer/guest record) identified by guest_id. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Path parameters - `guest_id` (string, required) — Id of the guest to assign. ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X POST "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/guests/{guest_id}/assign" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Change legal inquiry status (/docs/of-api/misc/change-legal-inquiry-status) `POST https://theonlyapi.com/api/crm/your-crm-id/api2/v2/legal-inquiry/change-status/{inquiry_id}` Changes the status of a legal inquiry. Part of the legal-inquiry (static-law) module. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Path parameters - `inquiry_id` (string, required) — ID of the legal inquiry. ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Request body Content type: `application/json` ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X POST "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/legal-inquiry/change-status/{inquiry_id}" \ -H "X-API-Key: " \ -H "user-id: …" \ -H "Content-Type: application/json" \ -d '{}' ``` --- # Check support ticket allowed (/docs/of-api/misc/check-support-ticket-allowed) `POST https://theonlyapi.com/api/crm/your-crm-id/api2/v2/users/tickets/allowed` Checks whether the user is allowed to create a support ticket (part of the users/tickets support module). **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Request body Content type: `application/json` ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X POST "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/users/tickets/allowed" \ -H "X-API-Key: " \ -H "user-id: …" \ -H "Content-Type: application/json" \ -d '{}' ``` --- # Confirm terms acceptance (/docs/of-api/misc/confirm-terms-acceptance) `POST https://theonlyapi.com/api/crm/your-crm-id/api2/v2/users/terms/confirm` Confirms the user's acceptance of updated terms. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X POST "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/users/terms/confirm" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Create a support ticket (/docs/of-api/misc/create-a-support-ticket) `POST https://theonlyapi.com/api/crm/your-crm-id/api2/v2/users/tickets` Creates a new support ticket for the current user. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Request body Content type: `application/json` ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X POST "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/users/tickets" \ -H "X-API-Key: " \ -H "user-id: …" \ -H "Content-Type: application/json" \ -d '{}' ``` --- # Delete Shopify store (/docs/of-api/misc/delete-shopify-store) `DELETE https://theonlyapi.com/api/crm/your-crm-id/api2/v2/shopify/stores/{store_id}` Disconnects/removes a linked Shopify store by ID. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Path parameters - `store_id` (string, required) — ID of the linked Shopify store. ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X DELETE "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/shopify/stores/{store_id}" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Expand address for country (/docs/of-api/misc/expand-address-for-country) `POST https://theonlyapi.com/api/crm/your-crm-id/api2/v2/countries/{country_id}/address/expand` Expands/resolves a partial address (by its hash) for a given country, optionally in Latin transliteration. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Path parameters - `country_id` (string, required) — ID of the country for address expansion. ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Request body Content type: `application/json` - `hash` (string) — Address identifier/hash to expand (addressId). - `isLatin` (boolean) — Whether to return Latin-script address. ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X POST "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/countries/{country_id}/address/expand" \ -H "X-API-Key: " \ -H "user-id: …" \ -H "Content-Type: application/json" \ -d '{}' ``` --- # Generate release form link URL (/docs/of-api/misc/generate-release-form-link-url) `POST https://theonlyapi.com/api/crm/your-crm-id/api2/v2/release-form-links/{link_id}/url` Generates/returns a shareable URL for a release form link identified by link_id. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Path parameters - `link_id` (string, required) — Id of the release form link. ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X POST "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/release-form-links/{link_id}/url" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Get client IP address (/docs/of-api/misc/get-client-ip-address) `GET https://theonlyapi.com/api/crm/your-crm-id/api2/v2/ip` Returns the caller's IP address as seen by the API. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. ✓ **Verified live** against a real OnlyFans account (2026-07-30); the `data` schema below is the real response shape. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — OnlyFans response — verified live; `data` is the real shape. - `success` (boolean) - `status_code` (integer) - `data` (object) - `ip` (string) - `geo` (object) - `connectionType` (string) - `userType` (string) - `subdivisionConfidence` (string) - `postalConfidence` (string) - `isp` (string) - `domain` (string) - `countryConfidence` (string) - `cityConfidence` (string) - `legitimateProxy` (string) - `regionName` (string) - `region` (string) - `regionGeonameid` (string) - `registeredCountryInEu` (string) - `registeredCountryName` (string) - `registeredCountryIso` (string) - `registeredCountryGeonameid` (string) - `postalCode` (string) - `locationTimezone` (string) - `locationMetrocode` (string) - `longitude` (string) - `latitude` (string) - `locationAccuracyRadius` (string) - `countryInEu` (string) - `countryName` (string) - `countryCode` (string) - `countryGeonameid` (string) - `continentName` (string) - `continentGeonameid` (string) - `continentCode` (string) - `cityGeonameid` (string) - `city` (string) - `cityBuildDate` (string) - `isEurope` (boolean) ## Example ```bash curl -X GET "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/ip" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Get guest details (/docs/of-api/misc/get-guest-details) `GET https://theonlyapi.com/api/crm/your-crm-id/api2/v2/guests/{guest_id}` Retrieves a guest record by id. Guests appear alongside release-form and guest-assign endpoints (people tagged in content). **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Path parameters - `guest_id` (string, required) — ID of the guest. ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X GET "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/guests/{guest_id}" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Get latest subscribers (/docs/of-api/misc/get-latest-subscribers) `GET https://theonlyapi.com/api/crm/your-crm-id/api2/v2/subscriptions/subscribers/latest` Returns the latest subscribers within a date range, grouped by the given field. The dynamic path segment is actually the querystring. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. ✓ **Verified live** against a real OnlyFans account (2026-07-30); the `data` schema below is the real response shape. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Query parameters - `startDate` (string, required) — Start of the date range. - `endDate` (string, required) — End of the date range. - `by` (string) — Grouping/aggregation field. - `offset` (string) — Pagination offset. ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — OnlyFans response — verified live; `data` is the real shape. - `success` (boolean) - `status_code` (integer) - `data` (object) - `users` (object[]) - `view` (string) - `avatar` (null) - `avatarThumbs` (null) - `header` (null) - `headerSize` (null) - `headerThumbs` (null) - `id` (integer) - `name` (string) - `username` (string) - `canLookStory` (boolean) - `canCommentStory` (boolean) - `hasNotViewedStory` (boolean) - `isVerified` (boolean) - `canPayInternal` (boolean) - `hasScheduledStream` (boolean) - `hasStream` (boolean) - `hasStories` (boolean) - `tipsEnabled` (boolean) - `tipsTextEnabled` (boolean) - `tipsMin` (integer) - `tipsMinInternal` (integer) - `tipsMax` (integer) - `canEarn` (boolean) - `canAddSubscriber` (boolean) - `subscribePrice` (integer) - `displayName` (string) - `notice` (string) - `isActive` (boolean) - `isRestricted` (boolean) - `canRestrict` (boolean) - `subscribedBy` (boolean) - `subscribedByExpire` (boolean) - `subscribedByExpireDate` (string) - `subscribedByAutoprolong` (boolean) - `subscribedIsExpiredNow` (boolean) - `currentSubscribePrice` (integer) - `subscribedOn` (boolean) - `subscribedOnExpire` (boolean) - `subscribedOnExpiredNow` (boolean) - `subscribedOnDuration` (string) - `listsStates` (any[]) - `canReport` (boolean) - `canReceiveChatMessage` (boolean) - `hideChat` (boolean) - `lastSeen` (string) - `isPerformer` (boolean) - `isRealPerformer` (boolean) - `subscribedByData` (object) - `subscribedOnData` (object) - `canTrialSend` (boolean) - `isBlocked` (boolean) - `canUnsubscribe` (boolean) - `isPendingAutoprolong` (boolean) - `offset` (integer) - `hasMore` (boolean) ## Example ```bash curl -X GET "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/subscriptions/subscribers/latest" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Get legal inquiry (/docs/of-api/misc/get-legal-inquiry) `GET https://theonlyapi.com/api/crm/your-crm-id/api2/v2/legal-inquiry/{inquiry_id}` Retrieves a legal inquiry (e.g. legal/DMCA request) by ID. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Path parameters - `inquiry_id` (string, required) — ID of the legal inquiry. ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X GET "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/legal-inquiry/{inquiry_id}" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Get legal inquiry form params (/docs/of-api/misc/get-legal-inquiry-form-params) `GET https://theonlyapi.com/api/crm/your-crm-id/api2/v2/legal-inquiry/params` Returns the parameter/option definitions used to build the legal inquiry form. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. ✓ **Verified live** against a real OnlyFans account (2026-07-30); the `data` schema below is the real response shape. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — OnlyFans response — verified live; `data` is the real shape. - `success` (boolean) - `status_code` (integer) - `data` (object) - `newReportsCount` (integer) - `fileAllowedExtensions` (string[]) - `legalInquiry` (object) - `matterTypes` (object[]) - `additional` (object) - `category` (object[]) - `subject` (object[]) - `gdprOptions` (object) - `groups` (object) - `reports` (object) - `highPrioritySubjects` (string[]) - `success` (boolean) ## Example ```bash curl -X GET "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/legal-inquiry/params" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Get legal inquiry history (/docs/of-api/misc/get-legal-inquiry-history) `GET https://theonlyapi.com/api/crm/your-crm-id/api2/v2/legal-inquiry/{inquiry_id}/history` Returns the history/audit trail for a legal inquiry by id (from the legal/law module). **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Path parameters - `inquiry_id` (string, required) — ID of the legal inquiry. ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X GET "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/legal-inquiry/{inquiry_id}/history" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Get legal inquiry update (/docs/of-api/misc/get-legal-inquiry-update) `GET https://theonlyapi.com/api/crm/your-crm-id/api2/v2/legal-inquiry/{inquiry_id}/update/{hash}` Retrieves a specific update of a legal inquiry identified by inquiry_id, addressed by an update hash. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Path parameters - `inquiry_id` (string, required) — ID of the legal inquiry. - `hash` (string, required) — Hash identifying the specific inquiry update. ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X GET "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/legal-inquiry/{inquiry_id}/update/{hash}" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Get messages earnings chart (/docs/of-api/misc/get-messages-earnings-chart) `GET https://theonlyapi.com/api/crm/your-crm-id/api2/v2/messages/queue/chart` Returns time-series earnings/statistics for queued messages. The dynamic path segment is a built querystring. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. ✓ **Verified live** against a real OnlyFans account (2026-07-30); the `data` schema below is the real response shape. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Query parameters - `startDate` (string, required) — Start of the date range. - `endDate` (string, required) — End of the date range. - `withTotal` (string) — Include totals in the response. - `filter` (string) — Metric filter (built from 'by' and 'by2' arguments). ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — OnlyFans response — verified live; `data` is the real shape. - `success` (boolean) - `status_code` (integer) - `data` (object) - `purchases` (object) - `chart` (object[]) - `messages` (object) - `chart` (object[]) ## Example ```bash curl -X GET "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/messages/queue/chart" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Get messages statistics by type (/docs/of-api/misc/get-messages-statistics-by-type) `GET https://theonlyapi.com/api/crm/your-crm-id/api2/v2/users/me/stats/messages/{type}` Returns the current user's messaging statistics for a given type (default 'all') over a date range, paginated and searchable. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Path parameters - `type` (string, required) — Message stats type/segment (default 'all'). ## Query parameters - `startDate` (string) — Start of the date range. - `endDate` (string) — End of the date range. - `limit` (string) — Max number of rows. - `query` (string) — Search term. - `offset` (string) — Pagination offset. ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X GET "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/users/me/stats/messages/{type}" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Get partner release forms (/docs/of-api/misc/get-partner-release-forms) `GET https://theonlyapi.com/api/crm/your-crm-id/api2/v2/release-forms/partner/{partner_id}` Retrieves release forms associated with a partner identified by partner id. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Path parameters - `partner_id` (string, required) — ID of the partner whose release forms are fetched. ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X GET "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/release-forms/partner/{partner_id}" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Get payouts chart stats (/docs/of-api/misc/get-payouts-chart-stats) `GET https://theonlyapi.com/api/crm/your-crm-id/api2/v2/payouts/chart` Returns payouts chart statistics (amount/count) over a date range. The dynamic path segment is the serialized querystring. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. ✓ **Verified live** against a real OnlyFans account (2026-07-30); the `data` schema below is the real response shape. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Query parameters - `startDate` (string, required) — Range start date. - `endDate` (string, required) — Range end date. - `withTotal` (string) — Include totals (set true). - `withChart` (string) — Include chart series (set true). - `filter` (string) — Chart amount/count filter. ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — OnlyFans response — verified live; `data` is the real shape. - `success` (boolean) - `status_code` (integer) - `data` (any[]) ## Example ```bash curl -X GET "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/payouts/chart" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Get posts earnings chart (/docs/of-api/misc/get-posts-earnings-chart) `GET https://theonlyapi.com/api/crm/your-crm-id/api2/v2/posts/chart` Returns time-series earnings/statistics for posts. The dynamic path segment is a built querystring, not an id. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. ✓ **Verified live** against a real OnlyFans account (2026-07-30); the `data` schema below is the real response shape. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Query parameters - `startDate` (string, required) — Start of the date range. - `endDate` (string, required) — End of the date range. - `withTotal` (string) — Include totals in the response. - `filter` (string) — Metric filter (built from the 'by' argument plus posts). ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — OnlyFans response — verified live; `data` is the real shape. - `success` (boolean) - `status_code` (integer) - `data` (object) - `posts` (object) - `chart` (object[]) - `purchases` (object) - `chart` (object[]) ## Example ```bash curl -X GET "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/posts/chart" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Get promotions statistics chart (/docs/of-api/misc/get-promotions-statistics-chart) `GET https://theonlyapi.com/api/crm/your-crm-id/api2/v2/promotions/chart` Returns chart/statistics data for promotions over a date range. Path segment is static; the trailing token is a serialized query string. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. ✓ **Verified live** against a real OnlyFans account (2026-07-30); the `data` schema below is the real response shape. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Query parameters - `startDate` (string) — Start of the date range. - `endDate` (string) — End of the date range. - `stats` (string) — Stats flag (set to 1). ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — OnlyFans response — verified live; `data` is the real shape. - `success` (boolean) - `status_code` (integer) - `data` (object) - `claims` (object) - `chart` (object[]) - `total` (integer) - `offers` (object) - `chart` (object[]) - `total` (integer) ## Example ```bash curl -X GET "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/promotions/chart" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Get report reason detail options (/docs/of-api/misc/get-report-reason-detail-options) `GET https://theonlyapi.com/api/crm/your-crm-id/api2/v2/reports/reasons/{reason_id}/details-options` Retrieves the detail options available for a specific report reason. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Path parameters - `reason_id` (string, required) — ID of the report reason. ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X GET "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/reports/reasons/{reason_id}/details-options" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Get state for a ZIP code (/docs/of-api/misc/get-state-for-a-zip-code) `GET https://theonlyapi.com/api/crm/your-crm-id/api2/v2/zip/{zip_code}/state` Looks up the state/region associated with a given ZIP code, used by payouts address forms. Defined in the payouts/address module. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Path parameters - `zip_code` (string, required) — ZIP/postal code to resolve to a state. ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X GET "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/zip/{zip_code}/state" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Get stories statistics chart (/docs/of-api/misc/get-stories-statistics-chart) `GET https://theonlyapi.com/api/crm/your-crm-id/api2/v2/stories/chart` Returns time-series chart data for stories earnings/activity over a date range. The `{id}` in path_raw is actually the querystring appended by the Zq helper. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. ✓ **Verified live** against a real OnlyFans account (2026-07-30); the `data` schema below is the real response shape. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Query parameters - `startDate` (string, required) — Range start date. - `endDate` (string, required) — Range end date. - `withTotal` (string) — Whether to include totals. - `by` (string) — Grouping/breakdown key. - `filter` (string) — Filter object (e.g. {stories:'stories'}). ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — OnlyFans response — verified live; `data` is the real shape. - `success` (boolean) - `status_code` (integer) - `data` (object) - `tips` (object) - `chart` (object[]) - `stories` (object) - `chart` (object[]) ## Example ```bash curl -X GET "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/stories/chart" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Get streaks over date range (/docs/of-api/misc/get-streaks-over-date-range) `GET https://theonlyapi.com/api/crm/your-crm-id/api2/v2/streaks` Retrieves subscriber/engagement streak statistics over a date range. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. ✓ **Verified live** against a real OnlyFans account (2026-07-30); the `data` schema below is the real response shape. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Query parameters - `startDate` (string) — Start of date range. - `endDate` (string) — End of date range. ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — OnlyFans response — verified live; `data` is the real shape. - `success` (boolean) - `status_code` (integer) - `data` (object) - `list` (object[]) - `id` (integer) - `startDate` (string) - `endDate` (string) - `isActive` (boolean) - `postsCount` (integer) - `daysCount` (integer) - `streamsDuration` (integer) - `storiesCount` (integer) - `chatsCount` (integer) - `frozenDays` (any[]) - `hasMore` (boolean) ## Example ```bash curl -X GET "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/streaks" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Get streams stats chart (/docs/of-api/misc/get-streams-stats-chart) `GET https://theonlyapi.com/api/crm/your-crm-id/api2/v2/streams/chart` Returns time-series chart data for live-stream statistics over a date range. The dynamic path segment is actually the querystring. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. ✓ **Verified live** against a real OnlyFans account (2026-07-30); the `data` schema below is the real response shape. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Query parameters - `startDate` (string, required) — Start of the date range. - `endDate` (string, required) — End of the date range. - `withTotal` (string) — Whether to include totals. - `filter` (string) — Filter object (keyed by the 'by' field, plus duration). ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — OnlyFans response — verified live; `data` is the real shape. - `success` (boolean) - `status_code` (integer) - `data` (object) - `duration` (object) - `chart` (object[]) - `purchases` (object) - `chart` (object[]) ## Example ```bash curl -X GET "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/streams/chart" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Get subscribers statistics chart (/docs/of-api/misc/get-subscribers-statistics-chart) `GET https://theonlyapi.com/api/crm/your-crm-id/api2/v2/subscriptions/subscribers/chart` Returns chart/statistics data for subscribers over a date range, groupable via 'by'. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. ✓ **Verified live** against a real OnlyFans account (2026-07-30); the `data` schema below is the real response shape. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Query parameters - `startDate` (string) — Start of the date range. - `endDate` (string) — End of the date range. - `by` (string) — Grouping/breakdown dimension. ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — OnlyFans response — verified live; `data` is the real shape. - `success` (boolean) - `status_code` (integer) - `data` (object) - `earnings` (object[]) - `date` (string) - `count` (integer) - `subscribes` (object[]) - `date` (string) - `count` (integer) - `total` (integer) - `subscribers` (integer) ## Example ```bash curl -X GET "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/subscriptions/subscribers/chart" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Get support ticket (/docs/of-api/misc/get-support-ticket) `GET https://theonlyapi.com/api/crm/your-crm-id/api2/v2/users/tickets/{ticket_id}` Retrieves a support ticket by id. Grouped with ticket reply/comments/solve/reopen endpoints. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Path parameters - `ticket_id` (string, required) — ID of the support ticket. ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X GET "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/users/tickets/{ticket_id}" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Get support ticket subjects (/docs/of-api/misc/get-support-ticket-subjects) `GET https://theonlyapi.com/api/crm/your-crm-id/api2/v2/users/tickets/form_subjects` Returns the selectable subject options for the support-ticket creation form. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. ✓ **Verified live** against a real OnlyFans account (2026-07-30); the `data` schema below is the real response shape. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — OnlyFans response — verified live; `data` is the real shape. - `success` (boolean) - `status_code` (integer) - `data` (object) - `items` (object[]) - `id` (integer) - `title` (string) - `items` (any[]) ## Example ```bash curl -X GET "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/users/tickets/form_subjects" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Get top fans stats (/docs/of-api/misc/get-top-fans-stats) `GET https://theonlyapi.com/api/crm/your-crm-id/api2/v2/users/me/stats/top/fan` Returns the current user's top-fan statistics over a date range. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. ✓ **Verified live** against a real OnlyFans account (2026-07-30); the `data` schema below is the real response shape. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Query parameters - `startDate` (string, required) — Range start date. - `endDate` (string, required) — Range end date. ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — OnlyFans response — verified live; `data` is the real shape. - `success` (boolean) - `status_code` (integer) - `data` (object) - `total` (object) - `view` (string) - `avatar` (null) - `avatarThumbs` (null) - `header` (null) - `headerSize` (null) - `headerThumbs` (null) - `id` (integer) - `name` (string) - `username` (string) - `canLookStory` (boolean) - `canCommentStory` (boolean) - `hasNotViewedStory` (boolean) - `isVerified` (boolean) - `canPayInternal` (boolean) - `hasScheduledStream` (boolean) - `hasStream` (boolean) - `hasStories` (boolean) - `tipsEnabled` (boolean) - `tipsTextEnabled` (boolean) - `tipsMin` (integer) - `tipsMinInternal` (integer) - `tipsMax` (integer) - `canEarn` (boolean) - `canAddSubscriber` (boolean) - `subscribePrice` (integer) - `displayName` (string) - `notice` (string) - `isActive` (boolean) - `isRestricted` (boolean) - `canRestrict` (boolean) - `subscribedBy` (boolean) - `subscribedByExpire` (boolean) - `subscribedByExpireDate` (string) - `subscribedByAutoprolong` (boolean) - `subscribedIsExpiredNow` (boolean) - `currentSubscribePrice` (integer) - `subscribedOn` (null) - `subscribedOnExpire` (boolean) - `subscribedOnExpiredNow` (boolean) - `subscribedOnDuration` (string) - `listsStates` (object[]) - `canReport` (boolean) - `canReceiveChatMessage` (boolean) - `hideChat` (boolean) - `lastSeen` (string) - `isPerformer` (boolean) - `isRealPerformer` (boolean) - `subscribedByData` (object) - `subscribedOnData` (object) - `canTrialSend` (boolean) - `isBlocked` (boolean) - `canUnsubscribe` (boolean) - `isPendingAutoprolong` (boolean) - `subscriptions` (object) - `view` (string) - `avatar` (null) - `avatarThumbs` (null) - `header` (null) - `headerSize` (null) - `headerThumbs` (null) - `id` (integer) - `name` (string) - `username` (string) - `canLookStory` (boolean) - `canCommentStory` (boolean) - `hasNotViewedStory` (boolean) - `isVerified` (boolean) - `canPayInternal` (boolean) - `hasScheduledStream` (boolean) - `hasStream` (boolean) - `hasStories` (boolean) - `tipsEnabled` (boolean) - `tipsTextEnabled` (boolean) - `tipsMin` (integer) - `tipsMinInternal` (integer) - `tipsMax` (integer) - `canEarn` (boolean) - `canAddSubscriber` (boolean) - `subscribePrice` (integer) - `displayName` (string) - `notice` (string) - `isActive` (boolean) - `isRestricted` (boolean) - `canRestrict` (boolean) - `subscribedBy` (boolean) - `subscribedByExpire` (boolean) - `subscribedByExpireDate` (string) - `subscribedByAutoprolong` (boolean) - `subscribedIsExpiredNow` (boolean) - `currentSubscribePrice` (integer) - `subscribedOn` (null) - `subscribedOnExpire` (boolean) - `subscribedOnExpiredNow` (boolean) - `subscribedOnDuration` (string) - `listsStates` (object[]) - `canReport` (boolean) - `canReceiveChatMessage` (boolean) - `hideChat` (boolean) - `lastSeen` (string) - `isPerformer` (boolean) - `isRealPerformer` (boolean) - `subscribedByData` (object) - `subscribedOnData` (object) - `canTrialSend` (boolean) - `isBlocked` (boolean) - `canUnsubscribe` (boolean) - `isPendingAutoprolong` (boolean) - `tips` (object) - `view` (string) - `avatar` (null) - `avatarThumbs` (null) - `header` (null) - `headerSize` (null) - `headerThumbs` (null) - `id` (integer) - `name` (string) - `username` (string) - `canLookStory` (boolean) - `canCommentStory` (boolean) - `hasNotViewedStory` (boolean) - `isVerified` (boolean) - `canPayInternal` (boolean) - `hasScheduledStream` (boolean) - `hasStream` (boolean) - `hasStories` (boolean) - `tipsEnabled` (boolean) - `tipsTextEnabled` (boolean) - `tipsMin` (integer) - `tipsMinInternal` (integer) - `tipsMax` (integer) - `canEarn` (boolean) - `canAddSubscriber` (boolean) - `subscribePrice` (integer) - `displayName` (string) - `notice` (string) - `isActive` (boolean) - `isRestricted` (boolean) - `canRestrict` (boolean) - `subscribedBy` (boolean) - `subscribedByExpire` (boolean) - `subscribedByExpireDate` (string) - `subscribedByAutoprolong` (boolean) - `subscribedIsExpiredNow` (boolean) - `currentSubscribePrice` (integer) - `subscribedOn` (boolean) - `subscribedOnExpire` (boolean) - `subscribedOnExpiredNow` (boolean) - `subscribedOnDuration` (string) - `listsStates` (object[]) - `canReport` (boolean) - `canReceiveChatMessage` (boolean) - `hideChat` (boolean) - `lastSeen` (string) - `isPerformer` (boolean) - `isRealPerformer` (boolean) - `subscribedByData` (object) - `subscribedOnData` (object) - `canTrialSend` (boolean) - `isBlocked` (boolean) - `canUnsubscribe` (boolean) - `isPendingAutoprolong` (boolean) - `messages` (object) - `view` (string) - `avatar` (null) - `avatarThumbs` (null) - `header` (null) - `headerSize` (null) - `headerThumbs` (null) - `id` (integer) - `name` (string) - `username` (string) - `canLookStory` (boolean) - `canCommentStory` (boolean) - `hasNotViewedStory` (boolean) - `isVerified` (boolean) - `canPayInternal` (boolean) - `hasScheduledStream` (boolean) - `hasStream` (boolean) - `hasStories` (boolean) - `tipsEnabled` (boolean) - `tipsTextEnabled` (boolean) - `tipsMin` (integer) - `tipsMinInternal` (integer) - `tipsMax` (integer) - `canEarn` (boolean) - `canAddSubscriber` (boolean) - `subscribePrice` (integer) - `displayName` (string) - `notice` (string) - `isActive` (boolean) - `isRestricted` (boolean) - `canRestrict` (boolean) - `subscribedBy` (boolean) - `subscribedByExpire` (boolean) - `subscribedByExpireDate` (string) - `subscribedByAutoprolong` (boolean) - `subscribedIsExpiredNow` (boolean) - `currentSubscribePrice` (integer) - `subscribedOn` (null) - `subscribedOnExpire` (boolean) - `subscribedOnExpiredNow` (boolean) - `subscribedOnDuration` (string) - `listsStates` (object[]) - `canReport` (boolean) - `canReceiveChatMessage` (boolean) - `hideChat` (boolean) - `lastSeen` (string) - `isPerformer` (boolean) - `isRealPerformer` (boolean) - `subscribedByData` (object) - `subscribedOnData` (object) - `canTrialSend` (boolean) - `isBlocked` (boolean) - `canUnsubscribe` (boolean) - `isPendingAutoprolong` (boolean) - `streams` (null) ## Example ```bash curl -X GET "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/users/me/stats/top/fan" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Get top messages stats (/docs/of-api/misc/get-top-messages-stats) `GET https://theonlyapi.com/api/crm/your-crm-id/api2/v2/users/me/stats/top/message` Returns statistics on the current user's top-performing messages over a date range. The `{id}` in path_raw is the appended querystring. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. ✓ **Verified live** against a real OnlyFans account (2026-07-30); the `data` schema below is the real response shape. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Query parameters - `startDate` (string, required) — Range start date. - `endDate` (string, required) — Range end date. ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — OnlyFans response — verified live; `data` is the real shape. - `success` (boolean) - `status_code` (integer) - `data` (object) - `purchases` (object) - `id` (integer) - `date` (string) - `responseType` (string) - `text` (string) - `rawText` (string) - `giphyId` (null) - `isFree` (boolean) - `isMediaReady` (boolean) - `mediaCount` (integer) - `media` (object[]) - `previews` (any[]) - `isTip` (boolean) - `isReportedByMe` (boolean) - `viewedCount` (integer) - `sentCount` (integer) - `isCanceled` (boolean) - `template` (string) - `canUnsend` (boolean) - `unsendSeconds` (integer) - `price` (string) - `purchasedCount` (integer) - `canSendMessageToBuyers` (boolean) ## Example ```bash curl -X GET "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/users/me/stats/top/message" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Get top posts statistics (/docs/of-api/misc/get-top-posts-statistics) `GET https://theonlyapi.com/api/crm/your-crm-id/api2/v2/users/me/stats/top/post` Returns the current user's top-performing posts statistics for a date range. Sibling calls fetch top story/stream/stream stats. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. ✓ **Verified live** against a real OnlyFans account (2026-07-30); the `data` schema below is the real response shape. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Query parameters - `startDate` (string) — Start of the date range. - `endDate` (string) — End of the date range. - `skip_users` (string) — Whether to omit expanded user objects (set to 'all'). ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — OnlyFans response — verified live; `data` is the real shape. - `success` (boolean) - `status_code` (integer) - `data` (object) - `purchases` (null) - `tips` (object) - `author` (object) - `responseType` (string) - `id` (integer) - `postedAt` (string) - `postedAtPrecise` (string) - `text` (string) - `isMarkdownDisabled` (boolean) - `canDelete` (boolean) - `canComment` (boolean) - `canEdit` (boolean) - `favoritesCount` (integer) - `mediaCount` (integer) - `isMediaReady` (boolean) - `isOpened` (boolean) - `canToggleFavorite` (boolean) - `stats` (object) - `commentsCount` (integer) - `tipsAmount` (string) - `rawText` (string) - `tweetSend` (boolean) - `media` (object[]) - `canViewMedia` (boolean) - `labelStates` (object[]) - `views` (object) - `author` (object) - `responseType` (string) - `id` (integer) - `postedAt` (string) - `postedAtPrecise` (string) - `text` (string) - `isMarkdownDisabled` (boolean) - `canDelete` (boolean) - `canComment` (boolean) - `canEdit` (boolean) - `isPinned` (boolean) - `favoritesCount` (integer) - `mediaCount` (integer) - `isMediaReady` (boolean) - `isOpened` (boolean) - `canToggleFavorite` (boolean) - `stats` (object) - `commentsCount` (integer) - `tipsAmount` (string) - `rawText` (string) - `tweetSend` (boolean) - `media` (object[]) - `canViewMedia` (boolean) - `labelStates` (object[]) - `likes` (object) - `author` (object) - `responseType` (string) - `id` (integer) - `postedAt` (string) - `postedAtPrecise` (string) - `text` (string) - `isMarkdownDisabled` (boolean) - `canDelete` (boolean) - `canComment` (boolean) - `canEdit` (boolean) - `isPinned` (boolean) - `favoritesCount` (integer) - `mediaCount` (integer) - `isMediaReady` (boolean) - `isOpened` (boolean) - `canToggleFavorite` (boolean) - `stats` (object) - `commentsCount` (integer) - `tipsAmount` (string) - `rawText` (string) - `tweetSend` (boolean) - `media` (object[]) - `canViewMedia` (boolean) - `labelStates` (object[]) - `comments` (object) - `author` (object) - `responseType` (string) - `id` (integer) - `postedAt` (string) - `postedAtPrecise` (string) - `isMarkdownDisabled` (boolean) - `canDelete` (boolean) - `canComment` (boolean) - `canEdit` (boolean) - `favoritesCount` (integer) - `mediaCount` (integer) - `isMediaReady` (boolean) - `isOpened` (boolean) - `canToggleFavorite` (boolean) - `stats` (object) - `commentsCount` (integer) - `tipsAmount` (string) - `tweetSend` (boolean) - `media` (object[]) - `canViewMedia` (boolean) ## Example ```bash curl -X GET "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/users/me/stats/top/post" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Get top posts stats (/docs/of-api/misc/get-top-posts-stats) `GET https://theonlyapi.com/api/crm/your-crm-id/api2/v2/posts/top` Returns top-performing posts statistics over a date range. The dynamic path segment is the serialized querystring. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Query parameters - `startDate` (string, required) — Range start date. - `endDate` (string, required) — Range end date. - `by` (string) — Metric to sort/group by. - `offset` (string) — Pagination offset. - `skip_users` (string) — Skip embedding user objects (set to all). ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X GET "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/posts/top" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Get top stories stats (/docs/of-api/misc/get-top-stories-stats) `GET https://theonlyapi.com/api/crm/your-crm-id/api2/v2/stories/top` Returns top-performing stories statistics for a date range, optionally grouped. The dynamic suffix in path_raw is the querystring. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Query parameters - `startDate` (string) — Range start date. - `endDate` (string) — Range end date. - `by` (string) — Grouping/metric field. - `offset` (string) — Pagination offset. ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X GET "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/stories/top" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Get top stories stats (/docs/of-api/misc/get-top-stories-stats-get) `GET https://theonlyapi.com/api/crm/your-crm-id/api2/v2/users/me/stats/top/story` Retrieves top-performing story statistics over a date range. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. ✓ **Verified live** against a real OnlyFans account (2026-07-30); the `data` schema below is the real response shape. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Query parameters - `startDate` (string, required) — Start of date range. - `endDate` (string, required) — End of date range. ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — OnlyFans response — verified live; `data` is the real shape. - `success` (boolean) - `status_code` (integer) - `data` (object) - `tips` (null) - `views` (object) - `id` (integer) - `userId` (integer) - `isReady` (boolean) - `hasPost` (boolean) - `isWatched` (boolean) - `media` (object[]) - `createdAt` (string) - `canvasHeight` (integer) - `canvasWidth` (integer) - `question` (object) - `viewersCount` (integer) - `viewers` (object[]) - `commentsCount` (integer) - `canDelete` (boolean) - `isHighlightCover` (boolean) - `isLastInHighlight` (boolean) - `tipsAmount` (string) - `tipsAmountRaw` (integer) - `tipsCount` (integer) - `likesCount` (integer) - `releaseForms` (any[]) - `likes` (object) - `id` (integer) - `userId` (integer) - `isReady` (boolean) - `hasPost` (boolean) - `isWatched` (boolean) - `media` (object[]) - `createdAt` (string) - `canvasHeight` (integer) - `canvasWidth` (integer) - `question` (object) - `viewersCount` (integer) - `viewers` (object[]) - `commentsCount` (integer) - `canDelete` (boolean) - `isHighlightCover` (boolean) - `isLastInHighlight` (boolean) - `tipsAmount` (string) - `tipsAmountRaw` (integer) - `tipsCount` (integer) - `likesCount` (integer) - `releaseForms` (any[]) - `comments` (object) - `id` (integer) - `userId` (integer) - `isReady` (boolean) - `hasPost` (boolean) - `isWatched` (boolean) - `media` (object[]) - `createdAt` (string) - `canvasHeight` (integer) - `canvasWidth` (integer) - `question` (object) - `viewersCount` (integer) - `viewers` (object[]) - `commentsCount` (integer) - `canDelete` (boolean) - `isHighlightCover` (boolean) - `isLastInHighlight` (boolean) - `tipsAmount` (string) - `tipsAmountRaw` (integer) - `tipsCount` (integer) - `likesCount` (integer) - `releaseForms` (any[]) ## Example ```bash curl -X GET "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/users/me/stats/top/story" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Get top streaks (/docs/of-api/misc/get-top-streaks) `GET https://theonlyapi.com/api/crm/your-crm-id/api2/v2/streaks/top` Returns the top fan streaks for the creator. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. ✓ **Verified live** against a real OnlyFans account (2026-07-30); the `data` schema below is the real response shape. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — OnlyFans response — verified live; `data` is the real shape. - `success` (boolean) - `status_code` (integer) - `data` (object) - `id` (integer) - `startDate` (string) - `endDate` (string) - `isActive` (boolean) - `postsCount` (integer) - `daysCount` (integer) - `streamsDuration` (integer) - `storiesCount` (integer) - `chatsCount` (integer) - `frozenDays` (string[]) ## Example ```bash curl -X GET "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/streaks/top" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Get top streams stats (/docs/of-api/misc/get-top-streams-stats) `GET https://theonlyapi.com/api/crm/your-crm-id/api2/v2/streams/top` Returns top-performing live streams over a date range, ranked (default by purchases) with pagination. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Query parameters - `startDate` (string, required) — Range start date. - `endDate` (string, required) — Range end date. - `limit` (string) — Page size (default 10). - `offset` (string) — Pagination offset (default 0). - `by` (string) — Ranking metric (default 'purchases'). ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X GET "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/streams/top" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Get top streams stats (/docs/of-api/misc/get-top-streams-stats-get) `GET https://theonlyapi.com/api/crm/your-crm-id/api2/v2/users/me/stats/top/stream` Returns the current user's top-performing streams statistics for a date range. The dynamic suffix in path_raw is the querystring. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. ✓ **Verified live** against a real OnlyFans account (2026-07-30); the `data` schema below is the real response shape. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Query parameters - `startDate` (string) — Range start date. - `endDate` (string) — Range end date. ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — OnlyFans response — verified live; `data` is the real shape. - `success` (boolean) - `status_code` (integer) - `data` (object) - `purchases` (null) - `tips` (null) - `views` (null) - `likes` (null) - `comments` (null) ## Example ```bash curl -X GET "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/users/me/stats/top/stream" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Get top subscribers stats (/docs/of-api/misc/get-top-subscribers-stats) `GET https://theonlyapi.com/api/crm/your-crm-id/api2/v2/subscriptions/subscribers/top` Retrieves top subscribers over a date range (statistics context). **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. ✓ **Verified live** against a real OnlyFans account (2026-07-30); the `data` schema below is the real response shape. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Query parameters - `startDate` (string, required) — Start of date range. - `endDate` (string, required) — End of date range. - `by` (string) — Metric to rank by. - `offset` (string) — Pagination offset. ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — OnlyFans response — verified live; `data` is the real shape. - `success` (boolean) - `status_code` (integer) - `data` (object) - `users` (object[]) - `view` (string) - `avatar` (null) - `avatarThumbs` (null) - `header` (null) - `headerSize` (null) - `headerThumbs` (null) - `id` (integer) - `name` (string) - `username` (string) - `canLookStory` (boolean) - `canCommentStory` (boolean) - `hasNotViewedStory` (boolean) - `isVerified` (boolean) - `canPayInternal` (boolean) - `hasScheduledStream` (boolean) - `hasStream` (boolean) - `hasStories` (boolean) - `tipsEnabled` (boolean) - `tipsTextEnabled` (boolean) - `tipsMin` (integer) - `tipsMinInternal` (integer) - `tipsMax` (integer) - `canEarn` (boolean) - `canAddSubscriber` (boolean) - `subscribePrice` (integer) - `displayName` (string) - `notice` (string) - `isActive` (boolean) - `isRestricted` (boolean) - `canRestrict` (boolean) - `subscribedBy` (boolean) - `subscribedByExpire` (boolean) - `subscribedByExpireDate` (string) - `subscribedByAutoprolong` (boolean) - `subscribedIsExpiredNow` (boolean) - `currentSubscribePrice` (integer) - `subscribedOn` (null) - `subscribedOnExpire` (boolean) - `subscribedOnExpiredNow` (boolean) - `subscribedOnDuration` (string) - `listsStates` (any[]) - `canReport` (boolean) - `canReceiveChatMessage` (boolean) - `hideChat` (boolean) - `lastSeen` (string) - `isPerformer` (boolean) - `isRealPerformer` (boolean) - `subscribedByData` (object) - `subscribedOnData` (object) - `canTrialSend` (boolean) - `isBlocked` (boolean) - `canUnsubscribe` (boolean) - `isPendingAutoprolong` (boolean) - `hasMore` (boolean) ## Example ```bash curl -X GET "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/subscriptions/subscribers/top" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Get trial link statistics (/docs/of-api/misc/get-trial-link-statistics) `GET https://theonlyapi.com/api/crm/your-crm-id/api2/v2/trials/stats` Returns statistics for free-trial links over a date range with pagination. The dynamic suffix in path_raw is the querystring. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. ✓ **Verified live** against a real OnlyFans account (2026-07-30); the `data` schema below is the real response shape. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Query parameters - `offset` (string) — Pagination offset. - `startDate` (string) — Range start date. - `endDate` (string) — Range end date. - `limit` (string) — Max results. ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — OnlyFans response — verified live; `data` is the real shape. - `success` (boolean) - `status_code` (integer) - `data` (object) - `hasMore` (boolean) - `items` (any[]) ## Example ```bash curl -X GET "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/trials/stats" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Get trials chart stats (/docs/of-api/misc/get-trials-chart-stats) `GET https://theonlyapi.com/api/crm/your-crm-id/api2/v2/trials/chart` Returns trial statistics chart data over a date range. The dynamic path segment is the serialized querystring, not a path param. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. ✓ **Verified live** against a real OnlyFans account (2026-07-30); the `data` schema below is the real response shape. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Query parameters - `startDate` (string, required) — Range start date. - `endDate` (string, required) — Range end date. - `stats` (string) — Include stats flag (set to 1). ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — OnlyFans response — verified live; `data` is the real shape. - `success` (boolean) - `status_code` (integer) - `data` (object) - `claims` (object) - `chart` (object[]) - `total` (integer) - `offers` (object) - `chart` (object[]) - `total` (integer) ## Example ```bash curl -X GET "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/trials/chart" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Get VAT payouts chart stats (/docs/of-api/misc/get-vat-payouts-chart-stats) `GET https://theonlyapi.com/api/crm/your-crm-id/api2/v2/payouts/vat/chart` Returns VAT payouts chart statistics (amount/count) over a date range. The dynamic path segment is the serialized querystring. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. ✓ **Verified live** against a real OnlyFans account (2026-07-30); the `data` schema below is the real response shape. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Query parameters - `startDate` (string, required) — Range start date. - `endDate` (string, required) — Range end date. - `withTotal` (string) — Include totals (defaults true). - `withChart` (string) — Include chart series (set true). - `filter` (string) — Chart amount/count filter. ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — OnlyFans response — verified live; `data` is the real shape. - `success` (boolean) - `status_code` (integer) - `data` (any[]) ## Example ```bash curl -X GET "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/payouts/vat/chart" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # List content report reasons (/docs/of-api/misc/list-content-report-reasons) `GET https://theonlyapi.com/api/crm/your-crm-id/api2/v2/reports/reasons` Returns the list of available reasons for reporting content or users. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. ✓ **Verified live** against a real OnlyFans account (2026-07-30); the `data` schema below is the real response shape. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — OnlyFans response — verified live; `data` is the real shape. - `success` (boolean) - `status_code` (integer) - `data` (object[]) - `id` (integer) - `name` (string) - `code` (string) - `requiresIssue` (boolean) - `subReasons` (object[]) - `involves` (any[]) - `issues` (object) - `revenge_porn` (string) - `expose` (string) - `impersonation` (string) - `underage` (string) - `tm` (string) - `spam` (string) - `prostitution` (string) - `weapons` (string) - `drugs` (string) - `other` (string) ## Example ```bash curl -X GET "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/reports/reasons" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # List referrals (/docs/of-api/misc/list-referrals) `GET https://theonlyapi.com/api/crm/your-crm-id/api2/v2/users/me/referrals` Returns the current user's referrals over a date range with pagination. The dynamic path segment is a built querystring. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. ✓ **Verified live** against a real OnlyFans account (2026-07-30); the `data` schema below is the real response shape. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Query parameters - `startDate` (string) — Start of the date range. - `endDate` (string) — End of the date range. - `offset` (string) — Pagination offset. - `marker` (string) — Pagination marker. - `onlyPerformers` (string) — Only referred performers/creators. ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — OnlyFans response — verified live; `data` is the real shape. - `success` (boolean) - `status_code` (integer) - `data` (object) - `hasMore` (boolean) - `list` (any[]) ## Example ```bash curl -X GET "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/users/me/referrals" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # List states for a country (/docs/of-api/misc/list-states-for-a-country) `GET https://theonlyapi.com/api/crm/your-crm-id/api2/v2/countries/{country_id}/states` Returns the list of states/regions for the specified country. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Path parameters - `country_id` (string, required) — Id of the country whose states are requested. ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X GET "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/countries/{country_id}/states" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # List states for country (/docs/of-api/misc/list-states-for-country) `GET https://theonlyapi.com/api/crm/your-crm-id/api2/v2/iso/countries/{country_id}/states` Returns the ISO list of states/regions for a given country. Reference/lookup data. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Path parameters - `country_id` (string, required) — ID of the country. ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X GET "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/iso/countries/{country_id}/states" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Mark support ticket as read (/docs/of-api/misc/mark-support-ticket-as-read) `PUT https://theonlyapi.com/api/crm/your-crm-id/api2/v2/users/tickets/{ticket_id}/read` Marks the given support ticket as read. Part of the users/tickets support module (reply, solve, reopen, comments). **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Path parameters - `ticket_id` (string, required) — ID of the support ticket. ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X PUT "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/users/tickets/{ticket_id}/read" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Mark support ticket solved (/docs/of-api/misc/mark-support-ticket-solved) `POST https://theonlyapi.com/api/crm/your-crm-id/api2/v2/users/tickets/{ticket_id}/solve` Marks a user support ticket as solved. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Path parameters - `ticket_id` (string, required) — ID of the support ticket. ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X POST "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/users/tickets/{ticket_id}/solve" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Record address statistics (/docs/of-api/misc/record-address-statistics) `POST https://theonlyapi.com/api/crm/your-crm-id/api2/v2/address/stat` Posts address-related statistics data. Appears alongside GDPR, clicks-stats and accepted-cookies analytics calls. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Request body Content type: `application/json` ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X POST "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/address/stat" \ -H "X-API-Key: " \ -H "user-id: …" \ -H "Content-Type: application/json" \ -d '{}' ``` --- # Rename a release form (/docs/of-api/misc/rename-a-release-form) `PATCH https://theonlyapi.com/api/crm/your-crm-id/api2/v2/release-forms/rename` Renames a content release form. Part of the release-forms module (attach, links, documents, toggle-show). **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Request body Content type: `application/json` ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X PATCH "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/release-forms/rename" \ -H "X-API-Key: " \ -H "user-id: …" \ -H "Content-Type: application/json" \ -d '{}' ``` --- # Reopen a support ticket (/docs/of-api/misc/reopen-a-support-ticket) `PUT https://theonlyapi.com/api/crm/your-crm-id/api2/v2/users/tickets/{ticket_id}/reopen` Reopens a previously closed support ticket identified by ticket_id. Body carries the reopen data. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Path parameters - `ticket_id` (string, required) — ID of the support ticket to reopen. ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Request body Content type: `application/json` ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X PUT "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/users/tickets/{ticket_id}/reopen" \ -H "X-API-Key: " \ -H "user-id: …" \ -H "Content-Type: application/json" \ -d '{}' ``` --- # Reply to support ticket (/docs/of-api/misc/reply-to-support-ticket) `POST https://theonlyapi.com/api/crm/your-crm-id/api2/v2/users/tickets/{ticket_id}/reply` Posts a reply to the specified support ticket. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Path parameters - `ticket_id` (string, required) — ID of the support ticket. ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Request body Content type: `application/json` ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X POST "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/users/tickets/{ticket_id}/reply" \ -H "X-API-Key: " \ -H "user-id: …" \ -H "Content-Type: application/json" \ -d '{}' ``` --- # Report user click statistics (/docs/of-api/misc/report-user-click-statistics) `POST https://theonlyapi.com/api/crm/your-crm-id/api2/v2/users/clicks-stats` Sends a batch of user click/interaction statistics for tracking. The response is fire-and-forget (errors are swallowed via .catch). **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Request body Content type: `application/json` ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X POST "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/users/clicks-stats" \ -H "X-API-Key: " \ -H "user-id: …" \ -H "Content-Type: application/json" \ -d '{}' ``` --- # Search localization texts (/docs/of-api/misc/search-localization-texts) `POST https://theonlyapi.com/api/crm/your-crm-id/api2/v2/texts/search` Searches localization strings by code and languages. Part of the i18n text system (texts.onlyfans.com). **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Request body Content type: `application/json` - `code` (string) — Text/translation key to search. - `languages` (any[]) — Languages to search within. ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X POST "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/texts/search" \ -H "X-API-Key: " \ -H "user-id: …" \ -H "Content-Type: application/json" \ -d '{}' ``` --- # Send legal inquiry notification (/docs/of-api/misc/send-legal-inquiry-notification) `POST https://theonlyapi.com/api/crm/your-crm-id/api2/v2/legal-inquiry/send-notification/{inquiry_id}` Sends a notification for the specified legal inquiry. No request body is sent. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Path parameters - `inquiry_id` (string, required) — ID of the legal inquiry. ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X POST "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/legal-inquiry/send-notification/{inquiry_id}" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Start release form link (/docs/of-api/misc/start-release-form-link) `POST https://theonlyapi.com/api/crm/your-crm-id/api2/v2/release-form-links/{link_id}/start` Starts the flow for a release-form (consent) link identified by its id. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Path parameters - `link_id` (string, required) — ID of the release-form link. ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X POST "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/release-form-links/{link_id}/start" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Submit a legal inquiry (/docs/of-api/misc/submit-a-legal-inquiry) `POST https://theonlyapi.com/api/crm/your-crm-id/api2/v2/legal-inquiry` Creates/submits a new legal inquiry (takedown/legal request). **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Request body Content type: `application/json` ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X POST "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/legal-inquiry" \ -H "X-API-Key: " \ -H "user-id: …" \ -H "Content-Type: application/json" \ -d '{}' ``` --- # Submit client-side log entry (/docs/of-api/misc/submit-client-side-log-entry) `POST https://theonlyapi.com/api/crm/your-crm-id/api2/v2/log` Sends a client log message with optional context data, logger name and level to the server-side logging endpoint. The context is wrapped with an `onlyfans.` logger name and a timestamp. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Request body Content type: `application/json` - `message` (string) — Log message text. - `context` (object) — Arbitrary log data merged with logger name and timestamp. - `level` (string) — Log level, e.g. debug/info/error. ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X POST "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/log" \ -H "X-API-Key: " \ -H "user-id: …" \ -H "Content-Type: application/json" \ -d '{}' ``` --- # Submit consent form (/docs/of-api/misc/submit-consent-form) `POST https://theonlyapi.com/api/crm/your-crm-id/api2/v2/consent-form` Submits/creates a consent form. Grouped with release-form and release-form-proof endpoints for content compliance. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X POST "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/consent-form" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Submit contact form (/docs/of-api/misc/submit-contact-form) `POST https://theonlyapi.com/api/crm/your-crm-id/api2/v2/pages/contacts` Submits the contact page form data. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Request body Content type: `application/json` ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X POST "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/pages/contacts" \ -H "X-API-Key: " \ -H "user-id: …" \ -H "Content-Type: application/json" \ -d '{}' ``` --- # Submit legal inquiry by counsel (/docs/of-api/misc/submit-legal-inquiry-by-counsel) `POST https://theonlyapi.com/api/crm/your-crm-id/api2/v2/legal-inquiry/by-counsel` Submits a legal inquiry on behalf of legal counsel. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Request body Content type: `application/json` ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X POST "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/legal-inquiry/by-counsel" \ -H "X-API-Key: " \ -H "user-id: …" \ -H "Content-Type: application/json" \ -d '{}' ``` --- # Submit legal inquiry response (/docs/of-api/misc/submit-legal-inquiry-response) `POST https://theonlyapi.com/api/crm/your-crm-id/api2/v2/legal-inquiry/{inquiry_id}` Submits data/response for a specific legal inquiry. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Path parameters - `inquiry_id` (string, required) — ID of the legal inquiry. ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Request body Content type: `application/json` ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X POST "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/legal-inquiry/{inquiry_id}" \ -H "X-API-Key: " \ -H "user-id: …" \ -H "Content-Type: application/json" \ -d '{}' ``` --- # Submit license form (/docs/of-api/misc/submit-license-form) `POST https://theonlyapi.com/api/crm/your-crm-id/api2/v2/users/license_form` Submits a license form for the current user (identity/creator license documentation). **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Request body Content type: `application/json` ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X POST "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/users/license_form" \ -H "X-API-Key: " \ -H "user-id: …" \ -H "Content-Type: application/json" \ -d '{}' ``` --- # Submit release form proof (/docs/of-api/misc/submit-release-form-proof) `POST https://theonlyapi.com/api/crm/your-crm-id/api2/v2/release-form-proof` Submits proof for a content release form (consent documentation). **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X POST "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/release-form-proof" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Toggle release form visibility (/docs/of-api/misc/toggle-release-form-visibility) `PATCH https://theonlyapi.com/api/crm/your-crm-id/api2/v2/release-forms/toggle-show` Toggles the show/visibility state of release forms. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Request body Content type: `application/json` ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X PATCH "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/release-forms/toggle-show" \ -H "X-API-Key: " \ -H "user-id: …" \ -H "Content-Type: application/json" \ -d '{}' ``` --- # Update a legal inquiry (/docs/of-api/misc/update-a-legal-inquiry) `POST https://theonlyapi.com/api/crm/your-crm-id/api2/v2/legal-inquiry/{inquiry_id}/update/{hash}` Submits an update to a legal inquiry identified by its ID and hash. Part of the legal-inquiry module (search, history, change-status). **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Path parameters - `inquiry_id` (string, required) — ID of the legal inquiry. - `hash` (string, required) — Update hash/token authorizing the update. ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Request body Content type: `application/json` ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X POST "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/legal-inquiry/{inquiry_id}/update/{hash}" \ -H "X-API-Key: " \ -H "user-id: …" \ -H "Content-Type: application/json" \ -d '{}' ``` --- # Update a localization text (/docs/of-api/misc/update-a-localization-text) `PUT https://theonlyapi.com/api/crm/your-crm-id/api2/v2/texts/{code}` Updates the localized text string for a given text code. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Path parameters - `code` (string, required) — Localization/text string code. ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Request body Content type: `application/json` - `text` (string) — New text content for the code. ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X PUT "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/texts/{code}" \ -H "X-API-Key: " \ -H "user-id: …" \ -H "Content-Type: application/json" \ -d '{}' ``` --- # Upload release form document (/docs/of-api/misc/upload-release-form-document) `POST https://theonlyapi.com/api/crm/your-crm-id/api2/v2/release-form-documents` Uploads a release-form document (co-performer consent / model release). **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Request body Content type: `application/json` ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X POST "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/release-form-documents" \ -H "X-API-Key: " \ -H "user-id: …" \ -H "Content-Type: application/json" \ -d '{}' ``` --- # Notifications (/docs/of-api/notifications) {/* Generated by scripts/gen-api.ts — edit that script, not this file. */} OnlyFans notification endpoints (via proxy). **OnlyFans only** — Fansly accounts are rejected on this surface. | Method | Endpoint | Path | | -------- | ------------------------------------------------------------------------------------------- | ----------------------------------------------------- | | `GET` | [Get user alerts](/docs/of-api/notifications/get-user-alerts) | `/api2/v2/users/alert` | | `DELETE` | [Delete user alert](/docs/of-api/notifications/delete-user-alert) | `/api2/v2/users/alert/{alert_id}` | | `DELETE` | [Dismiss a mass alert](/docs/of-api/notifications/dismiss-a-mass-alert) | `/api2/v2/users/mass-alert/{alert_id}` | | `GET` | [Get notifications](/docs/of-api/notifications/get-notifications-get) | `/api2/v2/users/notifications` | | `POST` | [Mark notification as read](/docs/of-api/notifications/mark-notification-as-read) | `/api2/v2/users/notifications/{notification_id}/read` | | `GET` | [Get unread notification count](/docs/of-api/notifications/get-unread-notification-count) | `/api2/v2/users/notifications/count` | | `POST` | [Mark all notifications as read](/docs/of-api/notifications/mark-all-notifications-as-read) | `/api2/v2/users/notifications/read` | | `GET` | [Get notification tabs order](/docs/of-api/notifications/get-notification-tabs-order) | `/api2/v2/users/notifications/settings/tabs-order` | | `POST` | [Save notification tabs order](/docs/of-api/notifications/save-notification-tabs-order) | `/api2/v2/users/notifications/settings/tabs-order` | | `PUT` | [Register PWA push token](/docs/of-api/notifications/register-pwa-push-token) | `/api2/v2/users/push-token/pwa` | --- # Delete user alert (/docs/of-api/notifications/delete-user-alert) `DELETE https://theonlyapi.com/api/crm/your-crm-id/api2/v2/users/alert/{alert_id}` Deletes a user alert by id. Related to users/mass-alert endpoints (creator alert broadcasts). **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Path parameters - `alert_id` (string, required) — ID of the alert to delete. ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X DELETE "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/users/alert/{alert_id}" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Dismiss a mass alert (/docs/of-api/notifications/dismiss-a-mass-alert) `DELETE https://theonlyapi.com/api/crm/your-crm-id/api2/v2/users/mass-alert/{alert_id}` Dismisses/deletes a mass alert notification identified by alert id. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Path parameters - `alert_id` (string, required) — ID of the mass alert to dismiss. ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X DELETE "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/users/mass-alert/{alert_id}" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Get notification tabs order (/docs/of-api/notifications/get-notification-tabs-order) `GET https://theonlyapi.com/api/crm/your-crm-id/api2/v2/users/notifications/settings/tabs-order` Returns the user's configured ordering of notification tabs. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. ✓ **Verified live** against a real OnlyFans account (2026-07-30); the `data` schema below is the real response shape. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — OnlyFans response — verified live; `data` is the real shape. - `success` (boolean) - `status_code` (integer) - `data` (string[]) ## Example ```bash curl -X GET "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/users/notifications/settings/tabs-order" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Get notifications (/docs/of-api/notifications/get-notifications-get) `GET https://theonlyapi.com/api/crm/your-crm-id/api2/v2/users/notifications` **OnlyFans only.** Requests made with a `user-id` belonging to a Fansly account are rejected — use the platform-neutral CRM data routes (`/notifications`, `/balances`, `/chats`, `/purchases`, `/subscribers/cached`, ...) which are Fansly-aware. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Query parameters - `limit` (integer) — Default `20`. - `skip_users` (string) — Default `all`. - `format` (string) — Default `infinite`. ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — Notification list - `list` (object[]) - `hasMore` (boolean) ## Example ```bash curl -X GET "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/users/notifications" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Get unread notification count (/docs/of-api/notifications/get-unread-notification-count) `GET https://theonlyapi.com/api/crm/your-crm-id/api2/v2/users/notifications/count` **OnlyFans only.** Requests made with a `user-id` belonging to a Fansly account are rejected — use the platform-neutral CRM data routes (`/notifications`, `/balances`, `/chats`, `/purchases`, `/subscribers/cached`, ...) which are Fansly-aware. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — Unread count - `count` (integer) ## Example ```bash curl -X GET "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/users/notifications/count" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Get user alerts (/docs/of-api/notifications/get-user-alerts) `GET https://theonlyapi.com/api/crm/your-crm-id/api2/v2/users/alert` Returns the current user's alert(s) banner data. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. ✓ **Verified live** against a real OnlyFans account (2026-07-30); the `data` schema below is the real response shape. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — OnlyFans response — verified live; `data` is the real shape. - `success` (boolean) - `status_code` (integer) - `data` (any[]) ## Example ```bash curl -X GET "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/users/alert" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Mark all notifications as read (/docs/of-api/notifications/mark-all-notifications-as-read) `POST https://theonlyapi.com/api/crm/your-crm-id/api2/v2/users/notifications/read` **OnlyFans only.** Requests made with a `user-id` belonging to a Fansly account are rejected — use the platform-neutral CRM data routes (`/notifications`, `/balances`, `/chats`, `/purchases`, `/subscribers/cached`, ...) which are Fansly-aware. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — Marked as read ## Example ```bash curl -X POST "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/users/notifications/read" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Mark notification as read (/docs/of-api/notifications/mark-notification-as-read) `POST https://theonlyapi.com/api/crm/your-crm-id/api2/v2/users/notifications/{notification_id}/read` Marks a single notification as read by its id. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Path parameters - `notification_id` (string, required) — Id of the notification to mark read. ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X POST "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/users/notifications/{notification_id}/read" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Register PWA push token (/docs/of-api/notifications/register-pwa-push-token) `PUT https://theonlyapi.com/api/crm/your-crm-id/api2/v2/users/push-token/pwa` Registers or updates the web-push (PWA) push notification token for the current user. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Request body Content type: `application/json` ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X PUT "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/users/push-token/pwa" \ -H "X-API-Key: " \ -H "user-id: …" \ -H "Content-Type: application/json" \ -d '{}' ``` --- # Save notification tabs order (/docs/of-api/notifications/save-notification-tabs-order) `POST https://theonlyapi.com/api/crm/your-crm-id/api2/v2/users/notifications/settings/tabs-order` Saves the ordering of the notification settings tabs. A GET on the same path retrieves the current order. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Request body Content type: `application/json` ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X POST "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/users/notifications/settings/tabs-order" \ -H "X-API-Key: " \ -H "user-id: …" \ -H "Content-Type: application/json" \ -d '{}' ``` --- # Payouts (/docs/of-api/payouts) {/* Generated by scripts/gen-api.ts — edit that script, not this file. */} OnlyFans payout & payment endpoints (via proxy). **OnlyFans only** — Fansly accounts are rejected on this surface. | Method | Endpoint | Path | | -------- | ----------------------------------------------------------------------------------------------------- | ------------------------------------------------- | | `POST` | [Save address](/docs/of-api/payouts/save-address) | `/api2/v2/address` | | `GET` | [List alternative payment methods](/docs/of-api/payouts/list-alternative-payment-methods) | `/api2/v2/alternative-payment-methods` | | `DELETE` | [Delete alternative payment method](/docs/of-api/payouts/delete-alternative-payment-method) | `/api2/v2/alternative-payment-methods` | | `POST` | [Submit alternative payment method form](/docs/of-api/payouts/submit-alternative-payment-method-form) | `/api2/v2/alternative-payment-methods/form` | | `POST` | [Pay via alternative method](/docs/of-api/payouts/pay-via-alternative-method) | `/api2/v2/alternative-payment-methods/pay` | | `GET` | [Get PayPal payment method info](/docs/of-api/payouts/get-paypal-payment-method-info) | `/api2/v2/alternative-payment-methods/paypal` | | `GET` | [List payout-supported countries](/docs/of-api/payouts/list-payout-supported-countries) | `/api2/v2/countries/payouts` | | `GET` | [Get earnings chart](/docs/of-api/payouts/get-earnings-chart) | `/api2/v2/earnings/chart` | | `GET` | [Check if any transactions exist](/docs/of-api/payouts/check-if-any-transactions-exist) | `/api2/v2/payments/all/has-transactions` | | `GET` | [Get all payment transactions](/docs/of-api/payouts/get-all-payment-transactions) | `/api2/v2/payments/all/transactions` | | `GET` | [List saved payment cards](/docs/of-api/payouts/list-saved-payment-cards) | `/api2/v2/payments/cards` | | `PUT` | [Update a saved payment card](/docs/of-api/payouts/update-a-saved-payment-card) | `/api2/v2/payments/cards/{card_id}` | | `DELETE` | [Delete a payment card](/docs/of-api/payouts/delete-a-payment-card) | `/api2/v2/payments/cards/{card_id}` | | `PUT` | [Set default payment card](/docs/of-api/payouts/set-default-payment-card) | `/api2/v2/payments/cards/{card_id}/default` | | `POST` | [Verify a saved card](/docs/of-api/payouts/verify-a-saved-card) | `/api2/v2/payments/cards/{card_id}/verify` | | `POST` | [Submit a payment](/docs/of-api/payouts/submit-a-payment) | `/api2/v2/payments/pay` | | `GET` | [Get referral earnings balance](/docs/of-api/payouts/get-referral-earnings-balance) | `/api2/v2/payments/referrals/balance` | | `GET` | [Get payout account info](/docs/of-api/payouts/get-payout-account-info) | `/api2/v2/payouts/account` | | `GET` | [Get payout balances](/docs/of-api/payouts/get-payout-balances) | `/api2/v2/payouts/balances` | | `POST` | [Add payout bank account](/docs/of-api/payouts/add-payout-bank-account) | `/api2/v2/payouts/bank` | | `PATCH` | [Update bank payout details](/docs/of-api/payouts/update-bank-payout-details) | `/api2/v2/payouts/bank` | | `DELETE` | [Delete bank payout method](/docs/of-api/payouts/delete-bank-payout-method) | `/api2/v2/payouts/bank` | | `GET` | [Check if VAT documents allowed](/docs/of-api/payouts/check-if-vat-documents-allowed) | `/api2/v2/payouts/can-add-vat-documents` | | `GET` | [List chargebacks / disputes](/docs/of-api/payouts/list-chargebacks-disputes) | `/api2/v2/payouts/chargebacks` | | `GET` | [Get chargebacks chart data](/docs/of-api/payouts/get-chargebacks-chart-data) | `/api2/v2/payouts/chargebacks/chart` | | `GET` | [Get chargeback ratio](/docs/of-api/payouts/get-chargeback-ratio) | `/api2/v2/payouts/chargebacks/ratio` | | `GET` | [Check payout receive eligibility](/docs/of-api/payouts/check-payout-receive-eligibility) | `/api2/v2/payouts/check-receive` | | `GET` | [Get DAC7 tax info](/docs/of-api/payouts/get-dac7-tax-info) | `/api2/v2/payouts/dac7` | | `POST` | [Submit DAC7 tax information](/docs/of-api/payouts/submit-dac7-tax-information) | `/api2/v2/payouts/dac7` | | `GET` | [Download VAT document](/docs/of-api/payouts/download-vat-document) | `/api2/v2/payouts/download/vat/{vat_document_id}` | | `POST` | [Submit payout legal information](/docs/of-api/payouts/submit-payout-legal-information) | `/api2/v2/payouts/legal` | | `GET` | [Get payout legal form](/docs/of-api/payouts/get-payout-legal-form) | `/api2/v2/payouts/legal-form` | | `GET` | [Get payout legal info](/docs/of-api/payouts/get-payout-legal-info) | `/api2/v2/payouts/legal-info` | | `POST` | [Submit Instagram legal verification](/docs/of-api/payouts/submit-instagram-legal-verification) | `/api2/v2/payouts/legal/instagram` | | `POST` | [Submit Twitter legal info](/docs/of-api/payouts/submit-twitter-legal-info) | `/api2/v2/payouts/legal/twitter` | | `POST` | [Submit QST tax information](/docs/of-api/payouts/submit-qst-tax-information) | `/api2/v2/payouts/qst` | | `GET` | [Get referrals chart data](/docs/of-api/payouts/get-referrals-chart-data) | `/api2/v2/payouts/referrals/chart` | | `GET` | [List payout requests](/docs/of-api/payouts/list-payout-requests) | `/api2/v2/payouts/requests` | | `POST` | [Create payout request](/docs/of-api/payouts/create-payout-request-post) | `/api2/v2/payouts/requests` | | `GET` | [List referral payout requests](/docs/of-api/payouts/list-referral-payout-requests-get) | `/api2/v2/payouts/requests/referral` | | `GET` | [List Stripe payout requests](/docs/of-api/payouts/list-stripe-payout-requests) | `/api2/v2/payouts/requests/stripe` | | `GET` | [Get VAT info for payout request](/docs/of-api/payouts/get-vat-info-for-payout-request) | `/api2/v2/payouts/requests/vat/{request_id}` | | `GET` | [Get Stripe payout info](/docs/of-api/payouts/get-stripe-payout-info) | `/api2/v2/payouts/stripe` | | `POST` | [Create or update Stripe payout account](/docs/of-api/payouts/create-or-update-stripe-payout-account) | `/api2/v2/payouts/stripe/account` | | `GET` | [Get Stripe payout legal info](/docs/of-api/payouts/get-stripe-payout-legal-info) | `/api2/v2/payouts/stripe/legal` | | `POST` | [Submit Stripe payout legal info](/docs/of-api/payouts/submit-stripe-payout-legal-info) | `/api2/v2/payouts/stripe/legal` | | `POST` | [Submit payout tax info](/docs/of-api/payouts/submit-payout-tax-info) | `/api2/v2/payouts/tax` | | `POST` | [Submit taxpayer identification number](/docs/of-api/payouts/submit-taxpayer-identification-number) | `/api2/v2/payouts/tin` | | `GET` | [Get payout transactions](/docs/of-api/payouts/get-payout-transactions) | `/api2/v2/payouts/transactions` | | `GET` | [Get UK company payout data](/docs/of-api/payouts/get-uk-company-payout-data) | `/api2/v2/payouts/uk-company-data` | | `POST` | [Submit UK company payout data](/docs/of-api/payouts/submit-uk-company-payout-data) | `/api2/v2/payouts/uk-company-data` | | `GET` | [Get payout VAT info](/docs/of-api/payouts/get-payout-vat-info) | `/api2/v2/payouts/vat` | | `POST` | [Submit VAT number](/docs/of-api/payouts/submit-vat-number) | `/api2/v2/payouts/vat` | | `DELETE` | [Delete VAT number](/docs/of-api/payouts/delete-vat-number) | `/api2/v2/payouts/vat` | | `POST` | [Create a VAT request](/docs/of-api/payouts/create-a-vat-request) | `/api2/v2/payouts/vat-requests` | | `GET` | [List payout VAT records](/docs/of-api/payouts/list-payout-vat-records) | `/api2/v2/payouts/vats` | | `POST` | [Submit W-9 tax form](/docs/of-api/payouts/submit-w-9-tax-form) | `/api2/v2/payouts/w9` | | `POST` | [Submit W-9 address](/docs/of-api/payouts/submit-w-9-address) | `/api2/v2/payouts/w9/address` | | `POST` | [Verify W9 TIN](/docs/of-api/payouts/verify-w9-tin) | `/api2/v2/payouts/w9/tincheck` | --- # Add payout bank account (/docs/of-api/payouts/add-payout-bank-account) `POST https://theonlyapi.com/api/crm/your-crm-id/api2/v2/payouts/bank` Creates/saves a bank account for payouts. GET on the same path retrieves the current bank details. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Request body Content type: `application/json` ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X POST "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/payouts/bank" \ -H "X-API-Key: " \ -H "user-id: …" \ -H "Content-Type: application/json" \ -d '{}' ``` --- # Check if any transactions exist (/docs/of-api/payouts/check-if-any-transactions-exist) `GET https://theonlyapi.com/api/crm/your-crm-id/api2/v2/payments/all/has-transactions` Returns whether the account has any payment transactions across all payment sources. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. ✓ **Verified live** against a real OnlyFans account (2026-07-30); the `data` schema below is the real response shape. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — OnlyFans response — verified live; `data` is the real shape. - `success` (boolean) - `status_code` (integer) - `data` (object) - `hasTransactions` (boolean) ## Example ```bash curl -X GET "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/payments/all/has-transactions" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Check if VAT documents allowed (/docs/of-api/payouts/check-if-vat-documents-allowed) `GET https://theonlyapi.com/api/crm/your-crm-id/api2/v2/payouts/can-add-vat-documents` Returns whether the creator is currently allowed to add VAT documents to their payouts. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. ✓ **Verified live** against a real OnlyFans account (2026-07-30); the `data` schema below is the real response shape. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — OnlyFans response — verified live; `data` is the real shape. - `success` (boolean) - `status_code` (integer) - `data` (object) - `success` (boolean) - `errorMessage` (string) ## Example ```bash curl -X GET "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/payouts/can-add-vat-documents" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Check payout receive eligibility (/docs/of-api/payouts/check-payout-receive-eligibility) `GET https://theonlyapi.com/api/crm/your-crm-id/api2/v2/payouts/check-receive` Checks whether the creator is able to receive payouts. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. ✓ **Verified live** against a real OnlyFans account (2026-07-30); the `data` schema below is the real response shape. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — OnlyFans response — verified live; `data` is the real shape. - `success` (boolean) - `status_code` (integer) - `data` (object) - `isVerifiedReason` (boolean) - `canReceiveManualPayout` (boolean) - `needUpdateBanking` (boolean) ## Example ```bash curl -X GET "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/payouts/check-receive" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Create a VAT request (/docs/of-api/payouts/create-a-vat-request) `POST https://theonlyapi.com/api/crm/your-crm-id/api2/v2/payouts/vat-requests` Creates a VAT (value-added tax) request for payouts. Part of the payouts tax module (vat, qst, tax, dac7). **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Request body Content type: `application/json` ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X POST "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/payouts/vat-requests" \ -H "X-API-Key: " \ -H "user-id: …" \ -H "Content-Type: application/json" \ -d '{}' ``` --- # Create or update Stripe payout account (/docs/of-api/payouts/create-or-update-stripe-payout-account) `POST https://theonlyapi.com/api/crm/your-crm-id/api2/v2/payouts/stripe/account` Submits Stripe connected-account details used for creator payouts. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Request body Content type: `application/json` ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X POST "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/payouts/stripe/account" \ -H "X-API-Key: " \ -H "user-id: …" \ -H "Content-Type: application/json" \ -d '{}' ``` --- # Create payout request (/docs/of-api/payouts/create-payout-request-post) `POST https://theonlyapi.com/api/crm/your-crm-id/api2/v2/payouts/requests` **OnlyFans only.** Requests made with a `user-id` belonging to a Fansly account are rejected — use the platform-neutral CRM data routes (`/notifications`, `/balances`, `/chats`, `/purchases`, `/subscribers/cached`, ...) which are Fansly-aware. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Request body Content type: `application/json` - `withdrawalAmount` (number) — e.g. `100`. ## Responses ### 200 — Payout requested ## Example ```bash curl -X POST "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/payouts/requests" \ -H "X-API-Key: " \ -H "user-id: …" \ -H "Content-Type: application/json" \ -d '{"withdrawalAmount":100}' ``` --- # Delete a payment card (/docs/of-api/payouts/delete-a-payment-card) `DELETE https://theonlyapi.com/api/crm/your-crm-id/api2/v2/payments/cards/{card_id}` Removes a saved payment card from the user's account. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Path parameters - `card_id` (string, required) — ID of the saved payment card to delete. ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X DELETE "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/payments/cards/{card_id}" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Delete alternative payment method (/docs/of-api/payouts/delete-alternative-payment-method) `DELETE https://theonlyapi.com/api/crm/your-crm-id/api2/v2/alternative-payment-methods` Removes a saved alternative payment method, identified by id in the request body. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X DELETE "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/alternative-payment-methods" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Delete bank payout method (/docs/of-api/payouts/delete-bank-payout-method) `DELETE https://theonlyapi.com/api/crm/your-crm-id/api2/v2/payouts/bank` Removes the creator's configured bank account used for payouts. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X DELETE "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/payouts/bank" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Delete VAT number (/docs/of-api/payouts/delete-vat-number) `DELETE https://theonlyapi.com/api/crm/your-crm-id/api2/v2/payouts/vat` Removes the creator's VAT registration number. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X DELETE "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/payouts/vat" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Download VAT document (/docs/of-api/payouts/download-vat-document) `GET https://theonlyapi.com/api/crm/your-crm-id/api2/v2/payouts/download/vat/{vat_document_id}` Downloads a specific VAT document/invoice for payouts by its id. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Path parameters - `vat_document_id` (string, required) — ID of the VAT document to download. ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X GET "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/payouts/download/vat/{vat_document_id}" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Get all payment transactions (/docs/of-api/payouts/get-all-payment-transactions) `GET https://theonlyapi.com/api/crm/your-crm-id/api2/v2/payments/all/transactions` **OnlyFans only.** Requests made with a `user-id` belonging to a Fansly account are rejected — use the platform-neutral CRM data routes (`/notifications`, `/balances`, `/chats`, `/purchases`, `/subscribers/cached`, ...) which are Fansly-aware. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Query parameters - `limit` (integer) — Default `20`. - `offset` (integer) — Default `0`. ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — All transactions - `list` (object[]) - `hasMore` (boolean) ## Example ```bash curl -X GET "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/payments/all/transactions" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Get chargeback ratio (/docs/of-api/payouts/get-chargeback-ratio) `GET https://theonlyapi.com/api/crm/your-crm-id/api2/v2/payouts/chargebacks/ratio` Returns the chargeback-to-transaction ratio for the given date range. **OnlyFans only.** Requests made with a `user-id` belonging to a Fansly account are rejected — use the platform-neutral CRM data routes (`/notifications`, `/balances`, `/chats`, `/purchases`, `/subscribers/cached`, ...) which are Fansly-aware. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Query parameters - `startDate` (string) - `endDate` (string) ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — Chargeback ratio - `chargebacksRatio` (number) — Ratio of chargebacks (0–1). ## Example ```bash curl -X GET "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/payouts/chargebacks/ratio" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Get chargebacks chart data (/docs/of-api/payouts/get-chargebacks-chart-data) `GET https://theonlyapi.com/api/crm/your-crm-id/api2/v2/payouts/chargebacks/chart` Time-series chart data for chargebacks with totals and delta. **OnlyFans only.** Requests made with a `user-id` belonging to a Fansly account are rejected — use the platform-neutral CRM data routes (`/notifications`, `/balances`, `/chats`, `/purchases`, `/subscribers/cached`, ...) which are Fansly-aware. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Query parameters - `startDate` (string) - `endDate` (string) - `withTotal` (boolean) — Default `true`. ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — Chargebacks chart - `total` (number) — Total chargeback amount for the period. - `delta` (number) — Change vs previous period. - `chartAmount` (number[]) — Amount per time bucket. - `chartCount` (number[]) — Count per time bucket. ## Example ```bash curl -X GET "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/payouts/chargebacks/chart" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Get DAC7 tax info (/docs/of-api/payouts/get-dac7-tax-info) `GET https://theonlyapi.com/api/crm/your-crm-id/api2/v2/payouts/dac7` Retrieves the creator's stored DAC7 (EU platform reporting) tax information for payouts. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. ✓ **Verified live** against a real OnlyFans account (2026-07-30); the `data` schema below is the real response shape. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — OnlyFans response — verified live; `data` is the real shape. - `success` (boolean) - `status_code` (integer) - `data` (object) - `status` (string) - `type` (string) - `firstName` (string) - `lastName` (string) - `address` (string) - `city` (string) - `state` (string) - `zip` (string) - `countryId` (integer) - `taxId` (string) - `issuingCountryId` (integer) - `vatNumber` (string) - `DOB` (string) - `cityOfBirth` (string) - `countryOfBirthId` (integer) - `countryOfResidenceId` (integer) ## Example ```bash curl -X GET "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/payouts/dac7" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Get earnings chart (/docs/of-api/payouts/get-earnings-chart) `GET https://theonlyapi.com/api/crm/your-crm-id/api2/v2/earnings/chart` **OnlyFans only.** Requests made with a `user-id` belonging to a Fansly account are rejected — use the platform-neutral CRM data routes (`/notifications`, `/balances`, `/chats`, `/purchases`, `/subscribers/cached`, ...) which are Fansly-aware. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Query parameters - `startDate` (string, required) - `endDate` (string) - `withTotal` (string) — Default `true`. ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — Earnings chart data - `total` (object) - `total` (number) — Total net earnings. - `gross` (number) — Total gross earnings. - `chartAmount` (number[]) — Earnings per time bucket. - `chartCount` (number[]) — Transaction count per time bucket. ## Example ```bash curl -X GET "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/earnings/chart" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Get payout account info (/docs/of-api/payouts/get-payout-account-info) `GET https://theonlyapi.com/api/crm/your-crm-id/api2/v2/payouts/account` Get saved banking/payment method info for payouts. **OnlyFans only.** Requests made with a `user-id` belonging to a Fansly account are rejected — use the platform-neutral CRM data routes (`/notifications`, `/balances`, `/chats`, `/purchases`, `/subscribers/cached`, ...) which are Fansly-aware. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — Banking info - `type` (string) — Payment method type. - `isVerified` (boolean) ## Example ```bash curl -X GET "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/payouts/account" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Get payout balances (/docs/of-api/payouts/get-payout-balances) `GET https://theonlyapi.com/api/crm/your-crm-id/api2/v2/payouts/balances` **OnlyFans only.** Requests made with a `user-id` belonging to a Fansly account are rejected — use the platform-neutral CRM data routes (`/notifications`, `/balances`, `/chats`, `/purchases`, `/subscribers/cached`, ...) which are Fansly-aware. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — Balance data - `current` (number) — Current available balance. - `pending` (number) — Pending balance. - `total` (number) — Total lifetime earnings. ## Example ```bash curl -X GET "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/payouts/balances" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Get payout legal form (/docs/of-api/payouts/get-payout-legal-form) `GET https://theonlyapi.com/api/crm/your-crm-id/api2/v2/payouts/legal-form` Retrieves the legal form data required for payouts (tax/identity legal form). **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. ✓ **Verified live** against a real OnlyFans account (2026-07-30); the `data` schema below is the real response shape. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — OnlyFans response — verified live; `data` is the real shape. - `success` (boolean) - `status_code` (integer) - `data` (object) - `realFirstName` (string) - `realLastName` (string) - `realBusinessName` (string) - `realAddress` (string) - `realCity` (string) - `realState` (string) - `realPostal` (string) - `realTwitter` (null) - `realInstagram` (string) - `privateWebsite` (null) - `dateOfBirth` (string) - `documentType` (object) - `values` (object[]) - `isAllowedDL` (boolean) - `isAllowedCustomW9Address` (boolean) ## Example ```bash curl -X GET "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/payouts/legal-form" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Get payout legal info (/docs/of-api/payouts/get-payout-legal-info) `GET https://theonlyapi.com/api/crm/your-crm-id/api2/v2/payouts/legal-info` Retrieves the creator's payout legal information. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. ✓ **Verified live** against a real OnlyFans account (2026-07-30); the `data` schema below is the real response shape. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — OnlyFans response — verified live; `data` is the real shape. - `success` (boolean) - `status_code` (integer) - `data` (object) - `isXXX` (boolean) - `isW9Required` (boolean) - `isW9Exist` (boolean) - `isRealIdImage` (boolean) - `canChangePayoutType` (boolean) - `ivStatus` (string) - `ivFailReason` (null) - `showIvButton` (boolean) - `canShowLegalForm` (boolean) - `payoutLegalApproveRejectReason` (null) - `hideBanking` (boolean) - `isCompany` (boolean) - `DAC7` (object) - `required` (boolean) - `type` (string) - `state` (string) - `error` (null) - `countryIds` (integer[]) - `DPR` (string[]) ## Example ```bash curl -X GET "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/payouts/legal-info" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Get payout transactions (/docs/of-api/payouts/get-payout-transactions) `GET https://theonlyapi.com/api/crm/your-crm-id/api2/v2/payouts/transactions` **OnlyFans only.** Requests made with a `user-id` belonging to a Fansly account are rejected — use the platform-neutral CRM data routes (`/notifications`, `/balances`, `/chats`, `/purchases`, `/subscribers/cached`, ...) which are Fansly-aware. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Query parameters - `startDate` (string) - `limit` (integer) — Default `50`. ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — Transaction list - `list` (object[]) - `hasMore` (boolean) - `marker` (string) - `nextMarker` (string) ## Example ```bash curl -X GET "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/payouts/transactions" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Get payout VAT info (/docs/of-api/payouts/get-payout-vat-info) `GET https://theonlyapi.com/api/crm/your-crm-id/api2/v2/payouts/vat` Retrieves the user's VAT information used for payouts (POST on the same path submits the VAT number). **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. ✓ **Verified live** against a real OnlyFans account (2026-07-30); the `data` schema below is the real response shape. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — OnlyFans response — verified live; `data` is the real shape. - `success` (boolean) - `status_code` (integer) - `data` (object) - `realFirstName` (string) - `realLastName` (string) - `creatorCompanyAddress` (null) - `creatorCompanyName` (null) - `creatorVatNumber` (string) - `creatorCountry` (null) - `creatorCountryCode` (null) ## Example ```bash curl -X GET "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/payouts/vat" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Get PayPal payment method info (/docs/of-api/payouts/get-paypal-payment-method-info) `GET https://theonlyapi.com/api/crm/your-crm-id/api2/v2/alternative-payment-methods/paypal` Returns the current PayPal alternative payment method configuration/status for the user. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. ✓ **Verified live** against a real OnlyFans account (2026-07-30); the `data` schema below is the real response shape. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — OnlyFans response — verified live; `data` is the real shape. - `success` (boolean) - `status_code` (integer) - `data` (object) - `paypalStatus` (any[]) ## Example ```bash curl -X GET "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/alternative-payment-methods/paypal" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Get referral earnings balance (/docs/of-api/payouts/get-referral-earnings-balance) `GET https://theonlyapi.com/api/crm/your-crm-id/api2/v2/payments/referrals/balance` **OnlyFans only.** Requests made with a `user-id` belonging to a Fansly account are rejected — use the platform-neutral CRM data routes (`/notifications`, `/balances`, `/chats`, `/purchases`, `/subscribers/cached`, ...) which are Fansly-aware. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — Referral balance - `balance` (number) ## Example ```bash curl -X GET "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/payments/referrals/balance" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Get referrals chart data (/docs/of-api/payouts/get-referrals-chart-data) `GET https://theonlyapi.com/api/crm/your-crm-id/api2/v2/payouts/referrals/chart` Time-series chart data for referral earnings with totals and delta. **OnlyFans only.** Requests made with a `user-id` belonging to a Fansly account are rejected — use the platform-neutral CRM data routes (`/notifications`, `/balances`, `/chats`, `/purchases`, `/subscribers/cached`, ...) which are Fansly-aware. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Query parameters - `startDate` (string) - `endDate` (string) - `withTotal` (integer) — Default `1`. ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — Referrals chart - `total` (number) — Total referral earnings for the period. - `delta` (number) — Change vs previous period. - `chartAmount` (number[]) — Earnings per time bucket. - `chartCount` (number[]) — Referral count per time bucket. ## Example ```bash curl -X GET "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/payouts/referrals/chart" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Get Stripe payout info (/docs/of-api/payouts/get-stripe-payout-info) `GET https://theonlyapi.com/api/crm/your-crm-id/api2/v2/payouts/stripe` Retrieves the creator's Stripe payout account information. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X GET "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/payouts/stripe" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Get Stripe payout legal info (/docs/of-api/payouts/get-stripe-payout-legal-info) `GET https://theonlyapi.com/api/crm/your-crm-id/api2/v2/payouts/stripe/legal` Retrieves the Stripe payout legal/agreement information for the creator. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X GET "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/payouts/stripe/legal" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Get UK company payout data (/docs/of-api/payouts/get-uk-company-payout-data) `GET https://theonlyapi.com/api/crm/your-crm-id/api2/v2/payouts/uk-company-data` Returns the creator's stored UK company details used for payouts/tax. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X GET "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/payouts/uk-company-data" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Get VAT info for payout request (/docs/of-api/payouts/get-vat-info-for-payout-request) `GET https://theonlyapi.com/api/crm/your-crm-id/api2/v2/payouts/requests/vat/{request_id}` Returns VAT details associated with a specific payout request. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Path parameters - `request_id` (string, required) — Id of the payout/VAT request. ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X GET "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/payouts/requests/vat/{request_id}" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # List alternative payment methods (/docs/of-api/payouts/list-alternative-payment-methods) `GET https://theonlyapi.com/api/crm/your-crm-id/api2/v2/alternative-payment-methods` Returns the available alternative (non-card) payment methods for the user. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. ✓ **Verified live** against a real OnlyFans account (2026-07-30); the `data` schema below is the real response shape. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — OnlyFans response — verified live; `data` is the real shape. - `success` (boolean) - `status_code` (integer) - `data` (any[]) ## Example ```bash curl -X GET "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/alternative-payment-methods" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # List chargebacks / disputes (/docs/of-api/payouts/list-chargebacks-disputes) `GET https://theonlyapi.com/api/crm/your-crm-id/api2/v2/payouts/chargebacks` Paginated list of chargeback transactions. Uses marker-based pagination. **OnlyFans only.** Requests made with a `user-id` belonging to a Fansly account are rejected — use the platform-neutral CRM data routes (`/notifications`, `/balances`, `/chats`, `/purchases`, `/subscribers/cached`, ...) which are Fansly-aware. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Query parameters - `limit` (integer) — Default `10`. - `startDate` (string) — Filter start date. - `endDate` (string) — Filter end date. ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — Chargeback list - `list` (object[]) - `marker` (number) — Pagination marker (unix timestamp). - `hasMore` (boolean) ## Example ```bash curl -X GET "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/payouts/chargebacks" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # List payout requests (/docs/of-api/payouts/list-payout-requests) `GET https://theonlyapi.com/api/crm/your-crm-id/api2/v2/payouts/requests` **OnlyFans only.** Requests made with a `user-id` belonging to a Fansly account are rejected — use the platform-neutral CRM data routes (`/notifications`, `/balances`, `/chats`, `/purchases`, `/subscribers/cached`, ...) which are Fansly-aware. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — Payout request history - `list` (object[]) - `state` (string) — e.g. 'new', 'completed', 'rejected'. - `rejectReason` (string) - `amount` (number) - `createdAt` (string) ## Example ```bash curl -X GET "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/payouts/requests" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # List payout-supported countries (/docs/of-api/payouts/list-payout-supported-countries) `GET https://theonlyapi.com/api/crm/your-crm-id/api2/v2/countries/payouts` Returns the list of countries supported/available for creator payouts. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. ✓ **Verified live** against a real OnlyFans account (2026-07-30); the `data` schema below is the real response shape. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — OnlyFans response — verified live; `data` is the real shape. - `success` (boolean) - `status_code` (integer) - `data` (object[]) - `id` (integer) - `code` (string) - `name` (string) - `hasStates` (boolean) - `hasZip` (boolean) - `canPay` (boolean) - `canHasW9Form` (boolean) ## Example ```bash curl -X GET "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/countries/payouts" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # List payout VAT records (/docs/of-api/payouts/list-payout-vat-records) `GET https://theonlyapi.com/api/crm/your-crm-id/api2/v2/payouts/vats` Retrieves the list of VAT records associated with the creator's payouts. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. ✓ **Verified live** against a real OnlyFans account (2026-07-30); the `data` schema below is the real response shape. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — OnlyFans response — verified live; `data` is the real shape. - `success` (boolean) - `status_code` (integer) - `data` (object) - `list` (any[]) ## Example ```bash curl -X GET "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/payouts/vats" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # List referral payout requests (/docs/of-api/payouts/list-referral-payout-requests-get) `GET https://theonlyapi.com/api/crm/your-crm-id/api2/v2/payouts/requests/referral` Paginated list of referral payout transactions. Uses marker-based pagination. **OnlyFans only.** Requests made with a `user-id` belonging to a Fansly account are rejected — use the platform-neutral CRM data routes (`/notifications`, `/balances`, `/chats`, `/purchases`, `/subscribers/cached`, ...) which are Fansly-aware. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Query parameters - `startDate` (string) - `endDate` (string) - `offset` (integer) — Default `0`. - `marker` (number) — Pagination marker from previous response. ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — Referral payout list - `list` (object[]) - `marker` (number) - `hasMore` (boolean) ## Example ```bash curl -X GET "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/payouts/requests/referral" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # List saved payment cards (/docs/of-api/payouts/list-saved-payment-cards) `GET https://theonlyapi.com/api/crm/your-crm-id/api2/v2/payments/cards` Returns the fan's saved payment cards. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. ✓ **Verified live** against a real OnlyFans account (2026-07-30); the `data` schema below is the real response shape. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — OnlyFans response — verified live; `data` is the real shape. - `success` (boolean) - `status_code` (integer) - `data` (any[]) ## Example ```bash curl -X GET "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/payments/cards" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # List Stripe payout requests (/docs/of-api/payouts/list-stripe-payout-requests) `GET https://theonlyapi.com/api/crm/your-crm-id/api2/v2/payouts/requests/stripe` Returns the creator's Stripe payout requests, paginated by lastPayoutId. The dynamic path segment is actually the querystring. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. ✓ **Verified live** against a real OnlyFans account (2026-07-30); the `data` schema below is the real response shape. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Query parameters - `limit` (string) — Max number of results. - `lastPayoutId` (string) — Cursor: return requests after this payout ID. ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — OnlyFans response — verified live; `data` is the real shape. - `success` (boolean) - `status_code` (integer) - `data` (object) - `list` (any[]) - `marker` (integer) ## Example ```bash curl -X GET "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/payouts/requests/stripe" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Pay via alternative method (/docs/of-api/payouts/pay-via-alternative-method) `POST https://theonlyapi.com/api/crm/your-crm-id/api2/v2/alternative-payment-methods/pay` Submits a payment through an alternative payment method (e.g. PayPal). Related GET/POST endpoints handle the alternative-payment-methods form and listing. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Request body Content type: `application/json` ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X POST "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/alternative-payment-methods/pay" \ -H "X-API-Key: " \ -H "user-id: …" \ -H "Content-Type: application/json" \ -d '{}' ``` --- # Save address (/docs/of-api/payouts/save-address) `POST https://theonlyapi.com/api/crm/your-crm-id/api2/v2/address` Submits/saves an address for the user; appears alongside payout/Stripe and country endpoints, suggesting a payout or billing address. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Request body Content type: `application/json` ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X POST "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/address" \ -H "X-API-Key: " \ -H "user-id: …" \ -H "Content-Type: application/json" \ -d '{}' ``` --- # Set default payment card (/docs/of-api/payouts/set-default-payment-card) `PUT https://theonlyapi.com/api/crm/your-crm-id/api2/v2/payments/cards/{card_id}/default` Marks the specified saved payment card as the account's default card. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Path parameters - `card_id` (string, required) — ID of the saved payment card. ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X PUT "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/payments/cards/{card_id}/default" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Submit a payment (/docs/of-api/payouts/submit-a-payment) `POST https://theonlyapi.com/api/crm/your-crm-id/api2/v2/payments/pay` Processes/submits a payment. Part of the payments module alongside 3ds-js and cards endpoints. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Request body Content type: `application/json` ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X POST "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/payments/pay" \ -H "X-API-Key: " \ -H "user-id: …" \ -H "Content-Type: application/json" \ -d '{}' ``` --- # Submit alternative payment method form (/docs/of-api/payouts/submit-alternative-payment-method-form) `POST https://theonlyapi.com/api/crm/your-crm-id/api2/v2/alternative-payment-methods/form` Submits the form for an alternative payment method. A GET on the same path retrieves the form definition. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Request body Content type: `application/json` ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X POST "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/alternative-payment-methods/form" \ -H "X-API-Key: " \ -H "user-id: …" \ -H "Content-Type: application/json" \ -d '{}' ``` --- # Submit DAC7 tax information (/docs/of-api/payouts/submit-dac7-tax-information) `POST https://theonlyapi.com/api/crm/your-crm-id/api2/v2/payouts/dac7` Submits the creator's DAC7 (EU tax reporting) information. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Request body Content type: `application/json` ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X POST "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/payouts/dac7" \ -H "X-API-Key: " \ -H "user-id: …" \ -H "Content-Type: application/json" \ -d '{}' ``` --- # Submit Instagram legal verification (/docs/of-api/payouts/submit-instagram-legal-verification) `POST https://theonlyapi.com/api/crm/your-crm-id/api2/v2/payouts/legal/instagram` Submits legal/identity verification information via an Instagram account for payouts. Sibling of payouts/legal and payouts/legal/twitter. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Request body Content type: `application/json` ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X POST "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/payouts/legal/instagram" \ -H "X-API-Key: " \ -H "user-id: …" \ -H "Content-Type: application/json" \ -d '{}' ``` --- # Submit payout legal information (/docs/of-api/payouts/submit-payout-legal-information) `POST https://theonlyapi.com/api/crm/your-crm-id/api2/v2/payouts/legal` Submits the creator's legal/identity information required for payouts. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Request body Content type: `application/json` ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X POST "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/payouts/legal" \ -H "X-API-Key: " \ -H "user-id: …" \ -H "Content-Type: application/json" \ -d '{}' ``` --- # Submit payout tax info (/docs/of-api/payouts/submit-payout-tax-info) `POST https://theonlyapi.com/api/crm/your-crm-id/api2/v2/payouts/tax` Submits creator tax information for the payouts flow. Body is passed as the payload property. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Request body Content type: `application/json` ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X POST "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/payouts/tax" \ -H "X-API-Key: " \ -H "user-id: …" \ -H "Content-Type: application/json" \ -d '{}' ``` --- # Submit QST tax information (/docs/of-api/payouts/submit-qst-tax-information) `POST https://theonlyapi.com/api/crm/your-crm-id/api2/v2/payouts/qst` Submits the creator's QST (Quebec sales tax) information. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Request body Content type: `application/json` ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X POST "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/payouts/qst" \ -H "X-API-Key: " \ -H "user-id: …" \ -H "Content-Type: application/json" \ -d '{}' ``` --- # Submit Stripe payout legal info (/docs/of-api/payouts/submit-stripe-payout-legal-info) `POST https://theonlyapi.com/api/crm/your-crm-id/api2/v2/payouts/stripe/legal` Submits legal information for a Stripe-based payout account. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Request body Content type: `application/json` ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X POST "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/payouts/stripe/legal" \ -H "X-API-Key: " \ -H "user-id: …" \ -H "Content-Type: application/json" \ -d '{}' ``` --- # Submit taxpayer identification number (/docs/of-api/payouts/submit-taxpayer-identification-number) `POST https://theonlyapi.com/api/crm/your-crm-id/api2/v2/payouts/tin` Submits the creator's taxpayer identification number (TIN) for payout tax compliance. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Request body Content type: `application/json` - `tin` (string) — Taxpayer identification number. ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X POST "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/payouts/tin" \ -H "X-API-Key: " \ -H "user-id: …" \ -H "Content-Type: application/json" \ -d '{}' ``` --- # Submit Twitter legal info (/docs/of-api/payouts/submit-twitter-legal-info) `POST https://theonlyapi.com/api/crm/your-crm-id/api2/v2/payouts/legal/twitter` Submits Twitter/X account legal verification information for the payouts legal flow. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Request body Content type: `application/json` ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X POST "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/payouts/legal/twitter" \ -H "X-API-Key: " \ -H "user-id: …" \ -H "Content-Type: application/json" \ -d '{}' ``` --- # Submit UK company payout data (/docs/of-api/payouts/submit-uk-company-payout-data) `POST https://theonlyapi.com/api/crm/your-crm-id/api2/v2/payouts/uk-company-data` Submits UK company data (for company/business payout accounts) as part of payout onboarding. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Request body Content type: `application/json` ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X POST "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/payouts/uk-company-data" \ -H "X-API-Key: " \ -H "user-id: …" \ -H "Content-Type: application/json" \ -d '{}' ``` --- # Submit VAT number (/docs/of-api/payouts/submit-vat-number) `POST https://theonlyapi.com/api/crm/your-crm-id/api2/v2/payouts/vat` Submits the creator's VAT registration number. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Request body Content type: `application/json` - `vat` (string) — VAT registration number. ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X POST "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/payouts/vat" \ -H "X-API-Key: " \ -H "user-id: …" \ -H "Content-Type: application/json" \ -d '{}' ``` --- # Submit W-9 address (/docs/of-api/payouts/submit-w-9-address) `POST https://theonlyapi.com/api/crm/your-crm-id/api2/v2/payouts/w9/address` Submits the address associated with the creator's W-9 tax form. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Request body Content type: `application/json` ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X POST "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/payouts/w9/address" \ -H "X-API-Key: " \ -H "user-id: …" \ -H "Content-Type: application/json" \ -d '{}' ``` --- # Submit W-9 tax form (/docs/of-api/payouts/submit-w-9-tax-form) `POST https://theonlyapi.com/api/crm/your-crm-id/api2/v2/payouts/w9` Submits the creator's IRS W-9 tax form data for payouts. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Request body Content type: `application/json` ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X POST "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/payouts/w9" \ -H "X-API-Key: " \ -H "user-id: …" \ -H "Content-Type: application/json" \ -d '{}' ``` --- # Update a saved payment card (/docs/of-api/payouts/update-a-saved-payment-card) `PUT https://theonlyapi.com/api/crm/your-crm-id/api2/v2/payments/cards/{card_id}` Updates the details of a saved payment card identified by card_id. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Path parameters - `card_id` (string, required) — Id of the saved payment card to update. ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Request body Content type: `application/json` ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X PUT "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/payments/cards/{card_id}" \ -H "X-API-Key: " \ -H "user-id: …" \ -H "Content-Type: application/json" \ -d '{}' ``` --- # Update bank payout details (/docs/of-api/payouts/update-bank-payout-details) `PATCH https://theonlyapi.com/api/crm/your-crm-id/api2/v2/payouts/bank` Partially updates the creator's bank account details used for payouts. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Request body Content type: `application/json` ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X PATCH "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/payouts/bank" \ -H "X-API-Key: " \ -H "user-id: …" \ -H "Content-Type: application/json" \ -d '{}' ``` --- # Verify a saved card (/docs/of-api/payouts/verify-a-saved-card) `POST https://theonlyapi.com/api/crm/your-crm-id/api2/v2/payments/cards/{card_id}/verify` Verifies a stored payment card identified by card id, optionally with verification data. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Path parameters - `card_id` (string, required) — ID of the saved payment card. ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Request body Content type: `application/json` ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X POST "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/payments/cards/{card_id}/verify" \ -H "X-API-Key: " \ -H "user-id: …" \ -H "Content-Type: application/json" \ -d '{}' ``` --- # Verify W9 TIN (/docs/of-api/payouts/verify-w9-tin) `POST https://theonlyapi.com/api/crm/your-crm-id/api2/v2/payouts/w9/tincheck` Runs a TIN (taxpayer ID) verification check for W9 payout tax information. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Request body Content type: `application/json` ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X POST "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/payouts/w9/tincheck" \ -H "X-API-Key: " \ -H "user-id: …" \ -H "Content-Type: application/json" \ -d '{}' ``` --- # Promotions (/docs/of-api/promotions) {/* Generated by scripts/gen-api.ts — edit that script, not this file. */} OnlyFans promotions & trials (via proxy). **OnlyFans only** — Fansly accounts are rejected on this surface. | Method | Endpoint | Path | | -------- | -------------------------------------------------------------------------------------- | ------------------------------------------- | | `DELETE` | [Delete campaign](/docs/of-api/promotions/delete-campaign) | `/api2/v2/campaigns/{campaign_id}` | | `POST` | [Transition a campaign state](/docs/of-api/promotions/transition-a-campaign-state) | `/api2/v2/campaigns/transition` | | `GET` | [Get promotions](/docs/of-api/promotions/get-promotions) | `/api2/v2/promotions` | | `DELETE` | [Delete promotion](/docs/of-api/promotions/delete-promotion) | `/api2/v2/promotions/{promotion_id}` | | `POST` | [Finish a promotion](/docs/of-api/promotions/finish-a-promotion) | `/api2/v2/promotions/{promotion_id}/finish` | | `POST` | [Claim a promotion by code](/docs/of-api/promotions/claim-a-promotion-by-code) | `/api2/v2/promotions/claim` | | `POST` | [Send promotion invite](/docs/of-api/promotions/send-promotion-invite) | `/api2/v2/promotions/invite` | | `GET` | [Get promotion offer by ID](/docs/of-api/promotions/get-promotion-offer-by-id) | `/api2/v2/promotions/offer/{offer_id}` | | `DELETE` | [Delete a promotion offer](/docs/of-api/promotions/delete-a-promotion-offer) | `/api2/v2/promotions/offer/{offer_id}` | | `GET` | [Get active promotional offers](/docs/of-api/promotions/get-active-promotional-offers) | `/api2/v2/promotions/offers` | | `POST` | [Hide promotion offers](/docs/of-api/promotions/hide-promotion-offers) | `/api2/v2/promotions/offers/hide` | | `GET` | [Get free trial links](/docs/of-api/promotions/get-free-trial-links) | `/api2/v2/trials` | | `POST` | [Create a free trial link](/docs/of-api/promotions/create-a-free-trial-link) | `/api2/v2/trials` | | `PUT` | [Update trial link](/docs/of-api/promotions/update-trial-link) | `/api2/v2/trials/{trial_id}` | | `DELETE` | [Delete a trial link](/docs/of-api/promotions/delete-a-trial-link) | `/api2/v2/trials/{trial_id}` | | `POST` | [Check and reserve trial code](/docs/of-api/promotions/check-and-reserve-trial-code) | `/api2/v2/trials/check` | | `POST` | [Claim free trial by code](/docs/of-api/promotions/claim-free-trial-by-code) | `/api2/v2/trials/claim` | | `POST` | [Share trial access](/docs/of-api/promotions/share-trial-access) | `/api2/v2/trials/share-access` | | `DELETE` | [Revoke trial share access](/docs/of-api/promotions/revoke-trial-share-access) | `/api2/v2/trials/share-access` | | `GET` | [Get user promotions](/docs/of-api/promotions/get-user-promotions) | `/api2/v2/users/promotions` | --- # Check and reserve trial code (/docs/of-api/promotions/check-and-reserve-trial-code) `POST https://theonlyapi.com/api/crm/your-crm-id/api2/v2/trials/check` Validates a free-trial link code and reserves it for the current user. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Request body Content type: `application/json` - `code` (string) — Trial link code to validate. - `reserve` (boolean) — Reserve the trial (sent as true). ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X POST "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/trials/check" \ -H "X-API-Key: " \ -H "user-id: …" \ -H "Content-Type: application/json" \ -d '{}' ``` --- # Claim a promotion by code (/docs/of-api/promotions/claim-a-promotion-by-code) `POST https://theonlyapi.com/api/crm/your-crm-id/api2/v2/promotions/claim` Claims a promotional offer using a promo code. Sends the code with a strictAuthCheck flag. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Request body Content type: `application/json` - `code` (string) — Promotion code to claim. - `strictAuthCheck` (integer) — Auth-check flag, sent as 1. ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X POST "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/promotions/claim" \ -H "X-API-Key: " \ -H "user-id: …" \ -H "Content-Type: application/json" \ -d '{}' ``` --- # Claim free trial by code (/docs/of-api/promotions/claim-free-trial-by-code) `POST https://theonlyapi.com/api/crm/your-crm-id/api2/v2/trials/claim` Claims a free-trial subscription offer using a trial code. The code is sent in the request body. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Request body Content type: `application/json` - `code` (string) — Trial/promo code to claim. ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X POST "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/trials/claim" \ -H "X-API-Key: " \ -H "user-id: …" \ -H "Content-Type: application/json" \ -d '{}' ``` --- # Create a free trial link (/docs/of-api/promotions/create-a-free-trial-link) `POST https://theonlyapi.com/api/crm/your-crm-id/api2/v2/trials` **OnlyFans only.** Requests made with a `user-id` belonging to a Fansly account are rejected — use the platform-neutral CRM data routes (`/notifications`, `/balances`, `/chats`, `/purchases`, `/subscribers/cached`, ...) which are Fansly-aware. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — Trial created ## Example ```bash curl -X POST "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/trials" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Delete a promotion offer (/docs/of-api/promotions/delete-a-promotion-offer) `DELETE https://theonlyapi.com/api/crm/your-crm-id/api2/v2/promotions/offer/{offer_id}` Deletes a single promotion offer identified by offer_id. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Path parameters - `offer_id` (string, required) — ID of the promotion offer to delete. ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X DELETE "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/promotions/offer/{offer_id}" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Delete a trial link (/docs/of-api/promotions/delete-a-trial-link) `DELETE https://theonlyapi.com/api/crm/your-crm-id/api2/v2/trials/{trial_id}` Deletes a free-trial subscription link/campaign identified by trial id. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Path parameters - `trial_id` (string, required) — ID of the trial to delete. ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X DELETE "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/trials/{trial_id}" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Delete campaign (/docs/of-api/promotions/delete-campaign) `DELETE https://theonlyapi.com/api/crm/your-crm-id/api2/v2/campaigns/{campaign_id}` Deletes a promotional campaign by id. Grouped with campaign share-access, claimers and trials endpoints. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Path parameters - `campaign_id` (string, required) — ID of the campaign to delete. ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X DELETE "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/campaigns/{campaign_id}" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Delete promotion (/docs/of-api/promotions/delete-promotion) `DELETE https://theonlyapi.com/api/crm/your-crm-id/api2/v2/promotions/{promotion_id}` Deletes a subscription promotion by its ID. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Path parameters - `promotion_id` (string, required) — ID of the promotion to delete. ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X DELETE "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/promotions/{promotion_id}" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Finish a promotion (/docs/of-api/promotions/finish-a-promotion) `POST https://theonlyapi.com/api/crm/your-crm-id/api2/v2/promotions/{promotion_id}/finish` Ends/finishes an active promotion campaign identified by promotion id. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Path parameters - `promotion_id` (string, required) — ID of the promotion to finish. ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X POST "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/promotions/{promotion_id}/finish" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Get active promotional offers (/docs/of-api/promotions/get-active-promotional-offers) `GET https://theonlyapi.com/api/crm/your-crm-id/api2/v2/promotions/offers` **OnlyFans only.** Requests made with a `user-id` belonging to a Fansly account are rejected — use the platform-neutral CRM data routes (`/notifications`, `/balances`, `/chats`, `/purchases`, `/subscribers/cached`, ...) which are Fansly-aware. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — Offers list - `[]` array of: - `id` (integer) - `type` (string) — Promotion type, e.g. 'promotion' or 'free_trial'. - `message` (string) - `rawMessage` (string) - `price` (number) — Discounted subscription price. - `subscribeDays` (integer) — Duration the promo subscription lasts. - `subscribeCounts` (integer) - `claimsCount` (integer) - `canClaim` (boolean) - `hasRelatedPromo` (boolean) - `isFinished` (boolean) - `createdAt` (string) - `finishedAt` (string) ## Example ```bash curl -X GET "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/promotions/offers" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Get free trial links (/docs/of-api/promotions/get-free-trial-links) `GET https://theonlyapi.com/api/crm/your-crm-id/api2/v2/trials` **OnlyFans only.** Requests made with a `user-id` belonging to a Fansly account are rejected — use the platform-neutral CRM data routes (`/notifications`, `/balances`, `/chats`, `/purchases`, `/subscribers/cached`, ...) which are Fansly-aware. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Query parameters - `limit` (integer) — Default `10`. - `offset` (integer) — Default `0`. ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — Trial links - `list` (object[]) - `id` (integer) - `code` (string) — Trial link code. - `isFinished` (boolean) - `sharedWith` (object[]) - `hasMore` (boolean) ## Example ```bash curl -X GET "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/trials" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Get promotion offer by ID (/docs/of-api/promotions/get-promotion-offer-by-id) `GET https://theonlyapi.com/api/crm/your-crm-id/api2/v2/promotions/offer/{offer_id}` Fetches a single promotion offer by its ID. Sibling calls in the module handle claiming trials/promotions and confirming emails. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Path parameters - `offer_id` (string, required) — ID of the promotion offer to retrieve. ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X GET "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/promotions/offer/{offer_id}" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Get promotions (/docs/of-api/promotions/get-promotions) `GET https://theonlyapi.com/api/crm/your-crm-id/api2/v2/promotions` **OnlyFans only.** Requests made with a `user-id` belonging to a Fansly account are rejected — use the platform-neutral CRM data routes (`/notifications`, `/balances`, `/chats`, `/purchases`, `/subscribers/cached`, ...) which are Fansly-aware. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Query parameters - `limit` (integer) — Default `10`. - `offset` (integer) — Default `0`. ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — Promotions list, wrapped in the passthrough envelope NOTE: the array is under `data.items` (NOT `data.list`). OnlyFans ignores `limit` here — page with `offset` and watch `hasMore`. - `success` (boolean) - `status_code` (integer) - `data` (object) - `items` (object[]) - `id` (integer) - `type` (string) — Promotion type, e.g. 'promotion' or 'free_trial'. - `message` (string) - `rawMessage` (string) - `price` (number) — Discounted subscription price. - `subscribeDays` (integer) — Duration the promo subscription lasts. - `subscribeCounts` (integer) - `claimsCount` (integer) - `canClaim` (boolean) - `hasRelatedPromo` (boolean) - `isFinished` (boolean) - `createdAt` (string) - `finishedAt` (string) - `hasMore` (boolean) ## Example ```bash curl -X GET "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/promotions" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Get user promotions (/docs/of-api/promotions/get-user-promotions) `GET https://theonlyapi.com/api/crm/your-crm-id/api2/v2/users/promotions` Retrieves promotions available to the current user. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. ✓ **Verified live** against a real OnlyFans account (2026-07-30); the `data` schema below is the real response shape. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — OnlyFans response — verified live; `data` is the real shape. - `success` (boolean) - `status_code` (integer) - `data` (object[]) - `imageSrc` (string) - `url` (string) ## Example ```bash curl -X GET "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/users/promotions" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Hide promotion offers (/docs/of-api/promotions/hide-promotion-offers) `POST https://theonlyapi.com/api/crm/your-crm-id/api2/v2/promotions/offers/hide` Hides the current promotion offers from view. Defined alongside promotions/offers list and delete calls. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X POST "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/promotions/offers/hide" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Revoke trial share access (/docs/of-api/promotions/revoke-trial-share-access) `DELETE https://theonlyapi.com/api/crm/your-crm-id/api2/v2/trials/share-access` Revokes shared free-trial access. The request carries a body via the delete data option. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X DELETE "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/trials/share-access" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Send promotion invite (/docs/of-api/promotions/send-promotion-invite) `POST https://theonlyapi.com/api/crm/your-crm-id/api2/v2/promotions/invite` Sends an invitation for a promotion/promo offer. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Request body Content type: `application/json` ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X POST "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/promotions/invite" \ -H "X-API-Key: " \ -H "user-id: …" \ -H "Content-Type: application/json" \ -d '{}' ``` --- # Share trial access (/docs/of-api/promotions/share-trial-access) `POST https://theonlyapi.com/api/crm/your-crm-id/api2/v2/trials/share-access` Creates a shared free-trial access grant. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Request body Content type: `application/json` ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X POST "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/trials/share-access" \ -H "X-API-Key: " \ -H "user-id: …" \ -H "Content-Type: application/json" \ -d '{}' ``` --- # Transition a campaign state (/docs/of-api/promotions/transition-a-campaign-state) `POST https://theonlyapi.com/api/crm/your-crm-id/api2/v2/campaigns/transition` Transitions a promotional campaign to a new state/status. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Request body Content type: `application/json` ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X POST "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/campaigns/transition" \ -H "X-API-Key: " \ -H "user-id: …" \ -H "Content-Type: application/json" \ -d '{}' ``` --- # Update trial link (/docs/of-api/promotions/update-trial-link) `PUT https://theonlyapi.com/api/crm/your-crm-id/api2/v2/trials/{trial_id}` Updates a trial-subscription link by ID (e.g. finishes/deactivates it). No request body is sent. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Path parameters - `trial_id` (string, required) — ID of the trial link. ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X PUT "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/trials/{trial_id}" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Stories (/docs/of-api/stories) {/* Generated by scripts/gen-api.ts — edit that script, not this file. */} OnlyFans stories (via proxy). **OnlyFans only** — Fansly accounts are rejected on this surface. | Method | Endpoint | Path | | -------- | --------------------------------------------------------------------------- | --------------------------------------------- | | `POST` | [Create story](/docs/of-api/stories/create-story) | `/api2/v2/stories` | | `POST` | [Like a story](/docs/of-api/stories/like-a-story) | `/api2/v2/stories/{story_id}/like` | | `DELETE` | [Unlike a story](/docs/of-api/stories/unlike-a-story) | `/api2/v2/stories/{story_id}/like` | | `GET` | [List story viewers](/docs/of-api/stories/list-story-viewers) | `/api2/v2/stories/{story_id}/viewers` | | `PUT` | [Mark story as watched](/docs/of-api/stories/mark-story-as-watched) | `/api2/v2/stories/{story_id}/watched` | | `DELETE` | [Delete a story answer](/docs/of-api/stories/delete-a-story-answer) | `/api2/v2/stories/answer/{answer_id}` | | `GET` | [Get archived stories](/docs/of-api/stories/get-archived-stories) | `/api2/v2/stories/archive` | | `POST` | [Create a story highlight](/docs/of-api/stories/create-a-story-highlight) | `/api2/v2/stories/highlights` | | `POST` | [Block user from stories](/docs/of-api/stories/block-user-from-stories) | `/api2/v2/stories/users/{user_id}/block` | | `DELETE` | [Unblock user from stories](/docs/of-api/stories/unblock-user-from-stories) | `/api2/v2/stories/users/{user_id}/block` | | `GET` | [List story-blocked users](/docs/of-api/stories/list-story-blocked-users) | `/api2/v2/stories/users/blocked` | | `GET` | [Get user's stories](/docs/of-api/stories/get-user-s-stories) | `/api2/v2/users/{user_id}/stories` | | `GET` | [Get story highlights](/docs/of-api/stories/get-story-highlights) | `/api2/v2/users/{user_id}/stories/highlights` | | `GET` | [Get your active stories](/docs/of-api/stories/get-your-active-stories) | `/api2/v2/users/me/stories` | | `POST` | [Create a new story](/docs/of-api/stories/create-a-new-story) | `/api2/v2/users/me/stories` | --- # Block user from stories (/docs/of-api/stories/block-user-from-stories) `POST https://theonlyapi.com/api/crm/your-crm-id/api2/v2/stories/users/{user_id}/block` Blocks the specified user from viewing the creator's stories. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Path parameters - `user_id` (string, required) — Id of the user to block from stories. ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X POST "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/stories/users/{user_id}/block" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Create a new story (/docs/of-api/stories/create-a-new-story) `POST https://theonlyapi.com/api/crm/your-crm-id/api2/v2/users/me/stories` Post a new story. Stories expire after 24 hours. **Attaching media:** `POST /accounts/{of_user_id}/media` (raw bytes or a `source_url` we fetch for you) returns a `media` object — pass it through here. Media already in the vault is referenced by its integer ID from `GET /api2/v2/vault/media`. **OnlyFans only.** Requests made with a `user-id` belonging to a Fansly account are rejected — use the platform-neutral CRM data routes (`/notifications`, `/balances`, `/chats`, `/purchases`, `/subscribers/cached`, ...) which are Fansly-aware. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Request body Content type: `application/json` (required) - `media` (integer[]) — Array of media IDs from vault upload. At least one required. e.g. `[12345]`. - `question` (string) — Optional question text to display on the story (interactive Q&A). e.g. `"What should I post next?"`. ## Responses ### 200 — Story created - `id` (integer) - `userId` (integer) - `createdAt` (string) - `expiredAt` (string) - `isReady` (boolean) - `isWatched` (boolean) - `media` (object[]) - `id` (integer) — Stable OnlyFans media ID — the only persistent identifier for the item. - `type` ("photo" | "video" | "audio" | "gif") - `createdAt` (string) - `duration` (integer) — Duration in seconds (video/audio; 0 for photos). - `convertedToVideo` (boolean) - `canView` (boolean) - `isReady` (boolean) — False while OnlyFans is still processing/transcoding the upload. - `hasError` (boolean) - `hasPosts` (boolean) — Whether the media is attached to any post. - `hasCustomPreview` (boolean) - `counters` (object) — Engagement counters (present on the vault view). - `buyersCount` (integer) - `likesCount` (integer) - `tipsSumm` (number) - `listStates` (object[]) — Which vault lists (folders) this media belongs to. - `id` (integer) — Vault list ID. - `name` (string) — Vault list name. - `hasMedia` (boolean) - `canAddMedia` (boolean) - `files` (object) — Signed, time-limited CDN URLs at several resolutions. `size` is frequently `0` — do not rely on it. - `full` (object) - `preview` (object) - `thumb` (object) - `squarePreview` (object) - `videoSources` (object) — Per-resolution video URLs (e.g. `240`, `720`); entries are null when not applicable. - `question` (string) ## Example ```bash curl -X POST "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/users/me/stories" \ -H "X-API-Key: " \ -H "user-id: …" \ -H "Content-Type: application/json" \ -d '{"media":[12345],"question":"What should I post next?"}' ``` --- # Create a story highlight (/docs/of-api/stories/create-a-story-highlight) `POST https://theonlyapi.com/api/crm/your-crm-id/api2/v2/stories/highlights` Save stories to a permanent highlight collection on your profile. Stories in highlights don't expire. **OnlyFans only.** Requests made with a `user-id` belonging to a Fansly account are rejected — use the platform-neutral CRM data routes (`/notifications`, `/balances`, `/chats`, `/purchases`, `/subscribers/cached`, ...) which are Fansly-aware. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Request body Content type: `application/json` (required) - `title` (string) — Highlight title/name. e.g. `"Best Moments ✨"`. - `storyIds` (integer[]) — Story IDs to include in the highlight. e.g. `[111,222,333]`. - `cover` (integer) — Story ID to use as the highlight cover image. ## Responses ### 200 — Highlight created ## Example ```bash curl -X POST "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/stories/highlights" \ -H "X-API-Key: " \ -H "user-id: …" \ -H "Content-Type: application/json" \ -d '{"title":"Best Moments ✨","storyIds":[111,222,333]}' ``` --- # Create story (/docs/of-api/stories/create-story) `POST https://theonlyapi.com/api/crm/your-crm-id/api2/v2/stories` Creates a new story for the current user. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Request body Content type: `application/json` ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X POST "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/stories" \ -H "X-API-Key: " \ -H "user-id: …" \ -H "Content-Type: application/json" \ -d '{}' ``` --- # Delete a story answer (/docs/of-api/stories/delete-a-story-answer) `DELETE https://theonlyapi.com/api/crm/your-crm-id/api2/v2/stories/answer/{answer_id}` Deletes a viewer's answer/reply to a story (e.g. story question sticker) identified by answer id. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Path parameters - `answer_id` (string, required) — ID of the story answer to delete. ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X DELETE "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/stories/answer/{answer_id}" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Get archived stories (/docs/of-api/stories/get-archived-stories) `GET https://theonlyapi.com/api/crm/your-crm-id/api2/v2/stories/archive` **OnlyFans only.** Requests made with a `user-id` belonging to a Fansly account are rejected — use the platform-neutral CRM data routes (`/notifications`, `/balances`, `/chats`, `/purchases`, `/subscribers/cached`, ...) which are Fansly-aware. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — Archived stories - `[]` array of: - `id` (integer) - `userId` (integer) - `createdAt` (string) - `expiredAt` (string) - `isReady` (boolean) - `isWatched` (boolean) - `media` (object[]) - `id` (integer) — Stable OnlyFans media ID — the only persistent identifier for the item. - `type` ("photo" | "video" | "audio" | "gif") - `createdAt` (string) - `duration` (integer) — Duration in seconds (video/audio; 0 for photos). - `convertedToVideo` (boolean) - `canView` (boolean) - `isReady` (boolean) — False while OnlyFans is still processing/transcoding the upload. - `hasError` (boolean) - `hasPosts` (boolean) — Whether the media is attached to any post. - `hasCustomPreview` (boolean) - `counters` (object) — Engagement counters (present on the vault view). - `buyersCount` (integer) - `likesCount` (integer) - `tipsSumm` (number) - `listStates` (object[]) — Which vault lists (folders) this media belongs to. - `id` (integer) — Vault list ID. - `name` (string) — Vault list name. - `hasMedia` (boolean) - `canAddMedia` (boolean) - `files` (object) — Signed, time-limited CDN URLs at several resolutions. `size` is frequently `0` — do not rely on it. - `full` (object) - `preview` (object) - `thumb` (object) - `squarePreview` (object) - `videoSources` (object) — Per-resolution video URLs (e.g. `240`, `720`); entries are null when not applicable. - `question` (string) ## Example ```bash curl -X GET "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/stories/archive" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Get story highlights (/docs/of-api/stories/get-story-highlights) `GET https://theonlyapi.com/api/crm/your-crm-id/api2/v2/users/{user_id}/stories/highlights` **OnlyFans only.** Requests made with a `user-id` belonging to a Fansly account are rejected — use the platform-neutral CRM data routes (`/notifications`, `/balances`, `/chats`, `/purchases`, `/subscribers/cached`, ...) which are Fansly-aware. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Path parameters - `user_id` (string, required) ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — Highlights list - `[]` array of: - `id` (integer) - `title` (string) - `cover` (string) — Cover image URL. - `stories` (object[]) - `id` (integer) - `userId` (integer) - `createdAt` (string) - `expiredAt` (string) - `isReady` (boolean) - `isWatched` (boolean) - `media` (object[]) - `id` (integer) — Stable OnlyFans media ID — the only persistent identifier for the item. - `type` ("photo" | "video" | "audio" | "gif") - `createdAt` (string) - `duration` (integer) — Duration in seconds (video/audio; 0 for photos). - `convertedToVideo` (boolean) - `canView` (boolean) - `isReady` (boolean) — False while OnlyFans is still processing/transcoding the upload. - `hasError` (boolean) - `hasPosts` (boolean) — Whether the media is attached to any post. - `hasCustomPreview` (boolean) - `counters` (object) — Engagement counters (present on the vault view). - `listStates` (object[]) — Which vault lists (folders) this media belongs to. - `files` (object) — Signed, time-limited CDN URLs at several resolutions. `size` is frequently `0` — do not rely on it. - `videoSources` (object) — Per-resolution video URLs (e.g. `240`, `720`); entries are null when not applicable. - `question` (string) ## Example ```bash curl -X GET "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/users/{user_id}/stories/highlights" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Get user's stories (/docs/of-api/stories/get-user-s-stories) `GET https://theonlyapi.com/api/crm/your-crm-id/api2/v2/users/{user_id}/stories` **OnlyFans only.** Requests made with a `user-id` belonging to a Fansly account are rejected — use the platform-neutral CRM data routes (`/notifications`, `/balances`, `/chats`, `/purchases`, `/subscribers/cached`, ...) which are Fansly-aware. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Path parameters - `user_id` (string, required) ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — Story list - `[]` array of: - `id` (integer) - `userId` (integer) - `createdAt` (string) - `expiredAt` (string) - `isReady` (boolean) - `isWatched` (boolean) - `media` (object[]) - `id` (integer) — Stable OnlyFans media ID — the only persistent identifier for the item. - `type` ("photo" | "video" | "audio" | "gif") - `createdAt` (string) - `duration` (integer) — Duration in seconds (video/audio; 0 for photos). - `convertedToVideo` (boolean) - `canView` (boolean) - `isReady` (boolean) — False while OnlyFans is still processing/transcoding the upload. - `hasError` (boolean) - `hasPosts` (boolean) — Whether the media is attached to any post. - `hasCustomPreview` (boolean) - `counters` (object) — Engagement counters (present on the vault view). - `buyersCount` (integer) - `likesCount` (integer) - `tipsSumm` (number) - `listStates` (object[]) — Which vault lists (folders) this media belongs to. - `id` (integer) — Vault list ID. - `name` (string) — Vault list name. - `hasMedia` (boolean) - `canAddMedia` (boolean) - `files` (object) — Signed, time-limited CDN URLs at several resolutions. `size` is frequently `0` — do not rely on it. - `full` (object) - `preview` (object) - `thumb` (object) - `squarePreview` (object) - `videoSources` (object) — Per-resolution video URLs (e.g. `240`, `720`); entries are null when not applicable. - `question` (string) ## Example ```bash curl -X GET "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/users/{user_id}/stories" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Get your active stories (/docs/of-api/stories/get-your-active-stories) `GET https://theonlyapi.com/api/crm/your-crm-id/api2/v2/users/me/stories` **OnlyFans only.** Requests made with a `user-id` belonging to a Fansly account are rejected — use the platform-neutral CRM data routes (`/notifications`, `/balances`, `/chats`, `/purchases`, `/subscribers/cached`, ...) which are Fansly-aware. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — Story list - `[]` array of: - `id` (integer) - `userId` (integer) - `createdAt` (string) - `expiredAt` (string) - `isReady` (boolean) - `isWatched` (boolean) - `media` (object[]) - `id` (integer) — Stable OnlyFans media ID — the only persistent identifier for the item. - `type` ("photo" | "video" | "audio" | "gif") - `createdAt` (string) - `duration` (integer) — Duration in seconds (video/audio; 0 for photos). - `convertedToVideo` (boolean) - `canView` (boolean) - `isReady` (boolean) — False while OnlyFans is still processing/transcoding the upload. - `hasError` (boolean) - `hasPosts` (boolean) — Whether the media is attached to any post. - `hasCustomPreview` (boolean) - `counters` (object) — Engagement counters (present on the vault view). - `buyersCount` (integer) - `likesCount` (integer) - `tipsSumm` (number) - `listStates` (object[]) — Which vault lists (folders) this media belongs to. - `id` (integer) — Vault list ID. - `name` (string) — Vault list name. - `hasMedia` (boolean) - `canAddMedia` (boolean) - `files` (object) — Signed, time-limited CDN URLs at several resolutions. `size` is frequently `0` — do not rely on it. - `full` (object) - `preview` (object) - `thumb` (object) - `squarePreview` (object) - `videoSources` (object) — Per-resolution video URLs (e.g. `240`, `720`); entries are null when not applicable. - `question` (string) ## Example ```bash curl -X GET "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/users/me/stories" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Like a story (/docs/of-api/stories/like-a-story) `POST https://theonlyapi.com/api/crm/your-crm-id/api2/v2/stories/{story_id}/like` Likes the story identified by story_id. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Path parameters - `story_id` (string, required) — ID of the story to like. ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X POST "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/stories/{story_id}/like" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # List story-blocked users (/docs/of-api/stories/list-story-blocked-users) `GET https://theonlyapi.com/api/crm/your-crm-id/api2/v2/stories/users/blocked` Returns users blocked from viewing the current user's stories. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. ✓ **Verified live** against a real OnlyFans account (2026-07-30); the `data` schema below is the real response shape. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — OnlyFans response — verified live; `data` is the real shape. - `success` (boolean) - `status_code` (integer) - `data` (any[]) ## Example ```bash curl -X GET "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/stories/users/blocked" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # List story viewers (/docs/of-api/stories/list-story-viewers) `GET https://theonlyapi.com/api/crm/your-crm-id/api2/v2/stories/{story_id}/viewers` Returns the list of viewers for a story, with pagination; a variant filters to only viewers who tipped. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Path parameters - `story_id` (string, required) — Id of the story. ## Query parameters - `limit` (string) — Page size. - `offset` (string) — Pagination offset. - `onlyWithTips` (string) — Return only viewers who tipped (used by one variant). ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X GET "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/stories/{story_id}/viewers" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Mark story as watched (/docs/of-api/stories/mark-story-as-watched) `PUT https://theonlyapi.com/api/crm/your-crm-id/api2/v2/stories/{story_id}/watched` Marks a story as watched/seen by the current user. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Path parameters - `story_id` (string, required) — ID of the story to mark watched. ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X PUT "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/stories/{story_id}/watched" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Unblock user from stories (/docs/of-api/stories/unblock-user-from-stories) `DELETE https://theonlyapi.com/api/crm/your-crm-id/api2/v2/stories/users/{user_id}/block` Removes a user from the story block list (unblocks them from viewing stories). **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Path parameters - `user_id` (string, required) — ID of the user to unblock. ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X DELETE "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/stories/users/{user_id}/block" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Unlike a story (/docs/of-api/stories/unlike-a-story) `DELETE https://theonlyapi.com/api/crm/your-crm-id/api2/v2/stories/{story_id}/like` Removes a like from the specified story. Paired with a POST on the same path to like it. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Path parameters - `story_id` (string, required) — ID of the story to unlike. ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X DELETE "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/stories/{story_id}/like" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Streams (/docs/of-api/streams) {/* Generated by scripts/gen-api.ts — edit that script, not this file. */} OnlyFans live streams (via proxy). **OnlyFans only** — Fansly accounts are rejected on this surface. | Method | Endpoint | Path | | -------- | --------------------------------------------------------------------------------------- | -------------------------------------------------------- | | `POST` | [Create / start a live stream](/docs/of-api/streams/create-start-a-live-stream) | `/api2/v2/streams` | | `GET` | [Get stream details](/docs/of-api/streams/get-stream-details) | `/api2/v2/streams/{stream_id}` | | `PATCH` | [Update a stream](/docs/of-api/streams/update-a-stream) | `/api2/v2/streams/{stream_id}` | | `DELETE` | [Delete a stream](/docs/of-api/streams/delete-a-stream) | `/api2/v2/streams/{stream_id}` | | `POST` | [Accept dual-stream invite](/docs/of-api/streams/accept-dual-stream-invite) | `/api2/v2/streams/{stream_id}/accept` | | `GET` | [Check if stream active](/docs/of-api/streams/check-if-stream-active) | `/api2/v2/streams/{stream_id}/active` | | `POST` | [Block stream viewer](/docs/of-api/streams/block-stream-viewer) | `/api2/v2/streams/{stream_id}/block` | | `POST` | [Cancel dual-stream request](/docs/of-api/streams/cancel-dual-stream-request) | `/api2/v2/streams/{stream_id}/cancel` | | `GET` | [Get a single stream comment](/docs/of-api/streams/get-a-single-stream-comment) | `/api2/v2/streams/{stream_id}/comments/{comment_id}` | | `DELETE` | [Delete stream comment](/docs/of-api/streams/delete-stream-comment) | `/api2/v2/streams/{stream_id}/comments/{comment_id}` | | `POST` | [Pin a stream comment](/docs/of-api/streams/pin-a-stream-comment) | `/api2/v2/streams/{stream_id}/comments/{comment_id}/pin` | | `DELETE` | [Unpin a stream comment](/docs/of-api/streams/unpin-a-stream-comment) | `/api2/v2/streams/{stream_id}/comments/{comment_id}/pin` | | `PUT` | [Save live stream cover](/docs/of-api/streams/save-live-stream-cover) | `/api2/v2/streams/{stream_id}/cover` | | `GET` | [Fetch stream covers](/docs/of-api/streams/fetch-stream-covers) | `/api2/v2/streams/{stream_id}/covers` | | `POST` | [Decline dual-stream invite](/docs/of-api/streams/decline-dual-stream-invite) | `/api2/v2/streams/{stream_id}/decline` | | `PUT` | [Finish a live stream](/docs/of-api/streams/finish-a-live-stream) | `/api2/v2/streams/{stream_id}/finish` | | `POST` | [Hide stream](/docs/of-api/streams/hide-stream) | `/api2/v2/streams/{stream_id}/hide` | | `GET` | [Check if current user is viewer](/docs/of-api/streams/check-if-current-user-is-viewer) | `/api2/v2/streams/{stream_id}/is-viewer` | | `POST` | [Join a dual stream](/docs/of-api/streams/join-a-dual-stream) | `/api2/v2/streams/{stream_id}/join` | | `POST` | [Kick a user from stream](/docs/of-api/streams/kick-a-user-from-stream) | `/api2/v2/streams/{stream_id}/kick` | | `POST` | [Add likes to stream](/docs/of-api/streams/add-likes-to-stream) | `/api2/v2/streams/{stream_id}/likes` | | `POST` | [Mark viewing a stream](/docs/of-api/streams/mark-viewing-a-stream) | `/api2/v2/streams/{stream_id}/look` | | `DELETE` | [Stop looking at a stream](/docs/of-api/streams/stop-looking-at-a-stream) | `/api2/v2/streams/{stream_id}/look` | | `PUT` | [Save stream as a post](/docs/of-api/streams/save-stream-as-a-post) | `/api2/v2/streams/{stream_id}/make-post` | | `POST` | [Set stream reminder](/docs/of-api/streams/set-stream-reminder) | `/api2/v2/streams/{stream_id}/reminder` | | `DELETE` | [Remove stream reminder](/docs/of-api/streams/remove-stream-reminder) | `/api2/v2/streams/{stream_id}/reminder` | | `GET` | [Get stream statistics](/docs/of-api/streams/get-stream-statistics) | `/api2/v2/streams/{stream_id}/stats` | | `POST` | [Share stream to Twitter](/docs/of-api/streams/share-stream-to-twitter) | `/api2/v2/streams/{stream_id}/tweet` | | `DELETE` | [Remove a user's stream comments](/docs/of-api/streams/remove-a-user-s-stream-comments) | `/api2/v2/streams/{stream_id}/user/{user_id}/comments` | | `POST` | [Accept dual-stream request](/docs/of-api/streams/accept-dual-stream-request) | `/api2/v2/streams/{stream_id}/users/{user_id}/accept` | | `POST` | [Cancel dual-stream invite](/docs/of-api/streams/cancel-dual-stream-invite) | `/api2/v2/streams/{stream_id}/users/{user_id}/cancel` | | `POST` | [Decline dual-stream request](/docs/of-api/streams/decline-dual-stream-request) | `/api2/v2/streams/{stream_id}/users/{user_id}/decline` | | `PUT` | [Add stream helper](/docs/of-api/streams/add-stream-helper) | `/api2/v2/streams/{stream_id}/users/{user_id}/helper` | | `DELETE` | [Remove stream helper](/docs/of-api/streams/remove-stream-helper) | `/api2/v2/streams/{stream_id}/users/{user_id}/helper` | | `POST` | [Invite user to dual stream](/docs/of-api/streams/invite-user-to-dual-stream) | `/api2/v2/streams/{stream_id}/users/{user_id}/invite` | | `GET` | [Get stream viewers](/docs/of-api/streams/get-stream-viewers) | `/api2/v2/streams/{stream_id}/viewers` | | `GET` | [Get a stream viewer](/docs/of-api/streams/get-a-stream-viewer) | `/api2/v2/streams/{stream_id}/viewers/{user_id}` | | `POST` | [Vote on a stream poll](/docs/of-api/streams/vote-on-a-stream-poll) | `/api2/v2/streams/{stream_id}/vote` | | `GET` | [Get active live streams](/docs/of-api/streams/get-active-live-streams) | `/api2/v2/streams/active` | | `GET` | [Stream discovery feed](/docs/of-api/streams/stream-discovery-feed) | `/api2/v2/streams/feed` | | `DELETE` | [Unblock stream viewer](/docs/of-api/streams/unblock-stream-viewer) | `/api2/v2/streams/users/{user_id}/block` | | `POST` | [Block stream viewer by name](/docs/of-api/streams/block-stream-viewer-by-name) | `/api2/v2/streams/users/{username}/block` | --- # Accept dual-stream invite (/docs/of-api/streams/accept-dual-stream-invite) `POST https://theonlyapi.com/api/crm/your-crm-id/api2/v2/streams/{stream_id}/accept` Accepts an invitation to join a dual (co-host) live stream identified by stream id (acceptDualStreamInvite). **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Path parameters - `stream_id` (string, required) — ID of the stream whose invite is accepted. ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X POST "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/streams/{stream_id}/accept" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Accept dual-stream request (/docs/of-api/streams/accept-dual-stream-request) `POST https://theonlyapi.com/api/crm/your-crm-id/api2/v2/streams/{stream_id}/users/{user_id}/accept` Accepts a user's request to join a dual/co-stream (acceptDualStreamRequest). Sibling calls decline, cancel or invite users. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Path parameters - `stream_id` (string, required) — ID of the stream. - `user_id` (string, required) — ID of the user whose dual-stream request is accepted. ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X POST "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/streams/{stream_id}/users/{user_id}/accept" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Add likes to stream (/docs/of-api/streams/add-likes-to-stream) `POST https://theonlyapi.com/api/crm/your-crm-id/api2/v2/streams/{stream_id}/likes` Adds a number of likes to a live stream (streamLikes). **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Path parameters - `stream_id` (string, required) — ID of the stream. ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Request body Content type: `application/json` - `likes` (number) — Number of likes to add. ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X POST "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/streams/{stream_id}/likes" \ -H "X-API-Key: " \ -H "user-id: …" \ -H "Content-Type: application/json" \ -d '{}' ``` --- # Add stream helper (/docs/of-api/streams/add-stream-helper) `PUT https://theonlyapi.com/api/crm/your-crm-id/api2/v2/streams/{stream_id}/users/{user_id}/helper` Grants a user helper (moderator) permissions on a live stream. Enclosing fn addStreamHelper. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Path parameters - `stream_id` (string, required) — ID of the live stream. - `user_id` (string, required) — ID of the user to grant helper role. ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X PUT "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/streams/{stream_id}/users/{user_id}/helper" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Block stream viewer (/docs/of-api/streams/block-stream-viewer) `POST https://theonlyapi.com/api/crm/your-crm-id/api2/v2/streams/{stream_id}/block` Blocks a viewer in a live stream, optionally permanently. Called as blockStreamViewer({streamId, userId, isPermanent}). **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Path parameters - `stream_id` (string, required) — ID of the stream. ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Request body Content type: `application/json` - `userId` (string|number) — ID of the viewer to block. - `isPermanent` (boolean) — Whether the block is permanent (default false). ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X POST "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/streams/{stream_id}/block" \ -H "X-API-Key: " \ -H "user-id: …" \ -H "Content-Type: application/json" \ -d '{}' ``` --- # Block stream viewer by name (/docs/of-api/streams/block-stream-viewer-by-name) `POST https://theonlyapi.com/api/crm/your-crm-id/api2/v2/streams/users/{username}/block` Blocks a live-stream viewer identified by their username (blockStreamViewerByName). **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Path parameters - `username` (string, required) — Username of the stream viewer to block. ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X POST "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/streams/users/{username}/block" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Cancel dual-stream invite (/docs/of-api/streams/cancel-dual-stream-invite) `POST https://theonlyapi.com/api/crm/your-crm-id/api2/v2/streams/{stream_id}/users/{user_id}/cancel` Cancels a pending dual-stream (co-stream) invite for a user. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Path parameters - `stream_id` (string, required) — ID of the stream. - `user_id` (string, required) — ID of the invited user. ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X POST "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/streams/{stream_id}/users/{user_id}/cancel" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Cancel dual-stream request (/docs/of-api/streams/cancel-dual-stream-request) `POST https://theonlyapi.com/api/crm/your-crm-id/api2/v2/streams/{stream_id}/cancel` Cancels a pending dual-stream (co-streaming) request for the given stream (enclosing fn cancelDualStreamRequest). **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Path parameters - `stream_id` (string, required) — Id of the stream whose dual-stream request is cancelled. ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X POST "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/streams/{stream_id}/cancel" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Check if current user is viewer (/docs/of-api/streams/check-if-current-user-is-viewer) `GET https://theonlyapi.com/api/crm/your-crm-id/api2/v2/streams/{stream_id}/is-viewer` Checks whether the current user is a viewer of the given stream (checkViewer). **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Path parameters - `stream_id` (string, required) — ID of the stream. ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X GET "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/streams/{stream_id}/is-viewer" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Check if stream active (/docs/of-api/streams/check-if-stream-active) `GET https://theonlyapi.com/api/crm/your-crm-id/api2/v2/streams/{stream_id}/active` Checks whether the specified live stream is currently active. Enclosing fn checkStreamActive. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Path parameters - `stream_id` (string, required) — ID of the live stream. ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X GET "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/streams/{stream_id}/active" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Create / start a live stream (/docs/of-api/streams/create-start-a-live-stream) `POST https://theonlyapi.com/api/crm/your-crm-id/api2/v2/streams` Start a new live stream. Returns stream configuration including the room ID and streaming credentials. **OnlyFans only.** Requests made with a `user-id` belonging to a Fansly account are rejected — use the platform-neutral CRM data routes (`/notifications`, `/balances`, `/chats`, `/purchases`, `/subscribers/cached`, ...) which are Fansly-aware. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Request body Content type: `application/json` - `title` (string) — Stream title displayed to viewers. e.g. `"Friday night live! 🎉"`. - `description` (string) — Stream description. - `isFree` (boolean) — If true, stream is free for all. If false, only subscribers can watch. Default `false`. ## Responses ### 200 — Stream created - `id` (integer) - `title` (string) - `description` (string) - `isActive` (boolean) - `startedAt` (string) - `room` (string) - `thumbUrl` (string) - `viewersCount` (integer) - `likesCount` (integer) - `tipsAmount` (number) ## Example ```bash curl -X POST "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/streams" \ -H "X-API-Key: " \ -H "user-id: …" \ -H "Content-Type: application/json" \ -d '{"title":"Friday night live! 🎉","isFree":false}' ``` --- # Decline dual-stream invite (/docs/of-api/streams/decline-dual-stream-invite) `POST https://theonlyapi.com/api/crm/your-crm-id/api2/v2/streams/{stream_id}/decline` Declines an invitation to join a dual (co-host) live stream. Enclosing fn declineDualStreamInvite. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Path parameters - `stream_id` (string, required) — ID of the stream whose invite is declined. ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X POST "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/streams/{stream_id}/decline" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Decline dual-stream request (/docs/of-api/streams/decline-dual-stream-request) `POST https://theonlyapi.com/api/crm/your-crm-id/api2/v2/streams/{stream_id}/users/{user_id}/decline` Declines a dual-stream (co-stream) request from a user (declineDualStreamRequest). **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Path parameters - `stream_id` (string, required) — ID of the stream. - `user_id` (string, required) — ID of the requesting user. ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X POST "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/streams/{stream_id}/users/{user_id}/decline" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Delete a stream (/docs/of-api/streams/delete-a-stream) `DELETE https://theonlyapi.com/api/crm/your-crm-id/api2/v2/streams/{stream_id}` Deletes a live stream identified by stream id. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Path parameters - `stream_id` (string, required) — ID of the stream to delete. ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X DELETE "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/streams/{stream_id}" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Delete stream comment (/docs/of-api/streams/delete-stream-comment) `DELETE https://theonlyapi.com/api/crm/your-crm-id/api2/v2/streams/{stream_id}/comments/{comment_id}` Removes a comment from a live stream. Called as removeComment(streamId, commentId). **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Path parameters - `stream_id` (string, required) — ID of the stream. - `comment_id` (string, required) — ID of the comment to remove. ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X DELETE "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/streams/{stream_id}/comments/{comment_id}" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Fetch stream covers (/docs/of-api/streams/fetch-stream-covers) `GET https://theonlyapi.com/api/crm/your-crm-id/api2/v2/streams/{stream_id}/covers` Fetches available cover images for a stream (fetchStreamCovers). Retries on HTTP 400. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Path parameters - `stream_id` (string, required) — ID of the stream. ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X GET "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/streams/{stream_id}/covers" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Finish a live stream (/docs/of-api/streams/finish-a-live-stream) `PUT https://theonlyapi.com/api/crm/your-crm-id/api2/v2/streams/{stream_id}/finish` Ends the live stream identified by stream_id. Enclosing fn is finishStream. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Path parameters - `stream_id` (string, required) — ID of the stream to finish. ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Request body Content type: `application/json` ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X PUT "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/streams/{stream_id}/finish" \ -H "X-API-Key: " \ -H "user-id: …" \ -H "Content-Type: application/json" \ -d '{}' ``` --- # Get a single stream comment (/docs/of-api/streams/get-a-single-stream-comment) `GET https://theonlyapi.com/api/crm/your-crm-id/api2/v2/streams/{stream_id}/comments/{comment_id}` Fetches a single comment on a live stream by stream and comment id (enclosing fn getStreamComment). **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Path parameters - `stream_id` (string, required) — Id of the stream. - `comment_id` (string, required) — Id of the stream comment. ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X GET "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/streams/{stream_id}/comments/{comment_id}" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Get a stream viewer (/docs/of-api/streams/get-a-stream-viewer) `GET https://theonlyapi.com/api/crm/your-crm-id/api2/v2/streams/{stream_id}/viewers/{user_id}` Retrieves details for a single viewer of a live stream. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Path parameters - `stream_id` (string, required) — ID of the stream. - `user_id` (string, required) — ID of the viewer user. ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X GET "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/streams/{stream_id}/viewers/{user_id}" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Get active live streams (/docs/of-api/streams/get-active-live-streams) `GET https://theonlyapi.com/api/crm/your-crm-id/api2/v2/streams/active` **OnlyFans only.** Requests made with a `user-id` belonging to a Fansly account are rejected — use the platform-neutral CRM data routes (`/notifications`, `/balances`, `/chats`, `/purchases`, `/subscribers/cached`, ...) which are Fansly-aware. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — Active streams - `[]` array of: - `id` (integer) - `title` (string) - `description` (string) - `isActive` (boolean) - `startedAt` (string) - `room` (string) - `thumbUrl` (string) - `viewersCount` (integer) - `likesCount` (integer) - `tipsAmount` (number) ## Example ```bash curl -X GET "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/streams/active" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Get stream details (/docs/of-api/streams/get-stream-details) `GET https://theonlyapi.com/api/crm/your-crm-id/api2/v2/streams/{stream_id}` Retrieves a live stream by its id. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Path parameters - `stream_id` (string, required) — ID of the stream. ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X GET "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/streams/{stream_id}" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Get stream statistics (/docs/of-api/streams/get-stream-statistics) `GET https://theonlyapi.com/api/crm/your-crm-id/api2/v2/streams/{stream_id}/stats` **OnlyFans only.** Requests made with a `user-id` belonging to a Fansly account are rejected — use the platform-neutral CRM data routes (`/notifications`, `/balances`, `/chats`, `/purchases`, `/subscribers/cached`, ...) which are Fansly-aware. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Path parameters - `stream_id` (string, required) ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — Stream stats - `viewersCount` (integer) - `likesCount` (integer) - `tipsAmount` (number) - `commentsCount` (integer) ## Example ```bash curl -X GET "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/streams/{stream_id}/stats" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Get stream viewers (/docs/of-api/streams/get-stream-viewers) `GET https://theonlyapi.com/api/crm/your-crm-id/api2/v2/streams/{stream_id}/viewers` **OnlyFans only.** Requests made with a `user-id` belonging to a Fansly account are rejected — use the platform-neutral CRM data routes (`/notifications`, `/balances`, `/chats`, `/purchases`, `/subscribers/cached`, ...) which are Fansly-aware. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Path parameters - `stream_id` (string, required) ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — Viewer list - `list` (object[]) - `id` (integer) - `name` (string) - `username` (string) - `displayName` (string) - `about` (string) - `avatar` (string) — Avatar URL. - `avatarThumbs` (object) - `c50` (string) - `c144` (string) - `header` (string) — Profile header/banner URL. - `email` (string) - `isVerified` (boolean) - `isPerformer` (boolean) - `canEarn` (boolean) - `tipsEnabled` (boolean) - `subscribedBy` (boolean) — Whether you are subscribed to this user. - `subscribersCount` (integer) - `subscribesCount` (integer) - `postsCount` (integer) - `photosCount` (integer) - `videosCount` (integer) - `audiosCount` (integer) - `friendsCount` (integer) - `joinDate` (string) - `firstPublishedPostDate` (string) - `subscribePrice` (number) - `chatMessagesCount` (integer) — Unread chat messages. - `countPriorityChat` (integer) - `countPinnedChat` (integer) - `hasPurchasedPosts` (boolean) - `paidFeed` (boolean) - `openseaInfo` (object) - `hasMore` (boolean) ## Example ```bash curl -X GET "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/streams/{stream_id}/viewers" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Hide stream (/docs/of-api/streams/hide-stream) `POST https://theonlyapi.com/api/crm/your-crm-id/api2/v2/streams/{stream_id}/hide` Hides the specified live stream from the feed. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Path parameters - `stream_id` (string, required) — ID of the live stream to hide. ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X POST "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/streams/{stream_id}/hide" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Invite user to dual stream (/docs/of-api/streams/invite-user-to-dual-stream) `POST https://theonlyapi.com/api/crm/your-crm-id/api2/v2/streams/{stream_id}/users/{user_id}/invite` Invites a user to join a dual/co-stream. Called as inviteDualStream({streamId, userId}). **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Path parameters - `stream_id` (string, required) — ID of the stream. - `user_id` (string, required) — ID of the user to invite. ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X POST "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/streams/{stream_id}/users/{user_id}/invite" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Join a dual stream (/docs/of-api/streams/join-a-dual-stream) `POST https://theonlyapi.com/api/crm/your-crm-id/api2/v2/streams/{stream_id}/join` Requests to join a dual (co-host) live stream identified by stream_id. Enclosing fn is joinDualStreamRequest. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Path parameters - `stream_id` (string, required) — ID of the stream to join. ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X POST "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/streams/{stream_id}/join" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Kick a user from stream (/docs/of-api/streams/kick-a-user-from-stream) `POST https://theonlyapi.com/api/crm/your-crm-id/api2/v2/streams/{stream_id}/kick` Remove a viewer from the live stream (creator only). **OnlyFans only.** Requests made with a `user-id` belonging to a Fansly account are rejected — use the platform-neutral CRM data routes (`/notifications`, `/balances`, `/chats`, `/purchases`, `/subscribers/cached`, ...) which are Fansly-aware. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Path parameters - `stream_id` (string, required) ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Request body Content type: `application/json` - `userId` (integer, required) — User ID to kick from the stream. ## Responses ### 200 — User kicked ## Example ```bash curl -X POST "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/streams/{stream_id}/kick" \ -H "X-API-Key: " \ -H "user-id: …" \ -H "Content-Type: application/json" \ -d '{}' ``` --- # Mark viewing a stream (/docs/of-api/streams/mark-viewing-a-stream) `POST https://theonlyapi.com/api/crm/your-crm-id/api2/v2/streams/{stream_id}/look` Registers the current user as actively looking at the stream. Enclosing fn is streamLook. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Path parameters - `stream_id` (string, required) — ID of the stream being viewed. ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X POST "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/streams/{stream_id}/look" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Pin a stream comment (/docs/of-api/streams/pin-a-stream-comment) `POST https://theonlyapi.com/api/crm/your-crm-id/api2/v2/streams/{stream_id}/comments/{comment_id}/pin` Pins a comment within a live stream (DELETE on the same path unpins it). **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Path parameters - `stream_id` (string, required) — ID of the stream. - `comment_id` (string, required) — ID of the comment to pin. ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X POST "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/streams/{stream_id}/comments/{comment_id}/pin" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Remove a user's stream comments (/docs/of-api/streams/remove-a-user-s-stream-comments) `DELETE https://theonlyapi.com/api/crm/your-crm-id/api2/v2/streams/{stream_id}/user/{user_id}/comments` Removes all comments from a specific user within a live stream (removeComment by user). **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Path parameters - `stream_id` (string, required) — ID of the live stream. - `user_id` (string, required) — ID of the user whose comments are removed. ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X DELETE "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/streams/{stream_id}/user/{user_id}/comments" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Remove stream helper (/docs/of-api/streams/remove-stream-helper) `DELETE https://theonlyapi.com/api/crm/your-crm-id/api2/v2/streams/{stream_id}/users/{user_id}/helper` Removes a user's helper (moderator) role on a live stream. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Path parameters - `stream_id` (string, required) — ID of the stream. - `user_id` (string, required) — ID of the helper user. ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X DELETE "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/streams/{stream_id}/users/{user_id}/helper" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Remove stream reminder (/docs/of-api/streams/remove-stream-reminder) `DELETE https://theonlyapi.com/api/crm/your-crm-id/api2/v2/streams/{stream_id}/reminder` Removes the reminder the user set for the scheduled stream identified by stream_id. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Path parameters - `stream_id` (string, required) — ID of the stream to remove the reminder for. ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X DELETE "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/streams/{stream_id}/reminder" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Save live stream cover (/docs/of-api/streams/save-live-stream-cover) `PUT https://theonlyapi.com/api/crm/your-crm-id/api2/v2/streams/{stream_id}/cover` Saves/updates the cover image for a live stream (enclosing fn saveStreamCover). **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Path parameters - `stream_id` (string, required) — Id of the stream whose cover is set. ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Request body Content type: `application/json` ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X PUT "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/streams/{stream_id}/cover" \ -H "X-API-Key: " \ -H "user-id: …" \ -H "Content-Type: application/json" \ -d '{}' ``` --- # Save stream as a post (/docs/of-api/streams/save-stream-as-a-post) `PUT https://theonlyapi.com/api/crm/your-crm-id/api2/v2/streams/{stream_id}/make-post` Saves a finished live stream as a feed post (saveStreamAsPost). Requires the stream ID and additional post fields. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Path parameters - `stream_id` (string, required) — ID of the stream to save as a post. ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Request body Content type: `application/json` - `id` (string) — Stream ID (echoed into the body). ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X PUT "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/streams/{stream_id}/make-post" \ -H "X-API-Key: " \ -H "user-id: …" \ -H "Content-Type: application/json" \ -d '{}' ``` --- # Set stream reminder (/docs/of-api/streams/set-stream-reminder) `POST https://theonlyapi.com/api/crm/your-crm-id/api2/v2/streams/{stream_id}/reminder` Sets a reminder for an upcoming/scheduled live stream. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Path parameters - `stream_id` (string, required) — ID of the stream. ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X POST "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/streams/{stream_id}/reminder" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Share stream to Twitter (/docs/of-api/streams/share-stream-to-twitter) `POST https://theonlyapi.com/api/crm/your-crm-id/api2/v2/streams/{stream_id}/tweet` Tweets/shares the live stream identified by stream_id with preview options. Enclosing fn is sendStreamTweet. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Path parameters - `stream_id` (string, required) — ID of the stream to tweet. ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Request body Content type: `application/json` - `tweetWithPreview` (boolean) — Include stream preview in tweet. - `tweetWithStillPreview` (boolean) — Include still-image preview in tweet. ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X POST "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/streams/{stream_id}/tweet" \ -H "X-API-Key: " \ -H "user-id: …" \ -H "Content-Type: application/json" \ -d '{}' ``` --- # Stop looking at a stream (/docs/of-api/streams/stop-looking-at-a-stream) `DELETE https://theonlyapi.com/api/crm/your-crm-id/api2/v2/streams/{stream_id}/look` Removes the current viewer's 'look' marker on a stream (streamUnlook). Paired with a POST on the same path (streamLook). **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Path parameters - `stream_id` (string, required) — ID of the stream. ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X DELETE "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/streams/{stream_id}/look" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Stream discovery feed (/docs/of-api/streams/stream-discovery-feed) `GET https://theonlyapi.com/api/crm/your-crm-id/api2/v2/streams/feed` **OnlyFans only.** Requests made with a `user-id` belonging to a Fansly account are rejected — use the platform-neutral CRM data routes (`/notifications`, `/balances`, `/chats`, `/purchases`, `/subscribers/cached`, ...) which are Fansly-aware. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — Stream feed - `list` (object[]) - `id` (integer) - `title` (string) - `description` (string) - `isActive` (boolean) - `startedAt` (string) - `room` (string) - `thumbUrl` (string) - `viewersCount` (integer) - `likesCount` (integer) - `tipsAmount` (number) - `hasMore` (boolean) ## Example ```bash curl -X GET "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/streams/feed" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Unblock stream viewer (/docs/of-api/streams/unblock-stream-viewer) `DELETE https://theonlyapi.com/api/crm/your-crm-id/api2/v2/streams/users/{user_id}/block` Unblocks a previously blocked live-stream viewer by user ID. Enclosing fn unblockStreamViewerByUserId. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Path parameters - `user_id` (string, required) — ID of the viewer to unblock. ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X DELETE "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/streams/users/{user_id}/block" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Unpin a stream comment (/docs/of-api/streams/unpin-a-stream-comment) `DELETE https://theonlyapi.com/api/crm/your-crm-id/api2/v2/streams/{stream_id}/comments/{comment_id}/pin` Removes the pin from a comment on a live stream. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Path parameters - `stream_id` (string, required) — Id of the stream. - `comment_id` (string, required) — Id of the pinned comment to unpin. ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X DELETE "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/streams/{stream_id}/comments/{comment_id}/pin" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Update a stream (/docs/of-api/streams/update-a-stream) `PATCH https://theonlyapi.com/api/crm/your-crm-id/api2/v2/streams/{stream_id}` Updates properties of an existing live stream. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Path parameters - `stream_id` (string, required) — ID of the stream (taken from the body's id field). ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Request body Content type: `application/json` - `id` (string) — Stream id (also used in the path). ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X PATCH "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/streams/{stream_id}" \ -H "X-API-Key: " \ -H "user-id: …" \ -H "Content-Type: application/json" \ -d '{}' ``` --- # Vote on a stream poll (/docs/of-api/streams/vote-on-a-stream-poll) `POST https://theonlyapi.com/api/crm/your-crm-id/api2/v2/streams/{stream_id}/vote` **OnlyFans only.** Requests made with a `user-id` belonging to a Fansly account are rejected — use the platform-neutral CRM data routes (`/notifications`, `/balances`, `/chats`, `/purchases`, `/subscribers/cached`, ...) which are Fansly-aware. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Path parameters - `stream_id` (string, required) ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Request body Content type: `application/json` - `optionId` (integer, required) — The poll option ID to vote for. ## Responses ### 200 — Vote recorded ## Example ```bash curl -X POST "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/streams/{stream_id}/vote" \ -H "X-API-Key: " \ -H "user-id: …" \ -H "Content-Type: application/json" \ -d '{"optionId":0}' ``` --- # Subscribers (/docs/of-api/subscribers) {/* Generated by scripts/gen-api.ts — edit that script, not this file. */} OnlyFans subscriber endpoints (via proxy). **OnlyFans only** — Fansly accounts are rejected on this surface. | Method | Endpoint | Path | | ------ | ------------------------------------------------------------------------------------- | --------------------------------------------------- | | `GET` | [List subscribers](/docs/of-api/subscribers/list-subscribers-get) | `/api2/v2/subscriptions/subscribers` | | `GET` | [Top-spending subscribers](/docs/of-api/subscribers/top-spending-subscribers) | `/api2/v2/subscriptions/subscribers/awards` | | `GET` | [Subscriber awards count](/docs/of-api/subscribers/subscriber-awards-count) | `/api2/v2/subscriptions/subscribers/awards/count` | | `GET` | [Get subscriber count](/docs/of-api/subscribers/get-subscriber-count) | `/api2/v2/subscriptions/subscribers/count` | | `GET` | [Recently expired subscribers](/docs/of-api/subscribers/recently-expired-subscribers) | `/api2/v2/subscriptions/subscribers/recent-expired` | --- # Get subscriber count (/docs/of-api/subscribers/get-subscriber-count) `GET https://theonlyapi.com/api/crm/your-crm-id/api2/v2/subscriptions/subscribers/count` **OnlyFans only.** Requests made with a `user-id` belonging to a Fansly account are rejected — use the platform-neutral CRM data routes (`/notifications`, `/balances`, `/chats`, `/purchases`, `/subscribers/cached`, ...) which are Fansly-aware. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — Count - `count` (integer) ## Example ```bash curl -X GET "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/subscriptions/subscribers/count" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # List subscribers (/docs/of-api/subscribers/list-subscribers-get) `GET https://theonlyapi.com/api/crm/your-crm-id/api2/v2/subscriptions/subscribers` Full subscriber list with total-spent data. `data` is a **bare array** of subscriber (fan) profiles — no `{list, hasMore}` wrapper — page it with `limit`/`offset`. For a bounded active/expired roster on very large accounts prefer the CRM route `GET /accounts/{of_user_id}/subscribers/refresh` + `/subscribers/cached`. **OnlyFans only.** Requests made with a `user-id` belonging to a Fansly account are rejected — use the platform-neutral CRM data routes (`/notifications`, `/balances`, `/chats`, `/purchases`, `/subscribers/cached`, ...) which are Fansly-aware. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Query parameters - `limit` (integer) — Default `10`. - `offset` (integer) — Default `0`. - `type` ("all" | "active" | "expired") — Default `all`. - `format` (string) — Default `infinite`. - `filter[total_spent]` (integer) — Default `1`. - `more` (boolean) — Default `true`. ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — Subscriber list, wrapped in the passthrough envelope Each item is an OFUserProfile plus subscription-relationship fields (`subscribedBy`, `subscribedByExpireDate`, `subscribedOnData`, `currentSubscribePrice`, `listsStates`, tip limits). - `success` (boolean) - `status_code` (integer) - `data` (object[]) - `id` (integer) - `name` (string) - `username` (string) - `displayName` (string) - `about` (string) - `avatar` (string) — Avatar URL. - `avatarThumbs` (object) - `c50` (string) - `c144` (string) - `header` (string) — Profile header/banner URL. - `email` (string) - `isVerified` (boolean) - `isPerformer` (boolean) - `canEarn` (boolean) - `tipsEnabled` (boolean) - `subscribedBy` (boolean) — Whether you are subscribed to this user. - `subscribersCount` (integer) - `subscribesCount` (integer) - `postsCount` (integer) - `photosCount` (integer) - `videosCount` (integer) - `audiosCount` (integer) - `friendsCount` (integer) - `joinDate` (string) - `firstPublishedPostDate` (string) - `subscribePrice` (number) - `chatMessagesCount` (integer) — Unread chat messages. - `countPriorityChat` (integer) - `countPinnedChat` (integer) - `hasPurchasedPosts` (boolean) - `paidFeed` (boolean) - `openseaInfo` (object) ## Example ```bash curl -X GET "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/subscriptions/subscribers" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Recently expired subscribers (/docs/of-api/subscribers/recently-expired-subscribers) `GET https://theonlyapi.com/api/crm/your-crm-id/api2/v2/subscriptions/subscribers/recent-expired` **OnlyFans only.** Requests made with a `user-id` belonging to a Fansly account are rejected — use the platform-neutral CRM data routes (`/notifications`, `/balances`, `/chats`, `/purchases`, `/subscribers/cached`, ...) which are Fansly-aware. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — Expired subscriber list - `list` (object[]) - `id` (integer) - `name` (string) - `username` (string) - `displayName` (string) - `about` (string) - `avatar` (string) — Avatar URL. - `avatarThumbs` (object) - `c50` (string) - `c144` (string) - `header` (string) — Profile header/banner URL. - `email` (string) - `isVerified` (boolean) - `isPerformer` (boolean) - `canEarn` (boolean) - `tipsEnabled` (boolean) - `subscribedBy` (boolean) — Whether you are subscribed to this user. - `subscribersCount` (integer) - `subscribesCount` (integer) - `postsCount` (integer) - `photosCount` (integer) - `videosCount` (integer) - `audiosCount` (integer) - `friendsCount` (integer) - `joinDate` (string) - `firstPublishedPostDate` (string) - `subscribePrice` (number) - `chatMessagesCount` (integer) — Unread chat messages. - `countPriorityChat` (integer) - `countPinnedChat` (integer) - `hasPurchasedPosts` (boolean) - `paidFeed` (boolean) - `openseaInfo` (object) - `hasMore` (boolean) ## Example ```bash curl -X GET "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/subscriptions/subscribers/recent-expired" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Subscriber awards count (/docs/of-api/subscribers/subscriber-awards-count) `GET https://theonlyapi.com/api/crm/your-crm-id/api2/v2/subscriptions/subscribers/awards/count` **OnlyFans only.** Requests made with a `user-id` belonging to a Fansly account are rejected — use the platform-neutral CRM data routes (`/notifications`, `/balances`, `/chats`, `/purchases`, `/subscribers/cached`, ...) which are Fansly-aware. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — Count - `count` (integer) ## Example ```bash curl -X GET "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/subscriptions/subscribers/awards/count" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Top-spending subscribers (/docs/of-api/subscribers/top-spending-subscribers) `GET https://theonlyapi.com/api/crm/your-crm-id/api2/v2/subscriptions/subscribers/awards` **OnlyFans only.** Requests made with a `user-id` belonging to a Fansly account are rejected — use the platform-neutral CRM data routes (`/notifications`, `/balances`, `/chats`, `/purchases`, `/subscribers/cached`, ...) which are Fansly-aware. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Query parameters - `limit` (integer) — Default `10`. - `offset` (integer) — Default `0`. ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — Awards list - `list` (object[]) - `id` (integer) - `name` (string) - `username` (string) - `displayName` (string) - `about` (string) - `avatar` (string) — Avatar URL. - `avatarThumbs` (object) - `c50` (string) - `c144` (string) - `header` (string) — Profile header/banner URL. - `email` (string) - `isVerified` (boolean) - `isPerformer` (boolean) - `canEarn` (boolean) - `tipsEnabled` (boolean) - `subscribedBy` (boolean) — Whether you are subscribed to this user. - `subscribersCount` (integer) - `subscribesCount` (integer) - `postsCount` (integer) - `photosCount` (integer) - `videosCount` (integer) - `audiosCount` (integer) - `friendsCount` (integer) - `joinDate` (string) - `firstPublishedPostDate` (string) - `subscribePrice` (number) - `chatMessagesCount` (integer) — Unread chat messages. - `countPriorityChat` (integer) - `countPinnedChat` (integer) - `hasPurchasedPosts` (boolean) - `paidFeed` (boolean) - `openseaInfo` (object) - `hasMore` (boolean) ## Example ```bash curl -X GET "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/subscriptions/subscribers/awards" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Subscriptions (/docs/of-api/subscriptions) {/* Generated by scripts/gen-api.ts — edit that script, not this file. */} OnlyFans subscription management (via proxy). **OnlyFans only** — Fansly accounts are rejected on this surface. | Method | Endpoint | Path | | -------- | ----------------------------------------------------------------------------------------------------- | ------------------------------------------------------------ | | `PUT` | [Update a subscription](/docs/of-api/subscriptions/update-a-subscription) | `/api2/v2/subscriptions/{subscription_id}` | | `DELETE` | [Dismiss subscription attention flag](/docs/of-api/subscriptions/dismiss-subscription-attention-flag) | `/api2/v2/subscriptions/{subscription_id}/attention` | | `PUT` | [Apply subscription discount](/docs/of-api/subscriptions/apply-subscription-discount) | `/api2/v2/subscriptions/{subscription_id}/discount` | | `PUT` | [Hide posts from subscription](/docs/of-api/subscriptions/hide-posts-from-subscription) | `/api2/v2/subscriptions/{subscription_id}/hide-posts` | | `DELETE` | [Unhide subscription posts](/docs/of-api/subscriptions/unhide-subscription-posts) | `/api2/v2/subscriptions/{subscription_id}/hide-posts` | | `GET` | [Subscription payment history](/docs/of-api/subscriptions/subscription-payment-history) | `/api2/v2/subscriptions/{subscription_id}/history` | | `DELETE` | [Dismiss price-change hint](/docs/of-api/subscriptions/dismiss-price-change-hint) | `/api2/v2/subscriptions/{subscription_id}/price-change-hint` | | `PUT` | [Update subscription bundle](/docs/of-api/subscriptions/update-subscription-bundle) | `/api2/v2/subscriptions/bundles/{bundle_id}` | | `DELETE` | [Delete subscription bundle](/docs/of-api/subscriptions/delete-subscription-bundle) | `/api2/v2/subscriptions/bundles/{bundle_id}` | | `GET` | [List your subscriptions](/docs/of-api/subscriptions/list-your-subscriptions) | `/api2/v2/subscriptions/subscribes` | | `GET` | [Subscription count](/docs/of-api/subscriptions/subscription-count) | `/api2/v2/subscriptions/subscribes/count` | | `GET` | [List unsubscribe reasons](/docs/of-api/subscriptions/list-unsubscribe-reasons) | `/api2/v2/unsubscribe/reasons` | | `POST` | [Resubscribe to a user](/docs/of-api/subscriptions/resubscribe-to-a-user) | `/api2/v2/users/{user_id}/resubscribe` | | `POST` | [Subscribe to a user](/docs/of-api/subscriptions/subscribe-to-a-user) | `/api2/v2/users/{user_id}/subscribe` | | `DELETE` | [Unsubscribe from a user](/docs/of-api/subscriptions/unsubscribe-from-a-user) | `/api2/v2/users/{user_id}/unsubscribe` | --- # Apply subscription discount (/docs/of-api/subscriptions/apply-subscription-discount) `PUT https://theonlyapi.com/api/crm/your-crm-id/api2/v2/subscriptions/{subscription_id}/discount` Apply a percentage discount to a specific subscriber's subscription. Useful for retention or promotional pricing for individual fans. **OnlyFans only.** Requests made with a `user-id` belonging to a Fansly account are rejected — use the platform-neutral CRM data routes (`/notifications`, `/balances`, `/chats`, `/purchases`, `/subscribers/cached`, ...) which are Fansly-aware. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Path parameters - `subscription_id` (string, required) — Subscription ID to apply discount to. ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Request body Content type: `application/json` (required) - `discount` (integer, required) — Discount percentage (0-100). 0 removes the discount. e.g. `50`. - `period` (integer, required) — Number of months the discount is active (1-12). e.g. `3`. ## Responses ### 200 — Discount applied ## Example **50% off for 3 months** ```bash curl -X PUT "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/subscriptions/{subscription_id}/discount" \ -H "X-API-Key: " \ -H "user-id: …" \ -H "Content-Type: application/json" \ -d '{"discount":50,"period":3}' ``` **Remove discount** ```bash curl -X PUT "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/subscriptions/{subscription_id}/discount" \ -H "X-API-Key: " \ -H "user-id: …" \ -H "Content-Type: application/json" \ -d '{"discount":0,"period":1}' ``` --- # Delete subscription bundle (/docs/of-api/subscriptions/delete-subscription-bundle) `DELETE https://theonlyapi.com/api/crm/your-crm-id/api2/v2/subscriptions/bundles/{bundle_id}` Deletes a subscription bundle offer. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Path parameters - `bundle_id` (string, required) — ID of the subscription bundle to delete. ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X DELETE "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/subscriptions/bundles/{bundle_id}" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Dismiss price-change hint (/docs/of-api/subscriptions/dismiss-price-change-hint) `DELETE https://theonlyapi.com/api/crm/your-crm-id/api2/v2/subscriptions/{subscription_id}/price-change-hint` Dismisses the price-change hint/notice for a subscription. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Path parameters - `subscription_id` (string, required) — ID of the subscription. ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X DELETE "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/subscriptions/{subscription_id}/price-change-hint" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Dismiss subscription attention flag (/docs/of-api/subscriptions/dismiss-subscription-attention-flag) `DELETE https://theonlyapi.com/api/crm/your-crm-id/api2/v2/subscriptions/{subscription_id}/attention` Clears/dismisses the 'attention' flag on a subscription. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Path parameters - `subscription_id` (string, required) — Id of the subscription whose attention flag is cleared. ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X DELETE "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/subscriptions/{subscription_id}/attention" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Hide posts from subscription (/docs/of-api/subscriptions/hide-posts-from-subscription) `PUT https://theonlyapi.com/api/crm/your-crm-id/api2/v2/subscriptions/{subscription_id}/hide-posts` Hides posts from the given subscription in the user's feed. Paired with a DELETE on the same path to unhide. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Path parameters - `subscription_id` (string, required) — ID of the subscription (subscribed user) to hide posts from. ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X PUT "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/subscriptions/{subscription_id}/hide-posts" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # List unsubscribe reasons (/docs/of-api/subscriptions/list-unsubscribe-reasons) `GET https://theonlyapi.com/api/crm/your-crm-id/api2/v2/unsubscribe/reasons` Returns the selectable reasons offered when a fan unsubscribes. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. ✓ **Verified live** against a real OnlyFans account (2026-07-30); the `data` schema below is the real response shape. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — OnlyFans response — verified live; `data` is the real shape. - `success` (boolean) - `status_code` (integer) - `data` (object[]) - `id` (integer) - `name` (string) ## Example ```bash curl -X GET "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/unsubscribe/reasons" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # List your subscriptions (/docs/of-api/subscriptions/list-your-subscriptions) `GET https://theonlyapi.com/api/crm/your-crm-id/api2/v2/subscriptions/subscribes` Accounts you are subscribed to. **OnlyFans only.** Requests made with a `user-id` belonging to a Fansly account are rejected — use the platform-neutral CRM data routes (`/notifications`, `/balances`, `/chats`, `/purchases`, `/subscribers/cached`, ...) which are Fansly-aware. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Query parameters - `limit` (integer) — Default `10`. - `offset` (integer) — Default `0`. - `type` (string) — Default `active`. - `format` (string) — Default `infinite`. ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — Subscription list - `list` (object[]) - `id` (integer) - `name` (string) - `username` (string) - `displayName` (string) - `about` (string) - `avatar` (string) — Avatar URL. - `avatarThumbs` (object) - `c50` (string) - `c144` (string) - `header` (string) — Profile header/banner URL. - `email` (string) - `isVerified` (boolean) - `isPerformer` (boolean) - `canEarn` (boolean) - `tipsEnabled` (boolean) - `subscribedBy` (boolean) — Whether you are subscribed to this user. - `subscribersCount` (integer) - `subscribesCount` (integer) - `postsCount` (integer) - `photosCount` (integer) - `videosCount` (integer) - `audiosCount` (integer) - `friendsCount` (integer) - `joinDate` (string) - `firstPublishedPostDate` (string) - `subscribePrice` (number) - `chatMessagesCount` (integer) — Unread chat messages. - `countPriorityChat` (integer) - `countPinnedChat` (integer) - `hasPurchasedPosts` (boolean) - `paidFeed` (boolean) - `openseaInfo` (object) - `hasMore` (boolean) ## Example ```bash curl -X GET "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/subscriptions/subscribes" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Resubscribe to a user (/docs/of-api/subscriptions/resubscribe-to-a-user) `POST https://theonlyapi.com/api/crm/your-crm-id/api2/v2/users/{user_id}/resubscribe` Resubscribes to the given user's account. Sibling of users/{id}/subscribe. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Path parameters - `user_id` (string, required) — ID of the user to resubscribe to. ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Request body Content type: `application/json` ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X POST "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/users/{user_id}/resubscribe" \ -H "X-API-Key: " \ -H "user-id: …" \ -H "Content-Type: application/json" \ -d '{}' ``` --- # Subscribe to a user (/docs/of-api/subscriptions/subscribe-to-a-user) `POST https://theonlyapi.com/api/crm/your-crm-id/api2/v2/users/{user_id}/subscribe` **OnlyFans only.** Requests made with a `user-id` belonging to a Fansly account are rejected — use the platform-neutral CRM data routes (`/notifications`, `/balances`, `/chats`, `/purchases`, `/subscribers/cached`, ...) which are Fansly-aware. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Path parameters - `user_id` (string, required) ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — Subscribed ## Example ```bash curl -X POST "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/users/{user_id}/subscribe" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Subscription count (/docs/of-api/subscriptions/subscription-count) `GET https://theonlyapi.com/api/crm/your-crm-id/api2/v2/subscriptions/subscribes/count` **OnlyFans only.** Requests made with a `user-id` belonging to a Fansly account are rejected — use the platform-neutral CRM data routes (`/notifications`, `/balances`, `/chats`, `/purchases`, `/subscribers/cached`, ...) which are Fansly-aware. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — Count - `count` (integer) ## Example ```bash curl -X GET "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/subscriptions/subscribes/count" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Subscription payment history (/docs/of-api/subscriptions/subscription-payment-history) `GET https://theonlyapi.com/api/crm/your-crm-id/api2/v2/subscriptions/{subscription_id}/history` **OnlyFans only.** Requests made with a `user-id` belonging to a Fansly account are rejected — use the platform-neutral CRM data routes (`/notifications`, `/balances`, `/chats`, `/purchases`, `/subscribers/cached`, ...) which are Fansly-aware. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Path parameters - `subscription_id` (string, required) ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — Payment history - `list` (object[]) - `hasMore` (boolean) ## Example ```bash curl -X GET "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/subscriptions/{subscription_id}/history" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Unhide subscription posts (/docs/of-api/subscriptions/unhide-subscription-posts) `DELETE https://theonlyapi.com/api/crm/your-crm-id/api2/v2/subscriptions/{subscription_id}/hide-posts` Re-shows posts from a subscription previously hidden (PUT on the same path hides them). **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Path parameters - `subscription_id` (string, required) — ID of the subscription. ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X DELETE "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/subscriptions/{subscription_id}/hide-posts" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Unsubscribe from a user (/docs/of-api/subscriptions/unsubscribe-from-a-user) `DELETE https://theonlyapi.com/api/crm/your-crm-id/api2/v2/users/{user_id}/unsubscribe` **OnlyFans only.** Requests made with a `user-id` belonging to a Fansly account are rejected — use the platform-neutral CRM data routes (`/notifications`, `/balances`, `/chats`, `/purchases`, `/subscribers/cached`, ...) which are Fansly-aware. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Path parameters - `user_id` (string, required) ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — Unsubscribed ## Example ```bash curl -X DELETE "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/users/{user_id}/unsubscribe" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Update a subscription (/docs/of-api/subscriptions/update-a-subscription) `PUT https://theonlyapi.com/api/crm/your-crm-id/api2/v2/subscriptions/{subscription_id}` Updates settings for the given subscription. Sibling calls manage autoprolong, hide-posts and price-change hints. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Path parameters - `subscription_id` (string, required) — ID of the subscription to update. ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Request body Content type: `application/json` ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X PUT "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/subscriptions/{subscription_id}" \ -H "X-API-Key: " \ -H "user-id: …" \ -H "Content-Type: application/json" \ -d '{}' ``` --- # Update subscription bundle (/docs/of-api/subscriptions/update-subscription-bundle) `PUT https://theonlyapi.com/api/crm/your-crm-id/api2/v2/subscriptions/bundles/{bundle_id}` Updates a subscription bundle (discounted multi-month offer) by ID. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Path parameters - `bundle_id` (string, required) — ID of the subscription bundle (from body e.id). ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Request body Content type: `application/json` ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X PUT "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/subscriptions/bundles/{bundle_id}" \ -H "X-API-Key: " \ -H "user-id: …" \ -H "Content-Type: application/json" \ -d '{}' ``` --- # User (/docs/of-api/user) {/* Generated by scripts/gen-api.ts — edit that script, not this file. */} Direct proxy to OnlyFans user profile & settings endpoints. **OnlyFans only.** Requires `X-API-Key` + `user-id` headers. | Method | Endpoint | Path | | -------- | -------------------------------------------------------------------------------------------- | -------------------------------------------------- | | `POST` | [Record cookie consent](/docs/of-api/user/record-cookie-consent) | `/api2/v2/accepted-cookies` | | `POST` | [Start age verification](/docs/of-api/user/start-age-verification) | `/api2/v2/age-verifier/start` | | `POST` | [Check account email](/docs/of-api/user/check-account-email) | `/api2/v2/av/email-check` | | `POST` | [Request email address change](/docs/of-api/user/request-email-address-change) | `/api2/v2/emails/change` | | `DELETE` | [Cancel pending email change](/docs/of-api/user/cancel-pending-email-change) | `/api2/v2/emails/change` | | `POST` | [Resend confirmation email](/docs/of-api/user/resend-confirmation-email) | `/api2/v2/emails/resend` | | `POST` | [Postpone face-ID verification](/docs/of-api/user/postpone-face-id-verification) | `/api2/v2/face-id/postpone` | | `POST` | [Start Face ID verification](/docs/of-api/user/start-face-id-verification) | `/api2/v2/face-id/start` | | `DELETE` | [Remove account helper](/docs/of-api/user/remove-account-helper) | `/api2/v2/helpers/{helper_id}` | | `POST` | [Add or update account helper](/docs/of-api/user/add-or-update-account-helper) | `/api2/v2/helpers/{user_id}` | | `POST` | [Report login issue](/docs/of-api/user/report-login-issue) | `/api2/v2/issues/login` | | `POST` | [Start identity verification](/docs/of-api/user/start-identity-verification) | `/api2/v2/iv/start` | | `GET` | [Get Yoti face-ID verification URL](/docs/of-api/user/get-yoti-face-id-verification-url) | `/api2/v2/iv/yoti-face-id-url/{id}/{token}` | | `GET` | [Get Yoti identity verification URL](/docs/of-api/user/get-yoti-identity-verification-url) | `/api2/v2/iv/yoti-redirect-url/{verification_id}` | | `GET` | [List login sessions](/docs/of-api/user/list-login-sessions) | `/api2/v2/logins` | | `DELETE` | [Revoke a login session](/docs/of-api/user/revoke-a-login-session) | `/api2/v2/logins/{login_id}` | | `POST` | [Request phone number change](/docs/of-api/user/request-phone-number-change) | `/api2/v2/phones/change` | | `DELETE` | [Cancel pending phone change](/docs/of-api/user/cancel-pending-phone-change) | `/api2/v2/phones/change` | | `GET` | [List active sessions](/docs/of-api/user/list-active-sessions) | `/api2/v2/sessions` | | `DELETE` | [Revoke all sessions](/docs/of-api/user/revoke-all-sessions) | `/api2/v2/sessions` | | `POST` | [Mark device as trusted](/docs/of-api/user/mark-device-as-trusted) | `/api2/v2/trust` | | `GET` | [Get user public profile](/docs/of-api/user/get-user-public-profile) | `/api2/v2/users/{user_id}` | | `POST` | [Block a user](/docs/of-api/user/block-a-user) | `/api2/v2/users/{user_id}/block` | | `DELETE` | [Unblock a user](/docs/of-api/user/unblock-a-user) | `/api2/v2/users/{user_id}/block` | | `GET` | [Get pinned friends](/docs/of-api/user/get-pinned-friends) | `/api2/v2/users/{user_id}/friends/pinned` | | `GET` | [Get user's links](/docs/of-api/user/get-user-s-links) | `/api2/v2/users/{user_id}/links` | | `POST` | [Restrict a user](/docs/of-api/user/restrict-a-user) | `/api2/v2/users/{user_id}/restrict` | | `GET` | [List user's Shopify stores](/docs/of-api/user/list-user-s-shopify-stores) | `/api2/v2/users/{user_id}/shopify/stores` | | `GET` | [Get user social buttons](/docs/of-api/user/get-user-social-buttons) | `/api2/v2/users/{user_id}/social/buttons` | | `POST` | [Submit account appeal](/docs/of-api/user/submit-account-appeal) | `/api2/v2/users/appeal` | | `GET` | [List blocked users](/docs/of-api/user/list-blocked-users) | `/api2/v2/users/blocked` | | `POST` | [Change password](/docs/of-api/user/change-password) | `/api2/v2/users/change-password` | | `POST` | [Connect a linked account](/docs/of-api/user/connect-a-linked-account) | `/api2/v2/users/connect` | | `DELETE` | [Disconnect a linked account](/docs/of-api/user/disconnect-a-linked-account) | `/api2/v2/users/connect/{account_id}` | | `POST` | [Request account deletion](/docs/of-api/user/request-account-deletion) | `/api2/v2/users/delete/request` | | `DELETE` | [Cancel account deletion request](/docs/of-api/user/cancel-account-deletion-request) | `/api2/v2/users/delete/request` | | `POST` | [Check if username exists](/docs/of-api/user/check-if-username-exists) | `/api2/v2/users/exists` | | `POST` | [Request password reset](/docs/of-api/user/request-password-reset) | `/api2/v2/users/forgot-password` | | `POST` | [Get auth token](/docs/of-api/user/get-auth-token) | `/api2/v2/users/get-auth-token` | | `POST` | [Get OTP token](/docs/of-api/user/get-otp-token) | `/api2/v2/users/get-otp-token` | | `POST` | [Log out helper session](/docs/of-api/user/log-out-helper-session) | `/api2/v2/users/helper-logout` | | `DELETE` | [Dismiss user hint](/docs/of-api/user/dismiss-user-hint) | `/api2/v2/users/hints/{hint_id}` | | `GET` | [Get user links](/docs/of-api/user/get-user-links) | `/api2/v2/users/links` | | `POST` | [Add profile link](/docs/of-api/user/add-profile-link) | `/api2/v2/users/links` | | `PUT` | [Update a user link](/docs/of-api/user/update-a-user-link) | `/api2/v2/users/links` | | `DELETE` | [Delete a user link](/docs/of-api/user/delete-a-user-link) | `/api2/v2/users/links/{link_id}` | | `POST` | [Log in user](/docs/of-api/user/log-in-user) | `/api2/v2/users/login` | | `POST` | [Log in as a helper](/docs/of-api/user/log-in-as-a-helper) | `/api2/v2/users/login-as-helper/{helper_id}` | | `POST` | [Log out current user](/docs/of-api/user/log-out-current-user) | `/api2/v2/users/logout` | | `DELETE` | [Delete mass message hint](/docs/of-api/user/delete-mass-message-hint) | `/api2/v2/users/mass-hints/{hint_id}` | | `GET` | [Get current user profile](/docs/of-api/user/get-current-user-profile) | `/api2/v2/users/me` | | `PATCH` | [Update user profile](/docs/of-api/user/update-user-profile) | `/api2/v2/users/me` | | `GET` | [Get current auth token](/docs/of-api/user/get-current-auth-token) | `/api2/v2/users/me/auth-token` | | `GET` | [Get current user ID](/docs/of-api/user/get-current-user-id) | `/api2/v2/users/me/id` | | `GET` | [Get profile QR code](/docs/of-api/user/get-profile-qr-code) | `/api2/v2/users/me/profile/views/qr` | | `GET` | [Get account settings](/docs/of-api/user/get-account-settings) | `/api2/v2/users/me/settings` | | `PUT` | [Update user settings section](/docs/of-api/user/update-user-settings-section) | `/api2/v2/users/me/settings/{section}` | | `PATCH` | [Update user settings section](/docs/of-api/user/update-user-settings-section-patch) | `/api2/v2/users/me/settings/{settings_section}` | | `PATCH` | [Update message settings](/docs/of-api/user/update-message-settings) | `/api2/v2/users/me/settings/messages` | | `GET` | [Get creator start date](/docs/of-api/user/get-creator-start-date) | `/api2/v2/users/me/start-date-model` | | `GET` | [Get OTP backup codes](/docs/of-api/user/get-otp-backup-codes) | `/api2/v2/users/me/strong_otp_codes` | | `POST` | [Validate current user data](/docs/of-api/user/validate-current-user-data) | `/api2/v2/users/me/validate-data` | | `PUT` | [Set OpenSea NFT profile item](/docs/of-api/user/set-opensea-nft-profile-item) | `/api2/v2/users/opensea/nft` | | `POST` | [Connect OpenSea wallet](/docs/of-api/user/connect-opensea-wallet) | `/api2/v2/users/opensea/wallet` | | `DELETE` | [Disconnect OpenSea wallet](/docs/of-api/user/disconnect-opensea-wallet) | `/api2/v2/users/opensea/wallet` | | `PUT` | [Confirm OTP code](/docs/of-api/user/confirm-otp-code) | `/api2/v2/users/otp` | | `DELETE` | [Disable two-factor OTP](/docs/of-api/user/disable-two-factor-otp) | `/api2/v2/users/otp` | | `PUT` | [Request alternative OTP method](/docs/of-api/user/request-alternative-otp-method) | `/api2/v2/users/otp/alternative` | | `POST` | [Verify OTP code](/docs/of-api/user/verify-otp-code) | `/api2/v2/users/otp/check` | | `GET` | [Request OTP code](/docs/of-api/user/request-otp-code) | `/api2/v2/users/otp/code` | | `PUT` | [Enable phone OTP](/docs/of-api/user/enable-phone-otp) | `/api2/v2/users/otp/phone` | | `DELETE` | [Remove account password](/docs/of-api/user/remove-account-password) | `/api2/v2/users/password` | | `POST` | [Record profile view](/docs/of-api/user/record-profile-view) | `/api2/v2/users/profile/view` | | `POST` | [Record a profile visit](/docs/of-api/user/record-a-profile-visit) | `/api2/v2/users/profile/visit` | | `DELETE` | [Dismiss a recommended user](/docs/of-api/user/dismiss-a-recommended-user) | `/api2/v2/users/recommends/{user_id}` | | `POST` | [Register a new user account](/docs/of-api/user/register-a-new-user-account) | `/api2/v2/users/register` | | `POST` | [Restore account access with code](/docs/of-api/user/restore-account-access-with-code) | `/api2/v2/users/restore-access` | | `PATCH` | [Update notification settings](/docs/of-api/user/update-notification-settings) | `/api2/v2/users/settings/notifications` | | `GET` | [Get notification transport settings](/docs/of-api/user/get-notification-transport-settings) | `/api2/v2/users/settings/notifications/transports` | | `DELETE` | [Disconnect social network](/docs/of-api/user/disconnect-social-network) | `/api2/v2/users/social/{network}` | | `GET` | [Get social buttons](/docs/of-api/user/get-social-buttons) | `/api2/v2/users/social/buttons` | | `POST` | [Add social buttons](/docs/of-api/user/add-social-buttons) | `/api2/v2/users/social/buttons` | | `PUT` | [Update social profile buttons](/docs/of-api/user/update-social-profile-buttons) | `/api2/v2/users/social/buttons` | | `PUT` | [Update a social button](/docs/of-api/user/update-a-social-button) | `/api2/v2/users/social/buttons/{button_id}` | | `DELETE` | [Delete a social button](/docs/of-api/user/delete-a-social-button) | `/api2/v2/users/social/buttons/{button_id}` | | `POST` | [Register social button click](/docs/of-api/user/register-social-button-click) | `/api2/v2/users/social/buttons/{button_id}/click` | | `PUT` | [Set Spotify anthem](/docs/of-api/user/set-spotify-anthem) | `/api2/v2/users/social/spotify/anthem` | | `PUT` | [Set top Spotify artists](/docs/of-api/user/set-top-spotify-artists) | `/api2/v2/users/social/spotify/artists` | | `POST` | [Connect Spring merch account](/docs/of-api/user/connect-spring-merch-account) | `/api2/v2/users/social/spring` | | `DELETE` | [Disconnect Spring integration](/docs/of-api/user/disconnect-spring-integration) | `/api2/v2/users/social/spring` | | `POST` | [Switch to connected account](/docs/of-api/user/switch-to-connected-account) | `/api2/v2/users/switch/{user_id}` | | `GET` | [Get Telegram link info](/docs/of-api/user/get-telegram-link-info) | `/api2/v2/users/telegram-link` | | `GET` | [Get WebSocket auth token](/docs/of-api/user/get-websocket-auth-token) | `/api2/v2/users/ws-auth` | | `GET` | [List WebAuthn credentials](/docs/of-api/user/list-webauthn-credentials) | `/api2/v2/webauthn/credentials` | | `DELETE` | [Delete a WebAuthn credential](/docs/of-api/user/delete-a-webauthn-credential) | `/api2/v2/webauthn/credentials` | --- # Add or update account helper (/docs/of-api/user/add-or-update-account-helper) `POST https://theonlyapi.com/api/crm/your-crm-id/api2/v2/helpers/{user_id}` Grants or updates an account helper (team member) identified by user_id, assigning the given permission set. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Path parameters - `user_id` (string, required) — User id of the helper being granted permissions. ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Request body Content type: `application/json` - `permissions` (any[]) — List of permission keys to grant the helper (defaults to empty array). ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X POST "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/helpers/{user_id}" \ -H "X-API-Key: " \ -H "user-id: …" \ -H "Content-Type: application/json" \ -d '{}' ``` --- # Add profile link (/docs/of-api/user/add-profile-link) `POST https://theonlyapi.com/api/crm/your-crm-id/api2/v2/users/links` Adds a custom link to the current user's profile. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Request body Content type: `application/json` ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X POST "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/users/links" \ -H "X-API-Key: " \ -H "user-id: …" \ -H "Content-Type: application/json" \ -d '{}' ``` --- # Add social buttons (/docs/of-api/user/add-social-buttons) `POST https://theonlyapi.com/api/crm/your-crm-id/api2/v2/users/social/buttons` Adds social/link buttons to the user's profile using the provided button IDs. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Request body Content type: `application/json` - `buttonIds` (any[]) — IDs of the social buttons to add. ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X POST "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/users/social/buttons" \ -H "X-API-Key: " \ -H "user-id: …" \ -H "Content-Type: application/json" \ -d '{}' ``` --- # Block a user (/docs/of-api/user/block-a-user) `POST https://theonlyapi.com/api/crm/your-crm-id/api2/v2/users/{user_id}/block` **OnlyFans only.** Requests made with a `user-id` belonging to a Fansly account are rejected — use the platform-neutral CRM data routes (`/notifications`, `/balances`, `/chats`, `/purchases`, `/subscribers/cached`, ...) which are Fansly-aware. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Path parameters - `user_id` (string, required) ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — User blocked ## Example ```bash curl -X POST "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/users/{user_id}/block" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Cancel account deletion request (/docs/of-api/user/cancel-account-deletion-request) `DELETE https://theonlyapi.com/api/crm/your-crm-id/api2/v2/users/delete/request` Cancels a previously submitted account-deletion request. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X DELETE "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/users/delete/request" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Cancel pending email change (/docs/of-api/user/cancel-pending-email-change) `DELETE https://theonlyapi.com/api/crm/your-crm-id/api2/v2/emails/change` Cancels a pending email-change request (POST on the same path initiates one). **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X DELETE "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/emails/change" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Cancel pending phone change (/docs/of-api/user/cancel-pending-phone-change) `DELETE https://theonlyapi.com/api/crm/your-crm-id/api2/v2/phones/change` Cancels a pending phone-number change request (POST on the same path initiates one). **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X DELETE "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/phones/change" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Change password (/docs/of-api/user/change-password) `POST https://theonlyapi.com/api/crm/your-crm-id/api2/v2/users/change-password` Changes the current user's account password. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Request body Content type: `application/json` ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X POST "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/users/change-password" \ -H "X-API-Key: " \ -H "user-id: …" \ -H "Content-Type: application/json" \ -d '{}' ``` --- # Check account email (/docs/of-api/user/check-account-email) `POST https://theonlyapi.com/api/crm/your-crm-id/api2/v2/av/email-check` Triggers an email check for the account (av module). Called with no arguments. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X POST "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/av/email-check" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Check if username exists (/docs/of-api/user/check-if-username-exists) `POST https://theonlyapi.com/api/crm/your-crm-id/api2/v2/users/exists` Checks whether a username is already taken. Body carries the username to check. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Request body Content type: `application/json` - `username` (string) — Username to check for existence. ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X POST "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/users/exists" \ -H "X-API-Key: " \ -H "user-id: …" \ -H "Content-Type: application/json" \ -d '{}' ``` --- # Confirm OTP code (/docs/of-api/user/confirm-otp-code) `PUT https://theonlyapi.com/api/crm/your-crm-id/api2/v2/users/otp` Confirms/enables one-time-password (2FA) by submitting the verification code. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Request body Content type: `application/json` - `code` (string) — OTP verification code. ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X PUT "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/users/otp" \ -H "X-API-Key: " \ -H "user-id: …" \ -H "Content-Type: application/json" \ -d '{}' ``` --- # Connect a linked account (/docs/of-api/user/connect-a-linked-account) `POST https://theonlyapi.com/api/crm/your-crm-id/api2/v2/users/connect` Connects/links another account to the current user (used for multi-account switching). Paired with DELETE /users/connect/{id}. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Request body Content type: `application/json` ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X POST "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/users/connect" \ -H "X-API-Key: " \ -H "user-id: …" \ -H "Content-Type: application/json" \ -d '{}' ``` --- # Connect OpenSea wallet (/docs/of-api/user/connect-opensea-wallet) `POST https://theonlyapi.com/api/crm/your-crm-id/api2/v2/users/opensea/wallet` Links an OpenSea (crypto) wallet to the current user account. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Request body Content type: `application/json` ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X POST "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/users/opensea/wallet" \ -H "X-API-Key: " \ -H "user-id: …" \ -H "Content-Type: application/json" \ -d '{}' ``` --- # Connect Spring merch account (/docs/of-api/user/connect-spring-merch-account) `POST https://theonlyapi.com/api/crm/your-crm-id/api2/v2/users/social/spring` Connects/saves the user's Spring (merch) social integration (DELETE unlinks it, GET retrieves it). **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Request body Content type: `application/json` ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X POST "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/users/social/spring" \ -H "X-API-Key: " \ -H "user-id: …" \ -H "Content-Type: application/json" \ -d '{}' ``` --- # Delete a social button (/docs/of-api/user/delete-a-social-button) `DELETE https://theonlyapi.com/api/crm/your-crm-id/api2/v2/users/social/buttons/{button_id}` Deletes a profile social/link button identified by button_id. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Path parameters - `button_id` (string, required) — Id of the social button to delete. ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X DELETE "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/users/social/buttons/{button_id}" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Delete a user link (/docs/of-api/user/delete-a-user-link) `DELETE https://theonlyapi.com/api/crm/your-crm-id/api2/v2/users/links/{link_id}` Deletes one of the user's profile links by id. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Path parameters - `link_id` (string, required) — ID of the link to delete. ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X DELETE "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/users/links/{link_id}" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Delete a WebAuthn credential (/docs/of-api/user/delete-a-webauthn-credential) `DELETE https://theonlyapi.com/api/crm/your-crm-id/api2/v2/webauthn/credentials` Removes a registered WebAuthn (passkey/security key) credential for the current user; the credential identifier is sent in the request body. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X DELETE "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/webauthn/credentials" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Delete mass message hint (/docs/of-api/user/delete-mass-message-hint) `DELETE https://theonlyapi.com/api/crm/your-crm-id/api2/v2/users/mass-hints/{hint_id}` Deletes a mass-message hint for the current user. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Path parameters - `hint_id` (string, required) — ID of the mass-message hint to delete. ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X DELETE "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/users/mass-hints/{hint_id}" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Disable two-factor OTP (/docs/of-api/user/disable-two-factor-otp) `DELETE https://theonlyapi.com/api/crm/your-crm-id/api2/v2/users/otp` Disables two-factor authentication (OTP) for the account using a verification code. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X DELETE "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/users/otp" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Disconnect a linked account (/docs/of-api/user/disconnect-a-linked-account) `DELETE https://theonlyapi.com/api/crm/your-crm-id/api2/v2/users/connect/{account_id}` Disconnects a linked/connected account identified by account_id. Enclosing fn is a disconnect helper. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Path parameters - `account_id` (string, required) — ID of the connected account to disconnect. ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X DELETE "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/users/connect/{account_id}" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Disconnect OpenSea wallet (/docs/of-api/user/disconnect-opensea-wallet) `DELETE https://theonlyapi.com/api/crm/your-crm-id/api2/v2/users/opensea/wallet` Removes the connected OpenSea crypto wallet from the current user account. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X DELETE "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/users/opensea/wallet" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Disconnect social network (/docs/of-api/user/disconnect-social-network) `DELETE https://theonlyapi.com/api/crm/your-crm-id/api2/v2/users/social/{network}` Disconnects/unlinks a social network account (defaults to twitter) from the profile. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Path parameters - `network` (string, required) — Social network name (e.g. twitter); defaults to twitter. ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X DELETE "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/users/social/{network}" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Disconnect Spring integration (/docs/of-api/user/disconnect-spring-integration) `DELETE https://theonlyapi.com/api/crm/your-crm-id/api2/v2/users/social/spring` Disconnects/removes the user's linked Spring (merch) social integration. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X DELETE "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/users/social/spring" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Dismiss a recommended user (/docs/of-api/user/dismiss-a-recommended-user) `DELETE https://theonlyapi.com/api/crm/your-crm-id/api2/v2/users/recommends/{user_id}` Removes/dismisses a suggested (recommended) user identified by user_id. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Path parameters - `user_id` (string, required) — ID of the recommended user to dismiss. ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X DELETE "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/users/recommends/{user_id}" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Dismiss user hint (/docs/of-api/user/dismiss-user-hint) `DELETE https://theonlyapi.com/api/crm/your-crm-id/api2/v2/users/hints/{hint_id}` Dismisses a UI hint/recommendation by ID for the current user. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Path parameters - `hint_id` (string, required) — ID of the hint to dismiss. ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X DELETE "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/users/hints/{hint_id}" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Enable phone OTP (/docs/of-api/user/enable-phone-otp) `PUT https://theonlyapi.com/api/crm/your-crm-id/api2/v2/users/otp/phone` Enables/requests one-time-password (2FA) delivery via phone for the current user. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X PUT "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/users/otp/phone" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Get account settings (/docs/of-api/user/get-account-settings) `GET https://theonlyapi.com/api/crm/your-crm-id/api2/v2/users/me/settings` Returns account-level settings including banking status, payout eligibility, and verification state. **OnlyFans only.** Requests made with a `user-id` belonging to a Fansly account are rejected — use the platform-neutral CRM data routes (`/notifications`, `/balances`, `/chats`, `/purchases`, `/subscribers/cached`, ...) which are Fansly-aware. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — Settings object - `needUpdateBanking` (boolean) — Whether banking info needs updating. - `canReceiveManualPayout` (boolean) — Manual payout eligibility. - `isVerifiedReason` (string) — Verification status reason code. - `needVerifyPayoutData` (boolean) — Whether payout data verification is needed. ## Example ```bash curl -X GET "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/users/me/settings" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Get auth token (/docs/of-api/user/get-auth-token) `POST https://theonlyapi.com/api/crm/your-crm-id/api2/v2/users/get-auth-token` Retrieves an authentication token for the user. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Request body Content type: `application/json` ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X POST "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/users/get-auth-token" \ -H "X-API-Key: " \ -H "user-id: …" \ -H "Content-Type: application/json" \ -d '{}' ``` --- # Get creator start date (/docs/of-api/user/get-creator-start-date) `GET https://theonlyapi.com/api/crm/your-crm-id/api2/v2/users/me/start-date-model` Returns the current user's creator/model start-date information. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. ✓ **Verified live** against a real OnlyFans account (2026-07-30); the `data` schema below is the real response shape. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — OnlyFans response — verified live; `data` is the real shape. - `success` (boolean) - `status_code` (integer) - `data` (object) - `startDate` (string) ## Example ```bash curl -X GET "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/users/me/start-date-model" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Get current auth token (/docs/of-api/user/get-current-auth-token) `GET https://theonlyapi.com/api/crm/your-crm-id/api2/v2/users/me/auth-token` Retrieves an auth token for the current user (used for authenticated sub-flows). **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. ✓ **Verified live** against a real OnlyFans account (2026-07-30); the `data` schema below is the real response shape. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — OnlyFans response — verified live; `data` is the real shape. - `success` (boolean) - `status_code` (integer) - `data` (object) - `token` (string) ## Example ```bash curl -X GET "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/users/me/auth-token" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Get current user ID (/docs/of-api/user/get-current-user-id) `GET https://theonlyapi.com/api/crm/your-crm-id/api2/v2/users/me/id` Returns the ID of the currently authenticated user. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. ✓ **Verified live** against a real OnlyFans account (2026-07-30); the `data` schema below is the real response shape. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — OnlyFans response — verified live; `data` is the real shape. - `success` (boolean) - `status_code` (integer) - `data` (object) - `id` (integer) ## Example ```bash curl -X GET "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/users/me/id" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Get current user profile (/docs/of-api/user/get-current-user-profile) `GET https://theonlyapi.com/api/crm/your-crm-id/api2/v2/users/me` Returns the authenticated user's full profile including stats, subscription info, and settings. Call via the generic proxy endpoint. **OnlyFans only.** Requests made with a `user-id` belonging to a Fansly account are rejected — use the platform-neutral CRM data routes (`/notifications`, `/balances`, `/chats`, `/purchases`, `/subscribers/cached`, ...) which are Fansly-aware. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — User profile object - `id` (integer) - `name` (string) - `username` (string) - `about` (string) - `avatar` (string) - `header` (string) - `email` (string) - `isPerformer` (boolean) - `subscribesCount` (integer) - `subscribersCount` (integer) - `postsCount` (integer) - `photosCount` (integer) - `videosCount` (integer) - `audiosCount` (integer) - `tipsEnabled` (boolean) - `subscribePrice` (number) - `canEarn` (boolean) ## Example ```bash curl -X GET "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/users/me" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Get notification transport settings (/docs/of-api/user/get-notification-transport-settings) `GET https://theonlyapi.com/api/crm/your-crm-id/api2/v2/users/settings/notifications/transports` Returns the available/enabled notification transport channels (email, push, etc.) for the user. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. ✓ **Verified live** against a real OnlyFans account (2026-07-30); the `data` schema below is the real response shape. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — OnlyFans response — verified live; `data` is the real shape. - `success` (boolean) - `status_code` (integer) - `data` (string[]) ## Example ```bash curl -X GET "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/users/settings/notifications/transports" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Get OTP backup codes (/docs/of-api/user/get-otp-backup-codes) `GET https://theonlyapi.com/api/crm/your-crm-id/api2/v2/users/me/strong_otp_codes` Returns the current user's strong OTP (backup/recovery) codes. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X GET "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/users/me/strong_otp_codes" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Get OTP token (/docs/of-api/user/get-otp-token) `POST https://theonlyapi.com/api/crm/your-crm-id/api2/v2/users/get-otp-token` Exchanges credentials for a one-time-password token. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Request body Content type: `application/json` ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X POST "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/users/get-otp-token" \ -H "X-API-Key: " \ -H "user-id: …" \ -H "Content-Type: application/json" \ -d '{}' ``` --- # Get pinned friends (/docs/of-api/user/get-pinned-friends) `GET https://theonlyapi.com/api/crm/your-crm-id/api2/v2/users/{user_id}/friends/pinned` Returns a user's pinned friends. Called as getPinnedFriends({userId}). **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Path parameters - `user_id` (string, required) — ID of the user whose pinned friends to fetch. ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X GET "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/users/{user_id}/friends/pinned" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Get profile QR code (/docs/of-api/user/get-profile-qr-code) `GET https://theonlyapi.com/api/crm/your-crm-id/api2/v2/users/me/profile/views/qr` **OnlyFans only.** Requests made with a `user-id` belonging to a Fansly account are rejected — use the platform-neutral CRM data routes (`/notifications`, `/balances`, `/chats`, `/purchases`, `/subscribers/cached`, ...) which are Fansly-aware. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — QR code data - `url` (string) — QR code image URL. ## Example ```bash curl -X GET "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/users/me/profile/views/qr" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Get social buttons (/docs/of-api/user/get-social-buttons) `GET https://theonlyapi.com/api/crm/your-crm-id/api2/v2/users/social/buttons` Retrieves the current user's configured social media buttons/links. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. ✓ **Verified live** against a real OnlyFans account (2026-07-30); the `data` schema below is the real response shape. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — OnlyFans response — verified live; `data` is the real shape. - `success` (boolean) - `status_code` (integer) - `data` (any[]) ## Example ```bash curl -X GET "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/users/social/buttons" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Get Telegram link info (/docs/of-api/user/get-telegram-link-info) `GET https://theonlyapi.com/api/crm/your-crm-id/api2/v2/users/telegram-link` Returns the Telegram linking information/URL for connecting the account to Telegram. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X GET "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/users/telegram-link" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Get user links (/docs/of-api/user/get-user-links) `GET https://theonlyapi.com/api/crm/your-crm-id/api2/v2/users/links` Retrieves the current user's configured profile links. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. ✓ **Verified live** against a real OnlyFans account (2026-07-30); the `data` schema below is the real response shape. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — OnlyFans response — verified live; `data` is the real shape. - `success` (boolean) - `status_code` (integer) - `data` (any[]) ## Example ```bash curl -X GET "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/users/links" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Get user public profile (/docs/of-api/user/get-user-public-profile) `GET https://theonlyapi.com/api/crm/your-crm-id/api2/v2/users/{user_id}` **OnlyFans only.** Requests made with a `user-id` belonging to a Fansly account are rejected — use the platform-neutral CRM data routes (`/notifications`, `/balances`, `/chats`, `/purchases`, `/subscribers/cached`, ...) which are Fansly-aware. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Path parameters - `user_id` (string, required) ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — User profile - `id` (integer) - `name` (string) - `username` (string) - `displayName` (string) - `about` (string) - `avatar` (string) — Avatar URL. - `avatarThumbs` (object) - `c50` (string) - `c144` (string) - `header` (string) — Profile header/banner URL. - `email` (string) - `isVerified` (boolean) - `isPerformer` (boolean) - `canEarn` (boolean) - `tipsEnabled` (boolean) - `subscribedBy` (boolean) — Whether you are subscribed to this user. - `subscribersCount` (integer) - `subscribesCount` (integer) - `postsCount` (integer) - `photosCount` (integer) - `videosCount` (integer) - `audiosCount` (integer) - `friendsCount` (integer) - `joinDate` (string) - `firstPublishedPostDate` (string) - `subscribePrice` (number) - `chatMessagesCount` (integer) — Unread chat messages. - `countPriorityChat` (integer) - `countPinnedChat` (integer) - `hasPurchasedPosts` (boolean) - `paidFeed` (boolean) - `openseaInfo` (object) ## Example ```bash curl -X GET "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/users/{user_id}" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Get user's links (/docs/of-api/user/get-user-s-links) `GET https://theonlyapi.com/api/crm/your-crm-id/api2/v2/users/{user_id}/links` Retrieves the profile links configured by a user. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Path parameters - `user_id` (string, required) — ID of the user whose links to fetch. ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X GET "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/users/{user_id}/links" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Get user social buttons (/docs/of-api/user/get-user-social-buttons) `GET https://theonlyapi.com/api/crm/your-crm-id/api2/v2/users/{user_id}/social/buttons` Retrieves the social/link buttons configured on a user's profile. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Path parameters - `user_id` (string, required) — ID of the user whose social buttons to fetch. ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X GET "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/users/{user_id}/social/buttons" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Get WebSocket auth token (/docs/of-api/user/get-websocket-auth-token) `GET https://theonlyapi.com/api/crm/your-crm-id/api2/v2/users/ws-auth` Returns authentication data/token needed to establish the realtime WebSocket connection. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. ✓ **Verified live** against a real OnlyFans account (2026-07-30); the `data` schema below is the real response shape. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — OnlyFans response — verified live; `data` is the real shape. - `success` (boolean) - `status_code` (integer) - `data` (object) - `wsUrl` (string) - `wsAuthToken` (string) ## Example ```bash curl -X GET "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/users/ws-auth" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Get Yoti face-ID verification URL (/docs/of-api/user/get-yoti-face-id-verification-url) `GET https://theonlyapi.com/api/crm/your-crm-id/api2/v2/iv/yoti-face-id-url/{id}/{token}` Returns a Yoti face-ID identity-verification URL for the given identifiers. Part of the /iv identity-verification module (also yoti-redirect-url). **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Path parameters - `id` (string, required) — First path identifier (uncertain; likely verification/session id). - `token` (string, required) — Second path identifier (uncertain; likely a token/type/hash). ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X GET "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/iv/yoti-face-id-url/{id}/{token}" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Get Yoti identity verification URL (/docs/of-api/user/get-yoti-identity-verification-url) `GET https://theonlyapi.com/api/crm/your-crm-id/api2/v2/iv/yoti-redirect-url/{verification_id}` Retrieves a Yoti identity-verification redirect URL for the identity verification (iv) flow. Sibling call fetches a Yoti face-ID URL. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Path parameters - `verification_id` (string, required) — Identifier for the Yoti identity verification session (exact meaning uncertain). ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X GET "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/iv/yoti-redirect-url/{verification_id}" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # List active sessions (/docs/of-api/user/list-active-sessions) `GET https://theonlyapi.com/api/crm/your-crm-id/api2/v2/sessions` Retrieves the current user's active login sessions. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. ✓ **Verified live** against a real OnlyFans account (2026-07-30); the `data` schema below is the real response shape. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — OnlyFans response — verified live; `data` is the real shape. - `success` (boolean) - `status_code` (integer) - `data` (object[]) - `isCurrent` (boolean) - `lastActivity` (integer) - `ipAddress` (string) - `countryName` (string) - `client` (string) - `os` (string) - `brand` (string) - `loginMessage` (null) ## Example ```bash curl -X GET "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/sessions" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # List blocked users (/docs/of-api/user/list-blocked-users) `GET https://theonlyapi.com/api/crm/your-crm-id/api2/v2/users/blocked` **OnlyFans only.** Requests made with a `user-id` belonging to a Fansly account are rejected — use the platform-neutral CRM data routes (`/notifications`, `/balances`, `/chats`, `/purchases`, `/subscribers/cached`, ...) which are Fansly-aware. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Query parameters - `limit` (integer) — Default `10`. - `offset` (integer) — Default `0`. ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — Blocked users list - `list` (object[]) - `id` (integer) - `name` (string) - `username` (string) - `displayName` (string) - `about` (string) - `avatar` (string) — Avatar URL. - `avatarThumbs` (object) - `c50` (string) - `c144` (string) - `header` (string) — Profile header/banner URL. - `email` (string) - `isVerified` (boolean) - `isPerformer` (boolean) - `canEarn` (boolean) - `tipsEnabled` (boolean) - `subscribedBy` (boolean) — Whether you are subscribed to this user. - `subscribersCount` (integer) - `subscribesCount` (integer) - `postsCount` (integer) - `photosCount` (integer) - `videosCount` (integer) - `audiosCount` (integer) - `friendsCount` (integer) - `joinDate` (string) - `firstPublishedPostDate` (string) - `subscribePrice` (number) - `chatMessagesCount` (integer) — Unread chat messages. - `countPriorityChat` (integer) - `countPinnedChat` (integer) - `hasPurchasedPosts` (boolean) - `paidFeed` (boolean) - `openseaInfo` (object) - `hasMore` (boolean) ## Example ```bash curl -X GET "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/users/blocked" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # List login sessions (/docs/of-api/user/list-login-sessions) `GET https://theonlyapi.com/api/crm/your-crm-id/api2/v2/logins` Returns the account's login sessions/history. Paired with DELETE /logins/{id} to revoke a session. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. ✓ **Verified live** against a real OnlyFans account (2026-07-30); the `data` schema below is the real response shape. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — OnlyFans response — verified live; `data` is the real shape. - `success` (boolean) - `status_code` (integer) - `data` (object) - `items` (object[]) - `login` (string) - `date` (string) - `isPersistent` (boolean) - `hasMore` (boolean) ## Example ```bash curl -X GET "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/logins" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # List user's Shopify stores (/docs/of-api/user/list-user-s-shopify-stores) `GET https://theonlyapi.com/api/crm/your-crm-id/api2/v2/users/{user_id}/shopify/stores` Retrieves the Shopify stores connected to a given user. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Path parameters - `user_id` (string, required) — ID of the user whose Shopify stores are listed. ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X GET "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/users/{user_id}/shopify/stores" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # List WebAuthn credentials (/docs/of-api/user/list-webauthn-credentials) `GET https://theonlyapi.com/api/crm/your-crm-id/api2/v2/webauthn/credentials` Returns the current user's registered WebAuthn (passkey/security key) credentials. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. ✓ **Verified live** against a real OnlyFans account (2026-07-30); the `data` schema below is the real response shape. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — OnlyFans response — verified live; `data` is the real shape. - `success` (boolean) - `status_code` (integer) - `data` (any[]) ## Example ```bash curl -X GET "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/webauthn/credentials" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Log in as a helper (/docs/of-api/user/log-in-as-a-helper) `POST https://theonlyapi.com/api/crm/your-crm-id/api2/v2/users/login-as-helper/{helper_id}` Impersonates/switches into a helper (team member) account identified by helper id. Paired with POST /users/helper-logout. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Path parameters - `helper_id` (string, required) — ID of the helper account to log in as. ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X POST "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/users/login-as-helper/{helper_id}" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Log in user (/docs/of-api/user/log-in-user) `POST https://theonlyapi.com/api/crm/your-crm-id/api2/v2/users/login` Authenticates a user and starts a session. Accepts login credentials in the request body. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Request body Content type: `application/json` ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X POST "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/users/login" \ -H "X-API-Key: " \ -H "user-id: …" \ -H "Content-Type: application/json" \ -d '{}' ``` --- # Log out current user (/docs/of-api/user/log-out-current-user) `POST https://theonlyapi.com/api/crm/your-crm-id/api2/v2/users/logout` Logs out the currently authenticated user session. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X POST "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/users/logout" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Log out helper session (/docs/of-api/user/log-out-helper-session) `POST https://theonlyapi.com/api/crm/your-crm-id/api2/v2/users/helper-logout` Ends a helper (login-as-helper) session and returns to the primary account. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X POST "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/users/helper-logout" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Mark device as trusted (/docs/of-api/user/mark-device-as-trusted) `POST https://theonlyapi.com/api/crm/your-crm-id/api2/v2/trust` Marks the current session/device as trusted. Found next to webauthn, oauth/confirm and logout auth calls. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X POST "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/trust" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Postpone face-ID verification (/docs/of-api/user/postpone-face-id-verification) `POST https://theonlyapi.com/api/crm/your-crm-id/api2/v2/face-id/postpone` Postpones the required Face ID identity verification step. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X POST "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/face-id/postpone" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Record a profile visit (/docs/of-api/user/record-a-profile-visit) `POST https://theonlyapi.com/api/crm/your-crm-id/api2/v2/users/profile/visit` Records a profile visit event; a sibling POST /users/profile/view records profile views. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Request body Content type: `application/json` ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X POST "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/users/profile/visit" \ -H "X-API-Key: " \ -H "user-id: …" \ -H "Content-Type: application/json" \ -d '{}' ``` --- # Record cookie consent (/docs/of-api/user/record-cookie-consent) `POST https://theonlyapi.com/api/crm/your-crm-id/api2/v2/accepted-cookies` Stores the user's accepted cookie/consent preferences. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Request body Content type: `application/json` ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X POST "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/accepted-cookies" \ -H "X-API-Key: " \ -H "user-id: …" \ -H "Content-Type: application/json" \ -d '{}' ``` --- # Record profile view (/docs/of-api/user/record-profile-view) `POST https://theonlyapi.com/api/crm/your-crm-id/api2/v2/users/profile/view` Records that the current user viewed a profile (paired with users/profile/visit). Retries once on failure. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Request body Content type: `application/json` ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X POST "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/users/profile/view" \ -H "X-API-Key: " \ -H "user-id: …" \ -H "Content-Type: application/json" \ -d '{}' ``` --- # Register a new user account (/docs/of-api/user/register-a-new-user-account) `POST https://theonlyapi.com/api/crm/your-crm-id/api2/v2/users/register` Registers a new user account. The request body carries the registration form fields. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Request body Content type: `application/json` ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X POST "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/users/register" \ -H "X-API-Key: " \ -H "user-id: …" \ -H "Content-Type: application/json" \ -d '{}' ``` --- # Register social button click (/docs/of-api/user/register-social-button-click) `POST https://theonlyapi.com/api/crm/your-crm-id/api2/v2/users/social/buttons/{button_id}/click` Records a click on a user's social button. Part of the profile social-buttons feature. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Path parameters - `button_id` (string, required) — ID of the social button clicked. ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X POST "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/users/social/buttons/{button_id}/click" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Remove account helper (/docs/of-api/user/remove-account-helper) `DELETE https://theonlyapi.com/api/crm/your-crm-id/api2/v2/helpers/{helper_id}` Removes a helper (delegated team member) from the account. Related calls manage helper permissions and login-as-helper. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Path parameters - `helper_id` (string, required) — User ID of the helper to remove. ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X DELETE "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/helpers/{helper_id}" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Remove account password (/docs/of-api/user/remove-account-password) `DELETE https://theonlyapi.com/api/crm/your-crm-id/api2/v2/users/password` Deletes the current user's password (e.g. for social-login-only accounts). **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X DELETE "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/users/password" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Report login issue (/docs/of-api/user/report-login-issue) `POST https://theonlyapi.com/api/crm/your-crm-id/api2/v2/issues/login` Submits a login issue report (support). Called with an optional payload object. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Request body Content type: `application/json` ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X POST "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/issues/login" \ -H "X-API-Key: " \ -H "user-id: …" \ -H "Content-Type: application/json" \ -d '{}' ``` --- # Request account deletion (/docs/of-api/user/request-account-deletion) `POST https://theonlyapi.com/api/crm/your-crm-id/api2/v2/users/delete/request` Submits a request to delete the current user's account. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Request body Content type: `application/json` - `captchaCode` (string) — Captcha verification code. ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X POST "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/users/delete/request" \ -H "X-API-Key: " \ -H "user-id: …" \ -H "Content-Type: application/json" \ -d '{}' ``` --- # Request alternative OTP method (/docs/of-api/user/request-alternative-otp-method) `PUT https://theonlyapi.com/api/crm/your-crm-id/api2/v2/users/otp/alternative` Requests an alternative one-time-password (2FA) delivery method. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X PUT "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/users/otp/alternative" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Request email address change (/docs/of-api/user/request-email-address-change) `POST https://theonlyapi.com/api/crm/your-crm-id/api2/v2/emails/change` Initiates a change of the account's email address. A DELETE on the same path cancels a pending change. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Request body Content type: `application/json` ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X POST "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/emails/change" \ -H "X-API-Key: " \ -H "user-id: …" \ -H "Content-Type: application/json" \ -d '{}' ``` --- # Request OTP code (/docs/of-api/user/request-otp-code) `GET https://theonlyapi.com/api/crm/your-crm-id/api2/v2/users/otp/code` Requests/retrieves a one-time password (OTP) code for the current user. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X GET "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/users/otp/code" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Request password reset (/docs/of-api/user/request-password-reset) `POST https://theonlyapi.com/api/crm/your-crm-id/api2/v2/users/forgot-password` Initiates a forgot-password / password-reset request. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Request body Content type: `application/json` ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X POST "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/users/forgot-password" \ -H "X-API-Key: " \ -H "user-id: …" \ -H "Content-Type: application/json" \ -d '{}' ``` --- # Request phone number change (/docs/of-api/user/request-phone-number-change) `POST https://theonlyapi.com/api/crm/your-crm-id/api2/v2/phones/change` Initiates a change of the account's phone number. A DELETE on the same path cancels a pending change. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Request body Content type: `application/json` ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X POST "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/phones/change" \ -H "X-API-Key: " \ -H "user-id: …" \ -H "Content-Type: application/json" \ -d '{}' ``` --- # Resend confirmation email (/docs/of-api/user/resend-confirmation-email) `POST https://theonlyapi.com/api/crm/your-crm-id/api2/v2/emails/resend` Resends the account confirmation/verification email. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X POST "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/emails/resend" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Restore account access with code (/docs/of-api/user/restore-account-access-with-code) `POST https://theonlyapi.com/api/crm/your-crm-id/api2/v2/users/restore-access` Restores access to a user account using a provided restore/verification code. Sent with a skip429Alert retry config. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Request body Content type: `application/json` - `code` (string) — Restore-access code. ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X POST "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/users/restore-access" \ -H "X-API-Key: " \ -H "user-id: …" \ -H "Content-Type: application/json" \ -d '{}' ``` --- # Restrict a user (/docs/of-api/user/restrict-a-user) `POST https://theonlyapi.com/api/crm/your-crm-id/api2/v2/users/{user_id}/restrict` **OnlyFans only.** Requests made with a `user-id` belonging to a Fansly account are rejected — use the platform-neutral CRM data routes (`/notifications`, `/balances`, `/chats`, `/purchases`, `/subscribers/cached`, ...) which are Fansly-aware. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Path parameters - `user_id` (string, required) ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — User restricted ## Example ```bash curl -X POST "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/users/{user_id}/restrict" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Revoke a login session (/docs/of-api/user/revoke-a-login-session) `DELETE https://theonlyapi.com/api/crm/your-crm-id/api2/v2/logins/{login_id}` Revokes/removes an active login session identified by login id. Paired with GET /logins which lists active sessions. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Path parameters - `login_id` (string, required) — ID of the login/session to revoke. ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X DELETE "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/logins/{login_id}" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Revoke all sessions (/docs/of-api/user/revoke-all-sessions) `DELETE https://theonlyapi.com/api/crm/your-crm-id/api2/v2/sessions` Terminates the user's active login sessions (used in the sessions settings screen). **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X DELETE "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/sessions" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Set OpenSea NFT profile item (/docs/of-api/user/set-opensea-nft-profile-item) `PUT https://theonlyapi.com/api/crm/your-crm-id/api2/v2/users/opensea/nft` Updates the OpenSea NFT associated with the user's profile. Sibling calls manage the linked OpenSea wallet and asset listings. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Request body Content type: `application/json` ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X PUT "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/users/opensea/nft" \ -H "X-API-Key: " \ -H "user-id: …" \ -H "Content-Type: application/json" \ -d '{}' ``` --- # Set Spotify anthem (/docs/of-api/user/set-spotify-anthem) `PUT https://theonlyapi.com/api/crm/your-crm-id/api2/v2/users/social/spotify/anthem` Sets the user's Spotify profile anthem track. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Request body Content type: `application/json` - `anthemId` (string) — Spotify track ID to set as the anthem. ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X PUT "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/users/social/spotify/anthem" \ -H "X-API-Key: " \ -H "user-id: …" \ -H "Content-Type: application/json" \ -d '{}' ``` --- # Set top Spotify artists (/docs/of-api/user/set-top-spotify-artists) `PUT https://theonlyapi.com/api/crm/your-crm-id/api2/v2/users/social/spotify/artists` Sets the user's top Spotify artists shown on their profile. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Request body Content type: `application/json` - `topArtistsIds` (any[]) — IDs of the top Spotify artists. ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X PUT "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/users/social/spotify/artists" \ -H "X-API-Key: " \ -H "user-id: …" \ -H "Content-Type: application/json" \ -d '{}' ``` --- # Start age verification (/docs/of-api/user/start-age-verification) `POST https://theonlyapi.com/api/crm/your-crm-id/api2/v2/age-verifier/start` Initiates the age verification flow. Grouped with iv/start and face-id/start identity checks. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X POST "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/age-verifier/start" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Start Face ID verification (/docs/of-api/user/start-face-id-verification) `POST https://theonlyapi.com/api/crm/your-crm-id/api2/v2/face-id/start` Starts a Face ID (biometric identity) verification session. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Request body Content type: `application/json` ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X POST "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/face-id/start" \ -H "X-API-Key: " \ -H "user-id: …" \ -H "Content-Type: application/json" \ -d '{}' ``` --- # Start identity verification (/docs/of-api/user/start-identity-verification) `POST https://theonlyapi.com/api/crm/your-crm-id/api2/v2/iv/start` Starts an identity-verification (IV) flow for the user. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Request body Content type: `application/json` ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X POST "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/iv/start" \ -H "X-API-Key: " \ -H "user-id: …" \ -H "Content-Type: application/json" \ -d '{}' ``` --- # Submit account appeal (/docs/of-api/user/submit-account-appeal) `POST https://theonlyapi.com/api/crm/your-crm-id/api2/v2/users/appeal` Submits an appeal, e.g. against an account restriction or moderation action. Defined near reports/reasons and unsubscribe/reasons calls. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Request body Content type: `application/json` ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X POST "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/users/appeal" \ -H "X-API-Key: " \ -H "user-id: …" \ -H "Content-Type: application/json" \ -d '{}' ``` --- # Switch to connected account (/docs/of-api/user/switch-to-connected-account) `POST https://theonlyapi.com/api/crm/your-crm-id/api2/v2/users/switch/{user_id}` Switches the active session to a connected/linked user account. Defined near users/connect and users/get-auth-token. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Path parameters - `user_id` (string, required) — ID of the connected account to switch to. ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X POST "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/users/switch/{user_id}" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Unblock a user (/docs/of-api/user/unblock-a-user) `DELETE https://theonlyapi.com/api/crm/your-crm-id/api2/v2/users/{user_id}/block` **OnlyFans only.** Requests made with a `user-id` belonging to a Fansly account are rejected — use the platform-neutral CRM data routes (`/notifications`, `/balances`, `/chats`, `/purchases`, `/subscribers/cached`, ...) which are Fansly-aware. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Path parameters - `user_id` (string, required) ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Responses ### 200 — User unblocked ## Example ```bash curl -X DELETE "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/users/{user_id}/block" \ -H "X-API-Key: " \ -H "user-id: …" ``` --- # Update a social button (/docs/of-api/user/update-a-social-button) `PUT https://theonlyapi.com/api/crm/your-crm-id/api2/v2/users/social/buttons/{button_id}` Updates a single social button by id on the user's profile. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Path parameters - `button_id` (string, required) — ID of the social button to update. ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Request body Content type: `application/json` ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X PUT "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/users/social/buttons/{button_id}" \ -H "X-API-Key: " \ -H "user-id: …" \ -H "Content-Type: application/json" \ -d '{}' ``` --- # Update a user link (/docs/of-api/user/update-a-user-link) `PUT https://theonlyapi.com/api/crm/your-crm-id/api2/v2/users/links` Updates one of the user's external profile links. Sibling calls list, create and delete links. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Request body Content type: `application/json` - `link` (string|object) — The link value to update. ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X PUT "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/users/links" \ -H "X-API-Key: " \ -H "user-id: …" \ -H "Content-Type: application/json" \ -d '{}' ``` --- # Update message settings (/docs/of-api/user/update-message-settings) `PATCH https://theonlyapi.com/api/crm/your-crm-id/api2/v2/users/me/settings/messages` Updates the current user's messaging settings. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Request body Content type: `application/json` ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X PATCH "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/users/me/settings/messages" \ -H "X-API-Key: " \ -H "user-id: …" \ -H "Content-Type: application/json" \ -d '{}' ``` --- # Update notification settings (/docs/of-api/user/update-notification-settings) `PATCH https://theonlyapi.com/api/crm/your-crm-id/api2/v2/users/settings/notifications` Updates the account's notification settings. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Request body Content type: `application/json` ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X PATCH "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/users/settings/notifications" \ -H "X-API-Key: " \ -H "user-id: …" \ -H "Content-Type: application/json" \ -d '{}' ``` --- # Update social profile buttons (/docs/of-api/user/update-social-profile-buttons) `PUT https://theonlyapi.com/api/crm/your-crm-id/api2/v2/users/social/buttons` Updates the configuration of the user's social profile buttons. Sibling calls add, reorder, delete and track clicks on these buttons. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Request body Content type: `application/json` ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X PUT "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/users/social/buttons" \ -H "X-API-Key: " \ -H "user-id: …" \ -H "Content-Type: application/json" \ -d '{}' ``` --- # Update user profile (/docs/of-api/user/update-user-profile) `PATCH https://theonlyapi.com/api/crm/your-crm-id/api2/v2/users/me` Update profile fields. Supports display name, about text, subscription price, tip settings, and more. Only include the fields you want to change. **OnlyFans only.** Requests made with a `user-id` belonging to a Fansly account are rejected — use the platform-neutral CRM data routes (`/notifications`, `/balances`, `/chats`, `/purchases`, `/subscribers/cached`, ...) which are Fansly-aware. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Request body Content type: `application/json` - `displayName` (string) — Profile display name. e.g. `"My Creator Name"`. - `about` (string) — Bio / about text. e.g. `"Welcome to my page! 💕"`. - `subscribePrice` (number) — Monthly subscription price in USD. e.g. `9.99`. - `tipsEnabled` (boolean) — Whether tips are enabled on the profile. - `tipsMin` (number) — Minimum tip amount in USD. - `tipsMax` (number) — Maximum tip amount in USD. - `location` (string) — Profile location text. - `website` (string) — Website URL. - `wishlist` (string) — Amazon wishlist URL. - `showPostsTipsSum` (boolean) — Show tip totals on posts. - `showMediaCount` (boolean) — Show photo/video counts on profile. - `showPostsCount` (boolean) — Show total posts count. - `canCommentOnContent` (boolean) — Allow comments on posts. - `isPossibleToReply` (boolean) — Allow DM replies. ## Responses ### 200 — Updated profile ## Example **Update subscription price** ```bash curl -X PATCH "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/users/me" \ -H "X-API-Key: " \ -H "user-id: …" \ -H "Content-Type: application/json" \ -d '{"subscribePrice":14.99}' ``` **Update bio and display name** ```bash curl -X PATCH "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/users/me" \ -H "X-API-Key: " \ -H "user-id: …" \ -H "Content-Type: application/json" \ -d '{"displayName":"My New Name","about":"Welcome to my page! 💕 DM me for custom content."}' ``` **Update profile settings** ```bash curl -X PATCH "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/users/me" \ -H "X-API-Key: " \ -H "user-id: …" \ -H "Content-Type: application/json" \ -d '{"tipsEnabled":true,"tipsMin":5,"canCommentOnContent":true}' ``` --- # Update user settings section (/docs/of-api/user/update-user-settings-section) `PUT https://theonlyapi.com/api/crm/your-crm-id/api2/v2/users/me/settings/{section}` Replaces the settings for a specific settings section of the current user. The section key is the path param and the settings payload is the body. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Path parameters - `section` (string, required) — Settings section/type key (e.g. messages, story, streams). ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Request body Content type: `application/json` ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X PUT "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/users/me/settings/{section}" \ -H "X-API-Key: " \ -H "user-id: …" \ -H "Content-Type: application/json" \ -d '{}' ``` --- # Update user settings section (/docs/of-api/user/update-user-settings-section-patch) `PATCH https://theonlyapi.com/api/crm/your-crm-id/api2/v2/users/me/settings/{settings_section}` Partially updates a named section of the current user's settings. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Path parameters - `settings_section` (string, required) — Name of the settings section to update. ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Request body Content type: `application/json` ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X PATCH "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/users/me/settings/{settings_section}" \ -H "X-API-Key: " \ -H "user-id: …" \ -H "Content-Type: application/json" \ -d '{}' ``` --- # Validate current user data (/docs/of-api/user/validate-current-user-data) `POST https://theonlyapi.com/api/crm/your-crm-id/api2/v2/users/me/validate-data` Validates submitted profile/account data for the current user. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Request body Content type: `application/json` ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X POST "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/users/me/validate-data" \ -H "X-API-Key: " \ -H "user-id: …" \ -H "Content-Type: application/json" \ -d '{}' ``` --- # Verify OTP code (/docs/of-api/user/verify-otp-code) `POST https://theonlyapi.com/api/crm/your-crm-id/api2/v2/users/otp/check` Verifies a one-time password code. Grouped with users/otp code/phone/alternative endpoints. **OnlyFans only** — Fansly accounts are rejected on `/api2/v2/*`. **Guide:** [The two surfaces](/docs/two-surfaces) ## Authentication - `X-API-Key` header (apiKey) ## Header parameters - `user-id` (string, required) — Creator account ID of the account to act as (e.g. `509955039`). **Required** — omitting it returns `400 user-id header is required`. Use `GET /accounts` to list your connected accounts. On `/api2/v2/*` the account must be an OnlyFans account; Fansly accounts are rejected there. - `X-Proxy` (string) — Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. **Required on the connection routes** (`POST /accounts/login`, `POST /accounts/login/cookies`, `POST /accounts/login/verify-otp`) for OnlyFans accounts; optional for Fansly. ## Request body Content type: `application/json` ## Responses ### 200 — OnlyFans response (passthrough envelope) `data` carries OnlyFans' own response body for this endpoint, passed through unchanged. - `success` (boolean, required) — True when OnlyFans returned a 2xx status. - `status_code` (integer, required) — The upstream OnlyFans HTTP status code. - `data` (any, required) — The raw OnlyFans response body (object or array). - `relogin` (boolean) — Present and true when the session was refreshed mid-request. ## Example ```bash curl -X POST "https://theonlyapi.com/api/crm/your-crm-id/api2/v2/users/otp/check" \ -H "X-API-Key: " \ -H "user-id: …" \ -H "Content-Type: application/json" \ -d '{}' ```