curl --request GET \
--url https://api.onlyx.ai/v1/conversations \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.onlyx.ai/v1/conversations"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.onlyx.ai/v1/conversations', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"data": [
{
"creatorId": "cre_8f2c1a9b0d7e4c3f2a1b",
"fan": {
"avatarUrl": null,
"displayName": "Mike",
"id": "fan_6b2e8d4a1c9f3e7b5d0a",
"username": null
},
"id": "cnv_3d9e7b1a5c2f4e8d6a0b",
"lastMessage": {
"at": "2026-09-25T21:40:12.000Z",
"direction": "in",
"text": "are you online tonight?"
},
"lastMessageAt": "2026-09-25T21:40:12.000Z",
"status": "team",
"takenOverUntil": "2026-09-26T09:40:12.000Z",
"totalSpentCents": 48500,
"unreadCount": 2
}
],
"hasMore": true,
"nextCursor": "eyJrIjoiY3JlYXRvcnMiLCJwIjp7ImkiOiJjcmVfOGYyYzFhOWIwZDdlNGMzZjJhMWIifX0.Yp3k0Qm7T2vX9aLc4R8sWg"
}List conversations
Lists conversations across every creator the credential can see, or one creator’s with creatorId. Filter by status to find chats your team holds (team), chats waiting on a hand-off (handoff) or chats with the AI off (ai_off); unread=true finds fans waiting for an answer, and the two combine. sort=spend puts the biggest spenders first. Each item carries the fan, the last message and the unread count, so a list call is usually enough for an inbox view. A creatorId the credential cannot see is 404 CREATOR_NOT_FOUND, never an empty list.
Scope: requires inbox:read.
Rate limit: the general limit of 120 requests per 60 seconds per credential.
curl --request GET \
--url https://api.onlyx.ai/v1/conversations \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.onlyx.ai/v1/conversations"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.onlyx.ai/v1/conversations', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"data": [
{
"creatorId": "cre_8f2c1a9b0d7e4c3f2a1b",
"fan": {
"avatarUrl": null,
"displayName": "Mike",
"id": "fan_6b2e8d4a1c9f3e7b5d0a",
"username": null
},
"id": "cnv_3d9e7b1a5c2f4e8d6a0b",
"lastMessage": {
"at": "2026-09-25T21:40:12.000Z",
"direction": "in",
"text": "are you online tonight?"
},
"lastMessageAt": "2026-09-25T21:40:12.000Z",
"status": "team",
"takenOverUntil": "2026-09-26T09:40:12.000Z",
"totalSpentCents": 48500,
"unreadCount": 2
}
],
"hasMore": true,
"nextCursor": "eyJrIjoiY3JlYXRvcnMiLCJwIjp7ImkiOiJjcmVfOGYyYzFhOWIwZDdlNGMzZjJhMWIifX0.Yp3k0Qm7T2vX9aLc4R8sWg"
}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>.
Query Parameters
Only this creator's conversations.
40Only conversations in this status.
ai, team, handoff, ai_off true: only conversations with unread fan messages. false: only ones with none.
Search by fan name (OnlyFans name or your custom name).
100recent (latest message first, default), spend (biggest spenders first), unread (most unread first) or name.
recent, spend, unread, name Page size, 1-50. Default 25.
1 <= x <= 50Opaque cursor from the previous page's nextCursor. Omit for the first page.
1024