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

# Get Podcast Transcripts

> [OpenAPI JSON Spec](/docs/output/v1_other_podcast_transcripts_get.json)
Retrieve stored official podcast transcripts, newest first.
Filter by `podcast_show_id`, `podcast_show_name` or `speaker` — at least
one is required unless both `updated_after` and `updated_before` are supplied.
Update polling selects episode rows within [updated_after, updated_before),
ordered by updated_at ASC, id ASC. Times are Unix seconds; all shows may be
queried with a bounded window. Existing filters intersect that window.
Updates include episode metadata, transcript and attribution changes, not lease/retry bookkeeping.
Show/person metadata has a separate lifecycle. Each item returns the stable
Arrays record `id`, the publisher `episode_id`, and RFC3339 `updated_at`.
For update polling, pass pagination.cursor unchanged with the same window,
and filters. Limit and include_raw may change on retry without restarting.
An omitted cursor with has_more=false means the window is
drained. Start each new window without the old cursor. Offset is not allowed.
This is current-state polling, not a snapshot or deletion/history feed:
overlap windows and reconcile delayed writes; intermediate versions may coalesce.
`podcast_show_id` comes from `/other/podcast/shows`. `podcast_show_name`
takes the name instead and resolves it server-side. The response reports
the show name as `podcast_show_name`.
`speaker` matches a person in the returned `resolved_speakers`, including
host, guest and clip attributions. Registry names and aliases match linked
identities; stored resolved names also match directly. Publisher-only labels
and attributions excluded from the response do not match. Clips are not guests.
`resolved_speakers[*].person_id`, `hosts` and `guests` contain only terminal
person-registry UUIDs, matching `/persons`. Historical IDs and merged UUIDs
are resolved on read. Unlinked speakers keep their name but omit `person_id`;
unresolved references are omitted from `hosts` and `guests`.



## OpenAPI

````yaml /api-reference/openapi.json get /v1/other/podcast/transcripts
openapi: 3.0.0
info:
  contact: {}
  description: >-
    Welcome to Arrays!


    Arrays is a unified financial data layer for both financial institutions and
    retail users, delivering comprehensive market data across crypto and equity
    markets. Our datasets cover fundamentals, ETFs, options, crypto, and more.


    Visit [arrays.org](https://arrays.org) to request an API key and start your
    free trial. You can explore our full API offerings in the documentation
    below.


    For any questions regarding APIs or pricing, please contact
    support@arrays.org.
  title: Arrays API
  version: '1.0'
servers:
  - url: https://data-tools.prd.arrays.org/api
security: []
paths:
  /v1/other/podcast/transcripts:
    get:
      tags:
        - Other
      summary: Get Podcast Transcripts
      description: >-
        [OpenAPI JSON Spec](/docs/output/v1_other_podcast_transcripts_get.json)

        Retrieve stored official podcast transcripts, newest first.

        Filter by `podcast_show_id`, `podcast_show_name` or `speaker` — at least

        one is required unless both `updated_after` and `updated_before` are
        supplied.

        Update polling selects episode rows within [updated_after,
        updated_before),

        ordered by updated_at ASC, id ASC. Times are Unix seconds; all shows may
        be

        queried with a bounded window. Existing filters intersect that window.

        Updates include episode metadata, transcript and attribution changes,
        not lease/retry bookkeeping.

        Show/person metadata has a separate lifecycle. Each item returns the
        stable

        Arrays record `id`, the publisher `episode_id`, and RFC3339
        `updated_at`.

        For update polling, pass pagination.cursor unchanged with the same
        window,

        and filters. Limit and include_raw may change on retry without
        restarting.

        An omitted cursor with has_more=false means the window is

        drained. Start each new window without the old cursor. Offset is not
        allowed.

        This is current-state polling, not a snapshot or deletion/history feed:

        overlap windows and reconcile delayed writes; intermediate versions may
        coalesce.

        `podcast_show_id` comes from `/other/podcast/shows`. `podcast_show_name`

        takes the name instead and resolves it server-side. The response reports

        the show name as `podcast_show_name`.

        `speaker` matches a person in the returned `resolved_speakers`,
        including

        host, guest and clip attributions. Registry names and aliases match
        linked

        identities; stored resolved names also match directly. Publisher-only
        labels

        and attributions excluded from the response do not match. Clips are not
        guests.

        `resolved_speakers[*].person_id`, `hosts` and `guests` contain only
        terminal

        person-registry UUIDs, matching `/persons`. Historical IDs and merged
        UUIDs

        are resolved on read. Unlinked speakers keep their name but omit
        `person_id`;

        unresolved references are omitted from `hosts` and `guests`.
      parameters:
        - description: Show identifier from /other/podcast/shows
          in: query
          name: podcast_show_id
          schema:
            type: integer
        - description: >-
            Show name, resolved to podcast_show_id. A name matching several
            shows or none is an error naming them, not an empty page; so is one
            that disagrees with podcast_show_id
          in: query
          name: podcast_show_name
          schema:
            type: string
        - description: >-
            Exact resolved speaker name or registry alias (case-insensitive),
            including clip
          in: query
          name: speaker
          schema:
            type: string
        - description: Publication day YYYY-MM-DD; same value the response reports as date
          in: query
          name: date
          schema:
            type: string
        - description: Also attach the original file (default false)
          in: query
          name: include_raw
          schema:
            type: boolean
        - description: Max rows, 1-50 (default 10)
          in: query
          name: limit
          schema:
            type: integer
        - description: Rows to skip (default 0)
          in: query
          name: offset
          schema:
            type: integer
        - description: >-
            Inclusive episode update bound (Unix seconds); requires
            updated_before
          in: query
          name: updated_after
          schema:
            type: integer
            format: int64
        - description: >-
            Exclusive episode update bound (Unix seconds); must exceed
            updated_after
          in: query
          name: updated_before
          schema:
            type: integer
            format: int64
        - description: Opaque update-window continuation; incompatible with offset
          in: query
          name: cursor
          schema:
            type: string
      responses:
        '200':
          description: Transcripts
          content:
            application/json:
              schema:
                allOf:
                  - $ref: '#/components/schemas/model.APIResponse'
                  - properties:
                      data:
                        items:
                          $ref: '#/components/schemas/model.PodcastTranscript'
                        type: array
                    type: object
        '400':
          description: Invalid parameters
          content:
            application/json:
              schema:
                allOf:
                  - $ref: '#/components/schemas/model.APIResponse'
                  - properties:
                      error:
                        $ref: '#/components/schemas/model.APIError'
                    type: object
        '500':
          description: Internal server error
          content:
            application/json:
              schema:
                allOf:
                  - $ref: '#/components/schemas/model.APIResponse'
                  - properties:
                      error:
                        $ref: '#/components/schemas/model.APIError'
                    type: object
      security:
        - ApiKeyAuth: []
components:
  schemas:
    model.APIResponse:
      properties:
        data: {}
        error:
          $ref: '#/components/schemas/model.APIError'
        metadata: {}
        pagination: {}
        request_id:
          type: string
        success:
          type: boolean
      type: object
    model.PodcastTranscript:
      properties:
        created_at:
          type: string
        date:
          type: string
        episode_id:
          description: >-
            EpisodeID identifies the episode, not the show. The publisher's RSS
            guid,

            or a key derived from the feed entry when none was given.
          type: string
        guests:
          items:
            type: string
          type: array
        has_timestamps:
          description: HasTimestamps says whether the turns carry "@ seconds".
          type: boolean
        hosts:
          description: |-
            Hosts and Guests restate ResolvedSpeakers by role, as person ids for
            joining against /persons. Only terminal registry UUIDs are returned;
            unresolved references are omitted. Each id appears once.
          items:
            type: string
          type: array
        id:
          description: ID identifies the Arrays record, unlike the publisher's EpisodeID.
          type: integer
        podcast_show_id:
          description: |-
            PodcastShowID identifies the show, not the episode. Pass it back as
            podcast_show_id to page or filter without resolving the name again.
          type: integer
        podcast_show_name:
          description: |-
            PodcastShowName is the show's name, as the podcast_show_name filter
            matches it.
          type: string
        raw_transcript:
          description: >-
            RawTranscript is the publisher's file as served, shaped by
            TranscriptType.

            Only when include_raw=true.
          type: string
        resolved_speakers:
          additionalProperties:
            $ref: '#/components/schemas/model.ResolvedSpeaker'
          description: >-
            ResolvedSpeakers is who each numbered voice turned out to be. Keys
            are

            speaker numbers; join on PersonID, not the key. Entries below 0.4

            confidence are dropped server-side.
          type: object
        speaker_recognition_status:
          type: string
        speaker_recognition_version:
          type: string
        speaker_review_reason:
          type: string
        speaker_review_required:
          type: boolean
        transcript:
          description: |-
            Transcript is the normalized body: one turn per line, e.g.
            "[spk 0 @ 12.5] ...".
          type: string
        transcript_source:
          description: |-
            TranscriptSource is official or asr. Not the file format; that is
            TranscriptType.
          type: string
        transcript_type:
          description: >-
            TranscriptType is the source file's format: vtt, srt, html, plain,
            json, or

            deepgram-json.
          type: string
        transcript_url:
          description: >-
            TranscriptURL is where the document was fetched from. Absent on
            episodes we

            transcribed ourselves.
          type: string
        updated_at:
          description: >-
            UpdatedAt tracks episode metadata, transcript and attribution
            changes.

            It is not a content version. Show/person metadata has its own
            lifecycle.
          type: string
      type: object
    model.APIError:
      properties:
        code:
          example: RESOURCE_NOT_FOUND
          type: string
        details:
          items:
            $ref: '#/components/schemas/model.APIErrorDetail'
          type: array
        docs_url:
          type: string
        examples:
          items:
            type: string
          type: array
        hint:
          type: string
        message:
          example: The requested resource was not found.
          type: string
        suggestions:
          items:
            type: string
          type: array
      type: object
    model.ResolvedSpeaker:
      properties:
        attribution_source:
          description: >-
            AttributionSource is how the name was reached: intro_selfstated,

            intro_introduced, signoff, title, websearch, or adjudicated. Per
            speaker,

            since one episode mixes them.
          type: string
        confidence:
          description: >-
            Confidence runs 0..1. Below 0.4 is already dropped; at or above 0.7
            use it,

            between the two show it as uncertain. A few rows predate the field
            and

            report 0.
          type: number
        name:
          description: >-
            Name is the spelling found on a source, not the one in the
            transcript: a

            transcriber hears Lisa Abramowicz as "Lisa Bromwitz".
          type: string
        person_id:
          description: >-
            PersonID is the terminal person-registry UUID, absent when nothing
            could

            be linked. Legacy identifiers and merged UUIDs are resolved before
            return.
          type: string
        presence:
          description: >-
            Presence restates Role for callers written against the field that

            preceded it: archival where Role is clip, evidenced otherwise.
            Derived,

            never stored, so it cannot disagree with Role. Empty when Role is,
            since

            evidenced would claim the slot took part.
          enum:
            - evidenced
            - archival
          example: archival
          type: string
        role:
          description: Role is host, guest, or clip.
          enum:
            - host
            - guest
            - clip
          example: clip
          type: string
      type: object
    model.APIErrorDetail:
      properties:
        field:
          type: string
        got:
          type: string
        reason:
          type: string
      type: object
  securitySchemes:
    ApiKeyAuth:
      description: 'API Key authentication. Example: "your-api-key-here"'
      in: header
      name: X-API-Key
      type: apiKey

````

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