Reporting API V2 · Channel

Channel Reporting API

Reference for Channel-scoped report requests and JSON responses.

API scope

Choose the scope assigned to your secret key.

// Channel · quickstart

First request

  • Store the Channel management secret key in server-side secrets storage.
  • Send GET /discobeat/reporting/v2/report/ with the X-API-Key header.
  • Add from and to together for inclusive UTC dates, or omit both to use the defaults.
curl
curl -H "X-API-Key: disco_sk_live_..." \
  "https://api.disconetwork.com/discobeat/reporting/v2/report/"

Defaults

SelectionDefault
DatesLatest 7 UTC dates in the reporting window
MetricsAuthenticated Channel metric set
Time graintotal
Sort orderdesc
Paginationoffset 0 and limit 50

Downloads

// Channel · request

Authentication and endpoint

FieldValue
Base URLhttps://api.disconetwork.com
Method and pathGET /discobeat/reporting/v2/report/
AuthenticationX-API-Key header with a Channel management secret key
ScopeChannel assigned to the secret key
Secret-key prefixdisco_sk_live_…

Send requests from server-side code. The key fixes the Channel scope and no Channel ID parameter is accepted.

// Channel · parameters

Query parameters

ParameterTypeReqDetails
fromdateFirst UTC date in YYYY-MM-DD format, inclusive. Required when to is supplied.
todateLast UTC date in YYYY-MM-DD format, inclusive. Required when from is supplied and cannot be future.
metricscomma-separated listMetric columns in response order. Defaults to the authenticated Channel metric set.
time_grainstringtotal, day, week, month, or hour. Default is total.
group_bycomma-separated listUp to three unique values from publisher, page_type, widget_type, and widget_id.
sort_orderstringdesc returns latest periods first and asc returns oldest periods first. Default is desc.
sort_bystringperiod_start, a selected metric, or a selected grouping field. Default is period_start.
sort_directionstringasc or desc. Defaults to sort_order.
publisher_idscomma-separated listInclude matching Publisher UUIDs. Maximum 250 values.
page_typescomma-separated listInclude matching page types. MODAL is excluded. Maximum 250 values.
widget_typescomma-separated listInclude matching widget types. Maximum 250 values.
offsetintegerRows to skip after sorting. Default is 0.
limitintegerPage size from 1 to 250. Default is 50.
// Channel · UTC periods

Dates and periods

RuleContract
Date pairfrom and to are optional together. Supplying only one returns 400
No datesNon-hourly requests use the latest 7 UTC dates in the reporting window
No hourly datesUses up to 3 UTC dates in the hourly reporting window
Query boundariesfrom and to are inclusive UTC calendar dates
Response boundariesperiod_start is inclusive. period_end is exclusive
WeeksUTC weeks begin Monday. Edge periods are clipped to the query
MonthsUTC calendar months. Edge periods are clipped to the query

Time grains

ValueRows and range
totalOne period for all matching activity
dayMatching activity grouped by UTC date
weekMatching activity grouped by Monday-based UTC week
monthMatching activity grouped by UTC calendar month
hourMatching activity grouped by UTC hour. Maximum 3 inclusive dates
// Channel · metrics

Metrics and formulas

Calculated metrics use aggregated measured totals. Ratios are returned as decimal values rather than percentages.

Measured metrics

MetricDefinition
impressionsBrand ad impressions
clicksBrand ad clicks
conversionsDisco-attributed conversions
channel_payoutChannel payout amount
revenue_with_emailNet billable revenue from activity with email
revenue_without_emailNet billable revenue from activity without email
feed_loadsWidget or feed load events
widget_displaysWidget display events
viewable_widget_displaysWidget displays counted as viewable
order_revenue_amountAttributed order revenue amount
attributed_ad_spend_amountAttributed ad spend amount
billable_ad_spend_amountBillable ad spend amount

Calculated metrics

MetricFormulaDefinition
ctrclicks / impressionsClick-through rate
cvrconversions / clicksChannel conversion rate
rplchannel_payout / feed_loadsPayout per feed load
attributed_cpaattributed_ad_spend_amount / conversionsAttributed cost per acquisition
Value ruleContract
Zero denominatorCalculated metric is 0
Ratio precisionRounded to 4 decimal places
Monetary precisionRounded to 2 decimal places

A documented metric may not be enabled for every Channel. Contact Disco if METRIC_NOT_AVAILABLE is returned.

// Channel · dimensions

Groupings and filters

ParameterValuesEffect
group_bypublisher, page_type, widget_type, widget_idAccepts up to 3 grouping keys. publisher adds publisher_id and publisher_name
publisher_idsPublisher UUIDsFilters rows without adding a column
page_typesPage-type valuesFilters rows without adding a column
widget_typesWidget-type valuesFilters rows without adding a column
  • Multiple groupings return one row for each observed combination.
  • A filtered dimension appears in data only when it is also included in group_by.
  • All time grains support up to 3 unique groupings.
// Channel · report

Report request

GET/discobeat/reporting/v2/report/
curl
curl -G -H "X-API-Key: disco_sk_live_..." \
  --data-urlencode "from=2026-07-18" \
  --data-urlencode "to=2026-07-20" \
  --data-urlencode "time_grain=day" \
  --data-urlencode "group_by=publisher,page_type" \
  --data-urlencode "metrics=impressions,clicks,conversions,channel_payout,ctr,cvr" \
  --data-urlencode "page_types=ORDER_TRACKING,THANK_YOU" \
  --data-urlencode "sort_order=asc" \
  --data-urlencode "offset=0" \
  --data-urlencode "limit=50" \
  "https://api.disconetwork.com/discobeat/reporting/v2/report/"

Sorting and pagination

RuleContract
SortRows are sorted before pagination
Pagedata contains up to limit rows starting at offset
Totalpagination.total is the full row count
ContinueAdd data.length to offset while pagination.has_more is true
Summarysummary covers all matching rows before pagination

JSON response

FieldValue
dataPaginated flat rows with period, grouping, and selected metric fields
summarySelected metrics across all matching rows
paginationoffset, limit, total, and has_more
metatimezone, data_through, and request_id
200 application/json
{
  "data": [
    {
      "period_start": "2026-07-18T00:00:00Z",
      "period_end": "2026-07-19T00:00:00Z",
      "publisher_id": "9aa17f8c-7746-4218-9025-83d38c406179",
      "publisher_name": "Example Publisher",
      "page_type": "ORDER_TRACKING",
      "impressions": 4584,
      "clicks": 180,
      "conversions": 46,
      "channel_payout": 189.90,
      "ctr": 0.0393,
      "cvr": 0.2556
    }
  ],
  "summary": {
    "impressions": 225072,
    "clicks": 8928,
    "conversions": 2234,
    "channel_payout": 6546.24,
    "ctr": 0.0397,
    "cvr": 0.2502
  },
  "pagination": {
    "offset": 0,
    "limit": 50,
    "total": 36,
    "has_more": false
  },
  "meta": {
    "timezone": "UTC",
    "data_through": "2026-07-20T00:00:00Z",
    "request_id": "7e9fe348-7558-4e28-b8c6-b26ea44899eb"
  }
}
// Channel · limits

Limits and availability

RuleLimit
Non-hourly rangeMust fit available reporting history
Hourly range3 inclusive UTC dates within available hourly history
Groupings3 for every time grain
Filter values250 per filter
Page size50 by default and 250 maximum
Result rows10,000 before pagination
Available historyRequest dates must fall within the available window
data_throughLatest available data period, shown by its UTC start time. Not a refresh time
No matching activity200 with empty data and zero-valued summary metrics
// Channel · errors

Errors

Status or codeCondition
400 validationMalformed or unknown parameters, unpaired dates, empty lists, and duplicate or unsupported metrics or groupings
METRIC_NOT_AVAILABLEResponse lists requested fields in unsupported_metrics and permitted fields in allowed_metrics
REPORTING_DATA_UNAVAILABLENo reporting data is available for the Channel
DATE_RANGE_OUTSIDE_AVAILABLE_WINDOWDates are outside available history. Response may include available_window
REPORT_ROW_LIMIT_EXCEEDEDResult exceeds 10,000 rows before pagination
REPORTING_SOURCE_ROW_LIMIT_EXCEEDEDHistorical request is too large to process
401Missing, invalid, public, revoked, or expired secret key
405Method is not GET
400 application/json
{
  "code": "METRIC_NOT_AVAILABLE",
  "unsupported_metrics": ["channel_payout"],
  "allowed_metrics": ["impressions", "clicks", "ctr"]
}

Channel · API access

Secret-key access

Ask your Disco contact for a Channel management secret key.

Contact Disco