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

# Search people

> Search one platform per call: linkedin (professional profiles and posts), reddit (posts and comments), x (X posts and replies), instagram (Reels, transcripts, post comments and replies), tiktok (videos, transcripts and comments), or facebook (public posts and post comments). Omit platform for Auto: an LLM selects LinkedIn, Reddit, X, Instagram, TikTok or Facebook. Explicit choices skip routing. Search multiple platforms with separate calls and budgets. Reddit and X results include profile_url, match_reason and supporting evidence. X searches and replies paginate until sufficient matches, exhaustion or budget limits; 20 posts is a typical page size, not a total search limit. X profile URLs are for viewing; X URL enrichment is not supported by people/enrich. Instagram supports native and web Reels discovery, supplied post URLs, comments, replies and public bio checks. Instagram reads video transcripts when spoken content is needed, with budgeted audio transcription fallback. Matches include exact caption, transcript or comment quotes, plus comment IDs and parent context; profile URLs do not support people/enrich. TikTok discovers videos and reads native transcripts with budgeted ASR fallback, comments and replies. Results carry exact quotes and video links; creators require a transcript read. TikTok URLs do not support people/enrich. Facebook searches up to 20 public posts per keyword query without search pagination, then reads paginated comments. No group URL is needed. No private groups or global comment search. Results require exact quotes and retain account identity, comment IDs and containing-post context. Facebook profile URLs do not support people/enrich.

Each call searches **one platform**. Set `platform: "linkedin"` for professional profiles (including Crustdata) and LinkedIn posts, `platform: "reddit"` for Reddit posts and comments, `platform: "x"` for X posts and replies, `platform: "instagram"` for Instagram Reels, transcripts, post comments and replies, `platform: "tiktok"` for TikTok videos, transcripts and comments, or `platform: "facebook"` for public Facebook posts and post comments. An explicit platform skips automatic routing and restricts the available search tools, even if the query mentions another platform.

Omit `platform` for **Auto**: a short LLM call chooses LinkedIn, Reddit, X, Instagram, TikTok or Facebook from the query. A `platform` parameter overrides the query’s platform preference. **Auto does not search every platform.** The response's top-level `platform` tells you which was selected. The full result limit and credit budget apply to that platform, including the routing call's model cost. To search multiple platforms, make separate requests with explicit platforms and separate limits; agents can run these requests in parallel.

```json theme={null}
{ "query": "Founders struggling to find their first SaaS users", "platform": "reddit", "max_results": 10, "max_credits": 20 }
```

Describe the people you're looking for as you would to a colleague: a name, a role, a current or past employer, a school, a city, the kind of company they work at (*"500 product managers at Series A+ startups, excluding fintech"*), or an email or LinkedIn address (*"who is [jane@acme.com](mailto:jane@acme.com)"*). For LinkedIn searches, the agent uses professional profiles and posts:

1. It identifies the person behind each email (work or personal) or LinkedIn address the description gives, with Crustdata's person identify. An email Crustdata doesn't have on file can still match by the name in the address at the company that owns the domain.
2. It looks up each company the description names (free). When the description describes the companies instead, it filters people by their employer's industry, headquarters country, size or type directly, or searches companies by funding, latest round, revenue, headcount growth, industry, founding year or country, and can rank them by what they do in plain language (*"revenue depends on a live consumer app"*).
3. It reads the exact values Crustdata stores for round types, industries and job titles (free), so filters match them.
4. It searches people by name, current or past employer, title, location or a radius around a place, school or seniority, including conditions met in different jobs (*"an ML engineer who also founded a company"*), checking small samples (at most 20 people each) and loosening or tightening the filters until they find the right people.
5. When the description is about what people post rather than what their profile says (*"founders hiring a founding engineer this month"*, *"PMs who write about onboarding drop-off"*, *"people speaking at SaaStr"*), it searches public LinkedIn posts (up to 100 posts a search) and keeps the authors whose post shows they fit, reading their LinkedIn profiles (about half a cent each) when it needs to check where they live or what they do. It can also keep only the people it found who post about a topic.

For Reddit searches, the agent searches posts, reads thread context and comments, and selects authors whose own words support the match. It checks public profiles only when helpful. It has no professional search tools for that run.

You get as many people as the description asks for: one for *"Jane Doe at Acme"*, a thousand for *"1000 designers at…"*, 20 when it gives no number, up to 5,000. `max_results` sets the number instead. The agent checks small samples until its filters find the right people, then the people come from those filters: the sample it checked first, then the next pages, each person fetched and charged once. A specific person the description names, or identifies by email or LinkedIn address, comes first. `requested` is how many were asked for and `total` how many people the filters match in all, so fewer people than `requested` means fewer matched.

Each LinkedIn person is a short preview: `name`, `title`, `company`, `headline`, `location`, `linkedin_url`, and `picture_url` when Crustdata has a photo. People identified by email or LinkedIn address come without `company`. People found by a LinkedIn post have no Crustdata record, so they come with an empty `id`, their `headline`, and the `post` that found them (`url`, `date`, `text`). Their `title`, `company` and `location` come from their LinkedIn profile when the agent checked it, which it does when the description asks for something a headline doesn't show (*"in the Bay Area"*), and are empty otherwise. Anyone else a post search found also comes with their `post`. For the full professional profile and matched social accounts, pass a result's `linkedin_url` to [Enrich person](/people-search/docs/api-reference/people-enrich.md).

Social results include `platform` once on the person; their nested `post` inherits that platform. Unavailable `title`, `company`, and `location` fields are omitted. X includes `location` when a checked profile provides one.

Reddit results have `platform: "reddit"`, `id: "reddit:<lowercase username>"`, `username`, `name` (`u/<username>`), `profile_url`, and `match_reason`. Their `post` includes `kind` (`post` or `comment`), `url`, `thread_url`, `date`, `text`, `title`, and `subreddit`. `is_locked` and `is_archived` are null when unknown. A checked public bio can appear in `headline`. Professional fields are omitted and `linkedin_url` is null: pass their `profile_url` to [Enrich person](/people-search/docs/api-reference/people-enrich.md) to load the public profile, avatar, posts and comments. Accounts are deduplicated by username within Reddit, without assuming a connection to a LinkedIn identity. Profile and conversation links provide context for engagement; they do not establish DM availability.

X searches use AnyAPI's `twitter.search` and `twitter.replies`. Each search page typically contains about 20 posts; this is **not a total result limit**. The agent follows `nextCursor` as needed, preserving the query and ordering, and requests a pagination-capable provider on the first page of both searches and replies. It stops when enough matching people are found, no useful searches remain, or the budget is exhausted. Results are not guaranteed to cover every matching X post.

X results have `platform: "x"`, `id: "x:<numeric user ID>"` when available (otherwise `x:handle:<lowercase username>`), `username`, `name`, `profile_url`, and `match_reason`. Supporting `post` evidence includes `kind` (`post` or `reply`), `url`, `thread_url`, an ISO UTC `date`, `text`, and nullable `parent_id` and `conversation_id`. A conversation root is not necessarily the immediate parent. Optional profile checks add public bio, avatar and self-reported location. Title, company and LinkedIn URL remain unknown. X profile URLs open the account directly; `/v1/people/enrich` does not yet accept X profile URLs.

```json theme={null}
{ "query": "People looking for an alternative to Intercom this month", "platform": "x", "max_results": 30, "max_credits": 20 }
```

Instagram can be selected automatically or with `platform: "instagram"`. The agent discovers Reels through Instagram's relevance-ranked search, with web-index search as a supplement, and reads comments and replies on relevant posts. You can also include a post or Reel URL in the query. Discovery does not cover all Instagram posts or globally search comments. Web recency hints refer to crawl/discovery time; the agent checks actual evidence dates. When a requested opinion may be spoken in a video, the agent reads its transcript: cheaper transcript text first, then audio transcription within the remaining budget. Captions remain separate from speech. Missing speech is unknown; explicit captions and comments can still qualify. The agent must establish that an opinion belongs to the account rather than a quoted speaker, repost or advertisement. Pricing explanations and ambiguous reactions alone do not qualify. Discovery is not a global transcript search, and these tools do not interpret on-screen text.

Instagram results include `platform`, `username`, `name`, `profile_url`, `match_reason`, and `id` (`instagram:<numeric user ID>` when available, otherwise `instagram:handle:<lowercase username>`). Each selection requires an exact supporting quote in `post.text`. `post.evidence_type` distinguishes `caption`, `transcript` and `comment`. `caption` retains the original caption separately. Supporting `post` also contains `kind` (`reel`, `post`, `comment`, or `reply`), `text`, ISO UTC `date`, `url`, and `thread_url`. Comment URLs open the containing post; `comment_id` identifies the comment. Replies also include `parent_id` and `parent_text`; `context_text` retains the containing caption. Public bio checks can populate `headline` and `picture_url`. Professional fields are omitted, and `/v1/people/enrich` does not accept Instagram profile URLs.

Reads are cached within a run. Each native Reels query is capped at 10 provider pages, web search at 11, and each comment/reply feed at 5. Large provider pages are buffered without dropping their remaining rows. Results are deduplicated by known account ID and handle; searches stop at the configured bounds, enough matches, exhaustion, or budget. Fewer results do not mean there are no other matching Instagram accounts.

```json theme={null}
{ "query": "Travelers asking for a better itinerary planning app", "platform": "instagram", "max_results": 10, "max_credits": 20 }
```

An empty `people` list means no matching people were found in the searches performed.

## Credits

Credits grow with the people returned. Crustdata charges about 0.23 credits per person returned (0.03, plus 0.1 each for filtering on and returning their roles), a company search 0.03 per company plus 0.1–0.2 for each of industry, headcount and funding it filters on, identifying a person by email or LinkedIn address 1 credit per match (misses are free), a LinkedIn post search or profile check about half a cent each, and the agent's model time is about a cent. A search runs only while the workspace has credits for it: `max_credits` caps the call lower. When the credits run out first, the call returns the people found so far with `stopped: "budget"`, and is charged only for what it spent.

Reddit search, post, comment and profile reads are charged from the provider receipts, including paid misses or failures. Search and comment pages are fetched as needed; repeated reads within a run are cached. Per-attempt provider caps are $0.0012 for search, comments and profiles, and $0.00224 for post details (checked November 13, 2026). These are provider costs before workspace billing markup.

X calls are charged from actual AnyAPI receipts, including paid misses and failures. Per-attempt provider caps are $0.0154 for search, $0.0138 for replies, and \$0.0012 for post and profile reads (checked November 13, 2026). These caps cover backup providers; actual charges can be much lower. Repeated reads in a run are cached and parallel calls reserve their maximum cost before dispatch.

Instagram bills actual AnyAPI receipts, including paid misses and failures. Per-attempt caps are $0.0024 for native search, comments, replies and profiles; $0.0012 for web search; $0.00188 for post lookup; $0.00272 for transcript text; and \$0.095 for audio transcription without hosted video. Transcript reads are cached, including misses, and long transcripts can be read in overlapping chunks. Both possible attempts are reserved before dispatch. These are provider costs before workspace markup.

A search usually takes 8–30 seconds; transcript processing or reading multiple threads and pages can take longer. It needs `OPENAI_API_KEY` and the selected platform’s provider credentials: `CRUSTDATA_API_KEY` for professional search, `ANYAPI_API_KEY` for Facebook, TikTok, Instagram, X, Reddit and LinkedIn post search, and Crustdata allows 30 searches a minute.

## TikTok

```json theme={null}
{ "query": "10 TikTok users complaining Claude is too expensive", "platform": "tiktok", "max_results": 10, "max_credits": 20 }
```

TikTok searches discover videos by keyword, then read their transcripts, comments and replies. Search captions are discovery context, not spoken transcripts. Creators become selectable only after a transcript read; the agent must establish that the complaint is the uploader's own opinion rather than a quote, repost or pricing explanation. Commenters qualify from their own words. Each selection requires an exact quote from evidence already read. Searches may return fewer people than requested. This is not a global comment search, and on-screen text is not interpreted.

Transcripts use `tiktok.video_transcript` first, then `tiktok.video_transcript_full` speech-to-text when native captions are unavailable, within the request budget. Missing transcripts remain unknown; comment discovery can continue. Long transcripts can be read in overlapping chunks. Search and comment pagination preserve original queries and context; repeated reads within a run are cached.

Results include `platform: "tiktok"`, `id` (`tiktok:<numeric user ID>` or `tiktok:handle:<lowercase handle>`), `username`, `profile_url`, and `match_reason`. `post.text` is the selected exact quote. `post.kind` is `video`, `comment` or `reply`; `evidence_type` is `transcript` or `comment`. Video caption, date, video ID, comment ID and known parent comment ID preserve context. Comment and reply evidence URLs include `share_comment_id` and `share_item_id` when a valid comment ID is available; `thread_url` remains the video URL. Other evidence links use the video URL. Professional fields remain unknown. TikTok profile URLs are for viewing; `/v1/people/enrich` does not accept them.

Uses the existing `ANYAPI_API_KEY`. Provider receipts, including paid misses and failures, count toward the budget. Per-attempt caps: search/comments $0.0032, replies $0.0036, profiles/native transcripts $0.0012, and speech-to-text $0.095 (without hosted video). Both possible attempts are reserved before dispatch, including parallel reads. These are provider costs before billing markup, checked November 13, 2026; native transcript routes above the cap are excluded. Transcript processing can make TikTok searches take longer than text-only searches.

### Facebook posts and comments

Use `platform: "facebook"`, ask explicitly for Facebook in Auto, or include a direct Facebook post URL. The agent searches public posts by keyword and reads comments on relevant posts; **no group URL is needed**. Each keyword search returns up to 20 posts and has no pagination cursor. Comment feeds paginate up to five provider pages per post. This does not globally search comments or access private groups. Auto favors other sources for general requests unless Facebook is clearly the best fit.

```json theme={null}
{ "query": "People on Facebook asking for a better itinerary planning app", "platform": "facebook", "max_results": 10, "max_credits": 20 }
```

Results have `platform: "facebook"`, `id` (`facebook:<numeric account ID>` when available, otherwise a namespaced canonical profile URL), `name`, `profile_url`, and `match_reason`. `username` is empty when no handle is established. Each selected person requires an exact quote from their own observed post or comment, returned as `post.text`, with `kind`, `date`, `url`, and `thread_url`. Comments retain `comment_id` and the containing post's `context_text`; links open the containing post, not a guaranteed comment deep link. Missing account identities and anonymous participants are skipped. Public profile checks can add a bio and avatar; professional fields are omitted and Facebook URLs do not support `/v1/people/enrich`.

Location search favors place-tagged posts and does not verify residence. Captions are not video transcripts. The agent filters for individuals and evidence of the requested need; business Pages, promotions and ambiguous reactions should not qualify as people matches.

Uses the existing `ANYAPI_API_KEY`. Actual provider receipts, including paid misses and failures, count toward the budget. Per-attempt caps are $0.0649 for post search, $0.00477 for comments, $0.0036 for post lookup and $0.0032 for profiles (checked November 13, 2026), before workspace markup. Both possible attempts are reserved before dispatch, including parallel calls. Keyword search can take about 20 seconds per call; searches with several queries or comment reads can take longer.

If a search reaches its five-minute run time limit, it returns the people already selected with `stopped: "timeout"` when fewer than requested are available, including completed provider and model usage. This is a partial result, not evidence that no further matches exist. Try fewer requested results or a more specific query.


## OpenAPI

````yaml POST /v1/people/search
openapi: 3.1.0
info:
  title: Constants Social Search API
  version: 1.0.0
  description: >-
    Search for people with a natural-language description, enrich a person's
    LinkedIn profile with their X, Instagram, TikTok and Facebook accounts and
    YouTube videos, enrich any one account with its profile and recent posts,
    and read the transcripts of a person's videos.
servers:
  - url: https://www.constants.io/people-search
    description: Production
security:
  - apiKey: []
paths:
  /v1/people/search:
    post:
      summary: Search people
      description: >-
        Search one platform per call: linkedin (professional profiles and
        posts), reddit (posts and comments), x (X posts and replies), instagram
        (Reels, transcripts, post comments and replies), tiktok (videos,
        transcripts and comments), or facebook (public posts and post comments).
        Omit platform for Auto: an LLM selects LinkedIn, Reddit, X, Instagram,
        TikTok or Facebook. Explicit choices skip routing. Search multiple
        platforms with separate calls and budgets. Reddit and X results include
        profile_url, match_reason and supporting evidence. X searches and
        replies paginate until sufficient matches, exhaustion or budget limits;
        20 posts is a typical page size, not a total search limit. X profile
        URLs are for viewing; X URL enrichment is not supported by
        people/enrich. Instagram supports native and web Reels discovery,
        supplied post URLs, comments, replies and public bio checks. Instagram
        reads video transcripts when spoken content is needed, with budgeted
        audio transcription fallback. Matches include exact caption, transcript
        or comment quotes, plus comment IDs and parent context; profile URLs do
        not support people/enrich. TikTok discovers videos and reads native
        transcripts with budgeted ASR fallback, comments and replies. Results
        carry exact quotes and video links; creators require a transcript read.
        TikTok URLs do not support people/enrich. Facebook searches up to 20
        public posts per keyword query without search pagination, then reads
        paginated comments. No group URL is needed. No private groups or global
        comment search. Results require exact quotes and retain account
        identity, comment IDs and containing-post context. Facebook profile URLs
        do not support people/enrich.
      operationId: searchPeople
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PeopleSearchRequest'
            examples:
              description:
                summary: Describe the people
                value:
                  query: Software engineers working at Waymo
                  max_results: 10
              named_person:
                summary: Find a named person
                value:
                  query: kate deyneka, previously worked at snapchat
                  max_results: 5
      responses:
        '200':
          description: >-
            The matching people, best first. An empty `people` list means
            nothing matched.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PeopleSearchResponse'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '413':
          $ref: '#/components/responses/TooLarge'
        '429':
          description: >-
            Crustdata is rate limiting requests (30 searches a minute). Retry
            shortly.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '500':
          $ref: '#/components/responses/Failed'
        '502':
          description: >-
            Crustdata or the model failed or refused the request, for example
            because Crustdata is out of credits.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '503':
          $ref: '#/components/responses/Unconfigured'
components:
  schemas:
    PeopleSearchRequest:
      type: object
      required:
        - query
      properties:
        query:
          type: string
          maxLength: 4000
          description: >-
            A description of the people to find, such as a role with an
            employer, school or location, or the kind of company they work at.
            It can say how many to return.
        max_results:
          type: integer
          minimum: 1
          maximum: 5000
          description: >-
            People to return, in place of the number the description asks for
            (20 when it gives none). Crustdata charges about 0.23 credits per
            person returned.
        max_credits:
          type: integer
          minimum: 1
          description: >-
            The most credits the call may spend. It stops at the workspace's
            credits left anyway; when either runs out first, the people found so
            far come back with stopped: "budget".
        platform:
          type: string
          enum:
            - linkedin
            - reddit
            - x
            - instagram
            - tiktok
            - facebook
          description: >-
            Restrict this call to one platform. Omit for Auto, which chooses
            LinkedIn, Reddit, X, Instagram, TikTok or Facebook using an LLM; it
            does not search all platforms.
    PeopleSearchResponse:
      type: object
      properties:
        platform:
          type: string
          enum:
            - linkedin
            - reddit
            - x
            - instagram
            - tiktok
            - facebook
          description: The platform searched, including when selected automatically.
        people:
          type: array
          items:
            $ref: '#/components/schemas/PersonPreview'
        usage:
          $ref: '#/components/schemas/Usage'
        ms:
          type: integer
        requested:
          type: integer
          description: How many people were asked for, by max_results or the description.
        total:
          type:
            - integer
            - 'null'
          description: >-
            How many people the filters the rest came from match in all; null
            when only the agent's picks came back.
        stopped:
          type:
            - string
            - 'null'
          enum:
            - budget
            - timeout
            - null
          description: >-
            "budget" when credits ran out, or "timeout" when the search reached
            its time limit before returning the requested count. Completed
            selections and actual usage are returned in either case; fewer
            results do not establish that no more matches exist.
      required:
        - platform
    Error:
      type: object
      properties:
        error:
          type: object
          properties:
            message:
              type: string
    PersonPreview:
      type: object
      description: >-
        A professional profile, Reddit, X, Instagram, TikTok or Facebook account
        with supporting evidence.
      properties:
        id:
          type: string
          description: >-
            Crustdata person ID, empty for LinkedIn post authors,
            reddit:<lowercase username>, or x:<numeric user ID>
            (x:handle:<lowercase username> when the ID is unknown). Instagram
            uses instagram:<numeric user ID>, or instagram:handle:<lowercase
            username> when unknown. TikTok uses tiktok:<numeric user ID> or
            tiktok:handle:<lowercase handle>. Facebook uses facebook:<numeric
            account ID> or facebook:url:<canonical profile URL> when no numeric
            ID is available.
        name:
          type: string
        title:
          type: string
          description: Current job title for LinkedIn results. Omitted for other platforms.
        company:
          type: string
          description: Current employer for LinkedIn results. Omitted for other platforms.
        headline:
          type: string
        location:
          type: string
          description: >-
            Location for LinkedIn results, or self-reported location from a
            checked X profile when available. Omitted for other platforms.
        linkedin_url:
          type:
            - string
            - 'null'
        picture_url:
          type:
            - string
            - 'null'
        post:
          type: object
          description: >-
            The LinkedIn post, Reddit post/comment, X post/reply, Instagram
            caption/transcript/comment/reply quote, or TikTok transcript/comment
            quote supporting the match. TikTok comment/reply URLs include
            share_comment_id and share_item_id when a comment ID is available;
            thread_url remains the video URL. Facebook includes an exact quote
            from a public post or comment; comment URLs open the containing
            post. Social evidence inherits the platform from the person.
          properties:
            url:
              type:
                - string
                - 'null'
            date:
              type:
                - string
                - 'null'
              description: YYYY-MM-DD or ISO UTC timestamp; null when unknown.
            text:
              type: string
            kind:
              type: string
              enum:
                - post
                - comment
                - reply
                - reel
                - video
            subreddit:
              type: string
            title:
              type: string
              description: Reddit thread title.
            thread_url:
              type:
                - string
                - 'null'
            is_locked:
              type:
                - boolean
                - 'null'
              description: Whether the Reddit thread is locked; null means unknown.
            is_archived:
              type:
                - boolean
                - 'null'
              description: Whether the Reddit thread is archived; null means unknown.
            parent_id:
              type:
                - string
                - 'null'
              description: >-
                Known immediate parent post ID for X or parent comment ID for
                Instagram/TikTok replies; null when unknown.
            conversation_id:
              type:
                - string
                - 'null'
              description: X conversation root ID; not necessarily the immediate parent.
            comment_id:
              type:
                - string
                - 'null'
              description: >-
                Facebook, Instagram or TikTok comment/reply ID. The evidence URL
                opens the containing post or video.
            context_text:
              type: string
              description: >-
                Text of the Facebook post or caption of the Instagram post
                containing a comment, when available.
            parent_text:
              type: string
              description: >-
                Text of the parent comment for an Instagram reply, when
                available.
            evidence_type:
              type: string
              enum:
                - transcript
                - caption
                - comment
              description: >-
                Instagram or TikTok evidence type; text is an exact selected
                quote.
            caption:
              type: string
              description: Instagram or TikTok caption, separate from spoken evidence.
            video_id:
              type:
                - string
                - 'null'
        platform:
          type: string
          enum:
            - reddit
            - x
            - instagram
            - tiktok
            - facebook
          description: Present for Reddit, X, Instagram, TikTok and Facebook accounts.
        username:
          type: string
          description: >-
            Account handle, without u/ or @. Empty for Facebook when no handle
            is established.
        profile_url:
          type:
            - string
            - 'null'
          description: >-
            Public Reddit, X, Instagram, TikTok or Facebook profile URL. Only
            Reddit URLs support people/enrich.
        match_reason:
          type: string
          description: >-
            Evidence-grounded explanation for a Reddit, X, Instagram, TikTok or
            Facebook match.
    Usage:
      type: object
      description: What the call cost.
      properties:
        credits:
          type: integer
          description: The credits the call was charged.
        credits_remaining:
          type: integer
          description: >-
            The workspace's credits left after this call. Calls running at the
            same time can change it. Left out when the balance couldn't be read;
            the x-credits-remaining header has the same number.
  responses:
    BadRequest:
      description: The request is invalid.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            error:
              message: url must be an X, Instagram or TikTok profile address.
    Unauthorized:
      description: No API key was sent, or the key isn't valid.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            error:
              message: >-
                Send your API key as Authorization: Bearer <key>. Sign in to the
                dashboard to make one.
    TooLarge:
      description: The request body is over 64 KB.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    Failed:
      description: The request failed unexpectedly.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            error:
              message: The request failed.
    Unconfigured:
      description: The server is missing the credentials this request needs.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
  securitySchemes:
    apiKey:
      type: http
      scheme: bearer
      description: >-
        An API key from the dashboard's API Keys page (sign in or sign up there
        with a constants.io account), sent as `Authorization: Bearer <key>`.
        Keys start with `cps_`.

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.