Skip to main content
POST /api/v2/buyer/campaigns Creates a campaign in DRAFT status for the given advertiser. You set flight dates, budget, and campaign type up front; products, creatives, and audiences attach afterward. Execute the campaign later to turn it into live media buys.

Request

curl -X POST https://api.interchange.io/api/v2/buyer/campaigns \
  -H "Authorization: Bearer $SCOPE3_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "advertiserId": 12345,
    "name": "Q2 2026 Tech Launch",
    "campaignType": "DECISIONED",
    "flightDates": { "startDate": "2026-05-15T00:00:00Z", "endDate": "2026-07-15T23:59:59Z" },
    "budget": { "total": 100000, "currency": "USD", "pacing": "EVEN" },
    "brief": "Premium video for tech-savvy professionals",
    "constraints": {
      "channels": ["ctv", "video"],
      "geo_countries": ["US", "CA"],
      "geo_metros": [{ "system": "nielsen_dma", "values": ["501", "803"] }],
      "language": ["en"]
    }
  }'

Parameters

FieldTypeRequiredNotes
advertiserIdnumberYesOwning advertiser
namestringYesCampaign name (max 255)
campaignTypeenumYesDECISIONED or ROUTED. Immutable after creation
flightDatesobjectYes{ startDate, endDate }, ISO 8601 dates
budgetobjectYes{ total, currency?, dailyCap?, pacing? }. currency defaults to the advertiser’s primary currency when omitted. pacing is EVEN, ASAP, or FRONTLOADED
briefstringNoFree-text plan brief used to guide product selection
constraintsobjectNochannels filter plus AdCP targeting overlay: geo_countries, geo_metros, language
pacingPeriodsobjectNoTime-windowed pacing. mode is weight or budget; periods[] each carry label, start, end, and weight (weight mode)

Response

{
  "campaign": {
    "campaignId": "cmp_987654321",
    "advertiserId": "12345",
    "name": "Q2 2026 Tech Launch",
    "status": "DRAFT",
    "campaignType": "DECISIONED",
    "flightDates": { "startDate": "2026-05-15T00:00:00Z", "endDate": "2026-07-15T23:59:59Z" },
    "budget": { "total": 100000, "currency": "USD", "pacing": "EVEN" },
    "optimizationApplyMode": "MANUAL",
    "createdAt": "2026-05-01T09:00:00Z",
    "updatedAt": "2026-05-01T09:00:00Z"
  }
}
The campaign is created in status: "DRAFT". campaign.campaignId is the stable identifier you pass to every sibling operation. campaignType cannot be changed later. When the request included a discoveryId, the response also carries productGroups, budgetContext, and summary from the discovery session.

Errors

  • 400 VALIDATION_ERROR — missing required field, malformed flightDates, or non-positive budget.total.
  • 404 NOT_FOUNDadvertiserId does not exist or is not visible to the authenticated customer.
See Errors for the full error contract.

Campaign tasks

All campaign operations

Campaign overview

Fields, lifecycle, and concepts

Auto-select products

Populate a DECISIONED campaign

Execute campaign

Launch into media buys