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

# Get a single history row by (day, engine)

> Returns the single history row identified by the universe +
day + engine triple. Returns `404` if no row matches.

Use this when you already know the exact `(day, engine)` you
want — cheaper and clearer than calling
`/universes/{id}/history?day=...&engine=...` and pulling the
first element of `data`.




## OpenAPI

````yaml /openapi.yaml get /universes/{id}/history/{day}/{engine}
openapi: 3.1.0
info:
  title: Verseodin API
  version: 1.0.0
  description: |
    Read-only HTTP API for pulling Verseodin dashboard data:
    universes, history rows (per-day aggregates of brand visibility,
    citations, and mentions across AI search engines), and full prompt
    records including the AI's response text and cited URLs.

    The same key authorises the Verseodin Claude / MCP connector — one
    credential, two surfaces.
servers:
  - url: https://verseodin.com/api/v1
    description: Production
security:
  - BearerAuth: []
paths:
  /universes/{id}/history/{day}/{engine}:
    get:
      tags:
        - History
      summary: Get a single history row by (day, engine)
      description: |
        Returns the single history row identified by the universe +
        day + engine triple. Returns `404` if no row matches.

        Use this when you already know the exact `(day, engine)` you
        want — cheaper and clearer than calling
        `/universes/{id}/history?day=...&engine=...` and pulling the
        first element of `data`.
      operationId: getHistorySingle
      parameters:
        - $ref: '#/components/parameters/UniverseId'
        - name: day
          in: path
          required: true
          schema:
            type: string
            format: date
          description: YYYY-MM-DD.
          example: '2026-04-27'
        - name: engine
          in: path
          required: true
          schema:
            type: string
            enum:
              - chatgpt
              - gemini
              - grok
              - claude
          description: AI engine identifier.
          example: chatgpt
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    $ref: '#/components/schemas/HistoryRow'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
components:
  parameters:
    UniverseId:
      name: id
      in: path
      required: true
      schema:
        type: string
        format: uuid
      description: Universe UUID — see `GET /universes`.
  schemas:
    HistoryRow:
      type: object
      description: |
        Single row from the `history` table — one row per
        `(universe, day, engine)` triple. Every column listed here is a
        separately documented response field; the `*_over_time` and
        `*_index` columns are JSONB arrays whose internal shape is
        described per-column.
      properties:
        id:
          type: string
          format: uuid
          description: History row UUID.
        day:
          type: string
          format: date
          description: The day this row aggregates.
        engine:
          type: string
          enum:
            - chatgpt
            - gemini
            - grok
            - claude
          description: Which AI assistant the prompts were run against.
        user_id:
          type: string
          format: uuid
          description: Owner of the universe.
        universe_id:
          type: string
          format: uuid
        job_id:
          type: string
          format: uuid
          description: Background job that produced this row.
        prompts_ids:
          type: array
          items:
            type: string
            format: uuid
          description: >-
            UUIDs of the underlying `prompts` rows aggregated into this history
            row.
        website:
          type: string
          description: Universe's primary domain.
        competitor_websites_plus_brand_tokens:
          type: array
          description: >-
            Per-competitor configuration captured at the time of the run (URL +
            brand-token aliases).
          items:
            type: object
        ai_coverage_over_time:
          type: number
          description: >-
            % of prompts where your brand was mentioned in the AI answer
            (`trust_cnt / n × 100`).
        ai_trust_mentions:
          type: integer
          description: Count of prompts where the AI mentioned your brand by name.
        ai_avg_trust_position:
          type: integer
          description: >-
            1-indexed rank of your brand among all brands the AI mentioned,
            ordered by mention frequency.
        ai_visibility_ranking:
          type: array
          description: >-
            Top-N table on the AI Visibility tab — each entry has `brand_name`,
            `trust_mentions`, `share_of_voice`, `rank`.
          items:
            type: object
        ai_top_prompts_by_trust_mentions:
          type: array
          description: >-
            Prompts that drove the most brand mentions — entries have `prompt`,
            `mentions`, `rank`.
          items:
            type: object
        ai_visibility_index:
          type: array
          description: >-
            Per-prompt blindspot view — appeared links, competitor brands shown,
            etc.
          items:
            type: object
        ai_citations_ranked_urls:
          type: array
          description: URLs cited in AI answers, ranked by frequency.
          items:
            type: object
        ai_competitive_analysis:
          type: array
          description: >-
            Competitor coverage breakdown — entries have `brand_name`,
            `coverage_pct`, `trust_mentions`.
          items:
            type: object
        ai_domain_citation_count:
          type: integer
          description: >-
            Combined count of your-domain citations + your brand mentions across
            all prompts.
        ai_citation_share:
          type: number
          description: '% of prompts where the AI cited your domain or mentioned your brand.'
        ai_top3_cited_urls:
          type: array
          description: Top-3 most-cited URLs of your own domain.
          items:
            type: object
        ai_top_domain_citations:
          type: array
          description: >-
            Top domains cited by the AI (yours + competitors), with citation
            count and share.
          items:
            type: object
        ai_top_prompts_by_website_citations:
          type: array
          description: Prompts where your website got the most citations.
          items:
            type: object
        geo_citations_over_time:
          type: number
          description: '% of prompts where the AI cited your domain.'
        geo_total_citations:
          type: integer
          description: Total prompts that cited your domain at least once.
        geo_avg_citation_rank:
          type: integer
          description: Your rank by citation count among competitors.
        geo_top_domains_in_citations:
          type: array
          description: Domains the AI cited most across all prompts.
          items:
            type: object
        geo_top_prompts_citing_my_domain:
          type: array
          description: Prompts where your domain got cited the most.
          items:
            type: object
        geo_citation_index:
          type: array
          description: Per-prompt citation breakdown.
          items:
            type: object
        geo_competitor_analysis:
          type: array
          description: >-
            Competitor citation analysis — `brand_name`, `coverage_pct`,
            `prompt_count`.
          items:
            type: object
        geo_citation_share:
          type: number
          description: >-
            Your citations as a % of all citations across all domains in the
            period.
        geo_top3_cited_urls:
          type: array
          description: Top-3 URLs of yours cited by the AI.
          items:
            type: object
        geo_prompts_vs_you_vs_competitors:
          type: array
          description: >-
            Prompt-level table comparing your URL vs the highest-ranked
            competitor URL.
          items:
            type: object
        geo_top_citing_domains:
          type: array
          description: Domains that cited you the most (AI source-ranking view).
          items:
            type: object
        geo_top_queries_citing_my_domain:
          type: array
          description: >-
            Queries (prompts) where your domain shows up in citations most
            often.
          items:
            type: object
        aeo_brand_mentions_over_time:
          type: number
          description: >-
            % of prompts where the AI mentioned your brand (regardless of
            citation).
        aeo_your_brand_mentions:
          type: integer
          description: Total prompts where your brand was mentioned.
        aeo_avg_mention_rank:
          type: integer
          description: Your rank by mention count among competitors.
        aeo_top_surfaces_mentioning_you:
          type: array
          description: Top URLs/sources where your brand was mentioned.
          items:
            type: object
        aeo_top_prompts_driving_mentions:
          type: array
          description: Prompts that drove the most brand mentions.
          items:
            type: object
        aeo_brand_mention_index:
          type: array
          description: >-
            Per-prompt mention breakdown — was your brand mentioned, were
            competitors mentioned, in what order.
          items:
            type: object
        aeo_mention_share_over_time:
          type: array
          description: Per-day mention share trend (used by the AEO chart).
          items:
            type: object
        aeo_total_mentions:
          type: integer
          description: >-
            Total brand mentions across all prompts (sum of occurrences, not
            distinct prompts).
        aeo_mention_share:
          type: number
          description: >-
            Your mentions / your-domain-citation count normalised against the
            total mentions in the universe.
        aeo_top3_urls_shown:
          type: array
          description: Top-3 URLs the AI surfaced when answering prompts.
          items:
            type: object
        aeo_prompt_mentions_vs_you_vs_competitors:
          type: array
          description: Per-prompt comparison of your-brand mentions vs competitor mentions.
          items:
            type: object
        aeo_top_surfaces_naming_your_brand:
          type: array
          description: Top sources that name your brand.
          items:
            type: object
        aeo_top_prompts_mentioning_my_brand:
          type: array
          description: Prompts that mention your brand most often.
          items:
            type: object
        monitors_daily_brand_mentions:
          type: number
          description: Daily brand mention rate as a % of all prompts.
        monitors_answer_coverage:
          type: integer
          description: How many prompts had a non-empty AI answer.
        monitors_citation_freshness:
          type: integer
          description: Indicator of how recent the AI's cited sources are.
        monitors_model_coverage:
          type: array
          description: Per-engine answer-coverage breakdown.
          items:
            type: object
        prompts_rows:
          type: array
          description: |
            Compact per-prompt summary used by the dashboard tables —
            `{prompt, prompt_id, answer_mentioned, citation_mentioned,
             top_competitor, trend_pct}`. For the full prompt + AI
            response + citation URLs, call `GET /universes/{id}/prompts`
            instead.
          items:
            type: object
    Error:
      type: object
      required:
        - error
      properties:
        error:
          type: object
          required:
            - type
            - message
          properties:
            type:
              type: string
              enum:
                - authentication_error
                - permission_error
                - not_found
                - invalid_request_error
                - rate_limit_error
                - api_error
              description: Machine-readable error category.
            message:
              type: string
              description: Human-readable explanation.
  responses:
    BadRequest:
      description: Malformed request (bad UUID, bad date, etc.).
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    Unauthorized:
      description: Missing / invalid / revoked API key.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    Forbidden:
      description: API key is valid but doesn't own the requested universe.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    NotFound:
      description: Universe (or metric, or row) doesn't exist.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
  securitySchemes:
    BearerAuth:
      type: http
      scheme: bearer
      bearerFormat: vso_<48 hex chars>
      description: |
        Generate a key at `/dashboard/settings/api-keys`. Pass it as
        `Authorization: Bearer vso_xxx` on every request.

````