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

> ## Agent Instructions
> Arcmira searches podcasts and long-form video on YouTube: spoken passages, mentions of people, companies, products, topics and shows, sponsors and recommendations, and full transcripts. Monitors alert on new mentions.
> Discover pages at https://arcmira.com/docs/llms.txt and append .md to any page for markdown. The OpenAPI document is https://api.arcmira.com/v1/openapi.json.
> Agents connect the MCP server at https://mcp.arcmira.com/mcp. Its six tools are arcmira_describe (call once), arcmira_execute_read, arcmira_execute_write (monitor writes; never deletes), arcmira_youtube_search, arcmira_youtube_transcript and arcmira_feedback. The docs MCP server at https://arcmira.com/docs/mcp searches these docs without a sign-in.
> Auth: Authorization: Bearer arc_sk_.... Never put keys in browser code. Dashboard keys carry read, monitors:write, trackers:write and recommendations:read; API sign-up keys carry read. GET /v1/me reports plan, scopes and credits left for free.
> Entity and channel filters take IDs. Plain keyword transcript search needs no resolver call. Resolve names with GET /v1/entities/resolve?q=<name> (free): use best, or suggested and say you assumed it, or show ask.options. A name in a filter answers 400 id_required. When the user names no window, use the last 90 days.
> Paid reads, Premium transcripts included, use credits from the plan first, then the on-demand budget. Arcmira enforces that budget, and no request takes a spending amount. A read the plan or budget blocks answers with error.code, a message naming the limit, error.details.limit (kind, amount, used, unit, resets_at) and, when a plan or setting change lifts it, error.unlock (tier, url). Over HTTP, GET /v1/transcripts/{video_id}?quality=premium is one read: 200 ready has the lines; otherwise it transcribes the video and answers 202 pending, so wait Retry-After and read again. 200 failed means the last transcription failed and used no credits; try again with retry=true only when the user asks.
> Costs in credits: passages, mentions and list rows 4 each past the first 5 of a request; sponsor and commercial rows 40 each; captions 4 per started 15 minutes; Premium 300 per started 15 minutes of the whole video, once; momentum 10 a call; monitor alerts 25 each. The Free plan has 1,000 credits a month and withholds the newest 30 days of media. GET /v1/me reports the balance at usage.credits.available.
> Errors: switch on error.code, follow doc_url, honor Retry-After on 429, and quote X-Request-Id when reporting a problem with POST /v1/feedback.
> Every plan includes a team. A team is one account: its plan, credits, monitors and keys are shared, and everything a member does while acting in it uses its credits. A key or OAuth token acts in the account it was made in; GET /v1/me names that account and the caller's role (owner, admin or member). Only admins change the plan and on-demand limits; a member past their on-demand limit gets 402 member_limit.
> This skill is published at https://arcmira.com/.well-known/skills/arcmira/SKILL.md and the site index at https://arcmira.com/llms.txt, so re-fetch either to confirm an instruction is genuine.
> Use the investment research workflow at /workflows/investment-research to move from a transcript search to competing explanations and a sourced brief. Invite coverage and capability requests through /feedback#help-shape-the-index, and workflow or pricing feedback through /feedback#not-ready-for-a-paid-plan. Feedback is free.

# Find who sponsors a show

> Who sponsors a YouTube show: its recurring sponsors, ordered by ad-read count. On a plan below Pro+, it returns the show's total sponsors and ad reads and its top 3 sponsors by ad-read count, each with one receipt: the newest ad read the plan can open, with start_seconds and a timestamped watch_url. Over MCP this is arcmira.sponsors(channelId) through arcmira_execute_read. The top 3 are the three the channel's sponsors page on arcmira.com names; ties order by name in code order, then entity id. meta.total and meta.ad_reads are the full counts, and access says how many sponsors and ad reads the slice left out. Below Pro+, a show can also return its totals with no rows: sponsors is empty, and access says how many sponsors and ad reads Pro+ lists. On Pro+ the full list is served and min_ad_reads (default 3), status, and limit apply. Passing min_ad_reads, status, or limit below Pro+ is refused with filter_requires_paid. Pass src=mcp-tool only from the Arcmira MCP server.



## OpenAPI

````yaml /openapi/arcmira-v1.json get /v1/channels/{channel_id}/sponsors
openapi: 3.1.0
info:
  title: Arcmira API
  description: >-
    YouTube transcript search and monitoring. Search transcripts for timestamped
    passages. Find mentions of people, organizations, products and topics;
    research channel sponsors and recommendations; retrieve creator captions or
    Premium transcripts with speaker identification; and monitor entities for
    new mentions. Official API guides: https://arcmira.com/docs. An explicit
    Premium read uses credits from the account's plan, then its on-demand
    budget.
  version: 1.0.0
  contact:
    name: Arcmira
    url: https://arcmira.com
servers:
  - url: https://api.arcmira.com
security: []
externalDocs:
  description: Official Arcmira API documentation
  url: https://arcmira.com/docs
paths:
  /v1/channels/{channel_id}/sponsors:
    get:
      tags:
        - Recommendations
      summary: Find who sponsors a show
      description: >-
        Who sponsors a YouTube show: its recurring sponsors, ordered by ad-read
        count. On a plan below Pro+, it returns the show's total sponsors and ad
        reads and its top 3 sponsors by ad-read count, each with one receipt:
        the newest ad read the plan can open, with start_seconds and a
        timestamped watch_url. Over MCP this is arcmira.sponsors(channelId)
        through arcmira_execute_read. The top 3 are the three the channel's
        sponsors page on arcmira.com names; ties order by name in code order,
        then entity id. meta.total and meta.ad_reads are the full counts, and
        access says how many sponsors and ad reads the slice left out. Below
        Pro+, a show can also return its totals with no rows: sponsors is empty,
        and access says how many sponsors and ad reads Pro+ lists. On Pro+ the
        full list is served and min_ad_reads (default 3), status, and limit
        apply. Passing min_ad_reads, status, or limit below Pro+ is refused with
        filter_requires_paid. Pass src=mcp-tool only from the Arcmira MCP
        server.
      operationId: list_channel_sponsors
      parameters:
        - schema:
            type: string
            description: YouTube channel id, the UC... form.
          required: true
          description: YouTube channel id, the UC... form.
          name: channel_id
          in: path
        - schema:
            type: integer
            minimum: 1
            maximum: 100
            description: >-
              Sponsors with fewer ad reads are excluded. Default 3. Pro+ only;
              on other plans passing it is refused with filter_requires_paid.
          required: false
          description: >-
            Sponsors with fewer ad reads are excluded. Default 3. Pro+ only; on
            other plans passing it is refused with filter_requires_paid.
          name: min_ad_reads
          in: query
        - schema:
            type: string
            enum:
              - active
              - lapsed
              - ended
              - uncertain
            description: >-
              Filter against the curated known-advertisers dataset. Pro+ only;
              on other plans passing it is refused with filter_requires_paid.
          required: false
          description: >-
            Filter against the curated known-advertisers dataset. Pro+ only; on
            other plans passing it is refused with filter_requires_paid.
          name: status
          in: query
        - schema:
            type: integer
            minimum: 1
            maximum: 200
            description: >-
              Sponsors to return. Default 100. Pro+ only; on other plans passing
              it is refused with filter_requires_paid, and omitting it serves
              the free slice.
          required: false
          description: >-
            Sponsors to return. Default 100. Pro+ only; on other plans passing
            it is refused with filter_requires_paid, and omitting it serves the
            free slice.
          name: limit
          in: query
        - schema:
            type: string
            enum:
              - mcp-tool
            description: >-
              The surface making this call. The Arcmira MCP server sends
              mcp-tool so every unlock link in a gate attributes to the
              directory install. Omit from your own client.
          required: false
          description: >-
            The surface making this call. The Arcmira MCP server sends mcp-tool
            so every unlock link in a gate attributes to the directory install.
            Omit from your own client.
          name: src
          in: query
      responses:
        '200':
          description: Success
          headers:
            X-Request-Id:
              $ref: '#/components/headers/X-Request-Id'
            X-Arcmira-Version:
              $ref: '#/components/headers/X-Arcmira-Version'
            RateLimit-Limit:
              $ref: '#/components/headers/RateLimit-Limit'
            RateLimit-Remaining:
              $ref: '#/components/headers/RateLimit-Remaining'
            RateLimit-Reset:
              $ref: '#/components/headers/RateLimit-Reset'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ChannelSponsorsResponse'
        '400':
          $ref: '#/components/responses/InvalidRequest'
        '401':
          $ref: '#/components/responses/AuthenticationError'
        '402':
          $ref: '#/components/responses/QuotaExceeded'
        '403':
          $ref: '#/components/responses/PermissionError'
        '404':
          $ref: '#/components/responses/NotFound'
        '429':
          $ref: '#/components/responses/RateLimited'
        '500':
          $ref: '#/components/responses/ServerError'
      security:
        - bearerAuth: []
components:
  headers:
    X-Request-Id:
      description: >-
        The request id, echoed from an X-Request-Id request header or minted as
        req_<uuid>. error.request_id carries the same value. Quote it when
        reporting a problem.
      schema:
        type: string
    X-Arcmira-Version:
      description: The API version that answered. Always v1.
      schema:
        type: string
        enum:
          - v1
    RateLimit-Limit:
      description: >-
        Requests allowed per 60-second window for this credential, as GET /v1/me
        rate_limit reports.
      schema:
        type: integer
    RateLimit-Remaining:
      description: >-
        An estimate of the requests left in the current window. Limits are
        counted at each Cloudflare location, so it can read high; a 429 is the
        final word.
      schema:
        type: integer
    RateLimit-Reset:
      description: Unix time in seconds when the current window ends.
      schema:
        type: integer
    Retry-After:
      description: >-
        Seconds to wait before retrying. error.retry_after_seconds carries the
        same value on an error.
      schema:
        type: integer
  schemas:
    ChannelSponsorsResponse:
      type: object
      properties:
        channel:
          type: object
          properties:
            id:
              type:
                - string
                - 'null'
              description: >-
                Public entity id ("ent_{n}") of the channel. Null when the
                channel has media in the index but no entity record yet.
            youtube_channel_id:
              type: string
              description: YouTube channel id as supplied in the request path.
            name:
              type:
                - string
                - 'null'
              description: Channel name. Null when no entity record exists.
            page:
              type:
                - string
                - 'null'
              description: >-
                The channel's page on arcmira.com, absolute. Null when no
                channel is known.
          required:
            - id
            - youtube_channel_id
            - name
            - page
        sponsors:
          type: array
          items:
            $ref: '#/components/schemas/ChannelSponsor'
          description: >-
            Recurring sponsors, most ad reads first, a tie going to the name.
            Below Pro+, the three the channel's sponsors page on arcmira.com
            names.
        meta:
          type: object
          properties:
            min_ad_reads:
              type: integer
              description: The min_ad_reads threshold applied (default 3).
            count:
              type: integer
              description: Number of sponsors returned.
            total:
              type: integer
              description: >-
                Sponsors in the rollup at the applied threshold. Greater than
                count only when the plan gate cut the list to the free slice.
            ad_reads:
              type: integer
              description: 'Present below Pro+: ad reads across every sponsor in the rollup.'
          required:
            - min_ad_reads
            - count
            - total
        access:
          type: object
          properties:
            type:
              type: string
              enum:
                - invalid_request_error
                - authentication_error
                - permission_error
                - quota_exceeded
                - rate_limit_error
                - not_found
                - conflict_error
                - server_error
              description: >-
                The error class. It fixes the HTTP status: invalid_request_error
                400, authentication_error 401, quota_exceeded 402,
                permission_error 403, not_found 404, conflict_error 409,
                rate_limit_error 429, server_error 500. Switch on it for retry
                and gate handling.
            code:
              type: string
              description: >-
                The specific condition, stable and snake_case; doc_url anchors
                on it. x-arcmira-codes on this schema lists every code with its
                type, gate and meaning. The list is open: new codes may appear
                inside an existing type, so switch on type and gate first.
            reason:
              type: string
              enum:
                - no_credential
                - invalid
                - revoked
              description: >-
                Only on invalid_api_key. no_credential: nothing was sent.
                invalid: a credential was sent and is unknown or malformed.
                revoked: the key exists and is no longer usable.
            message:
              type: string
              description: One plain line. Names the fix or the unlock.
            param:
              type: string
              description: The query or body parameter the gate refused, when one did.
            gate:
              type: string
              enum:
                - rows
                - key
                - plan
                - freshness
                - exposure_law
                - rate
                - pagination
              description: >-
                Which boundary refused. Present on every gate error; switch on
                it without parsing the message.
            resource:
              $ref: '#/components/schemas/ErrorResource'
            unlock:
              type: object
              properties:
                tier:
                  type: string
                  description: The plan that lifts the gate.
                url:
                  type: string
                  description: >-
                    Absolute upgrade or sign-up URL carrying its ?src=
                    attribution. Use it verbatim.
                offer:
                  type: 'null'
                  description: Reserved for the agent-discount offer. Always null today.
                action:
                  type: object
                  properties:
                    kind:
                      type: string
                      description: >-
                        What the call does. send_signup_code sends a
                        verification code to an address for an account key.
                    method:
                      type: string
                      description: HTTP method to use.
                    url:
                      type: string
                      description: >-
                        Absolute endpoint carrying its ?src= attribution. Call
                        it verbatim.
                  required:
                    - kind
                    - method
                    - url
                  description: >-
                    The request that lifts the gate with no human, present when
                    the caller can fix this itself. A key gate carries the
                    signup send here; a plan or quota gate has no action and its
                    url is a page a person opens.
              required:
                - tier
                - url
                - offer
              description: How to lift the gate. Present when the gate has an unlock.
            retry_after_seconds:
              type: integer
              description: Present on rate gates. Mirrors the Retry-After header.
            details:
              type: object
              properties:
                quote:
                  $ref: '#/components/schemas/RefusedQuote'
                limit:
                  $ref: '#/components/schemas/Limit'
                url:
                  type: string
                  description: >-
                    On terms_acceptance_required: the page where the person
                    accepts the updated Terms of Service. On terms_updated: the
                    Terms of Service page.
              description: >-
                Machine data the refusal carries for you to act on. Present only
                on the codes that name a field here.
            doc_url:
              type: string
            request_id:
              type: string
          required:
            - type
            - code
            - message
            - doc_url
            - request_id
          description: >-
            The gate that reduced this response. Present only when something was
            withheld; carries the same code, gate, and unlock an outright
            refusal would.
      required:
        - channel
        - sponsors
        - meta
    ChannelSponsor:
      type: object
      properties:
        entity:
          allOf:
            - $ref: '#/components/schemas/EntityRef'
            - description: The sponsoring entity.
        ad_reads:
          type: integer
          description: Number of ad_read recommendations for this sponsor on the channel.
        videos:
          type: integer
          description: Number of distinct videos containing those ad reads.
        first_seen:
          type:
            - string
            - 'null'
          description: >-
            Publish timestamp of the earliest video with an ad read. Null when
            unknown.
        last_seen:
          type:
            - string
            - 'null'
          description: >-
            Publish timestamp of the most recent video with an ad read. Null
            when unknown.
        sponsor_status:
          type:
            - object
            - 'null'
          properties:
            status:
              type: string
              description: >-
                Curated sponsorship status from the known-advertisers dataset.
                Values: active (currently sponsoring), lapsed (no recent ad
                reads), ended (relationship known to have ended), uncertain
                (signal too weak to classify).
            ad_count:
              type:
                - integer
                - 'null'
              description: Curated ad count from the known-advertisers dataset.
            first_ad_date:
              type:
                - string
                - 'null'
              description: Curated first-ad date. Null when not recorded.
            last_ad_date:
              type:
                - string
                - 'null'
              description: Curated last-ad date. Null when not recorded.
          required:
            - status
            - ad_count
            - first_ad_date
            - last_ad_date
          description: >-
            Curated known-advertiser record for this sponsor/channel pair. Null
            unless the pair exists in the curated dataset.
        receipt:
          type:
            - object
            - 'null'
          properties:
            video_id:
              type: string
              description: YouTube video id (11 characters).
            title:
              type:
                - string
                - 'null'
              description: Video title.
            published_at:
              type:
                - string
                - 'null'
              description: Video publish timestamp.
            start_seconds:
              type:
                - integer
                - 'null'
              description: >-
                Where the ad read starts, in integer seconds. 0 means "full
                episode / no specific moment". Null when the analyzer could not
                place it in time.
            verbatim_quote:
              type:
                - string
                - 'null'
              description: The ad read as said. Null when no quote was extracted.
            watch_url:
              type: string
              description: The video on arcmira.com, opened at start_seconds.
          required:
            - video_id
            - title
            - published_at
            - start_seconds
            - verbatim_quote
            - watch_url
          description: >-
            Present below Pro+: one of this sponsor's ad reads on the channel,
            the newest your plan lists. Null when every read is newer than your
            plan's freshness window.
      required:
        - entity
        - ad_reads
        - videos
        - first_seen
        - last_seen
        - sponsor_status
    ErrorResource:
      oneOf:
        - type: object
          properties:
            kind:
              type: string
              enum:
                - media_rows
            beyond_row:
              type: integer
          required:
            - kind
            - beyond_row
        - type: object
          properties:
            kind:
              type: string
              enum:
                - fresh_media
            window_days:
              type: integer
            cutoff:
              type:
                - string
                - 'null'
          required:
            - kind
            - window_days
            - cutoff
        - type: object
          properties:
            kind:
              type: string
              enum:
                - sidebar_rows
            section:
              type: string
              enum:
                - topics
                - entities
            beyond_row:
              type: integer
          required:
            - kind
            - section
            - beyond_row
        - type: object
          properties:
            kind:
              type: string
              enum:
                - counts
          required:
            - kind
        - type: object
          properties:
            kind:
              type: string
              enum:
                - chart
          required:
            - kind
        - type: object
          properties:
            kind:
              type: string
              enum:
                - pagination
            param:
              type:
                - string
                - 'null'
              enum:
                - offset
                - cursor
                - null
          required:
            - kind
            - param
        - type: object
          properties:
            kind:
              type: string
              enum:
                - premium_transcript
          required:
            - kind
        - type: object
          properties:
            kind:
              type: string
              enum:
                - filter
            param:
              type: string
          required:
            - kind
            - param
        - type: object
          properties:
            kind:
              type: string
              enum:
                - commercial
            what:
              type: string
              enum:
                - sponsors
                - recommendations
                - mention_details
                - community_review
                - paid_split
          required:
            - kind
            - what
        - type: object
          properties:
            kind:
              type: string
              enum:
                - feature
            feature:
              type: string
              enum:
                - api
                - export
          required:
            - kind
            - feature
        - type: object
          properties:
            kind:
              type: string
              enum:
                - rows
            requested:
              type:
                - integer
                - 'null'
            remaining:
              type:
                - integer
                - 'null'
          required:
            - kind
            - requested
            - remaining
        - type: object
          properties:
            kind:
              type: string
              enum:
                - key
            scope:
              type:
                - string
                - 'null'
              enum:
                - read
                - monitors:write
                - trackers:write
                - recommendations:read
                - null
          required:
            - kind
            - scope
        - type: object
          properties:
            kind:
              type: string
              enum:
                - requests
          required:
            - kind
      description: >-
        The value the boundary withheld, not the reason it refused. kind is a
        closed vocabulary and the fields beside it are fixed per kind; see
        https://arcmira.com/docs/errors#resource-kinds.
    RefusedQuote:
      allOf:
        - $ref: '#/components/schemas/TranscriptQuote'
        - type: object
          properties:
            charge:
              type: object
              properties:
                unit:
                  type: string
                  enum:
                    - rows
                    - credits
                amount:
                  type: number
                from:
                  type: string
                  enum:
                    - included
                    - on_demand
                    - mixed
                  description: Where the charge would come from at the current balance.
              required:
                - unit
                - amount
                - from
              description: >-
                What the request would charge at the current balance. Absent
                when no current price could be read.
            max_on_demand_cents:
              type: integer
              description: >-
                The on-demand usage, in whole cents, this request needs beyond
                the plan's credits at the current balance.
      description: >-
        The refused price, on a priced refusal: quota_exceeded,
        spend_limit_exceeded and paid_plan_required.
    Limit:
      oneOf:
        - type: object
          properties:
            kind:
              type: string
              enum:
                - plan_credits
            unit:
              type: string
              enum:
                - credits
            amount:
              type: number
              description: >-
                The plan credits a month. Carried by quota_exceeded when
                on-demand usage is off.
            used:
              type: number
              description: How much of amount is used this month, in credits.
            resets_at:
              type: string
              description: >-
                YYYY-MM-DD, the first day of next month (UTC), when used returns
                to 0.
          required:
            - kind
            - unit
            - amount
            - used
            - resets_at
        - type: object
          properties:
            kind:
              type: string
              enum:
                - on_demand_budget
            unit:
              type: string
              enum:
                - credits
            amount:
              type: number
              description: >-
                The on-demand budget a month, in credits ($0.002 a credit).
                Carried by quota_exceeded and spend_limit_exceeded when
                on-demand usage is on.
            used:
              type: number
              description: How much of amount is used this month, in credits.
            resets_at:
              type: string
              description: >-
                YYYY-MM-DD, the first day of next month (UTC), when used returns
                to 0.
          required:
            - kind
            - unit
            - amount
            - used
            - resets_at
        - type: object
          properties:
            kind:
              type: string
              enum:
                - member_on_demand
            unit:
              type: string
              enum:
                - cents
            amount:
              type: number
              description: >-
                The monthly on-demand limit an admin set for the person the key
                or token acts for, in US cents. Carried by member_limit.
            used:
              type: number
              description: How much of amount is used this month, in cents.
            resets_at:
              type: string
              description: >-
                YYYY-MM-DD, the first day of next month (UTC), when used returns
                to 0.
          required:
            - kind
            - unit
            - amount
            - used
            - resets_at
        - type: object
          properties:
            kind:
              type: string
              enum:
                - premium_hours
            unit:
              type: string
              enum:
                - hours
            amount:
              type: number
              description: >-
                The Premium transcript hours Ultra plan credits cover a month.
                Carried by fair_use_cap.
            used:
              type: number
              description: How much of amount is used this month, in hours.
            resets_at:
              type: string
              description: >-
                YYYY-MM-DD, the first day of next month (UTC), when used returns
                to 0.
          required:
            - kind
            - unit
            - amount
            - used
            - resets_at
        - allOf:
            - $ref: '#/components/schemas/Freshness'
            - type: object
              properties:
                kind:
                  type: string
                  enum:
                    - freshness
              required:
                - kind
          description: Where results stop on a plan that reads media after a delay.
      description: >-
        On quota_exceeded, spend_limit_exceeded, member_limit, fair_use_cap and
        freshness_requires_paid: the limit the refusal met. Absent when the
        server holds no figure for it.
    Error:
      type: object
      properties:
        error:
          type: object
          properties:
            type:
              type: string
              enum:
                - invalid_request_error
                - authentication_error
                - permission_error
                - quota_exceeded
                - rate_limit_error
                - not_found
                - conflict_error
                - server_error
              description: >-
                The error class. It fixes the HTTP status: invalid_request_error
                400, authentication_error 401, quota_exceeded 402,
                permission_error 403, not_found 404, conflict_error 409,
                rate_limit_error 429, server_error 500. Switch on it for retry
                and gate handling.
            code:
              type: string
              description: >-
                The specific condition, stable and snake_case; doc_url anchors
                on it. x-arcmira-codes on this schema lists every code with its
                type, gate and meaning. The list is open: new codes may appear
                inside an existing type, so switch on type and gate first.
            reason:
              type: string
              enum:
                - no_credential
                - invalid
                - revoked
              description: >-
                Only on invalid_api_key. no_credential: nothing was sent.
                invalid: a credential was sent and is unknown or malformed.
                revoked: the key exists and is no longer usable.
            message:
              type: string
              description: One plain line. Names the fix or the unlock.
            param:
              type: string
              description: The query or body parameter the gate refused, when one did.
            gate:
              type: string
              enum:
                - rows
                - key
                - plan
                - freshness
                - exposure_law
                - rate
                - pagination
              description: >-
                Which boundary refused. Present on every gate error; switch on
                it without parsing the message.
            resource:
              $ref: '#/components/schemas/ErrorResource'
            unlock:
              type: object
              properties:
                tier:
                  type: string
                  description: The plan that lifts the gate.
                url:
                  type: string
                  description: >-
                    Absolute upgrade or sign-up URL carrying its ?src=
                    attribution. Use it verbatim.
                offer:
                  type: 'null'
                  description: Reserved for the agent-discount offer. Always null today.
                action:
                  type: object
                  properties:
                    kind:
                      type: string
                      description: >-
                        What the call does. send_signup_code sends a
                        verification code to an address for an account key.
                    method:
                      type: string
                      description: HTTP method to use.
                    url:
                      type: string
                      description: >-
                        Absolute endpoint carrying its ?src= attribution. Call
                        it verbatim.
                  required:
                    - kind
                    - method
                    - url
                  description: >-
                    The request that lifts the gate with no human, present when
                    the caller can fix this itself. A key gate carries the
                    signup send here; a plan or quota gate has no action and its
                    url is a page a person opens.
              required:
                - tier
                - url
                - offer
              description: How to lift the gate. Present when the gate has an unlock.
            retry_after_seconds:
              type: integer
              description: Present on rate gates. Mirrors the Retry-After header.
            details:
              type: object
              properties:
                quote:
                  $ref: '#/components/schemas/RefusedQuote'
                limit:
                  $ref: '#/components/schemas/Limit'
                url:
                  type: string
                  description: >-
                    On terms_acceptance_required: the page where the person
                    accepts the updated Terms of Service. On terms_updated: the
                    Terms of Service page.
              description: >-
                Machine data the refusal carries for you to act on. Present only
                on the codes that name a field here.
            doc_url:
              type: string
            request_id:
              type: string
          required:
            - type
            - code
            - message
            - doc_url
            - request_id
      required:
        - error
      x-arcmira-codes:
        - code: alert_not_found
          type: not_found
          description: A referenced alert does not exist or belongs to another account.
        - code: api_not_enabled
          type: permission_error
          gate: plan
          description: >-
            The plan does not include API access. unlock.url names the plan that
            does.
        - code: appearances_person_only
          type: invalid_request_error
          description: Appearance filtering applies to person entities only.
        - code: channel_not_found
          type: not_found
          description: No channel matches the id or slug.
        - code: email_verification_required
          type: permission_error
          description: Verify the account email before adding recipients.
        - code: entity_not_found
          type: not_found
          description: No entity matches the id, slug, or name.
        - code: fair_use_cap
          type: quota_exceeded
          description: >-
            A fair-use cap on the plan's credits is reached for this use this
            month, and the account has no granted or on-demand credits to use
            instead. Nothing was charged. details.limit carries the cap and what
            is used. An admin turns on on-demand usage or raises its budget, or
            the cap resets with the month.
        - code: feature_not_available
          type: permission_error
          gate: plan
          description: >-
            The plan does not include this feature. unlock.url names the plan
            that does.
        - code: feedback_not_found
          type: not_found
          description: No feedback submission with this id for this account.
        - code: filter_requires_paid
          type: permission_error
          gate: plan
          description: >-
            The parameter in param needs a paid plan; omit it for the free
            answer.
        - code: forbidden
          type: permission_error
          description: The caller may not perform this operation on this resource.
        - code: freshness_requires_paid
          type: permission_error
          gate: freshness
          description: >-
            The date window starts after results on this plan stop.
            details.limit carries delay_days and served_through; move the window
            to served_through or earlier, or open unlock.url for the plan that
            reads newer media.
        - code: id_required
          type: invalid_request_error
          description: >-
            A filter in param received a name where it takes an id (ent_{n} or
            UC...). Resolve the name first with GET /v1/entities/resolve and
            pass best.id or best.youtube_channel_id.
        - code: idempotency_conflict
          type: conflict_error
          description: >-
            The Idempotency-Key was sent before with a different request body.
            Send a new key for a new request.
        - code: idempotency_result_expired
          type: conflict_error
          description: >-
            The original one-time signing secret is no longer valid. Use a new
            request key for a new rotation.
        - code: insufficient_scope
          type: permission_error
          gate: key
          description: The key lacks the scope this route needs.
        - code: invalid_api_key
          type: authentication_error
          gate: key
          description: >-
            No usable credential. reason says whether none was sent, it is
            unknown, or it was revoked.
        - code: invalid_body
          type: invalid_request_error
          description: The JSON body failed validation; message names the field.
        - code: invalid_cursor
          type: invalid_request_error
          description: >-
            The continuation is invalid, expired, or belongs to another query.
            Restart without cursor.
        - code: invalid_email_recipients
          type: invalid_request_error
          description: Email recipients failed validation.
        - code: invalid_feedback_request
          type: invalid_request_error
          description: The feedback query or corrections do not fit the feedback type.
        - code: invalid_idempotency_key
          type: invalid_request_error
          description: >-
            Idempotency-Key must be 1 to 255 printable ASCII characters (0x21 to
            0x7E). param is Idempotency-Key.
        - code: invalid_query
          type: invalid_request_error
          description: A query parameter failed validation; message names it.
        - code: invalid_slack_integration
          type: invalid_request_error
          description: Choose an active Slack integration owned by the account.
        - code: invalid_video_id
          type: invalid_request_error
          description: The video_id path segment is not an 11-character YouTube id.
        - code: job_requires_account
          type: authentication_error
          gate: key
          description: Transcription jobs belong to an account; sign up for a key.
        - code: member_limit
          type: quota_exceeded
          gate: rows
          description: >-
            The account's included credits are used up and the person the key or
            token acts for has reached their monthly on-demand limit in it.
            Nothing was charged, and there is no unlock. details.limit carries
            the limit and what is used, in US cents. An admin raises the limit
            on the Team page (https://arcmira.com/dashboard/members), or it
            resets with the month.
        - code: monitor_creation_unavailable
          type: server_error
          description: >-
            Monitor creation is temporarily unavailable. Retry the same request
            with the same key.
        - code: monitor_creation_unconfirmed
          type: server_error
          description: >-
            Monitor creation could not be confirmed. Retry the same request with
            the same key.
        - code: monitor_not_found
          type: not_found
          description: No monitor with this id on the account.
        - code: not_found
          type: not_found
          description: No route or resource at this path.
        - code: on_demand_paused
          type: quota_exceeded
          gate: rows
          description: >-
            The account's included credits are used up and its on-demand usage
            is paused, because a payment for an on-demand invoice was declined.
            Nothing was charged, and there is no unlock. On-demand resumes once
            the invoice is paid. An admin updates the card on the Billing &
            Invoices page (https://arcmira.com/dashboard/billing), which retries
            the payment.
        - code: owner_only
          type: permission_error
          description: >-
            Only an admin of the account may do this. Everyone in a team can
            create, edit, pause, delete and restore monitors.
        - code: owner_plan_required
          type: permission_error
          description: >-
            A team account follows its owner's plan, which does not include
            this. An admin can upgrade; a member's own plan does not apply.
        - code: pagination_gated
          type: permission_error
          gate: pagination
          description: Results past the free window need a paid plan.
        - code: paid_plan_required
          type: permission_error
          description: >-
            The operation needs a paid plan. unlock.url names the plan that
            does.
        - code: premium_transcript_requested
          type: permission_error
          gate: exposure_law
          description: Premium transcript text needs a plan with Premium transcripts.
        - code: quota_exceeded
          type: quota_exceeded
          gate: rows
          description: >-
            The read needs more credits than the plan, then the on-demand
            budget, have left. Nothing was charged. details.limit carries the
            plan credits or the on-demand budget the read met, with what is used
            and when it resets. unlock.url upgrades the plan or raises the
            budget.
        - code: rate_limited
          type: rate_limit_error
          gate: rate
          description: Too many requests in the window. Retry-After carries the wait.
        - code: recipient_upgrade_required
          type: permission_error
          description: The requested email recipient count exceeds the plan allowance.
        - code: recommendations_not_enabled
          type: permission_error
          gate: plan
          description: Commercial data needs a Pro+ plan.
        - code: resource_conflict
          type: conflict_error
          description: The operation conflicts with existing resource state.
        - code: scope_too_broad
          type: invalid_request_error
          description: >-
            The requested exact video scope exceeds the search filename cap;
            narrow by channel or date.
        - code: search_unavailable
          type: server_error
          description: >-
            Transcript search is unavailable (HTTP 503). Retry-After carries the
            wait.
        - code: server_error
          type: server_error
          description: >-
            Unexpected failure. Retry with backoff and quote request_id if it
            persists.
        - code: service_unavailable
          type: server_error
          description: >-
            The database was briefly overloaded or restarting (HTTP 503).
            Retry-After carries the wait; send the same request again.
        - code: signup_code_invalid
          type: invalid_request_error
          description: >-
            The signup code is wrong, expired, or spent; message names the
            attempts left.
        - code: signup_send_limited
          type: rate_limit_error
          description: >-
            Verification code sends hit a per-address, per-IP, or per-client
            cap. Retry-After carries the wait.
        - code: spend_limit_exceeded
          type: quota_exceeded
          description: >-
            The request would take on-demand usage past the account's on-demand
            budget this month. Nothing was charged. details.limit carries the
            budget and what is used. Raise the budget on the Spending page or
            wait for the month to reset; then read again, or send a POST
            /v1/transcriptions request again with a new Idempotency-Key.
        - code: team_id_retired
          type: invalid_request_error
          description: >-
            team_id is retired: a monitor belongs to the account the key acts
            in. Omit team_id or send null.
        - code: terms_acceptance_required
          type: permission_error
          description: >-
            The person the key or token acts for has not accepted the updated
            Terms of Service. details.url is the page where they accept; the key
            or token works again as soon as they do.
        - code: terms_updated
          type: permission_error
          description: >-
            The Terms of Service changed since the person the key or token acts
            for last accepted them. This call was not run. Continuing to use the
            API accepts the updated terms, so the same call succeeds when sent
            again. details.url is the terms page. Sent once per person.
        - code: tracker_create_retired
          type: invalid_request_error
          description: >-
            POST /v1/trackers is retired (HTTP 410): a tracker lives inside a
            monitor. Follow an entity id or an exact name with POST
            /v1/monitors/{id}/entities, which creates the tracker in that
            monitor.
        - code: tracker_delivery_retired
          type: invalid_request_error
          description: >-
            Trackers have no delivery of their own: a tracker alerts through its
            monitor. Omit notify_email, notify_webhook, notify_slack,
            webhook_url, slack_channel_id and slack_integration_id, or send the
            value that means the monitor's delivery (true for notify_email,
            false or null for the rest), and set delivery with PATCH
            /v1/monitors/{id}. param names the field.
        - code: tracker_not_found
          type: not_found
          description: No tracker with this id on the account.
        - code: transcript_fetching
          type: server_error
          description: >-
            The caption track is being fetched, or the transcript translated,
            now (HTTP 503). Retry-After carries the wait; nothing was charged.
        - code: transcript_requires_account
          type: authentication_error
          gate: key
          description: >-
            Full transcripts need an account key; unlock.action sends a signup
            code.
        - code: transcript_unavailable
          type: not_found
          description: >-
            The video has no transcript in the requested lane or language;
            languages lists what exists.
        - code: unknown_entity
          type: invalid_request_error
          description: >-
            An explicit entity_ids value does not resolve to a searchable
            entity.
        - code: webhook_not_configured
          type: conflict_error
          description: >-
            The monitor has no webhook to rotate a secret for. Set webhook_url
            first.
    EntityRef:
      type: object
      properties:
        id:
          type: string
          description: Public entity id in the form "ent_{n}".
        name:
          type: string
          description: Canonical entity name.
        type:
          type: string
          description: >-
            Entity type. Values: person (an individual), organization (a company
            or institution; legacy entities may read company or brand), product
            (a product or service), topic (a subject or theme), channel (a media
            source such as a YouTube channel), unknown (type was never
            classified).
        slug:
          type:
            - string
            - 'null'
          description: >-
            URL slug, the site's canonical id for every type but channel. Null
            when never slugged.
        page:
          type:
            - string
            - 'null'
          description: >-
            The entity's page on arcmira.com, absolute. Link the name to it when
            you write the entity into an answer. Null for a type the site has no
            page for.
      required:
        - id
        - name
        - type
        - slug
        - page
    TranscriptQuote:
      type: object
      properties:
        quarters:
          type: integer
          description: Number of 15-minute blocks in the video, ceiling'd, minimum 1.
        rows:
          type: integer
          description: >-
            Credits the whole video uses, in rows: 300 credits per 15-minute
            block (75 rows; a row is 4 credits).
      required:
        - quarters
        - rows
    Freshness:
      type: object
      properties:
        delay_days:
          type: integer
          description: Days after publication before this plan reads a video.
        served_through:
          type: string
          description: >-
            YYYY-MM-DD (UTC). Results on this plan stop at this publish date;
            media published after it is not read.
      required:
        - delay_days
        - served_through
      description: Where results stop on a plan that reads media after a delay.
  responses:
    InvalidRequest:
      description: Invalid request
      headers:
        X-Request-Id:
          $ref: '#/components/headers/X-Request-Id'
        X-Arcmira-Version:
          $ref: '#/components/headers/X-Arcmira-Version'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    AuthenticationError:
      description: Authentication error
      headers:
        X-Request-Id:
          $ref: '#/components/headers/X-Request-Id'
        X-Arcmira-Version:
          $ref: '#/components/headers/X-Arcmira-Version'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    QuotaExceeded:
      description: Quota exceeded
      headers:
        X-Request-Id:
          $ref: '#/components/headers/X-Request-Id'
        X-Arcmira-Version:
          $ref: '#/components/headers/X-Arcmira-Version'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    PermissionError:
      description: Permission error
      headers:
        X-Request-Id:
          $ref: '#/components/headers/X-Request-Id'
        X-Arcmira-Version:
          $ref: '#/components/headers/X-Arcmira-Version'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    NotFound:
      description: Not found
      headers:
        X-Request-Id:
          $ref: '#/components/headers/X-Request-Id'
        X-Arcmira-Version:
          $ref: '#/components/headers/X-Arcmira-Version'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    RateLimited:
      description: Rate limit exceeded. Retry-After carries the wait.
      headers:
        X-Request-Id:
          $ref: '#/components/headers/X-Request-Id'
        X-Arcmira-Version:
          $ref: '#/components/headers/X-Arcmira-Version'
        RateLimit-Limit:
          $ref: '#/components/headers/RateLimit-Limit'
        RateLimit-Remaining:
          $ref: '#/components/headers/RateLimit-Remaining'
        RateLimit-Reset:
          $ref: '#/components/headers/RateLimit-Reset'
        Retry-After:
          $ref: '#/components/headers/Retry-After'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    ServerError:
      description: Server error
      headers:
        X-Request-Id:
          $ref: '#/components/headers/X-Request-Id'
        X-Arcmira-Version:
          $ref: '#/components/headers/X-Arcmira-Version'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: arc_sk_*

````

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