Campaigns
The Campaign object contains the details of the campaign the advertiser would like to run, along with a list of units. It starts out as a proposal, then moves into a booked state once purchased.
The Campaign Object
The campaign can be of 2 types:
Direct
Rtb
In addition to standard data, the campaign object involves three other sub-objects: geography, resolutions, and units. These are detailed below.
Proposal Object
When submitting a campaign you use a proposal object like below
campaign_type: direct | rtb
advertiser_id: integer
start_date: string (Format: MM/DD/YYYY)
end_date: string (Format: MM/DD/YYYY)
target_budget_cents: integer (USD cents)
media_types: array[media_types object] (optional)
placements: array[placements object] (optional)
geographies: array[geography object] (optional)
The Media Types Object
You can call the media type
Expected format:
{
direct_ids: [array of strings],
rtb_ids: [array of strings]
}
The Geography Object
By default the API only supports U.S.-based inventory, but non-U.S. inventory can be included upon request.
The API currently supports three ways of targeting via geography:
Nielsen DMA IDs
U.S. ZIP Codes.
Market IDs
You can use both zip codes and DMAs/Markets in the same request.
This is the expected format for the geography object:
Expected format:
{
dma_ids: [array of integers],
market_ids: [array of integers],
zip_codes: [array of strings]
}
Example:
{
dma_ids: [501, 524], #=> e.g. New York, Atlanta,
market_ids: [737, 686] #=> e.g. New York, Atlanta
zip_codes: ["75225", "90291"]
}
Important: Please note that DMA ids and Market ids are integers and zip codes are strings.
Endpoints
POST /campaigns #=> Create campaign
GET /campaigns/:id #=> Get campaign details
GET /campaigns #=> List campaigns
POST /campaigns/:id/book #=> Book the campaign
Create Campaign
POST /v1/campaigns HTTP/1.1
Host: api.adquick.com
Content-Type: application/json
Accept: */*
Content-Length: 312
{
"campaign_type": "text",
"partner_id": 1,
"advertiser_id": 1,
"start_date": "2025-07-06",
"end_date": "2025-07-06",
"target_budget_cents": 1,
"placements": {
"direct_ids": [
"text"
],
"rtb_ids": [
"text"
]
},
"geographies": {
"dma_ids": [
1
],
"zip_codes": [
"text"
],
"market_ids": [
1
]
},
"media_types": {
"direct_ids": [
"text"
],
"rtb_ids": [
"text"
]
}
}
successful
{
"token": "text",
"campaign_type": "text",
"advertiser_id": 1,
"start_date": "2025-07-06",
"end_date": "2025-07-06",
"target_budget_cents": 1,
"placements": {
"direct_ids": [
"text"
],
"rtb_ids": [
"text"
]
},
"geographies": {
"dma_ids": [
1
],
"zip_codes": [
"text"
],
"market_ids": [
1
]
},
"media_types": {
"direct_ids": [
"text"
],
"rtb_ids": [
"text"
]
}
}
Get Campaign
GET /campaigns/:id
Returns: the full campaign object
List Campaigns
GET /v1/campaigns HTTP/1.1
Host: api.adquick.com
Accept: */*
successful
{
"records": [
{
"token": "text",
"campaign_type": "text",
"advertiser_id": 1,
"start_date": "2025-07-06",
"end_date": "2025-07-06",
"target_budget_cents": 1,
"placements": {
"direct_ids": [
"text"
],
"rtb_ids": [
"text"
]
},
"geographies": {
"dma_ids": [
1
],
"zip_codes": [
"text"
],
"market_ids": [
1
]
},
"media_types": {
"direct_ids": [
"text"
],
"rtb_ids": [
"text"
]
}
}
],
"pagination": {
"current_page": 1,
"next_page": null,
"prev_page": null,
"total_pages": 1,
"total_entries": 1
}
}
GET /campaigns
Expects:
- start_date (optionally filter by start_date greater than or equal to)
- end_date (optionally filter by end_date less than or equal to)
- campaign_type (optionally filter by campaign type, accepts 'rtb' or 'direct')
- status (optionally filter by status)
Date format: YYYY-MM-DD
Returns: paginated array of campaign objects
Book a Campaign
When you book a campaign, in our system we'll execute against the proposed inventory matching your preferences.
POST /campaigns/:id/book
Expects
- id
Returns: the full campaign object of the new booked campaign.
You need to have approved creatives for the campaign in order to book an auction campaign. Our system will automatically match each unit with a matching creative based on the resolution.
You can submit more than one creative per unit and they will automatically alternate.
If there are units that don't have a matching creative resolution, the booking will not be completed and the endpoint and will return a 402
along with the resolutions that are missing.
Last updated