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

# Search creators

> Natural-language Instagram/TikTok creator search. Unsigned callers get 50 free searches per UTC day per IP; pre-claim agent tokens have no free grant, spend prepaid only; claimed/session/Settings-key callers spend prepaid or 100 free searches per UTC day on empty balance. Past free credits, caller gets HTTP 402 (out_of_credits) with WWW-Authenticate: Payment. Paid retries must send identity as x-api-key and settled credential as Authorization: Payment (not Bearer). Dry-run: ?force_payment=1 returns non-charging 402 challenge. Payment credential with remaining entitlement routes through paywall (never silent 200). Rejected Payment credentials return application/problem+json, not OutOfCredits JSON.



## OpenAPI

````yaml GET /api/search
openapi: 3.1.0
info:
  description: >-
    Starcovery helps you find and hire real Instagram and TikTok creators from a
    plain-language brief, on the web or from your agents. REST and MCP API.
    Search accepts unsigned callers. Campaigns, billing state, and keys accept
    browser session, x-api-key, or Bearer. MCP accepts OAuth, x-api-key, Bearer,
    or last-resort ?api_key= (no session). Machine Payments Protocol
    (x-payment-info) on GET /api/search when provisioned. Signup and claim at
    auth.md.
  title: Starcovery
  version: 1.0.0
servers:
  - url: https://www.starcovery.com
security: []
paths:
  /api/search:
    get:
      summary: Search creators
      description: >-
        Natural-language Instagram/TikTok creator search. Unsigned callers get
        50 free searches per UTC day per IP; pre-claim agent tokens have no free
        grant, spend prepaid only; claimed/session/Settings-key callers spend
        prepaid or 100 free searches per UTC day on empty balance. Past free
        credits, caller gets HTTP 402 (out_of_credits) with WWW-Authenticate:
        Payment. Paid retries must send identity as x-api-key and settled
        credential as Authorization: Payment (not Bearer). Dry-run:
        ?force_payment=1 returns non-charging 402 challenge. Payment credential
        with remaining entitlement routes through paywall (never silent 200).
        Rejected Payment credentials return application/problem+json, not
        OutOfCredits JSON.
      parameters:
        - in: query
          name: q
          required: true
          schema:
            type: string
        - in: query
          name: platform
          required: false
          schema:
            enum:
              - ig
              - tt
            type: string
        - in: query
          name: tier
          required: false
          schema:
            enum:
              - nano
              - micro
              - mid
              - macro
              - mega
            type: string
        - in: query
          name: country
          required: false
          schema:
            enum:
              - us
              - gb
              - ca
              - au
              - de
              - fr
              - br
              - jp
              - kr
              - in
            type: string
        - description: >-
            Identity for identified search; required on MPP paid retries
            alongside Authorization: Payment.
          in: header
          name: x-api-key
          required: false
          schema:
            type: string
        - description: >-
            MPP Payment credential after settling a 402 challenge. Must be
            paired with x-api-key.
          in: header
          name: Authorization
          required: false
          schema:
            type: string
        - description: >-
            Docs dry-run: when set to 1 with an identified caller, returns a
            non-charging 402 Payment challenge.
          in: query
          name: force_payment
          required: false
          schema:
            enum:
              - '1'
            type: string
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SearchResult'
          description: Ranked creator shortlist
        '400':
          description: Invalid query
        '401':
          description: identity_required on Payment without x-api-key
        '402':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/OutOfCredits'
            application/problem+json:
              schema:
                $ref: '#/components/schemas/MppPaymentProblem'
          description: >-
            Two 402 bodies: application/json OutOfCredits on credit exhaustion
            (WWW-Authenticate: Payment); application/problem+json on rejected
            Payment credential (MPP diagnostic + retry challenge).
        '429':
          description: Rate limited
components:
  schemas:
    SearchResult:
      additionalProperties: false
      properties:
        creators:
          items:
            $ref: '#/components/schemas/Creator'
          type: array
        query:
          $ref: '#/components/schemas/SearchParams'
        ticket:
          description: >-
            Short-lived web-UI enrichment ticket (Excel view). Null when
            unavailable; absent on MPP paid retries. Not part of the agent
            contract.
          type:
            - string
            - 'null'
      required:
        - creators
        - query
      type: object
    OutOfCredits:
      additionalProperties: false
      properties:
        authUrl:
          format: uri
          type: string
        error:
          const: out_of_credits
          type: string
        freeGrant:
          description: >-
            Which free grant ran out (omitted on force_payment dry-run
            challenges).
          enum:
            - identified_daily
            - none
          type: string
        machinePayment:
          description: MPP posture for this deployment. available=false on Vercel preview.
          oneOf:
            - additionalProperties: false
              properties:
                available:
                  const: true
                  type: boolean
                challengeHeader:
                  type:
                    - string
                    - 'null'
                dryRun:
                  type: string
                retry:
                  type: string
              required:
                - available
                - challengeHeader
                - dryRun
                - retry
              type: object
            - additionalProperties: false
              properties:
                available:
                  const: false
                  type: boolean
                hint:
                  type: string
              required:
                - available
                - hint
              type: object
        packsUrl:
          format: uri
          type: string
      required:
        - authUrl
        - error
        - machinePayment
        - packsUrl
      type: object
    MppPaymentProblem:
      additionalProperties: true
      properties:
        detail:
          type: string
        status:
          type: integer
        title:
          type: string
        type:
          type: string
      type: object
    Creator:
      additionalProperties: false
      properties:
        bio:
          type:
            - string
            - 'null'
        country:
          type:
            - string
            - 'null'
        fitScore:
          type: number
        followerCount:
          maximum: 2147483647
          minimum: 1000
          type: integer
        id:
          type: string
        isVerified:
          type: boolean
        name:
          type:
            - string
            - 'null'
        platform:
          enum:
            - ig
            - tt
          type: string
        profileImageUrl:
          type:
            - string
            - 'null'
        tier:
          enum:
            - nano
            - micro
            - mid
            - macro
            - mega
          type: string
        username:
          type:
            - string
            - 'null'
        videos:
          items:
            $ref: '#/components/schemas/CreatorVideo'
          type: array
      required:
        - bio
        - country
        - fitScore
        - followerCount
        - id
        - isVerified
        - name
        - platform
        - profileImageUrl
        - tier
        - username
        - videos
      type: object
    SearchParams:
      additionalProperties: false
      properties:
        country:
          enum:
            - us
            - gb
            - ca
            - au
            - de
            - fr
            - br
            - jp
            - kr
            - in
          type: string
        platform:
          enum:
            - ig
            - tt
          type: string
        q:
          maxLength: 200
          minLength: 1
          type: string
        tier:
          enum:
            - nano
            - micro
            - mid
            - macro
            - mega
          type: string
      required:
        - q
      type: object
    CreatorVideo:
      additionalProperties: false
      properties:
        bunnyStreamId:
          type:
            - string
            - 'null'
        caption:
          type:
            - string
            - 'null'
        commentCount:
          type: integer
        durationMs:
          type: integer
        id:
          type: string
        isAd:
          type: boolean
        isSponsored:
          type: boolean
        likeCount:
          type: integer
        playCount:
          type:
            - integer
            - 'null'
        playUrl:
          type:
            - string
            - 'null'
        postedAt:
          type: string
        score:
          type: number
        thumbnailUrl:
          type:
            - string
            - 'null'
        webUrl:
          type: string
      required:
        - bunnyStreamId
        - caption
        - commentCount
        - durationMs
        - id
        - isAd
        - isSponsored
        - likeCount
        - playCount
        - playUrl
        - postedAt
        - score
        - thumbnailUrl
        - webUrl
      type: object

````