Performance Reporting
Learn about the structure and delivery of our Insights and Performance Metrics with our Reporting APIs
Quick Links:
🚀 Try the API → Jump straight into testing the Merchant Performance Reporting endpoint.
📖 View Complete API Reference → Explore all endpoints, schemas, and examples.
Abstract
The Reporting API facilitates the structured request for partner demand performance metrics, supporting HTTP REST protocols. The API defines a clear schema requesting for metrics with a specified list of filtering criteria.
This document outlines the use of a REST API to pull reporting metric data.
Partners interact with the API by sending POST requests to make a reporting query for performance metric results that can be filtered by a date range and by the partner's self-provided merchant ID and optional offer IDs; same IDs used from when submitting merchants and offers as part of the ingestion integration process. The system enforces daily call quotas and requests-per-second (RPS) limits, returning HTTP 429 on quota violations.
The document includes endpoint details and emphasizes that proper usage ensures timely reports.
Purpose
- Reporting API that partners can invoke to get the performance metrics for their running merchants and offers
- Partners can invoke this API to access detailed reporting for a specified date range.
How It Works
- We provide a REST API to make it easier to provide near real-time reporting metrics.
Please keep the following in mind:
- One merchant ID supported per request at a time.
- Date range filter cannot exceed more than 2 years back.
- Most offer engagement event data (e.g. impressions, activations) have an hour delay for data completeness.
- Most spend-related data (e.g. purchases) can have up to 7 days delay for data completeness due to a lag time in data delivery from some publishers.
Recommendations on how to call
- Partner begins with calling Reporting endpoint “POST
/api/v1/partner/merchants/{external_merchant_id}/reports
one merchant at a time within the limits of the RPS. - From the merchant offers provided, Cardlytics will handle aggregating data across all running continuous engagement based campaign flights with various redemption windows ranging from 30-45 days.
Important: Because offers running on our network across our supply are activatable card-linked offers, we are obligated to our consumers who activated to retain the offers until redemption expiry. When a Partner sends a signal to "take down" or delete a merchant offer, note that for any customer that activates the offer, it will continue to be valid and paid out for redemption until the remaining 30-45 day redemption period winds down. For these reasons, you may still see serves, activations, and other events for those dates post merchant offer deletion.
Guard Rails
- Every Partner will be provided with a daily quota of the number of calls they can make, this should be ~ Number of merchant offers
- Every Partner will be provided with an RPS, for example, 10 calls per second
- API will return HTTP 429 if a Partner exceeds the quota of the daily limit or RPS
Endpoint Details
Get merchant performance report for specified partner self-provided merchant ID and date range
Hostname (Production) | api.cardlytics.com |
---|---|
Hostname (Sandbox) | api-sandbox.cardlytics.com |
Endpoint | /api/v1/partner/merchants/{external_merchant_id}/reports |
Method | POST |
Content-Type | application/json |
Request Payload | Request Schema and Payload Sample |
Response | Response Schema and Payload Sample |
Field Names | Field Name Definitions |
Request Schema
Field | Data Type | Required | Notes |
---|---|---|---|
cube | String | No | Reporting cube type to request. At this time we only support "merchant_performance" cube, which is the default. |
offerIds | Array of Strings | No | Partner’s optional field to filter based on offer IDs under a merchant. This is optional, and simply not providing it will fetch all metric data across all offers under a merchant. |
timeRange.from | String | No | String date format: YYYY-MM-DD indicating the start date to filter from. Note: this cannot be greater than 2 year back-- also the default value if not provided. |
timeRange.to | String | No | String date format: YYYY-MM-DD indicating the end date to filter from. Default is today's date if not provided. |
Request Payload Sample
{
"cube": "merchant_performance",
"offerIds": [],
"timeRange": {
"from": "2023-10-01",
"to": "2025-09-17"
}
}
Response Schema
Field | Data Type | Notes |
---|---|---|
header.cube | String | Reporting cube type requested. At this time we only support "merchant_performance" cube, which is the default. |
header.fields | Array of Objects | The list of header fields representing the "CSV" header row with human readable field name and a field type. |
header.fields.fieldName | String | Human readable field name for the metric. Please refer to the following field name definitions glossary here |
header.fields.fieldType | String | Field type of the metric ("DIM" or "FACT" indicating dimension or fact field respectively). |
rows | Array of Objects | The list of rows representing the "CSV" data content rows. |
rows.[i] | Array of Objects | Each row of data indicated as an array of cells either in number or string format lining up to the number of header fields. |
Response Payload Sample
{
"header": {
"cube": "merchant_performance",
"fields": [
{
"fieldName": "Partner Merchant Id",
"fieldType": "DIM"
},
{
"fieldName": "Partner Offer Id",
"fieldType": "DIM"
},
{
"fieldName": "Impressions",
"fieldType": "FACT"
},
{
"fieldName": "Purchases",
"fieldType": "FACT"
},
{
"fieldName": "Revenue",
"fieldType": "FACT"
},
{
"fieldName": "Reach",
"fieldType": "FACT"
},
{
"fieldName": "Activations",
"fieldType": "FACT"
}
]
},
"rows": [
[
"88d4d968-e922-sample-partner-merchant-id-f32a0eaa43ff",
"2e1fd66d-72d7-sample-partner-offer-id-af82-b4bfd0aaa7ac",
280568,
14,
714.87,
172472,
8005
],
[
"88d4d968-e922-sample-partner-merchant-id-f32a0eaa43ff",
"5555d66d-72d7-sample-partner-offer-id-af82-343430aaa7ac",
100568,
08,
14.22,
2472,
807
]
]
}
Field Name Definitions
Field Name | Definition | Data Completeness SLA |
---|---|---|
Partner Merchant Id | ID of a specific merchant. Same ID originally provided by the partner during merchant ingestion. | N/A |
Partner Offer Id | ID of a specific offer for the merchant. Same ID originally provided by the partner during offer ingestion. | N/A |
Reach | Number of users exposed to an ad. | 1 hour |
Impressions | Total number of serves of an offer to all users. | 1 hour |
Activations | Number of users who activated an offer. | 1 hour |
Purchases | Number of purchases made by users who activated an offer (post-engagement). | 7 days |
Revenue | Revenue from purchases by users who activated an offer (post-engagement). | 7 days |
Interactive API TestingReady to test the API? 👉 Visit our Interactive API Reference to try out endpoints with real requests.
Updated 3 days ago