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

# List fanout queries

> The searches the AI platforms ran while answering your prompts, most-run first. Where a citation tells you which page an engine trusted, a fanout query tells you what it decided it needed to know, so a query you rank for nowhere is a content gap stated in the engine's own words. Defaults to the worklist: queries with no article planned and none written. State is derived from the work linked to the query, the same rule keywords use, so it moves on its own as actions and articles appear. Pass `type=planned`, `type=processed`, `type=all` or `type=archived` for the others. Covers the full history unless you narrow it with `startDate` and `endDate`, which lists only the queries engines ran inside that period and counts `searches` over it; filter by `query` substring to look at one theme. Coverage is not uniform across platforms: not every engine reports its fanout.



## OpenAPI

````yaml https://api.rankspot.ai/docs-json get /v1/ai-visibility/fanouts
openapi: 3.0.0
info:
  title: RankSpot Public API
  description: >-
    The RankSpot Public API gives you programmatic access to your workspace data
    — keywords, backlinks, competitors, planned actions, articles, and more.


    ## Authentication


    All endpoints require a Bearer API key in the `Authorization` header:


    ```

    Authorization: Bearer <your-api-key>

    ```


    Generate API keys from **Settings → API Keys** in the RankSpot dashboard.
    Each key is scoped to a single workspace.


    ## Pagination


    List endpoints return a consistent envelope:


    ```json

    {
      "data": {
        "total": 120,
        "offset": 0,
        "limit": 20,
        "count": 20,
        "items": [...]
      }
    }

    ```


    Use `offset` and `limit` query parameters to paginate. Default limit is
    **20**, maximum is **100**.


    ## Status codes


    | Code | Meaning |

    |------|---------|

    | 200  | Success |

    | 201  | Created |

    | 204  | No content (delete / unarchive) |

    | 400  | Validation error or business rule violation |

    | 401  | Missing or invalid API key |

    | 404  | Resource not found or belongs to another workspace |
  version: '1.0'
  contact: {}
servers:
  - url: https://api.rankspot.ai
    description: Production
security: []
tags:
  - name: AI Visibility
    description: >-
      How AI answer engines see your brand. Track prompts, read the answers
      ChatGPT, Perplexity and Google gave, and work through the pages they
      cited. Prompts are run on a daily schedule by RankSpot, so answers appear
      after the next run rather than on demand.
  - name: Articles
    description: >-
      AI-generated blog articles. Articles are created automatically when a
      `write_article` action is sent to generation — they cannot be created
      directly via the API.
  - name: Backlinks
    description: >-
      Backlinks discovered for your domain and your competitors' domains.
      Backlinks are auto-synced on a background interval and cannot be created
      via the API.
  - name: Categories
    description: Categories for organising actions and articles within your workspace.
  - name: Competitors
    description: >-
      Competitor domains tracked in your workspace. Once added, keywords and
      backlinks for each competitor are fetched asynchronously on a background
      sync interval.
  - name: Forum Opportunities
    description: >-
      Forum threads and community posts surfaced as potential link-building or
      engagement opportunities.
  - name: Keywords
    description: >-
      SEO keywords tracked in your workspace, enriched with search volume,
      competition, and AI-generated relevance scores.
  - name: People Also Ask
    description: >-
      "People also ask" questions discovered from search results for your
      tracked keywords.
  - name: Actions
    description: >-
      The SEO work planned for your workspace. Each action carries a `type`
      saying what kind of work it is and which target it points at — see `POST
      /v1/actions` for the full list. Only `write_article` can be turned into an
      article; the rest are a person's job. Create actions yourself or let
      RankSpot generate them.
  - name: Research
    description: >-
      Live lookups against the open web: a Google search and a page fetch. The
      only endpoints here that spend credits per call. Neither response reports
      what it cost — the charge is real, and your remaining balance is visible
      in the RankSpot dashboard. Returns 402 when the workspace is out of
      credits.
  - name: Search Console
    description: >-
      Google Search Console performance data — clicks, impressions, CTR, and
      average position for your connected property. Requires GSC to be connected
      from the RankSpot dashboard.
  - name: Workspace
    description: >-
      Who the workspace is: brand, domain, what the business does and who it
      sells to. Read this first — the rest of the API returns opportunities that
      only mean something in the context of a particular business.
paths:
  /v1/ai-visibility/fanouts:
    get:
      tags:
        - AI Visibility
      summary: List fanout queries
      description: >-
        The searches the AI platforms ran while answering your prompts, most-run
        first. Where a citation tells you which page an engine trusted, a fanout
        query tells you what it decided it needed to know, so a query you rank
        for nowhere is a content gap stated in the engine's own words. Defaults
        to the worklist: queries with no article planned and none written. State
        is derived from the work linked to the query, the same rule keywords
        use, so it moves on its own as actions and articles appear. Pass
        `type=planned`, `type=processed`, `type=all` or `type=archived` for the
        others. Covers the full history unless you narrow it with `startDate`
        and `endDate`, which lists only the queries engines ran inside that
        period and counts `searches` over it; filter by `query` substring to
        look at one theme. Coverage is not uniform across platforms: not every
        engine reports its fanout.
      operationId: AiFanoutQueriesController_findAll
      parameters:
        - name: offset
          required: false
          in: query
          schema:
            minimum: 0
            default: 0
            type: number
        - name: limit
          required: false
          in: query
          schema:
            minimum: 1
            maximum: 100
            default: 20
            type: number
        - name: startDate
          required: false
          in: query
          description: >-
            Inclusive start of the period, `YYYY-MM-DD` (UTC). Omit for no lower
            bound.
          schema:
            type: string
            example: '2026-07-01'
        - name: endDate
          required: false
          in: query
          description: >-
            Inclusive end of the period, `YYYY-MM-DD` (UTC). Omit for no upper
            bound.
          schema:
            type: string
            example: '2026-07-28'
        - name: query
          required: false
          in: query
          description: >-
            Filter by query substring, case-insensitive. Stored queries are
            already lower-cased, so casing here does not matter either.
          schema:
            example: screen recorder
            type: string
        - name: type
          required: false
          in: query
          description: >-
            Derived from the work linked to the query, the same rule keywords
            use. new: the worklist, no article planned and none written
            (default) | planned: has a `write_article` action but no article yet
            | processed: has a linked article | all: every non-archived query |
            archived: queries hidden from the worklist
          schema:
            default: new
            type: string
            enum:
              - all
              - planned
              - processed
              - new
              - archived
        - name: sortBy
          required: false
          in: query
          schema:
            default: searches
            type: string
            enum:
              - searches
              - lastSeenAt
              - firstSeenAt
              - query
        - name: sortOrder
          required: false
          in: query
          schema:
            default: desc
            type: string
            enum:
              - asc
              - desc
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                properties:
                  data:
                    type: object
                    properties:
                      total:
                        type: number
                        example: 100
                      offset:
                        type: number
                        example: 0
                      limit:
                        type: number
                        example: 100
                      count:
                        type: number
                        example: 10
                      items:
                        type: array
                        items:
                          $ref: '#/components/schemas/AiFanoutQueryDto'
      security:
        - bearer: []
components:
  schemas:
    AiFanoutQueryDto:
      type: object
      properties:
        id:
          type: string
          example: 3f1c2b4e-8d5a-4a2f-9c3e-7b1d6a5e4c20
        query:
          type: string
          example: best screen recording software for mac 2026
          description: >-
            The search the engine ran. Normalised on write — trimmed, inner
            whitespace collapsed, lower-cased — so the same search in two
            casings is one row rather than two.
        actionIds:
          example:
            - 3f1c2b4e-8d5a-4a2f-9c3e-7b1d6a5e4c20
          description: >-
            The `write_article` actions planned for this search. Non-empty with
            an empty `articleIds` is what `type=planned` selects.
          type: array
          items:
            type: string
        articleIds:
          example:
            - 3f1c2b4e-8d5a-4a2f-9c3e-7b1d6a5e4c20
          description: >-
            The articles written for this search. Non-empty is what
            `type=processed` selects, whatever the actions say.
          type: array
          items:
            type: string
        firstSeenAt:
          format: date-time
          type: string
          description: >-
            When this query was first and last run, ever. Not clipped to the
            requested period.
        lastSeenAt:
          format: date-time
          type: string
        searches:
          type: number
          example: 14
          description: >-
            Responses in the period whose engine ran this query. An engine runs
            a query at most once per answer, so this is both the fanout count
            and the number of answers behind it.
        platforms:
          type: array
          description: Platforms that ran this query in the period.
          items:
            $ref: '#/components/schemas/AiPlatform'
      required:
        - id
        - query
        - actionIds
        - articleIds
        - firstSeenAt
        - lastSeenAt
        - searches
        - platforms
    AiPlatform:
      type: string
      enum:
        - chatgpt
        - perplexity
        - google_ai_overview
        - google_ai_mode
  securitySchemes:
    bearer:
      scheme: bearer
      bearerFormat: JWT
      type: http

````