Reports

List campaign performance

Changed on

Every message campaign sent in the period, ranked by attributed revenue, each row carrying the full channel stat block (delivery, engagement, unsubscribes, attribution) scoped to the same period — so period comparisons need no per-campaign detail calls. Zero-revenue sends are listed too, ranked after the revenue rows; at most 100 campaigns are ranked, and a send with no recorded activity at all in the period does not appear.

By default the list serves your newsletters — email and SMS one-time sends. Pass type=flows to instead rank the flow campaigns: the email and SMS messages your automation flows send (flow rows carry no sent_date or audience, and instead name the flow that sends them in flow, so attributing a message to its flow needs no follow-up request). Use /v1/reports/campaigns/{campaign_id} for one campaign's most-clicked links or its lifetime funnel.

Required scope: reports_read

get/reports/campaigns

Request

  • Base URL
    https://api.privy.com/v1
  • Auth
    HTTP bearer

Query parameters

period'last_7_days' | 'last_30_days' | 'last_90_days' | 'this_month' | 'last_month' | 'custom'

The date range to report over, resolved in the account's time zone. Pass custom together with start_date and end_date.

start_datestring date

Inclusive start of a custom period (ISO 8601 date). Required when period=custom, ignored otherwise.

end_datestring date

Inclusive end of a custom period (ISO 8601 date). Required when period=custom, ignored otherwise. Custom periods are capped at 366 days.

type'flows'

Pass flows to rank the messages your flows send instead of newsletters.

channel'email' | 'sms'

Filter by message channel. Works for both newsletters and flow campaigns.

pageinteger

Page number (starts at 1).

per_pageinteger

Campaigns per page. Values above 50 are clamped to 50; omitted or invalid values default to 10.

Headers

Privy-Account-Idstring

Target a subaccount instead of the main connected account. Pass a subaccount id from get_account's subaccounts list. Only direct subaccounts of the connected account are reachable — omit this for the main account itself.

Response

Campaigns ranked by attributed revenue over the resolved period.

Example response

{
  "data": [
    {
      "campaign_id": "kD4qN8wZr1",
      "type": "newsletter",
      "title": "June Restock Announcement",
      "channel": "email",
      "sent_date": "2026-06-18",
      "audience": {
        "included_segments": [
          "Engaged 90d"
        ],
        "excluded_segments": [
          "Recent purchasers"
        ]
      },
      "flow": {
        "id": "0Rqw3Z8",
        "title": "Welcome Series"
      },
      "stats": {
        "sent": {
          "value": 42,
          "unit": "count"
        },
        "delivered": {
          "value": 42,
          "unit": "count"
        },
        "delivery_rate": {
          "value": 42,
          "unit": "count"
        },
        "opened_unique": {
          "value": 42,
          "unit": "count"
        },
        "open_rate": {
          "value": 42,
          "unit": "count"
        },
        "clicked_unique": {
          "value": 42,
          "unit": "count"
        },
        "click_rate": {
          "value": 42,
          "unit": "count"
        },
        "bounced": {
          "value": 42,
          "unit": "count"
        },
        "bounce_rate": {
          "value": 42,
          "unit": "count"
        },
        "spam_reports": {
          "value": 42,
          "unit": "count"
        },
        "unsubscribed": {
          "value": 42,
          "unit": "count"
        },
        "unsubscribe_rate": {
          "value": 42,
          "unit": "count"
        },
        "opted_out": {
          "value": 42,
          "unit": "count"
        },
        "failed": {
          "value": 42,
          "unit": "count"
        },
        "attributed_orders": {
          "value": 42,
          "unit": "count"
        },
        "order_rate": {
          "value": 42,
          "unit": "count"
        },
        "attributed_revenue": {
          "value": 42,
          "unit": "count"
        },
        "average_order_value": {
          "value": 42,
          "unit": "count"
        }
      }
    }
  ],
  "period": {
    "label": "last_30_days",
    "start_date": "2026-06-21",
    "end_date": "2026-07-20"
  },
  "pagination": {
    "page": 1,
    "per_page": 25,
    "total_count": 142,
    "total_pages": 6
  }
}

Changes

    • warning

      added the new forbidden enum value to the / response property for the response status

    • warning

      added the new forbidden enum value to the / response property for the response status

    • warning

      added the new forbidden enum value to the / response property for the response status

    • warning

      added the new forbidden enum value to the / response property for the response status

    • warning

      added the new segment_builder_required enum value to the / response property for the response status

    • warning

      added the new segment_builder_required enum value to the / response property for the response status

    • warning

      added the new segment_builder_required enum value to the / response property for the response status

    • warning

      added the new segment_builder_required enum value to the / response property for the response status

    • info

      endpoint added