# 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: