---
title: "Build a Publisher Reporting V2 report"
method: GET
path: "/analysis/publisher-reporting/v2/report/"
tags: ["Reports"]
---

# Build a Publisher Reporting V2 report

`GET /analysis/publisher-reporting/v2/report/`

## Request

- Base URL: `https://merchant.disconetwork.com/api`
- URL: `https://merchant.disconetwork.com/api/analysis/publisher-reporting/v2/report/`
- Auth: API key in header `X-API-Key`
- TypeScript: <https://skmtc.dev/disconetwork/apis/disco-publisher-reporting-api-v2/docs/analysis/publisher-reporting/v2/report/get.ts> (a function with typed inputs; its response is checked against the schema)

Returns selected JSON rows without publisher identity, a full filtered summary, pagination, and report metadata.

## Query parameters

- `from` string, date
- `to` string, date
- `metrics` PublisherMetric[]
- `time_grain` 'total' | 'day' | 'week' | 'month' | 'hour'
- `group_by` string[]
- `sort_order` 'desc' | 'asc'
- `page_types` string[]
- `widget_types` string[]
- `offset` integer
- `limit` integer

## Response `200`

Paginated Publisher report and complete filtered summary.

- PublisherReportResponse
  - `data` PublisherReportRow[], required: Sorted and paginated flat rows without publisher identity.
    - `period_start` string, date-time, required: Always-present inclusive UTC boundary.
    - `period_end` string, date-time, required: Always-present exclusive UTC boundary.
    - `page_type` string, nullable: Present only when grouped by page_type.
    - `widget_type` string, nullable: Present only when grouped by widget_type.
    - `widget_id` string, nullable: Present for `widget_id` grouping and nullable when unrecorded.
    - `publisher_payout` number, double
    - `widget_loads` integer
    - `widget_displays` integer
    - `viewable_widget_displays` integer
    - `impressions` integer
    - `clicks` integer
    - `conversions` integer
    - `ctr` number, double: clicks / impressions
    - `cvr` number, double: conversions / widget_displays
  - `summary` PublisherMetricValues, required: Contains selected count, payout, and calculated metric values.
    - `publisher_payout` number, double
    - `widget_loads` integer
    - `widget_displays` integer
    - `viewable_widget_displays` integer
    - `impressions` integer
    - `clicks` integer
    - `conversions` integer
    - `ctr` number, double: clicks / impressions
    - `cvr` number, double: conversions / widget_displays
  - `pagination` Pagination, required
    - `offset` integer, required
    - `limit` integer, required
    - `total` integer, required: Matching rows before pagination.
    - `has_more` boolean, required
  - `meta` ReportMeta, required
    - `timezone` 'UTC', required
    - `data_through` string, date-time, nullable, required: Latest available data period, shown by its UTC start time. This is not a refresh time. Null when unavailable.
    - `request_id` string, nullable, required: Request correlation identifier when assigned.

## Other responses

- `400`: Returns invalid-query, unavailable-data, unavailable-date, row-limit, and source-row-limit errors.
- `401`: Only an active publisher-scoped secret key is accepted.
- `405`: The endpoint supports GET only.

---

[API](https://skmtc.dev/disconetwork/apis/disco-publisher-reporting-api-v2.md) - [All operations](https://skmtc.dev/disconetwork/apis/disco-publisher-reporting-api-v2/llms.txt) - [OpenAPI document](https://skmtc.dev/disconetwork/apis/disco-publisher-reporting-api-v2/revisions/dfe785117b11?raw)
