curl --request POST \
--url https://api.onlyx.ai/v1/creators \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--header 'Idempotency-Key: <idempotency-key>' \
--data '
{
"displayName": "Mia Rose"
}
'import requests
url = "https://api.onlyx.ai/v1/creators"
payload = { "displayName": "Mia Rose" }
headers = {
"Idempotency-Key": "<idempotency-key>",
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {
'Idempotency-Key': '<idempotency-key>',
Authorization: 'Bearer <token>',
'Content-Type': 'application/json'
},
body: JSON.stringify({displayName: 'Mia Rose'})
};
fetch('https://api.onlyx.ai/v1/creators', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"aiEnabled": true,
"avatarUrl": null,
"connection": {
"connected": false,
"status": "disconnected"
},
"contentConsentRequired": null,
"createdAt": "2026-09-26T14:02:31.000Z",
"displayName": "Mia Rose",
"handle": "miarose",
"id": "cre_8f2c1a9b0d7e4c3f2a1b",
"onlyfans": null,
"platform": "onlyfans",
"publicName": null,
"stats": {
"conversations": 0,
"fans": 0,
"openHandoffs": 0,
"pendingCents": 0,
"revenueCents": 0,
"revenueKnown": false,
"unreadConversations": 0
}
}Add a creator
Adds an OnlyFans creator to your workspace. She starts disconnected: next, create a connect link (POST /v1/creators/{creatorId}/connect-link) and send it to her so she can sign in to OnlyFans herself. The API never takes her OnlyFans password or codes. Only OnlyFans creators can be added in v1 (Telegram is coming soon). An Idempotency-Key header is required: retry a failed or timed-out request with the same key and you get the original answer instead of a second creator. A workspace can add at most 10 creators per 24 hours through the API (429 RATE_LIMITED beyond that). If OnlyX cannot take a new creator right now the answer is 409 CAPACITY_UNAVAILABLE (or 503 CAPACITY_UNAVAILABLE with Retry-After while the sign-in service is briefly unreachable): retry in a few minutes with the same key. A handle that already exists in the workspace is 409 CONFLICT. A credential limited to some creators cannot add creators (403 INSUFFICIENT_SCOPE).
Scope: requires creators:write.
Rate limits: 10 creators per 24 hours per workspace — on top of the general limit of 120 requests per 60 seconds per credential.
Idempotency: an Idempotency-Key header is required. Retry a failed or timed-out request with the same key: a replay returns the original response with Idempotent-Replayed: true, and nothing is done twice.
curl --request POST \
--url https://api.onlyx.ai/v1/creators \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--header 'Idempotency-Key: <idempotency-key>' \
--data '
{
"displayName": "Mia Rose"
}
'import requests
url = "https://api.onlyx.ai/v1/creators"
payload = { "displayName": "Mia Rose" }
headers = {
"Idempotency-Key": "<idempotency-key>",
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {
'Idempotency-Key': '<idempotency-key>',
Authorization: 'Bearer <token>',
'Content-Type': 'application/json'
},
body: JSON.stringify({displayName: 'Mia Rose'})
};
fetch('https://api.onlyx.ai/v1/creators', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"aiEnabled": true,
"avatarUrl": null,
"connection": {
"connected": false,
"status": "disconnected"
},
"contentConsentRequired": null,
"createdAt": "2026-09-26T14:02:31.000Z",
"displayName": "Mia Rose",
"handle": "miarose",
"id": "cre_8f2c1a9b0d7e4c3f2a1b",
"onlyfans": null,
"platform": "onlyfans",
"publicName": null,
"stats": {
"conversations": 0,
"fans": 0,
"openHandoffs": 0,
"pendingCents": 0,
"revenueCents": 0,
"revenueKnown": false,
"unreadConversations": 0
}
}Authorizations
An API key (onx_sk_…) created in OnlyX under Settings → API & MCP, or an OAuth access token (onx_at_…) issued to a connected app. Send it as Authorization: Bearer <credential>. API keys may also be sent as X-API-Key: <key>.
Headers
Required. A new unique value per new request (8 to 64 letters, digits, - or _; a UUID is ideal). If the request times out or fails with a 5xx, retry with the SAME key: you get the original response (with Idempotent-Replayed: true) and nothing is done twice. Keys are kept for 24 hours. Without it the answer is 400 IDEMPOTENCY_KEY_REQUIRED.
8 - 64^[A-Za-z0-9_-]{8,64}$Body
Your team's label for her, 1 to 120 characters.
1 - 120Her OnlyFans username, without @ (a leading @ is ignored), up to 80 characters. Optional and only a hint: after she connects, her real username replaces it.
80Optional two-letter country code (ISO 3166-1 alpha-2) for the region OnlyX connects to OnlyFans from on her behalf. Choose the country she usually signs in from. A preference: if nothing is free there, a nearby region is used.
^[A-Za-z]{2}$Response
The new creator, disconnected.
The creator's master AI switch. false means the AI chatter answers none of her fans.
Her OnlyFans avatar, once connected.
Headline connection state. GET /v1/creators/{creatorId}/connection has the detail.
Show child attributes
Show child attributes
true when OnlyFans is asking her to accept its content-consent prompt; media sends fail until she does it in OnlyFans. null when not known yet.
When the creator was added to OnlyX (ISO-8601 UTC).
Your team's label for the creator. Set by you, never changed by OnlyFans.
Her OnlyFans username, without @. Replaced by the real username once she connects.
The creator id (cre_…).
Profile facts read from OnlyFans. null until she has connected once.
Show child attributes
Show child attributes
Always onlyfans for creators added through the API in v1. telegram is reserved for Telegram creators, which are coming soon, so code that reads this should expect more than one value.
onlyfans, telegram The display name on her OnlyFans profile, once connected.
Headline numbers, cheap to read.
Show child attributes
Show child attributes