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

# Citations per URL per day

> Which URLs the AI models cited, one row per date × URL, split by owned vs earned. Counts citations in the answers the dashboard counts: error answers and answers to retired prompts are left out. Branded prompts count.



## OpenAPI

````yaml https://app.get3rd.com/api/export/v1/openapi.json get /api/export/v1/citations
openapi: 3.1.0
info:
  title: 3RD Export API
  version: 1.0.0
  description: >-
    Read-only access to a brand's AI-visibility data: daily visibility by model
    and market, the URLs the models cite and the Citation Share they add up to,
    daily brand sentiment, the Recommended rate, and the same visibility measure
    for tracked competitors.


    Built for loading into a BI tool, a warehouse, or a data-normalization
    service. Every endpoint is a `GET`, returns JSON, and never writes.


    **Authentication.** Send an export API key in the `X-API-Key` header. Keys
    are created by an organization owner or admin under Settings → Looker Studio
    in the 3RD app, are shown once, and can be revoked at any time (revocation
    is immediate). The organization needs an active paid plan. An unscoped key
    reads every active brand in the organization that issued it. A key limited
    to specific brands reads only those. A key stops working once the owner or
    admin who created it leaves the organization or loses that role.


    **Pagination.** Responses are cursor-paginated at 1000 rows per page. Follow
    `pagination.nextCursor` until `pagination.hasMore` is false. Do not
    construct cursors yourself — the encoding is not part of this contract.


    **History.** The window is capped by the organization's plan (lite: no
    access, pro: 90 days, agency: 180 days, enterprise: full history). A request
    for a wider window is silently clamped rather than rejected, so read
    `meta.fromDate` to see what was actually returned.


    **Rate limit.** 100 requests per minute. A request that carries a session
    cookie or an `Authorization` header shares that session's budget. Otherwise
    the budget is the client IP together with the User-Agent, so a different
    User-Agent is a separate budget. The `X-API-Key` header is not its own
    budget. Exceeding the budget returns 429.


    **Ad performance is not on this API.** Paid-placement data is currently
    available only through the MCP server, reads live from the ad platform with
    a fixed 30-day window, and cannot be backfilled.
servers:
  - url: https://app.get3rd.com
security:
  - ApiKeyAuth: []
tags:
  - name: Export
    description: >-
      Brand visibility, citations, Citation Share, sentiment, Recommended rate
      and competitor data.
paths:
  /api/export/v1/citations:
    get:
      tags:
        - Export
      summary: Citations per URL per day
      description: >-
        Which URLs the AI models cited, one row per date × URL, split by owned
        vs earned. Counts citations in the answers the dashboard counts: error
        answers and answers to retired prompts are left out. Branded prompts
        count.
      operationId: getCitations
      parameters:
        - name: brandId
          in: query
          required: true
          schema:
            type: string
            format: uuid
          description: >-
            Brand to report on, from `GET /api/export/v1/brands`. A brand
            outside the key's organization, or outside the brands the key is
            pinned to, returns 404.
        - name: fromDate
          in: query
          required: false
          schema:
            type: string
            format: date
          description: >-
            Start of the window, inclusive (`YYYY-MM-DD`). Defaults to 30 days
            ago. Clamped to the plan's lookback window without an error, so read
            `meta.fromDate` for the window actually applied.
        - name: toDate
          in: query
          required: false
          schema:
            type: string
            format: date
          description: End of the window, inclusive (`YYYY-MM-DD`). Defaults to now.
        - name: cursor
          in: query
          required: false
          schema:
            type: string
          description: >-
            Opaque cursor from the previous response's `pagination.nextCursor`.
            Omit for the first page.
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      $ref: '#/components/schemas/CitationsRow'
                  pagination:
                    $ref: '#/components/schemas/Pagination'
                  meta:
                    $ref: '#/components/schemas/Meta'
                required:
                  - data
                  - pagination
                  - meta
        '400':
          description: Missing or malformed parameter
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '401':
          description: >-
            Missing, unknown, revoked, expired, or wrongly scoped API key, or
            one whose creator is no longer an owner or admin of the organization
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '403':
          description: The key's organization has no active paid plan
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '404':
          description: >-
            Brand this key cannot read — unknown, inactive, in another
            organization, or outside the key's brand list. Returned instead of
            403 so the response does not reveal whether the id exists elsewhere.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '429':
          description: Rate limit exceeded
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
components:
  schemas:
    CitationsRow:
      type: object
      properties:
        date:
          type: string
          format: date
          description: Date the citation was recorded (UTC)
        url:
          type: string
          description: Cited URL
        domain:
          type:
            - string
            - 'null'
          description: Domain of the cited URL
        is_owned:
          type: boolean
          description: True if the cited URL belongs to the brand's own domain
        is_agency_sponsored_content:
          type: boolean
          description: >-
            Detected paid/sponsored placement. Always false unless the
            organization has opted into paid-citation detection
        brand_mentioned:
          type:
            - boolean
            - 'null'
          description: >-
            Whether the brand is mentioned on this page. Null means not
            established — the page has not been scraped, or it blocks our
            crawler — which is not the same as false
        citation_count:
          type: integer
          description: Number of distinct AI responses that cited this URL on this date
      required:
        - date
        - url
        - is_owned
        - is_agency_sponsored_content
        - citation_count
    Pagination:
      type: object
      properties:
        pageSize:
          type: integer
          description: Rows per page. Always 1000.
        hasMore:
          type: boolean
          description: Whether another page follows.
        nextCursor:
          type:
            - string
            - 'null'
          description: Pass as `cursor` to fetch the next page. Null on the last page.
      required:
        - pageSize
        - hasMore
        - nextCursor
    Meta:
      type: object
      properties:
        brandId:
          type: string
          format: uuid
        fromDate:
          type: string
          format: date-time
          description: >-
            Start of the window actually queried, after the plan clamp was
            applied.
        toDate:
          type: string
          format: date-time
          description: >-
            End of the window actually queried, inclusive: the last millisecond
            of the `toDate` day, or the time of the request when `toDate` is
            omitted.
        plan:
          type: string
          description: >-
            Billing plan the key's organization is on, which sets the lookback
            window (lite: no access, pro: 90 days, agency: 180 days, enterprise:
            full history).
      required:
        - brandId
        - fromDate
        - toDate
        - plan
    Error:
      type: object
      properties:
        error:
          type: string
          description: Human-readable failure reason.
      required:
        - error
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: X-API-Key
      description: >-
        Export API key, format `3rd_live_<64 hex characters>`. Created under
        Settings → Looker Studio.

````

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