Auto generated from the verified native parity layer. Every path below is a real OnlyFans /api2/v2 route reached through the CreatorAPI proxy. GET routes marked verified were probed live (HTTP 200). Writes are harvested routes, verify on first call. 248 capabilities · 222 GET live verified · 110 writes · 41 groups.
misc
Add media to list · ✅ live verified
[media-vault-lists] POST /vault/lists/{id}/media.
POST /v1/{account}/native/vault/lists/{list_id}/media · 2 credit(s)
Path params: list_id
curl -X POST \
-H "X-API-Key: $CREATORS_API_KEY" \
"https://api.creator-api.com/v1/{account}/native/vault/lists/{list_id}/media" -d '{}'
import requests
r = requests.post(
"https://api.creator-api.com/v1/{account}/native/vault/lists/{list_id}/media",
headers={"X-API-Key": KEY},
).json()
print(r.json())
const r = await fetch("https://api.creator-api.com/v1/{account}/native/vault/lists/{list_id}/media", {
method: "POST",
headers: { "X-API-Key": KEY },
});
console.log(await r.json());
Add story to highlight
[story-highlights] PUT /stories/highlights/{id}.
PUT /v1/{account}/native/stories/highlights/{highlight_id} · 2 credit(s)
Path params: highlight_id
curl -X PUT \
-H "X-API-Key: $CREATORS_API_KEY" \
"https://api.creator-api.com/v1/{account}/native/stories/highlights/{highlight_id}" -d '{}'
import requests
r = requests.put(
"https://api.creator-api.com/v1/{account}/native/stories/highlights/{highlight_id}",
headers={"X-API-Key": KEY},
).json()
print(r.json())
const r = await fetch("https://api.creator-api.com/v1/{account}/native/stories/highlights/{highlight_id}", {
method: "PUT",
headers: { "X-API-Key": KEY },
});
console.log(await r.json());
Add users to user list · ✅ live verified
[user-list-collections] POST /lists/{id}/users/{id}. FIXED 2026-08-14: the bulk POST /lists/users {id,users:[...]} shape is unreliable (400 List id not found, matches app/services/of_api.py's own comment). Real working call is per-user, no body -- confirmed live end-to-end 2026-08-14 (create list, add, verify, pin, remove, delete list, all 200).
POST /v1/{account}/native/lists/{list_id}/users/{user_id} · 2 credit(s) · FIXED 2026-08-14 -- the mapped bulk path POST /lists/users {id, users:[...]} was genuinely broken (confirmed "List id not found" against a real, freshly created, verified-existing list -- not a guessing/timing issue). Root cause found in existing code, not guessed: app/services/of_api.py already documents this exact same finding and already uses a working per-user path instead (of_native.add_to_list, live in hold_list.py). Re-mapped add_users_to_user_list to the real working shape: POST /lists/{list_id}/users/{user_id}, no body, one call per user. Full roundtrip live-proven on gammaboy1 2026-08-14: create_user_list -> add (this fix) -> GET verify user present -> pin_unpin_user_in_user_list -> GET verify pinned -> remove_user_from_a_user_list -> GET verify empty -> delete_user_list. All 8 calls 200, list fully cleaned up after. Function signature changed from (creator_id, body) to (creator_id, list_id, user_id, body) in both of_native_parity.py copies.
Path params: list_id, user_id
curl -X POST \
-H "X-API-Key: $CREATORS_API_KEY" \
"https://api.creator-api.com/v1/{account}/native/lists/{list_id}/users/{user_id}" -d '{}'
import requests
r = requests.post(
"https://api.creator-api.com/v1/{account}/native/lists/{list_id}/users/{user_id}",
headers={"X-API-Key": KEY},
).json()
print(r.json())
const r = await fetch("https://api.creator-api.com/v1/{account}/native/lists/{list_id}/users/{user_id}", {
method: "POST",
headers: { "X-API-Key": KEY },
});
console.log(await r.json());
Archive post · ✅ live verified
[posts] POST /posts/{id}/archive. native path /posts/{id}/{state}archive
POST /v1/{account}/native/posts/{post_id}/archive · 2 credit(s)
Path params: post_id
curl -X POST \
-H "X-API-Key: $CREATORS_API_KEY" \
"https://api.creator-api.com/v1/{account}/native/posts/{post_id}/archive" -d '{}'
import requests
r = requests.post(
"https://api.creator-api.com/v1/{account}/native/posts/{post_id}/archive",
headers={"X-API-Key": KEY},
).json()
print(r.json())
const r = await fetch("https://api.creator-api.com/v1/{account}/native/posts/{post_id}/archive", {
method: "POST",
headers: { "X-API-Key": KEY },
});
console.log(await r.json());
Block user · ✅ live verified
[users] POST /users/{id}/block.
POST /v1/{account}/native/users/{user_id}/block · 2 credit(s) · Route confirmed via fake-id probe (specific 'User not found' response); real block effect intentionally never fired against a real fan.
Path params: user_id
curl -X POST \
-H "X-API-Key: $CREATORS_API_KEY" \
"https://api.creator-api.com/v1/{account}/native/users/{user_id}/block" -d '{}'
import requests
r = requests.post(
"https://api.creator-api.com/v1/{account}/native/users/{user_id}/block",
headers={"X-API-Key": KEY},
).json()
print(r.json())
const r = await fetch("https://api.creator-api.com/v1/{account}/native/users/{user_id}/block", {
method: "POST",
headers: { "X-API-Key": KEY },
});
console.log(await r.json());
Clear user list · ✅ live verified
[user-list-collections] DELETE /lists/{id}/users.
DELETE /v1/{account}/native/lists/{list_id}/users · 2 credit(s)
Path params: list_id
curl -X DELETE \
-H "X-API-Key: $CREATORS_API_KEY" \
"https://api.creator-api.com/v1/{account}/native/lists/{list_id}/users" -d '{}'
import requests
r = requests.delete(
"https://api.creator-api.com/v1/{account}/native/lists/{list_id}/users",
headers={"X-API-Key": KEY},
).json()
print(r.json())
const r = await fetch("https://api.creator-api.com/v1/{account}/native/lists/{list_id}/users", {
method: "DELETE",
headers: { "X-API-Key": KEY },
});
console.log(await r.json());
Delete bundle
[subscription-bundles] DELETE /subscriptions/bundles/{id}.
DELETE /v1/{account}/native/subscriptions/bundles/{bundle_id} · 2 credit(s)
Path params: bundle_id
curl -X DELETE \
-H "X-API-Key: $CREATORS_API_KEY" \
"https://api.creator-api.com/v1/{account}/native/subscriptions/bundles/{bundle_id}" -d '{}'
import requests
r = requests.delete(
"https://api.creator-api.com/v1/{account}/native/subscriptions/bundles/{bundle_id}",
headers={"X-API-Key": KEY},
).json()
print(r.json())
const r = await fetch("https://api.creator-api.com/v1/{account}/native/subscriptions/bundles/{bundle_id}", {
method: "DELETE",
headers: { "X-API-Key": KEY },
});
console.log(await r.json());
Delete chat · ✅ live verified
[chats] DELETE /chats/{id}.
DELETE /v1/{account}/native/chats/{chat_id} · 2 credit(s)
Path params: chat_id
curl -X DELETE \
-H "X-API-Key: $CREATORS_API_KEY" \
"https://api.creator-api.com/v1/{account}/native/chats/{chat_id}" -d '{}'
import requests
r = requests.delete(
"https://api.creator-api.com/v1/{account}/native/chats/{chat_id}",
headers={"X-API-Key": KEY},
).json()
print(r.json())
const r = await fetch("https://api.creator-api.com/v1/{account}/native/chats/{chat_id}", {
method: "DELETE",
headers: { "X-API-Key": KEY },
});
console.log(await r.json());
Delete free trial link
[free-trial-links] DELETE /trials/{id}.
DELETE /v1/{account}/native/trials/{trial_id} · 2 credit(s)
Path params: trial_id
curl -X DELETE \
-H "X-API-Key: $CREATORS_API_KEY" \
"https://api.creator-api.com/v1/{account}/native/trials/{trial_id}" -d '{}'
import requests
r = requests.delete(
"https://api.creator-api.com/v1/{account}/native/trials/{trial_id}",
headers={"X-API-Key": KEY},
).json()
print(r.json())
const r = await fetch("https://api.creator-api.com/v1/{account}/native/trials/{trial_id}", {
method: "DELETE",
headers: { "X-API-Key": KEY },
});
console.log(await r.json());
Delete message · ✅ live verified
[chat-messages] DELETE /messages/{id}.
DELETE /v1/{account}/native/messages/{message_id} · 2 credit(s)
Path params: message_id
curl -X DELETE \
-H "X-API-Key: $CREATORS_API_KEY" \
"https://api.creator-api.com/v1/{account}/native/messages/{message_id}" -d '{}'
import requests
r = requests.delete(
"https://api.creator-api.com/v1/{account}/native/messages/{message_id}",
headers={"X-API-Key": KEY},
).json()
print(r.json())
const r = await fetch("https://api.creator-api.com/v1/{account}/native/messages/{message_id}", {
method: "DELETE",
headers: { "X-API-Key": KEY },
});
console.log(await r.json());
Delete post · ✅ live verified
[posts] DELETE /posts/{id}.
DELETE /v1/{account}/native/posts/{post_id} · 2 credit(s)
Path params: post_id
curl -X DELETE \
-H "X-API-Key: $CREATORS_API_KEY" \
"https://api.creator-api.com/v1/{account}/native/posts/{post_id}" -d '{}'
import requests
r = requests.delete(
"https://api.creator-api.com/v1/{account}/native/posts/{post_id}",
headers={"X-API-Key": KEY},
).json()
print(r.json())
const r = await fetch("https://api.creator-api.com/v1/{account}/native/posts/{post_id}", {
method: "DELETE",
headers: { "X-API-Key": KEY },
});
console.log(await r.json());
Delete promotion
[promotions] DELETE /promotions/{id}.
DELETE /v1/{account}/native/promotions/{promotion_id} · 2 credit(s)
Path params: promotion_id
curl -X DELETE \
-H "X-API-Key: $CREATORS_API_KEY" \
"https://api.creator-api.com/v1/{account}/native/promotions/{promotion_id}" -d '{}'
import requests
r = requests.delete(
"https://api.creator-api.com/v1/{account}/native/promotions/{promotion_id}",
headers={"X-API-Key": KEY},
).json()
print(r.json())
const r = await fetch("https://api.creator-api.com/v1/{account}/native/promotions/{promotion_id}", {
method: "DELETE",
headers: { "X-API-Key": KEY },
});
console.log(await r.json());
Delete social media button · ✅ live verified
[settings] DELETE /users/social/buttons/{id}.
DELETE /v1/{account}/native/users/social/buttons/{button_id} · 2 credit(s) · REAL DESTRUCTIVE ACTION EXECUTED 2026-08-14 with Maxim's explicit authorization -- hyladiaz's Instagram button is genuinely deleted, no API restore path exists.
Path params: button_id
curl -X DELETE \
-H "X-API-Key: $CREATORS_API_KEY" \
"https://api.creator-api.com/v1/{account}/native/users/social/buttons/{button_id}" -d '{}'
import requests
r = requests.delete(
"https://api.creator-api.com/v1/{account}/native/users/social/buttons/{button_id}",
headers={"X-API-Key": KEY},
).json()
print(r.json())
const r = await fetch("https://api.creator-api.com/v1/{account}/native/users/social/buttons/{button_id}", {
method: "DELETE",
headers: { "X-API-Key": KEY },
});
console.log(await r.json());
Delete story · ✅ live verified
[stories] DELETE /stories/{id}.
DELETE /v1/{account}/native/stories/{story_id} · 2 credit(s)
Path params: story_id
curl -X DELETE \
-H "X-API-Key: $CREATORS_API_KEY" \
"https://api.creator-api.com/v1/{account}/native/stories/{story_id}" -d '{}'
import requests
r = requests.delete(
"https://api.creator-api.com/v1/{account}/native/stories/{story_id}",
headers={"X-API-Key": KEY},
).json()
print(r.json())
const r = await fetch("https://api.creator-api.com/v1/{account}/native/stories/{story_id}", {
method: "DELETE",
headers: { "X-API-Key": KEY },
});
console.log(await r.json());
Delete story highlight
[story-highlights] DELETE /stories/highlights/{id}.
DELETE /v1/{account}/native/stories/highlights/{highlight_id} · 2 credit(s)
Path params: highlight_id
curl -X DELETE \
-H "X-API-Key: $CREATORS_API_KEY" \
"https://api.creator-api.com/v1/{account}/native/stories/highlights/{highlight_id}" -d '{}'
import requests
r = requests.delete(
"https://api.creator-api.com/v1/{account}/native/stories/highlights/{highlight_id}",
headers={"X-API-Key": KEY},
).json()
print(r.json())
const r = await fetch("https://api.creator-api.com/v1/{account}/native/stories/highlights/{highlight_id}", {
method: "DELETE",
headers: { "X-API-Key": KEY },
});
console.log(await r.json());
Delete tracking link · ✅ live verified
[tracking-links] DELETE /campaigns/{id}.
DELETE /v1/{account}/native/campaigns/{campaign_id} · 2 credit(s)
Path params: campaign_id
curl -X DELETE \
-H "X-API-Key: $CREATORS_API_KEY" \
"https://api.creator-api.com/v1/{account}/native/campaigns/{campaign_id}" -d '{}'
import requests
r = requests.delete(
"https://api.creator-api.com/v1/{account}/native/campaigns/{campaign_id}",
headers={"X-API-Key": KEY},
).json()
print(r.json())
const r = await fetch("https://api.creator-api.com/v1/{account}/native/campaigns/{campaign_id}", {
method: "DELETE",
headers: { "X-API-Key": KEY },
});
console.log(await r.json());
Delete user list · ✅ live verified
[user-list-collections] DELETE /lists/{id}.
DELETE /v1/{account}/native/lists/{list_id} · 2 credit(s)
Path params: list_id
curl -X DELETE \
-H "X-API-Key: $CREATORS_API_KEY" \
"https://api.creator-api.com/v1/{account}/native/lists/{list_id}" -d '{}'
import requests
r = requests.delete(
"https://api.creator-api.com/v1/{account}/native/lists/{list_id}",
headers={"X-API-Key": KEY},
).json()
print(r.json())
const r = await fetch("https://api.creator-api.com/v1/{account}/native/lists/{list_id}", {
method: "DELETE",
headers: { "X-API-Key": KEY },
});
console.log(await r.json());
Delete vault list · ✅ live verified
[media-vault-lists] DELETE /vault/lists/{id}.
DELETE /v1/{account}/native/vault/lists/{list_id} · 2 credit(s)
Path params: list_id
curl -X DELETE \
-H "X-API-Key: $CREATORS_API_KEY" \
"https://api.creator-api.com/v1/{account}/native/vault/lists/{list_id}" -d '{}'
import requests
r = requests.delete(
"https://api.creator-api.com/v1/{account}/native/vault/lists/{list_id}",
headers={"X-API-Key": KEY},
).json()
print(r.json())
const r = await fetch("https://api.creator-api.com/v1/{account}/native/vault/lists/{list_id}", {
method: "DELETE",
headers: { "X-API-Key": KEY },
});
console.log(await r.json());
Get mass message · ✅ live verified
[mass-messaging] GET /messages/queue/{id}.
GET /v1/{account}/native/messages/queue/{queue_id} · 1 credit(s)
Path params: queue_id
curl -X GET \
-H "X-API-Key: $CREATORS_API_KEY" \
"https://api.creator-api.com/v1/{account}/native/messages/queue/{queue_id}?limit=50"
import requests
r = requests.get(
"https://api.creator-api.com/v1/{account}/native/messages/queue/{queue_id}?limit=50",
headers={"X-API-Key": KEY},
)
print(r.json())
const r = await fetch("https://api.creator-api.com/v1/{account}/native/messages/queue/{queue_id}?limit=50", {
method: "GET",
headers: { "X-API-Key": KEY },
});
console.log(await r.json());
Get post · ✅ live verified
[posts] GET /posts/{id}.
GET /v1/{account}/native/posts/{post_id} · 1 credit(s)
Path params: post_id
curl -X GET \
-H "X-API-Key: $CREATORS_API_KEY" \
"https://api.creator-api.com/v1/{account}/native/posts/{post_id}?limit=50"
import requests
r = requests.get(
"https://api.creator-api.com/v1/{account}/native/posts/{post_id}?limit=50",
headers={"X-API-Key": KEY},
)
print(r.json())
const r = await fetch("https://api.creator-api.com/v1/{account}/native/posts/{post_id}?limit=50", {
method: "GET",
headers: { "X-API-Key": KEY },
});
console.log(await r.json());
Get profile details · ✅ live verified
[public-profiles] GET /users/{id}. exists as get_profile (by handle)
GET /v1/{account}/native/users/{user_id} · 1 credit(s)
Path params: user_id
curl -X GET \
-H "X-API-Key: $CREATORS_API_KEY" \
"https://api.creator-api.com/v1/{account}/native/users/{user_id}?limit=50"
import requests
r = requests.get(
"https://api.creator-api.com/v1/{account}/native/users/{user_id}?limit=50",
headers={"X-API-Key": KEY},
)
print(r.json())
const r = await fetch("https://api.creator-api.com/v1/{account}/native/users/{user_id}?limit=50", {
method: "GET",
headers: { "X-API-Key": KEY },
});
console.log(await r.json());
Get story stats · ✅ live verified
[stories] GET /stories/{id}/stats.
GET /v1/{account}/native/stories/{story_id}/stats · 1 credit(s)
Path params: story_id
curl -X GET \
-H "X-API-Key: $CREATORS_API_KEY" \
"https://api.creator-api.com/v1/{account}/native/stories/{story_id}/stats?limit=50"
import requests
r = requests.get(
"https://api.creator-api.com/v1/{account}/native/stories/{story_id}/stats?limit=50",
headers={"X-API-Key": KEY},
)
print(r.json())
const r = await fetch("https://api.creator-api.com/v1/{account}/native/stories/{story_id}/stats?limit=50", {
method: "GET",
headers: { "X-API-Key": KEY },
});
console.log(await r.json());
Get subscription history · ✅ live verified
[fans] GET /subscriptions/{id}/history.
GET /v1/{account}/native/subscriptions/{subscription_id}/history · 1 credit(s) · The path param subscription_id is really the fan's user_id (e.g. from list_active_fans), not a separate subscription-record id.
Path params: subscription_id
curl -X GET \
-H "X-API-Key: $CREATORS_API_KEY" \
"https://api.creator-api.com/v1/{account}/native/subscriptions/{subscription_id}/history?limit=50"
import requests
r = requests.get(
"https://api.creator-api.com/v1/{account}/native/subscriptions/{subscription_id}/history?limit=50",
headers={"X-API-Key": KEY},
)
print(r.json())
const r = await fetch("https://api.creator-api.com/v1/{account}/native/subscriptions/{subscription_id}/history?limit=50", {
method: "GET",
headers: { "X-API-Key": KEY },
});
console.log(await r.json());
Get transaction summary · ✅ live verified
[analytics-financial] GET /payouts/transactions (fixed 2026-08-14 -- was pointed at /payments/all/transactions, a narrow/incomplete feed; /payouts/transactions is the real, complete, currently-updating ledger). Raw OF page, summarise client-side, or use the real server-side aggregation at get_analytics_transaction_summary.
GET /v1/{account}/native/payouts/transactions · 1 credit(s) · summarise client-side
curl -X GET \
-H "X-API-Key: $CREATORS_API_KEY" \
"https://api.creator-api.com/v1/{account}/native/payouts/transactions?limit=50"
import requests
r = requests.get(
"https://api.creator-api.com/v1/{account}/native/payouts/transactions?limit=50",
headers={"X-API-Key": KEY},
)
print(r.json())
const r = await fetch("https://api.creator-api.com/v1/{account}/native/payouts/transactions?limit=50", {
method: "GET",
headers: { "X-API-Key": KEY },
});
console.log(await r.json());
Get transactions by type · ✅ live verified
[analytics-financial] GET /payouts/transactions (fixed 2026-08-14, see get_transaction_summary docstring for why). Raw OF page, filter by type client-side, or use the real server-side aggregation at get_analytics_transactions_by_type.
GET /v1/{account}/native/payouts/transactions · 1 credit(s) · summarise client-side
curl -X GET \
-H "X-API-Key: $CREATORS_API_KEY" \
"https://api.creator-api.com/v1/{account}/native/payouts/transactions?limit=50"
import requests
r = requests.get(
"https://api.creator-api.com/v1/{account}/native/payouts/transactions?limit=50",
headers={"X-API-Key": KEY},
)
print(r.json())
const r = await fetch("https://api.creator-api.com/v1/{account}/native/payouts/transactions?limit=50", {
method: "GET",
headers: { "X-API-Key": KEY },
});
console.log(await r.json());
Get user details · ✅ live verified
[users] GET /users/{id}.
GET /v1/{account}/native/users/{user_id} · 1 credit(s)
Path params: user_id
curl -X GET \
-H "X-API-Key: $CREATORS_API_KEY" \
"https://api.creator-api.com/v1/{account}/native/users/{user_id}?limit=50"
import requests
r = requests.get(
"https://api.creator-api.com/v1/{account}/native/users/{user_id}?limit=50",
headers={"X-API-Key": KEY},
)
print(r.json())
const r = await fetch("https://api.creator-api.com/v1/{account}/native/users/{user_id}?limit=50", {
method: "GET",
headers: { "X-API-Key": KEY },
});
console.log(await r.json());
Get user list · ✅ live verified
[user-list-collections] GET /lists/{id}.
GET /v1/{account}/native/lists/{list_id} · 1 credit(s)
Path params: list_id
curl -X GET \
-H "X-API-Key: $CREATORS_API_KEY" \
"https://api.creator-api.com/v1/{account}/native/lists/{list_id}?limit=50"
import requests
r = requests.get(
"https://api.creator-api.com/v1/{account}/native/lists/{list_id}?limit=50",
headers={"X-API-Key": KEY},
)
print(r.json())
const r = await fetch("https://api.creator-api.com/v1/{account}/native/lists/{list_id}?limit=50", {
method: "GET",
headers: { "X-API-Key": KEY },
});
console.log(await r.json());
Get vault media · ✅ live verified
[media-vault] GET /vault/media/{id}.
GET /v1/{account}/native/vault/media/{media_id} · 1 credit(s)
Path params: media_id
curl -X GET \
-H "X-API-Key: $CREATORS_API_KEY" \
"https://api.creator-api.com/v1/{account}/native/vault/media/{media_id}?limit=50"
import requests
r = requests.get(
"https://api.creator-api.com/v1/{account}/native/vault/media/{media_id}?limit=50",
headers={"X-API-Key": KEY},
)
print(r.json())
const r = await fetch("https://api.creator-api.com/v1/{account}/native/vault/media/{media_id}?limit=50", {
method: "GET",
headers: { "X-API-Key": KEY },
});
console.log(await r.json());
Hide chat · ✅ live verified
[chats] POST /chats/{id}/hide.
POST /v1/{account}/native/chats/{chat_id}/hide · 2 credit(s)
Path params: chat_id
curl -X POST \
-H "X-API-Key: $CREATORS_API_KEY" \
"https://api.creator-api.com/v1/{account}/native/chats/{chat_id}/hide" -d '{}'
import requests
r = requests.post(
"https://api.creator-api.com/v1/{account}/native/chats/{chat_id}/hide",
headers={"X-API-Key": KEY},
).json()
print(r.json())
const r = await fetch("https://api.creator-api.com/v1/{account}/native/chats/{chat_id}/hide", {
method: "POST",
headers: { "X-API-Key": KEY },
});
console.log(await r.json());
Like message · ✅ live verified
[chat-messages] POST /messages/{id}/like.
POST /v1/{account}/native/messages/{message_id}/like · 2 credit(s) · Needs retest against an inbound (fan-authored) message -- our test message was one we sent, likely why 'like' rejected it while pin/unpin on the same id worked.
Path params: message_id
curl -X POST \
-H "X-API-Key: $CREATORS_API_KEY" \
"https://api.creator-api.com/v1/{account}/native/messages/{message_id}/like" -d '{}'
import requests
r = requests.post(
"https://api.creator-api.com/v1/{account}/native/messages/{message_id}/like",
headers={"X-API-Key": KEY},
).json()
print(r.json())
const r = await fetch("https://api.creator-api.com/v1/{account}/native/messages/{message_id}/like", {
method: "POST",
headers: { "X-API-Key": KEY },
});
console.log(await r.json());
List chat media gallery · ✅ live verified
[chats] GET /chats/{id}/media.
GET /v1/{account}/native/chats/{chat_id}/media · 1 credit(s)
Path params: chat_id
curl -X GET \
-H "X-API-Key: $CREATORS_API_KEY" \
"https://api.creator-api.com/v1/{account}/native/chats/{chat_id}/media?limit=50"
import requests
r = requests.get(
"https://api.creator-api.com/v1/{account}/native/chats/{chat_id}/media?limit=50",
headers={"X-API-Key": KEY},
)
print(r.json())
const r = await fetch("https://api.creator-api.com/v1/{account}/native/chats/{chat_id}/media?limit=50", {
method: "GET",
headers: { "X-API-Key": KEY },
});
console.log(await r.json());
List chat messages · ✅ live verified
[chat-messages] GET /chats/{id}/messages. exists as get_chat_messages. Each message includes an isOpened field, but it never reflects true read status, confirmed live against a real read message: it stays false even when the fan has demonstrably opened it. The field that actually works is isNew: it stays true until the fan genuinely opens the chat thread, then flips to false, confirmed live with a real read and unread control pair, and does not flip on its own just from polling it. Building per fan read tracking this way costs one call per fan per check at 1 credit each, cheap for a small audience but adds up fast for a mass message sent to hundreds or thousands of fans, and more importantly means many rapid sequential calls against the same connected account, which risks tripping OnlyFans own rate limiting or a session logout if pushed too hard in a short window. Test on a small audience first and pace repeated polls per fan rather than hammering this endpoint for every recipient of a big blast at once.
GET /v1/{account}/native/chats/{chat_id}/messages · 1 credit(s)
Path params: chat_id
curl -X GET \
-H "X-API-Key: $CREATORS_API_KEY" \
"https://api.creator-api.com/v1/{account}/native/chats/{chat_id}/messages?limit=50"
import requests
r = requests.get(
"https://api.creator-api.com/v1/{account}/native/chats/{chat_id}/messages?limit=50",
headers={"X-API-Key": KEY},
)
print(r.json())
const r = await fetch("https://api.creator-api.com/v1/{account}/native/chats/{chat_id}/messages?limit=50", {
method: "GET",
headers: { "X-API-Key": KEY },
});
console.log(await r.json());
List pinned users in user list · ✅ live verified
[user-list-collections] GET /lists/{id}/users/pinned.
GET /v1/{account}/native/lists/{list_id}/users/pinned · 1 credit(s)
Path params: list_id
curl -X GET \
-H "X-API-Key: $CREATORS_API_KEY" \
"https://api.creator-api.com/v1/{account}/native/lists/{list_id}/users/pinned?limit=50"
import requests
r = requests.get(
"https://api.creator-api.com/v1/{account}/native/lists/{list_id}/users/pinned?limit=50",
headers={"X-API-Key": KEY},
)
print(r.json())
const r = await fetch("https://api.creator-api.com/v1/{account}/native/lists/{list_id}/users/pinned?limit=50", {
method: "GET",
headers: { "X-API-Key": KEY },
});
console.log(await r.json());
List shared tracking links · ✅ live verified
[tracking-links] GET /campaigns/share-access. Tracking Links other creators have shared access to WITH this account (agency feature). Confirmed live 2026-08-16.
GET /v1/{account}/native/campaigns/share-access · 1 credit(s) · Live-tested 2026-08-16 on both hyladiaz and gammaboy1: real 200, empty list for both. Found by direct analogy to list_shared_trial_links's confirmed /trials/share-access, using this catalog's own established /trials vs /campaigns sibling-path pattern for trial vs tracking links -- not a blind guess.
curl -X GET \
-H "X-API-Key: $CREATORS_API_KEY" \
"https://api.creator-api.com/v1/{account}/native/campaigns/share-access?limit=50"
import requests
r = requests.get(
"https://api.creator-api.com/v1/{account}/native/campaigns/share-access?limit=50",
headers={"X-API-Key": KEY},
)
print(r.json())
const r = await fetch("https://api.creator-api.com/v1/{account}/native/campaigns/share-access?limit=50", {
method: "GET",
headers: { "X-API-Key": KEY },
});
console.log(await r.json());
List story highlights · ✅ live verified
[story-highlights] GET /users/{id}/stories/highlights.
GET /v1/{account}/native/users/{user_id}/stories/highlights · 1 credit(s)
Path params: user_id
curl -X GET \
-H "X-API-Key: $CREATORS_API_KEY" \
"https://api.creator-api.com/v1/{account}/native/users/{user_id}/stories/highlights?limit=50"
import requests
r = requests.get(
"https://api.creator-api.com/v1/{account}/native/users/{user_id}/stories/highlights?limit=50",
headers={"X-API-Key": KEY},
)
print(r.json())
const r = await fetch("https://api.creator-api.com/v1/{account}/native/users/{user_id}/stories/highlights?limit=50", {
method: "GET",
headers: { "X-API-Key": KEY },
});
console.log(await r.json());
List story viewers · ✅ live verified
[stories] GET /stories/{id}/viewers.
GET /v1/{account}/native/stories/{story_id}/viewers · 1 credit(s)
Path params: story_id
curl -X GET \
-H "X-API-Key: $CREATORS_API_KEY" \
"https://api.creator-api.com/v1/{account}/native/stories/{story_id}/viewers?limit=50"
import requests
r = requests.get(
"https://api.creator-api.com/v1/{account}/native/stories/{story_id}/viewers?limit=50",
headers={"X-API-Key": KEY},
)
print(r.json())
const r = await fetch("https://api.creator-api.com/v1/{account}/native/stories/{story_id}/viewers?limit=50", {
method: "GET",
headers: { "X-API-Key": KEY },
});
console.log(await r.json());
List tracking link spenders · ✅ live verified
[tracking-links] GET /campaigns/{id}/claimers.
GET /v1/{account}/native/campaigns/{campaign_id}/claimers · 1 credit(s)
Path params: campaign_id
curl -X GET \
-H "X-API-Key: $CREATORS_API_KEY" \
"https://api.creator-api.com/v1/{account}/native/campaigns/{campaign_id}/claimers?limit=50"
import requests
r = requests.get(
"https://api.creator-api.com/v1/{account}/native/campaigns/{campaign_id}/claimers?limit=50",
headers={"X-API-Key": KEY},
)
print(r.json())
const r = await fetch("https://api.creator-api.com/v1/{account}/native/campaigns/{campaign_id}/claimers?limit=50", {
method: "GET",
headers: { "X-API-Key": KEY },
});
console.log(await r.json());
List tracking link subscribers · ✅ live verified
[tracking-links] GET /campaigns/{id}/claimers.
GET /v1/{account}/native/campaigns/{campaign_id}/claimers · 1 credit(s)
Path params: campaign_id
curl -X GET \
-H "X-API-Key: $CREATORS_API_KEY" \
"https://api.creator-api.com/v1/{account}/native/campaigns/{campaign_id}/claimers?limit=50"
import requests
r = requests.get(
"https://api.creator-api.com/v1/{account}/native/campaigns/{campaign_id}/claimers?limit=50",
headers={"X-API-Key": KEY},
)
print(r.json())
const r = await fetch("https://api.creator-api.com/v1/{account}/native/campaigns/{campaign_id}/claimers?limit=50", {
method: "GET",
headers: { "X-API-Key": KEY },
});
console.log(await r.json());
List user list users · ✅ live verified
[user-list-collections] GET /lists/{id}/users.
GET /v1/{account}/native/lists/{list_id}/users · 1 credit(s)
Path params: list_id
curl -X GET \
-H "X-API-Key: $CREATORS_API_KEY" \
"https://api.creator-api.com/v1/{account}/native/lists/{list_id}/users?limit=50"
import requests
r = requests.get(
"https://api.creator-api.com/v1/{account}/native/lists/{list_id}/users?limit=50",
headers={"X-API-Key": KEY},
)
print(r.json())
const r = await fetch("https://api.creator-api.com/v1/{account}/native/lists/{list_id}/users?limit=50", {
method: "GET",
headers: { "X-API-Key": KEY },
});
console.log(await r.json());
Mark chat as read · ✅ live verified
[chats] POST /chats/{id}/mark-as-read.
POST /v1/{account}/native/chats/{chat_id}/mark-as-read · 2 credit(s)
Path params: chat_id
curl -X POST \
-H "X-API-Key: $CREATORS_API_KEY" \
"https://api.creator-api.com/v1/{account}/native/chats/{chat_id}/mark-as-read" -d '{}'
import requests
r = requests.post(
"https://api.creator-api.com/v1/{account}/native/chats/{chat_id}/mark-as-read",
headers={"X-API-Key": KEY},
).json()
print(r.json())
const r = await fetch("https://api.creator-api.com/v1/{account}/native/chats/{chat_id}/mark-as-read", {
method: "POST",
headers: { "X-API-Key": KEY },
});
console.log(await r.json());
Mark chat as unread · ✅ live verified
[chats] DELETE /chats/{id}/mark-as-read.
DELETE /v1/{account}/native/chats/{chat_id}/mark-as-read · 2 credit(s)
Path params: chat_id
curl -X DELETE \
-H "X-API-Key: $CREATORS_API_KEY" \
"https://api.creator-api.com/v1/{account}/native/chats/{chat_id}/mark-as-read" -d '{}'
import requests
r = requests.delete(
"https://api.creator-api.com/v1/{account}/native/chats/{chat_id}/mark-as-read",
headers={"X-API-Key": KEY},
).json()
print(r.json())
const r = await fetch("https://api.creator-api.com/v1/{account}/native/chats/{chat_id}/mark-as-read", {
method: "DELETE",
headers: { "X-API-Key": KEY },
});
console.log(await r.json());
Mark story as watched · ✅ live verified
[stories] PUT /stories/{id}/watched.
PUT /v1/{account}/native/stories/{story_id}/watched · 2 credit(s)
Path params: story_id
curl -X PUT \
-H "X-API-Key: $CREATORS_API_KEY" \
"https://api.creator-api.com/v1/{account}/native/stories/{story_id}/watched" -d '{}'
import requests
r = requests.put(
"https://api.creator-api.com/v1/{account}/native/stories/{story_id}/watched",
headers={"X-API-Key": KEY},
).json()
print(r.json())
const r = await fetch("https://api.creator-api.com/v1/{account}/native/stories/{story_id}/watched", {
method: "PUT",
headers: { "X-API-Key": KEY },
});
console.log(await r.json());
Message buyers · ✅ live verified
[engagement-messages] GET /messages/queue/{id}/buyers. sample 404 (no qmsg id on hyla)
GET /v1/{account}/native/messages/queue/{queue_id}/buyers · 1 credit(s)
Path params: queue_id
curl -X GET \
-H "X-API-Key: $CREATORS_API_KEY" \
"https://api.creator-api.com/v1/{account}/native/messages/queue/{queue_id}/buyers?limit=50"
import requests
r = requests.get(
"https://api.creator-api.com/v1/{account}/native/messages/queue/{queue_id}/buyers?limit=50",
headers={"X-API-Key": KEY},
)
print(r.json())
const r = await fetch("https://api.creator-api.com/v1/{account}/native/messages/queue/{queue_id}/buyers?limit=50", {
method: "GET",
headers: { "X-API-Key": KEY },
});
console.log(await r.json());
Mute chat notifications · ✅ live verified
[chats] POST /chats/{id}/mute.
POST /v1/{account}/native/chats/{chat_id}/mute · 2 credit(s)
Path params: chat_id
curl -X POST \
-H "X-API-Key: $CREATORS_API_KEY" \
"https://api.creator-api.com/v1/{account}/native/chats/{chat_id}/mute" -d '{}'
import requests
r = requests.post(
"https://api.creator-api.com/v1/{account}/native/chats/{chat_id}/mute",
headers={"X-API-Key": KEY},
).json()
print(r.json())
const r = await fetch("https://api.creator-api.com/v1/{account}/native/chats/{chat_id}/mute", {
method: "POST",
headers: { "X-API-Key": KEY },
});
console.log(await r.json());
Pin message · ✅ live verified
[chat-messages] POST /messages/{id}/pin.
POST /v1/{account}/native/messages/{message_id}/pin · 2 credit(s)
Path params: message_id
curl -X POST \
-H "X-API-Key: $CREATORS_API_KEY" \
"https://api.creator-api.com/v1/{account}/native/messages/{message_id}/pin" -d '{}'
import requests
r = requests.post(
"https://api.creator-api.com/v1/{account}/native/messages/{message_id}/pin",
headers={"X-API-Key": KEY},
).json()
print(r.json())
const r = await fetch("https://api.creator-api.com/v1/{account}/native/messages/{message_id}/pin", {
method: "POST",
headers: { "X-API-Key": KEY },
});
console.log(await r.json());
Pin unpin post · ✅ live verified
[posts] POST /posts/{id}/pin.
POST /v1/{account}/native/posts/{post_id}/pin · 2 credit(s)
Path params: post_id
curl -X POST \
-H "X-API-Key: $CREATORS_API_KEY" \
"https://api.creator-api.com/v1/{account}/native/posts/{post_id}/pin" -d '{}'
import requests
r = requests.post(
"https://api.creator-api.com/v1/{account}/native/posts/{post_id}/pin",
headers={"X-API-Key": KEY},
).json()
print(r.json())
const r = await fetch("https://api.creator-api.com/v1/{account}/native/posts/{post_id}/pin", {
method: "POST",
headers: { "X-API-Key": KEY },
});
console.log(await r.json());
Pin unpin user in user list · ✅ live verified
[user-list-collections] POST /lists/{id}/users/{id}/pin.
POST /v1/{account}/native/lists/{list_id}/users/{user_id}/pin · 2 credit(s) · CONFIRMED live 2026-08-14 as part of the same roundtrip: POST /lists/{list_id}/users/{user_id}/pin -> 200 {"success":true}, verified via GET /lists/{list_id}/users/pinned showing the user. Was previously blocked only because add_users_to_user_list couldn't get a user into a list to pin -- not broken itself.
Path params: list_id, user_id
curl -X POST \
-H "X-API-Key: $CREATORS_API_KEY" \
"https://api.creator-api.com/v1/{account}/native/lists/{list_id}/users/{user_id}/pin" -d '{}'
import requests
r = requests.post(
"https://api.creator-api.com/v1/{account}/native/lists/{list_id}/users/{user_id}/pin",
headers={"X-API-Key": KEY},
).json()
print(r.json())
const r = await fetch("https://api.creator-api.com/v1/{account}/native/lists/{list_id}/users/{user_id}/pin", {
method: "POST",
headers: { "X-API-Key": KEY },
});
console.log(await r.json());
Publish queue item
[queue] PUT /schedules/{id}/publish.
PUT /v1/{account}/native/schedules/{schedule_id}/publish · 2 credit(s)
Path params: schedule_id
curl -X PUT \
-H "X-API-Key: $CREATORS_API_KEY" \
"https://api.creator-api.com/v1/{account}/native/schedules/{schedule_id}/publish" -d '{}'
import requests
r = requests.put(
"https://api.creator-api.com/v1/{account}/native/schedules/{schedule_id}/publish",
headers={"X-API-Key": KEY},
).json()
print(r.json())
const r = await fetch("https://api.creator-api.com/v1/{account}/native/schedules/{schedule_id}/publish", {
method: "PUT",
headers: { "X-API-Key": KEY },
});
console.log(await r.json());
Remove media from list · ✅ live verified
[media-vault-lists] DELETE /vault/lists/{id}/media.
DELETE /v1/{account}/native/vault/lists/{list_id}/media · 2 credit(s)
Path params: list_id
curl -X DELETE \
-H "X-API-Key: $CREATORS_API_KEY" \
"https://api.creator-api.com/v1/{account}/native/vault/lists/{list_id}/media" -d '{}'
import requests
r = requests.delete(
"https://api.creator-api.com/v1/{account}/native/vault/lists/{list_id}/media",
headers={"X-API-Key": KEY},
).json()
print(r.json())
const r = await fetch("https://api.creator-api.com/v1/{account}/native/vault/lists/{list_id}/media", {
method: "DELETE",
headers: { "X-API-Key": KEY },
});
console.log(await r.json());
Remove story from highlight
[story-highlights] DELETE /stories/highlights/{id}/{id}.
DELETE /v1/{account}/native/stories/highlights/{highlight_id}/{highlight_id2} · 2 credit(s)
Path params: highlight_id, highlight_id2
curl -X DELETE \
-H "X-API-Key: $CREATORS_API_KEY" \
"https://api.creator-api.com/v1/{account}/native/stories/highlights/{highlight_id}/{highlight_id2}" -d '{}'
import requests
r = requests.delete(
"https://api.creator-api.com/v1/{account}/native/stories/highlights/{highlight_id}/{highlight_id2}",
headers={"X-API-Key": KEY},
).json()
print(r.json())
const r = await fetch("https://api.creator-api.com/v1/{account}/native/stories/highlights/{highlight_id}/{highlight_id2}", {
method: "DELETE",
headers: { "X-API-Key": KEY },
});
console.log(await r.json());
Remove user from a user list · ✅ live verified
[user-list-collections] DELETE /lists/{id}/users/{id}. exists as remove_from_list
DELETE /v1/{account}/native/lists/{list_id}/users/{user_id} · 2 credit(s) · CONFIRMED live 2026-08-14 as part of the add_users_to_user_list fix roundtrip on gammaboy1: DELETE /lists/{list_id}/users/{user_id} -> 200, user actually removed (GET list afterward returned empty users array). Was previously blocked only because there was no working way to get a user INTO a list to test removal on -- not broken itself.
Path params: list_id, user_id
curl -X DELETE \
-H "X-API-Key: $CREATORS_API_KEY" \
"https://api.creator-api.com/v1/{account}/native/lists/{list_id}/users/{user_id}" -d '{}'
import requests
r = requests.delete(
"https://api.creator-api.com/v1/{account}/native/lists/{list_id}/users/{user_id}",
headers={"X-API-Key": KEY},
).json()
print(r.json())
const r = await fetch("https://api.creator-api.com/v1/{account}/native/lists/{list_id}/users/{user_id}", {
method: "DELETE",
headers: { "X-API-Key": KEY },
});
console.log(await r.json());
Rename vault list · ✅ live verified
[media-vault-lists] PATCH /vault/lists/{id}.
PATCH /v1/{account}/native/vault/lists/{list_id} · 2 credit(s)
Path params: list_id
curl -X PATCH \
-H "X-API-Key: $CREATORS_API_KEY" \
"https://api.creator-api.com/v1/{account}/native/vault/lists/{list_id}" -d '{}'
import requests
r = requests.patch(
"https://api.creator-api.com/v1/{account}/native/vault/lists/{list_id}",
headers={"X-API-Key": KEY},
).json()
print(r.json())
const r = await fetch("https://api.creator-api.com/v1/{account}/native/vault/lists/{list_id}", {
method: "PATCH",
headers: { "X-API-Key": KEY },
});
console.log(await r.json());
Restrict user · ✅ live verified
[users] POST /users/{id}/restrict.
POST /v1/{account}/native/users/{user_id}/restrict · 2 credit(s) · Route confirmed via fake-id probe; real restrict effect intentionally never fired against a real fan.
Path params: user_id
curl -X POST \
-H "X-API-Key: $CREATORS_API_KEY" \
"https://api.creator-api.com/v1/{account}/native/users/{user_id}/restrict" -d '{}'
import requests
r = requests.post(
"https://api.creator-api.com/v1/{account}/native/users/{user_id}/restrict",
headers={"X-API-Key": KEY},
).json()
print(r.json())
const r = await fetch("https://api.creator-api.com/v1/{account}/native/users/{user_id}/restrict", {
method: "POST",
headers: { "X-API-Key": KEY },
});
console.log(await r.json());
Search chat messages · ✅ live verified
[chat-messages] GET /chats/{id}/messages/search.
GET /v1/{account}/native/chats/{chat_id}/messages/search · 1 credit(s)
Path params: chat_id
curl -X GET \
-H "X-API-Key: $CREATORS_API_KEY" \
"https://api.creator-api.com/v1/{account}/native/chats/{chat_id}/messages/search?limit=50"
import requests
r = requests.get(
"https://api.creator-api.com/v1/{account}/native/chats/{chat_id}/messages/search?limit=50",
headers={"X-API-Key": KEY},
)
print(r.json())
const r = await fetch("https://api.creator-api.com/v1/{account}/native/chats/{chat_id}/messages/search?limit=50", {
method: "GET",
headers: { "X-API-Key": KEY },
});
console.log(await r.json());
Send chat message · ✅ live verified
[chat-messages] POST /chats/{id}/messages. Send a direct message to one fan. chat_id is the fan user id. Body: {"text": "..."} sends a free text message and returns the created message object (has id). For a paid PPV message, add "price" (a number between 3 and 200) and either "lockedText": true (locks the text itself) or "mediaFiles": [...] (locks the attached media, upload it first via POST /v1/{account}/media/upload and pass its media_file object here). Optional "previews": [...] shows free preview media next to a locked send. Example: {"text": "check this out", "price": 5, "lockedText": false, "mediaFiles": [{"processId": "...", "host": "...", "name": "photo.jpg", "extra": {...}}]}. Live verified in production, including a real locked media PPV delivered and priced correctly for unlock. A send acts on the real account and reaches the fan immediately: treat every write as production, there is no sandbox.
POST /v1/{account}/native/chats/{chat_id}/messages · 2 credit(s)
Path params: chat_id
curl -X POST \
-H "X-API-Key: $CREATORS_API_KEY" \
"https://api.creator-api.com/v1/{account}/native/chats/{chat_id}/messages" -d '{}'
import requests
r = requests.post(
"https://api.creator-api.com/v1/{account}/native/chats/{chat_id}/messages",
headers={"X-API-Key": KEY},
).json()
print(r.json())
const r = await fetch("https://api.creator-api.com/v1/{account}/native/chats/{chat_id}/messages", {
method: "POST",
headers: { "X-API-Key": KEY },
});
console.log(await r.json());
Show post statistics · ✅ live verified
[posts] GET /posts/{id}/stats.
GET /v1/{account}/native/posts/{post_id}/stats · 1 credit(s) · Live 404 on multiple real, confirmed-existing posts (2026-08-14) -- route exists but path/behavior is wrong, not resource-missing. Real path unknown.
Path params: post_id
curl -X GET \
-H "X-API-Key: $CREATORS_API_KEY" \
"https://api.creator-api.com/v1/{account}/native/posts/{post_id}/stats?limit=50"
import requests
r = requests.get(
"https://api.creator-api.com/v1/{account}/native/posts/{post_id}/stats?limit=50",
headers={"X-API-Key": KEY},
)
print(r.json())
const r = await fetch("https://api.creator-api.com/v1/{account}/native/posts/{post_id}/stats?limit=50", {
method: "GET",
headers: { "X-API-Key": KEY },
});
console.log(await r.json());
Show story · ✅ live verified
[stories] GET /stories/{id}.
GET /v1/{account}/native/stories/{story_id} · 1 credit(s)
Path params: story_id
curl -X GET \
-H "X-API-Key: $CREATORS_API_KEY" \
"https://api.creator-api.com/v1/{account}/native/stories/{story_id}?limit=50"
import requests
r = requests.get(
"https://api.creator-api.com/v1/{account}/native/stories/{story_id}?limit=50",
headers={"X-API-Key": KEY},
)
print(r.json())
const r = await fetch("https://api.creator-api.com/v1/{account}/native/stories/{story_id}?limit=50", {
method: "GET",
headers: { "X-API-Key": KEY },
});
console.log(await r.json());
Show story highlight · ✅ live verified
[story-highlights] GET /stories/highlights/{id}.
GET /v1/{account}/native/stories/highlights/{highlight_id} · 1 credit(s)
Path params: highlight_id
curl -X GET \
-H "X-API-Key: $CREATORS_API_KEY" \
"https://api.creator-api.com/v1/{account}/native/stories/highlights/{highlight_id}?limit=50"
import requests
r = requests.get(
"https://api.creator-api.com/v1/{account}/native/stories/highlights/{highlight_id}?limit=50",
headers={"X-API-Key": KEY},
)
print(r.json())
const r = await fetch("https://api.creator-api.com/v1/{account}/native/stories/highlights/{highlight_id}?limit=50", {
method: "GET",
headers: { "X-API-Key": KEY },
});
console.log(await r.json());
Show vault list · ✅ live verified
[media-vault-lists] GET /vault/lists/{id}.
GET /v1/{account}/native/vault/lists/{list_id} · 1 credit(s)
Path params: list_id
curl -X GET \
-H "X-API-Key: $CREATORS_API_KEY" \
"https://api.creator-api.com/v1/{account}/native/vault/lists/{list_id}?limit=50"
import requests
r = requests.get(
"https://api.creator-api.com/v1/{account}/native/vault/lists/{list_id}?limit=50",
headers={"X-API-Key": KEY},
)
print(r.json())
const r = await fetch("https://api.creator-api.com/v1/{account}/native/vault/lists/{list_id}?limit=50", {
method: "GET",
headers: { "X-API-Key": KEY },
});
console.log(await r.json());
Stop promotion
[promotions] POST /promotions/{id}/finish.
POST /v1/{account}/native/promotions/{promotion_id}/finish · 2 credit(s)
Path params: promotion_id
curl -X POST \
-H "X-API-Key: $CREATORS_API_KEY" \
"https://api.creator-api.com/v1/{account}/native/promotions/{promotion_id}/finish" -d '{}'
import requests
r = requests.post(
"https://api.creator-api.com/v1/{account}/native/promotions/{promotion_id}/finish",
headers={"X-API-Key": KEY},
).json()
print(r.json())
const r = await fetch("https://api.creator-api.com/v1/{account}/native/promotions/{promotion_id}/finish", {
method: "POST",
headers: { "X-API-Key": KEY },
});
console.log(await r.json());
Subscribe to user · ✅ live verified
[users] POST /users/{id}/subscribe.
POST /v1/{account}/native/users/{user_id}/subscribe · 2 credit(s) · Live-proven 2026-08-14 on the pre-authorized gammaboy1<->hyladiaz pair: POST /users/493820841/subscribe (gamma->hyla) returned 200 and created a real, verified active subscription (confirmed via GET /subscriptions/subscribes?type=active, hyla's id appeared). Used to unblock testing unsubscribe_from_user, which needed a fresh active subscription.
Path params: user_id
curl -X POST \
-H "X-API-Key: $CREATORS_API_KEY" \
"https://api.creator-api.com/v1/{account}/native/users/{user_id}/subscribe" -d '{}'
import requests
r = requests.post(
"https://api.creator-api.com/v1/{account}/native/users/{user_id}/subscribe",
headers={"X-API-Key": KEY},
).json()
print(r.json())
const r = await fetch("https://api.creator-api.com/v1/{account}/native/users/{user_id}/subscribe", {
method: "POST",
headers: { "X-API-Key": KEY },
});
console.log(await r.json());
Unblock user · ✅ live verified
[users] DELETE /users/{id}/block.
DELETE /v1/{account}/native/users/{user_id}/block · 2 credit(s)
Path params: user_id
curl -X DELETE \
-H "X-API-Key: $CREATORS_API_KEY" \
"https://api.creator-api.com/v1/{account}/native/users/{user_id}/block" -d '{}'
import requests
r = requests.delete(
"https://api.creator-api.com/v1/{account}/native/users/{user_id}/block",
headers={"X-API-Key": KEY},
).json()
print(r.json())
const r = await fetch("https://api.creator-api.com/v1/{account}/native/users/{user_id}/block", {
method: "DELETE",
headers: { "X-API-Key": KEY },
});
console.log(await r.json());
Unlike message · ✅ live verified
[chat-messages] DELETE /messages/{id}/like.
DELETE /v1/{account}/native/messages/{message_id}/like · 2 credit(s) · Same caveat as like_message.
Path params: message_id
curl -X DELETE \
-H "X-API-Key: $CREATORS_API_KEY" \
"https://api.creator-api.com/v1/{account}/native/messages/{message_id}/like" -d '{}'
import requests
r = requests.delete(
"https://api.creator-api.com/v1/{account}/native/messages/{message_id}/like",
headers={"X-API-Key": KEY},
).json()
print(r.json())
const r = await fetch("https://api.creator-api.com/v1/{account}/native/messages/{message_id}/like", {
method: "DELETE",
headers: { "X-API-Key": KEY },
});
console.log(await r.json());
Unmute chat notifications · ✅ live verified
[chats] DELETE /chats/{id}/mute.
DELETE /v1/{account}/native/chats/{chat_id}/mute · 2 credit(s)
Path params: chat_id
curl -X DELETE \
-H "X-API-Key: $CREATORS_API_KEY" \
"https://api.creator-api.com/v1/{account}/native/chats/{chat_id}/mute" -d '{}'
import requests
r = requests.delete(
"https://api.creator-api.com/v1/{account}/native/chats/{chat_id}/mute",
headers={"X-API-Key": KEY},
).json()
print(r.json())
const r = await fetch("https://api.creator-api.com/v1/{account}/native/chats/{chat_id}/mute", {
method: "DELETE",
headers: { "X-API-Key": KEY },
});
console.log(await r.json());
Unpin message · ✅ live verified
[chat-messages] DELETE /messages/{id}/pin.
DELETE /v1/{account}/native/messages/{message_id}/pin · 2 credit(s)
Path params: message_id
curl -X DELETE \
-H "X-API-Key: $CREATORS_API_KEY" \
"https://api.creator-api.com/v1/{account}/native/messages/{message_id}/pin" -d '{}'
import requests
r = requests.delete(
"https://api.creator-api.com/v1/{account}/native/messages/{message_id}/pin",
headers={"X-API-Key": KEY},
).json()
print(r.json())
const r = await fetch("https://api.creator-api.com/v1/{account}/native/messages/{message_id}/pin", {
method: "DELETE",
headers: { "X-API-Key": KEY },
});
console.log(await r.json());
Unrestrict user · ✅ live verified
[users] DELETE /users/{id}/restrict.
DELETE /v1/{account}/native/users/{user_id}/restrict · 2 credit(s)
Path params: user_id
curl -X DELETE \
-H "X-API-Key: $CREATORS_API_KEY" \
"https://api.creator-api.com/v1/{account}/native/users/{user_id}/restrict" -d '{}'
import requests
r = requests.delete(
"https://api.creator-api.com/v1/{account}/native/users/{user_id}/restrict",
headers={"X-API-Key": KEY},
).json()
print(r.json())
const r = await fetch("https://api.creator-api.com/v1/{account}/native/users/{user_id}/restrict", {
method: "DELETE",
headers: { "X-API-Key": KEY },
});
console.log(await r.json());
Unsend delete mass message · ✅ live verified
[mass-messaging] DELETE /messages/queue/{id}.
DELETE /v1/{account}/native/messages/queue/{queue_id} · 2 credit(s)
Path params: queue_id
curl -X DELETE \
-H "X-API-Key: $CREATORS_API_KEY" \
"https://api.creator-api.com/v1/{account}/native/messages/queue/{queue_id}" -d '{}'
import requests
r = requests.delete(
"https://api.creator-api.com/v1/{account}/native/messages/queue/{queue_id}",
headers={"X-API-Key": KEY},
).json()
print(r.json())
const r = await fetch("https://api.creator-api.com/v1/{account}/native/messages/queue/{queue_id}", {
method: "DELETE",
headers: { "X-API-Key": KEY },
});
console.log(await r.json());
Unsubscribe from user · ✅ live verified
[users] DELETE /users/{id}/subscribe.
DELETE /v1/{account}/native/users/{user_id}/subscribe · 2 credit(s) · SOLVED 2026-08-14. The required 'reason' value is a numeric enum in the JSON body -- {"reason": 1} returns 200. Confirmed live: created a fresh active subscription via subscribe_to_user, then unsubscribed with reason=1, then verified via GET /subscriptions/subscribes?type=active that hyla's id was gone -- state matched the exact pre-test baseline. Earlier attempts failed for two stacked reasons: string reason values ('other' etc.) always get "Invalid reason", and separately gamma's prior subscription to hyla (from the July audit) had already lapsed by 2026-08-14 -- confirmed via GET /subscriptions/subscribes?type=active and type=expired, hyla's id was in neither list -- so early numeric attempts (reason=0/5) failed with "Subscription not found", not "Invalid reason", which was the clue that led to testing against a freshly created subscription instead.
Path params: user_id
curl -X DELETE \
-H "X-API-Key: $CREATORS_API_KEY" \
"https://api.creator-api.com/v1/{account}/native/users/{user_id}/subscribe" -d '{}'
import requests
r = requests.delete(
"https://api.creator-api.com/v1/{account}/native/users/{user_id}/subscribe",
headers={"X-API-Key": KEY},
).json()
print(r.json())
const r = await fetch("https://api.creator-api.com/v1/{account}/native/users/{user_id}/subscribe", {
method: "DELETE",
headers: { "X-API-Key": KEY },
});
console.log(await r.json());
Update mass message · ✅ live verified
[mass-messaging] PUT /messages/queue/{id}.
PUT /v1/{account}/native/messages/queue/{queue_id} · 2 credit(s)
Path params: queue_id
curl -X PUT \
-H "X-API-Key: $CREATORS_API_KEY" \
"https://api.creator-api.com/v1/{account}/native/messages/queue/{queue_id}" -d '{}'
import requests
r = requests.put(
"https://api.creator-api.com/v1/{account}/native/messages/queue/{queue_id}",
headers={"X-API-Key": KEY},
).json()
print(r.json())
const r = await fetch("https://api.creator-api.com/v1/{account}/native/messages/queue/{queue_id}", {
method: "PUT",
headers: { "X-API-Key": KEY },
});
console.log(await r.json());
Update post · ✅ live verified
[posts] PUT /posts/{id}.
PUT /v1/{account}/native/posts/{post_id} · 2 credit(s)
Path params: post_id
curl -X PUT \
-H "X-API-Key: $CREATORS_API_KEY" \
"https://api.creator-api.com/v1/{account}/native/posts/{post_id}" -d '{}'
import requests
r = requests.put(
"https://api.creator-api.com/v1/{account}/native/posts/{post_id}",
headers={"X-API-Key": KEY},
).json()
print(r.json())
const r = await fetch("https://api.creator-api.com/v1/{account}/native/posts/{post_id}", {
method: "PUT",
headers: { "X-API-Key": KEY },
});
console.log(await r.json());
Update social media button
[settings] PUT /users/social/buttons/{id}.
PUT /v1/{account}/native/users/social/buttons/{button_id} · 2 credit(s) · Requires {socialMedia, label, link} -- exact valid 'link' format for existing platforms not resolved.
Path params: button_id
curl -X PUT \
-H "X-API-Key: $CREATORS_API_KEY" \
"https://api.creator-api.com/v1/{account}/native/users/social/buttons/{button_id}" -d '{}'
import requests
r = requests.put(
"https://api.creator-api.com/v1/{account}/native/users/social/buttons/{button_id}",
headers={"X-API-Key": KEY},
).json()
print(r.json())
const r = await fetch("https://api.creator-api.com/v1/{account}/native/users/social/buttons/{button_id}", {
method: "PUT",
headers: { "X-API-Key": KEY },
});
console.log(await r.json());
Update story highlight
[story-highlights] PATCH /stories/highlights/{id}.
PATCH /v1/{account}/native/stories/highlights/{highlight_id} · 2 credit(s)
Path params: highlight_id
curl -X PATCH \
-H "X-API-Key: $CREATORS_API_KEY" \
"https://api.creator-api.com/v1/{account}/native/stories/highlights/{highlight_id}" -d '{}'
import requests
r = requests.patch(
"https://api.creator-api.com/v1/{account}/native/stories/highlights/{highlight_id}",
headers={"X-API-Key": KEY},
).json()
print(r.json())
const r = await fetch("https://api.creator-api.com/v1/{account}/native/stories/highlights/{highlight_id}", {
method: "PATCH",
headers: { "X-API-Key": KEY },
});
console.log(await r.json());
Update user list · ✅ live verified
[user-list-collections] PATCH /lists/{id}.
PATCH /v1/{account}/native/lists/{list_id} · 2 credit(s)
Path params: list_id
curl -X PATCH \
-H "X-API-Key: $CREATORS_API_KEY" \
"https://api.creator-api.com/v1/{account}/native/lists/{list_id}" -d '{}'
import requests
r = requests.patch(
"https://api.creator-api.com/v1/{account}/native/lists/{list_id}",
headers={"X-API-Key": KEY},
).json()
print(r.json())
const r = await fetch("https://api.creator-api.com/v1/{account}/native/lists/{list_id}", {
method: "PATCH",
headers: { "X-API-Key": KEY },
});
console.log(await r.json());
smart-links
Add smart link tags · ✅ live verified
Body: {tags: [string]}. Live verified 2026-08-14.
POST /v1/{account}/smart-links/{smart_link_id}/tags · 1 credit(s)
Path params: account, smart_link_id
curl -X POST \
-H "X-API-Key: $CREATORS_API_KEY" \
"https://api.creator-api.com/v1/{account}/smart-links/{smart_link_id}/tags" -d '{}'
import requests
r = requests.post(
"https://api.creator-api.com/v1/{account}/smart-links/{smart_link_id}/tags",
headers={"X-API-Key": KEY},
).json()
print(r.json())
const r = await fetch("https://api.creator-api.com/v1/{account}/smart-links/{smart_link_id}/tags", {
method: "POST",
headers: { "X-API-Key": KEY },
});
console.log(await r.json());
Create smart link · ✅ live verified
Wraps an OnlyFans native tracking link (/campaigns) with pixel/postback/tag/cost metadata -- see module docstring for the click-tracking-is-aggregate-only note. Body: {name, link_type, free_trial_days, cost}. Creates a real OF campaign under the hood. Live verified 2026-08-14.
POST /v1/{account}/smart-links · 1 credit(s)
Path params: account
curl -X POST \
-H "X-API-Key: $CREATORS_API_KEY" \
"https://api.creator-api.com/v1/{account}/smart-links" -d '{}'
import requests
r = requests.post(
"https://api.creator-api.com/v1/{account}/smart-links",
headers={"X-API-Key": KEY},
).json()
print(r.json())
const r = await fetch("https://api.creator-api.com/v1/{account}/smart-links", {
method: "POST",
headers: { "X-API-Key": KEY },
});
console.log(await r.json());
Create smart link pixel · ✅ live verified
Body: {platform: meta|tiktok|ga4, label, pixel_id, credential}. BYOP (bring your own pixel/token) -- the caller generates pixel_id+credential themselves in their own Meta/TikTok/GA4 account, same pattern onlyfansapi.com uses. Live verified 2026-08-14. Platform contracts: Meta Conversions API (https://developers.facebook.com/docs/marketing-api/conversions-api/using-the-api), TikTok Events API v1.3, GA4 Measurement Protocol (https://developers.google.com/analytics/devguides/collection/protocol/ga4/sending-events). Google Ads' own conversion-upload API is NOT supported -- it requires a Google-approved developer token tied to a Google Ads manager account, real external gatekeeping outside our control.
POST /v1/{account}/smart-links/{smart_link_id}/pixels · 1 credit(s)
Path params: account, smart_link_id
curl -X POST \
-H "X-API-Key: $CREATORS_API_KEY" \
"https://api.creator-api.com/v1/{account}/smart-links/{smart_link_id}/pixels" -d '{}'
import requests
r = requests.post(
"https://api.creator-api.com/v1/{account}/smart-links/{smart_link_id}/pixels",
headers={"X-API-Key": KEY},
).json()
print(r.json())
const r = await fetch("https://api.creator-api.com/v1/{account}/smart-links/{smart_link_id}/pixels", {
method: "POST",
headers: { "X-API-Key": KEY },
});
console.log(await r.json());
Create smart link postback · ✅ live verified
Body: {url, http_method, body, headers, smart_link_scope, conversion_types, smart_link_ids}. Delivery happens from the smart-link poller when a matching conversion is detected. Live verified 2026-08-14.
POST /v1/{account}/smart-link-postbacks · 1 credit(s)
Path params: account
curl -X POST \
-H "X-API-Key: $CREATORS_API_KEY" \
"https://api.creator-api.com/v1/{account}/smart-link-postbacks" -d '{}'
import requests
r = requests.post(
"https://api.creator-api.com/v1/{account}/smart-link-postbacks",
headers={"X-API-Key": KEY},
).json()
print(r.json())
const r = await fetch("https://api.creator-api.com/v1/{account}/smart-link-postbacks", {
method: "POST",
headers: { "X-API-Key": KEY },
});
console.log(await r.json());
Delete smart link · ✅ live verified
Deletes the wrapper row AND the underlying OF campaign. Live verified 2026-08-14.
DELETE /v1/{account}/smart-links/{smart_link_id} · 1 credit(s)
Path params: account, smart_link_id
curl -X DELETE \
-H "X-API-Key: $CREATORS_API_KEY" \
"https://api.creator-api.com/v1/{account}/smart-links/{smart_link_id}" -d '{}'
import requests
r = requests.delete(
"https://api.creator-api.com/v1/{account}/smart-links/{smart_link_id}",
headers={"X-API-Key": KEY},
).json()
print(r.json())
const r = await fetch("https://api.creator-api.com/v1/{account}/smart-links/{smart_link_id}", {
method: "DELETE",
headers: { "X-API-Key": KEY },
});
console.log(await r.json());
Delete smart link pixel · ✅ live verified
Live verified 2026-08-14.
DELETE /v1/{account}/smart-links/{smart_link_id}/pixels/{pixel_id} · 1 credit(s)
Path params: account, smart_link_id, pixel_id
curl -X DELETE \
-H "X-API-Key: $CREATORS_API_KEY" \
"https://api.creator-api.com/v1/{account}/smart-links/{smart_link_id}/pixels/{pixel_id}" -d '{}'
import requests
r = requests.delete(
"https://api.creator-api.com/v1/{account}/smart-links/{smart_link_id}/pixels/{pixel_id}",
headers={"X-API-Key": KEY},
).json()
print(r.json())
const r = await fetch("https://api.creator-api.com/v1/{account}/smart-links/{smart_link_id}/pixels/{pixel_id}", {
method: "DELETE",
headers: { "X-API-Key": KEY },
});
console.log(await r.json());
Delete smart link postback · ✅ live verified
Live verified 2026-08-14.
DELETE /v1/{account}/smart-link-postbacks/{postback_id} · 1 credit(s)
Path params: account, postback_id
curl -X DELETE \
-H "X-API-Key: $CREATORS_API_KEY" \
"https://api.creator-api.com/v1/{account}/smart-link-postbacks/{postback_id}" -d '{}'
import requests
r = requests.delete(
"https://api.creator-api.com/v1/{account}/smart-link-postbacks/{postback_id}",
headers={"X-API-Key": KEY},
).json()
print(r.json())
const r = await fetch("https://api.creator-api.com/v1/{account}/smart-link-postbacks/{postback_id}", {
method: "DELETE",
headers: { "X-API-Key": KEY },
});
console.log(await r.json());
Get smart link · ✅ live verified
Live verified 2026-08-14.
GET /v1/{account}/smart-links/{smart_link_id} · 1 credit(s)
Path params: account, smart_link_id
curl -X GET \
-H "X-API-Key: $CREATORS_API_KEY" \
"https://api.creator-api.com/v1/{account}/smart-links/{smart_link_id}"
import requests
r = requests.get(
"https://api.creator-api.com/v1/{account}/smart-links/{smart_link_id}",
headers={"X-API-Key": KEY},
)
print(r.json())
const r = await fetch("https://api.creator-api.com/v1/{account}/smart-links/{smart_link_id}", {
method: "GET",
headers: { "X-API-Key": KEY },
});
console.log(await r.json());
Get smart link clicks · ✅ live verified
Aggregate click count + monthly trend only -- OnlyFans does not expose per-visitor IP/user-agent/referrer rows to connected apps, unlike onlyfansapi.com's shape. Live verified 2026-08-14.
GET /v1/{account}/smart-links/{smart_link_id}/clicks · 1 credit(s)
Path params: account, smart_link_id
curl -X GET \
-H "X-API-Key: $CREATORS_API_KEY" \
"https://api.creator-api.com/v1/{account}/smart-links/{smart_link_id}/clicks"
import requests
r = requests.get(
"https://api.creator-api.com/v1/{account}/smart-links/{smart_link_id}/clicks",
headers={"X-API-Key": KEY},
)
print(r.json())
const r = await fetch("https://api.creator-api.com/v1/{account}/smart-links/{smart_link_id}/clicks", {
method: "GET",
headers: { "X-API-Key": KEY },
});
console.log(await r.json());
Get smart link conversions · ✅ live verified
Real per-fan conversion records from OF's own claimers list. Live verified 2026-08-14.
GET /v1/{account}/smart-links/{smart_link_id}/conversions · 1 credit(s)
Path params: account, smart_link_id
curl -X GET \
-H "X-API-Key: $CREATORS_API_KEY" \
"https://api.creator-api.com/v1/{account}/smart-links/{smart_link_id}/conversions"
import requests
r = requests.get(
"https://api.creator-api.com/v1/{account}/smart-links/{smart_link_id}/conversions",
headers={"X-API-Key": KEY},
)
print(r.json())
const r = await fetch("https://api.creator-api.com/v1/{account}/smart-links/{smart_link_id}/conversions", {
method: "GET",
headers: { "X-API-Key": KEY },
});
console.log(await r.json());
Get smart link fans · ✅ live verified
Fan list for this link's claimers. Live verified 2026-08-14.
GET /v1/{account}/smart-links/{smart_link_id}/fans · 1 credit(s)
Path params: account, smart_link_id
curl -X GET \
-H "X-API-Key: $CREATORS_API_KEY" \
"https://api.creator-api.com/v1/{account}/smart-links/{smart_link_id}/fans"
import requests
r = requests.get(
"https://api.creator-api.com/v1/{account}/smart-links/{smart_link_id}/fans",
headers={"X-API-Key": KEY},
)
print(r.json())
const r = await fetch("https://api.creator-api.com/v1/{account}/smart-links/{smart_link_id}/fans", {
method: "GET",
headers: { "X-API-Key": KEY },
});
console.log(await r.json());
Get smart link postback · ✅ live verified
Live verified 2026-08-14.
GET /v1/{account}/smart-link-postbacks/{postback_id} · 1 credit(s)
Path params: account, postback_id
curl -X GET \
-H "X-API-Key: $CREATORS_API_KEY" \
"https://api.creator-api.com/v1/{account}/smart-link-postbacks/{postback_id}"
import requests
r = requests.get(
"https://api.creator-api.com/v1/{account}/smart-link-postbacks/{postback_id}",
headers={"X-API-Key": KEY},
)
print(r.json())
const r = await fetch("https://api.creator-api.com/v1/{account}/smart-link-postbacks/{postback_id}", {
method: "GET",
headers: { "X-API-Key": KEY },
});
console.log(await r.json());
Get smart link spenders · ✅ live verified
Per-fan spend for this link's claimers. Live verified 2026-08-14.
GET /v1/{account}/smart-links/{smart_link_id}/spenders · 1 credit(s)
Path params: account, smart_link_id
curl -X GET \
-H "X-API-Key: $CREATORS_API_KEY" \
"https://api.creator-api.com/v1/{account}/smart-links/{smart_link_id}/spenders"
import requests
r = requests.get(
"https://api.creator-api.com/v1/{account}/smart-links/{smart_link_id}/spenders",
headers={"X-API-Key": KEY},
)
print(r.json())
const r = await fetch("https://api.creator-api.com/v1/{account}/smart-links/{smart_link_id}/spenders", {
method: "GET",
headers: { "X-API-Key": KEY },
});
console.log(await r.json());
Get smart link stats · ✅ live verified
Real OF-reported subscriber-conversion trend + click/subscriber totals for this link. Live verified 2026-08-14.
GET /v1/{account}/smart-links/{smart_link_id}/stats · 1 credit(s)
Path params: account, smart_link_id
curl -X GET \
-H "X-API-Key: $CREATORS_API_KEY" \
"https://api.creator-api.com/v1/{account}/smart-links/{smart_link_id}/stats"
import requests
r = requests.get(
"https://api.creator-api.com/v1/{account}/smart-links/{smart_link_id}/stats",
headers={"X-API-Key": KEY},
)
print(r.json())
const r = await fetch("https://api.creator-api.com/v1/{account}/smart-links/{smart_link_id}/stats", {
method: "GET",
headers: { "X-API-Key": KEY },
});
console.log(await r.json());
List smart link pixels · ✅ live verified
Credentials are never echoed back. Live verified 2026-08-14.
GET /v1/{account}/smart-links/{smart_link_id}/pixels · 1 credit(s)
Path params: account, smart_link_id
curl -X GET \
-H "X-API-Key: $CREATORS_API_KEY" \
"https://api.creator-api.com/v1/{account}/smart-links/{smart_link_id}/pixels"
import requests
r = requests.get(
"https://api.creator-api.com/v1/{account}/smart-links/{smart_link_id}/pixels",
headers={"X-API-Key": KEY},
)
print(r.json())
const r = await fetch("https://api.creator-api.com/v1/{account}/smart-links/{smart_link_id}/pixels", {
method: "GET",
headers: { "X-API-Key": KEY },
});
console.log(await r.json());
List smart link postbacks · ✅ live verified
Live verified 2026-08-14.
GET /v1/{account}/smart-link-postbacks · 1 credit(s)
Path params: account
curl -X GET \
-H "X-API-Key: $CREATORS_API_KEY" \
"https://api.creator-api.com/v1/{account}/smart-link-postbacks"
import requests
r = requests.get(
"https://api.creator-api.com/v1/{account}/smart-link-postbacks",
headers={"X-API-Key": KEY},
)
print(r.json())
const r = await fetch("https://api.creator-api.com/v1/{account}/smart-link-postbacks", {
method: "GET",
headers: { "X-API-Key": KEY },
});
console.log(await r.json());
List smart link tags · ✅ live verified
Local metadata, not an OF concept. Live verified 2026-08-14.
GET /v1/{account}/smart-links/{smart_link_id}/tags · 1 credit(s)
Path params: account, smart_link_id
curl -X GET \
-H "X-API-Key: $CREATORS_API_KEY" \
"https://api.creator-api.com/v1/{account}/smart-links/{smart_link_id}/tags"
import requests
r = requests.get(
"https://api.creator-api.com/v1/{account}/smart-links/{smart_link_id}/tags",
headers={"X-API-Key": KEY},
)
print(r.json())
const r = await fetch("https://api.creator-api.com/v1/{account}/smart-links/{smart_link_id}/tags", {
method: "GET",
headers: { "X-API-Key": KEY },
});
console.log(await r.json());
List smart links · ✅ live verified
List smart links for the account. Live verified 2026-08-14.
GET /v1/{account}/smart-links · 1 credit(s)
Path params: account
curl -X GET \
-H "X-API-Key: $CREATORS_API_KEY" \
"https://api.creator-api.com/v1/{account}/smart-links"
import requests
r = requests.get(
"https://api.creator-api.com/v1/{account}/smart-links",
headers={"X-API-Key": KEY},
)
print(r.json())
const r = await fetch("https://api.creator-api.com/v1/{account}/smart-links", {
method: "GET",
headers: { "X-API-Key": KEY },
});
console.log(await r.json());
Remove smart link tags · ✅ live verified
Body: {tags: [string]}. Live verified 2026-08-14.
DELETE /v1/{account}/smart-links/{smart_link_id}/tags · 1 credit(s)
Path params: account, smart_link_id
curl -X DELETE \
-H "X-API-Key: $CREATORS_API_KEY" \
"https://api.creator-api.com/v1/{account}/smart-links/{smart_link_id}/tags" -d '{}'
import requests
r = requests.delete(
"https://api.creator-api.com/v1/{account}/smart-links/{smart_link_id}/tags",
headers={"X-API-Key": KEY},
).json()
print(r.json())
const r = await fetch("https://api.creator-api.com/v1/{account}/smart-links/{smart_link_id}/tags", {
method: "DELETE",
headers: { "X-API-Key": KEY },
});
console.log(await r.json());
Test smart link pixel
Sends a real event to the pixel's platform using its stored credential. Request construction verified against each platform's official documented contract + a local mock (2026-08-14) -- NOT live-delivered to a real Meta/TikTok/GA4 account in this session (no test credentials available); will genuinely deliver once a caller configures a real pixel_id+credential of their own.
POST /v1/{account}/smart-links/{smart_link_id}/pixels/{pixel_id}/test-event · 1 credit(s) · Request shape verified against each platform's docs + a local mock, not against a real Meta/TikTok/GA4 account (no test credentials available).
Path params: account, smart_link_id, pixel_id
curl -X POST \
-H "X-API-Key: $CREATORS_API_KEY" \
"https://api.creator-api.com/v1/{account}/smart-links/{smart_link_id}/pixels/{pixel_id}/test-event" -d '{}'
import requests
r = requests.post(
"https://api.creator-api.com/v1/{account}/smart-links/{smart_link_id}/pixels/{pixel_id}/test-event",
headers={"X-API-Key": KEY},
).json()
print(r.json())
const r = await fetch("https://api.creator-api.com/v1/{account}/smart-links/{smart_link_id}/pixels/{pixel_id}/test-event", {
method: "POST",
headers: { "X-API-Key": KEY },
});
console.log(await r.json());
Update smart link pixel · ✅ live verified
Live verified 2026-08-14.
PATCH /v1/{account}/smart-links/{smart_link_id}/pixels/{pixel_id} · 1 credit(s)
Path params: account, smart_link_id, pixel_id
curl -X PATCH \
-H "X-API-Key: $CREATORS_API_KEY" \
"https://api.creator-api.com/v1/{account}/smart-links/{smart_link_id}/pixels/{pixel_id}" -d '{}'
import requests
r = requests.patch(
"https://api.creator-api.com/v1/{account}/smart-links/{smart_link_id}/pixels/{pixel_id}",
headers={"X-API-Key": KEY},
).json()
print(r.json())
const r = await fetch("https://api.creator-api.com/v1/{account}/smart-links/{smart_link_id}/pixels/{pixel_id}", {
method: "PATCH",
headers: { "X-API-Key": KEY },
});
console.log(await r.json());
Update smart link postback · ✅ live verified
Live verified 2026-08-14.
PATCH /v1/{account}/smart-link-postbacks/{postback_id} · 1 credit(s)
Path params: account, postback_id
curl -X PATCH \
-H "X-API-Key: $CREATORS_API_KEY" \
"https://api.creator-api.com/v1/{account}/smart-link-postbacks/{postback_id}" -d '{}'
import requests
r = requests.patch(
"https://api.creator-api.com/v1/{account}/smart-link-postbacks/{postback_id}",
headers={"X-API-Key": KEY},
).json()
print(r.json())
const r = await fetch("https://api.creator-api.com/v1/{account}/smart-link-postbacks/{postback_id}", {
method: "PATCH",
headers: { "X-API-Key": KEY },
});
console.log(await r.json());
webhooks
Create webhook · ✅ live verified
[webhooks] POST /v1/{account}/webhooks. Platform-agnostic: works identically for any connected account (OnlyFans, Fansly, 4based, Fanvue), not an OnlyFans-specific feature. Body: {url, events: [...]}. Returns the webhook including its signing secret (shown once). Live verified 2026-08-14 (created, delivered a real test POST, cleaned up).
POST /v1/{account}/webhooks · 2 credit(s)
Path params: account
curl -X POST \
-H "X-API-Key: $CREATORS_API_KEY" \
"https://api.creator-api.com/v1/{account}/webhooks" -d '{}'
import requests
r = requests.post(
"https://api.creator-api.com/v1/{account}/webhooks",
headers={"X-API-Key": KEY},
).json()
print(r.json())
const r = await fetch("https://api.creator-api.com/v1/{account}/webhooks", {
method: "POST",
headers: { "X-API-Key": KEY },
});
console.log(await r.json());
Delete webhook · ✅ live verified
[webhooks] DELETE /v1/{account}/webhooks/{hook_id}. Platform-agnostic: works identically for any connected account (OnlyFans, Fansly, 4based, Fanvue), not an OnlyFans-specific feature. Live verified 2026-08-14.
DELETE /v1/{account}/webhooks/{hook_id} · 2 credit(s)
Path params: account, hook_id
curl -X DELETE \
-H "X-API-Key: $CREATORS_API_KEY" \
"https://api.creator-api.com/v1/{account}/webhooks/{hook_id}" -d '{}'
import requests
r = requests.delete(
"https://api.creator-api.com/v1/{account}/webhooks/{hook_id}",
headers={"X-API-Key": KEY},
).json()
print(r.json())
const r = await fetch("https://api.creator-api.com/v1/{account}/webhooks/{hook_id}", {
method: "DELETE",
headers: { "X-API-Key": KEY },
});
console.log(await r.json());
Get webhook · ✅ live verified
[webhooks] GET /v1/{account}/webhooks/{hook_id}. Platform-agnostic: works identically for any connected account (OnlyFans, Fansly, 4based, Fanvue), not an OnlyFans-specific feature. Live verified 2026-08-14.
GET /v1/{account}/webhooks/{hook_id} · 1 credit(s)
Path params: account, hook_id
curl -X GET \
-H "X-API-Key: $CREATORS_API_KEY" \
"https://api.creator-api.com/v1/{account}/webhooks/{hook_id}"
import requests
r = requests.get(
"https://api.creator-api.com/v1/{account}/webhooks/{hook_id}",
headers={"X-API-Key": KEY},
)
print(r.json())
const r = await fetch("https://api.creator-api.com/v1/{account}/webhooks/{hook_id}", {
method: "GET",
headers: { "X-API-Key": KEY },
});
console.log(await r.json());
List webhook deliveries · ✅ live verified
[webhooks] GET /v1/{account}/webhooks/{hook_id}/deliveries?limit=. Platform-agnostic: works identically for any connected account (OnlyFans, Fansly, 4based, Fanvue), not an OnlyFans-specific feature. Recent delivery attempts and their outcomes. Live verified 2026-08-14.
GET /v1/{account}/webhooks/{hook_id}/deliveries · 1 credit(s)
Path params: account, hook_id
curl -X GET \
-H "X-API-Key: $CREATORS_API_KEY" \
"https://api.creator-api.com/v1/{account}/webhooks/{hook_id}/deliveries?limit=50"
import requests
r = requests.get(
"https://api.creator-api.com/v1/{account}/webhooks/{hook_id}/deliveries?limit=50",
headers={"X-API-Key": KEY},
)
print(r.json())
const r = await fetch("https://api.creator-api.com/v1/{account}/webhooks/{hook_id}/deliveries?limit=50", {
method: "GET",
headers: { "X-API-Key": KEY },
});
console.log(await r.json());
List webhook events · ✅ live verified
[webhooks] GET /v1/webhooks/events. Platform-agnostic: works identically for any connected account (OnlyFans, Fansly, 4based, Fanvue), not an OnlyFans-specific feature. Lists every event type a webhook can subscribe to (e.g. messages.received, messages.purchased, subscriptions.new) with a description. Live verified 2026-08-14.
GET /v1/webhooks/events · 1 credit(s)
curl -X GET \
-H "X-API-Key: $CREATORS_API_KEY" \
"https://api.creator-api.com/v1/webhooks/events"
import requests
r = requests.get(
"https://api.creator-api.com/v1/webhooks/events",
headers={"X-API-Key": KEY},
)
print(r.json())
const r = await fetch("https://api.creator-api.com/v1/webhooks/events", {
method: "GET",
headers: { "X-API-Key": KEY },
});
console.log(await r.json());
List webhooks · ✅ live verified
[webhooks] GET /v1/{account}/webhooks. Platform-agnostic: works identically for any connected account (OnlyFans, Fansly, 4based, Fanvue), not an OnlyFans-specific feature. Lists webhooks configured for the account. Live verified 2026-08-14.
GET /v1/{account}/webhooks · 1 credit(s)
Path params: account
curl -X GET \
-H "X-API-Key: $CREATORS_API_KEY" \
"https://api.creator-api.com/v1/{account}/webhooks"
import requests
r = requests.get(
"https://api.creator-api.com/v1/{account}/webhooks",
headers={"X-API-Key": KEY},
)
print(r.json())
const r = await fetch("https://api.creator-api.com/v1/{account}/webhooks", {
method: "GET",
headers: { "X-API-Key": KEY },
});
console.log(await r.json());
Test webhook · ✅ live verified
[webhooks] POST /v1/{account}/webhooks/{hook_id}/test. Platform-agnostic: works identically for any connected account (OnlyFans, Fansly, 4based, Fanvue), not an OnlyFans-specific feature. Sends a real test delivery to the webhook's URL and reports the real response status. Live verified 2026-08-14 (a real 405 came back from a URL that does not accept POST, proving this is a genuine delivery attempt, not a fake success).
POST /v1/{account}/webhooks/{hook_id}/test · 1 credit(s)
Path params: account, hook_id
curl -X POST \
-H "X-API-Key: $CREATORS_API_KEY" \
"https://api.creator-api.com/v1/{account}/webhooks/{hook_id}/test" -d '{}'
import requests
r = requests.post(
"https://api.creator-api.com/v1/{account}/webhooks/{hook_id}/test",
headers={"X-API-Key": KEY},
).json()
print(r.json())
const r = await fetch("https://api.creator-api.com/v1/{account}/webhooks/{hook_id}/test", {
method: "POST",
headers: { "X-API-Key": KEY },
});
console.log(await r.json());
Update webhook · ✅ live verified
[webhooks] PATCH /v1/{account}/webhooks/{hook_id}. Platform-agnostic: works identically for any connected account (OnlyFans, Fansly, 4based, Fanvue), not an OnlyFans-specific feature. Body: any of {url, events, active}. Live verified 2026-08-14 (toggled active=false).
PATCH /v1/{account}/webhooks/{hook_id} · 2 credit(s)
Path params: account, hook_id
curl -X PATCH \
-H "X-API-Key: $CREATORS_API_KEY" \
"https://api.creator-api.com/v1/{account}/webhooks/{hook_id}" -d '{}'
import requests
r = requests.patch(
"https://api.creator-api.com/v1/{account}/webhooks/{hook_id}",
headers={"X-API-Key": KEY},
).json()
print(r.json())
const r = await fetch("https://api.creator-api.com/v1/{account}/webhooks/{hook_id}", {
method: "PATCH",
headers: { "X-API-Key": KEY },
});
console.log(await r.json());
No endpoint matches that filter.