---
title: "Get report tables"
method: GET
path: "/api/v1/reports/report-tables/{id}"
tags: ["reports"]
---

# Get report tables

`GET /api/v1/reports/report-tables/{id}`

## Request

- Base URL: `https://point11.ai`
- URL: `https://point11.ai/api/v1/reports/report-tables/{id}`
- Auth: one of:
  - HTTP bearer
  - OAuth 2 (authorization code, authorization URL `https://auth.point11.ai/oauth2/authorize`, token URL `https://auth.point11.ai/oauth2/token`)

Read one page of a report's table: pass what the report reads as `id` (the campaign its definition's `scope.campaignId` names, or the organization's id for a report of every campaign, `scope.campaignId` null, narrowed to one business profile's by `scope.profileId`) and the report definition as JSON text (`definition`, the shape reports_saved_reports_save takes; a definition whose scope names another campaign is not found under `id`, as is a campaign of another profile than `scope.profileId`). An aggregate report answers its flat columns (each measure under each combination of column values, shown as itself or as a share of its row, column or total), this page of rows with each value's precision and, when it compares, its value over the window 30 days earlier, the grand total row and, when its definition draws a chart (`chart`), that chart (`table.chart`): the first `chart.topN` categories along x (every day, at most 1,000; every part of a pie, at most 5) and at most 5 series, each point the table's own cell at that row and column, with how many categories and series the report holds and no Other for the rest, or why the data cannot draw it (`status: refused`); a records report answers this page of interactions with the fields it shows. Every figure is the product's own, as its dashboard reads it for the same campaign and dates. A definition that does not fit its dataset is 400 INVALID_INPUT with `details.issues` naming each field; a campaign the organization has no such product campaign for is 404 RESOURCE_NOT_FOUND; a campaign with no results in the scope answers `status: no-results`. Page with `after` (the previous page's `nextCursor`) and `pageSize`.

## Path parameters

- `id` string, uuid, required: What the report reads: its definition's `scope.campaignId`, or the organization's id when the report reads every campaign of its product (`scope.campaignId` null).

## Query parameters

- `definition` string, required: The report definition as JSON text: `{version: 1, grain: "aggregate", dataset, scope: {campaignId (null: every campaign of the product, pooled, where the dataset allows it), dateRange}, rows, columns, values: [{measure, showAs}], filters: [{dimension, values}], sort, compare, chart: {mark, orientation, x, y, topN, labels} | null}` or `{version: 1, grain: "records", dataset, scope, fields, filters, sort: {field, direction} | null}`, its keys the dataset's (reports.datasets.list.v1).
- `after` string, nullable: The previous page's `nextCursor`; omit it for the first page.
- `pageSize` integer: Rows per page (1–1000).

## Headers

- `Point11-Organization` string, uuid

## Response `200`

Success.

- ReportsReportTablesGetResponse
  - `table` union, required
    - object
      - `status` 'ready', required
      - `grain` 'aggregate', required
      - `span` union, required: What the figures were read over: a window dataset's trailing 30-day results window, a range dataset's days, every campaign pooled, each over its own window, or one run as it ran (its figures state no precision).
        - object
          - `kind` 'window', required
          - `asOf` string, date, required: The UTC day every value is as of: its trailing 30 days.
          - `from` string, date, required
          - `to` string, date, required
          - `comparedTo` string, date, required: The as-of day of the window a comparison reads.
        - object
          - `kind` 'range', required
          - `from` string, date, required
          - `to` string, date, required
        - object
          - `kind` 'campaigns', required
          - `campaigns` integer, required: How many campaigns had results, each read over its own window.
          - `from` string, date, required: The earliest campaign window's first day.
          - `to` string, date, required: The latest campaign window's last day.
        - object
          - `kind` 'run', required
          - `runId` string, required: The run the figures were read from.
          - `day` string, date, required: The UTC day the run started.
      - `rowDimensions` object[], required
        - `key` string, required
        - `label` string, required
      - `columnDimensions` object[], required
        - `key` string, required
        - `label` string, required
      - `columns` object[], required
        - `id` string, required
        - `measure` string, required
        - `measureLabel` string, required
        - `format` 'count' | 'percent' | 'stars' | 'score' | 'mean', required
        - `showAs` 'value' | 'row' | 'column' | 'total', required
        - `values` object[], required: Each column dimension's value; empty on a total.
          - `key` string, required
          - `label` string, required
          - `link` object: The product's own page that answers this value, and what it opens.
            - `href` string, required
            - `label` string, required
          - `filterable` false: A value no filter on its dimension keeps (the campaign's own brand among the brands named): its row opens no records.
        - `total` boolean, required
      - `rows` object[], required: This page's rows.
        - `id` string, required
        - `values` object[], required: Each row dimension's value, outermost first.
          - `key` string, required
          - `label` string, required
          - `link` object: The product's own page that answers this value, and what it opens.
            - `href` string, required
            - `label` string, required
          - `filterable` false: A value no filter on its dimension keeps (the campaign's own brand among the brands named): its row opens no records.
        - `cells` ReportsCells, required: Each cell by its column's id.
        - `drill` object, nullable, required: What opens this row's records in the dataset's `drill`: the report's filters and the row's own values; null where the dataset drills nowhere.
          - `filters` object[], required
            - `dimension` string, required
            - `values` string[], required
          - `dateRange` string, nullable, required: The records' date range, for a row read as of one day; null keeps the report's.
      - `total` object, required: The grand total row: each column's total over every row.
        - `id` string, required
        - `values` object[], required: Each row dimension's value, outermost first.
          - `key` string, required
          - `label` string, required
          - `link` object: The product's own page that answers this value, and what it opens.
            - `href` string, required
            - `label` string, required
          - `filterable` false: A value no filter on its dimension keeps (the campaign's own brand among the brands named): its row opens no records.
        - `cells` ReportsCells, required: Each cell by its column's id.
        - `drill` object, nullable, required: What opens this row's records in the dataset's `drill`: the report's filters and the row's own values; null where the dataset drills nowhere.
          - `filters` object[], required
            - `dimension` string, required
            - `values` string[], required
          - `dateRange` string, nullable, required: The records' date range, for a row read as of one day; null keeps the report's.
      - `rowCount` integer, required: Every row the table holds across its pages.
      - `nextCursor` string, nullable, required
      - `chart` union, required: The report's chart, when its definition draws one (`chart` not null).
        - object
          - `status` 'ready', required
          - `x` object, nullable, required: The dimension along x (`time`: its days, in time), or null: one category, `all`, every row's.
            - `key` string, required
            - `label` string, required
            - `time` boolean, required
          - `categoryCount` integer, required: Every category the report holds along x.
          - `categories` object[], required: The categories drawn, in the chart's order: every day in time, every part of a pie, or the first `chart.topN` in the report's sorted rows (x on Rows) or by the product's column total, largest first (x on Columns). No `Other` stands for the rest.
            - `key` string, required
            - `label` string, required
            - `link` object: The product's own page that answers this value, and what it opens.
              - …
            - `filterable` false: A value no filter on its dimension keeps (the campaign's own brand among the brands named): its row opens no records.
          - `seriesFrom` 'columns' | 'rows' | 'values', required: Where the series come from: the dimension on Columns or Rows, or the values.
          - `seriesCount` integer, required: Every series the report holds: the series dimension's values, or the values on the drawn value's scale.
          - `series` object[], required: The series drawn, in the product's value order: the dimension's first values by the product's column totals, by their value on the last day, or by where each first falls in the report's order; or the values.
            - `id` string, required: The series dimension's value key, or the value's column id.
            - `label` string, required
            - `column` object, required: The table column whose measure, format and show-as the series' points take.
              - …
          - `points` ReportsPointsItem[], required: By category, then series: the table's own cell at each; a pie's, each part's share of the total (as a `% of total` column shows it).
            - ReportsCellsVariant[]
              - …
          - `categoryTotals` ReportsCellsVariant[], required
            - `value` number, nullable, required: The value as the report shows it: itself, or its share (0-100) of its row, column or total.
            - `precision` ReportsPrecision, nullable, required: The value's precision over the distinct customers behind it.
              - …
            - `earlier` number, nullable, required: The value over the window 30 days earlier, when the report compares.
          - `total` object, required: The table's grand total of the value drawn.
            - `value` number, nullable, required: The value as the report shows it: itself, or its share (0-100) of its row, column or total.
            - `precision` ReportsPrecision, nullable, required: The value's precision over the distinct customers behind it.
              - …
            - `earlier` number, nullable, required: The value over the window 30 days earlier, when the report compares.
        - object
          - `status` 'refused', required
          - `reason` 'too-many-days' | 'too-many-parts' | 'parts-exceed-whole', required: More days than a chart draws (choose a shorter date range), a pie of more parts than it draws, or a pie or stack whose parts add up to more than the product's own whole, as overlapping parts of a distinct count do (draw bars side by side).
          - `count` integer, required: Every category the report holds along x.
          - `max` integer, required: The most categories this chart draws.
    - object
      - `status` 'ready', required
      - `grain` 'records', required
      - `span` union, required: What the figures were read over: a window dataset's trailing 30-day results window, a range dataset's days, every campaign pooled, each over its own window, or one run as it ran (its figures state no precision).
        - object
          - `kind` 'window', required
          - `asOf` string, date, required: The UTC day every value is as of: its trailing 30 days.
          - `from` string, date, required
          - `to` string, date, required
          - `comparedTo` string, date, required: The as-of day of the window a comparison reads.
        - object
          - `kind` 'range', required
          - `from` string, date, required
          - `to` string, date, required
        - object
          - `kind` 'campaigns', required
          - `campaigns` integer, required: How many campaigns had results, each read over its own window.
          - `from` string, date, required: The earliest campaign window's first day.
          - `to` string, date, required: The latest campaign window's last day.
        - object
          - `kind` 'run', required
          - `runId` string, required: The run the figures were read from.
          - `day` string, date, required: The UTC day the run started.
      - `fields` object[], required
        - `key` string, required
        - `label` string, required
      - `rows` object[], required
        - `id` string, required
        - `values` object, required
        - `href` string, nullable, required: The product page that shows the interaction.
      - `nextCursor` string, nullable, required
    - object: The campaign holds no results in this scope.
      - `status` 'no-results', required
      - `span` union, required: What the figures were read over: a window dataset's trailing 30-day results window, a range dataset's days, every campaign pooled, each over its own window, or one run as it ran (its figures state no precision).
        - object
          - `kind` 'window', required
          - `asOf` string, date, required: The UTC day every value is as of: its trailing 30 days.
          - `from` string, date, required
          - `to` string, date, required
          - `comparedTo` string, date, required: The as-of day of the window a comparison reads.
        - object
          - `kind` 'range', required
          - `from` string, date, required
          - `to` string, date, required
        - object
          - `kind` 'campaigns', required
          - `campaigns` integer, required: How many campaigns had results, each read over its own window.
          - `from` string, date, required: The earliest campaign window's first day.
          - `to` string, date, required: The latest campaign window's last day.
        - object
          - `kind` 'run', required
          - `runId` string, required: The run the figures were read from.
          - `day` string, date, required: The UTC day the run started.

## Other responses

- `400`: The input, query, or Idempotency-Key is invalid.
- `401`: The bearer is missing, expired, or not accepted.
- `403`: The credential lacks the operation's scope or role, or the operation needs a different door.
- `404`: The resource or organization does not exist for this caller.
- `405`: This path takes another HTTP method, named in `Allow`.
- `409`: The request conflicts with current state or with prior use of its Idempotency-Key.
- `413`: The request, or the answer it asks for, is too large; narrow it.
- `429`: The credential's rate budget is spent; retry after `Retry-After` seconds.
- `500`: An unexpected server failure; retry later. Only `request_id` identifies it.
- `503`: A dependency is temporarily unavailable; retry after `Retry-After` seconds.
- `default`: Another status a product answers for its own refusal (for example `415` for an unsupported attachment); branch on `code`.

---

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