Added

API Updates - February 2026

Campaign Performance API

Per-Campaign Performance

A new endpoint returns detailed performance metrics for a single campaign.

GET /api/v1/campaigns/{id}/performance

Path parameters:

ParameterTypeRequiredDescription
idstringYesCampaign ID

Response (200 OK):

{
  "campaign_id": "cmp_abc123",
  "metrics": {
    "impressions": 125000,
    "clicks": 4200,
    "spend": 1250.50,
    "ctr": 0.0336,
    "cpm": 10.00
  },
  "daily": [
    {
      "date": "2026-02-01",
      "impressions": 4200,
      "clicks": 140,
      "spend": 42.00
    }
  ]
}

Per-Campaign Budget Status

GET /api/v1/campaigns/{id}/budget-status

Returns budget utilization, remaining spend, and pacing health for a single campaign.

Project-Wide Performance and Budget Summaries

Two new aggregation endpoints return performance and budget data across all campaigns in the current project, with server-side pagination.

GET /api/v1/campaigns/performance-summary
GET /api/v1/campaigns/budget-summary

Export API

records_duplicated Field on Export Runs

Export run responses now include a dedicated records_duplicated field that distinguishes records skipped as duplicates from records that failed.

Updated response shape (additive):

{
  "run_id": "run_abc123",
  "records_total": 5000,
  "records_exported": 4750,
  "records_failed": 50,
  "records_duplicated": 200
}

The total reconciliation now reads as records_total = records_exported + records_failed + records_duplicated. Existing integrations that ignore this field will continue to work without changes.

IP Address and Company Domain as DSP Output Formats

DSP destinations now accept ip_address and company_domain as valid export output formats, enabling IP-based and domain-based targeting workflows.

POST /api/v1/exports

Both formats are validated when creating or updating an export.

Salesforce and HubSpot as Valid Integration Types

The export validation gate now accepts salesforce and hubspot as valid integration_type values when creating exports against these CRM destinations.


List Imports

Async List Import Pipeline

List uploads now process asynchronously through a job queue. Clients can poll the import job status to track progress, and large files no longer block the request thread.

Behavior changes:

  • Multi-million-record imports complete significantly faster.
  • Newly uploaded values are inserted in bulk.
  • Previously-deactivated values that reappear in a fresh upload are reactivated rather than recreated, preserving their original IDs.

No client API changes are required. Expect import jobs to return faster and to expose progress via the existing import job status endpoint.


Audience Task Status Endpoint

A new endpoint lets you check the current task status of an audience without triggering billing. Useful for verifying audience readiness before attempting a large download or streaming export.

GET /api/v1/audiences/{id}/status

Response (200 OK):

{
  "id": "aud_abc123",
  "status": "completed",
  "updated_at": "2026-02-17T14:30:00Z"
}

Status values:

  • pending - Audience is queued but not yet processing
  • unloading - Audience export/processing is in progress
  • completed - Audience is ready
  • failed - Audience processing failed

Unlike the download endpoint, this endpoint does not trigger billing and is safe to poll at reasonable intervals when orchestrating downstream jobs.


Bug Fixes

  • Multi-level subdomains rejected by domain validation. Fixed domain validation in the events and export APIs rejecting multi-level subdomains (e.g., app.staging.example.com).
  • OAuth Slack integrations rejected. Fixed Slack integrations created via the OAuth flow being rejected when no inline credentials were provided. The OAuth handshake now correctly supplies them.
  • Inactive vs missing pixel error. Fixed pixel-scoped queries returning the same generic error for inactive pixels and missing pixels. The two cases are now distinguished in the error response.
  • 401 on topics stats endpoint. Fixed a 401 Unauthorized error returned by the topics stats endpoint when the request context was missing project headers.
  • Credential decryption on test connections. Fixed a credential decryption issue affecting integration test connections.