> ## Documentation Index
> Fetch the complete documentation index at: https://help.onlyx.ai/llms.txt
> Use this file to discover all available pages before exploring further.

> ## Agent Instructions
> You are reading OnlyX Help: the OnlyX Help Center and the OnlyX developer documentation. OnlyX is an AI chatting and CRM platform for OnlyFans agencies. Its AI chatter is called Hugo in the app.
> Pages at the site root (for example /inbox/..., /hugo/..., /billing/...) are Help Center articles for agency owners, admins, chatters and creators who use the app at app.onlyx.ai. Words in bold are the exact button, menu and label names the app shows; keep them exactly as written. When these pages do not answer a question, the person can email support at support@onlyx.ai.
> Pages under /developers are the developer documentation. REST API base URL: https://api.onlyx.ai/v1 (authenticate with `Authorization: Bearer <API key>`; keys start with onx_sk_ and are created in app.onlyx.ai under Settings > API & MCP). MCP server: https://mcp.onlyx.ai/mcp (OAuth, or a Bearer API key). In the API the AI chatter is `ai` on the wire. Money is integer US cents in fields ending in Cents; timestamps are UTC ISO-8601.
> Rules for assistants acting on a user's behalf: discover ids with list calls and never invent them; before any call that reaches a real fan or the live OnlyFans account (sending a message, releasing a chat to the AI, turning AI on for a chat, resolving a hand-off, turning review mode off, changing the welcome message, creating a tracking link) show the user the exact content and get explicit confirmation; send every POST with an Idempotency-Key and reuse it on retry; never resend a message whose delivery status is unconfirmed; never ask a creator for her OnlyFans password or codes - she signs in herself through a connect link and the OnlyX Login app.

# Get a creator

> Returns one creator plus `readiness`: whether she is set up well enough for the AI chatter to chat and sell (OnlyFans connected, persona, hard limits, fans synced, content mapped), with a hint for each check that fails. Use it after onboarding to see what is still missing. Reading a creator never changes anything. An id from another workspace, or one this credential is not allowed to see, is `404 CREATOR_NOT_FOUND`, exactly like an id that does not exist.

**Scope:** requires `creators:read`.

**Rate limit:** the general limit of 120 requests per 60 seconds per credential.



## OpenAPI

````yaml /developers/api-reference/openapi.json get /v1/creators/{creatorId}
openapi: 3.1.0
info:
  contact:
    email: developers@onlyx.ai
    name: OnlyX developers
    url: https://docs.onlyx.ai/
  description: >
    The OnlyX API runs your OnlyX workspace from your own code and AI tools:
    creators and their

    connection, the fan inbox, fans, vault media, statistics, the AI chatter's
    setup and tracking links.


    **Authentication.** Send an API key as `Authorization: Bearer onx_sk_…`
    (create one in OnlyX under

    Settings → API & MCP), or an OAuth access token issued to a connected app.
    Keys belong to the

    workspace, carry scopes, and can be limited to some creators.


    **Conventions.** JSON with camelCase fields; timestamps are ISO-8601 UTC
    with a `Z`; money is integer

    US cents (fields end in `Cents`). Lists return `{"data": [...], "hasMore":
    bool, "nextCursor": string|null}`

    and page with `limit` and `cursor`.


    **Scopes.** Every operation names the scope it needs in `x-required-scope`
    and in its description; a

    credential without it gets `403 INSUFFICIENT_SCOPE`.


    **Errors and limits.** Errors are `{"error": {"code", "message",
    "requestId"}}`; every response

    carries `X-Request-Id`. The default limit is 120 requests per 60 seconds per

    credential, reported in `X-RateLimit-*` headers; over it you get `429
    RATE_LIMITED` with `Retry-After`.

    Operations with limits of their own list them in `x-rate-limits`.


    **Idempotency and safety.** Every write accepts an `Idempotency-Key` header
    (required when sending a

    message, adding a creator and creating a tracking link): retry with the same
    key and you get the

    original answer instead of a second action. Operations marked
    `x-reaches-fans: true` can reach a real

    fan or change the live OnlyFans account.


    Guides, the MCP server and more: [docs.onlyx.ai](https://docs.onlyx.ai).
  summary: >-
    Run your OnlyX workspace (creators, inbox, fans, stats and the AI chatter)
    from code and AI tools.
  title: OnlyX API
  version: 1.0.0
servers:
  - description: Production
    url: https://api.onlyx.ai
security:
  - bearerAuth: []
tags:
  - description: 'Who you are: the workspace and credential behind a key.'
    name: Workspace
  - description: >-
      The creators your workspace manages: list, read, add, rename, and the AI
      switch.
    name: Creators
  - description: >-
      Connecting a creator's OnlyFans account: connect links she opens on her
      own device, and the connection status to poll.
    name: Connect
  - description: >-
      The fan inbox: list and count conversations, read state, take over,
      release, and the per-chat AI switch.
    name: Conversations
  - description: Read message history and send text, free media and paid messages to fans.
    name: Messages
  - description: Conversations the AI chatter handed to your team, and resolving them.
    name: Hand-offs
  - description: >-
      Fans, their purchases, fan lists, and your team's notes, custom names and
      mute flag.
    name: Fans
  - description: >-
      Each creator's OnlyFans vault: media ids for messages and levels, and
      thumbnails.
    name: Media
  - description: >-
      Today, revenue, audience, the cached overview report, and each creator's
      transaction ledger.
    name: Stats
  - description: The brief the AI chatter follows to chat as each creator.
    name: AI persona
  - description: 'The AI content ladder: folders, ladders, priced levels and their media.'
    name: AI content
  - description: >-
      Follow-ups, review mode, the master AI switch, and OnlyFans' welcome
      message.
    name: AI settings
  - description: >-
      OnlyFans tracking and trial links, your cost fields, and creating new
      links.
    name: Tracking links
externalDocs:
  description: OnlyX developer documentation
  url: https://docs.onlyx.ai
paths:
  /v1/creators/{creatorId}:
    get:
      tags:
        - Creators
      summary: Get a creator
      description: >-
        Returns one creator plus `readiness`: whether she is set up well enough
        for the AI chatter to chat and sell (OnlyFans connected, persona, hard
        limits, fans synced, content mapped), with a hint for each check that
        fails. Use it after onboarding to see what is still missing. Reading a
        creator never changes anything. An id from another workspace, or one
        this credential is not allowed to see, is `404 CREATOR_NOT_FOUND`,
        exactly like an id that does not exist.


        **Scope:** requires `creators:read`.


        **Rate limit:** the general limit of 120 requests per 60 seconds per
        credential.
      operationId: getCreator
      parameters:
        - description: The creator id (`cre_…`).
          in: path
          name: creatorId
          required: true
          schema:
            description: The creator id (`cre_…`).
            title: Creatorid
            type: string
      responses:
        '200':
          content:
            application/json:
              example:
                aiEnabled: true
                avatarUrl: https://media.example.com/avatars/miarose.jpg
                connection:
                  connected: true
                  status: connected
                contentConsentRequired: false
                createdAt: '2026-03-02T09:15:44.000Z'
                displayName: Mia Rose
                handle: miarose
                id: cre_8f2c1a9b0d7e4c3f2a1b
                onlyfans:
                  photosCount: 1540
                  postsCount: 812
                  subscribePriceCents: 999
                  userId: '412345678'
                  verified: true
                  videosCount: 230
                platform: onlyfans
                publicName: Mia
                readiness:
                  checks:
                    - hint: null
                      key: connection
                      label: OnlyFans connected
                      ok: true
                    - hint: null
                      key: persona
                      label: Persona
                      ok: true
                    - hint: Add the things she never does.
                      key: limits
                      label: Hard limits
                      ok: false
                    - hint: null
                      key: fans
                      label: Fans synced
                      ok: true
                    - hint: Add a priced level with media to her AI content.
                      key: content
                      label: Content mapped
                      ok: false
                  ready: false
                stats:
                  conversations: 1912
                  fans: 2841
                  openHandoffs: 2
                  pendingCents: 96420
                  revenueCents: 1284350
                  revenueKnown: true
                  unreadConversations: 14
              schema:
                $ref: '#/components/schemas/CreatorDetail'
          description: The creator, with the readiness checks for the AI chatter.
          headers:
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
            X-RateLimit-Reset:
              $ref: '#/components/headers/X-RateLimit-Reset'
            X-Request-Id:
              $ref: '#/components/headers/X-Request-Id'
        '400':
          content:
            application/json:
              examples:
                VALIDATION_ERROR:
                  summary: VALIDATION_ERROR
                  value:
                    error:
                      code: VALIDATION_ERROR
                      message: The request could not be read.
                      requestId: req-3f9a1c2b7d4e5f60a1b2c3d4
              schema:
                $ref: '#/components/schemas/Error'
          description: >-
            The request is not valid and was not carried out. Fix it before
            retrying. `VALIDATION_ERROR`: the request is not valid; `message`
            names the field and the problem.
          headers:
            X-Request-Id:
              $ref: '#/components/headers/X-Request-Id'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          content:
            application/json:
              examples:
                INSUFFICIENT_SCOPE:
                  summary: INSUFFICIENT_SCOPE
                  value:
                    error:
                      code: INSUFFICIENT_SCOPE
                      message: This key does not have the `creators:read` scope.
                      requestId: req-3f9a1c2b7d4e5f60a1b2c3d4
                WORKSPACE_SUSPENDED:
                  summary: WORKSPACE_SUSPENDED
                  value:
                    error:
                      code: WORKSPACE_SUSPENDED
                      message: This workspace is suspended.
                      requestId: req-3f9a1c2b7d4e5f60a1b2c3d4
              schema:
                $ref: '#/components/schemas/Error'
          description: >-
            The credential may not do this. `INSUFFICIENT_SCOPE`: the credential
            lacks the `creators:read` scope (the `WWW-Authenticate` header names
            it; an OAuth token's message says "token" instead of "key").
            `WORKSPACE_SUSPENDED`: the workspace is suspended.
          headers:
            WWW-Authenticate:
              $ref: '#/components/headers/WWW-Authenticate'
            X-Request-Id:
              $ref: '#/components/headers/X-Request-Id'
        '404':
          content:
            application/json:
              examples:
                CREATOR_NOT_FOUND:
                  summary: CREATOR_NOT_FOUND
                  value:
                    error:
                      code: CREATOR_NOT_FOUND
                      message: Creator not found.
                      requestId: req-3f9a1c2b7d4e5f60a1b2c3d4
              schema:
                $ref: '#/components/schemas/Error'
          description: >-
            Not found. An id that does not exist, belongs to another workspace,
            or is outside this credential's creators all get the same answer.
            `CREATOR_NOT_FOUND`: no creator with this `creatorId` is visible to
            this credential.
          headers:
            X-Request-Id:
              $ref: '#/components/headers/X-Request-Id'
        '429':
          $ref: '#/components/responses/RateLimited'
        '500':
          $ref: '#/components/responses/InternalError'
components:
  schemas:
    CreatorDetail:
      examples:
        - aiEnabled: true
          avatarUrl: https://media.example.com/avatars/miarose.jpg
          connection:
            connected: true
            status: connected
          contentConsentRequired: false
          createdAt: '2026-03-02T09:15:44.000Z'
          displayName: Mia Rose
          handle: miarose
          id: cre_8f2c1a9b0d7e4c3f2a1b
          onlyfans:
            photosCount: 1540
            postsCount: 812
            subscribePriceCents: 999
            userId: '412345678'
            verified: true
            videosCount: 230
          platform: onlyfans
          publicName: Mia
          readiness:
            checks:
              - hint: null
                key: connection
                label: OnlyFans connected
                ok: true
              - hint: null
                key: persona
                label: Persona
                ok: true
              - hint: Add the things she never does.
                key: limits
                label: Hard limits
                ok: false
              - hint: null
                key: fans
                label: Fans synced
                ok: true
              - hint: Add a priced level with media to her AI content.
                key: content
                label: Content mapped
                ok: false
            ready: false
          stats:
            conversations: 1912
            fans: 2841
            openHandoffs: 2
            pendingCents: 96420
            revenueCents: 1284350
            revenueKnown: true
            unreadConversations: 14
      properties:
        aiEnabled:
          description: >-
            The creator's master AI switch. `false` means the AI chatter answers
            none of her fans.
          type: boolean
        avatarUrl:
          anyOf:
            - type: string
            - type: 'null'
          description: Her OnlyFans avatar, once connected.
        connection:
          $ref: '#/components/schemas/CreatorConnection'
          description: >-
            Headline connection state. `GET /v1/creators/{creatorId}/connection`
            has the detail.
        contentConsentRequired:
          anyOf:
            - type: boolean
            - type: 'null'
          description: >-
            `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.
        createdAt:
          description: When the creator was added to OnlyX (ISO-8601 UTC).
          type: string
        displayName:
          description: >-
            Your team's label for the creator. Set by you, never changed by
            OnlyFans.
          type: string
        handle:
          anyOf:
            - type: string
            - type: 'null'
          description: >-
            Her OnlyFans username, without `@`. Replaced by the real username
            once she connects.
        id:
          description: The creator id (`cre_…`).
          type: string
        onlyfans:
          anyOf:
            - $ref: '#/components/schemas/OnlyFansProfile'
            - type: 'null'
          description: >-
            Profile facts read from OnlyFans. `null` until she has connected
            once.
        platform:
          description: >-
            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.
          enum:
            - onlyfans
            - telegram
          type: string
        publicName:
          anyOf:
            - type: string
            - type: 'null'
          description: The display name on her OnlyFans profile, once connected.
        readiness:
          $ref: '#/components/schemas/Readiness'
        stats:
          $ref: '#/components/schemas/CreatorStats'
          description: Headline numbers, cheap to read.
      required:
        - id
        - displayName
        - handle
        - publicName
        - avatarUrl
        - platform
        - aiEnabled
        - connection
        - onlyfans
        - stats
        - contentConsentRequired
        - createdAt
        - readiness
      title: CreatorDetail
      type: object
    Error:
      properties:
        error:
          properties:
            code:
              description: Stable, machine-readable error code.
              type: string
            message:
              description: What went wrong, in a sentence for a person.
              type: string
            requestId:
              description: >-
                The id of this request (also in the `X-Request-Id` header).
                Quote it to support.
              type: string
          required:
            - code
            - message
            - requestId
          type: object
      required:
        - error
      type: object
    CreatorConnection:
      properties:
        connected:
          description: '`true` only when `status` is `connected`.'
          type: boolean
        status:
          description: >-
            Connection status. `disconnected`: not signed in (send a connect
            link). `connecting`: the creator is signing in, or OnlyX is
            re-establishing the session. `verification`: OnlyFans asked for a
            human check; resolve it in app.onlyx.ai. `connected`: live, syncing
            and chatting. `not_a_creator`: the account that signed in is not an
            OnlyFans creator account. `duplicate`: this OnlyFans account is
            already connected to another creator in your workspace.
          enum:
            - disconnected
            - connecting
            - verification
            - connected
            - not_a_creator
            - duplicate
          type: string
      required:
        - status
        - connected
      title: CreatorConnection
      type: object
    OnlyFansProfile:
      properties:
        photosCount:
          description: Photos on her profile.
          type: integer
        postsCount:
          description: Posts on her profile.
          type: integer
        subscribePriceCents:
          anyOf:
            - type: integer
            - type: 'null'
          description: Her current subscription price in cents. `0` for a free page.
        userId:
          anyOf:
            - type: string
            - type: 'null'
          description: Her numeric OnlyFans user id, as a string.
        verified:
          anyOf:
            - type: boolean
            - type: 'null'
          description: Whether OnlyFans shows her as verified.
        videosCount:
          description: Videos on her profile.
          type: integer
      required:
        - userId
        - verified
        - subscribePriceCents
        - postsCount
        - photosCount
        - videosCount
      title: OnlyFansProfile
      type: object
    Readiness:
      properties:
        checks:
          description: Individual readiness checks.
          items:
            $ref: '#/components/schemas/ReadinessCheck'
          type: array
        ready:
          description: >-
            `true` when every check passes and the AI is set up well enough to
            chat and sell.
          type: boolean
      required:
        - ready
        - checks
      title: Readiness
      type: object
    CreatorStats:
      properties:
        conversations:
          description: Conversations in her inbox.
          type: integer
        fans:
          description: Fans OnlyX knows for this creator (active and expired).
          type: integer
        openHandoffs:
          description: Conversations handed off to your team and waiting for a person.
          type: integer
        pendingCents:
          description: Earnings OnlyFans still holds as pending, in cents.
          type: integer
        revenueCents:
          description: Lifetime net earnings read from OnlyFans, in cents.
          type: integer
        revenueKnown:
          description: >-
            `false` when her earnings could not be read from OnlyFans. While
            `false`, treat `revenueCents` as unknown, not zero.
          type: boolean
        unreadConversations:
          description: Conversations with at least one unread fan message.
          type: integer
      required:
        - fans
        - conversations
        - unreadConversations
        - openHandoffs
        - revenueCents
        - pendingCents
        - revenueKnown
      title: CreatorStats
      type: object
    ReadinessCheck:
      properties:
        hint:
          anyOf:
            - type: string
            - type: 'null'
          description: What to do when it fails, for people. `null` when it passes.
        key:
          description: >-
            Stable check key: `connection`, `persona`, `limits`, `fans` or
            `content`. More may be added.
          type: string
        label:
          description: The check's name, for people.
          type: string
        ok:
          description: Whether the check passes.
          type: boolean
      required:
        - key
        - label
        - ok
        - hint
      title: ReadinessCheck
      type: object
  headers:
    X-RateLimit-Limit:
      description: >-
        Requests allowed in the current window of the tightest limit this
        request counted against.
      example: 120
      schema:
        type: integer
    X-RateLimit-Remaining:
      description: Requests left in that window.
      example: 117
      schema:
        type: integer
    X-RateLimit-Reset:
      description: When that window resets, as Unix epoch seconds.
      example: 1790431380
      schema:
        type: integer
    X-Request-Id:
      description: >-
        The id of this request. Your own `X-Request-Id` (8 to 64 letters, digits
        or `-`) is echoed back; otherwise OnlyX creates one. Also in every error
        body as `requestId`: quote it to support.
      example: req-3f9a1c2b7d4e5f60a1b2c3d4
      schema:
        type: string
    WWW-Authenticate:
      description: >-
        The authentication challenge (RFC 6750), for example `Bearer
        error="insufficient_scope", scope="messages:send"`.
      schema:
        type: string
    Retry-After:
      description: Seconds to wait before trying again.
      example: 12
      schema:
        type: integer
  responses:
    Unauthorized:
      content:
        application/json:
          examples:
            INVALID_API_KEY:
              summary: INVALID_API_KEY
              value:
                error:
                  code: INVALID_API_KEY
                  message: The API key is invalid, expired or revoked.
                  requestId: req-3f9a1c2b7d4e5f60a1b2c3d4
            INVALID_TOKEN:
              summary: INVALID_TOKEN
              value:
                error:
                  code: INVALID_TOKEN
                  message: The access token is invalid, expired or revoked.
                  requestId: req-3f9a1c2b7d4e5f60a1b2c3d4
            UNAUTHORIZED:
              summary: UNAUTHORIZED
              value:
                error:
                  code: UNAUTHORIZED
                  message: >-
                    Authentication required. Send your API key as
                    `Authorization: Bearer onx_sk_…`.
                  requestId: req-3f9a1c2b7d4e5f60a1b2c3d4
          schema:
            $ref: '#/components/schemas/Error'
      description: >-
        No credential was sent (`UNAUTHORIZED`), or it is invalid, expired or
        revoked (`INVALID_API_KEY` for API keys, `INVALID_TOKEN` for OAuth
        access tokens: refresh the token or reconnect the app). Too many failed
        attempts from one address with credentials OnlyX never issued are
        answered `429 RATE_LIMITED` instead.
      headers:
        WWW-Authenticate:
          $ref: '#/components/headers/WWW-Authenticate'
        X-Request-Id:
          $ref: '#/components/headers/X-Request-Id'
    RateLimited:
      content:
        application/json:
          examples:
            RATE_LIMITED:
              summary: RATE_LIMITED
              value:
                error:
                  code: RATE_LIMITED
                  message: Too many requests. Try again in 12 seconds.
                  requestId: req-3f9a1c2b7d4e5f60a1b2c3d4
          schema:
            $ref: '#/components/schemas/Error'
      description: >-
        Over a rate limit (`RATE_LIMITED`). Wait `Retry-After` seconds, then
        retry — with the same `Idempotency-Key` for a write.
      headers:
        Retry-After:
          $ref: '#/components/headers/Retry-After'
        X-RateLimit-Limit:
          $ref: '#/components/headers/X-RateLimit-Limit'
        X-RateLimit-Remaining:
          $ref: '#/components/headers/X-RateLimit-Remaining'
        X-RateLimit-Reset:
          $ref: '#/components/headers/X-RateLimit-Reset'
        X-Request-Id:
          $ref: '#/components/headers/X-Request-Id'
    InternalError:
      content:
        application/json:
          examples:
            INTERNAL_ERROR:
              summary: INTERNAL_ERROR
              value:
                error:
                  code: INTERNAL_ERROR
                  message: Something went wrong on our side.
                  requestId: req-3f9a1c2b7d4e5f60a1b2c3d4
          schema:
            $ref: '#/components/schemas/Error'
      description: >-
        Something went wrong on OnlyX's side (`INTERNAL_ERROR`). Retry with
        backoff (reuse the `Idempotency-Key` for a write); quote `requestId` to
        support if it persists.
      headers:
        X-Request-Id:
          $ref: '#/components/headers/X-Request-Id'
  securitySchemes:
    bearerAuth:
      bearerFormat: onx_sk_… API key or onx_at_… access token
      description: >-
        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>`.
      scheme: bearer
      type: http

````