4Based API Reference
Native access to 4based.com creator accounts through the CreatorAPI proxy. One key, the same shape as OnlyFans and Fansly. You never touch 4based's tokens, headers or its /user/{id}/... path layout · CreatorAPI resolves the creator's own id for you and signs every request server side. Native read and write · shorthand aliases for the common reads · self id resolved for you.
How every call works
All native 4based routes are reached through one pattern:
{METHOD} https://api.creator-api.com/v1/{account}/native/{native_path}
{account} is the connected 4based account id. Auth header X-API-Key: <your key>. GET is read only; writes need a full scope key. Billing: read = 1 credit, write = 2 credits.
Shorthands · you do not need the raw paths
4based puts the creator's own id in almost every path (/user/{id}/...). You do not have to know it. Call the shorthand and CreatorAPI rewrites it to the real path and fills in the id. An explicit query param always wins over the default.
| Shorthand | What you get | Rewrites to |
|---|
me | The creator's own 4based profile | /user/{id} |
subscribers | Subscriber list | /user/{id}/subscription |
subscriber-count | Active, cancelled and pending counts | /user/{id}/subscription-count |
tiers | Subscription tiers and prices | /user/{id}/subscription/configuration |
chats | Conversation list | /user/{id}/chatsByList |
feed | The creator's own feed | /base |
vault | Media vault | /user/{id}/vault |
earnings | Earnings stats | /user/{id}/process/stats |
So GET /v1/{account}/native/subscribers just works, the same way me works on OnlyFans and Fansly. There is no /me route on 4based itself; the shorthand me maps to the real profile route /user/{id}.
4based response notes
- Self id: the id in
/user/{id}/... is the creator's 4based ObjectId. CreatorAPI fills it in for every shorthand, so you never send it. - Default paging:
chats and subscribers require a limit upstream (4based returns 400 without one), so CreatorAPI adds limit=50 when you omit it. Pass your own ?limit= and ?offset= to page. - Empty lists: an account with no subscribers, chats or earnings yet returns an empty body, not an error. That is the real 4based response, not a fault.
- Amounts: money fields (tier
price, earnings) come through exactly as 4based returns them, with the currency field alongside. Read the currency per row before you aggregate.
Account & profile
Get the creator profile
GET /v1/{account}/native/me · 1 credit(s)
curl -X GET \
-H "X-API-Key: $CREATOR_API_KEY" \
"https://api.creator-api.com/v1/{account}/native/me"
import requests
r = requests.get(
"https://api.creator-api.com/v1/{account}/native/me",
headers={"X-API-Key": CREATOR_API_KEY},
)
print(r.json())
const r = await fetch(
"https://api.creator-api.com/v1/{account}/native/me",
{ headers: { "X-API-Key": process.env.CREATOR_API_KEY } },
);
console.log(await r.json());
Subscribers
List subscribers
GET /v1/{account}/native/subscribers · 1 credit(s)
curl -X GET \
-H "X-API-Key: $CREATOR_API_KEY" \
"https://api.creator-api.com/v1/{account}/native/subscribers?limit=50&offset=0"
import requests
r = requests.get(
"https://api.creator-api.com/v1/{account}/native/subscribers",
headers={"X-API-Key": CREATOR_API_KEY},
params={"limit": 50, "offset": 0},
)
print(r.json())
const r = await fetch(
"https://api.creator-api.com/v1/{account}/native/subscribers?limit=50&offset=0",
{ headers: { "X-API-Key": process.env.CREATOR_API_KEY } },
);
console.log(await r.json());
Subscriber count
GET /v1/{account}/native/subscriber-count · 1 credit(s)
Returns active, cancelled and pending cancelled subscription counts.
curl -X GET \
-H "X-API-Key: $CREATOR_API_KEY" \
"https://api.creator-api.com/v1/{account}/native/subscriber-count"
Subscription tiers
List tiers and prices
GET /v1/{account}/native/tiers · 1 credit(s)
Each tier carries its price, repeat_days, type, status and currency.
curl -X GET \
-H "X-API-Key: $CREATOR_API_KEY" \
"https://api.creator-api.com/v1/{account}/native/tiers"
import requests
r = requests.get(
"https://api.creator-api.com/v1/{account}/native/tiers",
headers={"X-API-Key": CREATOR_API_KEY},
)
for tier in r.json():
print(tier["type"], tier["price"], tier["currency"])
Messaging
List conversations
GET /v1/{account}/native/chats · 1 credit(s)
CreatorAPI adds limit=50 when you omit it. Page with ?limit= and ?offset=.
curl -X GET \
-H "X-API-Key: $CREATOR_API_KEY" \
"https://api.creator-api.com/v1/{account}/native/chats?limit=50"
Read messages in a chat
GET /v1/{account}/native/user/{selfId}/chat/{chatId}/message · 1 credit(s)
The messages route needs the chat id, so it takes the full path. Use the me response to get the creator's _id as {selfId}, and a chat id from chats.
curl -X GET \
-H "X-API-Key: $CREATOR_API_KEY" \
"https://api.creator-api.com/v1/{account}/native/user/{selfId}/chat/{chatId}/message?limit=50"
Send a message or PPV
POST /v1/{account}/native/user/{selfId}/chat/{chatId}/message · 2 credit(s) · full scope key
Body { "message": "hey", "file_stack_id": "...", "message_price": 500, "local_id": "..." }. Set message_price above zero for a pay per view message; leave it out for a free message.
curl -X POST \
-H "X-API-Key: $CREATOR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"message":"hey there"}' \
"https://api.creator-api.com/v1/{account}/native/user/{selfId}/chat/{chatId}/message"
Feed & vault
Get the feed
GET /v1/{account}/native/feed · 1 credit(s)
curl -X GET \
-H "X-API-Key: $CREATOR_API_KEY" \
"https://api.creator-api.com/v1/{account}/native/feed?limit=50"
List the media vault
GET /v1/{account}/native/vault · 1 credit(s)
curl -X GET \
-H "X-API-Key: $CREATOR_API_KEY" \
"https://api.creator-api.com/v1/{account}/native/vault?limit=50"
Earnings
Earnings stats
GET /v1/{account}/native/earnings · 1 credit(s)
Optional init_from and init_to (YYYY-MM-DD) narrow the window. Amounts arrive as 4based returns them, with currency alongside.
curl -X GET \
-H "X-API-Key: $CREATOR_API_KEY" \
"https://api.creator-api.com/v1/{account}/native/earnings"
import requests
r = requests.get(
"https://api.creator-api.com/v1/{account}/native/earnings",
headers={"X-API-Key": CREATOR_API_KEY},
params={"init_from": "2026-01-01", "init_to": "2026-07-01"},
)
print(r.json())
Connect a 4based account
You connect a 4based creator to your key by importing a captured session. No proxy is required for 4based.
POST /v1/connect/import · full scope key
Body { "creator_id": "your_id", "platform": "4based", "auth": { "token": "...", "resource": "...", "account_id": "..." } }. The three auth fields come from a logged in 4based session. On success the account is verified and attached to your key.
curl -X POST \
-H "X-API-Key: $CREATOR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"creator_id":"my_creator","platform":"4based","auth":{"token":"...","resource":"...","account_id":"..."}}' \
"https://api.creator-api.com/v1/connect/import"
No endpoint matches that filter.