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

# List AI answers

> The project's AI answers, newest first: what each platform said to each tracked prompt, which tracked brands it mentioned, and the sources it cited. Filter by prompt, platform, time, own-domain citation or competitor. Send `X-Jam-Project` to pick a project.



## OpenAPI

````yaml https://api.spreadjam.com/openapi.json get /v1/answers
openapi: 3.0.0
info:
  title: SpreadJam API
  version: 1.0.0
servers:
  - url: https://api.spreadjam.com
security: []
tags:
  - name: Meta
    description: Identity and metadata about the authenticated key.
  - name: Keywords
    description: Keyword and topic visibility rankings.
  - name: API keys
    description: Manage the workspace's API keys.
  - name: Analytics
    description: AI-visibility analytics for the workspace.
  - name: Brand
    description: The workspace's brand profile and competitors.
  - name: Prompts
    description: Tracked GEO prompts and their cap state.
  - name: Visibility runs
    description: Run the AI-visibility scan now.
  - name: Credits
    description: The workspace's credit balance and recent charges.
  - name: Actions
    description: Recommended visibility actions and reporting them done.
  - name: Agent connect
    description: >-
      Sign a human up from an agent with one link, then receive an API key once
      they approve. No API key needed.
  - name: Pricing
    description: >-
      The plans an agent can choose for a human and their monthly prices. No API
      key needed.
  - name: Site changes
    description: >-
      Code changes Jam prepares for page edits and technical fixes: preview,
      open the pull request, discard.
  - name: Research
    description: >-
      The research that writes the Plan: its state, its latest report, and
      running it again.
  - name: Answers
    description: >-
      What each AI platform answered to the tracked prompts, with the sources it
      cited.
  - name: Projects
    description: The workspace's projects and the status of each one.
  - name: Billing
    description: The workspace's plan and the links where a person manages billing.
  - name: Webhooks
    description: >-
      HTTP destinations the workspace notifications are POSTed to, signed with a
      per-webhook secret.
  - name: Notifications
    description: >-
      Which notifications reach which channels (including webhooks), per event
      category.
  - name: Opportunities
    description: >-
      Article opportunities: the article pipeline behind the Plan's `new_page`
      actions, and requests to create content from them.
  - name: Planning
    description: Run automatic content planning now.
  - name: Content
    description: Content items, their drafts, and requests to rewrite them.
  - name: Revisions
    description: A content item's revisions.
  - name: Publishing
    description: Publishing content to destinations, now or on a schedule.
  - name: Deliveries
    description: A content item's delivery history.
  - name: Publications
    description: Where a content item is live.
  - name: Destinations
    description: Where content is published, its publishing policy, and its connection.
paths:
  /v1/answers:
    get:
      tags:
        - Answers
      summary: List AI answers
      description: >-
        The project's AI answers, newest first: what each platform said to each
        tracked prompt, which tracked brands it mentioned, and the sources it
        cited. Filter by prompt, platform, time, own-domain citation or
        competitor. Send `X-Jam-Project` to pick a project.
      operationId: list_answers
      parameters:
        - schema:
            type: string
            format: uuid
            description: Only answers to this prompt.
          required: false
          description: Only answers to this prompt.
          name: promptId
          in: query
        - schema:
            anyOf:
              - type: string
                enum:
                  - chatgpt
                  - perplexity
                  - gemini
                  - claude
                  - google_ai_overview
                  - google_ai_mode
                  - copilot
              - type: array
                items:
                  type: string
              - type: string
            description: Only answers from these platforms.
          required: false
          description: Only answers from these platforms.
          name: platform
          in: query
        - schema:
            type: string
            format: date-time
            description: Only answers observed at or after this time (ISO 8601).
            example: '2026-11-01T00:00:00Z'
          required: false
          description: Only answers observed at or after this time (ISO 8601).
          name: since
          in: query
        - schema:
            type: string
            format: date-time
            description: Only answers observed before this time (ISO 8601).
            example: '2026-11-01T00:00:00Z'
          required: false
          description: Only answers observed before this time (ISO 8601).
          name: until
          in: query
        - schema:
            type: string
            enum:
              - 'true'
              - 'false'
            description: >-
              true: only answers that cited the project's own domain as a
              source; false: only answers that did not.
          required: false
          description: >-
            true: only answers that cited the project's own domain as a source;
            false: only answers that did not.
          name: cited
          in: query
        - schema:
            type: string
            minLength: 1
            maxLength: 200
            description: >-
              Only answers that mentioned this tracked competitor (its name,
              case-insensitive).
          required: false
          description: >-
            Only answers that mentioned this tracked competitor (its name,
            case-insensitive).
          name: competitor
          in: query
        - schema:
            type: string
            enum:
              - 'true'
              - 'false'
            description: >-
              true returns each answer whole (up to 50,000 characters). By
              default the text is cut to 1,000 characters and `answer.truncated`
              says so.
          required: false
          description: >-
            true returns each answer whole (up to 50,000 characters). By default
            the text is cut to 1,000 characters and `answer.truncated` says so.
          name: full
          in: query
        - schema:
            type: integer
            minimum: 1
            maximum: 100
            default: 20
            description: Maximum number of items to return (1–100).
            example: 20
          required: false
          description: Maximum number of items to return (1–100).
          name: limit
          in: query
        - schema:
            type: string
            maxLength: 500
            description: The `nextCursor` of the previous page.
          required: false
          description: The `nextCursor` of the previous page.
          name: cursor
          in: query
      responses:
        '200':
          description: One page of answers.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AnswerPage'
        '400':
          description: >-
            Invalid request: a parameter or body field is wrong. `details` lists
            each problem with what is allowed.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiError'
        '401':
          description: >-
            Missing, malformed or revoked API key (`Authorization: Bearer
            sk_…`).
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiError'
        '404':
          description: >-
            The resource, or the project the key or `X-Jam-Project` selects,
            does not exist in this workspace.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiError'
        '429':
          description: >-
            `rate_limited` (per-key rate) or `too_many_concurrent` (expensive
            reads in flight); retry after `Retry-After` seconds.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiError'
      security:
        - bearerAuth: []
components:
  schemas:
    AnswerPage:
      type: object
      properties:
        answers:
          type: array
          items:
            $ref: '#/components/schemas/Answer'
        pageInfo:
          $ref: '#/components/schemas/AnswerPageInfo'
        nextCursor:
          type: string
          nullable: true
          description: >-
            Legacy: the same as `pageInfo.nextCursor`, null on the last page.
            Prefer `pageInfo`.
      required:
        - answers
        - pageInfo
        - nextCursor
    ApiError:
      type: object
      required:
        - error
        - code
      properties:
        error:
          type: string
          description: What went wrong and how to fix the request.
        code:
          type: string
          description: >-
            Stable machine-readable code, e.g. invalid_request, unauthorized,
            rate_limited.
        requestId:
          type: string
          description: Echoes the X-Request-Id header; quote it to support.
        docs:
          type: string
          description: Where the error is explained.
        resolveUrl:
          type: string
          description: '402/403 plan errors: the dashboard page that resolves it.'
        details:
          type: array
          description: >-
            One entry per problem: path, message, and when known allowed,
            minimum, maximum, expected, received.
          items:
            type: object
            additionalProperties: true
    Answer:
      type: object
      properties:
        id:
          type: string
          description: The answer id.
        runId:
          type: string
          description: The visibility run (scan) that collected it.
        promptId:
          type: string
        promptText:
          type: string
          nullable: true
          description: The prompt as it was asked.
        promptStatus:
          type: string
          nullable: true
          description: >-
            The prompt's status now: active, paused or archived. Answers of
            every prompt are listed; the analytics overview counts tracked
            (non-archived) prompts only, so skip `archived` to reconcile with
            its `window.answerCount`.
        platform:
          type: string
        observedAt:
          type: string
          format: date-time
        answer:
          $ref: '#/components/schemas/AnswerText'
        brandMentioned:
          type: boolean
          nullable: true
        brandRecommended:
          type: boolean
          nullable: true
        ownDomainCited:
          type: boolean
          nullable: true
          description: Whether the project's own domain was cited as a source.
        position:
          type: integer
          nullable: true
          description: >-
            The brand's position in the answer's ranked list, when the answer is
            a list.
        sentiment:
          type: string
          nullable: true
          description: >-
            How the answer framed the project's own brand, when it was
            mentioned.
        brandsMentioned:
          type: array
          items:
            $ref: '#/components/schemas/AnswerBrand'
          description: >-
            The tracked brands (the project's own brand and its roster
            competitors) the answer mentioned, in the order it first mentioned
            them. Matched on each brand's name, its spelling variants
            (Otterly.AI as Otterly AI), aliases and domain; where two brands'
            names overlap the longer one is credited (Ahrefs Brand Radar, not
            also Ahrefs). Brands outside the roster are not detected by design,
            so an answer naming only untracked brands has an empty list; read
            the answer text for those. `listRank` is the number of the first
            ordered-list item the brand is the subject of; answers assessed
            before 2026-11-04 may credit both overlapping brands and give two
            brands one item's rank.
        citedUrls:
          type: array
          items:
            type: string
          description: >-
            The sources the platform cited, in its order, at most 30. Tracking
            and credential query parameters are removed; the rest of each URL is
            kept.
        citedUrlCount:
          type: integer
      required:
        - id
        - runId
        - promptId
        - promptText
        - promptStatus
        - platform
        - observedAt
        - answer
        - brandMentioned
        - brandRecommended
        - ownDomainCited
        - position
        - sentiment
        - brandsMentioned
        - citedUrls
        - citedUrlCount
    AnswerPageInfo:
      type: object
      properties:
        limit:
          type: integer
          description: The page size used.
          example: 100
        hasNextPage:
          type: boolean
        nextCursor:
          type: string
          description: >-
            Pass as `cursor`, with the same filters, for the next page. Absent
            on the last page.
        totalCount:
          type: integer
          description: Matching items across every page.
      required:
        - limit
        - hasNextPage
      description: >-
        The shared list page shape. `totalCount` is absent when filtering by
        `competitor` (counting would read every answer).
    AnswerText:
      type: object
      properties:
        text:
          type: string
          nullable: true
        source:
          type: string
          nullable: true
          enum:
            - full
            - excerpt
            - null
          description: >-
            `full`: the stored answer. `excerpt`: only a 500-character excerpt
            is stored for this answer (older answers, or answers over the
            storage limit). null: no text is stored.
        truncated:
          type: boolean
          description: >-
            True when `text` was cut to the requested length; pass `full=true`
            for all of it.
        length:
          type: integer
          nullable: true
          description: The stored text's length in characters.
      required:
        - text
        - source
        - truncated
        - length
    AnswerBrand:
      type: object
      properties:
        name:
          type: string
        owned:
          type: boolean
          description: True for the project's own brand.
        recommended:
          type: boolean
          nullable: true
        listRank:
          type: integer
          nullable: true
        sentiment:
          type: string
          nullable: true
      required:
        - name
        - owned
        - recommended
        - listRank
        - sentiment
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: >-
        A workspace API key issued in Settings → Developer, sent as `Bearer
        sk_…`.

````

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