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

# Get how a company's people speak

> Breaks the podcast lines of a company's people down by speaker statement characteristic, together, per week or month bucket and over the window (the last year by default): how many of their scored lines are negative, neutral or positive; hedged, neutral or confident; vague, neutral or specific; and about the past, present or future, each as a share, with how many of the people said them. With examples (none by default, since for the largest companies they take about twice as long as the counts), each bucket names its strongest lines for every outer label, with who said them, the episode and a link that plays the moment. The people are the ones GET /v1/companies/{id}/people lists: those in a current role by default, past roles too with current_only=false. Identify the company by slug (e.g., 'apple'), domain, or ID. For one person, use GET /v1/people/{id}/statement-characteristics.



## OpenAPI

````yaml /openapi.json get /v1/companies/{id}/statement-characteristics
openapi: 3.1.0
info:
  contact:
    email: api@particle.pro
    name: Particle
    url: https://particle.pro
  description: >-
    Podcast API for transcripts, mentions and sponsorship data. 140,000+
    podcasts transcribed, diarized and speaker-identified within minutes of
    airing, about 28,000 episodes a day. Search transcripts by keyword or
    meaning, track brand and company mentions with alerts, pull sponsor and
    ad-read data and rankings. REST API plus an MCP server for AI agents. Also
    company, people and topic intelligence.
  summary: >-
    Podcast API: transcripts, mentions, sponsors and rankings for 140,000+
    podcasts.
  termsOfService: https://particle.pro/legal/tos-api
  title: Particle API
  version: 0.1.0
  x-guidance: >-
    Podcast, people, company and topic intelligence. Authenticate with a pp_ API
    key (X-API-Key header) or pay per request with x402: a keyless call to a
    billable endpoint returns 402 with the payment requirements in the
    PAYMENT-REQUIRED header; sign the USDC transfer and repeat the request with
    PAYMENT-SIGNATURE. Start with GET /v1/podcasts/search?q=<show name>; the
    slugs in responses are the inputs to the other endpoints. Docs:
    https://docs.particle.pro; setup playbook:
    https://api.particle.pro/agents.md; endpoint and tool map with prices:
    https://api.particle.pro/llms.txt; credential recipe:
    https://api.particle.pro/auth.md.
  x-logo:
    url: https://particle.pro/favicon.svg
servers:
  - url: https://api.particle.pro
security:
  - ApiKeyHeader: []
  - BearerAuth: []
externalDocs:
  url: https://docs.particle.pro
paths:
  /v1/companies/{id}/statement-characteristics:
    get:
      tags:
        - Companies
        - tier:standard
      summary: Get how a company's people speak
      description: >-
        Breaks the podcast lines of a company's people down by speaker statement
        characteristic, together, per week or month bucket and over the window
        (the last year by default): how many of their scored lines are negative,
        neutral or positive; hedged, neutral or confident; vague, neutral or
        specific; and about the past, present or future, each as a share, with
        how many of the people said them. With examples (none by default, since
        for the largest companies they take about twice as long as the counts),
        each bucket names its strongest lines for every outer label, with who
        said them, the episode and a link that plays the moment. The people are
        the ones GET /v1/companies/{id}/people lists: those in a current role by
        default, past roles too with current_only=false. Identify the company by
        slug (e.g., 'apple'), domain, or ID. For one person, use GET
        /v1/people/{id}/statement-characteristics.
      operationId: get-company-statement-characteristics
      parameters:
        - description: Company slug (e.g., 'apple'), domain (e.g., 'apple.com'), or ID
          in: path
          name: id
          required: true
          schema:
            description: Company slug (e.g., 'apple'), domain (e.g., 'apple.com'), or ID
            type: string
        - description: >-
            When true (default), only the people currently in a role at the
            company count. Set false to include people in past roles there.
          explode: false
          in: query
          name: current_only
          schema:
            default: true
            description: >-
              When true (default), only the people currently in a role at the
              company count. Set false to include people in past roles there.
            type: boolean
        - description: >-
            Only lines published on or after this date. Defaults to a year
            before until.
          explode: false
          in: query
          name: since
          schema:
            description: >-
              Only lines published on or after this date. Defaults to a year
              before until.
            examples:
              - '2026-01-01'
            type: string
        - description: Only lines published on or before this date. Defaults to now.
          explode: false
          in: query
          name: until
          schema:
            description: Only lines published on or before this date. Defaults to now.
            examples:
              - '2026-06-30'
            type: string
        - description: Bucket width. Weeks start on Monday (UTC).
          explode: false
          in: query
          name: interval
          schema:
            default: month
            description: Bucket width. Weeks start on Monday (UTC).
            enum:
              - week
              - month
            type: string
        - description: >-
            How many of each bucket's strongest lines to return per outer label,
            with who said them. None by default: for the largest companies they
            take about twice as long as the counts.
          explode: false
          in: query
          name: examples
          schema:
            default: 0
            description: >-
              How many of each bucket's strongest lines to return per outer
              label, with who said them. None by default: for the largest
              companies they take about twice as long as the counts.
            format: int64
            maximum: 3
            minimum: 0
            type: integer
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CompanyStatementCharacteristics'
          description: OK
        '402':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/PlatformError'
          description: >-
            Payment Required. Read error_code. payment_required is the x402
            path: either a keyless request being challenged — pay $0.03 in USDC
            per request (requirements in the PAYMENT-REQUIRED header) or send a
            pp_ API key — or a supplied payment that failed settlement (details
            in the PAYMENT-RESPONSE header; retry the same signature before
            signing a new one). See https://docs.particle.pro/x402. Any other
            code means the credential was accepted but does not cover this
            request (a plan or session gate such as premium_required or
            paid_plan_confirmation_required); its resolve says how to obtain
            access, and no payment header is sent.
        default:
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/PlatformError'
          description: Error
      x-codeSamples:
        - label: cURL
          lang: curl
          source: |-
            curl -H "X-API-Key: $PARTICLE_API_KEY" \
              "https://api.particle.pro/v1/companies/{id}/statement-characteristics?current_only=true&interval=month&examples=0"
components:
  schemas:
    CompanyStatementCharacteristics:
      additionalProperties: false
      properties:
        buckets:
          description: Contiguous zero-filled buckets in ascending order.
          items:
            $ref: '#/components/schemas/StatementCharacteristicsBucket'
          type:
            - array
            - 'null'
        characteristics:
          $ref: '#/components/schemas/StatementCharacteristicBreakdown'
          description: The window's scored lines by their label on each axis.
        characteristics_version:
          description: >-
            Opaque version of the speaker statement characteristics counted.
            Compare breakdowns only when it is equal.
          type: string
        company:
          $ref: '#/components/schemas/CompanyCompact'
          description: The company whose people's lines are counted.
        current_only:
          description: >-
            Whether only the people in a current role at the company are
            counted.
          type: boolean
        end:
          description: UTC date of the window's exclusive upper bound.
          type: string
        episodes:
          description: Distinct episodes those lines were said in.
          format: int64
          type: integer
        interval:
          description: Bucket width.
          enum:
            - week
            - month
          type: string
        low_sample:
          description: >-
            Fewer than 20 scored lines stand behind the shares. Read them as
            examples, not as a distribution.
          type: boolean
        people:
          description: Of the company's people, how many said scored lines in the window.
          format: int64
          type: integer
        scored_lines:
          description: >-
            The lines in the window that carry speaker statement
            characteristics: every share is of these. A line is counted when its
            speaker is settled as the person, or for a company as one of its
            people; lines too short to read are never scored.
          format: int64
          type: integer
        start:
          description: Start of the first bucket as a UTC date.
          type: string
      required:
        - company
        - current_only
        - people
        - interval
        - start
        - end
        - characteristics_version
        - scored_lines
        - episodes
        - characteristics
        - buckets
      type: object
    PlatformError:
      additionalProperties: false
      properties:
        detail:
          description: >-
            A human-readable explanation specific to this occurrence of the
            problem.
          examples:
            - Property foo is required but is missing.
          type: string
        error_code:
          type: string
        errors:
          description: Optional list of individual error details
          items:
            $ref: '#/components/schemas/ErrorDetail'
          type:
            - array
            - 'null'
        instance:
          description: >-
            A URI reference that identifies the specific occurrence of the
            problem.
          examples:
            - https://example.com/error-log/abc123
          format: uri
          type: string
        resolve:
          $ref: '#/components/schemas/ErrorResolve'
        status:
          description: HTTP status code
          examples:
            - 400
          format: int64
          type: integer
        title:
          description: >-
            A short, human-readable summary of the problem type. This value
            should not change between occurrences of the error.
          examples:
            - Bad Request
          type: string
        type:
          default: about:blank
          description: A URI reference to human-readable documentation for the error.
          examples:
            - https://example.com/errors/example
          format: uri
          type: string
      type: object
    StatementCharacteristicsBucket:
      additionalProperties: false
      properties:
        characteristics:
          $ref: '#/components/schemas/StatementCharacteristicBreakdown'
          description: The bucket's scored lines by their label on each axis.
        episodes:
          description: Distinct episodes they were said in.
          format: int64
          type: integer
        examples:
          description: >-
            The bucket's strongest lines for each outer label (negative and
            positive, hedged and confident, vague and specific, past and
            future): the lines reading furthest past the label's cut, strongest
            first, up to examples per label. A label no line earned has none.
          items:
            $ref: '#/components/schemas/StatementCharacteristicExample'
          type:
            - array
            - 'null'
        low_sample:
          description: >-
            Fewer than 20 scored lines stand behind the bucket's shares,
            including a bucket with none.
          type: boolean
        partial:
          description: >-
            True when the window cuts through this bucket, so it covers less
            than a full interval: the first bucket when since falls inside it,
            and the last when until does. Compare full buckets with each other.
          type: boolean
        people:
          description: >-
            For a company, how many of its people said them, zero included.
            Absent for one person's breakdown.
          format: int64
          type: integer
        scored_lines:
          description: 'The scored lines in the bucket: the bucket''s shares are of these.'
          format: int64
          type: integer
        start:
          description: Bucket start as a UTC date.
          type: string
      required:
        - start
        - scored_lines
        - episodes
        - characteristics
      type: object
    StatementCharacteristicBreakdown:
      additionalProperties: false
      properties:
        certainty:
          description: hedged, neutral, confident.
          items:
            $ref: '#/components/schemas/StatementCharacteristicLabel'
          type:
            - array
            - 'null'
        sentiment:
          description: negative, neutral, positive.
          items:
            $ref: '#/components/schemas/StatementCharacteristicLabel'
          type:
            - array
            - 'null'
        specificity:
          description: vague, neutral, specific.
          items:
            $ref: '#/components/schemas/StatementCharacteristicLabel'
          type:
            - array
            - 'null'
        temporal_orientation:
          description: past, present, future.
          items:
            $ref: '#/components/schemas/StatementCharacteristicLabel'
          type:
            - array
            - 'null'
      required:
        - sentiment
        - certainty
        - specificity
        - temporal_orientation
      type: object
    CompanyCompact:
      additionalProperties: false
      properties:
        description:
          description: Short company description, when known.
          type: string
        domain:
          description: Primary website domain (e.g. 'nvidia.com'), when known.
          type: string
        id:
          description: Company identifier (domain, slug, or encoded ID)
          type: string
        image_url:
          description: Company logo or image URL
          type: string
        name:
          description: Company name
          type: string
        slug:
          description: >-
            Stable human-readable handle (the linked knowledge-graph slug, e.g.
            'nvidia'), when known. Companies have no slug of their own; prefer
            this for display and pass it (or id) to /v1/companies.
          type: string
        ticker:
          description: Primary stock ticker symbol, when listed.
          type: string
      required:
        - id
        - name
      type: object
    ErrorDetail:
      additionalProperties: false
      properties:
        location:
          description: >-
            Where the error occurred, e.g. 'body.items[3].tags' or
            'path.thing-id'
          type: string
        message:
          description: Error message text
          type: string
        value:
          description: The value at the given location
      type: object
    ErrorResolve:
      additionalProperties: false
      properties:
        action:
          type: string
        endpoint:
          type: string
        message:
          type: string
        method:
          type: string
        url:
          type: string
      required:
        - message
      type: object
    StatementCharacteristicExample:
      additionalProperties: false
      properties:
        characteristic:
          description: The axis the line is an example for.
          enum:
            - sentiment
            - certainty
            - specificity
            - temporal_orientation
          type: string
        episode:
          $ref: '#/components/schemas/EpisodeCompactWithPodcast'
          description: The episode the line was said in, with its podcast.
        label:
          description: The label it is an example of.
          type: string
        speaker:
          $ref: '#/components/schemas/PersonCompact'
          description: For a company, which of its people said it.
        speaker_statement_characteristics:
          $ref: '#/components/schemas/SpeakerStatementCharacteristics'
          description: The line's label on every axis.
        start_offset_seconds:
          description: Where in the episode the line starts, in seconds.
          format: double
          type: number
        text:
          description: What was said.
          type: string
        url:
          description: The episode's Radar page, playing from the line.
          type: string
      required:
        - characteristic
        - label
        - text
        - start_offset_seconds
        - episode
      type: object
    StatementCharacteristicLabel:
      additionalProperties: false
      properties:
        label:
          description: The label on the axis.
          type: string
        lines:
          description: Scored lines with the label.
          format: int64
          type: integer
        share:
          description: lines over the set's scored_lines (0-1).
          format: double
          type: number
      required:
        - label
        - lines
        - share
      type: object
    EpisodeCompactWithPodcast:
      additionalProperties: false
      properties:
        id:
          description: Episode ID
          type: string
        podcast:
          $ref: '#/components/schemas/PodcastCompact'
          description: Parent podcast
        published_at:
          description: Publication date
          format: date-time
          type: string
        slug:
          description: Human-readable slug identifier
          type: string
        title:
          description: Episode title
          type: string
        web_url:
          description: >-
            The episode's page on Radar, where it plays beside its transcript:
            https://radar.particle.pro/podcasts/{podcast}/episodes/{episode},
            each segment the slug or, when there is none, the raw UUID. Append
            ?t={seconds} to start at a moment; the hit's own url field already
            does. Omitted for back-catalogue episodes we have not ingested,
            which have no page, and in episode stream, feed and archive payloads
            stored before this field shipped (they are replayed as stored):
            build it from the slugs, or fetch the episode.
          type: string
      required:
        - id
        - title
      type: object
    PersonCompact:
      additionalProperties: false
      properties:
        description:
          description: Short description (e.g. current role), when known.
          type: string
        id:
          description: Encoded Person identifier
          type: string
        image_url:
          description: Canonical headshot URL when one is known for the Person
          type: string
        name:
          description: Display name
          type: string
        slug:
          description: >-
            Stable human-readable handle (e.g. 'satya-nadella'). Recommended
            canonical identifier on every Particle Pro person surface.
          type: string
      required:
        - id
        - name
      type: object
    SpeakerStatementCharacteristics:
      additionalProperties: false
      properties:
        certainty:
          description: >-
            How sure the speaker sounds: hedged ("maybe", "I think", "it
            could"), neutral, or confident (flat assertion).
          enum:
            - hedged
            - neutral
            - confident
          type: string
        sentiment:
          description: 'The statement''s tone: negative, neutral or positive.'
          enum:
            - negative
            - neutral
            - positive
          type: string
        specificity:
          description: >-
            Whether the line commits to something concrete: specific (names,
            numbers, dates, mechanisms), neutral, or vague (generalities).
          enum:
            - vague
            - neutral
            - specific
          type: string
        temporal_orientation:
          description: >-
            Where the line points in time: past (looking back), present (how
            things are), or future (predictions, plans, expectations).
          enum:
            - past
            - present
            - future
          type: string
      required:
        - sentiment
        - certainty
        - specificity
        - temporal_orientation
      type: object
    PodcastCompact:
      additionalProperties: false
      properties:
        best_rank:
          $ref: '#/components/schemas/PodcastRankingHandle'
          description: >-
            The single best (lowest-numbered) chart position this podcast
            currently holds across all charts. Omitted when the podcast holds no
            current chart appearances, and on endpoints that do not attach it.
            Reading a full chart (with country/category/source filters and
            history) remains premium; a single show's own placement is available
            on every plan.
        id:
          description: Podcast ID
          type: string
        image_url:
          description: Cover image URL
          type: string
        popularity:
          description: >-
            Global popularity percentile in (0,1], a cume_dist ranking over all
            currently-charting podcasts (Apple Podcasts charts). Higher is more
            popular. Omitted when the podcast is not currently charting, on
            endpoints that build this resource from a projection rather than the
            full podcast row, and in episode stream, feed and archive payloads,
            which are stored and replayed: read it live from the podcast
            endpoints.
          format: double
          type: number
        publisher:
          $ref: '#/components/schemas/PodcastPublisherCompact'
          description: >-
            Publisher (network) attributed to this podcast. Present only when
            the embedding endpoint preloads publisher attribution and the
            podcast's publisher is known.
        slug:
          description: Human-readable slug identifier
          type: string
        title:
          description: Podcast title
          type: string
      required:
        - id
        - title
      type: object
    PodcastRankingHandle:
      additionalProperties: false
      properties:
        captured_at:
          format: date-time
          type: string
        category_slug:
          type: string
        chart_type:
          enum:
            - top_podcasts
          type: string
        country:
          type: string
        rank:
          format: int64
          type: integer
        source:
          enum:
            - apple
            - spotify
          type: string
      required:
        - source
        - chart_type
        - rank
        - captured_at
      type: object
    PodcastPublisherCompact:
      additionalProperties: false
      properties:
        id:
          description: Publisher ID
          type: string
        name:
          description: Publisher name
          type: string
        slug:
          description: >-
            Human-readable slug identifier (e.g., 'goalhanger',
            'iheartpodcasts'). When present, accepted in place of the ID
            anywhere a publisher reference is taken in the API. Occasionally
            absent on publishers whose name doesn't slugify (e.g., scripts not
            representable in ASCII URL slugs).
          type: string
      required:
        - id
        - name
      type: object
  securitySchemes:
    ApiKeyHeader:
      description: Pass your API key in the X-API-Key header (recommended).
      in: header
      name: X-API-Key
      type: apiKey
    BearerAuth:
      description: Pass your API key as a Bearer token in the Authorization header.
      scheme: bearer
      type: http

````

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