> ## 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 channel commentary for a person

> [OpenAPI JSON Spec](/docs/output/v1_persons_person-id_channel-commentary_get.json)
What a person said in public, collected by polling news sites, video channels, podcast libraries and the person's own accounts. The same fields as /v1/persons/{person_id}/commentary, plus served, rejected_as, channel, text_origin and original_at. This route returns the rows that are served now, newest published first. A row stops being served, for example when its page turns out to report a remark that another page holds in full, and it is then no longer returned here. The update window of /v1/persons/channel-commentary reports that change, so a consumer that holds the row can drop it (see docs/api/person-channel-commentary-updates.md). No row for a person and day does not mean they said nothing: a remark is stored only when its page can be read and the sentence checked against it.



## OpenAPI

````yaml /api-reference/openapi.json get /v1/persons/{person_id}/channel-commentary
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/persons/{person_id}/channel-commentary:
    get:
      tags:
        - Persons
      summary: Get channel commentary for a person
      description: >-
        [OpenAPI JSON
        Spec](/docs/output/v1_persons_person-id_channel-commentary_get.json)

        What a person said in public, collected by polling news sites, video
        channels, podcast libraries and the person's own accounts. The same
        fields as /v1/persons/{person_id}/commentary, plus served, rejected_as,
        channel, text_origin and original_at. This route returns the rows that
        are served now, newest published first. A row stops being served, for
        example when its page turns out to report a remark that another page
        holds in full, and it is then no longer returned here. The update window
        of /v1/persons/channel-commentary reports that change, so a consumer
        that holds the row can drop it (see
        docs/api/person-channel-commentary-updates.md). No row for a person and
        day does not mean they said nothing: a remark is stored only when its
        page can be read and the sentence checked against it.
      parameters:
        - description: >-
            Person registry id (uuid), as /api/v1/persons returns. Resolve a
            name with /api/v1/persons?name=...
          in: path
          name: person_id
          required: true
          schema:
            type: string
        - description: Range start, unix seconds
          in: query
          name: start_time
          required: true
          schema:
            type: integer
        - description: Range end, unix seconds
          in: query
          name: end_time
          required: true
          schema:
            type: integer
        - description: Page size, 1 to 500
          in: query
          name: limit
          schema:
            type: integer
        - description: Rows to skip
          in: query
          name: offset
          schema:
            type: integer
        - description: Return each row's full body; caps limit at 50
          in: query
          name: include_body
          schema:
            type: boolean
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                allOf:
                  - $ref: '#/components/schemas/model.APIResponse'
                  - properties:
                      data:
                        items:
                          $ref: '#/components/schemas/model.PersonChannelCommentary'
                        type: array
                    type: object
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/model.APIResponse'
components:
  schemas:
    model.APIResponse:
      properties:
        data: {}
        error:
          $ref: '#/components/schemas/model.APIError'
        metadata: {}
        pagination: {}
        request_id:
          type: string
        success:
          type: boolean
      type: object
    model.PersonChannelCommentary:
      properties:
        author:
          description: >-
            Author is what the page said about who wrote it, empty when it said
            nothing.
          type: string
        body:
          description: >-
            Body is the page's text as read, kept as read. It is returned only
            when the request

            sets include_body=true, and limit is then at most 50 because rows
            that carry a page of

            text are large. Never returned on a tombstone. It can hold words
            that are not the

            person's, so Quote stays the sentence attributed to them.
          type: string
        body_scope:
          description: >-
            BodyScope says how complete the page text is: "full", "preview" when
            a paywall cut

            it, "truncated" when the platform or the page gave only part,
            "unknown" when the page

            does not say, "unavailable" when a re-read found the page gone. It
            is set whether or

            not Body is returned. Empty on a tombstone.
          type: string
        channel:
          description: >-
            Channel is the channel the page came from, such as "gnews",
            "cnbc_news" or "x_own".

            Empty on a tombstone.
          type: string
        cluster_id:
          description: >-
            ClusterID is the row's own url on a served row, and the url of the
            original on a

            duplicate row, which is how a report is found under its original.
            Empty on a

            tombstone.
          type: string
        context:
          description: >-
            Context holds the posts this one answers, quotes or forwards, each
            with its own

            author. It is other people's words and never part of Quote or Body.
            An empty array,

            never null, when there are none, and on a tombstone.
          items:
            $ref: '#/components/schemas/model.PersonCommentaryContext'
          type: array
        fetched_at:
          description: >-
            FetchedAt is when the page was retrieved, unix seconds. 0 on a
            tombstone.
          type: integer
        id:
          description: >-
            ID is the row's fixed identity, derived from person_id, said_on and
            url, so it stays

            the same when the row is rewritten. It is the same derivation as the
            id of

            /api/v1/persons/commentary, and an update window is ordered by
            updated_at, then id.
          type: string
        lang:
          type: string
        original_at:
          description: >-
            OriginalAt is set only on a duplicate row: the "[mm:ss]" position of
            the quote in the

            original's captions or transcript. Absent when the position is
            unknown.
          type: string
        own_channel_verified:
          description: >-
            OwnChannelVerified is set only for "own": "author" when the page
            named this person;

            "channel" when the page is theirs to publish but is not shown to be
            written by them;

            "unverified" when neither could answer.
          type: string
        page_title:
          description: >-
            PageTitle and Venue describe where it was said. Venue is the
            program, publication or

            platform.
          type: string
        person_id:
          description: >-
            PersonID is the person registry's id, the same one /api/v1/persons
            answers with.

            Resolve a name to one with /api/v1/persons?name=... first.
          type: string
        published_at:
          description: >-
            PublishedAt is unix seconds, from the page itself unless
            PublishedAtSource says

            otherwise. 0 on a tombstone.
          type: integer
        published_at_source:
          description: >-
            PublishedAtSource is "page" when the page stated the time and
            "fetch" when it stated

            none and the retrieval time stands in. Empty on a tombstone.
          type: string
        quote:
          description: >-
            Quote is one sentence, character for character as the page prints
            it. Empty on a

            tombstone.
          type: string
        rejected_as:
          description: >-
            RejectedAs is absent on a served row. It is "duplicate" on a row
            that reports another

            page's remark. On a tombstone it is the code of why the row is not
            served: the

            code of a refusal, or "firsthand_report" for a report still waiting
            for its original

            to be found.
          type: string
        reply_status:
          description: >-
            ReplyStatus is "not_reply" when the row does not answer another
            post,

            "context_complete" when it does and every post it answers is in
            Context,

            "context_incomplete" when one of those could not be read (its status
            says why), and

            "unknown" for a page of a kind whose replies are not read. Empty on
            a tombstone.
          type: string
        said_at:
          description: >-
            SaidAt is when the remark was said, unix seconds. Absent when
            SaidAtSource is

            "unknown", and on a tombstone.
          type: integer
        said_at_source:
          description: >-
            SaidAtSource is where SaidAt came from: "post" for the post's own
            timestamp,

            "page_stated" for a date the page prints, which names a day and not
            a time, and

            "unknown" when neither could be established. Empty on a tombstone.
          type: string
        said_on:
          description: >-
            SaidOn is the UTC day this row is filed under, the day the remark
            was said; see

            said_at for when it was said.
          type: string
        served:
          description: >-
            Served is true when the row is output, a row to keep. A consumer
            that holds a row whose

            served is false and whose rejected_as is not "duplicate" should
            delete it.
          type: boolean
        source_kind:
          description: >-
            SourceKind is "own", "transcript", "third_party_transcript" or
            "interview".

            "transcript" is the venue's own transcript; "third_party_transcript"
            is one another

            site published with the person's name on it. Empty on a tombstone.
          type: string
        speaker_label:
          description: >-
            SpeakerLabel is the transcript's own label on the passage the quote
            is in, such as

            "CRAMER". Empty when the page names no speaker.
          type: string
        statement_level:
          description: >-
            StatementLevel is "original" when the page is where they said or
            published it,

            "firsthand_report" when a reporter heard them directly and the
            report is the fullest

            text of it, "unknown" when it has not been judged. Empty on a
            tombstone.
          type: string
        text_origin:
          description: >-
            TextOrigin is what Body was made from: "page" for the page's own
            text,

            "captions_manual" for captions a person wrote, "captions_asr" for
            speech recognition.

            Machine transcripts can mishear words. Empty on a tombstone.
          type: string
        updated_at:
          description: >-
            UpdatedAt is when this row last changed, as RFC3339 UTC with
            fractional seconds. A

            change of state is a change: updated_after and updated_before on

            /api/v1/persons/channel-commentary filter on it.
          type: string
        url:
          description: >-
            URL is the address the text was read from, after the fetcher
            resolved it.
          type: string
        venue:
          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.PersonCommentaryContext:
      properties:
        author_handle:
          type: string
        author_id:
          description: >-
            AuthorID, AuthorHandle and AuthorName are what the platform gave for
            the

            post's author, each left out when it gave none.
          type: string
        author_name:
          type: string
        depth:
          description: >-
            Depth is 1 for the post the row answers directly, then 2 and 3 for
            the

            posts above it.
          type: integer
        published_at:
          description: PublishedAt is unix seconds, 0 when the platform gave no time.
          type: integer
        relation:
          description: >-
            Relation is "reply_to", "quoted", "forwarded", "reshared" or
            "thread_root".
          type: string
        status:
          description: >-
            Status is "ok", "deleted" or "unavailable". Anything but "ok" means
            the

            post could not be read in full, and the row's ReplyStatus says so.
          type: string
        text:
          description: Text is the post's text as the platform gave it.
          type: string
        url:
          description: URL is the address of this post.
          type: string
      type: object
    model.APIErrorDetail:
      properties:
        field:
          type: string
        got:
          type: string
        reason:
          type: string
      type: object

````

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