# Campaign API

## Campaigns

Campaigns are a grouping of bookings and their associated creatives.

### Create a campaign

```
POST /v1/campaigns
```

Creates a new campaign.

**Request body** - `CreateCampaignDto`

<table id="bkmrk-field-type-required-" style="width: 100%; height: 551.6px;"><thead><tr style="height: 46.6px;"><th style="width: 15.9714%; height: 46.6px;">**Field**</th><th style="width: 13.5876%; height: 46.6px;">**Type**</th><th style="width: 10.3703%; height: 46.6px;">**Required**</th><th style="width: 60.0707%; height: 46.6px;">**Description**</th></tr></thead><tbody><tr style="height: 29.8px;"><td style="width: 15.9714%; height: 29.8px;">`name`</td><td style="width: 13.5876%; height: 29.8px;">string</td><td style="width: 10.3703%; height: 29.8px;">Yes</td><td style="width: 60.0707%; height: 29.8px;">Display name of the company.</td></tr><tr style="height: 46.6px;"><td style="width: 15.9714%; height: 46.6px;">`advertiserId`</td><td style="width: 13.5876%; height: 46.6px;">integer</td><td style="width: 10.3703%; height: 46.6px;">No</td><td style="width: 60.0707%; height: 46.6px;">ID of the advertiser/media partner you want to attach to this campaign.</td></tr><tr style="height: 29.8px;"><td style="width: 15.9714%; height: 29.8px;">`brandIds`</td><td style="width: 13.5876%; height: 29.8px;">integer</td><td style="width: 10.3703%; height: 29.8px;">No</td><td style="width: 60.0707%; height: 29.8px;">IDs of the brands you want attached to this campaign.</td></tr><tr style="height: 46.6px;"><td style="width: 15.9714%; height: 46.6px;">`externalKey`</td><td style="width: 13.5876%; height: 46.6px;">string</td><td style="width: 10.3703%; height: 46.6px;">No</td><td style="width: 60.0707%; height: 46.6px;">Your own external reference key.</td></tr><tr style="height: 46.6px;"><td style="width: 15.9714%; height: 46.6px;">`frequencyLimits`</td><td style="width: 13.5876%; height: 46.6px;">integer, string</td><td style="width: 10.3703%; height: 46.6px;">No</td><td style="width: 60.0707%; height: 46.6px;">Frequency limit settings for the campaign.</td></tr><tr style="height: 29.8px;"><td style="width: 15.9714%; height: 29.8px;">`- amount`</td><td style="width: 13.5876%; height: 29.8px;">integer</td><td style="width: 10.3703%; height: 29.8px;">No</td><td style="width: 60.0707%; height: 29.8px;">Limit of `event` per set `period` per `scope`.</td></tr><tr style="height: 29.8px;"><td style="width: 15.9714%; height: 29.8px;">`- event`</td><td style="width: 13.5876%; height: 29.8px;">string</td><td style="width: 10.3703%; height: 29.8px;">No</td><td style="width: 60.0707%; height: 29.8px;">Set the limit to either `IMPRESSIONS` or `CLICKS`.</td></tr><tr style="height: 29.8px;"><td style="width: 15.9714%; height: 29.8px;">`- period`</td><td style="width: 13.5876%; height: 29.8px;">string</td><td style="width: 10.3703%; height: 29.8px;">No</td><td style="width: 60.0707%; height: 29.8px;">Period for which the `amount` is applied as limit to the `event`. Either `DAILY` or `HOURLY`.</td></tr><tr style="height: 29.8px;"><td style="width: 15.9714%; height: 29.8px;">`- scope`</td><td style="width: 13.5876%; height: 29.8px;">string</td><td style="width: 10.3703%; height: 29.8px;">No</td><td style="width: 60.0707%; height: 29.8px;">On which level the limit is applied. In this case always `CAMPAIGN`.</td></tr><tr style="height: 46.6px;"><td style="width: 15.9714%; height: 46.6px;">`priorityId`</td><td style="width: 13.5876%; height: 46.6px;">integer</td><td style="width: 10.3703%; height: 46.6px;">Yes</td><td style="width: 60.0707%; height: 46.6px;">Priority of the campaign. 1 is the highest priority, with higher numbers representing lower priorities. By default clients have priorities 1 through 5 configured.</td></tr><tr style="height: 46.6px;"><td style="width: 15.9714%; height: 46.6px;">`campaignType`</td><td style="width: 13.5876%; height: 46.6px;">string</td><td style="width: 10.3703%; height: 46.6px;">Yes</td><td style="width: 60.0707%; height: 46.6px;">Campaign type is either `FULL` for managed campaigns and, `GUARANTEED` or `AUCTIONED` for Self Service. In case of doubt with Self Service, pick `GUARANTEED`.</td></tr><tr style="height: 46.6px;"><td style="width: 15.9714%; height: 46.6px;">`reservationType`</td><td style="width: 13.5876%; height: 46.6px;">string</td><td style="width: 10.3703%; height: 46.6px;">Yes</td><td style="width: 60.0707%; height: 46.6px;">Type of the campaign, either `CAMPAIGN`, `OFFER`, `Option` or `DRAFT` in the case of an Advendio campaign.</td></tr><tr style="height: 46.6px;"><td style="width: 15.9714%; height: 46.6px;">`deliveryFactors`</td><td style="width: 13.5876%; height: 46.6px;">integer, string</td><td style="width: 10.3703%; height: 46.6px;">No</td><td style="width: 60.0707%; height: 46.6px;">Campaign goals expressed in`volume` of `unit`, or in `budget`.</td></tr><tr><td style="width: 15.9714%;">`- unit`</td><td style="width: 13.5876%;">string</td><td style="width: 10.3703%;">No</td><td style="width: 60.0707%;">Unit of the to reach `volume`. Either `IMPRESSIONS` or `CLICKS`.</td></tr><tr><td style="width: 15.9714%;">`- volume`</td><td style="width: 13.5876%;">integer</td><td style="width: 10.3703%;">No</td><td style="width: 60.0707%;">Amount of `unit` to reach as campaign goal.</td></tr><tr><td style="width: 15.9714%;">`- budget`</td><td style="width: 13.5876%;">integer</td><td style="width: 10.3703%;">No</td><td style="width: 60.0707%;">Campaign budget that can be spend before the delivery stops</td></tr><tr><td style="width: 15.9714%;">`internalNote`</td><td style="width: 13.5876%;">string</td><td style="width: 10.3703%;">No</td><td style="width: 60.0707%;">Fills in the Internal ID</td></tr><tr><td style="width: 15.9714%;">`externalKey`</td><td style="width: 13.5876%;">string</td><td style="width: 10.3703%;">No</td><td style="width: 60.0707%;">Fills in the External ID</td></tr><tr><td style="width: 15.9714%;">`publisherId`</td><td style="width: 13.5876%;">integer</td><td style="width: 10.3703%;">No</td><td style="width: 60.0707%;">ID of the publisher you want to associate with the campaign. `1` is the main publisher </td></tr></tbody></table>

**Creating a Campaign**

```
{
  "name": "Apitest",
  "poNumber": "95",
  "advertiserId": 1,
  "invoiceCompanyId": 1,
  "brandIds": [
    1
  ],
  "frequencyLimits": [
    {
      "amount": 1000,
      "event": "IMPRESSIONS",
      "period": "DAILY",
      "scope": "CAMPAIGN"
    }
  ],
  "priorityId": 1,
  "campaignType": "FULL",
  "reservationType": "CAMPAIGN",
  "deliveryFactors": {
    "unit": "IMPRESSIONS",
    "volume": 10000,
    "budget": 2000
  },
  "internalNote": "apitest",
  "externalKey": "testapi",
  "publisherId": 1
}
```

**Response** - 201

```
{
    "internalId": 21,
    "name": "Apitest",
    "lifetimeStatus": "INCOMPLETE",
    "startDate": null,
    "endDate": null,
    "budget": "2000.00",
    "bookingBudgetSum": "0",
    "volume": 10000,
    "toReachUnit": "IMPRESSIONS",
    "advertiser": 1,
    "advertiserName": "Philips",
    "invoiceCompany": 1,
    "invoiceCompanyName": "Philips",
    "brands": [
        1
    ],
    "mediaBrands": [
        {
            "id": 1,
            "name": "Evnia"
        }
    ],
    "status": "CAMPAIGN",
    "priority": 1,
    "origin": "OTHER",
    "type": "FULL",
    "frequencyLimits": [
        {
            "amount": 1000,
            "event": "IMPRESSIONS",
            "period": "DAILY",
            "scope": "CAMPAIGN"
        }
    ],
    "createdBy": 33,
    "creationDate": "2026-07-14T12:36:00Z",
    "lastEditedBy": null,
    "lastEditedDate": "2026-07-14T12:36:00Z",
    "externalKey": "testapi",
    "poNumber": "95",
    "validTill": null,
    "deliveryScheme": {
        "uniform": true
    },
    "message": null,
    "creativeCount": 0,
    "internalNote": "apitest",
    "publisherId": 1
}
```

**Response codes**

<table border="1" id="bkmrk-status-meaning-201-c" style="border-collapse: collapse; width: 100%; height: 207.6px;"><colgroup><col style="width: 14.3133%;"></col><col style="width: 85.6847%;"></col></colgroup><thead><tr style="height: 29.8px;"><td style="height: 29.8px;">**Status**</td><td style="height: 29.8px;">**Meaning**</td></tr></thead><tbody><tr style="height: 29.8px;"><td style="height: 29.8px;">`201`</td><td style="height: 29.8px;">Campaign created.</td></tr><tr style="height: 29.8px;"><td style="height: 29.8px;">`400`</td><td style="height: 29.8px;">Bad request - invalid input or parameters.</td></tr><tr style="height: 29.8px;"><td style="height: 29.8px;">`401` / `403`</td><td style="height: 29.8px;">Not authenticated / not allowed.</td></tr><tr style="height: 28.8px;"><td style="height: 28.8px;">`404`</td><td style="height: 28.8px;">Not Found - Resource not found.</td></tr><tr style="height: 29.8px;"><td style="height: 29.8px;">`409`</td><td style="height: 29.8px;">Conflict.</td></tr><tr style="height: 29.8px;"><td style="height: 29.8px;">`500`</td><td style="height: 29.8px;">Internal Server Error - Unexpected failure.</td></tr></tbody></table>

### List campaigns

```
GET /v1/campaigns
```

Retrieves a list of campaigns.

**Request body -** `CampaignDto`

<table border="1" id="bkmrk-parameter-in-require" style="border-collapse: collapse; width: 100%; height: 178.8px;"><colgroup><col style="width: 20.023%;"></col><col style="width: 10.965%;"></col><col style="width: 11.3226%;"></col><col style="width: 11.2248%;"></col><col style="width: 46.5799%;"></col></colgroup><thead><tr style="height: 29.8px;"><td style="width: 18.1818%; height: 29.8px;">**Parameter**</td><td style="width: 8.49478%; height: 29.8px;">**In**</td><td style="width: 11.6244%; height: 29.8px;">**Required**</td><td style="width: 10.8793%; height: 29.8px;">**Type**</td><td style="width: 50.8197%; height: 29.8px;">**Description**</td></tr></thead><tbody><tr style="height: 29.8px;"><td style="width: 18.1818%; height: 29.8px;">`InternalId`</td><td style="width: 8.49478%; height: 29.8px;">path</td><td style="width: 11.6244%; height: 29.8px;">Yes</td><td style="width: 10.8793%; height: 29.8px;">integer</td><td style="width: 50.8197%; height: 29.8px;">The campaign's ID.</td></tr><tr style="height: 29.8px;"><td style="width: 18.1818%; height: 29.8px;">`limit`</td><td style="width: 8.49478%; height: 29.8px;">query</td><td style="width: 11.6244%; height: 29.8px;">Yes</td><td style="width: 10.8793%; height: 29.8px;">integer</td><td style="width: 50.8197%; height: 29.8px;">Max number of results.</td></tr><tr style="height: 29.8px;"><td style="width: 18.1818%; height: 29.8px;">`offset`</td><td style="width: 8.49478%; height: 29.8px;">query</td><td style="width: 11.6244%; height: 29.8px;">Yes</td><td style="width: 10.8793%; height: 29.8px;">integer</td><td style="width: 50.8197%; height: 29.8px;">Results to skip.</td></tr><tr style="height: 29.8px;"><td style="width: 18.1818%; height: 29.8px;">`includeInactive`</td><td style="width: 8.49478%; height: 29.8px;">query</td><td style="width: 11.6244%; height: 29.8px;">No</td><td style="width: 10.8793%; height: 29.8px;">boolean</td><td style="width: 50.8197%; height: 29.8px;">Include deactivated brands.</td></tr><tr style="height: 29.8px;"><td style="width: 18.1818%; height: 29.8px;">`search`</td><td style="width: 8.49478%; height: 29.8px;">query</td><td style="width: 11.6244%; height: 29.8px;">No</td><td style="width: 10.8793%; height: 29.8px;">string</td><td style="width: 50.8197%; height: 29.8px;">URL-encoded, case-insensitive match on name.</td></tr></tbody></table>

**Response** - 201

```
[
    {
        "internalId": 1,
        "name": "Example Display",
        "lifetimeStatus": "COMPLETED",
        "startDate": "2026-03-18T23:00:00Z",
        "endDate": "2026-04-30T21:59:59Z",
        "budget": "0.00",
        "bookingBudgetSum": "0.0",
        "volume": 0,
        "toReachUnit": "IMPRESSIONS",
        "advertiser": null,
        "advertiserName": null,
        "invoiceCompany": null,
        "invoiceCompanyName": null,
        "brands": [],
        "mediaBrands": [],
        "status": "CAMPAIGN",
        "priority": 1,
        "origin": "CLASSIC",
        "type": "FULL",
        "frequencyLimits": [],
        "createdBy": 2,
        "creationDate": "2026-03-19T13:46:14Z",
        "lastEditedBy": null,
        "lastEditedDate": "2026-03-19T13:46:14Z",
        "externalKey": null,
        "poNumber": "",
        "validTill": "1974-09-15T23:00:00Z",
        "deliveryScheme": {
            "uniform": true
        },
        "message": null,
        "creativeCount": 2,
        "internalNote": "",
        "publisherId": 1
    }
]
```

**Response codes**

<table border="1" id="bkmrk-status-meaning-201-c-1" style="border-collapse: collapse; width: 100%; height: 207.6px;"><colgroup><col style="width: 14.3133%;"></col><col style="width: 85.6847%;"></col></colgroup><thead><tr style="height: 29.8px;"><td style="height: 29.8px;">**Status**</td><td style="height: 29.8px;">**Meaning**</td></tr></thead><tbody><tr style="height: 29.8px;"><td style="height: 29.8px;">`200`</td><td style="height: 29.8px;">Campaigns found.</td></tr><tr style="height: 29.8px;"><td style="height: 29.8px;">`400`</td><td style="height: 29.8px;">Bad request - invalid input or parameters.</td></tr><tr style="height: 29.8px;"><td style="height: 29.8px;">`401` / `403`</td><td style="height: 29.8px;">Not authenticated / not allowed.</td></tr><tr style="height: 28.8px;"><td style="height: 28.8px;">`404`</td><td style="height: 28.8px;">Not Found - Resource not found.</td></tr><tr style="height: 29.8px;"><td style="height: 29.8px;">`500`</td><td style="height: 29.8px;">Internal Server Error - Unexpected failure.</td></tr></tbody></table>

### Update campaigns

```
PUT /v1/campaigns/{campaignId}
```

Update a single campaign.

**Request body** - `CreateCampaignDto`

<table id="bkmrk-field-type-required--1" style="width: 100%; height: 551.6px;"><thead><tr style="height: 46.6px;"><th style="width: 15.9714%; height: 46.6px;">**Field**</th><th style="width: 13.5876%; height: 46.6px;">**Type**</th><th style="width: 10.3703%; height: 46.6px;">**Required**</th><th style="width: 60.0707%; height: 46.6px;">**Description**</th></tr></thead><tbody><tr style="height: 29.8px;"><td style="width: 15.9714%; height: 29.8px;">`name`</td><td style="width: 13.5876%; height: 29.8px;">string</td><td style="width: 10.3703%; height: 29.8px;">Yes</td><td style="width: 60.0707%; height: 29.8px;">Display name of the company.</td></tr><tr style="height: 46.6px;"><td style="width: 15.9714%; height: 46.6px;">`advertiserId`</td><td style="width: 13.5876%; height: 46.6px;">integer</td><td style="width: 10.3703%; height: 46.6px;">No</td><td style="width: 60.0707%; height: 46.6px;">ID of the advertiser/media partner you want to attach to this campaign.</td></tr><tr style="height: 29.8px;"><td style="width: 15.9714%; height: 29.8px;">`brandIds`</td><td style="width: 13.5876%; height: 29.8px;">integer</td><td style="width: 10.3703%; height: 29.8px;">No</td><td style="width: 60.0707%; height: 29.8px;">IDs of the brands you want attached to this campaign.</td></tr><tr style="height: 46.6px;"><td style="width: 15.9714%; height: 46.6px;">`externalKey`</td><td style="width: 13.5876%; height: 46.6px;">string</td><td style="width: 10.3703%; height: 46.6px;">No</td><td style="width: 60.0707%; height: 46.6px;">Your own external reference key.</td></tr><tr style="height: 46.6px;"><td style="width: 15.9714%; height: 46.6px;">`frequencyLimits`</td><td style="width: 13.5876%; height: 46.6px;">integer, string</td><td style="width: 10.3703%; height: 46.6px;">No</td><td style="width: 60.0707%; height: 46.6px;">Frequency limit settings for the campaign.</td></tr><tr style="height: 29.8px;"><td style="width: 15.9714%; height: 29.8px;">`- amount`</td><td style="width: 13.5876%; height: 29.8px;">integer</td><td style="width: 10.3703%; height: 29.8px;">No</td><td style="width: 60.0707%; height: 29.8px;">Limit of `event` per set `period` per `scope`.</td></tr><tr style="height: 29.8px;"><td style="width: 15.9714%; height: 29.8px;">`- event`</td><td style="width: 13.5876%; height: 29.8px;">string</td><td style="width: 10.3703%; height: 29.8px;">No</td><td style="width: 60.0707%; height: 29.8px;">Set the limit to either `IMPRESSIONS` or `CLICKS`.</td></tr><tr style="height: 29.8px;"><td style="width: 15.9714%; height: 29.8px;">`- period`</td><td style="width: 13.5876%; height: 29.8px;">string</td><td style="width: 10.3703%; height: 29.8px;">No</td><td style="width: 60.0707%; height: 29.8px;">Period for which the `amount` is applied as limit to the `event`. Either `DAILY` or `HOURLY`.</td></tr><tr style="height: 29.8px;"><td style="width: 15.9714%; height: 29.8px;">`- scope`</td><td style="width: 13.5876%; height: 29.8px;">string</td><td style="width: 10.3703%; height: 29.8px;">No</td><td style="width: 60.0707%; height: 29.8px;">On which level the limit is applied. In this case always `CAMPAIGN`.</td></tr><tr style="height: 46.6px;"><td style="width: 15.9714%; height: 46.6px;">`priorityId`</td><td style="width: 13.5876%; height: 46.6px;">integer</td><td style="width: 10.3703%; height: 46.6px;">Yes</td><td style="width: 60.0707%; height: 46.6px;">Priority of the campaign. 1 is the highest priority, with higher numbers representing lower priorities. By default clients have priorities 1 through 5 configured.</td></tr><tr style="height: 46.6px;"><td style="width: 15.9714%; height: 46.6px;">`campaignType`</td><td style="width: 13.5876%; height: 46.6px;">string</td><td style="width: 10.3703%; height: 46.6px;">Yes</td><td style="width: 60.0707%; height: 46.6px;">Campaign type is either `FULL` for managed campaigns and, `GUARANTEED` or `AUCTIONED` for Self Service. In case of doubt with Self Service, pick `GUARANTEED`.</td></tr><tr style="height: 46.6px;"><td style="width: 15.9714%; height: 46.6px;">`reservationType`</td><td style="width: 13.5876%; height: 46.6px;">string</td><td style="width: 10.3703%; height: 46.6px;">Yes</td><td style="width: 60.0707%; height: 46.6px;">Type of the campaign, either `CAMPAIGN`, `OFFER`, `Option` or `DRAFT` in the case of an Advendio campaign.</td></tr><tr style="height: 46.6px;"><td style="width: 15.9714%; height: 46.6px;">`deliveryFactors`</td><td style="width: 13.5876%; height: 46.6px;">integer, string</td><td style="width: 10.3703%; height: 46.6px;">No</td><td style="width: 60.0707%; height: 46.6px;">Campaign goals expressed in`volume` of `unit`, or in `budget`.</td></tr><tr><td style="width: 15.9714%;">`- unit`</td><td style="width: 13.5876%;">string</td><td style="width: 10.3703%;">No</td><td style="width: 60.0707%;">Unit of the to reach `volume`. Either `IMPRESSIONS` or `CLICKS`.</td></tr><tr><td style="width: 15.9714%;">`- volume`</td><td style="width: 13.5876%;">integer</td><td style="width: 10.3703%;">No</td><td style="width: 60.0707%;">Amount of `unit` to reach as campaign goal.</td></tr><tr><td style="width: 15.9714%;">`- budget`</td><td style="width: 13.5876%;">integer</td><td style="width: 10.3703%;">No</td><td style="width: 60.0707%;">Campaign budget that can be spend before the delivery stops</td></tr><tr><td style="width: 15.9714%;">`internalNote`</td><td style="width: 13.5876%;">string</td><td style="width: 10.3703%;">No</td><td style="width: 60.0707%;">Fills in the Internal ID</td></tr><tr><td style="width: 15.9714%;">`externalKey`</td><td style="width: 13.5876%;">string</td><td style="width: 10.3703%;">No</td><td style="width: 60.0707%;">Fills in the External ID</td></tr><tr><td style="width: 15.9714%;">`publisherId`</td><td style="width: 13.5876%;">integer</td><td style="width: 10.3703%;">No</td><td style="width: 60.0707%;">ID of the publisher you want to associate with the campaign. `1` is the main publisher </td></tr></tbody></table>

**Updating a campaign**

```
{
  "name": "Apitest",
  "poNumber": "95",
  "advertiserId": 1,
  "invoiceCompanyId": 1,
  "brandIds": [
    1
  ],
  "frequencyLimits": [
    {
      "amount": 1200,
      "event": "IMPRESSIONS",
      "period": "DAILY",
      "scope": "CAMPAIGN"
    }
  ],
  "priorityId": 1,
  "campaignType": "FULL",
  "reservationType": "CAMPAIGN",
  "deliveryFactors": {
    "unit": "IMPRESSIONS",
    "volume": 10000,
    "budget": 2000
  },
  "internalNote": "apitest",
  "externalKey": "testapi",
  "publisherId": 1
}
```

**Response** - 200

```
{
    "internalId": 21,
    "name": "Apitest",
    "lifetimeStatus": "INCOMPLETE",
    "startDate": null,
    "endDate": null,
    "budget": "2000.00",
    "bookingBudgetSum": "0",
    "volume": 10000,
    "toReachUnit": "IMPRESSIONS",
    "advertiser": 1,
    "advertiserName": "Philips",
    "invoiceCompany": 1,
    "invoiceCompanyName": "Philips",
    "brands": [
        1
    ],
    "mediaBrands": [
        {
            "id": 1,
            "name": "Evnia"
        }
    ],
    "status": "CAMPAIGN",
    "priority": 1,
    "origin": "OTHER",
    "type": "FULL",
    "frequencyLimits": [
        {
            "amount": 1200,
            "event": "IMPRESSIONS",
            "period": "DAILY",
            "scope": "CAMPAIGN"
        }
    ],
    "createdBy": 33,
    "creationDate": "2026-07-14T12:36:00Z",
    "lastEditedBy": null,
    "lastEditedDate": "2026-07-15T13:31:14Z",
    "externalKey": "testapi",
    "poNumber": "95",
    "validTill": null,
    "deliveryScheme": {
        "uniform": true
    },
    "message": null,
    "creativeCount": 0,
    "internalNote": "apitest",
    "publisherId": 1
}
```

**Response codes**

<table border="1" id="bkmrk-status-meaning-200-c" style="border-collapse: collapse; width: 100%; height: 208.6px;"><colgroup><col style="width: 14.3133%;"></col><col style="width: 85.6847%;"></col></colgroup><thead><tr style="height: 29.8px;"><td style="height: 29.8px;">**Status**</td><td style="height: 29.8px;">**Meaning**</td></tr></thead><tbody><tr style="height: 29.8px;"><td style="height: 29.8px;">`200`</td><td style="height: 29.8px;">Campaign updated.</td></tr><tr style="height: 29.8px;"><td style="height: 29.8px;">`400`</td><td style="height: 29.8px;">Bad request - invalid input or parameters.</td></tr><tr style="height: 29.8px;"><td style="height: 29.8px;">`401` / `403`</td><td style="height: 29.8px;">Not authenticated / not allowed.</td></tr><tr style="height: 29.8px;"><td style="height: 29.8px;">`404`</td><td style="height: 29.8px;">Not Found - Resource not found.</td></tr><tr style="height: 29.8px;"><td style="height: 29.8px;">`409`</td><td style="height: 29.8px;">Conflict.</td></tr><tr style="height: 29.8px;"><td style="height: 29.8px;">`500`</td><td style="height: 29.8px;">Internal Server Error - Unexpected failure.</td></tr></tbody></table>

### Delete campaigns

```
DELETE /v1/campaigns/{campaignId}
```

(soft)delete Campaign by ID by (soft)deleting all its Bookings. Is limited by state (draft, or non-started auction).

**Request**

<table border="1" id="bkmrk-parameter-in-require-1" style="border-collapse: collapse; width: 100%; height: 59.6px;"><colgroup><col style="width: 20.023%;"></col><col style="width: 10.965%;"></col><col style="width: 11.3226%;"></col><col style="width: 11.2248%;"></col><col style="width: 46.5799%;"></col></colgroup><thead><tr style="height: 29.8px;"><td style="width: 18.1818%; height: 29.8px;">**Parameter**</td><td style="width: 8.49478%; height: 29.8px;">**In**</td><td style="width: 11.6244%; height: 29.8px;">**Required**</td><td style="width: 10.8793%; height: 29.8px;">**Type**</td><td style="width: 50.8197%; height: 29.8px;">**Description**</td></tr></thead><tbody><tr style="height: 29.8px;"><td style="width: 18.1818%; height: 29.8px;">`InternalId`</td><td style="width: 8.49478%; height: 29.8px;">path</td><td style="width: 11.6244%; height: 29.8px;">Yes</td><td style="width: 10.8793%; height: 29.8px;">integer</td><td style="width: 50.8197%; height: 29.8px;">The campaign's ID.</td></tr></tbody></table>

**Response codes**

<table border="1" id="bkmrk-status-meaning-204-c" style="border-collapse: collapse; width: 100%; height: 207.6px;"><colgroup><col style="width: 14.3133%;"></col><col style="width: 85.6847%;"></col></colgroup><thead><tr style="height: 29.8px;"><td style="height: 29.8px;">**Status**</td><td style="height: 29.8px;">**Meaning**

</td></tr></thead><tbody><tr style="height: 29.8px;"><td style="height: 29.8px;">`204`</td><td style="height: 29.8px;">Campaign deleted.</td></tr><tr style="height: 29.8px;"><td style="height: 29.8px;">`400`</td><td style="height: 29.8px;">Bad request - invalid input or parameters.</td></tr><tr style="height: 29.8px;"><td style="height: 29.8px;">`401` / `403`</td><td style="height: 29.8px;">Not authenticated / not allowed.</td></tr><tr style="height: 28.8px;"><td style="height: 28.8px;">`404`</td><td style="height: 28.8px;">Not Found - Resource not found.</td></tr><tr style="height: 29.8px;"><td style="height: 29.8px;">`409`</td><td style="height: 29.8px;">Conflict.</td></tr><tr style="height: 29.8px;"><td style="height: 29.8px;">`500`</td><td style="height: 29.8px;">Internal Server Error - Unexpected failure.</td></tr></tbody></table>

### Get a single campaign

```
GET /v1/campaigns/{campaignId}
```

Retrieves information on a single campaign.

**Request body -** `CampaignDto`

<table border="1" id="bkmrk-parameter-in-require-2" style="border-collapse: collapse; width: 100%; height: 178.8px;"><colgroup><col style="width: 20.023%;"></col><col style="width: 10.965%;"></col><col style="width: 11.3226%;"></col><col style="width: 11.2248%;"></col><col style="width: 46.5799%;"></col></colgroup><thead><tr style="height: 29.8px;"><td style="width: 18.1818%; height: 29.8px;">**Parameter**</td><td style="width: 8.49478%; height: 29.8px;">**In**</td><td style="width: 11.6244%; height: 29.8px;">**Required**</td><td style="width: 10.8793%; height: 29.8px;">**Type**</td><td style="width: 50.8197%; height: 29.8px;">**Description**</td></tr></thead><tbody><tr style="height: 29.8px;"><td style="width: 18.1818%; height: 29.8px;">`InternalId`</td><td style="width: 8.49478%; height: 29.8px;">path</td><td style="width: 11.6244%; height: 29.8px;">Yes</td><td style="width: 10.8793%; height: 29.8px;">integer</td><td style="width: 50.8197%; height: 29.8px;">The campaign's ID.</td></tr></tbody></table>

**Response** - 201

```
{
    "internalId": 17,
    "name": "Philips Evnia QD OLED",
    "lifetimeStatus": "COMPLETED",
    "startDate": "2026-07-04T22:00:00Z",
    "endDate": "2026-07-10T21:59:00Z",
    "budget": "6600.00",
    "bookingBudgetSum": "4500.0",
    "volume": 1500000,
    "toReachUnit": "IMPRESSIONS",
    "advertiser": null,
    "advertiserName": null,
    "invoiceCompany": null,
    "invoiceCompanyName": null,
    "brands": [],
    "mediaBrands": [],
    "status": "CAMPAIGN",
    "priority": 1,
    "origin": "MCB",
    "type": "FULL",
    "frequencyLimits": [
        {
            "amount": 200000,
            "event": "IMPRESSIONS",
            "period": "HOURLY",
            "scope": "CAMPAIGN"
        },
        {
            "amount": 500000,
            "event": "IMPRESSIONS",
            "period": "DAILY",
            "scope": "CAMPAIGN"
        }
    ],
    "createdBy": 1,
    "creationDate": "2026-07-01T09:35:02Z",
    "lastEditedBy": null,
    "lastEditedDate": "2026-07-01T09:35:02Z",
    "externalKey": null,
    "poNumber": null,
    "validTill": null,
    "deliveryScheme": {
        "uniform": true
    },
    "message": null,
    "creativeCount": 2,
    "internalNote": "1.000.000 impressies\n6000 euro budget",
    "publisherId": 1
}
```

**Response codes**

<table border="1" id="bkmrk-status-meaning-200-c-1" style="border-collapse: collapse; width: 100%; height: 207.6px;"><colgroup><col style="width: 14.3133%;"></col><col style="width: 85.6847%;"></col></colgroup><thead><tr style="height: 29.8px;"><td style="height: 29.8px;">**Status**</td><td style="height: 29.8px;">**Meaning**</td></tr></thead><tbody><tr style="height: 29.8px;"><td style="height: 29.8px;">`200`</td><td style="height: 29.8px;">Campaign found.</td></tr><tr style="height: 29.8px;"><td style="height: 29.8px;">`400`</td><td style="height: 29.8px;">Bad request - invalid input or parameters.</td></tr><tr style="height: 29.8px;"><td style="height: 29.8px;">`401` / `403`</td><td style="height: 29.8px;">Not authenticated / not allowed.</td></tr><tr style="height: 28.8px;"><td style="height: 28.8px;">`404`</td><td style="height: 28.8px;">Not Found - Resource not found.</td></tr><tr style="height: 29.8px;"><td style="height: 29.8px;">`500`</td><td style="height: 29.8px;">Internal Server Error - Unexpected failure.</td></tr></tbody></table>

### Update campaign status

```
POST /v1/campaigns/{campaignId}/status
```

<span data-slate-node="text"><span data-slate-leaf="true"><span data-slate-string="true">Update the status of a guaranteed campaign.</span></span></span>

<p class="callout success"><span data-slate-node="text"><span data-slate-leaf="true"><span data-slate-string="true">Changes only go in the following direction: draft -&gt; offer (-&gt; option) -&gt; campaign  
Any other changes to status (from example from *draft* to *campaign*) will result in an error.</span></span></span></p>

**<span data-slate-node="text"><span data-slate-leaf="true"><span data-slate-string="true">Request Body</span></span></span>**<span data-slate-node="text"><span data-slate-leaf="true"><span data-slate-string="true"> - <span class="model"><span class=""><span class="pointer"><span class="model-title"><span class="model-title__text">UpdateCampaignStatusRequest</span></span></span></span></span></span></span></span>

<table border="1" id="bkmrk-parameter-required-t" style="border-collapse: collapse; width: 100%; height: 59.6px;"><colgroup><col style="width: 22.4076%;"></col><col style="width: 12.7533%;"></col><col style="width: 12.6341%;"></col><col style="width: 52.205%;"></col></colgroup><thead><tr style="height: 29.8px;"><td style="width: 18.1818%; height: 29.8px;">**Parameter**</td><td style="width: 11.6244%; height: 29.8px;">**Required**</td><td style="width: 10.8793%; height: 29.8px;">**Type**</td><td style="width: 50.8197%; height: 29.8px;">**Description**</td></tr></thead><tbody><tr style="height: 29.8px;"><td style="width: 18.1818%; height: 29.8px;">`status`</td><td style="width: 11.6244%; height: 29.8px;">Yes</td><td style="width: 10.8793%; height: 29.8px;">string</td><td style="width: 50.8197%; height: 29.8px;">Status you want to change the campaign to. Options are `DRAFT`, `OFFER`, `OPTION` or `CAMPAIGN`</td></tr><tr><td style="width: 18.1818%;">`message`</td><td style="width: 11.6244%;">No</td><td style="width: 10.8793%;">string</td><td style="width: 50.8197%;">Message to attach to the status change.</td></tr></tbody></table>

**Changing a campaigns status**

```
{
  "status": "OFFER",
  "message": "Apitest4"
}
```

**Response** - 200

```
{
    "internalId": 27,
    "name": "Apitest4",
    "lifetimeStatus": "PENDING",
    "startDate": "2026-07-19T22:00:00Z",
    "endDate": "2026-07-31T21:59:00Z",
    "budget": "0.00",
    "bookingBudgetSum": "1.0",
    "volume": 0,
    "toReachUnit": "IMPRESSIONS",
    "advertiser": 2,
    "advertiserName": "Logitech International S.A.",
    "invoiceCompany": null,
    "invoiceCompanyName": null,
    "brands": [
        2
    ],
    "mediaBrands": [
        {
            "id": 2,
            "name": "Logitech"
        }
    ],
    "status": "OFFER",
    "priority": 8,
    "origin": "MCB",
    "type": "GUARANTEED",
    "frequencyLimits": [],
    "createdBy": 30,
    "creationDate": "2026-07-20T13:01:12Z",
    "lastEditedBy": null,
    "lastEditedDate": "2026-07-22T07:40:52Z",
    "externalKey": null,
    "poNumber": "",
    "validTill": null,
    "deliveryScheme": {
        "uniform": true
    },
    "message": "Apitest4",
    "creativeCount": 0,
    "internalNote": "",
    "publisherId": 1
}
```

**Response codes**

<table border="1" id="bkmrk-status-meaning-200-c-2" style="border-collapse: collapse; width: 100%; height: 207.6px;"><colgroup><col style="width: 14.3133%;"></col><col style="width: 85.6847%;"></col></colgroup><thead><tr style="height: 29.8px;"><td style="height: 29.8px;">**Status**</td><td style="height: 29.8px;">**Meaning**</td></tr></thead><tbody><tr style="height: 29.8px;"><td style="height: 29.8px;">`200`</td><td style="height: 29.8px;">Campaign status update.</td></tr><tr style="height: 29.8px;"><td style="height: 29.8px;">`400`</td><td style="height: 29.8px;">Bad request - invalid input or parameters.</td></tr><tr style="height: 29.8px;"><td style="height: 29.8px;">`401` / `403`</td><td style="height: 29.8px;">Not authenticated / not allowed.</td></tr><tr style="height: 28.8px;"><td style="height: 28.8px;">`404`</td><td style="height: 28.8px;">Not Found - Resource not found.</td></tr><tr><td>`422`</td><td>Unprocessable entity (status change not allowed by business rules, see callout)</td></tr><tr style="height: 29.8px;"><td style="height: 29.8px;">`500`</td><td style="height: 29.8px;">Internal Server Error - Unexpected failure.</td></tr></tbody></table>

### Change the status of the bookings in a campaign

```
PATCH /v1/campaigns/{campaignId}/bookings/status
```

Conditionally update the status of the bookings in a campaign.

**Request body**

<table border="1" id="bkmrk-parameter-required-t-1" style="border-collapse: collapse; width: 100%; height: 59.6px;"><colgroup><col style="width: 12.7533%;"></col><col style="width: 12.0381%;"></col><col style="width: 11.2179%;"></col><col style="width: 63.9907%;"></col></colgroup><thead><tr style="height: 29.8px;"><td style="width: 18.1818%; height: 29.8px;">**Parameter**</td><td style="width: 11.6244%; height: 29.8px;">**Required**</td><td style="width: 10.8793%; height: 29.8px;">**Type**</td><td style="width: 50.8197%; height: 29.8px;">**Description**</td></tr></thead><tbody><tr style="height: 29.8px;"><td style="width: 18.1818%; height: 29.8px;">/</td><td style="width: 11.6244%; height: 29.8px;">Yes</td><td style="width: 10.8793%; height: 29.8px;">string</td><td style="width: 50.8197%; height: 29.8px;">Status you want to change the bookings to. Options are `ACTIVE`, `PAUSED`, or `STOPPED`</td></tr></tbody></table>

**Change the status of a campaigns' bookings**

```
"PAUSED"
```

**Response** - 200

```
[
    28
]
```

**Response codes**

<table border="1" id="bkmrk-status-meaning-200-c-3" style="border-collapse: collapse; width: 100%; height: 207.6px;"><colgroup><col style="width: 14.3133%;"></col><col style="width: 85.6847%;"></col></colgroup><thead><tr style="height: 29.8px;"><td style="height: 29.8px;">**Status**</td><td style="height: 29.8px;">**Meaning**</td></tr></thead><tbody><tr style="height: 29.8px;"><td style="height: 29.8px;">`200`</td><td style="height: 29.8px;">Booking status changed.</td></tr><tr style="height: 29.8px;"><td style="height: 29.8px;">`400`</td><td style="height: 29.8px;">Bad request - invalid input or parameters.</td></tr><tr style="height: 29.8px;"><td style="height: 29.8px;">`401` / `403`</td><td style="height: 29.8px;">Not authenticated / not allowed.</td></tr><tr style="height: 28.8px;"><td style="height: 28.8px;">`404`</td><td style="height: 28.8px;">Not Found - Resource not found.</td></tr><tr style="height: 29.8px;"><td style="height: 29.8px;">`500`</td><td style="height: 29.8px;">Internal Server Error - Unexpected failure.</td></tr></tbody></table>

### Get the booking shares of a campaign

```
GET /v1/campaigns/{campaignId}/booking-shares
```

Get Booking shares per booking ID for the campaign.

**Request body** - <span class="model"><span class=""><span class="pointer"><span class="model-title"><span class="model-title__text">BookingShareDto</span></span></span></span></span>

<table border="1" id="bkmrk-parameter-in-require-3" style="border-collapse: collapse; width: 100%; height: 178.8px;"><colgroup><col style="width: 20.023%;"></col><col style="width: 10.965%;"></col><col style="width: 11.3226%;"></col><col style="width: 11.2248%;"></col><col style="width: 46.5799%;"></col></colgroup><thead><tr style="height: 29.8px;"><td style="width: 18.1818%; height: 29.8px;">**Parameter**</td><td style="width: 8.49478%; height: 29.8px;">**In**</td><td style="width: 11.6244%; height: 29.8px;">**Required**</td><td style="width: 10.8793%; height: 29.8px;">**Type**</td><td style="width: 50.8197%; height: 29.8px;">**Description**</td></tr></thead><tbody><tr style="height: 29.8px;"><td style="width: 18.1818%; height: 29.8px;">`InternalId`</td><td style="width: 8.49478%; height: 29.8px;">path</td><td style="width: 11.6244%; height: 29.8px;">Yes</td><td style="width: 10.8793%; height: 29.8px;">integer</td><td style="width: 50.8197%; height: 29.8px;">The campaign's ID.</td></tr></tbody></table>

**Response** - 200

```
[
    {
        "bookingId": 28,
        "share": 1.0
    }
]
```

**Response codes**

<table border="1" id="bkmrk-status-meaning-200-b" style="border-collapse: collapse; width: 100%; height: 207.6px;"><colgroup><col style="width: 14.3133%;"></col><col style="width: 85.6847%;"></col></colgroup><thead><tr style="height: 29.8px;"><td style="height: 29.8px;">**Status**</td><td style="height: 29.8px;">**Meaning**</td></tr></thead><tbody><tr style="height: 29.8px;"><td style="height: 29.8px;">`200`</td><td style="height: 29.8px;">Booking share found.</td></tr><tr style="height: 29.8px;"><td style="height: 29.8px;">`400`</td><td style="height: 29.8px;">Bad request - invalid input or parameters.</td></tr><tr style="height: 29.8px;"><td style="height: 29.8px;">`401` / `403`</td><td style="height: 29.8px;">Not authenticated / not allowed.</td></tr><tr style="height: 28.8px;"><td style="height: 28.8px;">`404`</td><td style="height: 28.8px;">Not Found - Resource not found.</td></tr><tr style="height: 29.8px;"><td style="height: 29.8px;">`500`</td><td style="height: 29.8px;">Internal Server Error - Unexpected failure.</td></tr></tbody></table>

### Get list of campaign types visible to user

```
GET /v1/campaigns/filterValues/types
```

Get a unique list of campaign types for campaign filtering. Only values used in campaigns visible to the users are returned.

**Response** - 200

```
[
    "FULL",
    "GUARANTEED",
    "AUCTIONED"
]
```

**Response codes**

<table border="1" id="bkmrk-status-meaning-200-b-1" style="border-collapse: collapse; width: 100%; height: 207.6px;"><colgroup><col style="width: 14.3133%;"></col><col style="width: 85.6847%;"></col></colgroup><thead><tr style="height: 29.8px;"><td style="height: 29.8px;">**Status**</td><td style="height: 29.8px;">**Meaning**</td></tr></thead><tbody><tr style="height: 29.8px;"><td style="height: 29.8px;">`200`</td><td style="height: 29.8px;">Booking share found.</td></tr><tr style="height: 29.8px;"><td style="height: 29.8px;">`400`</td><td style="height: 29.8px;">Bad request - invalid input or parameters.</td></tr><tr style="height: 29.8px;"><td style="height: 29.8px;">`401` / `403`</td><td style="height: 29.8px;">Not authenticated / not allowed.</td></tr><tr style="height: 28.8px;"><td style="height: 28.8px;">`404`</td><td style="height: 28.8px;">Not Found - Resource not found.</td></tr><tr style="height: 29.8px;"><td style="height: 29.8px;">`500`</td><td style="height: 29.8px;">Internal Server Error - Unexpected failure.</td></tr></tbody></table>