Performance Reporting

Learn about the structure and delivery of our Insights and Performance Metrics with our Reporting APIs


📚

Quick Links:

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
MethodPOST
Content-Typeapplication/json
Request PayloadRequest Schema and Payload Sample
ResponseResponse Schema and Payload Sample
Field NamesField Name Definitions

Request Schema

FieldData TypeRequiredNotes
cubeStringNoReporting cube type to request. At this time we only support "merchant_performance" cube, which is the default.
offerIdsArray of StringsNoPartner’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.fromStringNoString 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.toStringNoString 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

FieldData TypeNotes
header.cubeStringReporting cube type requested. At this time we only support "merchant_performance" cube, which is the default.
header.fieldsArray of ObjectsThe list of header fields representing the "CSV" header row with human readable field name and a field type.
header.fields.fieldNameStringHuman readable field name for the metric. Please refer to the following field name definitions glossary here
header.fields.fieldTypeStringField type of the metric ("DIM" or "FACT" indicating dimension or fact field respectively).
rowsArray of ObjectsThe list of rows representing the "CSV" data content rows.
rows.[i]Array of ObjectsEach 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 NameDefinitionData Completeness SLA
Partner Merchant IdID of a specific merchant. Same ID originally provided by the partner during merchant ingestion.N/A
Partner Offer IdID of a specific offer for the merchant. Same ID originally provided by the partner during offer ingestion.N/A
ReachNumber of users exposed to an ad.1 hour
ImpressionsTotal number of serves of an offer to all users.1 hour
ActivationsNumber of users who activated an offer.1 hour
PurchasesNumber of purchases made by users who activated an offer (post-engagement).7 days
RevenueRevenue from purchases by users who activated an offer (post-engagement).7 days

📘

Interactive API Testing

Ready to test the API? 👉 Visit our Interactive API Reference to try out endpoints with real requests.


What’s Next