---
title: "Get Period Summary"
method: GET
path: "/get-period-summary"
tags: ["public-api"]
---

# Get Period Summary

`GET /get-period-summary`

## Request

- Base URL: `https://api.trakkr.ai`
- URL: `https://api.trakkr.ai/get-period-summary`
- Auth: HTTP bearer

One frozen period, the whole client report.

Every metric a monthly report leads with, for one calendar month or
quarter, with the prior period alongside and each delta and direction
already computed with the sign right. A closed month is read from the
archive frozen when it closed, so the figure you publish can be fetched
again identically. The open month is computed to date and says so.

`metrics` holds the single-number figures, `breakdowns` the lists and
maps (visibility by model and tag, top competitors, top prompts, top
cited pages, gap domains, perception categories and competitors,
descriptors), `metric_meta` the unit and direction of each, and
`definitions` the prose when `include=definitions`. `view=list` returns
the index of what is archived.

Several brands at once: pass `brand_ids` (comma-separated UUIDs, up to
12 after de-duplication) instead of `brand_id`. The response is one
compact row per brand per closed month in `rows`, each figure with the
prior month's value and the server-computed delta, plus `brands`,
`months`, `metric_ids` and `metric_meta`. Ids that are not among your
brands come back in `excluded` and are never read. `period` as YYYY-MM
keeps that month and the month before it; quarters, `view=list`,
`compare` and `include` do not apply to a brand list. The open month is
not included, and a metric a brand's plan does not include is null with
a note on that brand. Above 12 brands, download the Excel workbook from
the Reports page.

## Query parameters

- `brand_id` string, uuid, nullable: Brand UUID. Required unless brand_ids is given; never both.
- `brand_ids` string[], nullable: Several brands at once: brand UUIDs, comma-separated or repeated, up to 12 after de-duplication, instead of brand_id. Returns one compact row per brand per closed month with the prior month's delta already computed; view, compare and include do not apply. period as YYYY-MM keeps that month and the month before it; quarters are not available for a brand list yet. months caps how many closed months are returned (at most 12). Ids that are not among your brands are listed in excluded and never read.
- `period` string, nullable: A month as YYYY-MM or a quarter as YYYY-Qn. Defaults to the most recently closed month. With brand_ids, a month keeps that month and the month before it; quarters are not available for a brand list yet.
- `view` 'summary' | 'list': summary (default), or list: the index of archived months and quarters
- `compare` boolean: Include the prior period and the computed deltas
- `include` string, nullable: Comma-separated extras. 'definitions' adds each metric's one-line definition.
- `months` integer: view=list: how many closed months to index. With brand_ids: how many closed months to return per brand, at most 12.

## Response `200`

Successful Response

- union
  - PeriodSummaryResponse: GET /get-period-summary
    - `brand` object, required
    - `period` PeriodMeta, required: What a period-scoped response actually resolved.
      - `key` string, required
      - `kind` string, required
      - `label` string, required
      - `start` string, required
      - `end` string, required
      - `status` string, required
      - `source` string, required
      - `frozen_at` string, nullable
      - `pipeline_version` string, nullable
      - `restated_at` string, nullable
      - `restatements` object[]
      - `coverage` object
      - `fields_computed` string[]
      - `fields_missing` string[]
      - `notes` string[]
      - `months` object, nullable
      - `rank_source` string, nullable
    - `prior` PeriodMeta: What a period-scoped response actually resolved.
      - `key` string, required
      - `kind` string, required
      - `label` string, required
      - `start` string, required
      - `end` string, required
      - `status` string, required
      - `source` string, required
      - `frozen_at` string, nullable
      - `pipeline_version` string, nullable
      - `restated_at` string, nullable
      - `restatements` object[]
      - `coverage` object
      - `fields_computed` string[]
      - `fields_missing` string[]
      - `notes` string[]
      - `months` object, nullable
      - `rank_source` string, nullable
    - `metrics` object, required
    - `breakdowns` object
    - `headline_metric_ids` string[]
    - `groups` object[]
    - `metric_meta` object
    - `definitions` object, nullable
  - PeriodIndexResponse: GET /get-period-summary?view=list
    - `brand` object, required
    - `periods` PeriodIndexEntry[], required
      - `key` string, required
      - `kind` string, required
      - `label` string, required
      - `status` string, required
      - `source` string, required
      - `start` string, nullable
      - `end` string, nullable
      - `data_status` string, nullable
      - `frozen_at` string, nullable
      - `restated_at` string, nullable
      - `complete_report_set` boolean, nullable
      - `months_archived` integer, nullable
      - `days_elapsed` integer, nullable
    - `quarters` PeriodIndexEntry[]
      - `key` string, required
      - `kind` string, required
      - `label` string, required
      - `status` string, required
      - `source` string, required
      - `start` string, nullable
      - `end` string, nullable
      - `data_status` string, nullable
      - `frozen_at` string, nullable
      - `restated_at` string, nullable
      - `complete_report_set` boolean, nullable
      - `months_archived` integer, nullable
      - `days_elapsed` integer, nullable
    - `current` PeriodIndexEntry, required
      - `key` string, required
      - `kind` string, required
      - `label` string, required
      - `status` string, required
      - `source` string, required
      - `start` string, nullable
      - `end` string, nullable
      - `data_status` string, nullable
      - `frozen_at` string, nullable
      - `restated_at` string, nullable
      - `complete_report_set` boolean, nullable
      - `months_archived` integer, nullable
      - `days_elapsed` integer, nullable
  - PeriodPortfolioResponse: GET /get-period-summary?brand_ids=...
    - `months` PeriodPortfolioMonth[], required
      - `key` string, required
      - `label` string, required
      - `start` string, required
      - `end` string, required
    - `brands` PeriodPortfolioBrand[], required
      - `id` string, required
      - `name` string, nullable
      - `website` string, nullable
      - `domain` string, nullable
      - `notes` string[]
    - `rows` PeriodPortfolioRow[], required
      - `brand_id` string, required
      - `period` string, required
      - `label` string, required
      - `start` string, required
      - `end` string, required
      - `status` string, required
      - `source` string, required
      - `data_status` string, nullable
      - `frozen_at` string, nullable
      - `restated` boolean
      - `report_days` integer, nullable
      - `metrics` object
      - `note` string, nullable
    - `metric_ids` string[], required
    - `metric_meta` object
    - `current` object, required
    - `notes` string[]
    - `excluded` PeriodPortfolioExcluded[]
      - `brand_id` string, required
      - `reason` string, required

## Other responses

- `401`: Missing, malformed, or expired credentials
- `402`: The current plan does not fund this operation
- `403`: Invalid credentials, missing brand access, or insufficient role
- `422`: Validation Error
- `429`: Rate limit exceeded
- `500`: The operation failed
- `503`: Authentication, entitlement, or a required dependency is temporarily unavailable

---

[API](https://skmtc.dev/trakkr/apis/trakkr-api.md) · [All operations](https://skmtc.dev/trakkr/apis/trakkr-api/llms.txt) · [OpenAPI document](https://skmtc.dev/trakkr/apis/trakkr-api/revisions/189a9e76b8d5?raw)
