Skip to content
Docs

API reference / Operations by tag

reports

The reporting engine: queries, summaries, variance, saved reports, exports and schedules.

49 operations. Base URL https://api.metrixed.com/v1; see authentication, errors and pagination.

Operations

MethodPathSummary
GET/advertiser/insights/anomaliesAdvertiser: unusual last day(s) on my offers (total, offer, partner as the reporting service labels it, country; revenue per click)
POST/advertiser/reports/queryAdvertiser report
POST/advertiser/reports/skuAdvertiser portal SKU report: lines of the advertiser's offers and revenue (no payout)
POST/assistant/chatAsk the read-only AI assistant ({message, history}); streams Server-Sent Events text, tool_call, tool_result, done, error
GET/assistant/conversationsThe caller's saved assistant conversations (pinned first, then most recent; ?q= searches titles and messages; unpinned chats idle 90 days are purged)
GET/assistant/conversations/{id}One saved conversation with its messages (owner only)
PATCH/assistant/conversations/{id}Rename or pin/unpin a conversation (at most 5 pinned; 409 pin_limit)
DELETE/assistant/conversations/{id}Delete a conversation
GET/assistant/promptsPrompt library for the caller's portal: built-in prompts (the MCP prompts + assistant starters), workspace prompts and the caller's own
POST/assistant/promptsSave a prompt (personal; shared:true + audience = a workspace prompt, workspace admins only)
PATCH/assistant/prompts/{id}Edit a prompt (own, or workspace prompts as a workspace admin)
DELETE/assistant/prompts/{id}Delete a prompt (own, or workspace prompts as a workspace admin)
GET/assistant/statusAI assistant availability for the caller (hidden when DT_ANTHROPIC_API_KEY is unset or the workspace turned it off), budget and usage
GET/conversion-disputesAdvertiser conversion disputes waiting for the network (filter status, advertiser_id, conversion_id)
POST/conversion-disputes/{id}/resolveAccept (changes the conversion status) or reject (note required) an advertiser dispute
POST/dashboardDashboard summary
GET/insights/anomaliesUnusual last day(s) per partner/offer/country/total vs a robust baseline of the days before (tenant reporting time zone); scope_dimension (advertiser|offer|partner|country) + scope_id narrow it; each finding links its report query
GET/partner/insights/anomaliesPartner: unusual last day(s) in my own traffic (total, offer, country; payout per click)
POST/partner/reports/queryPartner report
POST/partner/reports/skuPartner portal SKU report: own lines and payout (no revenue)
GET/reports/catalogReport catalogue for the network: dimensions, metrics, groups, presets, filter ops and result contract
GET/reports/custom-metricsTenant custom metrics (formulas over report metrics)
POST/reports/custom-metricsCreate a custom metric
PATCH/reports/custom-metrics/{id}Update a custom metric
DELETE/reports/custom-metrics/{id}Delete a custom metric
POST/reports/exportAsync export
GET/reports/export/{id}Report export job status and download link
POST/reports/fail-trafficFail-traffic report (WP-80): invalid clicks by originating offer, fail reason and target (target offer, target URL host or the fallback chain) with clicks, unique clicks and the conversions recorded on them
POST/reports/funnelAd-hoc funnel: clicks through goals, conversions and in-app events in order within a window (ClickHouse windowFunnel); counts per step, share of step 1 and of the previous step, optional breakdown; ?format=csv for the table as CSV
POST/reports/mobileMobile report by install-date cohort (installs, reattributions, sessions, retention dN, ARPU, LTV)
POST/reports/mobile/cohortsCohort grid: retention / LTV / active users per day since install
POST/reports/queryEntity/aggregate report
GET/reports/savedSaved reports
POST/reports/savedSave report
GET/reports/saved/{id}Get a saved report
PATCH/reports/saved/{id}Update a saved report (name, query, visibility, pinned)
GET/reports/schedulesList ReportSchedules
POST/reports/schedulesCreate ReportSchedule
GET/reports/schedules/{id}Get ReportSchedule
PATCH/reports/schedules/{id}Update ReportSchedule
DELETE/reports/schedules/{id}Delete ReportSchedule
POST/reports/schedules/bulk/applyBulk edit apply
POST/reports/schedules/bulk/previewBulk edit preview
POST/reports/schedules/searchSearch ReportSchedules (advanced)
GET/reports/sheets-schemaDimensions + metrics selectable in /reports/query (used by the Google Sheets add-on and Looker Studio connector)
POST/reports/skanSKAN / AdAttributionKit report (verified installs, CV distribution, estimated revenue; dimension event array-joins decoded events)
POST/reports/skuSKU report (WP-80): SKU lines of conversions priced per SKU with their current status: lines, conversions, quantity, sale amount, approved / pending / rejected payout and revenue, per SKU and currency (optionally per offer, partner, day)
POST/reports/summarySummary totals
POST/reports/varianceVariance report

GET /advertiser/insights/anomalies

Advertiser: unusual last day(s) on my offers (total, offer, partner as the reporting service labels it, country; revenue per click)

Operation getAdvertiserInsightsAnomalies. Auth: API key (Bearer) or session cookie.

ParameterInTypeRequiredDescription
daysquerystringno
lookbackquerystringno
limitquerystringno
dimsquerystringno
endquerystringno
StatusDescriptionBody
200okapplication/json AnomalyList
defaulterrorapplication/json Error
bash
curl 'https://api.metrixed.com/v1/advertiser/insights/anomalies' \
  -H "Authorization: Bearer $DT_API_KEY" \
  -H 'Accept: application/json'

Example 200 response:

json
{}

POST /advertiser/reports/query

Advertiser report Advertiser report. Fields of the report families are namespaced (mobile.retention_d7, skan.installs, lead.accepted, igaming.ngr, calls.qualified_calls) and may be mixed with core fields: each family runs on its own source and rows merge on the shared dimensions; a split a family cannot apply, compare_to or top_n with family fields is refused with 422. With a tree object the response is a ReportTree (docs/06 ยง8): the focused node and its children (expand_depth levels), each node one flat query filtered by its path, so ratios, masks and families hold at every level.

Operation postAdvertiserReportsQuery. Auth: API key (Bearer) or session cookie.

Request body (application/json, required): ReportQuery

FieldTypeFlagsDescription
fromstringrequired
tostringrequired
timezonestring
currencystring
granularityenum: none, minute, hour, day, week, month, quarter, year
dimensionsarray of string
metricsarray of string
filtersarray of object
metric_filtersarray of object
sortarray of object (free-form)
limitinteger
cursorstring
optionsobject (free-form)remove_zero_rows, ignore_fail_traffic, only_fail_traffic, include_on_hold, status_scope, compare_to previous_period|previous_year, attribution_date click|conversion, date_basis conversion_date|click_date, use_current_rates
top_nintegerfirst N rows by the sort plus one (other) row
viewobject (free-form)report builder presentation state saved with a report (date preset, chart, column order); ignored by the engine
treeReportTreeSpec
StatusDescriptionBody
200okapplication/json ReportResult or ReportTree
defaulterrorapplication/json Error
bash
curl -X POST 'https://api.metrixed.com/v1/advertiser/reports/query' \
  -H "Authorization: Bearer $DT_API_KEY" \
  -H 'Accept: application/json' \
  -H 'Content-Type: application/json' \
  --data-raw '{"from":"","to":""}'

Example 200 response:

json
{}

POST /advertiser/reports/sku

Advertiser portal SKU report: lines of the advertiser's offers and revenue (no payout)

Operation postAdvertiserReportsSku. Auth: API key (Bearer) or session cookie.

Request body (application/json, required): WP80ReportQuery

FieldTypeFlagsDescription
fromstringrequired
tostringrequired
timezonestring
group_byarray of string
offer_idsarray of string
partner_idsarray of string
skustring
include_testboolean
limitinteger
StatusDescriptionBody
200okapplication/json WP80Report
defaulterrorapplication/json Error
bash
curl -X POST 'https://api.metrixed.com/v1/advertiser/reports/sku' \
  -H "Authorization: Bearer $DT_API_KEY" \
  -H 'Accept: application/json' \
  -H 'Content-Type: application/json' \
  --data-raw '{"from":"","to":""}'

Example 200 response:

json
{
  "columns": [
    ""
  ],
  "rows": [
    {}
  ],
  "totals_by_currency": {},
  "totals": {}
}

POST /assistant/chat

Ask the read-only AI assistant ({message, history}); streams Server-Sent Events text, tool_call, tool_result, done, error Body {message, conversation_id?}: without conversation_id a new saved conversation is started. Tools are the read-only MCP tools of the caller's audience (+ explain_tracking for staff). The first event is conversation {id, title}.

Operation postAssistantChat. Auth: API key (Bearer) or session cookie.

Request body (application/json, required): PortalDoc

StatusDescriptionBody
200okapplication/json PortalDoc
defaulterrorapplication/json Error
bash
curl -X POST 'https://api.metrixed.com/v1/assistant/chat' \
  -H "Authorization: Bearer $DT_API_KEY" \
  -H 'Accept: application/json' \
  -H 'Content-Type: application/json' \
  --data-raw '{}'

Example 200 response:

json
{}

GET /assistant/conversations

The caller's saved assistant conversations (pinned first, then most recent; ?q= searches titles and messages; unpinned chats idle 90 days are purged)

Operation getAssistantConversations. Auth: API key (Bearer) or session cookie.

ParameterInTypeRequiredDescription
qquerystringno
limitqueryintegerno
StatusDescriptionBody
200okapplication/json AssistantConversationList
defaulterrorapplication/json Error
bash
curl 'https://api.metrixed.com/v1/assistant/conversations' \
  -H "Authorization: Bearer $DT_API_KEY" \
  -H 'Accept: application/json'

Example 200 response:

json
{
  "data": [
    {}
  ],
  "pin_limit": 0,
  "retention_days": 0
}

GET /assistant/conversations/{id}

One saved conversation with its messages (owner only)

Operation getAssistantConversationsId. Auth: API key (Bearer) or session cookie.

ParameterInTypeRequiredDescription
idpathstringyes
StatusDescriptionBody
200okapplication/json AssistantConversationDetail
defaulterrorapplication/json Error
bash
curl 'https://api.metrixed.com/v1/assistant/conversations/<id>' \
  -H "Authorization: Bearer $DT_API_KEY" \
  -H 'Accept: application/json'

Example 200 response:

json
{
  "id": "",
  "title": "",
  "pinned": false,
  "pinned_at": "1970-01-01T00:00:00.000Z"
}

PATCH /assistant/conversations/{id}

Rename or pin/unpin a conversation (at most 5 pinned; 409 pin_limit)

Operation patchAssistantConversationsId. Auth: API key (Bearer) or session cookie.

ParameterInTypeRequiredDescription
idpathstringyes

Request body (application/json, required): AssistantConversationPatch

FieldTypeFlagsDescription
titlestring
pinnedboolean
StatusDescriptionBody
200okapplication/json AssistantConversation
defaulterrorapplication/json Error
bash
curl -X PATCH 'https://api.metrixed.com/v1/assistant/conversations/<id>' \
  -H "Authorization: Bearer $DT_API_KEY" \
  -H 'Accept: application/json' \
  -H 'Content-Type: application/json' \
  --data-raw '{"title":"","pinned":false}'

Example 200 response:

json
{
  "id": "",
  "title": "",
  "pinned": false,
  "pinned_at": "1970-01-01T00:00:00.000Z"
}

DELETE /assistant/conversations/{id}

Delete a conversation

Operation deleteAssistantConversationsId. Auth: API key (Bearer) or session cookie.

ParameterInTypeRequiredDescription
idpathstringyes
StatusDescriptionBody
204okapplication/json Ok
defaulterrorapplication/json Error
bash
curl -X DELETE 'https://api.metrixed.com/v1/assistant/conversations/<id>' \
  -H "Authorization: Bearer $DT_API_KEY" \
  -H 'Accept: application/json'

Example 204 response:

json
{
  "ok": false
}

GET /assistant/prompts

Prompt library for the caller's portal: built-in prompts (the MCP prompts + assistant starters), workspace prompts and the caller's own

Operation getAssistantPrompts. Auth: API key (Bearer) or session cookie.

StatusDescriptionBody
200okapplication/json AssistantPromptList
defaulterrorapplication/json Error
bash
curl 'https://api.metrixed.com/v1/assistant/prompts' \
  -H "Authorization: Bearer $DT_API_KEY" \
  -H 'Accept: application/json'

Example 200 response:

json
{
  "data": [
    {}
  ],
  "can_share": false
}

POST /assistant/prompts

Save a prompt (personal; shared:true + audience = a workspace prompt, workspace admins only)

Operation postAssistantPrompts. Auth: API key (Bearer) or session cookie.

Request body (application/json, required): AssistantPromptCreate

FieldTypeFlagsDescription
titlestringrequired
bodystringrequired
sharedboolean
audienceenum: network, partner, advertiser
StatusDescriptionBody
201okapplication/json AssistantPrompt
defaulterrorapplication/json Error
bash
curl -X POST 'https://api.metrixed.com/v1/assistant/prompts' \
  -H "Authorization: Bearer $DT_API_KEY" \
  -H 'Accept: application/json' \
  -H 'Content-Type: application/json' \
  --data-raw '{"title":"","body":""}'

Example 201 response:

json
{
  "id": "",
  "title": "",
  "description": "",
  "body": ""
}

PATCH /assistant/prompts/{id}

Edit a prompt (own, or workspace prompts as a workspace admin)

Operation patchAssistantPromptsId. Auth: API key (Bearer) or session cookie.

ParameterInTypeRequiredDescription
idpathstringyes

Request body (application/json, required): AssistantPromptPatch

FieldTypeFlagsDescription
titlestring
bodystring
StatusDescriptionBody
200okapplication/json AssistantPrompt
defaulterrorapplication/json Error
bash
curl -X PATCH 'https://api.metrixed.com/v1/assistant/prompts/<id>' \
  -H "Authorization: Bearer $DT_API_KEY" \
  -H 'Accept: application/json' \
  -H 'Content-Type: application/json' \
  --data-raw '{"title":"","body":""}'

Example 200 response:

json
{
  "id": "",
  "title": "",
  "description": "",
  "body": ""
}

DELETE /assistant/prompts/{id}

Delete a prompt (own, or workspace prompts as a workspace admin)

Operation deleteAssistantPromptsId. Auth: API key (Bearer) or session cookie.

ParameterInTypeRequiredDescription
idpathstringyes
StatusDescriptionBody
204okapplication/json Ok
defaulterrorapplication/json Error
bash
curl -X DELETE 'https://api.metrixed.com/v1/assistant/prompts/<id>' \
  -H "Authorization: Bearer $DT_API_KEY" \
  -H 'Accept: application/json'

Example 204 response:

json
{
  "ok": false
}

GET /assistant/status

AI assistant availability for the caller (hidden when DT_ANTHROPIC_API_KEY is unset or the workspace turned it off), budget and usage

Operation getAssistantStatus. Auth: API key (Bearer) or session cookie.

StatusDescriptionBody
200okapplication/json PortalDoc
defaulterrorapplication/json Error
bash
curl 'https://api.metrixed.com/v1/assistant/status' \
  -H "Authorization: Bearer $DT_API_KEY" \
  -H 'Accept: application/json'

Example 200 response:

json
{}

GET /conversion-disputes

Advertiser conversion disputes waiting for the network (filter status, advertiser_id, conversion_id) Advertiser conversion disputes waiting for the network (filter status, advertiser_id, conversion_id). WP-67: paged; q matches conversion / txn id, offer or advertiser name; counts per status.

Operation getConversionDisputes. Auth: API key (Bearer) or session cookie.

ParameterInTypeRequiredDescription
qquerystringno
pagequerystringno
page_sizequerystringno
sortquerystringno
statusquerystringno
advertiser_idquerystringno
conversion_idquerystringno
StatusDescriptionBody
200okapplication/json AdvertiserDisputeList
defaulterrorapplication/json Error
bash
curl 'https://api.metrixed.com/v1/conversion-disputes?page=1&page_size=50' \
  -H "Authorization: Bearer $DT_API_KEY" \
  -H 'Accept: application/json'

Example 200 response:

json
{}

POST /conversion-disputes/{id}/resolve

Accept (changes the conversion status) or reject (note required) an advertiser dispute

Operation postConversionDisputesIdResolve. Auth: API key (Bearer) or session cookie.

ParameterInTypeRequiredDescription
idpathstringyes

Request body (application/json, required): DisputeResolve

FieldTypeFlagsDescription
decisionenum: accept, rejectrequired
notestringrequired to reject
StatusDescriptionBody
200okapplication/json Ok
defaulterrorapplication/json Error
bash
curl -X POST 'https://api.metrixed.com/v1/conversion-disputes/<id>/resolve' \
  -H "Authorization: Bearer $DT_API_KEY" \
  -H 'Accept: application/json' \
  -H 'Content-Type: application/json' \
  --data-raw '{"decision":"accept"}'

Example 200 response:

json
{
  "ok": false
}

POST /dashboard

Dashboard summary

Operation postDashboard. Auth: API key (Bearer) or session cookie.

Request body (application/json, required): ReportQuery

FieldTypeFlagsDescription
fromstringrequired
tostringrequired
timezonestring
currencystring
granularityenum: none, minute, hour, day, week, month, quarter, year
dimensionsarray of string
metricsarray of string
filtersarray of object
metric_filtersarray of object
sortarray of object (free-form)
limitinteger
cursorstring
optionsobject (free-form)remove_zero_rows, ignore_fail_traffic, only_fail_traffic, include_on_hold, status_scope, compare_to previous_period|previous_year, attribution_date click|conversion, date_basis conversion_date|click_date, use_current_rates
top_nintegerfirst N rows by the sort plus one (other) row
viewobject (free-form)report builder presentation state saved with a report (date preset, chart, column order); ignored by the engine
treeReportTreeSpec
StatusDescriptionBody
200okapplication/json ReportResult
defaulterrorapplication/json Error
bash
curl -X POST 'https://api.metrixed.com/v1/dashboard' \
  -H "Authorization: Bearer $DT_API_KEY" \
  -H 'Accept: application/json' \
  -H 'Content-Type: application/json' \
  --data-raw '{"from":"","to":""}'

Example 200 response:

json
{
  "columns": [
    {}
  ],
  "rows": [
    [
      {}
    ]
  ],
  "totals": {},
  "next_cursor": ""
}

GET /insights/anomalies

Unusual last day(s) per partner/offer/country/total vs a robust baseline of the days before (tenant reporting time zone); scope_dimension (advertiser|offer|partner|country) + scope_id narrow it; each finding links its report query

Operation getInsightsAnomalies. Auth: API key (Bearer) or session cookie.

ParameterInTypeRequiredDescription
daysquerystringno
lookbackquerystringno
limitquerystringno
dimsquerystringno
endquerystringno
scope_dimensionquerystringno
scope_idquerystringno
StatusDescriptionBody
200okapplication/json AnomalyList
defaulterrorapplication/json Error
bash
curl 'https://api.metrixed.com/v1/insights/anomalies' \
  -H "Authorization: Bearer $DT_API_KEY" \
  -H 'Accept: application/json'

Example 200 response:

json
{}

GET /partner/insights/anomalies

Partner: unusual last day(s) in my own traffic (total, offer, country; payout per click)

Operation getPartnerInsightsAnomalies. Auth: API key (Bearer) or session cookie.

ParameterInTypeRequiredDescription
daysquerystringno
lookbackquerystringno
limitquerystringno
dimsquerystringno
endquerystringno
StatusDescriptionBody
200okapplication/json AnomalyList
defaulterrorapplication/json Error
bash
curl 'https://api.metrixed.com/v1/partner/insights/anomalies' \
  -H "Authorization: Bearer $DT_API_KEY" \
  -H 'Accept: application/json'

Example 200 response:

json
{}

POST /partner/reports/query

Partner report Partner report. Fields of the report families are namespaced (mobile.retention_d7, skan.installs, lead.accepted, igaming.ngr, calls.qualified_calls) and may be mixed with core fields: each family runs on its own source and rows merge on the shared dimensions; a split a family cannot apply, compare_to or top_n with family fields is refused with 422. With a tree object the response is a ReportTree (docs/06 ยง8): the focused node and its children (expand_depth levels), each node one flat query filtered by its path, so ratios, masks and families hold at every level.

Operation postPartnerReportsQuery. Auth: API key (Bearer) or session cookie.

Request body (application/json, required): ReportQuery

FieldTypeFlagsDescription
fromstringrequired
tostringrequired
timezonestring
currencystring
granularityenum: none, minute, hour, day, week, month, quarter, year
dimensionsarray of string
metricsarray of string
filtersarray of object
metric_filtersarray of object
sortarray of object (free-form)
limitinteger
cursorstring
optionsobject (free-form)remove_zero_rows, ignore_fail_traffic, only_fail_traffic, include_on_hold, status_scope, compare_to previous_period|previous_year, attribution_date click|conversion, date_basis conversion_date|click_date, use_current_rates
top_nintegerfirst N rows by the sort plus one (other) row
viewobject (free-form)report builder presentation state saved with a report (date preset, chart, column order); ignored by the engine
treeReportTreeSpec
StatusDescriptionBody
200okapplication/json ReportResult or ReportTree
defaulterrorapplication/json Error
bash
curl -X POST 'https://api.metrixed.com/v1/partner/reports/query' \
  -H "Authorization: Bearer $DT_API_KEY" \
  -H 'Accept: application/json' \
  -H 'Content-Type: application/json' \
  --data-raw '{"from":"","to":""}'

Example 200 response:

json
{}

POST /partner/reports/sku

Partner portal SKU report: own lines and payout (no revenue)

Operation postPartnerReportsSku. Auth: API key (Bearer) or session cookie.

Request body (application/json, required): WP80ReportQuery

FieldTypeFlagsDescription
fromstringrequired
tostringrequired
timezonestring
group_byarray of string
offer_idsarray of string
partner_idsarray of string
skustring
include_testboolean
limitinteger
StatusDescriptionBody
200okapplication/json WP80Report
defaulterrorapplication/json Error
bash
curl -X POST 'https://api.metrixed.com/v1/partner/reports/sku' \
  -H "Authorization: Bearer $DT_API_KEY" \
  -H 'Accept: application/json' \
  -H 'Content-Type: application/json' \
  --data-raw '{"from":"","to":""}'

Example 200 response:

json
{
  "columns": [
    ""
  ],
  "rows": [
    {}
  ],
  "totals_by_currency": {},
  "totals": {}
}

GET /reports/catalog

Report catalogue for the network: dimensions, metrics, groups, presets, filter ops and result contract

Operation getReportsCatalog. Auth: API key (Bearer) or session cookie.

StatusDescriptionBody
200okapplication/json ReportCatalog
defaulterrorapplication/json Error
bash
curl 'https://api.metrixed.com/v1/reports/catalog' \
  -H "Authorization: Bearer $DT_API_KEY" \
  -H 'Accept: application/json'

Example 200 response:

json
{
  "principal": "network",
  "endpoint": "",
  "dimensions": [
    {}
  ],
  "metrics": [
    {}
  ]
}

GET /reports/custom-metrics

Tenant custom metrics (formulas over report metrics)

Operation getReportsCustomMetrics. Auth: API key (Bearer) or session cookie.

StatusDescriptionBody
200okapplication/json CustomMetricList
defaulterrorapplication/json Error
bash
curl 'https://api.metrixed.com/v1/reports/custom-metrics' \
  -H "Authorization: Bearer $DT_API_KEY" \
  -H 'Accept: application/json'

Example 200 response:

json
{
  "rows": [
    {
      "key": "",
      "label": "",
      "formula": ""
    }
  ],
  "has_more": false
}

POST /reports/custom-metrics

Create a custom metric

Operation postReportsCustomMetrics. Auth: API key (Bearer) or session cookie.

Request body (application/json, required): CustomMetric

FieldTypeFlagsDescription
idstringread-only
keystringrequiredcm_<a-z0-9_>; usable in metrics, sort and metric_filters
labelstringrequired
descriptionstring
formulastringrequiredreport metrics with + - * / and parentheses, e.g. (revenue - payout) / clicks
typeenum: integer, money, percent, number
audiencearray of enum: network, partner, advertiser
effective_audiencearray of stringread-only
versionintegerread-only
created_atstring (date-time)read-only
updated_atstring (date-time)read-only
StatusDescriptionBody
201okapplication/json CustomMetric
defaulterrorapplication/json Error
bash
curl -X POST 'https://api.metrixed.com/v1/reports/custom-metrics' \
  -H "Authorization: Bearer $DT_API_KEY" \
  -H 'Accept: application/json' \
  -H 'Content-Type: application/json' \
  --data-raw '{"key":"","label":"","formula":""}'

Example 201 response:

json
{
  "key": "",
  "label": "",
  "formula": ""
}

PATCH /reports/custom-metrics/{id}

Update a custom metric

Operation patchReportsCustomMetricsId. Auth: API key (Bearer) or session cookie.

ParameterInTypeRequiredDescription
idpathstringyes

Request body (application/json, required): CustomMetric

FieldTypeFlagsDescription
idstringread-only
keystringrequiredcm_<a-z0-9_>; usable in metrics, sort and metric_filters
labelstringrequired
descriptionstring
formulastringrequiredreport metrics with + - * / and parentheses, e.g. (revenue - payout) / clicks
typeenum: integer, money, percent, number
audiencearray of enum: network, partner, advertiser
effective_audiencearray of stringread-only
versionintegerread-only
created_atstring (date-time)read-only
updated_atstring (date-time)read-only
StatusDescriptionBody
200okapplication/json CustomMetric
defaulterrorapplication/json Error
bash
curl -X PATCH 'https://api.metrixed.com/v1/reports/custom-metrics/<id>' \
  -H "Authorization: Bearer $DT_API_KEY" \
  -H 'Accept: application/json' \
  -H 'Content-Type: application/json' \
  --data-raw '{"key":"","label":"","formula":""}'

Example 200 response:

json
{
  "key": "",
  "label": "",
  "formula": ""
}

DELETE /reports/custom-metrics/{id}

Delete a custom metric

Operation deleteReportsCustomMetricsId. Auth: API key (Bearer) or session cookie.

ParameterInTypeRequiredDescription
idpathstringyes
StatusDescriptionBody
204okapplication/json Ok
defaulterrorapplication/json Error
bash
curl -X DELETE 'https://api.metrixed.com/v1/reports/custom-metrics/<id>' \
  -H "Authorization: Bearer $DT_API_KEY" \
  -H 'Accept: application/json'

Example 204 response:

json
{
  "ok": false
}

POST /reports/export

Async export

Operation postReportsExport. Auth: API key (Bearer) or session cookie.

Request body (application/json, required): ExportRequest

FieldTypeFlagsDescription
queryReportQuery
logLogSearchRequest
formatenum: csv, tsv, xlsx, json, parquet
notify_emailstring
labelsboolean
StatusDescriptionBody
202okapplication/json Job
defaulterrorapplication/json Error
bash
curl -X POST 'https://api.metrixed.com/v1/reports/export' \
  -H "Authorization: Bearer $DT_API_KEY" \
  -H 'Accept: application/json' \
  -H 'Content-Type: application/json' \
  --data-raw '{"query":{"from":"","to":""},"log":{},"format":"csv","notify_email":""}'

Example 202 response:

json
{
  "external_ref": ""
}

GET /reports/export/{id}

Report export job status and download link

Operation getReportsExportId. Auth: API key (Bearer) or session cookie.

ParameterInTypeRequiredDescription
idpathstringyes
StatusDescriptionBody
200okapplication/json ExportStatus
defaulterrorapplication/json Error
bash
curl 'https://api.metrixed.com/v1/reports/export/<id>' \
  -H "Authorization: Bearer $DT_API_KEY" \
  -H 'Accept: application/json'

Example 200 response:

json
{
  "job_id": "",
  "status": "queued",
  "progress": 0,
  "kind": ""
}

POST /reports/fail-traffic

Fail-traffic report (WP-80): invalid clicks by originating offer, fail reason and target (target offer, target URL host or the fallback chain) with clicks, unique clicks and the conversions recorded on them

Operation postReportsFailTraffic. Auth: API key (Bearer) or session cookie.

Request body (application/json, required): WP80ReportQuery

FieldTypeFlagsDescription
fromstringrequired
tostringrequired
timezonestring
group_byarray of string
offer_idsarray of string
partner_idsarray of string
skustring
include_testboolean
limitinteger
StatusDescriptionBody
200okapplication/json WP80Report
defaulterrorapplication/json Error
bash
curl -X POST 'https://api.metrixed.com/v1/reports/fail-traffic' \
  -H "Authorization: Bearer $DT_API_KEY" \
  -H 'Accept: application/json' \
  -H 'Content-Type: application/json' \
  --data-raw '{"from":"","to":""}'

Example 200 response:

json
{
  "columns": [
    ""
  ],
  "rows": [
    {}
  ],
  "totals_by_currency": {},
  "totals": {}
}

POST /reports/funnel

Ad-hoc funnel: clicks through goals, conversions and in-app events in order within a window (ClickHouse windowFunnel); counts per step, share of step 1 and of the previous step, optional breakdown; ?format=csv for the table as CSV

Operation postReportsFunnel. Auth: API key (Bearer) or session cookie.

ParameterInTypeRequiredDescription
formatqueryenum: json, csvno

Request body (application/json, required): FunnelQuery

FieldTypeFlagsDescription
fromstring (date)required
tostring (date)required
timezonestring
window_hoursinteger
breakdownenum: offer, partner, advertiser, country, device_type, os, source, sub1
filtersarray of object (free-form)
limitinteger
stepsarray of object (free-form)required
StatusDescriptionBody
200okapplication/json FunnelResult
defaulterrorapplication/json Error
bash
curl -X POST 'https://api.metrixed.com/v1/reports/funnel' \
  -H "Authorization: Bearer $DT_API_KEY" \
  -H 'Accept: application/json' \
  -H 'Content-Type: application/json' \
  --data-raw '{"from":"","to":"","steps":[{}]}'

Example 200 response:

json
{
  "steps": [
    {}
  ],
  "total": {},
  "rows": [
    {}
  ],
  "breakdown": ""
}

POST /reports/mobile

Mobile report by install-date cohort (installs, reattributions, sessions, retention dN, ARPU, LTV)

Operation postReportsMobile. Auth: API key (Bearer) or session cookie.

Request body (application/json, required): MobileQuery

FieldTypeFlagsDescription
fromstring (date)required
tostring (date)required
dimensionsarray of enum: app, app_id, platform, partner, partner_id, offer, country, install_date, match_type, install_kind
metricsarray of string
filtersarray of object (free-form)
sortarray of object (free-form)
limitinteger
daysarray of integer
cohort_bystring
cohort_kindenum: retention, ltv, active
StatusDescriptionBody
200okapplication/json ReportResult
defaulterrorapplication/json Error
bash
curl -X POST 'https://api.metrixed.com/v1/reports/mobile' \
  -H "Authorization: Bearer $DT_API_KEY" \
  -H 'Accept: application/json' \
  -H 'Content-Type: application/json' \
  --data-raw '{"from":"","to":""}'

Example 200 response:

json
{
  "columns": [
    {}
  ],
  "rows": [
    [
      {}
    ]
  ],
  "totals": {},
  "next_cursor": ""
}

POST /reports/mobile/cohorts

Cohort grid: retention / LTV / active users per day since install

Operation postReportsMobileCohorts. Auth: API key (Bearer) or session cookie.

Request body (application/json, required): MobileQuery

FieldTypeFlagsDescription
fromstring (date)required
tostring (date)required
dimensionsarray of enum: app, app_id, platform, partner, partner_id, offer, country, install_date, match_type, install_kind
metricsarray of string
filtersarray of object (free-form)
sortarray of object (free-form)
limitinteger
daysarray of integer
cohort_bystring
cohort_kindenum: retention, ltv, active
StatusDescriptionBody
200okapplication/json CohortResult
defaulterrorapplication/json Error
bash
curl -X POST 'https://api.metrixed.com/v1/reports/mobile/cohorts' \
  -H "Authorization: Bearer $DT_API_KEY" \
  -H 'Accept: application/json' \
  -H 'Content-Type: application/json' \
  --data-raw '{"from":"","to":""}'

Example 200 response:

json
{
  "kind": "",
  "days": [
    0
  ],
  "columns": [
    {}
  ],
  "rows": [
    [
      {}
    ]
  ]
}

POST /reports/query

Entity/aggregate report Entity/aggregate report. Fields of the report families are namespaced (mobile.retention_d7, skan.installs, lead.accepted, igaming.ngr, calls.qualified_calls) and may be mixed with core fields: each family runs on its own source and rows merge on the shared dimensions; a split a family cannot apply, compare_to or top_n with family fields is refused with 422. With a tree object the response is a ReportTree (docs/06 ยง8): the focused node and its children (expand_depth levels), each node one flat query filtered by its path, so ratios, masks and families hold at every level.

Operation postReportsQuery. Auth: API key (Bearer) or session cookie.

Request body (application/json, required): ReportQuery

FieldTypeFlagsDescription
fromstringrequired
tostringrequired
timezonestring
currencystring
granularityenum: none, minute, hour, day, week, month, quarter, year
dimensionsarray of string
metricsarray of string
filtersarray of object
metric_filtersarray of object
sortarray of object (free-form)
limitinteger
cursorstring
optionsobject (free-form)remove_zero_rows, ignore_fail_traffic, only_fail_traffic, include_on_hold, status_scope, compare_to previous_period|previous_year, attribution_date click|conversion, date_basis conversion_date|click_date, use_current_rates
top_nintegerfirst N rows by the sort plus one (other) row
viewobject (free-form)report builder presentation state saved with a report (date preset, chart, column order); ignored by the engine
treeReportTreeSpec
StatusDescriptionBody
200okapplication/json ReportResult or ReportTree
defaulterrorapplication/json Error
bash
curl -X POST 'https://api.metrixed.com/v1/reports/query' \
  -H "Authorization: Bearer $DT_API_KEY" \
  -H 'Accept: application/json' \
  -H 'Content-Type: application/json' \
  --data-raw '{"from":"","to":""}'

Example 200 response:

json
{}

GET /reports/saved

Saved reports

Operation getReportsSaved. Auth: API key (Bearer) or session cookie.

ParameterInTypeRequiredDescription
pagequeryintegerno
page_sizequeryintegerno
sortquerystringnofield or -field
includequerystringnocomma-separated relationships
filterqueryobject (free-form)no
qquerystringnofree-text search
StatusDescriptionBody
200okapplication/json LogSearchResult
defaulterrorapplication/json Error
bash
curl 'https://api.metrixed.com/v1/reports/saved?page=1&page_size=50' \
  -H "Authorization: Bearer $DT_API_KEY" \
  -H 'Accept: application/json'

Example 200 response:

json
{
  "rows": [
    {}
  ],
  "next_cursor": "",
  "has_more": false
}

POST /reports/saved

Save report

Operation postReportsSaved. Auth: API key (Bearer) or session cookie.

Request body (application/json, required): SavedReport

FieldTypeFlagsDescription
idstringread-only
display_idintegerread-only
hash_idstringread-only
external_refstring
custom_fieldsobject (free-form)tenant-defined fields
versionintegerread-only
created_atstring (date-time)read-only
updated_atstring (date-time)read-only
deleted_atstring (date-time)read-only
namestring
queryReportQuery
is_sharedboolean
descriptionstring
visibilityenum: private, team
pinnedboolean
owner_user_idstringread-only
principal_typeenum: network, partner, advertiserread-only
StatusDescriptionBody
201okapplication/json SavedReport
defaulterrorapplication/json Error
bash
curl -X POST 'https://api.metrixed.com/v1/reports/saved' \
  -H "Authorization: Bearer $DT_API_KEY" \
  -H 'Accept: application/json' \
  -H 'Content-Type: application/json' \
  --data-raw '{"external_ref":""}'

Example 201 response:

json
{
  "external_ref": ""
}

GET /reports/saved/{id}

Get a saved report

Operation getReportsSavedId. Auth: API key (Bearer) or session cookie.

ParameterInTypeRequiredDescription
idpathstringyes
StatusDescriptionBody
200okapplication/json SavedReport
defaulterrorapplication/json Error
bash
curl 'https://api.metrixed.com/v1/reports/saved/<id>' \
  -H "Authorization: Bearer $DT_API_KEY" \
  -H 'Accept: application/json'

Example 200 response:

json
{
  "external_ref": ""
}

PATCH /reports/saved/{id}

Update a saved report (name, query, visibility, pinned)

Operation patchReportsSavedId. Auth: API key (Bearer) or session cookie.

ParameterInTypeRequiredDescription
idpathstringyes

Request body (application/json, required): SavedReport

FieldTypeFlagsDescription
idstringread-only
display_idintegerread-only
hash_idstringread-only
external_refstring
custom_fieldsobject (free-form)tenant-defined fields
versionintegerread-only
created_atstring (date-time)read-only
updated_atstring (date-time)read-only
deleted_atstring (date-time)read-only
namestring
queryReportQuery
is_sharedboolean
descriptionstring
visibilityenum: private, team
pinnedboolean
owner_user_idstringread-only
principal_typeenum: network, partner, advertiserread-only
StatusDescriptionBody
200okapplication/json SavedReport
defaulterrorapplication/json Error
bash
curl -X PATCH 'https://api.metrixed.com/v1/reports/saved/<id>' \
  -H "Authorization: Bearer $DT_API_KEY" \
  -H 'Accept: application/json' \
  -H 'Content-Type: application/json' \
  --data-raw '{"external_ref":""}'

Example 200 response:

json
{
  "external_ref": ""
}

GET /reports/schedules

List ReportSchedules

Operation getReportsSchedules. Auth: API key (Bearer) or session cookie.

ParameterInTypeRequiredDescription
pagequeryintegerno
page_sizequeryintegerno
sortquerystringnofield or -field
includequerystringnocomma-separated relationships
filterqueryobject (free-form)no
qquerystringnofree-text search
StatusDescriptionBody
200okapplication/json ReportScheduleList
defaulterrorapplication/json Error
bash
curl 'https://api.metrixed.com/v1/reports/schedules?page=1&page_size=50' \
  -H "Authorization: Bearer $DT_API_KEY" \
  -H 'Accept: application/json'

Example 200 response:

json
{
  "data": [
    {}
  ],
  "page": {}
}

POST /reports/schedules

Create ReportSchedule

Operation postReportsSchedules. Auth: API key (Bearer) or session cookie.

Request body (application/json, required): ReportScheduleCreate

FieldTypeFlagsDescription
namestringrequired
cronstringrequired
timezonestring
reportobject (free-form)requiredPOST /reports/export body (query|log); dates may use {{today}} {{yesterday}} {{7d_ago}} {{30d_ago}} {{month_start}}
recipientsarray of string
formatenum: csv, tsv, json
statusenum: active, paused
StatusDescriptionBody
201okapplication/json ReportSchedule
defaulterrorapplication/json Error
bash
curl -X POST 'https://api.metrixed.com/v1/reports/schedules' \
  -H "Authorization: Bearer $DT_API_KEY" \
  -H 'Accept: application/json' \
  -H 'Content-Type: application/json' \
  --data-raw '{"name":"","cron":"","report":{}}'

Example 201 response:

json
{
  "external_ref": ""
}

GET /reports/schedules/{id}

Get ReportSchedule

Operation getReportsSchedulesId. Auth: API key (Bearer) or session cookie.

ParameterInTypeRequiredDescription
idpathstringyes
StatusDescriptionBody
200okapplication/json ReportSchedule
defaulterrorapplication/json Error
bash
curl 'https://api.metrixed.com/v1/reports/schedules/<id>' \
  -H "Authorization: Bearer $DT_API_KEY" \
  -H 'Accept: application/json'

Example 200 response:

json
{
  "external_ref": ""
}

PATCH /reports/schedules/{id}

Update ReportSchedule

Operation patchReportsSchedulesId. Auth: API key (Bearer) or session cookie.

ParameterInTypeRequiredDescription
idpathstringyes

Request body (application/json, required): ReportScheduleUpdate

FieldTypeFlagsDescription
namestring
cronstring
timezonestring
reportobject (free-form)POST /reports/export body (query|log); dates may use {{today}} {{yesterday}} {{7d_ago}} {{30d_ago}} {{month_start}}
recipientsarray of string
formatenum: csv, tsv, json
statusenum: active, paused
StatusDescriptionBody
200okapplication/json ReportSchedule
defaulterrorapplication/json Error
bash
curl -X PATCH 'https://api.metrixed.com/v1/reports/schedules/<id>' \
  -H "Authorization: Bearer $DT_API_KEY" \
  -H 'Accept: application/json' \
  -H 'Content-Type: application/json' \
  --data-raw '{"name":"","cron":"","timezone":"","report":{}}'

Example 200 response:

json
{
  "external_ref": ""
}

DELETE /reports/schedules/{id}

Delete ReportSchedule

Operation deleteReportsSchedulesId. Auth: API key (Bearer) or session cookie.

ParameterInTypeRequiredDescription
idpathstringyes
StatusDescriptionBody
204okapplication/json Ok
defaulterrorapplication/json Error
bash
curl -X DELETE 'https://api.metrixed.com/v1/reports/schedules/<id>' \
  -H "Authorization: Bearer $DT_API_KEY" \
  -H 'Accept: application/json'

Example 204 response:

json
{
  "ok": false
}

POST /reports/schedules/bulk/apply

Bulk edit apply

Operation postReportsSchedulesBulkApply. Auth: API key (Bearer) or session cookie.

Request body (application/json, required): BulkPatch

FieldTypeFlagsDescription
idsarray of stringrequired
patchesarray of objectrequired
StatusDescriptionBody
200okapplication/json BulkPreview
defaulterrorapplication/json Error
bash
curl -X POST 'https://api.metrixed.com/v1/reports/schedules/bulk/apply' \
  -H "Authorization: Bearer $DT_API_KEY" \
  -H 'Accept: application/json' \
  -H 'Content-Type: application/json' \
  --data-raw '{"ids":[""],"patches":[{"field":"","value":{}}]}'

Example 200 response:

json
{
  "affected": 0,
  "changes": [
    {}
  ],
  "warnings": [
    ""
  ],
  "token": ""
}

POST /reports/schedules/bulk/preview

Bulk edit preview

Operation postReportsSchedulesBulkPreview. Auth: API key (Bearer) or session cookie.

Request body (application/json, required): BulkPatch

FieldTypeFlagsDescription
idsarray of stringrequired
patchesarray of objectrequired
StatusDescriptionBody
200okapplication/json BulkPreview
defaulterrorapplication/json Error
bash
curl -X POST 'https://api.metrixed.com/v1/reports/schedules/bulk/preview' \
  -H "Authorization: Bearer $DT_API_KEY" \
  -H 'Accept: application/json' \
  -H 'Content-Type: application/json' \
  --data-raw '{"ids":[""],"patches":[{"field":"","value":{}}]}'

Example 200 response:

json
{
  "affected": 0,
  "changes": [
    {}
  ],
  "warnings": [
    ""
  ],
  "token": ""
}

POST /reports/schedules/search

Search ReportSchedules (advanced)

Operation postReportsSchedulesSearch. Auth: API key (Bearer) or session cookie.

Request body (application/json, required): SearchRequest

FieldTypeFlagsDescription
filtersarray of object
searchstring
sortarray of object (free-form)
pageinteger
page_sizeinteger
includearray of string
StatusDescriptionBody
200okapplication/json ReportScheduleList
defaulterrorapplication/json Error
bash
curl -X POST 'https://api.metrixed.com/v1/reports/schedules/search' \
  -H "Authorization: Bearer $DT_API_KEY" \
  -H 'Accept: application/json' \
  -H 'Content-Type: application/json' \
  --data-raw '{"filters":[{}],"search":"","sort":[{}],"page":0}'

Example 200 response:

json
{
  "data": [
    {}
  ],
  "page": {}
}

GET /reports/sheets-schema

Dimensions + metrics selectable in /reports/query (used by the Google Sheets add-on and Looker Studio connector)

Operation getReportsSheetsSchema. Auth: API key (Bearer) or session cookie.

StatusDescriptionBody
200okapplication/json SheetsSchema
defaulterrorapplication/json Error
bash
curl 'https://api.metrixed.com/v1/reports/sheets-schema' \
  -H "Authorization: Bearer $DT_API_KEY" \
  -H 'Accept: application/json'

Example 200 response:

json
{
  "dimensions": [
    {}
  ],
  "metrics": [
    {}
  ],
  "granularities": [
    ""
  ],
  "endpoint": ""
}

POST /reports/skan

SKAN / AdAttributionKit report (verified installs, CV distribution, estimated revenue; dimension event array-joins decoded events)

Operation postReportsSkan. Auth: API key (Bearer) or session cookie.

Request body (application/json, required): MobileQuery

FieldTypeFlagsDescription
fromstring (date)required
tostring (date)required
dimensionsarray of enum: app, app_id, platform, partner, partner_id, offer, country, install_date, match_type, install_kind
metricsarray of string
filtersarray of object (free-form)
sortarray of object (free-form)
limitinteger
daysarray of integer
cohort_bystring
cohort_kindenum: retention, ltv, active
StatusDescriptionBody
200okapplication/json ReportResult
defaulterrorapplication/json Error
bash
curl -X POST 'https://api.metrixed.com/v1/reports/skan' \
  -H "Authorization: Bearer $DT_API_KEY" \
  -H 'Accept: application/json' \
  -H 'Content-Type: application/json' \
  --data-raw '{"from":"","to":""}'

Example 200 response:

json
{
  "columns": [
    {}
  ],
  "rows": [
    [
      {}
    ]
  ],
  "totals": {},
  "next_cursor": ""
}

POST /reports/sku

SKU report (WP-80): SKU lines of conversions priced per SKU with their current status: lines, conversions, quantity, sale amount, approved / pending / rejected payout and revenue, per SKU and currency (optionally per offer, partner, day)

Operation postReportsSku. Auth: API key (Bearer) or session cookie.

Request body (application/json, required): WP80ReportQuery

FieldTypeFlagsDescription
fromstringrequired
tostringrequired
timezonestring
group_byarray of string
offer_idsarray of string
partner_idsarray of string
skustring
include_testboolean
limitinteger
StatusDescriptionBody
200okapplication/json WP80Report
defaulterrorapplication/json Error
bash
curl -X POST 'https://api.metrixed.com/v1/reports/sku' \
  -H "Authorization: Bearer $DT_API_KEY" \
  -H 'Accept: application/json' \
  -H 'Content-Type: application/json' \
  --data-raw '{"from":"","to":""}'

Example 200 response:

json
{
  "columns": [
    ""
  ],
  "rows": [
    {}
  ],
  "totals_by_currency": {},
  "totals": {}
}

POST /reports/summary

Summary totals

Operation postReportsSummary. Auth: API key (Bearer) or session cookie.

Request body (application/json, required): ReportQuery

FieldTypeFlagsDescription
fromstringrequired
tostringrequired
timezonestring
currencystring
granularityenum: none, minute, hour, day, week, month, quarter, year
dimensionsarray of string
metricsarray of string
filtersarray of object
metric_filtersarray of object
sortarray of object (free-form)
limitinteger
cursorstring
optionsobject (free-form)remove_zero_rows, ignore_fail_traffic, only_fail_traffic, include_on_hold, status_scope, compare_to previous_period|previous_year, attribution_date click|conversion, date_basis conversion_date|click_date, use_current_rates
top_nintegerfirst N rows by the sort plus one (other) row
viewobject (free-form)report builder presentation state saved with a report (date preset, chart, column order); ignored by the engine
treeReportTreeSpec
StatusDescriptionBody
200okapplication/json ReportResult
defaulterrorapplication/json Error
bash
curl -X POST 'https://api.metrixed.com/v1/reports/summary' \
  -H "Authorization: Bearer $DT_API_KEY" \
  -H 'Accept: application/json' \
  -H 'Content-Type: application/json' \
  --data-raw '{"from":"","to":""}'

Example 200 response:

json
{
  "columns": [
    {}
  ],
  "rows": [
    [
      {}
    ]
  ],
  "totals": {},
  "next_cursor": ""
}

POST /reports/variance

Variance report

Operation postReportsVariance. Auth: API key (Bearer) or session cookie.

Request body (application/json, required): ReportQuery

FieldTypeFlagsDescription
fromstringrequired
tostringrequired
timezonestring
currencystring
granularityenum: none, minute, hour, day, week, month, quarter, year
dimensionsarray of string
metricsarray of string
filtersarray of object
metric_filtersarray of object
sortarray of object (free-form)
limitinteger
cursorstring
optionsobject (free-form)remove_zero_rows, ignore_fail_traffic, only_fail_traffic, include_on_hold, status_scope, compare_to previous_period|previous_year, attribution_date click|conversion, date_basis conversion_date|click_date, use_current_rates
top_nintegerfirst N rows by the sort plus one (other) row
viewobject (free-form)report builder presentation state saved with a report (date preset, chart, column order); ignored by the engine
treeReportTreeSpec
StatusDescriptionBody
200okapplication/json ReportResult
defaulterrorapplication/json Error
bash
curl -X POST 'https://api.metrixed.com/v1/reports/variance' \
  -H "Authorization: Bearer $DT_API_KEY" \
  -H 'Accept: application/json' \
  -H 'Content-Type: application/json' \
  --data-raw '{"from":"","to":""}'

Example 200 response:

json
{
  "columns": [
    {}
  ],
  "rows": [
    [
      {}
    ]
  ],
  "totals": {},
  "next_cursor": ""
}