1. Authorization
1.1. Login
This `POST` request will return result login and token
1.1.1. Request Body
| Path | Type | Description | Required |
|---|---|---|---|
string |
User email |
+ |
|
password |
string |
User password |
+ |
1.1.2. HTTP Request
URL
POST api/users/login HTTP/1.1
HEADER
Accept: application/json Content-type: application/json
DATA
{
"email": "test@example.org",
"password": "password"
}
1.1.3. Curl request
$ curl 'https://dsp-api.smartyads.com/api/users/login' -i -X POST \
-H 'Accept: application/json' \
-H 'Content-type: application/json' \
-d '{
"email": "test@example.org",
"password": "password"
}'
1.1.4. Response Body
| Path | Type | Description |
|---|---|---|
access_token |
string |
This token is used in queries. HEADER: "Authorization: Bearer <this token>" |
token_type |
string |
Token type |
expires_in |
int |
Time token live in seconds |
1.1.5. HTTP Response
HTTP/1.0 200 OK
Content-type: application/json
X-ratelimit-limit: 10
X-ratelimit-remaining: 9
Access-control-allow-origin: *
{
"access_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwOi8vbG9jYWxob3N0Ojk5MjMvYXBpL3VzZXJzL2xvZ2luIiwiaWF0IjoxNzcxNTc3MzY2LCJleHAiOjE3NzE1ODA5NjYsIm5iZiI6MTc3MTU3NzM2NiwianRpIjoiSU1uNUVNWEVOcGVGSGxqOCIsInN1YiI6IjI2IiwicHJ2IjoiMjNiZDVjODk0OWY2MDBhZGIzOWU3MDFjNDAwODcyZGI3YTU5NzZmNyJ9.Za2EGvvId37ACRGYffaDfK0KzBt7KPZda-edXns4TT8",
"token_type": "bearer",
"expires_in": "60"
}
1.2. Log out
A `POST` request will return result logout
1.2.1. HTTP Request
URL
POST api/logout HTTP/1.1
HEADER
Accept: application/json Content-type: application/json Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwOi8vbG9jYWxob3N0Ojk5MjMiLCJpYXQiOjE3NzE1NzczNjYsImV4cCI6MTc3MTU4MDk2NiwibmJmIjoxNzcxNTc3MzY2LCJqdGkiOiI5bkdHR0NhdjlLQjNTejJTIiwic3ViIjoiMjciLCJwcnYiOiIyM2JkNWM4OTQ5ZjYwMGFkYjM5ZTcwMWM0MDA4NzJkYjdhNTk3NmY3In0.hfP455VxTFT1A6eQ1SCpPCmHutcWyh9LnRg525SadLk
DATA
{}
1.2.2. Curl request
$ curl 'https://dsp-api.smartyads.com/api/logout' -i -X POST \
-H 'Accept: application/json' \
-H 'Content-type: application/json' \
-H 'Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwOi8vbG9jYWxob3N0Ojk5MjMiLCJpYXQiOjE3NzE1NzczNjYsImV4cCI6MTc3MTU4MDk2NiwibmJmIjoxNzcxNTc3MzY2LCJqdGkiOiI5bkdHR0NhdjlLQjNTejJTIiwic3ViIjoiMjciLCJwcnYiOiIyM2JkNWM4OTQ5ZjYwMGFkYjM5ZTcwMWM0MDA4NzJkYjdhNTk3NmY3In0.hfP455VxTFT1A6eQ1SCpPCmHutcWyh9LnRg525SadLk' \
-d '{}'
1.2.3. Response Body
| Path | Type | Description |
|---|---|---|
message |
string |
Result message |
1.2.4. HTTP Response
HTTP/1.0 200 OK
Content-type: application/json
Access-control-allow-origin: *
{
"message": "Successfully logged out"
}
2. Campaigns
2.1. Campaigns list
A `GET` request will return a list of an campaigns.
2.1.1. HTTP Request
URL
GET api/campaigns HTTP/1.1
HEADER
Accept: application/json Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwOi8vbG9jYWxob3N0Ojk5MjMiLCJpYXQiOjE3NzE1NzczNjYsImV4cCI6MTc3MTU4MDk2NiwibmJmIjoxNzcxNTc3MzY2LCJqdGkiOiI4VWxFazNYSkNHMFo3MkhIIiwic3ViIjoiMzEiLCJwcnYiOiIyM2JkNWM4OTQ5ZjYwMGFkYjM5ZTcwMWM0MDA4NzJkYjdhNTk3NmY3In0.uJFTCT-gV7mYIj_BAuok74_N5avoVO5ut6IYCS0aDQA
DATA
{}
2.1.2. Curl request
$ curl 'https://dsp-api.smartyads.com/api/campaigns' -i -X GET \
-H 'Accept: application/json' \
-H 'Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwOi8vbG9jYWxob3N0Ojk5MjMiLCJpYXQiOjE3NzE1NzczNjYsImV4cCI6MTc3MTU4MDk2NiwibmJmIjoxNzcxNTc3MzY2LCJqdGkiOiI4VWxFazNYSkNHMFo3MkhIIiwic3ViIjoiMzEiLCJwcnYiOiIyM2JkNWM4OTQ5ZjYwMGFkYjM5ZTcwMWM0MDA4NzJkYjdhNTk3NmY3In0.uJFTCT-gV7mYIj_BAuok74_N5avoVO5ut6IYCS0aDQA' \
-d '{}'
2.1.3. Response Body
| Path | Type | Description |
|---|---|---|
data.*.id |
integer |
Campaign Id(test) |
data.*.userId |
integer |
User Id |
data.*.isActive |
boolean |
Campaign On/Off |
data.*.isRunning |
boolean |
Campaign running status |
data.*.type |
string |
Campaign type: banner, native, video, audio |
data.*.name |
string |
Campaign name |
data.*.isRewarded |
integer |
Rewarded video (for video creatives) |
data.*.isDesktopWeb |
boolean |
Traffic Type: Desktop Websites |
data.*.isMobileApp |
boolean |
Traffic Type: Mobile Applications |
data.*.isMobileWeb |
boolean |
Traffic Type: Mobile Websites |
data.*.isSmartphone |
boolean |
Traffic Type: Smartphones |
data.*.isTablet |
boolean |
Traffic Type: Tablets |
data.*.isCTV |
boolean |
Traffic Type: CTVs |
data.*.isDOOH |
boolean |
Traffic Type: DOOH |
data.*.aDomain |
integer |
Top level domain |
data.*.dateStart |
date |
Date start |
data.*.dateEnd |
date |
Date end |
data.*.geoCountries |
array |
GEO Targeting: countries list |
data.*.geoCountriesIsInclude |
boolean |
GEO Targeting: countries list type (true: whitelist, false: blacklist) |
data.*.geoRegions |
array |
GEO Targeting: regions list |
data.*.geoRegionsIsInclude |
boolean |
GEO Targeting: regions list type (true: whitelist, false: blacklist) |
data.*.geoCities |
array |
GEO Targeting: cities list |
data.*.geoCitiesIsInclude |
boolean |
GEO Targeting: cities list type (true: whitelist, false: blacklist) |
data.*.contentCategories |
array |
Targeting: IAB Categories list |
data.*.contentCategoriesIsInclude |
boolean |
Targeting: IAB Categories list type (true: whitelist, false: blacklist) |
data.*.userAgeMin |
integer |
Targeting: Age range from |
data.*.userAgeMax |
integer |
Targeting: Age range to |
data..connectionTypes. |
string |
Connection type (wifi, ethernet, cellular_all, cellular_3g, cellular_4g, cellular_5g) |
data.*.clickedInventoryCategories |
array |
Сlicked Inventory Categories |
data.*.deviceCarrier |
array |
Targeting: List of network operators. |
data.*.deviceCarrierIsInclude |
boolean |
Targeting: List of network operators type (true: whitelist, false: blacklist) |
data.*.OS |
array |
Targeting: The operating system of user's device |
data.*.OSIsInclude |
boolean |
Targeting: The operating system of user's device list type (true: whitelist, false: blacklist) |
data.*.browser |
array |
Targeting: The user's browsers list |
data.*.browserIsInclude |
boolean |
Targeting: The user's browsers list type (true: whitelist, false: blacklist) |
data.*.deviceLanguage |
array |
Targeting: The languages of user's browser |
data.*.deviceLanguageIsInclude |
boolean |
Targeting: The languages of user's browser list type (true: whitelist, false: blacklist) |
data.*.spentDailyLimit |
integer |
Daily spent limit |
data.*.spentTotalLimit |
integer |
Total spent limit |
data.*.impressionsDailyLimit |
integer |
Daily impressions limit |
data.*.impressionsTotalLimit |
integer |
Total impressions limit |
data.*.clicksDailyLimit |
integer |
Daily clicks limit |
data.*.clicksTotalLimit |
integer |
Total clicks limit |
data.*.budgetUse |
integer |
Distribution: pacer, fast pacer - Evenly distribution fast - ASAP distribution |
data.*.allSources |
boolean |
Inventory: Use all SSP endpoints |
data.*.cpm |
float |
cpm |
data.*.adaptiveCpm |
boolean |
adaptiveCpm |
data.*.useCpm |
boolean |
use cpm |
data.*.extendedStatus |
string |
Campaign extended status |
data.*.createdAt |
datetime |
Date of creation |
data.*.updatedAt |
datetime |
Date of last modification |
data.*.deletedAt |
datetime |
Date of deletion |
meta.pagination.total |
integer |
Pagination: total items count |
meta.pagination.count |
integer |
Pagination: page items count |
meta.pagination.per_page |
integer |
Pagination: items per page |
meta.pagination.current_page |
integer |
Pagination: current page number |
meta.pagination.total_pages |
integer |
Pagination: total pages count |
meta.pagination.links |
array |
Pagination: urls to next,prev page |
2.1.4. HTTP Response
HTTP/1.0 200 OK
Content-type: application/json
Access-control-allow-origin: *
X-ratelimit-limit: 500
X-ratelimit-remaining: 499
{
"data": [
{
"id": 6,
"userId": 31,
"isActive": false,
"isRunning": false,
"type": "banner",
"name": "cupiditate",
"isRewarded": false,
"isDesktopWeb": false,
"isMobileApp": false,
"isMobileWeb": false,
"isSmartphone": false,
"isTablet": false,
"isCTV": false,
"isDOOH": false,
"aDomain": "legros.info",
"dateStart": "2025-03-04",
"dateEnd": "2026-12-29",
"geoCountries": [],
"geoCountriesIsInclude": true,
"geoRegions": [],
"geoRegionsIsInclude": true,
"geoCities": [],
"geoCitiesIsInclude": true,
"contentCategories": [],
"contentCategoriesIsInclude": true,
"userAgeMin": 0,
"userAgeMax": 0,
"connectionTypes": [
"wifi"
],
"clickedInventoryCategories": [],
"deviceCarrier": [],
"deviceCarrierIsInclude": true,
"OS": [],
"OSIsInclude": true,
"browser": [],
"browserIsInclude": true,
"deviceLanguage": [],
"deviceLanguageIsInclude": true,
"spentDailyLimit": 171,
"spentTotalLimit": 3219,
"impressionsDailyLimit": 284932,
"impressionsTotalLimit": 730503,
"clicksDailyLimit": 0,
"clicksTotalLimit": 0,
"budgetUse": "fast",
"allSources": true,
"cpm": 0,
"adaptiveCpm": false,
"useCpm": false,
"extendedStatus": "Campaign is not active",
"createdAt": "2026-02-20",
"updatedAt": "2026-02-20",
"deletedAt": null
},
{
"id": 7,
"userId": 31,
"isActive": false,
"isRunning": false,
"type": "native",
"name": "dolorem",
"isRewarded": false,
"isDesktopWeb": true,
"isMobileApp": true,
"isMobileWeb": false,
"isSmartphone": false,
"isTablet": true,
"isCTV": false,
"isDOOH": true,
"aDomain": "krajcik.org",
"dateStart": "2025-04-14",
"dateEnd": "2026-08-03",
"geoCountries": [],
"geoCountriesIsInclude": true,
"geoRegions": [],
"geoRegionsIsInclude": true,
"geoCities": [],
"geoCitiesIsInclude": true,
"contentCategories": [],
"contentCategoriesIsInclude": true,
"userAgeMin": 0,
"userAgeMax": 0,
"connectionTypes": [
"wifi"
],
"clickedInventoryCategories": [],
"deviceCarrier": [],
"deviceCarrierIsInclude": true,
"OS": [],
"OSIsInclude": true,
"browser": [],
"browserIsInclude": true,
"deviceLanguage": [],
"deviceLanguageIsInclude": true,
"spentDailyLimit": 206,
"spentTotalLimit": 8782,
"impressionsDailyLimit": 261607,
"impressionsTotalLimit": 735012,
"clicksDailyLimit": 0,
"clicksTotalLimit": 0,
"budgetUse": "fast",
"allSources": true,
"cpm": 0,
"adaptiveCpm": false,
"useCpm": false,
"extendedStatus": "Campaign is not active",
"createdAt": "2026-02-20",
"updatedAt": "2026-02-20",
"deletedAt": null
}
],
"meta": {
"pagination": {
"total": 2,
"count": 2,
"per_page": 15,
"current_page": 1,
"total_pages": 1,
"links": []
}
}
}
2.2. Campaigns list filtering
A `GET` request will return a list of an campaigns with filtering via query params.
2.2.1. HTTP Request
URL
GET api/campaigns HTTP/1.1
HEADER
Accept: application/json Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwOi8vbG9jYWxob3N0Ojk5MjMiLCJpYXQiOjE3NzE1NzczNjYsImV4cCI6MTc3MTU4MDk2NiwibmJmIjoxNzcxNTc3MzY2LCJqdGkiOiJLNnJKQVVHc29RQnRRdzl4Iiwic3ViIjoiMzIiLCJwcnYiOiIyM2JkNWM4OTQ5ZjYwMGFkYjM5ZTcwMWM0MDA4NzJkYjdhNTk3NmY3In0.r8UNZRatbmlTkid055XpEbWDKVbGHoZp-5Kxtr2qjf4
DATA
{
"search": "Filter",
"searchFields": "name:like",
"orderBy": "id",
"sortedBy": "desc"
}
2.2.2. Curl request
$ curl 'https://dsp-api.smartyads.com/api/campaigns' -i -X GET \
-H 'Accept: application/json' \
-H 'Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwOi8vbG9jYWxob3N0Ojk5MjMiLCJpYXQiOjE3NzE1NzczNjYsImV4cCI6MTc3MTU4MDk2NiwibmJmIjoxNzcxNTc3MzY2LCJqdGkiOiJLNnJKQVVHc29RQnRRdzl4Iiwic3ViIjoiMzIiLCJwcnYiOiIyM2JkNWM4OTQ5ZjYwMGFkYjM5ZTcwMWM0MDA4NzJkYjdhNTk3NmY3In0.r8UNZRatbmlTkid055XpEbWDKVbGHoZp-5Kxtr2qjf4' \
-d '{
"search": "Filter",
"searchFields": "name:like",
"orderBy": "id",
"sortedBy": "desc"
}'
2.2.3. Response Body
| Path | Type | Description |
|---|---|---|
data.*.id |
integer |
Campaign Id(test) |
data.*.userId |
integer |
User Id |
data.*.isActive |
boolean |
Campaign On/Off |
data.*.isRunning |
boolean |
Campaign running status |
data.*.type |
string |
Campaign type: banner, native, video, audio |
data.*.name |
string |
Campaign name |
data.*.isRewarded |
integer |
Rewarded video (for video creatives) |
data.*.isDesktopWeb |
boolean |
Traffic Type: Desktop Websites |
data.*.isMobileApp |
boolean |
Traffic Type: Mobile Applications |
data.*.isMobileWeb |
boolean |
Traffic Type: Mobile Websites |
data.*.isSmartphone |
boolean |
Traffic Type: Smartphones |
data.*.isTablet |
boolean |
Traffic Type: Tablets |
data.*.isCTV |
boolean |
Traffic Type: CTVs |
data.*.isDOOH |
boolean |
Traffic Type: DOOH |
data.*.aDomain |
integer |
Top level domain |
data.*.dateStart |
date |
Date start |
data.*.dateEnd |
date |
Date end |
data.*.geoCountries |
array |
GEO Targeting: countries list |
data.*.geoCountriesIsInclude |
boolean |
GEO Targeting: countries list type (true: whitelist, false: blacklist) |
data.*.geoRegions |
array |
GEO Targeting: regions list |
data.*.geoRegionsIsInclude |
boolean |
GEO Targeting: regions list type (true: whitelist, false: blacklist) |
data.*.geoCities |
array |
GEO Targeting: cities list |
data.*.geoCitiesIsInclude |
boolean |
GEO Targeting: cities list type (true: whitelist, false: blacklist) |
data.*.contentCategories |
array |
Targeting: IAB Categories list |
data.*.contentCategoriesIsInclude |
boolean |
Targeting: IAB Categories list type (true: whitelist, false: blacklist) |
data.*.userAgeMin |
integer |
Targeting: Age range from |
data.*.userAgeMax |
integer |
Targeting: Age range to |
data..connectionTypes. |
string |
Connection type (wifi, ethernet, cellular_all, cellular_3g, cellular_4g, cellular_5g) |
data.*.clickedInventoryCategories |
array |
Сlicked Inventory Categories |
data.*.deviceCarrier |
array |
Targeting: List of network operators. |
data.*.deviceCarrierIsInclude |
boolean |
Targeting: List of network operators type (true: whitelist, false: blacklist) |
data.*.OS |
array |
Targeting: The operating system of user's device |
data.*.OSIsInclude |
boolean |
Targeting: The operating system of user's device list type (true: whitelist, false: blacklist) |
data.*.browser |
array |
Targeting: The user's browsers list |
data.*.browserIsInclude |
boolean |
Targeting: The user's browsers list type (true: whitelist, false: blacklist) |
data.*.deviceLanguage |
array |
Targeting: The languages of user's browser |
data.*.deviceLanguageIsInclude |
boolean |
Targeting: The languages of user's browser list type (true: whitelist, false: blacklist) |
data.*.spentDailyLimit |
integer |
Daily spent limit |
data.*.spentTotalLimit |
integer |
Total spent limit |
data.*.impressionsDailyLimit |
integer |
Daily impressions limit |
data.*.impressionsTotalLimit |
integer |
Total impressions limit |
data.*.clicksDailyLimit |
integer |
Daily clicks limit |
data.*.clicksTotalLimit |
integer |
Total clicks limit |
data.*.budgetUse |
integer |
Distribution: pacer, fast pacer - Evenly distribution fast - ASAP distribution |
data.*.allSources |
boolean |
Inventory: Use all SSP endpoints |
data.*.cpm |
float |
cpm |
data.*.adaptiveCpm |
boolean |
adaptiveCpm |
data.*.useCpm |
boolean |
use cpm |
data.*.extendedStatus |
string |
Campaign extended status |
data.*.createdAt |
datetime |
Date of creation |
data.*.updatedAt |
datetime |
Date of last modification |
data.*.deletedAt |
datetime |
Date of deletion |
meta.pagination.total |
integer |
Pagination: total items count |
meta.pagination.count |
integer |
Pagination: page items count |
meta.pagination.per_page |
integer |
Pagination: items per page |
meta.pagination.current_page |
integer |
Pagination: current page number |
meta.pagination.total_pages |
integer |
Pagination: total pages count |
meta.pagination.links |
array |
Pagination: urls to next,prev page |
2.2.4. HTTP Response
HTTP/1.0 200 OK
Content-type: application/json
Access-control-allow-origin: *
X-ratelimit-limit: 500
X-ratelimit-remaining: 499
{
"data": [
{
"id": 8,
"userId": 32,
"isActive": true,
"isRunning": false,
"type": "audio",
"name": "Alpha Campaign",
"isRewarded": false,
"isDesktopWeb": false,
"isMobileApp": false,
"isMobileWeb": true,
"isSmartphone": false,
"isTablet": true,
"isCTV": false,
"isDOOH": true,
"aDomain": "hegmann.org",
"dateStart": "2025-02-07",
"dateEnd": "2026-06-02",
"geoCountries": [],
"geoCountriesIsInclude": true,
"geoRegions": [],
"geoRegionsIsInclude": true,
"geoCities": [],
"geoCitiesIsInclude": true,
"contentCategories": [],
"contentCategoriesIsInclude": true,
"userAgeMin": 0,
"userAgeMax": 0,
"connectionTypes": [
"wifi"
],
"clickedInventoryCategories": [],
"deviceCarrier": [],
"deviceCarrierIsInclude": true,
"OS": [],
"OSIsInclude": true,
"browser": [],
"browserIsInclude": true,
"deviceLanguage": [],
"deviceLanguageIsInclude": true,
"spentDailyLimit": 400,
"spentTotalLimit": 8517,
"impressionsDailyLimit": 222076,
"impressionsTotalLimit": 521605,
"clicksDailyLimit": 0,
"clicksTotalLimit": 0,
"budgetUse": "fast",
"allSources": true,
"cpm": 0,
"adaptiveCpm": false,
"useCpm": false,
"extendedStatus": "Low Balance",
"createdAt": "2026-02-20",
"updatedAt": "2026-02-20",
"deletedAt": null
},
{
"id": 9,
"userId": 32,
"isActive": false,
"isRunning": false,
"type": "audio",
"name": "Filter Campaign",
"isRewarded": false,
"isDesktopWeb": true,
"isMobileApp": true,
"isMobileWeb": false,
"isSmartphone": false,
"isTablet": true,
"isCTV": false,
"isDOOH": true,
"aDomain": "anderson.com",
"dateStart": "2024-05-18",
"dateEnd": "2026-11-11",
"geoCountries": [],
"geoCountriesIsInclude": true,
"geoRegions": [],
"geoRegionsIsInclude": true,
"geoCities": [],
"geoCitiesIsInclude": true,
"contentCategories": [],
"contentCategoriesIsInclude": true,
"userAgeMin": 0,
"userAgeMax": 0,
"connectionTypes": [
"wifi"
],
"clickedInventoryCategories": [],
"deviceCarrier": [],
"deviceCarrierIsInclude": true,
"OS": [],
"OSIsInclude": true,
"browser": [],
"browserIsInclude": true,
"deviceLanguage": [],
"deviceLanguageIsInclude": true,
"spentDailyLimit": 135,
"spentTotalLimit": 4639,
"impressionsDailyLimit": 269240,
"impressionsTotalLimit": 435870,
"clicksDailyLimit": 0,
"clicksTotalLimit": 0,
"budgetUse": "fast",
"allSources": true,
"cpm": 0,
"adaptiveCpm": false,
"useCpm": false,
"extendedStatus": "Campaign is not active",
"createdAt": "2026-02-20",
"updatedAt": "2026-02-20",
"deletedAt": null
},
{
"id": 10,
"userId": 32,
"isActive": false,
"isRunning": false,
"type": "video",
"name": "Beta Campaign",
"isRewarded": false,
"isDesktopWeb": true,
"isMobileApp": false,
"isMobileWeb": true,
"isSmartphone": false,
"isTablet": false,
"isCTV": false,
"isDOOH": true,
"aDomain": "wilderman.com",
"dateStart": "2026-01-20",
"dateEnd": "2026-10-15",
"geoCountries": [],
"geoCountriesIsInclude": true,
"geoRegions": [],
"geoRegionsIsInclude": true,
"geoCities": [],
"geoCitiesIsInclude": true,
"contentCategories": [],
"contentCategoriesIsInclude": true,
"userAgeMin": 0,
"userAgeMax": 0,
"connectionTypes": [
"wifi"
],
"clickedInventoryCategories": [],
"deviceCarrier": [],
"deviceCarrierIsInclude": true,
"OS": [],
"OSIsInclude": true,
"browser": [],
"browserIsInclude": true,
"deviceLanguage": [],
"deviceLanguageIsInclude": true,
"spentDailyLimit": 237,
"spentTotalLimit": 5463,
"impressionsDailyLimit": 271587,
"impressionsTotalLimit": 674095,
"clicksDailyLimit": 0,
"clicksTotalLimit": 0,
"budgetUse": "fast",
"allSources": true,
"cpm": 0,
"adaptiveCpm": false,
"useCpm": false,
"extendedStatus": "Campaign is not active",
"createdAt": "2026-02-20",
"updatedAt": "2026-02-20",
"deletedAt": null
}
],
"meta": {
"pagination": {
"total": 3,
"count": 3,
"per_page": 15,
"current_page": 1,
"total_pages": 1,
"links": []
}
}
}
2.3. Get by ID
A `GET` request with a path parameter of the id will return the campaign with that id.
2.3.1. HTTP Request
URL
GET api/campaigns/11 HTTP/1.1
HEADER
Accept: application/json Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwOi8vbG9jYWxob3N0Ojk5MjMiLCJpYXQiOjE3NzE1NzczNjYsImV4cCI6MTc3MTU4MDk2NiwibmJmIjoxNzcxNTc3MzY2LCJqdGkiOiJTMjdPNlJxdWJBdTVhS1FkIiwic3ViIjoiMzMiLCJwcnYiOiIyM2JkNWM4OTQ5ZjYwMGFkYjM5ZTcwMWM0MDA4NzJkYjdhNTk3NmY3In0.FZe3Q-zMKpIMMSeUL2AHdTEGrWD3uRSNHGQhZnEbt3c
DATA
{}
2.3.2. Curl request
$ curl 'https://dsp-api.smartyads.com/api/campaigns/11' -i -X GET \
-H 'Accept: application/json' \
-H 'Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwOi8vbG9jYWxob3N0Ojk5MjMiLCJpYXQiOjE3NzE1NzczNjYsImV4cCI6MTc3MTU4MDk2NiwibmJmIjoxNzcxNTc3MzY2LCJqdGkiOiJTMjdPNlJxdWJBdTVhS1FkIiwic3ViIjoiMzMiLCJwcnYiOiIyM2JkNWM4OTQ5ZjYwMGFkYjM5ZTcwMWM0MDA4NzJkYjdhNTk3NmY3In0.FZe3Q-zMKpIMMSeUL2AHdTEGrWD3uRSNHGQhZnEbt3c' \
-d '{}'
2.3.3. Response Body
| Path | Type | Description |
|---|---|---|
data.id |
integer |
Campaign Id |
data.userId |
integer |
User Id |
data.isActive |
boolean |
Campaign On/Off |
data.isRunning |
boolean |
Campaign running status |
data.type |
string |
Campaign type: banner, native, video, audio |
data.name |
string |
Campaign name |
data.isRewarded |
integer |
Rewarded video (for video creatives) |
data.isDesktopWeb |
boolean |
Traffic Type: Desktop Websites |
data.isMobileApp |
boolean |
Traffic Type: Mobile Applications |
data.isMobileWeb |
boolean |
Traffic Type: Mobile Websites |
data.isSmartphone |
boolean |
Traffic Type: Smartphones |
data.isTablet |
boolean |
Traffic Type: Tablets |
data.isCTV |
boolean |
Traffic Type: CTV |
data.isDOOH |
boolean |
Traffic Type: DOOH |
data.aDomain |
integer |
Top level domain |
data.dateStart |
date |
Date start |
data.dateEnd |
date |
Date end |
data.geoCountries |
array |
GEO Targeting: countries list |
data.geoCountriesIsInclude |
boolean |
GEO Targeting: countries list type (true: whitelist, false: blacklist) |
data.geoRegions |
array |
GEO Targeting: regions list |
data.geoRegionsIsInclude |
boolean |
GEO Targeting: regions list type (true: whitelist, false: blacklist) |
data.geoCities |
array |
GEO Targeting: cities list |
data.geoCitiesIsInclude |
boolean |
GEO Targeting: cities list type (true: whitelist, false: blacklist) |
data.contentCategories |
array |
Targeting: IAB Categories list |
data.contentCategoriesIsInclude |
boolean |
Targeting: IAB Categories list type (true: whitelist, false: blacklist) |
data.userAgeMin |
integer |
Targeting: Age range from |
data.userAgeMax |
integer |
Targeting: Age range to |
data.connectionTypes.* |
string |
Connection type (wifi, ethernet, cellular_all, cellular_3g, cellular_4g, cellular_5g) |
data.clickedInventoryCategories |
array |
Сlicked Inventory Categories |
data.deviceCarrier |
array |
Targeting: List of network operators. |
data.deviceCarrierIsInclude |
boolean |
Targeting: List of network operators type (true: whitelist, false: blacklist) |
data.OS |
array |
Targeting: The operating system of user's device |
data.OSIsInclude |
boolean |
Targeting: The operating system of user's device list type (true: whitelist, false: blacklist) |
data.browser |
array |
Targeting: The user's browsers list |
data.browserIsInclude |
boolean |
Targeting: The user's browsers list type (true: whitelist, false: blacklist) |
data.deviceLanguage |
array |
Targeting: The languages of user's browser |
data.deviceLanguageIsInclude |
boolean |
Targeting: The languages of user's browser list type (true: whitelist, false: blacklist) |
data.spentDailyLimit |
integer |
Daily spent limit |
data.spentTotalLimit |
integer |
Total spent limit |
data.impressionsDailyLimit |
integer |
Daily impressions limit |
data.impressionsTotalLimit |
integer |
Total impressions limit |
data.clicksDailyLimit |
integer |
Daily clicks limit |
data.clicksTotalLimit |
integer |
Total clicks limit |
data.budgetUse |
integer |
Distribution: pacer, fast pacer - Evenly distribution fast - ASAP distribution |
data.allSources |
boolean |
Inventory: Use all SSP endpoints |
data.cpm |
float |
cpm |
data.adaptiveCpm |
boolean |
adaptiveCpm |
data.useCpm |
boolean |
use cpm |
data.googleAnalyticsTrackingCode |
string |
Google Analytics tracking code - PUSH Campaigns |
data.dynamicTargeting |
array |
SmartCPC: Dynamic targeting - only for CPC Pricing model |
data.subscriptionAge |
array |
Subscription Age - only for CPC Pricing model |
data.frequencyType |
string |
Frequency Type (user, ip).Required if frequency is on. |
data.frequency |
boolean |
Frequency on/off. |
data.frequencyCap |
integer |
Show ads no more than "Frequency Cap" times in "Frequency Period".Required if frequency is on. |
data.frequencyPeriod |
integer |
Frequency Period (min-1,max-3). Required if frequency is on. |
data.extendedStatus |
string |
Campaign extended status |
data.createdAt |
datetime |
Date of creation |
data.updatedAt |
datetime |
Date of last modification |
data.deletedAt |
datetime |
Date of deletion |
data.pretarget |
int |
pretarget |
data.pretargets |
array |
pretargets |
data.audiences |
array |
audiences |
2.3.4. HTTP Response
HTTP/1.0 200 OK
Content-type: application/json
Access-control-allow-origin: *
X-ratelimit-limit: 500
X-ratelimit-remaining: 499
{
"data": {
"id": 11,
"userId": 33,
"isActive": true,
"isRunning": false,
"type": "video",
"name": "Test Campaign #1",
"isRewarded": false,
"isDesktopWeb": false,
"isMobileApp": true,
"isMobileWeb": false,
"isSmartphone": false,
"isTablet": false,
"isCTV": true,
"isDOOH": true,
"aDomain": "mayert.com",
"dateStart": "2024-09-26",
"dateEnd": "2026-06-29",
"geoCountries": [],
"geoCountriesIsInclude": true,
"geoRegions": [],
"geoRegionsIsInclude": true,
"geoCities": [],
"geoCitiesIsInclude": true,
"contentCategories": [],
"contentCategoriesIsInclude": true,
"userAgeMin": 0,
"userAgeMax": 0,
"connectionTypes": [
"wifi"
],
"clickedInventoryCategories": [],
"deviceCarrier": [],
"deviceCarrierIsInclude": true,
"OS": [],
"OSIsInclude": true,
"browser": [],
"browserIsInclude": true,
"deviceLanguage": [],
"deviceLanguageIsInclude": true,
"spentDailyLimit": 474,
"spentTotalLimit": 7436,
"impressionsDailyLimit": 228264,
"impressionsTotalLimit": 594404,
"clicksDailyLimit": 0,
"clicksTotalLimit": 0,
"budgetUse": "fast",
"allSources": true,
"cpm": 0,
"adaptiveCpm": false,
"useCpm": false,
"googleAnalyticsTrackingCode": null,
"dynamicTargeting": [],
"subscriptionAge": [],
"frequencyType": "user",
"frequency": 0,
"frequencyCap": 1,
"frequencyPeriod": 1,
"extendedStatus": "Low Balance",
"createdAt": "2026-02-20",
"updatedAt": "2026-02-20",
"deletedAt": null,
"pretarget": null,
"pretargets": [],
"audiences": []
}
}
2.4. Create a Custom Banner/Native/Video/Audio Campaigns
A `POST` request will create new campaign. Request payload supports the same targeting and capping fields as in update (including geoCities/geoCitiesIsInclude and frequency/frequencyCap/frequencyPeriod).
2.4.1. Request Body
| Path | Type | Description | Required |
|---|---|---|---|
type |
string |
Campaign type: banner, native, video, audio |
+ |
name |
string |
Campaign name |
+ |
aDomain |
string |
Top level domain |
+ |
isRewarded |
boolean |
Rewarded video (for video creatives) |
|
isDesktopWeb |
boolean |
Traffic Type: Desktop Websites |
|
isMobileApp |
boolean |
Traffic Type: Mobile Applications |
|
isMobileWeb |
boolean |
Traffic Type: Mobile Websites |
|
isSmartphone |
boolean |
Traffic Type: Smartphones |
|
isTablet |
boolean |
Traffic Type: Tablets |
|
contentCategories.* |
string |
IAB Category ID |
|
contentCategoriesIsInclude |
boolean |
Targeting: IAB Categories list type (true: whitelist, false: blacklist) |
|
userAgeMin |
integer |
Targeting: Age range from |
|
userAgeMax |
integer |
Targeting: Age range to |
|
connectionTypes.* |
string |
Connection type (wifi, ethernet, cellular_all, cellular_3g, cellular_4g, cellular_5g) |
|
deviceCarrier.* |
string |
Network operator name |
|
deviceCarrierIsInclude |
boolean |
Targeting: List of network operators type (true: whitelist, false: blacklist) |
|
OS.* |
string |
Operating system name |
|
OSIsInclude |
boolean |
Targeting: The operating system of user's device list type (true: whitelist, false: blacklist) |
|
browser.* |
string |
Browser name |
|
browserIsInclude |
boolean |
Targeting: The user's browsers list type (true: whitelist, false: blacklist) |
|
deviceLanguage.* |
string |
Language code (ISO-like, e.g. "en", "ru") |
|
deviceLanguageIsInclude |
boolean |
Targeting: The languages of user's browser list type (true: whitelist, false: blacklist) |
|
spentDailyLimit |
integer |
Daily spent limit |
|
spentTotalLimit |
integer |
Total spent limit |
|
impressionsDailyLimit |
integer |
Daily impressions limit |
|
impressionsTotalLimit |
integer |
Total impressions limit |
|
clicksDailyLimit |
integer |
Daily clicks limit |
|
clicksTotalLimit |
integer |
Total clicks limit |
|
budgetUse |
string |
Distribution: pacer, fast pacer - Evenly distribution fast - ASAP distribution |
|
geoCountries.* |
string |
Country ISO3 code. Use GET /geo/countries (response field: iso3). |
|
geoCountriesIsInclude |
boolean |
GEO Targeting: countries list type (true: whitelist, false: blacklist) |
|
geoRegions.* |
string |
Region/state ISO2 code. Use GET /geo/regions (response field: state_iso2). |
|
geoRegionsIsInclude |
boolean |
GEO Targeting: regions list type (true: whitelist, false: blacklist) |
|
geoCities.* |
integer |
City geoname_id. Use GET /geo/cities (response field: geoname_id). |
|
geoCitiesIsInclude |
boolean |
GEO Targeting: cities list type (true: whitelist, false: blacklist) |
|
frequency |
boolean |
Frequency capping on/off. |
|
frequencyType |
string |
Frequency capping type (user, ip). Required if frequency is on. |
|
frequencyCap |
integer |
Show ads no more than "Frequency Cap" times in "Frequency Period". Required if frequency is on. |
|
frequencyPeriod |
integer |
Frequency period (days). Required if frequency is on. |
|
dateStart |
date |
Date start |
|
dateEnd |
date |
Date end |
2.4.2. HTTP Request
URL
POST api/campaigns HTTP/1.1
HEADER
Accept: application/json Content-type: application/json Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwOi8vbG9jYWxob3N0Ojk5MjMiLCJpYXQiOjE3NzE1NzczNjcsImV4cCI6MTc3MTU4MDk2NywibmJmIjoxNzcxNTc3MzY3LCJqdGkiOiJsM0NYY0VnTGJTalhnSHozIiwic3ViIjoiMzQiLCJwcnYiOiIyM2JkNWM4OTQ5ZjYwMGFkYjM5ZTcwMWM0MDA4NzJkYjdhNTk3NmY3In0.wGyLxLiPSSEt3foNZqVLGLuxXlAPlBHoo8kRba8dnRI
DATA
{
"type": "banner",
"name": "New Campaign #2",
"aDomain": "feest.com",
"isRewarded": true,
"isDesktopWeb": true,
"isMobileApp": true,
"isMobileWeb": true,
"isSmartphone": true,
"isTablet": true,
"contentCategories": [
"IAB1",
"IAB3"
],
"contentCategoriesIsInclude": false,
"userAgeMin": 18,
"userAgeMax": 50,
"connectionTypes": [
"ethernet",
"cellular_all",
"cellular_3g",
"cellular_4g",
"wifi"
],
"deviceCarrier": [
"ISP Green-Stiedemann",
"ISP Simonis Inc"
],
"deviceCarrierIsInclude": false,
"OS": [
"Android 8.0",
"Android 8.1",
"Android 9.0",
"Android 10.0",
"Android 11.0",
"Android 12.0",
"Android 13.0",
"iOS"
],
"OSIsInclude": true,
"browser": [
"Chrome",
"IE",
"Edge"
],
"browserIsInclude": true,
"deviceLanguage": [
"ab",
"aa"
],
"deviceLanguageIsInclude": true,
"spentDailyLimit": 200,
"spentTotalLimit": 1000,
"impressionsDailyLimit": 100000,
"impressionsTotalLimit": 1000000,
"clicksDailyLimit": 500,
"clicksTotalLimit": 1000,
"budgetUse": "fast",
"geoCountries": [
"USA"
],
"geoCountriesIsInclude": true,
"geoRegions": [
"CA",
"NY"
],
"geoRegionsIsInclude": true,
"geoCities": [
999001,
999002
],
"geoCitiesIsInclude": true,
"frequency": true,
"frequencyType": "user",
"frequencyCap": 3,
"frequencyPeriod": 1,
"dateStart": "2025-06-04",
"dateEnd": "2026-11-07"
}
2.4.3. Curl request
$ curl 'https://dsp-api.smartyads.com/api/campaigns' -i -X POST \
-H 'Accept: application/json' \
-H 'Content-type: application/json' \
-H 'Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwOi8vbG9jYWxob3N0Ojk5MjMiLCJpYXQiOjE3NzE1NzczNjcsImV4cCI6MTc3MTU4MDk2NywibmJmIjoxNzcxNTc3MzY3LCJqdGkiOiJsM0NYY0VnTGJTalhnSHozIiwic3ViIjoiMzQiLCJwcnYiOiIyM2JkNWM4OTQ5ZjYwMGFkYjM5ZTcwMWM0MDA4NzJkYjdhNTk3NmY3In0.wGyLxLiPSSEt3foNZqVLGLuxXlAPlBHoo8kRba8dnRI' \
-d '{
"type": "banner",
"name": "New Campaign #2",
"aDomain": "feest.com",
"isRewarded": true,
"isDesktopWeb": true,
"isMobileApp": true,
"isMobileWeb": true,
"isSmartphone": true,
"isTablet": true,
"contentCategories": [
"IAB1",
"IAB3"
],
"contentCategoriesIsInclude": false,
"userAgeMin": 18,
"userAgeMax": 50,
"connectionTypes": [
"ethernet",
"cellular_all",
"cellular_3g",
"cellular_4g",
"wifi"
],
"deviceCarrier": [
"ISP Green-Stiedemann",
"ISP Simonis Inc"
],
"deviceCarrierIsInclude": false,
"OS": [
"Android 8.0",
"Android 8.1",
"Android 9.0",
"Android 10.0",
"Android 11.0",
"Android 12.0",
"Android 13.0",
"iOS"
],
"OSIsInclude": true,
"browser": [
"Chrome",
"IE",
"Edge"
],
"browserIsInclude": true,
"deviceLanguage": [
"ab",
"aa"
],
"deviceLanguageIsInclude": true,
"spentDailyLimit": 200,
"spentTotalLimit": 1000,
"impressionsDailyLimit": 100000,
"impressionsTotalLimit": 1000000,
"clicksDailyLimit": 500,
"clicksTotalLimit": 1000,
"budgetUse": "fast",
"geoCountries": [
"USA"
],
"geoCountriesIsInclude": true,
"geoRegions": [
"CA",
"NY"
],
"geoRegionsIsInclude": true,
"geoCities": [
999001,
999002
],
"geoCitiesIsInclude": true,
"frequency": true,
"frequencyType": "user",
"frequencyCap": 3,
"frequencyPeriod": 1,
"dateStart": "2025-06-04",
"dateEnd": "2026-11-07"
}'
2.4.4. Response Body
| Path | Type | Description |
|---|---|---|
data.id |
integer |
Campaign Id |
data.userId |
integer |
User Id |
data.isActive |
boolean |
Campaign On/Off |
data.isRunning |
boolean |
Campaign running status |
data.type |
string |
Campaign type: banner, native, video, audio |
data.name |
string |
Campaign name |
data.isRewarded |
integer |
Rewarded video (for video creatives) |
data.isDesktopWeb |
boolean |
Traffic Type: Desktop Websites |
data.isMobileApp |
boolean |
Traffic Type: Mobile Applications |
data.isMobileWeb |
boolean |
Traffic Type: Mobile Websites |
data.isSmartphone |
boolean |
Traffic Type: Smartphones |
data.isTablet |
boolean |
Traffic Type: Tablets |
data.isCTV |
boolean |
Traffic Type: CTV |
data.isDOOH |
boolean |
Traffic Type: DOOH |
data.aDomain |
integer |
Top level domain |
data.dateStart |
date |
Date start |
data.dateEnd |
date |
Date end |
data.geoCountries.* |
string |
Country ISO3 code |
data.geoCountriesIsInclude |
boolean |
GEO Targeting: countries list type (true: whitelist, false: blacklist) |
data.geoRegions.* |
string |
Region/state ISO2 code |
data.geoRegionsIsInclude |
boolean |
GEO Targeting: regions list type (true: whitelist, false: blacklist) |
data.geoCities.* |
integer |
City geoname_id |
data.geoCitiesIsInclude |
boolean |
GEO Targeting: cities list type (true: whitelist, false: blacklist) |
data.contentCategories |
array |
Targeting: IAB Categories list |
data.contentCategoriesIsInclude |
boolean |
Targeting: IAB Categories list type (true: whitelist, false: blacklist) |
data.userAgeMin |
integer |
Targeting: Age range from |
data.userAgeMax |
integer |
Targeting: Age range to |
data.connectionTypes.* |
string |
Connection type (wifi, ethernet, cellular_all, cellular_3g, cellular_4g, cellular_5g) |
data.clickedInventoryCategories |
array |
Сlicked Inventory Categories |
data.deviceCarrier.* |
string |
Network operator name |
data.deviceCarrierIsInclude |
boolean |
Targeting: List of network operators type (true: whitelist, false: blacklist) |
data.OS.* |
string |
Operating system name |
data.OSIsInclude |
boolean |
Targeting: The operating system of user's device list type (true: whitelist, false: blacklist) |
data.browser.* |
string |
Browser name |
data.browserIsInclude |
boolean |
Targeting: The user's browsers list type (true: whitelist, false: blacklist) |
data.deviceLanguage.* |
string |
Language code (ISO-like, e.g. "en", "ru") |
data.deviceLanguageIsInclude |
boolean |
Targeting: The languages of user's browser list type (true: whitelist, false: blacklist) |
data.spentDailyLimit |
integer |
Daily spent limit |
data.spentTotalLimit |
integer |
Total spent limit |
data.impressionsDailyLimit |
integer |
Daily impressions limit |
data.impressionsTotalLimit |
integer |
Total impressions limit |
data.clicksDailyLimit |
integer |
Daily clicks limit |
data.clicksTotalLimit |
integer |
Total clicks limit |
data.budgetUse |
integer |
Distribution: pacer, fast pacer - Evenly distribution fast - ASAP distribution |
data.allSources |
boolean |
Inventory: Use all SSP endpoints |
data.cpm |
float |
cpm |
data.adaptiveCpm |
boolean |
adaptiveCpm |
data.useCpm |
boolean |
use cpm |
data.googleAnalyticsTrackingCode |
string |
Google Analytics tracking code - PUSH Campaigns |
data.dynamicTargeting |
array |
SmartCPC: Dynamic targeting - only for CPC Pricing model |
data.subscriptionAge |
array |
Subscription Age - only for CPC Pricing model |
data.frequencyType |
string |
Frequency Type (user, ip).Required if frequency is on. |
data.frequency |
boolean |
Frequency on/off. |
data.frequencyCap |
integer |
Show ads no more than "Frequency Cap" times in "Frequency Period".Required if frequency is on. |
data.frequencyPeriod |
integer |
Frequency Period (min-1,max-3). Required if frequency is on. |
data.extendedStatus |
string |
Campaign extended status |
data.createdAt |
datetime |
Date of creation |
data.updatedAt |
datetime |
Date of last modification |
data.deletedAt |
datetime |
Date of deletion |
data.pretarget |
int |
pretarget |
data.pretargets |
array |
pretargets |
data.audiences |
array |
audiences |
2.4.5. HTTP Response
HTTP/1.0 200 OK
Content-type: application/json
Access-control-allow-origin: *
X-ratelimit-limit: 500
X-ratelimit-remaining: 499
{
"data": {
"id": 12,
"userId": 34,
"isActive": null,
"isRunning": false,
"type": "banner",
"name": "New Campaign #2",
"isRewarded": true,
"isDesktopWeb": true,
"isMobileApp": true,
"isMobileWeb": true,
"isSmartphone": true,
"isTablet": true,
"isCTV": true,
"isDOOH": true,
"aDomain": "feest.com",
"dateStart": "2025-06-04",
"dateEnd": "2026-11-07",
"geoCountries": [
"USA"
],
"geoCountriesIsInclude": true,
"geoRegions": [
"CA",
"NY"
],
"geoRegionsIsInclude": true,
"geoCities": [
"999001",
"999002"
],
"geoCitiesIsInclude": true,
"contentCategories": [],
"contentCategoriesIsInclude": null,
"userAgeMin": 18,
"userAgeMax": 50,
"connectionTypes": [
"ethernet",
"cellular_all",
"cellular_3g",
"cellular_4g",
"wifi"
],
"clickedInventoryCategories": [],
"deviceCarrier": [
"ISP Green-Stiedemann",
"ISP Simonis Inc"
],
"deviceCarrierIsInclude": false,
"OS": [
"Android 8.0",
"Android 8.1",
"Android 9.0",
"Android 10.0",
"Android 11.0",
"Android 12.0",
"Android 13.0",
"iOS"
],
"OSIsInclude": true,
"browser": [
"Chrome",
"IE",
"Edge"
],
"browserIsInclude": true,
"deviceLanguage": [
"ab",
"aa"
],
"deviceLanguageIsInclude": true,
"spentDailyLimit": 200,
"spentTotalLimit": 1000,
"impressionsDailyLimit": 100000,
"impressionsTotalLimit": 1000000,
"clicksDailyLimit": 500,
"clicksTotalLimit": 1000,
"budgetUse": "fast",
"allSources": false,
"cpm": null,
"adaptiveCpm": null,
"useCpm": null,
"googleAnalyticsTrackingCode": null,
"dynamicTargeting": [],
"subscriptionAge": [],
"frequencyType": "user",
"frequency": true,
"frequencyCap": 3,
"frequencyPeriod": 1,
"extendedStatus": "Campaign is not active",
"createdAt": "2026-02-20",
"updatedAt": "2026-02-20",
"deletedAt": null,
"pretarget": null,
"pretargets": [],
"audiences": []
}
}
2.5. Update a Custom Campaign
A `PATCH` request will update campaign.
2.5.1. Request Body
| Path | Type | Description | Required |
|---|---|---|---|
name |
string |
Campaign name |
+ |
geoCountries |
array |
GEO Targeting: countries list. Use GET /geo/countries (response field: iso3). |
|
geoCountriesIsInclude |
boolean |
GEO Targeting: countries list type (true: whitelist, false: blacklist) |
|
geoRegions |
array |
GEO Targeting: regions list. Use GET /geo/regions?selectedCountries=USA,CAN (response field: state_iso2). Note: API may return multiple codes joined with a vertical bar. |
|
geoRegionsIsInclude |
boolean |
GEO Targeting: regions list type (true: whitelist, false: blacklist) |
|
geoCities |
array |
GEO Targeting: cities list. Use GET /geo/cities?selectedCountries=USA&selectedRegions=US-CA (response field: geoname_id). Note: API may return multiple ids joined with a vertical bar. |
|
geoCitiesIsInclude |
boolean |
GEO Targeting: cities list type (true: whitelist, false: blacklist) |
|
frequency |
boolean |
Frequency capping on/off. |
|
frequencyType |
string |
Frequency capping type (user, ip). Required if frequency is on. |
|
frequencyCap |
integer |
Show ads no more than "Frequency Cap" times in "Frequency Period". Required if frequency is on. |
|
frequencyPeriod |
integer |
Frequency period (days). Required if frequency is on. |
2.5.2. HTTP Request
URL
PATCH api/campaigns/13 HTTP/1.1
HEADER
Accept: application/json Content-type: application/json Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwOi8vbG9jYWxob3N0Ojk5MjMiLCJpYXQiOjE3NzE1NzczNjcsImV4cCI6MTc3MTU4MDk2NywibmJmIjoxNzcxNTc3MzY3LCJqdGkiOiJOWWpJWG9zWUQxZTFZZUxjIiwic3ViIjoiMzUiLCJwcnYiOiIyM2JkNWM4OTQ5ZjYwMGFkYjM5ZTcwMWM0MDA4NzJkYjdhNTk3NmY3In0.IeY9Gf61HcAgu6fVcKeNdPAB8-rwvtLBJjBDmFPi2R4
DATA
{
"name": "Updated Campaign #3",
"geoCountries": [],
"geoCountriesIsInclude": true,
"geoRegions": [],
"geoRegionsIsInclude": true,
"geoCities": [],
"geoCitiesIsInclude": true,
"frequency": true,
"frequencyType": "user",
"frequencyCap": 3,
"frequencyPeriod": 1
}
2.5.3. Curl request
$ curl 'https://dsp-api.smartyads.com/api/campaigns/13' -i -X PATCH \
-H 'Accept: application/json' \
-H 'Content-type: application/json' \
-H 'Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwOi8vbG9jYWxob3N0Ojk5MjMiLCJpYXQiOjE3NzE1NzczNjcsImV4cCI6MTc3MTU4MDk2NywibmJmIjoxNzcxNTc3MzY3LCJqdGkiOiJOWWpJWG9zWUQxZTFZZUxjIiwic3ViIjoiMzUiLCJwcnYiOiIyM2JkNWM4OTQ5ZjYwMGFkYjM5ZTcwMWM0MDA4NzJkYjdhNTk3NmY3In0.IeY9Gf61HcAgu6fVcKeNdPAB8-rwvtLBJjBDmFPi2R4' \
-d '{
"name": "Updated Campaign #3",
"geoCountries": [],
"geoCountriesIsInclude": true,
"geoRegions": [],
"geoRegionsIsInclude": true,
"geoCities": [],
"geoCitiesIsInclude": true,
"frequency": true,
"frequencyType": "user",
"frequencyCap": 3,
"frequencyPeriod": 1
}'
2.5.4. Response Body
| Path | Type | Description |
|---|---|---|
data.id |
integer |
Campaign Id |
data.userId |
integer |
User Id |
data.isActive |
boolean |
Campaign On/Off |
data.isRunning |
boolean |
Campaign running status |
data.type |
string |
Campaign type: banner, native, video, audio |
data.name |
string |
Campaign name |
data.isRewarded |
integer |
Rewarded video (for video creatives) |
data.isDesktopWeb |
boolean |
Traffic Type: Desktop Websites |
data.isMobileApp |
boolean |
Traffic Type: Mobile Applications |
data.isMobileWeb |
boolean |
Traffic Type: Mobile Websites |
data.isSmartphone |
boolean |
Traffic Type: Smartphones |
data.isTablet |
boolean |
Traffic Type: Tablets |
data.isCTV |
boolean |
Traffic Type: CTV |
data.isDOOH |
boolean |
Traffic Type: DOOH |
data.aDomain |
integer |
Top level domain |
data.dateStart |
date |
Date start |
data.dateEnd |
date |
Date end |
data.geoCountries |
array |
GEO Targeting: countries list |
data.geoCountriesIsInclude |
boolean |
GEO Targeting: countries list type (true: whitelist, false: blacklist) |
data.geoRegions |
array |
GEO Targeting: regions list |
data.geoRegionsIsInclude |
boolean |
GEO Targeting: regions list type (true: whitelist, false: blacklist) |
data.geoCities |
array |
GEO Targeting: cities list |
data.geoCitiesIsInclude |
boolean |
GEO Targeting: cities list type (true: whitelist, false: blacklist) |
data.contentCategories |
array |
Targeting: IAB Categories list |
data.contentCategoriesIsInclude |
boolean |
Targeting: IAB Categories list type (true: whitelist, false: blacklist) |
data.userAgeMin |
integer |
Targeting: Age range from |
data.userAgeMax |
integer |
Targeting: Age range to |
data.connectionTypes.* |
string |
Connection type (wifi, ethernet, cellular_all, cellular_3g, cellular_4g, cellular_5g) |
data.clickedInventoryCategories |
array |
Сlicked Inventory Categories |
data.deviceCarrier |
array |
Targeting: List of network operators. |
data.deviceCarrierIsInclude |
boolean |
Targeting: List of network operators type (true: whitelist, false: blacklist) |
data.OS |
array |
Targeting: The operating system of user's device |
data.OSIsInclude |
boolean |
Targeting: The operating system of user's device list type (true: whitelist, false: blacklist) |
data.browser |
array |
Targeting: The user's browsers list |
data.browserIsInclude |
boolean |
Targeting: The user's browsers list type (true: whitelist, false: blacklist) |
data.deviceLanguage |
array |
Targeting: The languages of user's browser |
data.deviceLanguageIsInclude |
boolean |
Targeting: The languages of user's browser list type (true: whitelist, false: blacklist) |
data.spentDailyLimit |
integer |
Daily spent limit |
data.spentTotalLimit |
integer |
Total spent limit |
data.impressionsDailyLimit |
integer |
Daily impressions limit |
data.impressionsTotalLimit |
integer |
Total impressions limit |
data.clicksDailyLimit |
integer |
Daily clicks limit |
data.clicksTotalLimit |
integer |
Total clicks limit |
data.budgetUse |
integer |
Distribution: pacer, fast pacer - Evenly distribution fast - ASAP distribution |
data.allSources |
boolean |
Inventory: Use all SSP endpoints |
data.cpm |
float |
cpm |
data.adaptiveCpm |
boolean |
adaptiveCpm |
data.useCpm |
boolean |
use cpm |
data.googleAnalyticsTrackingCode |
string |
Google Analytics tracking code - PUSH Campaigns |
data.dynamicTargeting |
array |
SmartCPC: Dynamic targeting - only for CPC Pricing model |
data.subscriptionAge |
array |
Subscription Age - only for CPC Pricing model |
data.frequencyType |
string |
Frequency Type (user, ip).Required if frequency is on. |
data.frequency |
boolean |
Frequency on/off. |
data.frequencyCap |
integer |
Show ads no more than "Frequency Cap" times in "Frequency Period".Required if frequency is on. |
data.frequencyPeriod |
integer |
Frequency Period (min-1,max-3). Required if frequency is on. |
data.extendedStatus |
string |
Campaign extended status |
data.createdAt |
datetime |
Date of creation |
data.updatedAt |
datetime |
Date of last modification |
data.deletedAt |
datetime |
Date of deletion |
data.pretarget |
int |
pretarget |
data.pretargets |
array |
pretargets |
data.audiences |
array |
audiences |
2.5.5. HTTP Response
HTTP/1.0 200 OK
Content-type: application/json
Access-control-allow-origin: *
X-ratelimit-limit: 500
X-ratelimit-remaining: 499
{
"data": {
"id": 13,
"userId": 35,
"isActive": false,
"isRunning": false,
"type": "native",
"name": "Updated Campaign #3",
"isRewarded": false,
"isDesktopWeb": false,
"isMobileApp": true,
"isMobileWeb": true,
"isSmartphone": false,
"isTablet": true,
"isCTV": false,
"isDOOH": false,
"aDomain": "kirlin.com",
"dateStart": "2025-04-11",
"dateEnd": "2026-05-10",
"geoCountries": [],
"geoCountriesIsInclude": true,
"geoRegions": [],
"geoRegionsIsInclude": true,
"geoCities": [],
"geoCitiesIsInclude": true,
"contentCategories": [],
"contentCategoriesIsInclude": true,
"userAgeMin": 0,
"userAgeMax": 0,
"connectionTypes": [
"wifi"
],
"clickedInventoryCategories": [],
"deviceCarrier": [],
"deviceCarrierIsInclude": true,
"OS": [],
"OSIsInclude": true,
"browser": [],
"browserIsInclude": true,
"deviceLanguage": [],
"deviceLanguageIsInclude": true,
"spentDailyLimit": 480,
"spentTotalLimit": 9375,
"impressionsDailyLimit": 220157,
"impressionsTotalLimit": 587927,
"clicksDailyLimit": 0,
"clicksTotalLimit": 0,
"budgetUse": "fast",
"allSources": true,
"cpm": 0,
"adaptiveCpm": false,
"useCpm": false,
"googleAnalyticsTrackingCode": null,
"dynamicTargeting": [],
"subscriptionAge": [],
"frequencyType": "user",
"frequency": true,
"frequencyCap": 3,
"frequencyPeriod": 1,
"extendedStatus": "Campaign is not active",
"createdAt": "2026-02-20",
"updatedAt": "2026-02-20",
"deletedAt": null,
"pretarget": null,
"pretargets": [],
"audiences": []
}
}
2.6. Delete a Custom Campaign
A `DELETE` request will delete campaign.
2.6.1. HTTP Request
URL
DELETE api/campaigns/14 HTTP/1.1
HEADER
Accept: application/json Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwOi8vbG9jYWxob3N0Ojk5MjMiLCJpYXQiOjE3NzE1NzczNjcsImV4cCI6MTc3MTU4MDk2NywibmJmIjoxNzcxNTc3MzY3LCJqdGkiOiJwNlJsNURoR1FQN3pXVFNiIiwic3ViIjoiMzYiLCJwcnYiOiIyM2JkNWM4OTQ5ZjYwMGFkYjM5ZTcwMWM0MDA4NzJkYjdhNTk3NmY3In0.u-ALDbOiw0gJMUPH2kYgIRp_eXusy4YxH8tD3FzIJl0 Content-type: application/x-www-form-urlencoded
DATA
{}
2.6.2. Curl request
$ curl 'https://dsp-api.smartyads.com/api/campaigns/14' -i -X DELETE \
-H 'Accept: application/json' \
-H 'Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwOi8vbG9jYWxob3N0Ojk5MjMiLCJpYXQiOjE3NzE1NzczNjcsImV4cCI6MTc3MTU4MDk2NywibmJmIjoxNzcxNTc3MzY3LCJqdGkiOiJwNlJsNURoR1FQN3pXVFNiIiwic3ViIjoiMzYiLCJwcnYiOiIyM2JkNWM4OTQ5ZjYwMGFkYjM5ZTcwMWM0MDA4NzJkYjdhNTk3NmY3In0.u-ALDbOiw0gJMUPH2kYgIRp_eXusy4YxH8tD3FzIJl0' \
-H 'Content-type: application/x-www-form-urlencoded' \
-d '{}'
2.6.3. HTTP Response
HTTP/1.0 200 OK
Content-type: application/json
Access-control-allow-origin: *
X-ratelimit-limit: 500
X-ratelimit-remaining: 499
{}
3. Creatives
3.1. Creatives list
A `GET` request will return a list of an creatives.
3.1.1. HTTP Request
URL
GET api/creatives HTTP/1.1
HEADER
Accept: application/json Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwOi8vbG9jYWxob3N0Ojk5MjMiLCJpYXQiOjE3NzE1NzczNzEsImV4cCI6MTc3MTU4MDk3MSwibmJmIjoxNzcxNTc3MzcxLCJqdGkiOiJ4VXZsa21PQTdoakZ5dVVQIiwic3ViIjoiODMiLCJwcnYiOiIyM2JkNWM4OTQ5ZjYwMGFkYjM5ZTcwMWM0MDA4NzJkYjdhNTk3NmY3In0.KgW_G5oh60WeAPL_GrCvmLRsnSwudUmfJjiofMqADZQ
DATA
{}
3.1.2. Curl request
$ curl 'https://dsp-api.smartyads.com/api/creatives' -i -X GET \
-H 'Accept: application/json' \
-H 'Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwOi8vbG9jYWxob3N0Ojk5MjMiLCJpYXQiOjE3NzE1NzczNzEsImV4cCI6MTc3MTU4MDk3MSwibmJmIjoxNzcxNTc3MzcxLCJqdGkiOiJ4VXZsa21PQTdoakZ5dVVQIiwic3ViIjoiODMiLCJwcnYiOiIyM2JkNWM4OTQ5ZjYwMGFkYjM5ZTcwMWM0MDA4NzJkYjdhNTk3NmY3In0.KgW_G5oh60WeAPL_GrCvmLRsnSwudUmfJjiofMqADZQ' \
-d '{}'
3.1.3. Response Body
| Path | Type | Description |
|---|---|---|
data.*.id |
integer |
Creative Id |
data.*.userId |
integer |
User Id |
data.*.isActive |
boolean |
Creative status |
data.*.approved |
string |
Creative approval status (approved, pending, disapproved) |
data.*.creativeType |
string |
Creative type: banner, native, video, audio |
data.*.name |
string |
Creative name |
data.*.frequencyType |
string |
Identify the user to limit the number of the ad shows for the specific user (user, ip). Required if frequency is on. |
data.*.frequency |
string |
Frequency on/off |
data.*.frequencyCap |
integer |
Show ads no more than "Frequency Cap" times in "Frequency Period". Required if frequency is on. |
data.*.frequencyPeriod |
integer |
Frequency period in days (min-1,max-3). Required if frequency is on. |
data.*.bidPrice |
float |
CPM |
data.*.autoresize |
boolean |
autoresize |
data.*.adaptiveCpm |
bool |
adaptiveCpm |
data.*.size |
string |
Image width and height |
data.*.weight |
string |
File size |
data.*.thumbnail |
string |
Thumbnail URL |
data.*.folderId |
string |
Folder Id |
data.*.createdAt |
datetime |
Date of creation |
data.*.updatedAt |
datetime |
Date of last modification |
data.*.pendingAt |
datetime |
Date of pending start |
data.*.deletedAt |
datetime |
Date of deletion |
data.*.media.id |
integer |
Media Id |
data.*.media.userId |
string |
User Id |
data.*.media.mediaType |
string |
Media type (html, image, video) |
data.*.media.originName |
string |
Uploaded file original name |
data.*.media.name |
string |
Uploaded file name |
data.*.media.extension |
string |
Uploaded file extention |
data.*.media.url |
string |
Uploaded file URL |
data.*.media.width |
integer |
Uploaded file image width |
data.*.media.height |
integer |
Uploaded file image height |
data.*.media.weight |
integer |
Uploaded file size |
data.*.relation.banner.apiFramework |
integer |
Rich Media: 0-NO MRAID, 3-MRAID1, 5-MRAID2, 6-MRAID3, 10-ALL MRAID |
data.*.relation.banner.admBody |
string |
Third-party tag |
data.*.relation.banner.bannerType |
String |
Banner type (banner,inBannerVideo) |
data.*.relation.banner.clickUrl |
string |
Click URL |
data.*.relation.banner.width |
integer |
Banner width |
data.*.relation.banner.height |
integer |
Banner height |
data.*.relation.banner.childrenCreative |
string |
childrenCreative |
data.*.relation.banner.statusChildrenCreative |
string |
statusChildrenCreative |
data.*.relation.banner.main |
boolean |
Main creative |
data.*.status |
string |
Status |
data.*.relation.native.smallImageId |
integer |
Logo media id |
data.*.relation.native.largeImageId |
integer |
Image media id |
data.*.relation.native.smallImage.id |
integer |
Logo media id |
data.*.relation.native.smallImage.folderId |
string |
Folder id |
data.*.relation.native.smallImage.userId |
integer |
User id |
data.*.relation.native.smallImage.width |
string |
width |
data.*.relation.native.smallImage.height |
string |
height |
data.*.relation.native.smallImage.name |
string |
name |
data.*.relation.native.smallImage.url |
string |
url |
data.*.relation.native.smallImage.href |
string |
href |
data.*.relation.native.smallImage.originName |
string |
originName |
data.*.relation.native.smallImage.path |
string |
path |
data.*.relation.native.smallImage.extension |
string |
extension |
data.*.relation.native.smallImage.mediaType |
string |
mediaType |
data.*.relation.native.smallImage.createdAt |
string |
createdAt |
data.*.relation.native.smallImage.updatedAt |
string |
updatedAt |
data.*.relation.native.smallImage.deletedAt |
string |
updatedAt |
data.*.relation.native.smallImage.weight |
string |
weight |
data.*.relation.native.largeImage.id |
integer |
Image media id |
data.*.relation.native.largeImage.folderId |
string |
Folder id |
data.*.relation.native.largeImage.userId |
integer |
User id |
data.*.relation.native.largeImage.width |
string |
width |
data.*.relation.native.largeImage.height |
string |
height |
data.*.relation.native.largeImage.name |
string |
name |
data.*.relation.native.largeImage.url |
string |
url |
data.*.relation.native.largeImage.href |
string |
href |
data.*.relation.native.largeImage.originName |
string |
originName |
data.*.relation.native.largeImage.path |
string |
path |
data.*.relation.native.largeImage.extension |
string |
extension |
data.*.relation.native.largeImage.mediaType |
string |
mediaType |
data.*.relation.native.largeImage.createdAt |
string |
createdAt |
data.*.relation.native.largeImage.updatedAt |
string |
updatedAt |
data.*.relation.native.largeImage.deletedAt |
string |
updatedAt |
data.*.relation.native.largeImage.weight |
string |
weight |
data.*.relation.native.assetDataDesc |
string |
Ad text |
data.*.relation.native.assetTitle |
string |
Ad title |
data.*.relation.native.assetDataSponsored |
string |
Brand name |
data.*.relation.native.assetCtaText |
string |
CTA button text |
data.*.relation.native.clickUrl |
string |
Click URL |
data.*.relation.native.displayUrl |
string |
Display URL |
data.*.relation.native.impTracker |
string |
Impression Tracker |
data.*.relation.video.admBody |
string |
Third-party tag |
data..relation.video.mimeType. |
string |
MIME type (video/mpeg, video/mp4, video/quicktime, video/x-flv, application/x-shockwave-flash, application/javascript, video/x-ms-wmv, video/webm]") |
data.*.relation.video.width |
integer |
Video width |
data.*.relation.video.height |
integer |
Video height |
data.*.relation.video.duration |
integer |
Video duration |
data.*.relation.video.clickUrl |
string |
Click URL |
data.*.relation.video.partyTagFormat |
integer |
3 party tag format (0-NO VPAID, 1-VPAID 1, 2-VPAID 2, 3-ALL VPAID) |
data.*.relation.video.apiFramework |
integer |
apiFramework |
data.*.relation.video.autoStoreEndCard |
boolean |
autoStoreEndCard |
data.*.relation.video.autoStoreEndCardOption |
string |
autoStoreEndCardOption |
data.*.relation.video.politicalLabelEnabled |
boolean |
Political label enabled flag |
data.*.relation.video.politicalTooltip |
array |
Political label tooltip data {text, link, position} |
meta.pagination.total |
integer |
Pagination: total items count |
meta.pagination.count |
integer |
Pagination: page items count |
meta.pagination.per_page |
integer |
Pagination: items per page |
meta.pagination.current_page |
integer |
Pagination: current page number |
meta.pagination.total_pages |
integer |
Pagination: total pages count |
meta.pagination.links |
object |
Pagination links |
3.1.4. HTTP Response
HTTP/1.0 200 OK
Content-type: application/json
Access-control-allow-origin: *
X-ratelimit-limit: 500
X-ratelimit-remaining: 499
{
"data": [
{
"id": 8,
"userId": 83,
"isActive": 1,
"approved": "pending",
"creativeType": "banner",
"name": "Banner creative #1",
"frequencyType": "ip",
"frequency": 0,
"frequencyCap": 6,
"frequencyPeriod": 1,
"bidPrice": "12.84",
"autoresize": 0,
"adaptiveCpm": false,
"size": "669 x 331",
"weight": "0.34 MB",
"thumbnail": null,
"folderId": null,
"createdAt": "2026-02-20 08:49:31",
"updatedAt": "2026-02-20 08:49:31",
"pendingAt": null,
"deletedAt": null,
"media": {
"id": 8,
"userId": 83,
"mediaType": "image",
"originName": "richmedia.zip",
"name": "83_92c4a5d329702a4d2c1222203a213289\/index.html",
"extension": "zip",
"url": "https:\/\/konopelski.com\/facere-omnis-sit-asperiores-rerum-eos-cumque.html\/83_92c4a5d329702a4d2c1222203a213289\/index.html",
"width": 198,
"height": 112,
"weight": 359514
},
"relation": {
"banner": {
"apiFramework": 0,
"admBody": "<a target=\"_blank\" href=\"http:\/\/www.zemlak.info\/non-dolor-eos-maiores-voluptatem-eligendi-est-labore.html\" ><img src=\"http:\/\/www.waelchi.com\/id-assumenda-qui-deleniti-sint-non-doloribus.html\/10.jpg\"\/><\/a>",
"bannerType": "banner",
"clickUrl": "http:\/\/bogisich.com\/harum-veritatis-nam-architecto-nihil-numquam.html",
"width": 669,
"height": 331,
"childrenCreative": null,
"statusChildrenCreative": [],
"main": 1
}
},
"status": "pending"
},
{
"id": 9,
"userId": 83,
"isActive": 0,
"approved": "pending",
"creativeType": "native",
"name": "Native creative #1",
"frequencyType": "user",
"frequency": 0,
"frequencyCap": 7,
"frequencyPeriod": 1,
"bidPrice": "13.57",
"autoresize": 0,
"adaptiveCpm": false,
"size": "235 x 173",
"weight": "-",
"thumbnail": null,
"folderId": null,
"createdAt": "2026-02-20 08:49:31",
"updatedAt": "2026-02-20 08:49:31",
"pendingAt": null,
"deletedAt": null,
"media": {
"id": 9,
"userId": 83,
"mediaType": "image",
"originName": "video.mp4",
"name": "83_92c4a5d329702a4d2c1222203a213289.mp4",
"extension": "mp4",
"url": "http:\/\/brakus.com\/\/83_92c4a5d329702a4d2c1222203a213289.mp4",
"width": 216,
"height": 376,
"weight": 402116
},
"relation": {
"native": {
"smallImageId": 9,
"largeImageId": 10,
"smallImage": {
"id": 9,
"folderId": null,
"userId": 83,
"width": 216,
"height": 376,
"name": "83_92c4a5d329702a4d2c1222203a213289.mp4",
"url": "http:\/\/brakus.com\/\/83_92c4a5d329702a4d2c1222203a213289.mp4",
"href": null,
"originName": "video.mp4",
"path": null,
"extension": "mp4",
"mediaType": "image",
"createdAt": "2026-02-20T08:49:31.000000Z",
"updatedAt": "2026-02-20T08:49:31.000000Z",
"deletedAt": null,
"weight": 402116
},
"largeImage": {
"id": 10,
"folderId": null,
"userId": 83,
"width": 235,
"height": 173,
"name": "83_92c4a5d329702a4d2c1222203a213289.jpg",
"url": "http:\/\/douglas.com\/repellendus-doloribus-quae-quo-delectus\/83_92c4a5d329702a4d2c1222203a213289.jpg",
"href": null,
"originName": "image.jpg",
"path": null,
"extension": "jpg",
"mediaType": "image",
"createdAt": "2026-02-20T08:49:31.000000Z",
"updatedAt": "2026-02-20T08:49:31.000000Z",
"deletedAt": null,
"weight": 373186
},
"assetDataDesc": "Amet non ut accusantium.",
"assetTitle": "A nostrum esse eius ut.",
"assetDataSponsored": "Tempore autem aut error.",
"assetCtaText": "Vel aut dolores est.",
"clickUrl": "http:\/\/rau.com\/sequi-ab-vel-molestias-hic-aperiam-ea",
"displayUrl": "http:\/\/farrell.com\/",
"impTracker": null
}
},
"status": "pending"
},
{
"id": 10,
"userId": 83,
"isActive": 0,
"approved": "pending",
"creativeType": "video",
"name": "Video creative #1",
"frequencyType": "ip",
"frequency": 0,
"frequencyCap": 4,
"frequencyPeriod": 1,
"bidPrice": "18.40",
"autoresize": 0,
"adaptiveCpm": false,
"size": "581 x 500",
"weight": "0.39 MB",
"thumbnail": null,
"folderId": null,
"createdAt": "2026-02-20 08:49:31",
"updatedAt": "2026-02-20 08:49:31",
"pendingAt": null,
"deletedAt": null,
"media": {
"id": 11,
"userId": 83,
"mediaType": "video",
"originName": "video.mp4",
"name": "83_92c4a5d329702a4d2c1222203a213289.mp4",
"extension": "mp4",
"url": "http:\/\/www.sipes.com\/ex-quis-atque-labore-natus\/83_92c4a5d329702a4d2c1222203a213289.mp4",
"width": 472,
"height": 243,
"weight": 405550
},
"relation": {
"video": {
"admBody": " <?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<VAST version=\"2.0\">\n<Ad id=\"[HASH]\">\n <InLine>\n <AdSystem>DSP<\/AdSystem>\n <AdTitle>Smartyads<\/AdTitle>\n <Description>RTB<\/Description>\n <Creatives>\n <Creative AdID=\"572\">\n <Linear>\n <Duration>00:00:09<\/Duration>\n <VideoClicks>\n <ClickThrough><![CDATA[https:\/\/picsum.photos\/]]><\/ClickThrough>\n <\/VideoClicks>\n <MediaFiles>\n <MediaFile delivery=\"streaming\" type=\"video\/quicktime\" width=\"640\" height=\"360\"><![CDATA[http:\/\/72.mp4]]><\/MediaFile>\n <\/MediaFiles>\n <\/Linear>\n <\/Creative>\n <\/Creatives>\n <\/InLine>\n<\/Ad>\n<\/VAST>",
"mimeType": [
"video\/x-flv"
],
"width": 581,
"height": 500,
"duration": 7,
"clickUrl": "http:\/\/goyette.com\/et-illo-expedita-explicabo.html",
"partyTagFormat": 0,
"apiFramework": null,
"autoStoreEndCard": 0,
"autoStoreEndCardOption": "appStore",
"politicalLabelEnabled": false,
"politicalTooltip": []
}
},
"status": "pending"
}
],
"meta": {
"pagination": {
"total": 3,
"count": 3,
"per_page": 15,
"current_page": 1,
"total_pages": 1,
"links": []
}
}
}
3.2. Get by ID (Banner creative)
A `GET` request with a path parameter of the id will return the creative with that id.
3.2.1. HTTP Request
URL
GET api/creatives/11 HTTP/1.1
HEADER
Accept: application/json Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwOi8vbG9jYWxob3N0Ojk5MjMiLCJpYXQiOjE3NzE1NzczNzEsImV4cCI6MTc3MTU4MDk3MSwibmJmIjoxNzcxNTc3MzcxLCJqdGkiOiI1MXJmSXZWcmJsdWNOOHlhIiwic3ViIjoiODQiLCJwcnYiOiIyM2JkNWM4OTQ5ZjYwMGFkYjM5ZTcwMWM0MDA4NzJkYjdhNTk3NmY3In0.r6FEY0IGf_SrIMum7gu5rI2c4UTMjDCWwUGmOXof7cY
DATA
{}
3.2.2. Curl request
$ curl 'https://dsp-api.smartyads.com/api/creatives/11' -i -X GET \
-H 'Accept: application/json' \
-H 'Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwOi8vbG9jYWxob3N0Ojk5MjMiLCJpYXQiOjE3NzE1NzczNzEsImV4cCI6MTc3MTU4MDk3MSwibmJmIjoxNzcxNTc3MzcxLCJqdGkiOiI1MXJmSXZWcmJsdWNOOHlhIiwic3ViIjoiODQiLCJwcnYiOiIyM2JkNWM4OTQ5ZjYwMGFkYjM5ZTcwMWM0MDA4NzJkYjdhNTk3NmY3In0.r6FEY0IGf_SrIMum7gu5rI2c4UTMjDCWwUGmOXof7cY' \
-d '{}'
3.2.3. Response Body
| Path | Type | Description |
|---|---|---|
data.id |
integer |
Creative Id |
data.userId |
integer |
User Id |
data.isActive |
boolean |
Creative status |
data.approved |
string |
Creative approval status (approved, pending, disapproved) |
data.creativeType |
string |
Creative type: banner, native, video, audio |
data.name |
string |
Creative name |
data.frequencyType |
string |
Frequency Type (user, ip).Required if frequency is on. |
data.frequency |
boolean |
Frequency on/off. |
data.frequencyCap |
integer |
Show ads no more than "Frequency Cap" times in "Frequency Period".Required if frequency is on. |
data.frequencyPeriod |
integer |
Frequency Period (min-1,max-3). Required if frequency is on. |
data.bidPrice |
float |
CPM |
data.autoresize |
boolean |
autoresize |
data.adaptiveCpm |
bool |
adaptiveCpm |
data.size |
string |
Image width and height |
data.weight |
string |
File size |
data.thumbnail |
string |
Thumbnail URL |
data.folderId |
string |
Folder Id |
data.createdAt |
datetime |
Date of creation |
data.updatedAt |
datetime |
Date of last modification |
data.pendingAt |
datetime |
Date of pending start |
data.deletedAt |
datetime |
Date of deletion |
data.media.id |
integer |
Media Id |
data.media.userId |
string |
User Id |
data.media.mediaType |
string |
Media type (html, image, video) |
data.media.originName |
string |
Uploaded file original name |
data.media.name |
string |
Uploaded file name |
data.media.extension |
string |
Uploaded file extention |
data.media.url |
string |
Uploaded file URL |
data.media.width |
integer |
Uploaded file image width |
data.media.height |
integer |
Uploaded file image height |
data.media.weight |
integer |
Uploaded file size |
data.media.modifiedUrl |
any |
|
data.relation.banner.apiFramework |
integer |
Rich Media: 0-NO MRAID, 3-MRAID1, 5-MRAID2, 6-MRAID3, 10-ALL MRAID |
data.relation.banner.admBody |
string |
Third-party tag |
data.relation.banner.bannerType |
String |
Banner type (banner,inBannerVideo) |
data.relation.banner.clickUrl |
string |
Click URL |
data.relation.banner.width |
integer |
Banner width |
data.relation.banner.height |
integer |
Banner height |
data.sizes |
string |
size |
3.2.4. HTTP Response
HTTP/1.0 200 OK
Content-type: application/json
Access-control-allow-origin: *
X-ratelimit-limit: 500
X-ratelimit-remaining: 499
{
"data": {
"id": 11,
"userId": 84,
"isActive": 0,
"approved": "pending",
"creativeType": "banner",
"name": "Banner creative #2",
"frequencyType": "ip",
"frequency": 0,
"frequencyCap": 0,
"frequencyPeriod": 1,
"bidPrice": "16.75",
"autoresize": 0,
"adaptiveCpm": false,
"size": "592 x 209",
"weight": "0.15 MB",
"thumbnail": null,
"folderId": null,
"createdAt": "2026-02-20 08:49:31",
"updatedAt": "2026-02-20 08:49:31",
"pendingAt": null,
"deletedAt": null,
"relation": {
"banner": {
"apiFramework": 0,
"admBody": "<a target=\"_blank\" href=\"http:\/\/www.kreiger.com\/iure-sint-esse-dolore-rem-similique-in-et-et.html\" ><img src=\"http:\/\/volkman.com\/quam-non-eos-numquam.html\/10.jpg\"\/><\/a>",
"bannerType": "banner",
"clickUrl": "https:\/\/www.auer.org\/aut-dolore-sit-iusto-nemo-ea",
"width": 592,
"height": 209
}
},
"sizes": []
}
}
3.3. Get by ID (Native creative)
A `GET` request with a path parameter of the id will return the creative with that id.
3.3.1. HTTP Request
URL
GET api/creatives/12 HTTP/1.1
HEADER
Accept: application/json Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwOi8vbG9jYWxob3N0Ojk5MjMiLCJpYXQiOjE3NzE1NzczNzEsImV4cCI6MTc3MTU4MDk3MSwibmJmIjoxNzcxNTc3MzcxLCJqdGkiOiJHS3A2WmdXY1FQcElLOU11Iiwic3ViIjoiODUiLCJwcnYiOiIyM2JkNWM4OTQ5ZjYwMGFkYjM5ZTcwMWM0MDA4NzJkYjdhNTk3NmY3In0.RXLDMx6DKl25hvJVuQXQz0mhkzGNeeuYmsPnNpRGJGc
DATA
{}
3.3.2. Curl request
$ curl 'https://dsp-api.smartyads.com/api/creatives/12' -i -X GET \
-H 'Accept: application/json' \
-H 'Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwOi8vbG9jYWxob3N0Ojk5MjMiLCJpYXQiOjE3NzE1NzczNzEsImV4cCI6MTc3MTU4MDk3MSwibmJmIjoxNzcxNTc3MzcxLCJqdGkiOiJHS3A2WmdXY1FQcElLOU11Iiwic3ViIjoiODUiLCJwcnYiOiIyM2JkNWM4OTQ5ZjYwMGFkYjM5ZTcwMWM0MDA4NzJkYjdhNTk3NmY3In0.RXLDMx6DKl25hvJVuQXQz0mhkzGNeeuYmsPnNpRGJGc' \
-d '{}'
3.3.3. Response Body
| Path | Type | Description |
|---|---|---|
data.id |
integer |
Creative Id |
data.userId |
integer |
User Id |
data.isActive |
boolean |
Creative status |
data.approved |
string |
Creative approval status (approved, pending, disapproved) |
data.creativeType |
string |
Creative type: banner, native, video, audio |
data.name |
string |
Creative name |
data.frequencyType |
string |
Frequency Type (user, ip).Required if frequency is on. |
data.frequency |
boolean |
Frequency on/off. |
data.frequencyCap |
integer |
Show ads no more than "Frequency Cap" times in "Frequency Period".Required if frequency is on. |
data.frequencyPeriod |
integer |
Frequency Period (min-1,max-3). Required if frequency is on. |
data.bidPrice |
float |
CPM |
data.autoresize |
boolean |
autoresize |
data.adaptiveCpm |
bool |
adaptiveCpm |
data.size |
string |
Image width and height |
data.weight |
string |
File size |
data.thumbnail |
string |
Thumbnail URL |
data.folderId |
string |
Folder Id |
data.createdAt |
datetime |
Date of creation |
data.updatedAt |
datetime |
Date of last modification |
data.pendingAt |
datetime |
Date of pending start |
data.deletedAt |
datetime |
Date of deletion |
data.media.id |
integer |
Media Id |
data.media.userId |
string |
User Id |
data.media.mediaType |
string |
Media type (html, image, video) |
data.media.originName |
string |
Uploaded file original name |
data.media.name |
string |
Uploaded file name |
data.media.extension |
string |
Uploaded file extention |
data.media.url |
string |
Uploaded file URL |
data.media.width |
integer |
Uploaded file image width |
data.media.height |
integer |
Uploaded file image height |
data.media.weight |
integer |
Uploaded file size |
data.media.modifiedUrl |
any |
|
data.relation.native.smallImageId |
integer |
Logo media id |
data.relation.native.largeImageId |
integer |
Image media id |
data.relation.native.smallImage.id |
integer |
Logo media id |
data.relation.native.smallImage.folderId |
string |
Folder id |
data.relation.native.smallImage.userId |
integer |
User id |
data.relation.native.smallImage.width |
string |
width |
data.relation.native.smallImage.height |
string |
height |
data.relation.native.smallImage.name |
string |
name |
data.relation.native.smallImage.url |
string |
url |
data.relation.native.smallImage.href |
string |
href |
data.relation.native.smallImage.originName |
string |
originName |
data.relation.native.smallImage.path |
string |
path |
data.relation.native.smallImage.extension |
string |
extension |
data.relation.native.smallImage.mediaType |
string |
mediaType |
data.relation.native.smallImage.createdAt |
string |
createdAt |
data.relation.native.smallImage.updatedAt |
string |
updatedAt |
data.relation.native.smallImage.deletedAt |
string |
updatedAt |
data.relation.native.smallImage.weight |
string |
weight |
data.relation.native.largeImage.id |
integer |
Image media id |
data.relation.native.largeImage.folderId |
string |
Folder id |
data.relation.native.largeImage.userId |
integer |
User id |
data.relation.native.largeImage.width |
string |
width |
data.relation.native.largeImage.height |
string |
height |
data.relation.native.largeImage.name |
string |
name |
data.relation.native.largeImage.url |
string |
url |
data.relation.native.largeImage.href |
string |
href |
data.relation.native.largeImage.originName |
string |
originName |
data.relation.native.largeImage.path |
string |
path |
data.relation.native.largeImage.extension |
string |
extension |
data.relation.native.largeImage.mediaType |
string |
mediaType |
data.relation.native.largeImage.createdAt |
string |
createdAt |
data.relation.native.largeImage.updatedAt |
string |
updatedAt |
data.relation.native.largeImage.deletedAt |
string |
updatedAt |
data.relation.native.largeImage.weight |
string |
weight |
data.relation.native.assetDataDesc |
string |
Ad text |
data.relation.native.assetTitle |
string |
Ad title |
data.relation.native.assetDataSponsored |
string |
Brand name |
data.relation.native.assetCtaText |
string |
CTA button text |
data.relation.native.clickUrl |
string |
Click URL |
data.relation.native.displayUrl |
string |
Display URL |
data.relation.native.impTracker |
string |
Impression tracker |
data.sizes |
string |
size |
3.3.4. HTTP Response
HTTP/1.0 200 OK
Content-type: application/json
Access-control-allow-origin: *
X-ratelimit-limit: 500
X-ratelimit-remaining: 499
{
"data": {
"id": 12,
"userId": 85,
"isActive": 0,
"approved": "pending",
"creativeType": "native",
"name": "Native creative #2",
"frequencyType": "ip",
"frequency": 0,
"frequencyCap": 2,
"frequencyPeriod": 1,
"bidPrice": "1.95",
"autoresize": 0,
"adaptiveCpm": false,
"size": "468 x 343",
"weight": "-",
"thumbnail": null,
"folderId": null,
"createdAt": "2026-02-20 08:49:31",
"updatedAt": "2026-02-20 08:49:31",
"pendingAt": null,
"deletedAt": null,
"relation": {
"native": {
"smallImageId": 13,
"largeImageId": 14,
"smallImage": {
"id": 13,
"folderId": null,
"userId": 85,
"width": 199,
"height": 261,
"name": "85_92c4a5d329702a4d2c1222203a213289\/index.html",
"url": "http:\/\/littel.com\/et-in-sed-rerum-vitae\/85_92c4a5d329702a4d2c1222203a213289\/index.html",
"href": null,
"originName": "richmedia.zip",
"path": null,
"extension": "zip",
"mediaType": "image",
"createdAt": "2026-02-20T08:49:31.000000Z",
"updatedAt": "2026-02-20T08:49:31.000000Z",
"deletedAt": null,
"weight": 427138
},
"largeImage": {
"id": 14,
"folderId": null,
"userId": 85,
"width": 468,
"height": 343,
"name": "85_92c4a5d329702a4d2c1222203a213289\/index.html",
"url": "http:\/\/www.windler.org\/\/85_92c4a5d329702a4d2c1222203a213289\/index.html",
"href": null,
"originName": "richmedia.zip",
"path": null,
"extension": "zip",
"mediaType": "image",
"createdAt": "2026-02-20T08:49:31.000000Z",
"updatedAt": "2026-02-20T08:49:31.000000Z",
"deletedAt": null,
"weight": 107103
},
"assetDataDesc": "Quia ex qui cumque quis.",
"assetTitle": "Quae qui eum rerum.",
"assetDataSponsored": "Quasi non ea aut.",
"assetCtaText": "Maxime enim at dolor.",
"clickUrl": "https:\/\/www.hoeger.com\/neque-voluptatum-dolor-sed-est-vel",
"displayUrl": "http:\/\/www.zieme.com\/nam-eum-sint-est-voluptatem-ut-harum-blanditiis-numquam",
"impTracker": null
}
},
"sizes": []
}
}
3.4. Get by ID (Video creative)
A `GET` request with a path parameter of the id will return the creative with that id.
3.4.1. HTTP Request
URL
GET api/creatives/13 HTTP/1.1
HEADER
Accept: application/json Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwOi8vbG9jYWxob3N0Ojk5MjMiLCJpYXQiOjE3NzE1NzczNzEsImV4cCI6MTc3MTU4MDk3MSwibmJmIjoxNzcxNTc3MzcxLCJqdGkiOiJpRG9pb0FSVXp6SWtqbG9sIiwic3ViIjoiODYiLCJwcnYiOiIyM2JkNWM4OTQ5ZjYwMGFkYjM5ZTcwMWM0MDA4NzJkYjdhNTk3NmY3In0.mgr41p3xRStrnCpcPPYji7O8fmYbOTtJRzLRqUaJTpM
DATA
{}
3.4.2. Curl request
$ curl 'https://dsp-api.smartyads.com/api/creatives/13' -i -X GET \
-H 'Accept: application/json' \
-H 'Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwOi8vbG9jYWxob3N0Ojk5MjMiLCJpYXQiOjE3NzE1NzczNzEsImV4cCI6MTc3MTU4MDk3MSwibmJmIjoxNzcxNTc3MzcxLCJqdGkiOiJpRG9pb0FSVXp6SWtqbG9sIiwic3ViIjoiODYiLCJwcnYiOiIyM2JkNWM4OTQ5ZjYwMGFkYjM5ZTcwMWM0MDA4NzJkYjdhNTk3NmY3In0.mgr41p3xRStrnCpcPPYji7O8fmYbOTtJRzLRqUaJTpM' \
-d '{}'
3.4.3. Response Body
| Path | Type | Description |
|---|---|---|
data.id |
integer |
Creative Id |
data.userId |
integer |
User Id |
data.isActive |
boolean |
Creative status |
data.approved |
string |
Creative approval status (approved, pending, disapproved) |
data.creativeType |
string |
Creative type: banner, native, video, audio |
data.name |
string |
Creative name |
data.frequencyType |
string |
Frequency Type (user, ip).Required if frequency is on. |
data.frequency |
boolean |
Frequency on/off. |
data.frequencyCap |
integer |
Show ads no more than "Frequency Cap" times in "Frequency Period".Required if frequency is on. |
data.frequencyPeriod |
integer |
Frequency Period (min-1,max-3). Required if frequency is on. |
data.bidPrice |
float |
CPM |
data.autoresize |
boolean |
autoresize |
data.adaptiveCpm |
bool |
adaptiveCpm |
data.size |
string |
Image width and height |
data.weight |
string |
File size |
data.thumbnail |
string |
Thumbnail URL |
data.folderId |
string |
Folder Id |
data.createdAt |
datetime |
Date of creation |
data.updatedAt |
datetime |
Date of last modification |
data.pendingAt |
datetime |
Date of pending start |
data.deletedAt |
datetime |
Date of deletion |
data.media.id |
integer |
Media Id |
data.media.userId |
string |
User Id |
data.media.mediaType |
string |
Media type (html, image, video) |
data.media.originName |
string |
Uploaded file original name |
data.media.name |
string |
Uploaded file name |
data.media.extension |
string |
Uploaded file extention |
data.media.url |
string |
Uploaded file URL |
data.media.width |
integer |
Uploaded file image width |
data.media.height |
integer |
Uploaded file image height |
data.media.weight |
integer |
Uploaded file size |
data.media.modifiedUrl |
any |
|
data.relation.video.admBody |
string |
Third-party tag |
data.relation.video.mimeType.* |
string |
MIME type (video/mpeg, video/mp4, etc.) |
data.relation.video.width |
integer |
Video width |
data.relation.video.height |
integer |
Video height |
data.relation.video.duration |
integer |
Video duration |
data.relation.video.clickUrl |
string |
Click URL |
data.relation.video.partyTagFormat |
integer |
3 party tag format (0-NO VPAID, 1-VPAID 1, 2-VPAID 2, 3-ALL VPAID) |
data.relation.video.apiFramework |
integer |
apiFramework |
data.relation.video.autoStoreEndCard |
boolean |
autoStoreEndCard |
data.relation.video.autoStoreEndCardOption |
string |
autoStoreEndCardOption |
data.relation.video.politicalLabelEnabled |
boolean |
Political label enabled flag |
data.relation.video.politicalTooltip |
array |
Political label tooltip data {text, link, position} |
data.sizes |
string |
size |
3.4.4. HTTP Response
HTTP/1.0 200 OK
Content-type: application/json
Access-control-allow-origin: *
X-ratelimit-limit: 500
X-ratelimit-remaining: 499
{
"data": {
"id": 13,
"userId": 86,
"isActive": 0,
"approved": "pending",
"creativeType": "video",
"name": "Video creative #2",
"frequencyType": "user",
"frequency": 0,
"frequencyCap": 7,
"frequencyPeriod": 1,
"bidPrice": "5.75",
"autoresize": 0,
"adaptiveCpm": false,
"size": "512 x 249",
"weight": "0.10 MB",
"thumbnail": null,
"folderId": null,
"createdAt": "2026-02-20 08:49:31",
"updatedAt": "2026-02-20 08:49:31",
"pendingAt": null,
"deletedAt": null,
"relation": {
"video": {
"admBody": " <?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<VAST version=\"2.0\">\n<Ad id=\"[HASH]\">\n <InLine>\n <AdSystem>DSP<\/AdSystem>\n <AdTitle>Smartyads<\/AdTitle>\n <Description>RTB<\/Description>\n <Creatives>\n <Creative AdID=\"572\">\n <Linear>\n <Duration>00:00:09<\/Duration>\n <VideoClicks>\n <ClickThrough><![CDATA[https:\/\/picsum.photos\/]]><\/ClickThrough>\n <\/VideoClicks>\n <MediaFiles>\n <MediaFile delivery=\"streaming\" type=\"video\/quicktime\" width=\"640\" height=\"360\"><![CDATA[http:\/\/72.mp4]]><\/MediaFile>\n <\/MediaFiles>\n <\/Linear>\n <\/Creative>\n <\/Creatives>\n <\/InLine>\n<\/Ad>\n<\/VAST>",
"mimeType": [
"video\/mpeg"
],
"width": 512,
"height": 249,
"duration": 4,
"clickUrl": "http:\/\/price.com\/optio-sed-animi-et-et-voluptatem-dolores-in-ullam",
"partyTagFormat": 0,
"apiFramework": null,
"autoStoreEndCard": 0,
"autoStoreEndCardOption": "appStore",
"politicalLabelEnabled": false,
"politicalTooltip": []
}
},
"sizes": []
}
}
3.5. Create a Custom Banner Creative with Third-party tag
A `POST` request will create new creative.
3.5.1. Request Body
| Path | Type | Description | Required |
|---|---|---|---|
name |
string |
Creative name |
+ |
creativeType |
string |
Creative type: banner, native, video, audio |
+ |
frequencyType |
string |
Frequency Type (user, ip).Required if frequency is on. |
|
frequencyCap |
integer |
Show ads no more than "Frequency Cap" times in "Frequency Period".Required if frequency is on. |
|
frequency |
boolean |
Frequency on/off. |
|
frequencyPeriod |
integer |
Frequency Period (min-1,max-3). Required if frequency is on. |
|
bidPrice |
float |
CPM |
+ |
banner.apiFramework |
integer |
Rich Media: 0-NO MRAID, 3-MRAID1, 5-MRAID2, 6-MRAID3, 10-ALL MRAID |
|
banner.width |
integer |
Banner width |
+ |
banner.height |
integer |
Banner height |
+ |
banner.admBody |
string |
Third-party tag |
+ |
categories.IAB1 |
array |
Categories (required if subCategories is empty) |
+ |
subCategories.IAB1.* |
string |
SubCategory ID |
+ |
3.5.2. HTTP Request
URL
POST api/creatives HTTP/1.1
HEADER
Accept: application/json Content-type: application/json Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwOi8vbG9jYWxob3N0Ojk5MjMiLCJpYXQiOjE3NzE1NzczNzIsImV4cCI6MTc3MTU4MDk3MiwibmJmIjoxNzcxNTc3MzcyLCJqdGkiOiJXSlhieGVheU5xZktRcWRHIiwic3ViIjoiODciLCJwcnYiOiIyM2JkNWM4OTQ5ZjYwMGFkYjM5ZTcwMWM0MDA4NzJkYjdhNTk3NmY3In0.CVSqzJm0XBN3oj87rlz4VdjbKqQRcoMDel7C0x1kg3s
DATA
{
"name": "Banner creative #3",
"creativeType": "banner",
"frequencyType": "user",
"frequencyCap": 1,
"frequency": 1,
"frequencyPeriod": 1,
"bidPrice": 0.5,
"banner": {
"apiFramework": 0,
"width": 320,
"height": 200,
"admBody": "<iframe src=\"url.to.script\"><\/iframe>"
},
"categories": {
"IAB1": true
},
"subCategories": {
"IAB1": [
"IAB1-1"
]
}
}
3.5.3. Curl request
$ curl 'https://dsp-api.smartyads.com/api/creatives' -i -X POST \
-H 'Accept: application/json' \
-H 'Content-type: application/json' \
-H 'Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwOi8vbG9jYWxob3N0Ojk5MjMiLCJpYXQiOjE3NzE1NzczNzIsImV4cCI6MTc3MTU4MDk3MiwibmJmIjoxNzcxNTc3MzcyLCJqdGkiOiJXSlhieGVheU5xZktRcWRHIiwic3ViIjoiODciLCJwcnYiOiIyM2JkNWM4OTQ5ZjYwMGFkYjM5ZTcwMWM0MDA4NzJkYjdhNTk3NmY3In0.CVSqzJm0XBN3oj87rlz4VdjbKqQRcoMDel7C0x1kg3s' \
-d '{
"name": "Banner creative #3",
"creativeType": "banner",
"frequencyType": "user",
"frequencyCap": 1,
"frequency": 1,
"frequencyPeriod": 1,
"bidPrice": 0.5,
"banner": {
"apiFramework": 0,
"width": 320,
"height": 200,
"admBody": "<iframe src=\"url.to.script\"><\/iframe>"
},
"categories": {
"IAB1": true
},
"subCategories": {
"IAB1": [
"IAB1-1"
]
}
}'
3.5.4. Response Body
| Path | Type | Description |
|---|---|---|
message |
string |
Result message |
data.id |
integer |
Creative Id |
data.userId |
integer |
User Id |
data.isActive |
boolean |
Creative status |
data.approved |
string |
Creative approval status (approved, pending, disapproved) |
data.creativeType |
string |
Creative type: banner, native, video, audio |
data.name |
string |
Creative name |
data.frequencyType |
string |
Frequency Type (user, ip).Required if frequency is on. |
data.frequency |
boolean |
Frequency on/off. |
data.frequencyCap |
integer |
Show ads no more than "Frequency Cap" times in "Frequency Period".Required if frequency is on. |
data.frequencyPeriod |
integer |
Frequency Period (min-1,max-3). Required if frequency is on. |
data.bidPrice |
float |
CPM |
data.autoresize |
boolean |
autoresize |
data.adaptiveCpm |
bool |
adaptiveCpm |
data.size |
string |
Image width and height |
data.weight |
string |
File size |
data.thumbnail |
string |
Thumbnail URL |
data.folderId |
string |
Folder Id |
data.createdAt |
datetime |
Date of creation |
data.updatedAt |
datetime |
Date of last modification |
data.pendingAt |
datetime |
Date of pending start |
data.deletedAt |
datetime |
Date of deletion |
data.relation.banner.apiFramework |
integer |
Rich Media: 0-NO MRAID, 3-MRAID1, 5-MRAID2, 6-MRAID3, 10-ALL MRAID |
data.relation.banner.admBody |
string |
Third-party tag |
data.relation.banner.bannerType |
String |
Banner type (banner,inBannerVideo) |
data.relation.banner.clickUrl |
string |
Click URL |
data.relation.banner.width |
integer |
Banner width |
data.relation.banner.height |
integer |
Banner height |
data.sizes |
string |
size |
3.5.5. HTTP Response
HTTP/1.0 200 OK
Content-type: application/json
Access-control-allow-origin: *
X-ratelimit-limit: 500
X-ratelimit-remaining: 499
{
"message": "Creative created.",
"data": {
"id": 14,
"userId": 87,
"isActive": null,
"approved": null,
"creativeType": "banner",
"name": "Banner creative #3",
"frequencyType": "user",
"frequency": 1,
"frequencyCap": 1,
"frequencyPeriod": 1,
"bidPrice": 0.5,
"autoresize": null,
"adaptiveCpm": null,
"size": "320 x 200",
"weight": "-",
"thumbnail": null,
"folderId": null,
"createdAt": "2026-02-20 08:49:32",
"updatedAt": "2026-02-20 08:49:32",
"pendingAt": null,
"deletedAt": null,
"relation": {
"banner": {
"apiFramework": 0,
"admBody": "<iframe src=\"url.to.script\"><\/iframe>",
"bannerType": null,
"clickUrl": null,
"width": 320,
"height": 200
}
},
"sizes": []
}
}
3.6. Create a Custom Banner Creative with Media image
A `POST` request will create new creative.
3.6.1. Request Body
| Path | Type | Description | Required |
|---|---|---|---|
name |
string |
Creative name |
+ |
creativeType |
string |
Creative type: banner, native, video, audio |
+ |
mediaId |
array |
Media image Id |
+ |
frequency |
boolean |
Frequency on/off. |
|
bidPrice |
float |
CPM |
+ |
banner.apiFramework |
integer |
Rich Media: 0-NO MRAID, 3-MRAID1, 5-MRAID2, 6-MRAID3, 10-ALL MRAID |
|
banner.width |
integer |
Banner width |
+ |
banner.height |
integer |
Banner height |
+ |
banner.clickUrl |
string |
Click URL |
+ |
subCategories.IAB1.* |
string |
SubCategory ID |
+ |
categories.IAB1 |
array |
Categories (required if subCategories is empty) |
+ |
3.6.2. HTTP Request
URL
POST api/creatives HTTP/1.1
HEADER
Accept: application/json Content-type: application/json Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwOi8vbG9jYWxob3N0Ojk5MjMiLCJpYXQiOjE3NzE1NzczNzIsImV4cCI6MTc3MTU4MDk3MiwibmJmIjoxNzcxNTc3MzcyLCJqdGkiOiJDZ2w3RWllOERZM29MbWZqIiwic3ViIjoiODgiLCJwcnYiOiIyM2JkNWM4OTQ5ZjYwMGFkYjM5ZTcwMWM0MDA4NzJkYjdhNTk3NmY3In0.j88o0Qg_BO9uLrhZmIgJ_KKFdslKTgcOmvXmwybI4RQ
DATA
{
"name": "Banner creative #4",
"creativeType": "banner",
"mediaId": 16,
"frequency": 0,
"bidPrice": 0.5,
"banner": {
"apiFramework": 0,
"width": 320,
"height": 200,
"clickUrl": "http:\/\/www.ortiz.net\/est-cumque-maxime-eaque-aspernatur-ea-nostrum-earum-autem.html"
},
"subCategories": {
"IAB1": [
"IAB1-1"
]
},
"categories": {
"IAB1": true
}
}
3.6.3. Curl request
$ curl 'https://dsp-api.smartyads.com/api/creatives' -i -X POST \
-H 'Accept: application/json' \
-H 'Content-type: application/json' \
-H 'Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwOi8vbG9jYWxob3N0Ojk5MjMiLCJpYXQiOjE3NzE1NzczNzIsImV4cCI6MTc3MTU4MDk3MiwibmJmIjoxNzcxNTc3MzcyLCJqdGkiOiJDZ2w3RWllOERZM29MbWZqIiwic3ViIjoiODgiLCJwcnYiOiIyM2JkNWM4OTQ5ZjYwMGFkYjM5ZTcwMWM0MDA4NzJkYjdhNTk3NmY3In0.j88o0Qg_BO9uLrhZmIgJ_KKFdslKTgcOmvXmwybI4RQ' \
-d '{
"name": "Banner creative #4",
"creativeType": "banner",
"mediaId": 16,
"frequency": 0,
"bidPrice": 0.5,
"banner": {
"apiFramework": 0,
"width": 320,
"height": 200,
"clickUrl": "http:\/\/www.ortiz.net\/est-cumque-maxime-eaque-aspernatur-ea-nostrum-earum-autem.html"
},
"subCategories": {
"IAB1": [
"IAB1-1"
]
},
"categories": {
"IAB1": true
}
}'
3.6.4. Response Body
| Path | Type | Description |
|---|---|---|
message |
string |
Result message |
data.id |
integer |
Creative Id |
data.userId |
integer |
User Id |
data.isActive |
boolean |
Creative status |
data.approved |
string |
Creative approval status (approved, pending, disapproved) |
data.creativeType |
string |
Creative type: banner, native, video, audio |
data.name |
string |
Creative name |
data.frequencyType |
string |
Frequency Type (user, ip).Required if frequency is on. |
data.frequency |
boolean |
Frequency on/off. |
data.frequencyCap |
integer |
Show ads no more than "Frequency Cap" times in "Frequency Period".Required if frequency is on. |
data.frequencyPeriod |
integer |
Frequency Period (min-1,max-3). Required if frequency is on. |
data.bidPrice |
float |
CPM |
data.autoresize |
boolean |
autoresize |
data.adaptiveCpm |
bool |
adaptiveCpm |
data.size |
string |
Image width and height |
data.weight |
string |
File size |
data.thumbnail |
string |
Thumbnail URL |
data.folderId |
string |
Folder Id |
data.createdAt |
datetime |
Date of creation |
data.updatedAt |
datetime |
Date of last modification |
data.pendingAt |
datetime |
Date of pending start |
data.deletedAt |
datetime |
Date of deletion |
data.media.id |
integer |
Media Id |
data.media.userId |
string |
User Id |
data.media.mediaType |
string |
Media type (html, image, video) |
data.media.originName |
string |
Uploaded file original name |
data.media.name |
string |
Uploaded file name |
data.media.extension |
string |
Uploaded file extention |
data.media.url |
string |
Uploaded file URL |
data.media.width |
integer |
Uploaded file image width |
data.media.height |
integer |
Uploaded file image height |
data.media.weight |
integer |
Uploaded file size |
data.media.modifiedUrl |
any |
|
data.relation.banner.apiFramework |
integer |
Rich Media: 0-NO MRAID, 3-MRAID1, 5-MRAID2, 6-MRAID3, 10-ALL MRAID |
data.relation.banner.admBody |
string |
Third-party tag |
data.relation.banner.bannerType |
String |
Banner type (banner,inBannerVideo) |
data.relation.banner.clickUrl |
string |
Click URL |
data.relation.banner.width |
integer |
Banner width |
data.relation.banner.height |
integer |
Banner height |
data.sizes |
string |
size |
3.6.5. HTTP Response
HTTP/1.0 200 OK
Content-type: application/json
Access-control-allow-origin: *
X-ratelimit-limit: 500
X-ratelimit-remaining: 499
{
"message": "Creative created.",
"data": {
"id": 15,
"userId": 88,
"isActive": null,
"approved": null,
"creativeType": "banner",
"name": "Banner creative #4",
"frequencyType": null,
"frequency": 0,
"frequencyCap": null,
"frequencyPeriod": null,
"bidPrice": 0.5,
"autoresize": null,
"adaptiveCpm": null,
"size": "429 x 175",
"weight": "0.42 MB",
"thumbnail": null,
"folderId": null,
"createdAt": "2026-02-20 08:49:32",
"updatedAt": "2026-02-20 08:49:32",
"pendingAt": null,
"deletedAt": null,
"relation": {
"banner": {
"apiFramework": 0,
"admBody": "<img src=\"http:\/\/ritchie.org\/ullam-consequatur-sed-recusandae-aut-est-autem.html\/88_0b8da166e49ff79aafd6ed0ebc846af1.jpg\" crossorigin=\"anonymous\"\/>",
"bannerType": null,
"clickUrl": "http:\/\/www.ortiz.net\/est-cumque-maxime-eaque-aspernatur-ea-nostrum-earum-autem.html",
"width": 429,
"height": 175
}
},
"sizes": []
}
}
3.7. Create a Custom Banner Creative with Rich Media Html
A `POST` request will create new creative.
3.7.1. Request Body
| Path | Type | Description | Required |
|---|---|---|---|
name |
string |
Creative name |
+ |
creativeType |
string |
Creative type: banner, native, video, audio |
+ |
mediaId |
array |
HTML Media Id |
+ |
frequency |
boolean |
Frequency on/off. |
|
bidPrice |
float |
CPM |
+ |
banner.apiFramework |
integer |
Rich Media: 0-NO MRAID, 3-MRAID1, 5-MRAID2, 6-MRAID3, 10-ALL MRAID |
|
banner.width |
integer |
Banner width |
+ |
banner.height |
integer |
Banner height |
+ |
subCategories.IAB1.* |
string |
SubCategory ID |
+ |
categories.IAB1 |
array |
Categories (required if subCategories is empty) |
+ |
3.7.2. HTTP Request
URL
POST api/creatives HTTP/1.1
HEADER
Accept: application/json Content-type: application/json Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwOi8vbG9jYWxob3N0Ojk5MjMiLCJpYXQiOjE3NzE1NzczNzIsImV4cCI6MTc3MTU4MDk3MiwibmJmIjoxNzcxNTc3MzcyLCJqdGkiOiJHRU9za05PTEtUS3I2VExmIiwic3ViIjoiODkiLCJwcnYiOiIyM2JkNWM4OTQ5ZjYwMGFkYjM5ZTcwMWM0MDA4NzJkYjdhNTk3NmY3In0.oo-T9zYwqmndzNHZlmA9O3xzttp5ZJ-hyOZWa4QSN3I
DATA
{
"name": "Banner creative #5",
"creativeType": "banner",
"mediaId": 17,
"frequency": 0,
"bidPrice": 0.5,
"banner": {
"apiFramework": 3,
"width": 320,
"height": 200
},
"subCategories": {
"IAB1": [
"IAB1-1"
]
},
"categories": {
"IAB1": true
}
}
3.7.3. Curl request
$ curl 'https://dsp-api.smartyads.com/api/creatives' -i -X POST \
-H 'Accept: application/json' \
-H 'Content-type: application/json' \
-H 'Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwOi8vbG9jYWxob3N0Ojk5MjMiLCJpYXQiOjE3NzE1NzczNzIsImV4cCI6MTc3MTU4MDk3MiwibmJmIjoxNzcxNTc3MzcyLCJqdGkiOiJHRU9za05PTEtUS3I2VExmIiwic3ViIjoiODkiLCJwcnYiOiIyM2JkNWM4OTQ5ZjYwMGFkYjM5ZTcwMWM0MDA4NzJkYjdhNTk3NmY3In0.oo-T9zYwqmndzNHZlmA9O3xzttp5ZJ-hyOZWa4QSN3I' \
-d '{
"name": "Banner creative #5",
"creativeType": "banner",
"mediaId": 17,
"frequency": 0,
"bidPrice": 0.5,
"banner": {
"apiFramework": 3,
"width": 320,
"height": 200
},
"subCategories": {
"IAB1": [
"IAB1-1"
]
},
"categories": {
"IAB1": true
}
}'
3.7.4. Response Body
| Path | Type | Description |
|---|---|---|
message |
string |
Result message |
data.id |
integer |
Creative Id |
data.userId |
integer |
User Id |
data.isActive |
boolean |
Creative status |
data.approved |
string |
Creative approval status (approved, pending, disapproved) |
data.creativeType |
string |
Creative type: banner, native, video, audio |
data.name |
string |
Creative name |
data.frequencyType |
string |
Frequency Type (user, ip).Required if frequency is on. |
data.frequency |
boolean |
Frequency on/off. |
data.frequencyCap |
integer |
Show ads no more than "Frequency Cap" times in "Frequency Period".Required if frequency is on. |
data.frequencyPeriod |
integer |
Frequency Period (min-1,max-3). Required if frequency is on. |
data.bidPrice |
float |
CPM |
data.autoresize |
boolean |
autoresize |
data.adaptiveCpm |
bool |
adaptiveCpm |
data.size |
string |
Image width and height |
data.weight |
string |
File size |
data.thumbnail |
string |
Thumbnail URL |
data.folderId |
string |
Folder Id |
data.createdAt |
datetime |
Date of creation |
data.updatedAt |
datetime |
Date of last modification |
data.pendingAt |
datetime |
Date of pending start |
data.deletedAt |
datetime |
Date of deletion |
data.media.id |
integer |
Media Id |
data.media.userId |
string |
User Id |
data.media.mediaType |
string |
Media type (html, image, video) |
data.media.originName |
string |
Uploaded file original name |
data.media.name |
string |
Uploaded file name |
data.media.extension |
string |
Uploaded file extention |
data.media.url |
string |
Uploaded file URL |
data.media.width |
integer |
Uploaded file image width |
data.media.height |
integer |
Uploaded file image height |
data.media.weight |
integer |
Uploaded file size |
data.media.modifiedUrl |
any |
|
data.relation.banner.apiFramework |
integer |
Rich Media: 0-NO MRAID, 3-MRAID1, 5-MRAID2, 6-MRAID3, 10-ALL MRAID |
data.relation.banner.admBody |
string |
Third-party tag |
data.relation.banner.bannerType |
String |
Banner type (banner,inBannerVideo) |
data.relation.banner.clickUrl |
string |
Click URL |
data.relation.banner.width |
integer |
Banner width |
data.relation.banner.height |
integer |
Banner height |
data.sizes |
string |
size |
3.7.5. HTTP Response
HTTP/1.0 200 OK
Content-type: application/json
Access-control-allow-origin: *
X-ratelimit-limit: 500
X-ratelimit-remaining: 499
{
"message": "Creative created.",
"data": {
"id": 16,
"userId": 89,
"isActive": null,
"approved": null,
"creativeType": "banner",
"name": "Banner creative #5",
"frequencyType": null,
"frequency": 0,
"frequencyCap": null,
"frequencyPeriod": null,
"bidPrice": 0.5,
"autoresize": null,
"adaptiveCpm": null,
"size": "320 x 200",
"weight": "0.45 MB",
"thumbnail": null,
"folderId": null,
"createdAt": "2026-02-20 08:49:32",
"updatedAt": "2026-02-20 08:49:32",
"pendingAt": null,
"deletedAt": null,
"relation": {
"banner": {
"apiFramework": 3,
"admBody": "<iframe src=\"http:\/\/marks.com\/illo-est-qui-temporibus-aut-quis-labore-quia.html\/89_0b8da166e49ff79aafd6ed0ebc846af1\/index.html\" style=\"border:0; width:100%; height:100%;\"><\/iframe>",
"bannerType": null,
"clickUrl": null,
"width": 320,
"height": 200
}
},
"sizes": []
}
}
3.8. Create a Custom Native Creative
A `POST` request will create new creative.
3.8.1. Request Body
| Path | Type | Description | Required |
|---|---|---|---|
name |
string |
Creative name |
+ |
creativeType |
string |
Creative type: banner, native, video, audio |
+ |
frequencyType |
string |
Frequency Type (user, ip).Required if frequency is on. |
|
frequencyCap |
integer |
Show ads no more than "Frequency Cap" times in "Frequency Period".Required if frequency is on. |
|
frequencyPeriod |
integer |
Frequency Period (min-1,max-3). Required if frequency is on. |
|
frequency |
boolean |
Frequency on/off. |
|
bidPrice |
float |
CPM |
+ |
folderId |
string |
Folder Id |
|
native.smallImageId |
integer |
Logo media id |
|
native.largeImageId |
integer |
Image media id |
+ |
native.assetDataDesc |
string |
Ad text |
|
native.assetTitle |
string |
Ad title |
|
native.assetDataSponsored |
string |
Brand name |
|
native.assetCtaText |
string |
CTA button text |
|
native.clickUrl |
string |
Click URL |
+ |
native.displayUrl |
string |
Display URL |
|
subCategories.IAB1.* |
string |
SubCategory ID |
+ |
categories.IAB1 |
array |
Categories (required if subCategories is empty) |
+ |
3.8.2. HTTP Request
URL
POST api/creatives HTTP/1.1
HEADER
Accept: application/json Content-type: application/json Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwOi8vbG9jYWxob3N0Ojk5MjMiLCJpYXQiOjE3NzE1NzczNzIsImV4cCI6MTc3MTU4MDk3MiwibmJmIjoxNzcxNTc3MzcyLCJqdGkiOiJWdXR2bnNXd2YyNktmZkVlIiwic3ViIjoiOTAiLCJwcnYiOiIyM2JkNWM4OTQ5ZjYwMGFkYjM5ZTcwMWM0MDA4NzJkYjdhNTk3NmY3In0.LPFt9qw-cvTi25enxLrDEIfbvZb_VwqtkuU_lnQTbOY
DATA
{
"name": "Native creative #3",
"creativeType": "native",
"frequencyType": "user",
"frequencyCap": 1,
"frequencyPeriod": 1,
"frequency": 1,
"bidPrice": 0.5,
"folderId": null,
"native": {
"smallImageId": 18,
"largeImageId": 18,
"assetDataDesc": "Vitae rerum.",
"assetTitle": "Sit et.",
"assetDataSponsored": "Illum quis non voluptas.",
"assetCtaText": "Harum in eos.",
"clickUrl": "http:\/\/www.powlowski.com\/inventore-expedita-incidunt-dolor-ratione-et-recusandae-sit.html",
"displayUrl": "http:\/\/www.kuhn.com\/"
},
"subCategories": {
"IAB1": [
"IAB1-1"
]
},
"categories": {
"IAB1": true
}
}
3.8.3. Curl request
$ curl 'https://dsp-api.smartyads.com/api/creatives' -i -X POST \
-H 'Accept: application/json' \
-H 'Content-type: application/json' \
-H 'Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwOi8vbG9jYWxob3N0Ojk5MjMiLCJpYXQiOjE3NzE1NzczNzIsImV4cCI6MTc3MTU4MDk3MiwibmJmIjoxNzcxNTc3MzcyLCJqdGkiOiJWdXR2bnNXd2YyNktmZkVlIiwic3ViIjoiOTAiLCJwcnYiOiIyM2JkNWM4OTQ5ZjYwMGFkYjM5ZTcwMWM0MDA4NzJkYjdhNTk3NmY3In0.LPFt9qw-cvTi25enxLrDEIfbvZb_VwqtkuU_lnQTbOY' \
-d '{
"name": "Native creative #3",
"creativeType": "native",
"frequencyType": "user",
"frequencyCap": 1,
"frequencyPeriod": 1,
"frequency": 1,
"bidPrice": 0.5,
"folderId": null,
"native": {
"smallImageId": 18,
"largeImageId": 18,
"assetDataDesc": "Vitae rerum.",
"assetTitle": "Sit et.",
"assetDataSponsored": "Illum quis non voluptas.",
"assetCtaText": "Harum in eos.",
"clickUrl": "http:\/\/www.powlowski.com\/inventore-expedita-incidunt-dolor-ratione-et-recusandae-sit.html",
"displayUrl": "http:\/\/www.kuhn.com\/"
},
"subCategories": {
"IAB1": [
"IAB1-1"
]
},
"categories": {
"IAB1": true
}
}'
3.8.4. Response Body
| Path | Type | Description |
|---|---|---|
message |
string |
Result message |
data.id |
integer |
Creative Id |
data.userId |
integer |
User Id |
data.isActive |
boolean |
Creative status |
data.approved |
string |
Creative approval status (approved, pending, disapproved) |
data.creativeType |
string |
Creative type: banner, native, video, audio |
data.name |
string |
Creative name |
data.frequencyType |
string |
Frequency Type (user, ip).Required if frequency is on. |
data.frequency |
boolean |
Frequency on/off. |
data.frequencyCap |
integer |
Show ads no more than "Frequency Cap" times in "Frequency Period".Required if frequency is on. |
data.frequencyPeriod |
integer |
Frequency Period (min-1,max-3). Required if frequency is on. |
data.bidPrice |
float |
CPM |
data.autoresize |
boolean |
autoresize |
data.adaptiveCpm |
bool |
adaptiveCpm |
data.size |
string |
Image width and height |
data.weight |
string |
File size |
data.thumbnail |
string |
Thumbnail URL |
data.folderId |
string |
Folder Id |
data.createdAt |
datetime |
Date of creation |
data.updatedAt |
datetime |
Date of last modification |
data.pendingAt |
datetime |
Date of pending start |
data.deletedAt |
datetime |
Date of deletion |
data.media.id |
integer |
Media Id |
data.media.userId |
string |
User Id |
data.media.mediaType |
string |
Media type (html, image, video) |
data.media.originName |
string |
Uploaded file original name |
data.media.name |
string |
Uploaded file name |
data.media.extension |
string |
Uploaded file extention |
data.media.url |
string |
Uploaded file URL |
data.media.width |
integer |
Uploaded file image width |
data.media.height |
integer |
Uploaded file image height |
data.media.weight |
integer |
Uploaded file size |
data.media.modifiedUrl |
any |
|
data.relation.native.smallImageId |
integer |
Logo media id |
data.relation.native.largeImageId |
integer |
Image media id |
data.relation.native.smallImage.id |
integer |
Logo media id |
data.relation.native.smallImage.folderId |
string |
Folder id |
data.relation.native.smallImage.userId |
integer |
User id |
data.relation.native.smallImage.width |
string |
width |
data.relation.native.smallImage.height |
string |
height |
data.relation.native.smallImage.name |
string |
name |
data.relation.native.smallImage.url |
string |
url |
data.relation.native.smallImage.href |
string |
href |
data.relation.native.smallImage.originName |
string |
originName |
data.relation.native.smallImage.path |
string |
path |
data.relation.native.smallImage.extension |
string |
extension |
data.relation.native.smallImage.mediaType |
string |
mediaType |
data.relation.native.smallImage.createdAt |
string |
createdAt |
data.relation.native.smallImage.updatedAt |
string |
updatedAt |
data.relation.native.smallImage.deletedAt |
string |
updatedAt |
data.relation.native.smallImage.weight |
string |
weight |
data.relation.native.largeImage.id |
integer |
Image media id |
data.relation.native.largeImage.folderId |
string |
Folder id |
data.relation.native.largeImage.userId |
integer |
User id |
data.relation.native.largeImage.width |
string |
width |
data.relation.native.largeImage.height |
string |
height |
data.relation.native.largeImage.name |
string |
name |
data.relation.native.largeImage.url |
string |
url |
data.relation.native.largeImage.href |
string |
href |
data.relation.native.largeImage.originName |
string |
originName |
data.relation.native.largeImage.path |
string |
path |
data.relation.native.largeImage.extension |
string |
extension |
data.relation.native.largeImage.mediaType |
string |
mediaType |
data.relation.native.largeImage.createdAt |
string |
createdAt |
data.relation.native.largeImage.updatedAt |
string |
updatedAt |
data.relation.native.largeImage.deletedAt |
string |
updatedAt |
data.relation.native.largeImage.weight |
string |
weight |
data.relation.native.assetDataDesc |
string |
Ad text |
data.relation.native.assetTitle |
string |
Ad title |
data.relation.native.assetDataSponsored |
string |
Brand name |
data.relation.native.assetCtaText |
string |
CTA button text |
data.relation.native.clickUrl |
string |
Click URL |
data.relation.native.displayUrl |
string |
Display URL |
data.relation.native.impTracker |
string |
Impression tracker |
data.sizes |
string |
size |
3.8.5. HTTP Response
HTTP/1.0 200 OK
Content-type: application/json
Access-control-allow-origin: *
X-ratelimit-limit: 500
X-ratelimit-remaining: 499
{
"message": "Creative created.",
"data": {
"id": 17,
"userId": 90,
"isActive": null,
"approved": null,
"creativeType": "native",
"name": "Native creative #3",
"frequencyType": "user",
"frequency": 1,
"frequencyCap": 1,
"frequencyPeriod": 1,
"bidPrice": 0.5,
"autoresize": null,
"adaptiveCpm": null,
"size": "192 x 438",
"weight": "-",
"thumbnail": null,
"folderId": null,
"createdAt": "2026-02-20 08:49:32",
"updatedAt": "2026-02-20 08:49:32",
"pendingAt": null,
"deletedAt": null,
"relation": {
"native": {
"smallImageId": 18,
"largeImageId": 18,
"smallImage": {
"id": 18,
"folderId": null,
"userId": 90,
"width": 192,
"height": 438,
"name": "90_0b8da166e49ff79aafd6ed0ebc846af1\/index.html",
"url": "http:\/\/www.collins.org\/illum-nemo-sit-facere-praesentium-totam-fugit-minus-vel\/90_0b8da166e49ff79aafd6ed0ebc846af1\/index.html",
"href": null,
"originName": "richmedia.zip",
"path": null,
"extension": "zip",
"mediaType": "image",
"createdAt": "2026-02-20T08:49:32.000000Z",
"updatedAt": "2026-02-20T08:49:32.000000Z",
"deletedAt": null,
"weight": 310451
},
"largeImage": {
"id": 18,
"folderId": null,
"userId": 90,
"width": 192,
"height": 438,
"name": "90_0b8da166e49ff79aafd6ed0ebc846af1\/index.html",
"url": "http:\/\/www.collins.org\/illum-nemo-sit-facere-praesentium-totam-fugit-minus-vel\/90_0b8da166e49ff79aafd6ed0ebc846af1\/index.html",
"href": null,
"originName": "richmedia.zip",
"path": null,
"extension": "zip",
"mediaType": "image",
"createdAt": "2026-02-20T08:49:32.000000Z",
"updatedAt": "2026-02-20T08:49:32.000000Z",
"deletedAt": null,
"weight": 310451
},
"assetDataDesc": "Vitae rerum.",
"assetTitle": "Sit et.",
"assetDataSponsored": "Illum quis non voluptas.",
"assetCtaText": "Harum in eos.",
"clickUrl": "http:\/\/www.powlowski.com\/inventore-expedita-incidunt-dolor-ratione-et-recusandae-sit.html",
"displayUrl": "http:\/\/www.kuhn.com\/",
"impTracker": null
}
},
"sizes": []
}
}
3.9. Create a Custom Video Creative with Third-party tag
A `POST` request will create new creative.
3.9.1. Request Body
| Path | Type | Description | Required |
|---|---|---|---|
name |
string |
Creative name |
+ |
creativeType |
string |
Creative type: banner, native, video, audio |
+ |
frequency |
boolean |
Frequency on/off. |
|
bidPrice |
float |
CPM |
+ |
video.mimeType.* |
string |
MIME type (video/mpeg, video/mp4, etc.) |
+ |
video.admBody |
string |
Third-party tag |
+ |
subCategories.IAB1.* |
string |
SubCategory ID |
+ |
categories.IAB1 |
array |
Categories (required if subCategories is empty) |
+ |
3.9.2. HTTP Request
URL
POST api/creatives HTTP/1.1
HEADER
Accept: application/json Content-type: application/json Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwOi8vbG9jYWxob3N0Ojk5MjMiLCJpYXQiOjE3NzE1NzczNzIsImV4cCI6MTc3MTU4MDk3MiwibmJmIjoxNzcxNTc3MzcyLCJqdGkiOiJiekpqSWJEaUZXUGlVWktvIiwic3ViIjoiOTEiLCJwcnYiOiIyM2JkNWM4OTQ5ZjYwMGFkYjM5ZTcwMWM0MDA4NzJkYjdhNTk3NmY3In0.XQmb1VUMmlMl0ToyCwPsYN-dbO31VFcByQvyQWKZwTE
DATA
{
"name": "Video creative #3",
"creativeType": "video",
"frequency": 0,
"bidPrice": 100,
"video": {
"mimeType": [
"video\/mp4"
],
"admBody": "<iframe src=\"url.to.script\"><\/iframe>"
},
"subCategories": {
"IAB1": [
"IAB1-1"
]
},
"categories": {
"IAB1": true
}
}
3.9.3. Curl request
$ curl 'https://dsp-api.smartyads.com/api/creatives' -i -X POST \
-H 'Accept: application/json' \
-H 'Content-type: application/json' \
-H 'Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwOi8vbG9jYWxob3N0Ojk5MjMiLCJpYXQiOjE3NzE1NzczNzIsImV4cCI6MTc3MTU4MDk3MiwibmJmIjoxNzcxNTc3MzcyLCJqdGkiOiJiekpqSWJEaUZXUGlVWktvIiwic3ViIjoiOTEiLCJwcnYiOiIyM2JkNWM4OTQ5ZjYwMGFkYjM5ZTcwMWM0MDA4NzJkYjdhNTk3NmY3In0.XQmb1VUMmlMl0ToyCwPsYN-dbO31VFcByQvyQWKZwTE' \
-d '{
"name": "Video creative #3",
"creativeType": "video",
"frequency": 0,
"bidPrice": 100,
"video": {
"mimeType": [
"video\/mp4"
],
"admBody": "<iframe src=\"url.to.script\"><\/iframe>"
},
"subCategories": {
"IAB1": [
"IAB1-1"
]
},
"categories": {
"IAB1": true
}
}'
3.9.4. Response Body
| Path | Type | Description |
|---|---|---|
message |
string |
Result message |
data.id |
integer |
Creative Id |
data.userId |
integer |
User Id |
data.isActive |
boolean |
Creative status |
data.approved |
string |
Creative approval status (approved, pending, disapproved) |
data.creativeType |
string |
Creative type: banner, native, video, audio |
data.name |
string |
Creative name |
data.frequencyType |
string |
Frequency Type (user, ip).Required if frequency is on. |
data.frequency |
boolean |
Frequency on/off. |
data.frequencyCap |
integer |
Show ads no more than "Frequency Cap" times in "Frequency Period".Required if frequency is on. |
data.frequencyPeriod |
integer |
Frequency Period (min-1,max-3). Required if frequency is on. |
data.bidPrice |
float |
CPM |
data.autoresize |
boolean |
autoresize |
data.adaptiveCpm |
bool |
adaptiveCpm |
data.size |
string |
Image width and height |
data.weight |
string |
File size |
data.thumbnail |
string |
Thumbnail URL |
data.folderId |
string |
Folder Id |
data.createdAt |
datetime |
Date of creation |
data.updatedAt |
datetime |
Date of last modification |
data.pendingAt |
datetime |
Date of pending start |
data.deletedAt |
datetime |
Date of deletion |
data.relation.video.admBody |
string |
Third-party tag |
data.relation.video.mimeType.* |
string |
MIME type (video/mpeg, video/mp4, etc.) |
data.relation.video.width |
integer |
Video width |
data.relation.video.height |
integer |
Video height |
data.relation.video.duration |
integer |
Video duration |
data.relation.video.clickUrl |
string |
Click URL |
data.relation.video.partyTagFormat |
integer |
3 party tag format (0-NO VPAID, 1-VPAID 1, 2-VPAID 2, 3-ALL VPAID) |
data.relation.video.apiFramework |
integer |
apiFramework |
data.relation.video.autoStoreEndCard |
boolean |
autoStoreEndCard |
data.relation.video.autoStoreEndCardOption |
string |
autoStoreEndCardOption |
data.relation.video.politicalLabelEnabled |
boolean |
Political label enabled flag |
data.relation.video.politicalTooltip |
array |
Political label tooltip data {text, link, position} |
data.sizes |
string |
size |
3.9.5. HTTP Response
HTTP/1.0 200 OK
Content-type: application/json
Access-control-allow-origin: *
X-ratelimit-limit: 500
X-ratelimit-remaining: 499
{
"message": "Creative created.",
"data": {
"id": 18,
"userId": 91,
"isActive": null,
"approved": null,
"creativeType": "video",
"name": "Video creative #3",
"frequencyType": null,
"frequency": 0,
"frequencyCap": null,
"frequencyPeriod": null,
"bidPrice": 100,
"autoresize": null,
"adaptiveCpm": null,
"size": "0 x 0",
"weight": "-",
"thumbnail": null,
"folderId": null,
"createdAt": "2026-02-20 08:49:32",
"updatedAt": "2026-02-20 08:49:32",
"pendingAt": null,
"deletedAt": null,
"relation": {
"video": {
"admBody": "<iframe src=\"url.to.script\"><\/iframe>",
"mimeType": [
"video\/mp4"
],
"width": 0,
"height": 0,
"duration": 0,
"clickUrl": "",
"partyTagFormat": null,
"apiFramework": null,
"autoStoreEndCard": null,
"autoStoreEndCardOption": null,
"politicalLabelEnabled": false,
"politicalTooltip": []
}
},
"sizes": []
}
}
3.10. Create a Custom Video Creative with Media image
A `POST` request will create new creative.
3.10.1. Request Body
| Path | Type | Description | Required |
|---|---|---|---|
name |
string |
Creative name |
+ |
creativeType |
string |
Creative type: banner, native, video, audio |
+ |
frequencyType |
string |
Frequency Type (user, ip).Required if frequency is on. |
|
frequencyCap |
integer |
Show ads no more than "Frequency Cap" times in "Frequency Period".Required if frequency is on. |
|
frequencyPeriod |
integer |
Frequency Period (min-1,max-3). Required if frequency is on. |
|
frequency |
boolean |
Frequency on/off. |
|
mediaId |
array |
Media video Id |
+ |
bidPrice |
float |
CPM |
+ |
video.clickUrl |
string |
Click URL |
+ |
subCategories.IAB1.* |
string |
SubCategory ID |
+ |
categories.IAB1 |
array |
Categories (required if subCategories is empty) |
+ |
3.10.2. HTTP Request
URL
POST api/creatives HTTP/1.1
HEADER
Accept: application/json Content-type: application/json Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwOi8vbG9jYWxob3N0Ojk5MjMiLCJpYXQiOjE3NzE1NzczNzIsImV4cCI6MTc3MTU4MDk3MiwibmJmIjoxNzcxNTc3MzcyLCJqdGkiOiJFdFlUc2NqT3kySnVqb3ZyIiwic3ViIjoiOTIiLCJwcnYiOiIyM2JkNWM4OTQ5ZjYwMGFkYjM5ZTcwMWM0MDA4NzJkYjdhNTk3NmY3In0.2ejprs18uFA3QJLc4kTHRm2CEMLB3WLCEDdTi2Ffuwc
DATA
{
"name": "Video creative #4",
"creativeType": "video",
"frequencyType": "user",
"frequencyCap": 1,
"frequencyPeriod": 1,
"frequency": 1,
"mediaId": 19,
"bidPrice": 100,
"video": {
"clickUrl": "https:\/\/marvin.com\/blanditiis-non-possimus-ipsa-quisquam-suscipit-quidem-sit.html"
},
"subCategories": {
"IAB1": [
"IAB1-1"
]
},
"categories": {
"IAB1": true
}
}
3.10.3. Curl request
$ curl 'https://dsp-api.smartyads.com/api/creatives' -i -X POST \
-H 'Accept: application/json' \
-H 'Content-type: application/json' \
-H 'Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwOi8vbG9jYWxob3N0Ojk5MjMiLCJpYXQiOjE3NzE1NzczNzIsImV4cCI6MTc3MTU4MDk3MiwibmJmIjoxNzcxNTc3MzcyLCJqdGkiOiJFdFlUc2NqT3kySnVqb3ZyIiwic3ViIjoiOTIiLCJwcnYiOiIyM2JkNWM4OTQ5ZjYwMGFkYjM5ZTcwMWM0MDA4NzJkYjdhNTk3NmY3In0.2ejprs18uFA3QJLc4kTHRm2CEMLB3WLCEDdTi2Ffuwc' \
-d '{
"name": "Video creative #4",
"creativeType": "video",
"frequencyType": "user",
"frequencyCap": 1,
"frequencyPeriod": 1,
"frequency": 1,
"mediaId": 19,
"bidPrice": 100,
"video": {
"clickUrl": "https:\/\/marvin.com\/blanditiis-non-possimus-ipsa-quisquam-suscipit-quidem-sit.html"
},
"subCategories": {
"IAB1": [
"IAB1-1"
]
},
"categories": {
"IAB1": true
}
}'
3.10.4. Response Body
| Path | Type | Description |
|---|---|---|
message |
string |
Result message |
data.id |
integer |
Creative Id |
data.userId |
integer |
User Id |
data.isActive |
boolean |
Creative status |
data.approved |
string |
Creative approval status (approved, pending, disapproved) |
data.creativeType |
string |
Creative type: banner, native, video, audio |
data.name |
string |
Creative name |
data.frequencyType |
string |
Frequency Type (user, ip).Required if frequency is on. |
data.frequency |
boolean |
Frequency on/off. |
data.frequencyCap |
integer |
Show ads no more than "Frequency Cap" times in "Frequency Period".Required if frequency is on. |
data.frequencyPeriod |
integer |
Frequency Period (min-1,max-3). Required if frequency is on. |
data.bidPrice |
float |
CPM |
data.autoresize |
boolean |
autoresize |
data.adaptiveCpm |
bool |
adaptiveCpm |
data.size |
string |
Image width and height |
data.weight |
string |
File size |
data.thumbnail |
string |
Thumbnail URL |
data.folderId |
string |
Folder Id |
data.createdAt |
datetime |
Date of creation |
data.updatedAt |
datetime |
Date of last modification |
data.pendingAt |
datetime |
Date of pending start |
data.deletedAt |
datetime |
Date of deletion |
data.media.id |
integer |
Media Id |
data.media.userId |
string |
User Id |
data.media.mediaType |
string |
Media type (html, image, video) |
data.media.originName |
string |
Uploaded file original name |
data.media.name |
string |
Uploaded file name |
data.media.extension |
string |
Uploaded file extention |
data.media.url |
string |
Uploaded file URL |
data.media.width |
integer |
Uploaded file image width |
data.media.height |
integer |
Uploaded file image height |
data.media.weight |
integer |
Uploaded file size |
data.media.modifiedUrl |
any |
|
data.relation.video.admBody |
string |
Third-party tag |
data.relation.video.mimeType.* |
string |
MIME type (video/mpeg, video/mp4, etc.) |
data.relation.video.width |
integer |
Video width |
data.relation.video.height |
integer |
Video height |
data.relation.video.duration |
integer |
Video duration |
data.relation.video.clickUrl |
string |
Click URL |
data.relation.video.partyTagFormat |
integer |
3 party tag format (0-NO VPAID, 1-VPAID 1, 2-VPAID 2, 3-ALL VPAID) |
data.relation.video.apiFramework |
integer |
apiFramework |
data.relation.video.autoStoreEndCard |
boolean |
autoStoreEndCard |
data.relation.video.autoStoreEndCardOption |
string |
autoStoreEndCardOption |
data.relation.video.politicalLabelEnabled |
boolean |
Political label enabled flag |
data.relation.video.politicalTooltip.text |
string |
Political tooltip text |
data.relation.video.politicalTooltip.link |
string |
Political tooltip link |
data.relation.video.politicalTooltip.position |
string |
Political tooltip position |
data.sizes |
string |
size |
3.10.5. HTTP Response
HTTP/1.0 200 OK
Content-type: application/json
Access-control-allow-origin: *
X-ratelimit-limit: 500
X-ratelimit-remaining: 499
{
"message": "Creative created.",
"data": {
"id": 19,
"userId": 92,
"isActive": null,
"approved": null,
"creativeType": "video",
"name": "Video creative #4",
"frequencyType": "user",
"frequency": 1,
"frequencyCap": 1,
"frequencyPeriod": 1,
"bidPrice": 100,
"autoresize": null,
"adaptiveCpm": null,
"size": "307 x 104",
"weight": "0.24 MB",
"thumbnail": null,
"folderId": null,
"createdAt": "2026-02-20 08:49:32",
"updatedAt": "2026-02-20 08:49:32",
"pendingAt": null,
"deletedAt": null,
"relation": {
"video": {
"admBody": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<VAST version=\"2.0\">\n <Ad id=\"[HASH]\">\n <InLine>\n <AdSystem>DSP<\/AdSystem>\n <AdTitle>Smartyads<\/AdTitle>\n <Description>RTB<\/Description>\n <Creatives>\n <Creative AdID=\"19\">\n <Linear>\n <Duration>00:00:04<\/Duration>\n <VideoClicks>\n <ClickThrough><![CDATA[https:\/\/marvin.com\/blanditiis-non-possimus-ipsa-quisquam-suscipit-quidem-sit.html]]><\/ClickThrough>\n <\/VideoClicks>\n <MediaFiles>\n <MediaFile delivery=\"progressive\" type=\"video\/mp4\" width=\"307\" height=\"104\"><![CDATA[https:\/\/prosacco.com\/laboriosam-dolorum-non-ut-sapiente-unde-ut-debitis.html\/92_0b8da166e49ff79aafd6ed0ebc846af1.mp4]]><\/MediaFile>\n <\/MediaFiles>\n <\/Linear>\n <\/Creative>\n <\/Creatives>\n <\/InLine>\n <\/Ad>\n<\/VAST>",
"mimeType": [
"video\/mp4"
],
"width": 307,
"height": 104,
"duration": 4,
"clickUrl": "https:\/\/marvin.com\/blanditiis-non-possimus-ipsa-quisquam-suscipit-quidem-sit.html",
"partyTagFormat": null,
"apiFramework": null,
"autoStoreEndCard": null,
"autoStoreEndCardOption": null,
"politicalLabelEnabled": false,
"politicalTooltip": {
"text": "",
"link": "",
"position": "top-left"
}
}
},
"sizes": []
}
}
3.11. Update a Custom Creative
A `PATCH` request will update creative.
3.11.1. Request Body
| Path | Type | Description | Required |
|---|---|---|---|
isActive |
boolean |
Creative status |
3.11.2. HTTP Request
URL
PUT api/creatives/20 HTTP/1.1
HEADER
Accept: application/json Content-type: application/json Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwOi8vbG9jYWxob3N0Ojk5MjMiLCJpYXQiOjE3NzE1NzczNzIsImV4cCI6MTc3MTU4MDk3MiwibmJmIjoxNzcxNTc3MzcyLCJqdGkiOiJCM0ttVW12Slp3bjF1dzNPIiwic3ViIjoiOTMiLCJwcnYiOiIyM2JkNWM4OTQ5ZjYwMGFkYjM5ZTcwMWM0MDA4NzJkYjdhNTk3NmY3In0.ESzuE8BhBbGXhNEL0eBQxa_eIIasDcg21S9Bn-5NqWo
DATA
{
"isActive": true
}
3.11.3. Curl request
$ curl 'https://dsp-api.smartyads.com/api/creatives/20' -i -X PUT \
-H 'Accept: application/json' \
-H 'Content-type: application/json' \
-H 'Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwOi8vbG9jYWxob3N0Ojk5MjMiLCJpYXQiOjE3NzE1NzczNzIsImV4cCI6MTc3MTU4MDk3MiwibmJmIjoxNzcxNTc3MzcyLCJqdGkiOiJCM0ttVW12Slp3bjF1dzNPIiwic3ViIjoiOTMiLCJwcnYiOiIyM2JkNWM4OTQ5ZjYwMGFkYjM5ZTcwMWM0MDA4NzJkYjdhNTk3NmY3In0.ESzuE8BhBbGXhNEL0eBQxa_eIIasDcg21S9Bn-5NqWo' \
-d '{
"isActive": true
}'
3.11.4. Response Body
| Path | Type | Description |
|---|---|---|
message |
string |
Result message |
data.id |
integer |
Creative Id |
data.userId |
integer |
User Id |
data.isActive |
boolean |
Creative status |
data.approved |
string |
Creative approval status (approved, pending, disapproved) |
data.creativeType |
string |
Creative type: banner, native, video, audio |
data.name |
string |
Creative name |
data.frequencyType |
string |
Frequency Type (user, ip).Required if frequency is on. |
data.frequency |
boolean |
Frequency on/off. |
data.frequencyCap |
integer |
Show ads no more than "Frequency Cap" times in "Frequency Period".Required if frequency is on. |
data.frequencyPeriod |
integer |
Frequency Period (min-1,max-3). Required if frequency is on. |
data.bidPrice |
float |
CPM |
data.autoresize |
boolean |
autoresize |
data.adaptiveCpm |
bool |
adaptiveCpm |
data.size |
string |
Image width and height |
data.weight |
string |
File size |
data.thumbnail |
string |
Thumbnail URL |
data.folderId |
string |
Folder Id |
data.createdAt |
datetime |
Date of creation |
data.updatedAt |
datetime |
Date of last modification |
data.pendingAt |
datetime |
Date of pending start |
data.deletedAt |
datetime |
Date of deletion |
data.relation.banner.apiFramework |
integer |
Rich Media: 0-NO MRAID, 3-MRAID1, 5-MRAID2, 6-MRAID3, 10-ALL MRAID |
data.relation.banner.admBody |
string |
Third-party tag |
data.relation.banner.bannerType |
String |
Banner type (banner,inBannerVideo) |
data.relation.banner.clickUrl |
string |
Click URL |
data.relation.banner.width |
integer |
Banner width |
data.relation.banner.height |
integer |
Banner height |
data.sizes |
string |
size |
3.11.5. HTTP Response
HTTP/1.0 200 OK
Content-type: application/json
Access-control-allow-origin: *
X-ratelimit-limit: 500
X-ratelimit-remaining: 499
{
"message": "Creative updated.",
"data": {
"id": 20,
"userId": 93,
"isActive": true,
"approved": "pending",
"creativeType": "banner",
"name": "voluptatem qui",
"frequencyType": "ip",
"frequency": 0,
"frequencyCap": 1,
"frequencyPeriod": 1,
"bidPrice": "3.33",
"autoresize": 0,
"adaptiveCpm": false,
"size": " x ",
"weight": "-",
"thumbnail": null,
"folderId": null,
"createdAt": "2026-02-20 08:49:32",
"updatedAt": "2026-02-20 08:49:32",
"pendingAt": null,
"deletedAt": null,
"relation": {
"banner": {
"apiFramework": null,
"admBody": null,
"bannerType": null,
"clickUrl": null,
"width": null,
"height": null
}
},
"sizes": []
}
}
3.12. Delete a Custom Creative
A `DELETE` request will delete creative.
3.12.1. HTTP Request
URL
DELETE api/creatives/21 HTTP/1.1
HEADER
Accept: application/json Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwOi8vbG9jYWxob3N0Ojk5MjMiLCJpYXQiOjE3NzE1NzczNzMsImV4cCI6MTc3MTU4MDk3MywibmJmIjoxNzcxNTc3MzczLCJqdGkiOiI3N0Q1bHlaM0ZsVGJVNVAzIiwic3ViIjoiOTQiLCJwcnYiOiIyM2JkNWM4OTQ5ZjYwMGFkYjM5ZTcwMWM0MDA4NzJkYjdhNTk3NmY3In0.EK0eD7R7-VmWC13AmCHwtmdoVa9qQsHO4Pyg5Oso9CY Content-type: application/x-www-form-urlencoded
DATA
{}
3.12.2. Curl request
$ curl 'https://dsp-api.smartyads.com/api/creatives/21' -i -X DELETE \
-H 'Accept: application/json' \
-H 'Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwOi8vbG9jYWxob3N0Ojk5MjMiLCJpYXQiOjE3NzE1NzczNzMsImV4cCI6MTc3MTU4MDk3MywibmJmIjoxNzcxNTc3MzczLCJqdGkiOiI3N0Q1bHlaM0ZsVGJVNVAzIiwic3ViIjoiOTQiLCJwcnYiOiIyM2JkNWM4OTQ5ZjYwMGFkYjM5ZTcwMWM0MDA4NzJkYjdhNTk3NmY3In0.EK0eD7R7-VmWC13AmCHwtmdoVa9qQsHO4Pyg5Oso9CY' \
-H 'Content-type: application/x-www-form-urlencoded' \
-d '{}'
3.12.3. HTTP Response
HTTP/1.0 200 OK
Content-type: application/json
Access-control-allow-origin: *
X-ratelimit-limit: 500
X-ratelimit-remaining: 499
{}
4. Statistic
4.1. Statistic report
A `POST` request will return statistic.
4.1.1. Request Body
| Path | Type | Description | Required |
|---|---|---|---|
timezone |
integer |
Timezone. Examples: "Etc/GMT+12"…"Etc/GMT-12", "America/Anchorage"…"Europe/Istanbul", "Asia/Tokyo" |
|
from |
date |
Start date (yyyy-mm-dd) |
+ |
to |
date |
End date (yyyy-mm-dd) |
+ |
groupBy.* |
string |
Group by field name. Allowed values: YMD - Date, YMDH - Date time. Period: 2 days max, campaignId - Campaign, creativeId - Creative, country - Country, connectionType - Connection Type, carrier - Carrier, region - Region, city - City, browser - Browser, os - Device OS, appName - App Name, siteName - Domain Name, source - Source, sitePage - Site Page, trafficType - Format, requestType - Traffic Type, deviceType - Device Type, language - Language, size - Width x Height |
+ |
agregatedFields.* |
string |
Agregated field name. Allowed values: bids - Bids, wins - Wins, impressions - Impressions, clicks - Clicks, conversions - Conversions, reach - Reach, dspSpend - Spend, $, winrate - Win Rate, %, ctr - CTR, %, ecpc - eCPC, $, ecpm - eCPM, $, ecpa - eCPA, %, conversionRate - Conversion rate |
+ |
orderField |
string |
Sorting field |
|
orderDir |
string |
Sort order: "asc" or "desc" |
|
page |
integer |
Pagination: page number |
|
rowsOnPage |
integer |
Pagination: rows on page (min:10, max:50000) |
4.1.2. HTTP Request
URL
POST api/statistic HTTP/1.1
HEADER
Accept: application/json Content-type: application/json Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwOi8vbG9jYWxob3N0Ojk5MjMiLCJpYXQiOjE3NzE1NzczNzcsImV4cCI6MTc3MTU4MDk3NywibmJmIjoxNzcxNTc3Mzc3LCJqdGkiOiJsVWNhQXdua1FPWXJ3ZDg2Iiwic3ViIjoiMTE1IiwicHJ2IjoiMjNiZDVjODk0OWY2MDBhZGIzOWU3MDFjNDAwODcyZGI3YTU5NzZmNyJ9.6vnaXQ1JqB3SK2XWMn_G8tW0KbJ9H6d5-Y7Db_QjS30
DATA
{
"timezone": "Etc\/GMT+10",
"from": "2026-02-18",
"to": "2026-02-20",
"groupBy": [
"YMD",
"campaignId",
"creativeId"
],
"agregatedFields": [
"bids",
"wins",
"impressions",
"clicks",
"dspSpend",
"winrate",
"ctr"
],
"orderField": "YMD",
"orderDir": "desc",
"page": 1,
"rowsOnPage": 25
}
4.1.3. Curl request
$ curl 'https://dsp-api.smartyads.com/api/statistic' -i -X POST \
-H 'Accept: application/json' \
-H 'Content-type: application/json' \
-H 'Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwOi8vbG9jYWxob3N0Ojk5MjMiLCJpYXQiOjE3NzE1NzczNzcsImV4cCI6MTc3MTU4MDk3NywibmJmIjoxNzcxNTc3Mzc3LCJqdGkiOiJsVWNhQXdua1FPWXJ3ZDg2Iiwic3ViIjoiMTE1IiwicHJ2IjoiMjNiZDVjODk0OWY2MDBhZGIzOWU3MDFjNDAwODcyZGI3YTU5NzZmNyJ9.6vnaXQ1JqB3SK2XWMn_G8tW0KbJ9H6d5-Y7Db_QjS30' \
-d '{
"timezone": "Etc\/GMT+10",
"from": "2026-02-18",
"to": "2026-02-20",
"groupBy": [
"YMD",
"campaignId",
"creativeId"
],
"agregatedFields": [
"bids",
"wins",
"impressions",
"clicks",
"dspSpend",
"winrate",
"ctr"
],
"orderField": "YMD",
"orderDir": "desc",
"page": 1,
"rowsOnPage": 25
}'
4.1.4. Response Body
| Path | Type | Description |
|---|---|---|
status |
string |
Report status |
data.*.YMD |
date |
Date |
data.*.campaignId |
integer |
Campaign |
data.*.creativeId |
string |
Creative |
data.*.campaignId_dict |
string |
campaignId dictionary value |
data.*.creativeId_dict |
string |
creativeId dictionary value |
data.*.bids |
integer |
Bids |
data.*.wins |
integer |
Wins |
data.*.impressions |
integer |
Impressions |
data.*.clicks |
integer |
Clicks |
data.*.dspSpend |
float |
Spend, $ |
data.*.ctr |
float |
CTR, % |
data.*.winrate |
float |
Win Rate, % |
totals.YMD |
date |
Date |
totals.campaignId |
integer |
Campaign |
totals.creativeId |
string |
Creative |
totals.campaignId_dict |
string |
campaignId dictionary value |
totals.creativeId_dict |
string |
creativeId dictionary value |
totals.bids |
integer |
Bids |
totals.wins |
integer |
Wins |
totals.impressions |
integer |
Impressions |
totals.clicks |
integer |
Clicks |
totals.dspSpend |
float |
Spend, $ |
totals.ctr |
float |
CTR, % |
totals.winrate |
float |
Win Rate, % |
pagination.page |
integer |
Pagination: current page number |
pagination.per_page |
integer |
Pagination: items per page |
pagination.total |
integer |
Pagination: total items count |
4.1.5. HTTP Response
HTTP/1.0 200 OK
Content-type: application/json
Access-control-allow-origin: *
X-ratelimit-limit: 500
X-ratelimit-remaining: 499
{
"status": "success",
"data": [
{
"YMD": "2026-02-18",
"campaignId": 1,
"creativeId": 11,
"campaignId_dict": "UA | Smart Cleaner | US | iOS | ROAS | #1",
"creativeId_dict": "CR | Crypto Wallet | Video 1080x1920 15s | iOS | V1 | #11",
"bids": 83117,
"wins": 20292,
"impressions": 19221,
"clicks": 581,
"dspSpend": 81.84117278,
"ctr": 3.022736,
"winrate": 24.413778
},
{
"YMD": "2026-02-18",
"campaignId": 1,
"creativeId": 12,
"campaignId_dict": "UA | Smart Cleaner | US | iOS | ROAS | #1",
"creativeId_dict": "CR | Invoice Maker | Video 1920x1080 30s | iOS | V2 | #12",
"bids": 1405393,
"wins": 163578,
"impressions": 160454,
"clicks": 1653,
"dspSpend": 764.54774596,
"ctr": 1.030202,
"winrate": 11.639307
},
{
"YMD": "2026-02-18",
"campaignId": 2,
"creativeId": 11,
"campaignId_dict": "UA | VPN Master | GB | iOS | ROAS | #2",
"creativeId_dict": "CR | Crypto Wallet | Video 1080x1920 15s | iOS | V1 | #11",
"bids": 1805055,
"wins": 227592,
"impressions": 222244,
"clicks": 2064,
"dspSpend": 280.80218258,
"ctr": 0.928709,
"winrate": 12.608591
},
{
"YMD": "2026-02-18",
"campaignId": 2,
"creativeId": 12,
"campaignId_dict": "UA | VPN Master | GB | iOS | ROAS | #2",
"creativeId_dict": "CR | Invoice Maker | Video 1920x1080 30s | iOS | V2 | #12",
"bids": 1248557,
"wins": 75785,
"impressions": 74231,
"clicks": 1486,
"dspSpend": 187.33833355,
"ctr": 2.001859,
"winrate": 6.069807
},
{
"YMD": "2026-02-19",
"campaignId": 1,
"creativeId": 11,
"campaignId_dict": "UA | Smart Cleaner | US | iOS | ROAS | #1",
"creativeId_dict": "CR | Crypto Wallet | Video 1080x1920 15s | iOS | V1 | #11",
"bids": 751568,
"wins": 105826,
"impressions": 100037,
"clicks": 711,
"dspSpend": 34.32029381,
"ctr": 0.710737,
"winrate": 14.080695
},
{
"YMD": "2026-02-19",
"campaignId": 1,
"creativeId": 12,
"campaignId_dict": "UA | Smart Cleaner | US | iOS | ROAS | #1",
"creativeId_dict": "CR | Invoice Maker | Video 1920x1080 30s | iOS | V2 | #12",
"bids": 1086458,
"wins": 35085,
"impressions": 33503,
"clicks": 368,
"dspSpend": 162.10781682,
"ctr": 1.098409,
"winrate": 3.229301
},
{
"YMD": "2026-02-19",
"campaignId": 2,
"creativeId": 11,
"campaignId_dict": "UA | VPN Master | GB | iOS | ROAS | #2",
"creativeId_dict": "CR | Crypto Wallet | Video 1080x1920 15s | iOS | V1 | #11",
"bids": 1704169,
"wins": 198970,
"impressions": 189459,
"clicks": 4550,
"dspSpend": 876.20467835,
"ctr": 2.401575,
"winrate": 11.675485
},
{
"YMD": "2026-02-19",
"campaignId": 2,
"creativeId": 12,
"campaignId_dict": "UA | VPN Master | GB | iOS | ROAS | #2",
"creativeId_dict": "CR | Invoice Maker | Video 1920x1080 30s | iOS | V2 | #12",
"bids": 187217,
"wins": 29415,
"impressions": 28862,
"clicks": 503,
"dspSpend": 95.44940475,
"ctr": 1.742776,
"winrate": 15.711714
},
{
"YMD": "2026-02-20",
"campaignId": 1,
"creativeId": 11,
"campaignId_dict": "UA | Smart Cleaner | US | iOS | ROAS | #1",
"creativeId_dict": "CR | Crypto Wallet | Video 1080x1920 15s | iOS | V1 | #11",
"bids": 1997846,
"wins": 588927,
"impressions": 586925,
"clicks": 6139,
"dspSpend": 2758.35851015,
"ctr": 1.04596,
"winrate": 29.478098
},
{
"YMD": "2026-02-20",
"campaignId": 1,
"creativeId": 12,
"campaignId_dict": "UA | Smart Cleaner | US | iOS | ROAS | #1",
"creativeId_dict": "CR | Invoice Maker | Video 1920x1080 30s | iOS | V2 | #12",
"bids": 1854337,
"wins": 306518,
"impressions": 284142,
"clicks": 3869,
"dspSpend": 470.99633648,
"ctr": 1.361643,
"winrate": 16.529789
},
{
"YMD": "2026-02-20",
"campaignId": 2,
"creativeId": 11,
"campaignId_dict": "UA | VPN Master | GB | iOS | ROAS | #2",
"creativeId_dict": "CR | Crypto Wallet | Video 1080x1920 15s | iOS | V1 | #11",
"bids": 117755,
"wins": 20625,
"impressions": 20161,
"clicks": 601,
"dspSpend": 10.08713297,
"ctr": 2.981003,
"winrate": 17.51518
},
{
"YMD": "2026-02-20",
"campaignId": 2,
"creativeId": 12,
"campaignId_dict": "UA | VPN Master | GB | iOS | ROAS | #2",
"creativeId_dict": "CR | Invoice Maker | Video 1920x1080 30s | iOS | V2 | #12",
"bids": 460033,
"wins": 93376,
"impressions": 91266,
"clicks": 1406,
"dspSpend": 400.38312061,
"ctr": 1.540552,
"winrate": 20.297674
}
],
"totals": {
"YMD": "",
"campaignId": 0,
"creativeId": 0,
"campaignId_dict": "",
"creativeId_dict": "",
"bids": 12701505,
"wins": 1865989,
"impressions": 1810505,
"clicks": 23931,
"dspSpend": 6122.436728810001,
"ctr": 1.6555134166666672,
"winrate": 15.270784916666669
},
"pagination": {
"page": 1,
"per_page": 25,
"total": 12
}
}
4.2. Statistic report (filtering)
A `POST` request will return statistic.
4.2.1. Request Body
| Path | Type | Description | Required |
|---|---|---|---|
timezone |
integer |
Timezone. Examples: "Etc/GMT+12"…"Etc/GMT-12", "America/Anchorage"…"Europe/Istanbul", "Asia/Tokyo" |
|
from |
date |
Start date (yyyy-mm-dd) |
+ |
to |
date |
End date (yyyy-mm-dd) |
+ |
groupBy.* |
string |
Group by field name. Allowed values: YMD - Date, YMDH - Date time. Period: 2 days max, campaignId - Campaign, creativeId - Creative, country - Country, connectionType - Connection Type, carrier - Carrier, region - Region, city - City, browser - Browser, os - Device OS, appName - App Name, siteName - Domain Name, source - Source, sitePage - Site Page, trafficType - Format, requestType - Traffic Type, deviceType - Device Type, language - Language, size - Width x Height |
+ |
agregatedFields.* |
string |
Agregated field name. Allowed values: bids - Bids, wins - Wins, impressions - Impressions, clicks - Clicks, conversions - Conversions, reach - Reach, dspSpend - Spend, $, winrate - Win Rate, %, ctr - CTR, %, ecpc - eCPC, $, ecpm - eCPM, $, ecpa - eCPA, %, conversionRate - Conversion rate |
+ |
filter.campaignId |
integer |
Filtering by Campaign Id(cid) |
|
filter.creativeId |
integer |
Filtering by Creative Id(bid) |
|
orderField |
string |
Sorting field |
|
orderDir |
string |
Sort order: "asc" or "desc" |
|
page |
integer |
Pagination: page number |
|
rowsOnPage |
integer |
Pagination: rows on page (min:10, max:50000) |
4.2.2. HTTP Request
URL
POST api/statistic HTTP/1.1
HEADER
Accept: application/json Content-type: application/json Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwOi8vbG9jYWxob3N0Ojk5MjMiLCJpYXQiOjE3NzE1NzczNzcsImV4cCI6MTc3MTU4MDk3NywibmJmIjoxNzcxNTc3Mzc3LCJqdGkiOiJYMkNJN3gxYmxvRkJwR3M3Iiwic3ViIjoiMTE2IiwicHJ2IjoiMjNiZDVjODk0OWY2MDBhZGIzOWU3MDFjNDAwODcyZGI3YTU5NzZmNyJ9.P_412Mn8ZmtII5EgK37zQI911FPI01kD-fGLt6IaIyU
DATA
{
"timezone": "UTC",
"from": "2026-02-18",
"to": "2026-02-20",
"groupBy": [
"YMD",
"campaignId",
"creativeId"
],
"agregatedFields": [
"bids",
"wins",
"impressions",
"clicks",
"dspSpend",
"winrate",
"ctr"
],
"filter": {
"campaignId": 1,
"creativeId": 10
},
"orderField": "YMD",
"orderDir": "desc",
"page": 1,
"rowsOnPage": 25
}
4.2.3. Curl request
$ curl 'https://dsp-api.smartyads.com/api/statistic' -i -X POST \
-H 'Accept: application/json' \
-H 'Content-type: application/json' \
-H 'Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwOi8vbG9jYWxob3N0Ojk5MjMiLCJpYXQiOjE3NzE1NzczNzcsImV4cCI6MTc3MTU4MDk3NywibmJmIjoxNzcxNTc3Mzc3LCJqdGkiOiJYMkNJN3gxYmxvRkJwR3M3Iiwic3ViIjoiMTE2IiwicHJ2IjoiMjNiZDVjODk0OWY2MDBhZGIzOWU3MDFjNDAwODcyZGI3YTU5NzZmNyJ9.P_412Mn8ZmtII5EgK37zQI911FPI01kD-fGLt6IaIyU' \
-d '{
"timezone": "UTC",
"from": "2026-02-18",
"to": "2026-02-20",
"groupBy": [
"YMD",
"campaignId",
"creativeId"
],
"agregatedFields": [
"bids",
"wins",
"impressions",
"clicks",
"dspSpend",
"winrate",
"ctr"
],
"filter": {
"campaignId": 1,
"creativeId": 10
},
"orderField": "YMD",
"orderDir": "desc",
"page": 1,
"rowsOnPage": 25
}'
4.2.4. Response Body
| Path | Type | Description |
|---|---|---|
status |
string |
Report status |
data.*.YMD |
date |
Date |
data.*.campaignId |
integer |
Campaign |
data.*.creativeId |
string |
Creative |
data.*.campaignId_dict |
string |
campaignId dictionary value |
data.*.creativeId_dict |
string |
creativeId dictionary value |
data.*.bids |
integer |
Bids |
data.*.wins |
integer |
Wins |
data.*.impressions |
integer |
Impressions |
data.*.clicks |
integer |
Clicks |
data.*.dspSpend |
float |
Spend, $ |
data.*.ctr |
float |
CTR, % |
data.*.winrate |
float |
Win Rate, % |
totals.YMD |
date |
Date |
totals.campaignId |
integer |
Campaign |
totals.creativeId |
string |
Creative |
totals.campaignId_dict |
string |
campaignId dictionary value |
totals.creativeId_dict |
string |
creativeId dictionary value |
totals.bids |
integer |
Bids |
totals.wins |
integer |
Wins |
totals.impressions |
integer |
Impressions |
totals.clicks |
integer |
Clicks |
totals.dspSpend |
float |
Spend, $ |
totals.ctr |
float |
CTR, % |
totals.winrate |
float |
Win Rate, % |
pagination.page |
integer |
Pagination: current page number |
pagination.per_page |
integer |
Pagination: items per page |
pagination.total |
integer |
Pagination: total items count |
4.2.5. HTTP Response
HTTP/1.0 200 OK
Content-type: application/json
Access-control-allow-origin: *
X-ratelimit-limit: 500
X-ratelimit-remaining: 499
{
"status": "success",
"data": [
{
"YMD": "2026-02-18",
"campaignId": 1,
"creativeId": 11,
"campaignId_dict": "UA | Puzzle Quest | US | iOS | CPI | #1",
"creativeId_dict": "CR | Battery Saver Pro | Video 1080x1920 15s | iOS | V1 | #11",
"bids": 871015,
"wins": 68193,
"impressions": 67136,
"clicks": 478,
"dspSpend": 306.58292192,
"ctr": 0.711988,
"winrate": 7.829142
},
{
"YMD": "2026-02-18",
"campaignId": 1,
"creativeId": 12,
"campaignId_dict": "UA | Puzzle Quest | US | iOS | CPI | #1",
"creativeId_dict": "CR | Video Player X | Video 1920x1080 30s | iOS | V2 | #12",
"bids": 1566344,
"wins": 132380,
"impressions": 132049,
"clicks": 1423,
"dspSpend": 376.78386284,
"ctr": 1.07763,
"winrate": 8.451528
},
{
"YMD": "2026-02-18",
"campaignId": 2,
"creativeId": 11,
"campaignId_dict": "UA | Translator Go | GB | iOS | CPI | #2",
"creativeId_dict": "CR | Battery Saver Pro | Video 1080x1920 15s | iOS | V1 | #11",
"bids": 1173820,
"wins": 294960,
"impressions": 277321,
"clicks": 7204,
"dspSpend": 483.88826131,
"ctr": 2.597712,
"winrate": 25.128214
},
{
"YMD": "2026-02-18",
"campaignId": 2,
"creativeId": 12,
"campaignId_dict": "UA | Translator Go | GB | iOS | CPI | #2",
"creativeId_dict": "CR | Video Player X | Video 1920x1080 30s | iOS | V2 | #12",
"bids": 1326501,
"wins": 53727,
"impressions": 52841,
"clicks": 321,
"dspSpend": 89.73918337,
"ctr": 0.607483,
"winrate": 4.05028
},
{
"YMD": "2026-02-19",
"campaignId": 1,
"creativeId": 11,
"campaignId_dict": "UA | Puzzle Quest | US | iOS | CPI | #1",
"creativeId_dict": "CR | Battery Saver Pro | Video 1080x1920 15s | iOS | V1 | #11",
"bids": 821101,
"wins": 26669,
"impressions": 26181,
"clicks": 645,
"dspSpend": 63.41378553,
"ctr": 2.463619,
"winrate": 3.247956
},
{
"YMD": "2026-02-19",
"campaignId": 1,
"creativeId": 12,
"campaignId_dict": "UA | Puzzle Quest | US | iOS | CPI | #1",
"creativeId_dict": "CR | Video Player X | Video 1920x1080 30s | iOS | V2 | #12",
"bids": 1123809,
"wins": 235585,
"impressions": 230520,
"clicks": 2073,
"dspSpend": 542.25150444,
"ctr": 0.899271,
"winrate": 20.963082
},
{
"YMD": "2026-02-19",
"campaignId": 2,
"creativeId": 11,
"campaignId_dict": "UA | Translator Go | GB | iOS | CPI | #2",
"creativeId_dict": "CR | Battery Saver Pro | Video 1080x1920 15s | iOS | V1 | #11",
"bids": 902821,
"wins": 187944,
"impressions": 173491,
"clicks": 1722,
"dspSpend": 146.61828505,
"ctr": 0.992559,
"winrate": 20.817416
},
{
"YMD": "2026-02-19",
"campaignId": 2,
"creativeId": 12,
"campaignId_dict": "UA | Translator Go | GB | iOS | CPI | #2",
"creativeId_dict": "CR | Video Player X | Video 1920x1080 30s | iOS | V2 | #12",
"bids": 1040900,
"wins": 121686,
"impressions": 112925,
"clicks": 2812,
"dspSpend": 69.69584198,
"ctr": 2.490148,
"winrate": 11.69046
},
{
"YMD": "2026-02-20",
"campaignId": 1,
"creativeId": 11,
"campaignId_dict": "UA | Puzzle Quest | US | iOS | CPI | #1",
"creativeId_dict": "CR | Battery Saver Pro | Video 1080x1920 15s | iOS | V1 | #11",
"bids": 99461,
"wins": 19956,
"impressions": 19796,
"clicks": 593,
"dspSpend": 78.30194963,
"ctr": 2.995555,
"winrate": 20.064146
},
{
"YMD": "2026-02-20",
"campaignId": 1,
"creativeId": 12,
"campaignId_dict": "UA | Puzzle Quest | US | iOS | CPI | #1",
"creativeId_dict": "CR | Video Player X | Video 1920x1080 30s | iOS | V2 | #12",
"bids": 925475,
"wins": 263811,
"impressions": 262650,
"clicks": 1491,
"dspSpend": 845.9594043,
"ctr": 0.567676,
"winrate": 28.50547
},
{
"YMD": "2026-02-20",
"campaignId": 2,
"creativeId": 11,
"campaignId_dict": "UA | Translator Go | GB | iOS | CPI | #2",
"creativeId_dict": "CR | Battery Saver Pro | Video 1080x1920 15s | iOS | V1 | #11",
"bids": 99873,
"wins": 11107,
"impressions": 10673,
"clicks": 286,
"dspSpend": 24.55286295,
"ctr": 2.679659,
"winrate": 11.121124
},
{
"YMD": "2026-02-20",
"campaignId": 2,
"creativeId": 12,
"campaignId_dict": "UA | Translator Go | GB | iOS | CPI | #2",
"creativeId_dict": "CR | Video Player X | Video 1920x1080 30s | iOS | V2 | #12",
"bids": 923547,
"wins": 44230,
"impressions": 43500,
"clicks": 792,
"dspSpend": 184.6516275,
"ctr": 1.82069,
"winrate": 4.789144
}
],
"totals": {
"YMD": "",
"campaignId": 0,
"creativeId": 0,
"campaignId_dict": "",
"creativeId_dict": "",
"bids": 10874667,
"wins": 1460248,
"impressions": 1409083,
"clicks": 19840,
"dspSpend": 3212.4394908199993,
"ctr": 1.6586658333333333,
"winrate": 13.8881635
},
"pagination": {
"page": 1,
"per_page": 25,
"total": 12
}
}
4.3. Video statistic report (events)
A `POST` request will return video events statistic (plays/quartiles/completions).
4.3.1. Request Body
| Path | Type | Description | Required |
|---|---|---|---|
timezone |
string |
Timezone. Example: |
|
from |
date |
Start date (yyyy-mm-dd) |
+ |
to |
date |
End date (yyyy-mm-dd) |
+ |
groupBy.* |
string |
Group by field name. Allowed values: YMD - Date, campaignId - Campaign, creativeId - Creative, country - Country, trafficType - Format |
+ |
agregatedFields.* |
string |
Agregated field name. Allowed values: eventCount - Count, eventStartCount - Start, eventFirstQuartileCount - First Quartile, eventMidpointCount - Midpoint, eventThirdQuartileCount - Third Quartile, eventCompleteCount - Complete |
+ |
orderField |
string |
Sorting field |
|
orderDir |
string |
Sort order: |
|
page |
integer |
Pagination: page number |
|
rowsOnPage |
integer |
Pagination: rows on page |
4.3.2. HTTP Request
URL
POST api/video-statistic HTTP/1.1
HEADER
Accept: application/json Content-type: application/json Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwOi8vbG9jYWxob3N0Ojk5MjMiLCJpYXQiOjE3NzE1NzczNzcsImV4cCI6MTc3MTU4MDk3NywibmJmIjoxNzcxNTc3Mzc3LCJqdGkiOiJOZ1N6aUc4QXd3UHlaMlRsIiwic3ViIjoiMTE3IiwicHJ2IjoiMjNiZDVjODk0OWY2MDBhZGIzOWU3MDFjNDAwODcyZGI3YTU5NzZmNyJ9.qMAzBe5b4mNvK2o2gIUz2vRh0sTduRSLZoWwspDcLLM
DATA
{
"timezone": "UTC",
"from": "2026-02-18",
"to": "2026-02-20",
"groupBy": [
"YMD",
"campaignId",
"creativeId"
],
"agregatedFields": [
"eventStartCount",
"eventFirstQuartileCount",
"eventMidpointCount",
"eventThirdQuartileCount",
"eventCompleteCount"
],
"orderField": "YMD",
"orderDir": "desc",
"page": 1,
"rowsOnPage": 25
}
4.3.3. Curl request
$ curl 'https://dsp-api.smartyads.com/api/video-statistic' -i -X POST \
-H 'Accept: application/json' \
-H 'Content-type: application/json' \
-H 'Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwOi8vbG9jYWxob3N0Ojk5MjMiLCJpYXQiOjE3NzE1NzczNzcsImV4cCI6MTc3MTU4MDk3NywibmJmIjoxNzcxNTc3Mzc3LCJqdGkiOiJOZ1N6aUc4QXd3UHlaMlRsIiwic3ViIjoiMTE3IiwicHJ2IjoiMjNiZDVjODk0OWY2MDBhZGIzOWU3MDFjNDAwODcyZGI3YTU5NzZmNyJ9.qMAzBe5b4mNvK2o2gIUz2vRh0sTduRSLZoWwspDcLLM' \
-d '{
"timezone": "UTC",
"from": "2026-02-18",
"to": "2026-02-20",
"groupBy": [
"YMD",
"campaignId",
"creativeId"
],
"agregatedFields": [
"eventStartCount",
"eventFirstQuartileCount",
"eventMidpointCount",
"eventThirdQuartileCount",
"eventCompleteCount"
],
"orderField": "YMD",
"orderDir": "desc",
"page": 1,
"rowsOnPage": 25
}'
4.3.4. Response Body
| Path | Type | Description |
|---|---|---|
status |
string |
Report status |
data.*.YMD |
date |
Date |
data.*.campaignId |
integer |
Campaign |
data.*.creativeId |
string |
Creative |
data.*.campaignId_dict |
string |
campaignId dictionary value |
data.*.creativeId_dict |
string |
creativeId dictionary value |
totals.YMD |
date |
Date |
totals.campaignId |
integer |
Campaign |
totals.creativeId |
string |
Creative |
totals.campaignId_dict |
string |
campaignId dictionary value |
totals.creativeId_dict |
string |
creativeId dictionary value |
pagination.page |
integer |
Pagination: current page number |
pagination.per_page |
integer |
Pagination: items per page |
pagination.total |
integer |
Pagination: total items count |
4.3.5. HTTP Response
HTTP/1.0 200 OK
Content-type: application/json
Access-control-allow-origin: *
X-ratelimit-limit: 500
X-ratelimit-remaining: 499
{
"status": "success",
"data": [
{
"YMD": "2026-02-18",
"campaignId": 1,
"creativeId": 11,
"campaignId_dict": "UA | Battery Saver Pro | US | iOS | CPM | #1",
"creativeId_dict": "CR | Weather Now | Video 1080x1920 15s | iOS | V1 | #11"
},
{
"YMD": "2026-02-18",
"campaignId": 1,
"creativeId": 12,
"campaignId_dict": "UA | Battery Saver Pro | US | iOS | CPM | #1",
"creativeId_dict": "CR | Call Recorder | Video 1920x1080 30s | iOS | V2 | #12"
},
{
"YMD": "2026-02-18",
"campaignId": 2,
"creativeId": 11,
"campaignId_dict": "UA | Podcast Hub | GB | iOS | CPM | #2",
"creativeId_dict": "CR | Weather Now | Video 1080x1920 15s | iOS | V1 | #11"
},
{
"YMD": "2026-02-18",
"campaignId": 2,
"creativeId": 12,
"campaignId_dict": "UA | Podcast Hub | GB | iOS | CPM | #2",
"creativeId_dict": "CR | Call Recorder | Video 1920x1080 30s | iOS | V2 | #12"
},
{
"YMD": "2026-02-19",
"campaignId": 1,
"creativeId": 11,
"campaignId_dict": "UA | Battery Saver Pro | US | iOS | CPM | #1",
"creativeId_dict": "CR | Weather Now | Video 1080x1920 15s | iOS | V1 | #11"
},
{
"YMD": "2026-02-19",
"campaignId": 1,
"creativeId": 12,
"campaignId_dict": "UA | Battery Saver Pro | US | iOS | CPM | #1",
"creativeId_dict": "CR | Call Recorder | Video 1920x1080 30s | iOS | V2 | #12"
},
{
"YMD": "2026-02-19",
"campaignId": 2,
"creativeId": 11,
"campaignId_dict": "UA | Podcast Hub | GB | iOS | CPM | #2",
"creativeId_dict": "CR | Weather Now | Video 1080x1920 15s | iOS | V1 | #11"
},
{
"YMD": "2026-02-19",
"campaignId": 2,
"creativeId": 12,
"campaignId_dict": "UA | Podcast Hub | GB | iOS | CPM | #2",
"creativeId_dict": "CR | Call Recorder | Video 1920x1080 30s | iOS | V2 | #12"
},
{
"YMD": "2026-02-20",
"campaignId": 1,
"creativeId": 11,
"campaignId_dict": "UA | Battery Saver Pro | US | iOS | CPM | #1",
"creativeId_dict": "CR | Weather Now | Video 1080x1920 15s | iOS | V1 | #11"
},
{
"YMD": "2026-02-20",
"campaignId": 1,
"creativeId": 12,
"campaignId_dict": "UA | Battery Saver Pro | US | iOS | CPM | #1",
"creativeId_dict": "CR | Call Recorder | Video 1920x1080 30s | iOS | V2 | #12"
},
{
"YMD": "2026-02-20",
"campaignId": 2,
"creativeId": 11,
"campaignId_dict": "UA | Podcast Hub | GB | iOS | CPM | #2",
"creativeId_dict": "CR | Weather Now | Video 1080x1920 15s | iOS | V1 | #11"
},
{
"YMD": "2026-02-20",
"campaignId": 2,
"creativeId": 12,
"campaignId_dict": "UA | Podcast Hub | GB | iOS | CPM | #2",
"creativeId_dict": "CR | Call Recorder | Video 1920x1080 30s | iOS | V2 | #12"
}
],
"totals": {
"YMD": "",
"campaignId": 0,
"creativeId": 0,
"campaignId_dict": "",
"creativeId_dict": ""
},
"pagination": {
"page": 1,
"per_page": 25,
"total": 12
}
}
5. Agency
5.1. Deposit to advert
A `POST` request
5.1.1. Request Body
| Path | Type | Description | Required |
|---|---|---|---|
userId |
integer |
user id |
+ |
transactionAmount |
integer |
transaction amount |
+ |
5.1.2. HTTP Request
URL
POST api/deposit-agency-user HTTP/1.1
HEADER
Accept: application/json Content-type: application/json Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwOi8vbG9jYWxob3N0Ojk5MjMiLCJpYXQiOjE3NzE1NzczNjQsImV4cCI6MTc3MTU4MDk2NCwibmJmIjoxNzcxNTc3MzY0LCJqdGkiOiJNYmV6Tm1oUkxMMU04WDVKIiwic3ViIjoiMSIsInBydiI6IjIzYmQ1Yzg5NDlmNjAwYWRiMzllNzAxYzQwMDg3MmRiN2E1OTc2ZjcifQ.83yvLcrA3PC_ckAvP5ZjtUu347xYfJqEFb9KZ-y7Am4
DATA
{
"userId": 2,
"transactionAmount": 10
}
5.1.3. Curl request
$ curl 'https://dsp-api.smartyads.com/api/deposit-agency-user' -i -X POST \
-H 'Accept: application/json' \
-H 'Content-type: application/json' \
-H 'Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwOi8vbG9jYWxob3N0Ojk5MjMiLCJpYXQiOjE3NzE1NzczNjQsImV4cCI6MTc3MTU4MDk2NCwibmJmIjoxNzcxNTc3MzY0LCJqdGkiOiJNYmV6Tm1oUkxMMU04WDVKIiwic3ViIjoiMSIsInBydiI6IjIzYmQ1Yzg5NDlmNjAwYWRiMzllNzAxYzQwMDg3MmRiN2E1OTc2ZjcifQ.83yvLcrA3PC_ckAvP5ZjtUu347xYfJqEFb9KZ-y7Am4' \
-d '{
"userId": 2,
"transactionAmount": 10
}'
5.1.4. Response Body
| Path | Type | Description |
|---|---|---|
status |
string |
Result status |
balance |
float |
balance |
5.1.5. HTTP Response
HTTP/1.0 200 OK
Content-type: application/json
Access-control-allow-origin: *
{
"status": "success",
"balance": "89067.00000"
}
5.2. Withdraw to advert
A `POST` request
5.2.1. Request Body
| Path | Type | Description | Required |
|---|---|---|---|
userId |
integer |
user id |
+ |
transactionAmount |
integer |
transaction amount |
+ |
5.2.2. HTTP Request
URL
POST api/withdraw-agency-user HTTP/1.1
HEADER
Accept: application/json Content-type: application/json Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwOi8vbG9jYWxob3N0Ojk5MjMiLCJpYXQiOjE3NzE1NzczNjQsImV4cCI6MTc3MTU4MDk2NCwibmJmIjoxNzcxNTc3MzY0LCJqdGkiOiJHSEpvczNjTUNWWXQ3VENGIiwic3ViIjoiMyIsInBydiI6IjIzYmQ1Yzg5NDlmNjAwYWRiMzllNzAxYzQwMDg3MmRiN2E1OTc2ZjcifQ.a67H1lLckVyzmRVDvytmy4P9md5SI25cRKb1auxg6is
DATA
{
"userId": 4,
"transactionAmount": 10
}
5.2.3. Curl request
$ curl 'https://dsp-api.smartyads.com/api/withdraw-agency-user' -i -X POST \
-H 'Accept: application/json' \
-H 'Content-type: application/json' \
-H 'Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwOi8vbG9jYWxob3N0Ojk5MjMiLCJpYXQiOjE3NzE1NzczNjQsImV4cCI6MTc3MTU4MDk2NCwibmJmIjoxNzcxNTc3MzY0LCJqdGkiOiJHSEpvczNjTUNWWXQ3VENGIiwic3ViIjoiMyIsInBydiI6IjIzYmQ1Yzg5NDlmNjAwYWRiMzllNzAxYzQwMDg3MmRiN2E1OTc2ZjcifQ.a67H1lLckVyzmRVDvytmy4P9md5SI25cRKb1auxg6is' \
-d '{
"userId": 4,
"transactionAmount": 10
}'
5.2.4. Response Body
| Path | Type | Description |
|---|---|---|
status |
string |
Result status |
balance |
float |
balance |
5.2.5. HTTP Response
HTTP/1.0 200 OK
Content-type: application/json
Access-control-allow-origin: *
{
"status": "success",
"balance": "15965.00000"
}
5.3. Creatives list
A `GET` request will return a list of an creatives.
5.3.1. HTTP Request
URL
GET api/creatives HTTP/1.1
HEADER
Accept: application/json Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwOi8vbG9jYWxob3N0Ojk5MjMiLCJpYXQiOjE3NzE1NzczNjQsImV4cCI6MTc3MTU4MDk2NCwibmJmIjoxNzcxNTc3MzY0LCJqdGkiOiI3ckZJQXhSTFZGM0dxRkdFIiwic3ViIjoiNSIsInBydiI6IjIzYmQ1Yzg5NDlmNjAwYWRiMzllNzAxYzQwMDg3MmRiN2E1OTc2ZjcifQ.3mciaFjluiVjmjbUP_e8p2vEg3QX9sAW5-uyXKphYsw
DATA
{
"where": "userId;6"
}
5.3.2. Curl request
$ curl 'https://dsp-api.smartyads.com/api/creatives' -i -X GET \
-H 'Accept: application/json' \
-H 'Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwOi8vbG9jYWxob3N0Ojk5MjMiLCJpYXQiOjE3NzE1NzczNjQsImV4cCI6MTc3MTU4MDk2NCwibmJmIjoxNzcxNTc3MzY0LCJqdGkiOiI3ckZJQXhSTFZGM0dxRkdFIiwic3ViIjoiNSIsInBydiI6IjIzYmQ1Yzg5NDlmNjAwYWRiMzllNzAxYzQwMDg3MmRiN2E1OTc2ZjcifQ.3mciaFjluiVjmjbUP_e8p2vEg3QX9sAW5-uyXKphYsw' \
-d '{
"where": "userId;6"
}'
5.3.3. Response Body
| Path | Type | Description |
|---|---|---|
data |
array |
Creatives list |
meta.pagination.total |
integer |
Pagination: total items count |
meta.pagination.count |
integer |
Pagination: page items count |
meta.pagination.per_page |
integer |
Pagination: items per page |
meta.pagination.current_page |
integer |
Pagination: current page number |
meta.pagination.total_pages |
integer |
Pagination: total pages count |
meta.pagination.links |
object |
Pagination links |
5.3.4. HTTP Response
HTTP/1.0 200 OK
Content-type: application/json
Access-control-allow-origin: *
X-ratelimit-limit: 500
X-ratelimit-remaining: 499
{
"data": [],
"meta": {
"pagination": {
"total": 0,
"count": 0,
"per_page": 15,
"current_page": 1,
"total_pages": 1,
"links": []
}
}
}
5.4. Statistic report
A `POST` request will return statistic.
5.4.1. Request Body
| Path | Type | Description | Required |
|---|---|---|---|
timezone |
integer |
Timezone. Examples: "Etc/GMT+12"…"Etc/GMT-12", "America/Anchorage"…"Europe/Istanbul", "Asia/Tokyo" |
|
from |
date |
Start date (yyyy-mm-dd) |
+ |
to |
date |
End date (yyyy-mm-dd) |
+ |
groupBy.* |
string |
Group by field name. Allowed values: YMD - Date, YMDH - Date time. Period: 2 days max, campaignId - Campaign, creativeId - Creative, country - Country, connectionType - Connection Type, carrier - Carrier, region - Region, city - City, browser - Browser, os - Device OS, appName - App Name, siteName - Domain Name, source - Source, sitePage - Site Page, trafficType - Format, requestType - Traffic Type, deviceType - Device Type, language - Language, size - Width x Height |
+ |
filter.advertiserId.* |
integer |
Advertiser Id (user id) |
|
agregatedFields.* |
string |
Agregated field name. Allowed values: bids - Bids, wins - Wins, impressions - Impressions, clicks - Clicks, conversions - Conversions, reach - Reach, dspSpend - Spend, $, winrate - Win Rate, %, ctr - CTR, %, ecpc - eCPC, $, ecpm - eCPM, $, ecpa - eCPA, %, conversionRate - Conversion rate |
+ |
orderField |
string |
Sorting field |
|
orderDir |
string |
Sort order: "asc" or "desc" |
|
page |
integer |
Pagination: page number |
|
rowsOnPage |
integer |
Pagination: rows on page (min:10, max:50000) |
5.4.2. HTTP Request
URL
POST api/statistic HTTP/1.1
HEADER
Accept: application/json Content-type: application/json Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwOi8vbG9jYWxob3N0Ojk5MjMiLCJpYXQiOjE3NzE1NzczNjQsImV4cCI6MTc3MTU4MDk2NCwibmJmIjoxNzcxNTc3MzY0LCJqdGkiOiIxSWdhbTdmZUZlRVZkSHowIiwic3ViIjoiNyIsInBydiI6IjIzYmQ1Yzg5NDlmNjAwYWRiMzllNzAxYzQwMDg3MmRiN2E1OTc2ZjcifQ.sydmojr1r__Mrm30WQfEmMzZyCyxkeTPtXXwhoIo3mk
DATA
{
"timezone": "UTC",
"from": "2026-02-18",
"to": "2026-02-20",
"groupBy": [
"YMD",
"siteName"
],
"filter": {
"advertiserId": [
8
]
},
"agregatedFields": [
"impressions",
"clicks",
"reach",
"ctr"
],
"orderField": "impressions",
"orderDir": "desc",
"page": 1,
"rowsOnPage": 25
}
5.4.3. Curl request
$ curl 'https://dsp-api.smartyads.com/api/statistic' -i -X POST \
-H 'Accept: application/json' \
-H 'Content-type: application/json' \
-H 'Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwOi8vbG9jYWxob3N0Ojk5MjMiLCJpYXQiOjE3NzE1NzczNjQsImV4cCI6MTc3MTU4MDk2NCwibmJmIjoxNzcxNTc3MzY0LCJqdGkiOiIxSWdhbTdmZUZlRVZkSHowIiwic3ViIjoiNyIsInBydiI6IjIzYmQ1Yzg5NDlmNjAwYWRiMzllNzAxYzQwMDg3MmRiN2E1OTc2ZjcifQ.sydmojr1r__Mrm30WQfEmMzZyCyxkeTPtXXwhoIo3mk' \
-d '{
"timezone": "UTC",
"from": "2026-02-18",
"to": "2026-02-20",
"groupBy": [
"YMD",
"siteName"
],
"filter": {
"advertiserId": [
8
]
},
"agregatedFields": [
"impressions",
"clicks",
"reach",
"ctr"
],
"orderField": "impressions",
"orderDir": "desc",
"page": 1,
"rowsOnPage": 25
}'
5.4.4. Response Body
| Path | Type | Description |
|---|---|---|
status |
string |
Report status |
data.*.YMD |
date |
Date |
data.*.siteName |
string |
Site Name |
data.*.impressions |
integer |
Impressions |
data.*.clicks |
integer |
Clicks |
data.*.reach |
integer |
Reach |
data.*.ctr |
float |
CTR, % |
totals.YMD |
date |
Date |
totals.siteName |
string |
Site Name |
totals.impressions |
integer |
Impressions |
totals.clicks |
integer |
Clicks |
totals.reach |
integer |
Reach |
totals.ctr |
float |
CTR, % |
pagination.page |
integer |
Pagination: current page number |
pagination.per_page |
integer |
Pagination: items per page |
pagination.total |
integer |
Pagination: total items count |
5.4.5. HTTP Response
HTTP/1.0 200 OK
Content-type: application/json
Access-control-allow-origin: *
X-ratelimit-limit: 500
X-ratelimit-remaining: 499
{
"status": "success",
"data": [
{
"YMD": "2026-02-18",
"siteName": ".animeflv.net",
"impressions": 135621,
"clicks": 2798,
"reach": 64339,
"ctr": 2.063102
},
{
"YMD": "2026-02-18",
"siteName": ".flightrising.com",
"impressions": 20321,
"clicks": 440,
"reach": 5119,
"ctr": 2.165248
},
{
"YMD": "2026-02-18",
"siteName": ".stangl.eu",
"impressions": 133537,
"clicks": 2949,
"reach": 87360,
"ctr": 2.208377
},
{
"YMD": "2026-02-18",
"siteName": "1000cinema.live",
"impressions": 113669,
"clicks": 3619,
"reach": 45138,
"ctr": 3.183806
},
{
"YMD": "2026-02-18",
"siteName": "1001fonts.com",
"impressions": 229877,
"clicks": 1225,
"reach": 131007,
"ctr": 0.532894
},
{
"YMD": "2026-02-18",
"siteName": "1001games.co.uk",
"impressions": 202230,
"clicks": 2887,
"reach": 101054,
"ctr": 1.427582
},
{
"YMD": "2026-02-18",
"siteName": "kval.com",
"impressions": 20700,
"clicks": 632,
"reach": 7309,
"ctr": 3.05314
},
{
"YMD": "2026-02-18",
"siteName": "golem.de",
"impressions": 7981,
"clicks": 28,
"reach": 2218,
"ctr": 0.350833
},
{
"YMD": "2026-02-18",
"siteName": "33bridges.com",
"impressions": 299849,
"clicks": 7654,
"reach": 125337,
"ctr": 2.552618
},
{
"YMD": "2026-02-18",
"siteName": "365daily.net",
"impressions": 103878,
"clicks": 3498,
"reach": 35235,
"ctr": 3.367412
},
{
"YMD": "2026-02-19",
"siteName": ".animeflv.net",
"impressions": 213648,
"clicks": 1134,
"reach": 93044,
"ctr": 0.53078
},
{
"YMD": "2026-02-19",
"siteName": ".flightrising.com",
"impressions": 57352,
"clicks": 636,
"reach": 36917,
"ctr": 1.108941
},
{
"YMD": "2026-02-19",
"siteName": ".stangl.eu",
"impressions": 96146,
"clicks": 837,
"reach": 60312,
"ctr": 0.870551
},
{
"YMD": "2026-02-19",
"siteName": "1000cinema.live",
"impressions": 153835,
"clicks": 2569,
"reach": 75118,
"ctr": 1.669971
},
{
"YMD": "2026-02-19",
"siteName": "1001fonts.com",
"impressions": 40725,
"clicks": 1170,
"reach": 14816,
"ctr": 2.872928
},
{
"YMD": "2026-02-19",
"siteName": "1001games.co.uk",
"impressions": 262317,
"clicks": 5576,
"reach": 160040,
"ctr": 2.125672
},
{
"YMD": "2026-02-19",
"siteName": "kval.com",
"impressions": 41426,
"clicks": 944,
"reach": 14959,
"ctr": 2.278762
},
{
"YMD": "2026-02-19",
"siteName": "golem.de",
"impressions": 154666,
"clicks": 3449,
"reach": 38914,
"ctr": 2.229967
},
{
"YMD": "2026-02-19",
"siteName": "33bridges.com",
"impressions": 78169,
"clicks": 2010,
"reach": 42594,
"ctr": 2.571352
},
{
"YMD": "2026-02-19",
"siteName": "365daily.net",
"impressions": 204031,
"clicks": 6716,
"reach": 74635,
"ctr": 3.291657
},
{
"YMD": "2026-02-20",
"siteName": ".animeflv.net",
"impressions": 34453,
"clicks": 377,
"reach": 14649,
"ctr": 1.094244
},
{
"YMD": "2026-02-20",
"siteName": ".flightrising.com",
"impressions": 12850,
"clicks": 214,
"reach": 4671,
"ctr": 1.66537
},
{
"YMD": "2026-02-20",
"siteName": ".stangl.eu",
"impressions": 290309,
"clicks": 7867,
"reach": 164112,
"ctr": 2.709871
},
{
"YMD": "2026-02-20",
"siteName": "1000cinema.live",
"impressions": 142611,
"clicks": 3968,
"reach": 94394,
"ctr": 2.782394
},
{
"YMD": "2026-02-20",
"siteName": "1001fonts.com",
"impressions": 260118,
"clicks": 4711,
"reach": 147201,
"ctr": 1.811101
}
],
"totals": {
"YMD": "",
"siteName": "",
"impressions": 3959106,
"clicks": 77912,
"reach": 63588.86666666667,
"ctr": 1.9469294000000004
},
"pagination": {
"page": 1,
"per_page": 25,
"total": 30
}
}
5.5. Video statistic report (events)
A `POST` request will return video events statistic (plays/quartiles/completions).
5.5.1. Request Body
| Path | Type | Description | Required |
|---|---|---|---|
timezone |
string |
Timezone. Example: |
|
from |
date |
Start date (yyyy-mm-dd) |
+ |
to |
date |
End date (yyyy-mm-dd) |
+ |
groupBy.* |
string |
Group by field name. Allowed values: YMD - Date, campaignId - Campaign, creativeId - Creative, country - Country, trafficType - Format |
+ |
filter.advertiserId.* |
integer |
Advertiser Id (user id) |
|
agregatedFields.* |
string |
Agregated field name. Allowed values: eventCount - Count, eventStartCount - Start, eventFirstQuartileCount - First Quartile, eventMidpointCount - Midpoint, eventThirdQuartileCount - Third Quartile, eventCompleteCount - Complete |
+ |
orderField |
string |
Sorting field |
|
orderDir |
string |
Sort order: |
|
page |
integer |
Pagination: page number |
|
rowsOnPage |
integer |
Pagination: rows on page |
5.5.2. HTTP Request
URL
POST api/video-statistic HTTP/1.1
HEADER
Accept: application/json Content-type: application/json Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwOi8vbG9jYWxob3N0Ojk5MjMiLCJpYXQiOjE3NzE1NzczNjQsImV4cCI6MTc3MTU4MDk2NCwibmJmIjoxNzcxNTc3MzY0LCJqdGkiOiJQZXNhSGp5ZDdDU0ExekxiIiwic3ViIjoiOSIsInBydiI6IjIzYmQ1Yzg5NDlmNjAwYWRiMzllNzAxYzQwMDg3MmRiN2E1OTc2ZjcifQ.HSX7-LYk-JMtvIcdzmVRBsBIMku0UroKxJ4fJokjorM
DATA
{
"timezone": "UTC",
"from": "2026-02-18",
"to": "2026-02-20",
"groupBy": [
"YMD",
"campaignId"
],
"filter": {
"advertiserId": [
10
]
},
"agregatedFields": [
"eventCount"
],
"orderField": "eventCount",
"orderDir": "desc",
"page": 1,
"rowsOnPage": 25
}
5.5.3. Curl request
$ curl 'https://dsp-api.smartyads.com/api/video-statistic' -i -X POST \
-H 'Accept: application/json' \
-H 'Content-type: application/json' \
-H 'Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwOi8vbG9jYWxob3N0Ojk5MjMiLCJpYXQiOjE3NzE1NzczNjQsImV4cCI6MTc3MTU4MDk2NCwibmJmIjoxNzcxNTc3MzY0LCJqdGkiOiJQZXNhSGp5ZDdDU0ExekxiIiwic3ViIjoiOSIsInBydiI6IjIzYmQ1Yzg5NDlmNjAwYWRiMzllNzAxYzQwMDg3MmRiN2E1OTc2ZjcifQ.HSX7-LYk-JMtvIcdzmVRBsBIMku0UroKxJ4fJokjorM' \
-d '{
"timezone": "UTC",
"from": "2026-02-18",
"to": "2026-02-20",
"groupBy": [
"YMD",
"campaignId"
],
"filter": {
"advertiserId": [
10
]
},
"agregatedFields": [
"eventCount"
],
"orderField": "eventCount",
"orderDir": "desc",
"page": 1,
"rowsOnPage": 25
}'
5.5.4. Response Body
| Path | Type | Description |
|---|---|---|
status |
string |
Report status |
data.*.YMD |
date |
Date |
data.*.campaignId |
integer |
Campaign |
data.*.campaignId_dict |
string |
campaignId dictionary value |
data.*.eventCount |
integer |
Count |
totals.YMD |
date |
Date |
totals.campaignId |
integer |
Campaign |
totals.campaignId_dict |
string |
campaignId dictionary value |
totals.eventCount |
integer |
Count |
pagination.page |
integer |
Pagination: current page number |
pagination.per_page |
integer |
Pagination: items per page |
pagination.total |
integer |
Pagination: total items count |
5.5.5. HTTP Response
HTTP/1.0 200 OK
Content-type: application/json
Access-control-allow-origin: *
X-ratelimit-limit: 500
X-ratelimit-remaining: 499
{
"status": "success",
"data": [
{
"YMD": "2026-02-18",
"campaignId": 1,
"campaignId_dict": "UA | Car Drift | US | iOS | CPM | #1",
"eventCount": 360
},
{
"YMD": "2026-02-18",
"campaignId": 2,
"campaignId_dict": "UA | Local Bazaar | GB | iOS | CPM | #2",
"eventCount": 140
},
{
"YMD": "2026-02-19",
"campaignId": 1,
"campaignId_dict": "UA | Car Drift | US | iOS | CPM | #1",
"eventCount": 151
},
{
"YMD": "2026-02-19",
"campaignId": 2,
"campaignId_dict": "UA | Local Bazaar | GB | iOS | CPM | #2",
"eventCount": 3599
},
{
"YMD": "2026-02-20",
"campaignId": 1,
"campaignId_dict": "UA | Car Drift | US | iOS | CPM | #1",
"eventCount": 1143
},
{
"YMD": "2026-02-20",
"campaignId": 2,
"campaignId_dict": "UA | Local Bazaar | GB | iOS | CPM | #2",
"eventCount": 973
}
],
"totals": {
"YMD": "",
"campaignId": 0,
"campaignId_dict": "",
"eventCount": 6366
},
"pagination": {
"page": 1,
"per_page": 25,
"total": 6
}
}
5.6. User list with campaigns
A `GET` request
5.6.1. HTTP Request
URL
GET api/get-agency-users-with-campaigns HTTP/1.1
HEADER
Accept: application/json Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwOi8vbG9jYWxob3N0Ojk5MjMiLCJpYXQiOjE3NzE1NzczNjQsImV4cCI6MTc3MTU4MDk2NCwibmJmIjoxNzcxNTc3MzY0LCJqdGkiOiJlOVhFT3NPdVE0eDNIcDN0Iiwic3ViIjoiMTEiLCJwcnYiOiIyM2JkNWM4OTQ5ZjYwMGFkYjM5ZTcwMWM0MDA4NzJkYjdhNTk3NmY3In0.NkQM7x-RIB4z9dLp_2wZez_T7YYImVcHlqGAY4eUaJU
DATA
{
"where": "userId;11"
}
5.6.2. Curl request
$ curl 'https://dsp-api.smartyads.com/api/get-agency-users-with-campaigns' -i -X GET \
-H 'Accept: application/json' \
-H 'Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwOi8vbG9jYWxob3N0Ojk5MjMiLCJpYXQiOjE3NzE1NzczNjQsImV4cCI6MTc3MTU4MDk2NCwibmJmIjoxNzcxNTc3MzY0LCJqdGkiOiJlOVhFT3NPdVE0eDNIcDN0Iiwic3ViIjoiMTEiLCJwcnYiOiIyM2JkNWM4OTQ5ZjYwMGFkYjM5ZTcwMWM0MDA4NzJkYjdhNTk3NmY3In0.NkQM7x-RIB4z9dLp_2wZez_T7YYImVcHlqGAY4eUaJU' \
-d '{
"where": "userId;11"
}'
5.6.3. Response Body
| Path | Type | Description |
|---|---|---|
data.*.id |
integer |
user id |
data.*.email |
string |
|
data.*.firstName |
string |
First name |
data.*.lastName |
string |
Last name |
data.*.balance |
float |
balance |
data.*.bidResTotalCounter |
integer |
Bid total counter |
data.*.bidResDailyCounter |
integer |
Bid daily counter |
data.*.winsTotalCounter |
integer |
Wins total counter |
data.*.winsDailyCounter |
integer |
Wins daily counter |
data.*.impressionsTotalCounter |
integer |
Impressions total counter |
data.*.impressionsDailyCounter |
integer |
Impressions daily counter |
data.*.clicksTotalCounter |
integer |
Click total counter |
data.*.clicksDailyCounter |
integer |
Click daily counter |
data.*.spentDailyLimit |
integer |
Spent daily limit |
data.*.spentDailyCounter |
integer |
Spent daily counter |
data.*.spentTotalLimit |
integer |
Spent total limit |
data.*.spentTotalCounter |
integer |
Spent total counter |
data.*.impressionsDailyLimit |
integer |
impressions daily limit |
data.*.impressionsTotalLimit |
integer |
impressions total limit |
data..campaigns..id |
integer |
campaign id |
data..campaigns..userId |
integer |
user id |
data..campaigns..isActive |
boolean |
isActive |
data..campaigns..isRunning |
boolean |
Campaign running status |
data..campaigns..type |
string |
Campaign type: banner, native, video, audio |
data..campaigns..name |
string |
Campaign name |
data..campaigns..isRewarded |
integer |
Rewarded video (for video creatives) |
data..campaigns..isDesktopWeb |
boolean |
Traffic Type: Desktop Websites |
data..campaigns..isMobileApp |
boolean |
Traffic Type: Mobile Applications |
data..campaigns..isMobileWeb |
boolean |
Traffic Type: Mobile Websites |
data..campaigns..isSmartphone |
boolean |
Traffic Type: Smartphones |
data..campaigns..isTablet |
boolean |
Traffic Type: Tablets |
data..campaigns..isCTV |
boolean |
Traffic Type: CTV |
data..campaigns..isDOOH |
boolean |
Traffic Type: DOOH |
data..campaigns..aDomain |
integer |
Top level domain |
data..campaigns..dateStart |
date |
Date start |
data..campaigns..dateEnd |
date |
Date end |
data..campaigns..geoCountries |
array |
GEO Targeting: countries list |
data..campaigns..geoCountriesIsInclude |
boolean |
GEO Targeting: countries list type (true: whitelist, false: blacklist) |
data..campaigns..geoRegions |
array |
GEO Targeting: regions list |
data..campaigns..geoRegionsIsInclude |
boolean |
GEO Targeting: regions list type (true: whitelist, false: blacklist) |
data..campaigns..geoCities |
array |
GEO Targeting: cities list |
data..campaigns..geoCitiesIsInclude |
boolean |
GEO Targeting: cities list type (true: whitelist, false: blacklist) |
data..campaigns..contentCategories |
array |
Targeting: IAB Categories list |
data..campaigns..contentCategoriesIsInclude |
boolean |
Targeting: IAB Categories list type (true: whitelist, false: blacklist) |
data..campaigns..userAgeMin |
integer |
Targeting: Age range from |
data..campaigns..userAgeMax |
integer |
Targeting: Age range to |
data..campaigns..connectionTypes.* |
string |
Connection type (wifi, ethernet, cellular_all, cellular_3g, cellular_4g, cellular_5g) |
data..campaigns..clickedInventoryCategories |
array |
Сlicked Inventory Categories |
data..campaigns..deviceCarrier |
array |
Targeting: List of network operators. |
data..campaigns..deviceCarrierIsInclude |
boolean |
Targeting: List of network operators type (true: whitelist, false: blacklist) |
data..campaigns..OS |
array |
Targeting: The operating system of user's device |
data..campaigns..OSIsInclude |
boolean |
Targeting: The operating system of user's device list type (true: whitelist, false: blacklist) |
data..campaigns..browser |
array |
Targeting: The user's browsers list |
data..campaigns..browserIsInclude |
boolean |
Targeting: The user's browsers list type (true: whitelist, false: blacklist) |
data..campaigns..deviceLanguage |
array |
Targeting: The languages of user's browser |
data..campaigns..deviceLanguageIsInclude |
boolean |
Targeting: The languages of user's browser list type (true: whitelist, false: blacklist) |
data..campaigns..spentDailyLimit |
integer |
Daily spent limit |
data..campaigns..spentTotalLimit |
integer |
Total spent limit |
data..campaigns..impressionsDailyLimit |
integer |
Daily impressions limit |
data..campaigns..impressionsTotalLimit |
integer |
Total impressions limit |
data..campaigns..clicksDailyLimit |
integer |
Daily clicks limit |
data..campaigns..clicksTotalLimit |
integer |
Total clicks limit |
data..campaigns..budgetUse |
integer |
Distribution: pacer, fast pacer - Evenly distribution fast - ASAP distribution |
data..campaigns..allSources |
boolean |
Inventory: Use all SSP endpoints |
data..campaigns..cpm |
float |
cpm |
data..campaigns..adaptiveCpm |
boolean |
adaptiveCpm |
data..campaigns..useCpm |
boolean |
use cpm |
data..campaigns..googleAnalyticsTrackingCode |
string |
Google Analytics tracking code - PUSH Campaigns |
data..campaigns..dynamicTargeting |
array |
SmartCPC: Dynamic targeting - only for CPC Pricing model |
data..campaigns..subscriptionAge |
array |
Subscription Age - only for CPC Pricing model |
data..campaigns..frequencyType |
string |
Frequency Type (user, ip).Required if frequency is on. |
data..campaigns..frequency |
boolean |
Frequency on/off. |
data..campaigns..frequencyCap |
integer |
Show ads no more than "Frequency Cap" times in "Frequency Period".Required if frequency is on. |
data..campaigns..frequencyPeriod |
integer |
Frequency Period (min-1,max-3). Required if frequency is on. |
data..campaigns..extendedStatus |
string |
Campaign extended status |
data..campaigns..createdAt |
datetime |
Date of creation |
data..campaigns..updatedAt |
datetime |
Date of last modification |
data..campaigns..deletedAt |
datetime |
Date of deletion |
data..campaigns..counters.bidResDailyCounter |
integer |
Bid daily counter |
data..campaigns..counters.winsDailyCounter |
integer |
Wins daily counter |
data..campaigns..counters.conversionDailyCounter |
integer |
Conversion daily counter |
data..campaigns..counters.clicksDailyCounter |
integer |
Click daily counter |
data..campaigns..counters.impressionsTotalCounter |
integer |
Impressions total counter |
data..campaigns..counters.impressionsDailyCounter |
integer |
Impressions daily counter |
data..campaigns..counters.winRate |
integer |
Winrate counter |
data..campaigns..counters.spentDailyCounter |
integer |
Spent daily counter |
data..campaigns..counters.spentTotalCounter |
integer |
Spent total counter |
data..campaigns..pretarget |
int |
pretarget |
data..campaigns..pretargets |
array |
pretargets |
data..campaigns..audiences |
array |
audiences |
meta.pagination.total |
integer |
Pagination: total items count |
meta.pagination.count |
integer |
Pagination: page items count |
meta.pagination.per_page |
integer |
Pagination: items per page |
meta.pagination.current_page |
integer |
Pagination: current page number |
meta.pagination.total_pages |
integer |
Pagination: total pages count |
meta.pagination.links |
string |
Pagination: url links |
5.6.4. HTTP Response
HTTP/1.0 200 OK
Content-type: application/json
Access-control-allow-origin: *
{
"data": [
{
"id": 11,
"email": null,
"firstName": "Dylan",
"lastName": "Treutel",
"balance": null,
"bidResTotalCounter": null,
"bidResDailyCounter": null,
"winsTotalCounter": null,
"winsDailyCounter": null,
"impressionsTotalCounter": null,
"impressionsDailyCounter": null,
"clicksTotalCounter": null,
"clicksDailyCounter": null,
"spentDailyLimit": "543",
"spentDailyCounter": null,
"spentTotalLimit": "8035",
"spentTotalCounter": null,
"impressionsDailyLimit": "449789",
"impressionsTotalLimit": "1315623",
"campaigns": [
{
"id": 1,
"userId": 11,
"isActive": true,
"isRunning": false,
"type": "audio",
"name": "voluptas",
"isRewarded": false,
"isDesktopWeb": true,
"isMobileApp": true,
"isMobileWeb": false,
"isSmartphone": false,
"isTablet": true,
"isCTV": false,
"isDOOH": false,
"aDomain": "vonrueden.com",
"dateStart": "2025-01-08",
"dateEnd": "2026-06-06",
"geoCountries": [],
"geoCountriesIsInclude": true,
"geoRegions": [],
"geoRegionsIsInclude": true,
"geoCities": [],
"geoCitiesIsInclude": true,
"contentCategories": [],
"contentCategoriesIsInclude": true,
"userAgeMin": 0,
"userAgeMax": 0,
"connectionTypes": [
"wifi"
],
"clickedInventoryCategories": [],
"deviceCarrier": [],
"deviceCarrierIsInclude": true,
"OS": [],
"OSIsInclude": true,
"browser": [],
"browserIsInclude": true,
"deviceLanguage": [],
"deviceLanguageIsInclude": true,
"spentDailyLimit": 277,
"spentTotalLimit": 2846,
"impressionsDailyLimit": 229517,
"impressionsTotalLimit": 618249,
"clicksDailyLimit": 0,
"clicksTotalLimit": 0,
"budgetUse": "fast",
"allSources": true,
"cpm": 0,
"adaptiveCpm": false,
"useCpm": false,
"googleAnalyticsTrackingCode": null,
"dynamicTargeting": [],
"subscriptionAge": [],
"frequencyType": "user",
"frequency": 0,
"frequencyCap": 1,
"frequencyPeriod": 1,
"extendedStatus": "Low Balance",
"createdAt": "2026-02-20",
"updatedAt": "2026-02-20",
"deletedAt": null,
"counters": {
"bidResDailyCounter": 0,
"winsDailyCounter": 0,
"conversionDailyCounter": 0,
"clicksDailyCounter": null,
"impressionsTotalCounter": 0,
"impressionsDailyCounter": 0,
"winRate": 0,
"spentDailyCounter": 0,
"spentTotalCounter": 0
},
"pretarget": null,
"pretargets": [],
"audiences": []
},
{
"id": 2,
"userId": 11,
"isActive": false,
"isRunning": false,
"type": "banner",
"name": "accusamus",
"isRewarded": false,
"isDesktopWeb": false,
"isMobileApp": true,
"isMobileWeb": false,
"isSmartphone": false,
"isTablet": true,
"isCTV": true,
"isDOOH": false,
"aDomain": "rogahn.com",
"dateStart": "2025-06-19",
"dateEnd": "2027-01-25",
"geoCountries": [],
"geoCountriesIsInclude": true,
"geoRegions": [],
"geoRegionsIsInclude": true,
"geoCities": [],
"geoCitiesIsInclude": true,
"contentCategories": [],
"contentCategoriesIsInclude": true,
"userAgeMin": 0,
"userAgeMax": 0,
"connectionTypes": [
"wifi"
],
"clickedInventoryCategories": [],
"deviceCarrier": [],
"deviceCarrierIsInclude": true,
"OS": [],
"OSIsInclude": true,
"browser": [],
"browserIsInclude": true,
"deviceLanguage": [],
"deviceLanguageIsInclude": true,
"spentDailyLimit": 266,
"spentTotalLimit": 5189,
"impressionsDailyLimit": 220272,
"impressionsTotalLimit": 697374,
"clicksDailyLimit": 0,
"clicksTotalLimit": 0,
"budgetUse": "fast",
"allSources": true,
"cpm": 0,
"adaptiveCpm": false,
"useCpm": false,
"googleAnalyticsTrackingCode": null,
"dynamicTargeting": [],
"subscriptionAge": [],
"frequencyType": "user",
"frequency": 0,
"frequencyCap": 1,
"frequencyPeriod": 1,
"extendedStatus": "Campaign is not active",
"createdAt": "2026-02-20",
"updatedAt": "2026-02-20",
"deletedAt": null,
"counters": {
"bidResDailyCounter": 0,
"winsDailyCounter": 0,
"conversionDailyCounter": 0,
"clicksDailyCounter": null,
"impressionsTotalCounter": 0,
"impressionsDailyCounter": 0,
"winRate": 0,
"spentDailyCounter": 0,
"spentTotalCounter": 0
},
"pretarget": null,
"pretargets": [],
"audiences": []
}
]
}
],
"meta": {
"pagination": {
"total": 1,
"count": 1,
"per_page": 15,
"current_page": 1,
"total_pages": 1,
"links": []
}
}
}
6. Upload media
6.1. Store Image
A `POST` request will upload image. Use `multipart/form-data` with `media_assets[]` file(s) (not JSON/base64).
6.1.1. Request Body
| Path | Type | Description | Required |
|---|---|---|---|
media_assets |
file |
Array of files to upload |
+ |
6.1.2. HTTP Request
URL
POST api/media-asset/upload/image HTTP/1.1
HEADER
Accept: application/json Content-type: application/json Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwOi8vbG9jYWxob3N0Ojk5MjMiLCJpYXQiOjE3NzE1NzczNzYsImV4cCI6MTc3MTU4MDk3NiwibmJmIjoxNzcxNTc3Mzc2LCJqdGkiOiJlMnJTWHRqRVU5NUNFNGpJIiwic3ViIjoiMTA1IiwicHJ2IjoiMjNiZDVjODk0OWY2MDBhZGIzOWU3MDFjNDAwODcyZGI3YTU5NzZmNyJ9.XzpeqamKomyJUYLDnokm543k1x4m4lAyu4tR9kudVeY
DATA
{
"media_assets": [
<Binary file>
]
}
6.1.3. Curl request
$ curl 'https://dsp-api.smartyads.com/api/media-asset/upload/image' -i -X POST \
-H 'Accept: application/json' \
-H 'Content-type: application/json' \
-H 'Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwOi8vbG9jYWxob3N0Ojk5MjMiLCJpYXQiOjE3NzE1NzczNzYsImV4cCI6MTc3MTU4MDk3NiwibmJmIjoxNzcxNTc3Mzc2LCJqdGkiOiJlMnJTWHRqRVU5NUNFNGpJIiwic3ViIjoiMTA1IiwicHJ2IjoiMjNiZDVjODk0OWY2MDBhZGIzOWU3MDFjNDAwODcyZGI3YTU5NzZmNyJ9.XzpeqamKomyJUYLDnokm543k1x4m4lAyu4tR9kudVeY' \
-d '{
"media_assets": [
<Binary file>
]
}'
6.1.4. Response Body
| Path | Type | Description |
|---|---|---|
message |
string |
Result message |
data.*.id |
integer |
Media id |
data.*.userId |
integer |
User Id |
data.*.mediaType |
string |
Media type (html, image, video) |
data.*.originName |
string |
Original file name |
data.*.name |
string |
Uploaded file name |
data.*.extension |
string |
Uploaded file extension |
data.*.url |
string |
Uploaded file url |
data.*.width |
integer |
Uploaded file image width |
data.*.height |
integer |
Uploaded file image height |
data.*.weight |
integer |
Uploaded file size kB |
data.*.createdAt |
datetime |
Date of creation |
data.*.updatedAt |
datetime |
Date of last modification |
6.1.5. HTTP Response
HTTP/1.0 200 OK
Content-type: application/json
Access-control-allow-origin: *
X-ratelimit-limit: 500
X-ratelimit-remaining: 499
{
"message": "MediaAsset created.",
"data": [
{
"id": 20,
"userId": 105,
"mediaType": "image",
"originName": "test-image.png",
"name": "test-image.png",
"extension": "png",
"url": "\/storage\/test-image.png",
"width": 10,
"height": 10,
"weight": 91,
"createdAt": "2026-02-20 08:49:36",
"updatedAt": "2026-02-20 08:49:36"
}
]
}
6.2. Store video
A `POST` request will upload video. Use `multipart/form-data` with `media_assets[]` file(s) (not JSON/base64).
6.2.1. Request Body
| Path | Type | Description | Required |
|---|---|---|---|
media_assets |
file |
Array of files to upload |
+ |
6.2.2. HTTP Request
URL
POST api/media-asset/upload/video HTTP/1.1
HEADER
Accept: application/json Content-type: application/json Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwOi8vbG9jYWxob3N0Ojk5MjMiLCJpYXQiOjE3NzE1NzczNzYsImV4cCI6MTc3MTU4MDk3NiwibmJmIjoxNzcxNTc3Mzc2LCJqdGkiOiJxSk9WNWxZTEZqdkI2THlpIiwic3ViIjoiMTA2IiwicHJ2IjoiMjNiZDVjODk0OWY2MDBhZGIzOWU3MDFjNDAwODcyZGI3YTU5NzZmNyJ9.xD7uHyNWluW_0xi9BByFNdvk7Me0ZoaBcuFguGMbcKw
DATA
{
"media_assets": [
<Binary file>
]
}
6.2.3. Curl request
$ curl 'https://dsp-api.smartyads.com/api/media-asset/upload/video' -i -X POST \
-H 'Accept: application/json' \
-H 'Content-type: application/json' \
-H 'Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwOi8vbG9jYWxob3N0Ojk5MjMiLCJpYXQiOjE3NzE1NzczNzYsImV4cCI6MTc3MTU4MDk3NiwibmJmIjoxNzcxNTc3Mzc2LCJqdGkiOiJxSk9WNWxZTEZqdkI2THlpIiwic3ViIjoiMTA2IiwicHJ2IjoiMjNiZDVjODk0OWY2MDBhZGIzOWU3MDFjNDAwODcyZGI3YTU5NzZmNyJ9.xD7uHyNWluW_0xi9BByFNdvk7Me0ZoaBcuFguGMbcKw' \
-d '{
"media_assets": [
<Binary file>
]
}'
6.2.4. Response Body
| Path | Type | Description |
|---|---|---|
message |
string |
Result message |
data.*.id |
integer |
Media id |
data.*.userId |
integer |
User Id |
data.*.mediaType |
string |
Media type (html, image, video) |
data.*.originName |
string |
Original file name |
data.*.name |
string |
Uploaded file name |
data.*.extension |
string |
Uploaded file extension |
data.*.url |
string |
Uploaded file url |
data.*.width |
integer |
Uploaded file image width |
data.*.height |
integer |
Uploaded file image height |
data.*.weight |
integer |
Uploaded file size kB |
data.*.mimeType |
string |
Video mime type |
data.*.bitrate |
integer |
Video bitrate |
data.*.duration |
integer |
Video duration (in seconds) |
data.*.durationTime |
string |
Video duration (in text format) |
data.*.playtime |
integer |
Video playtime |
data.*.createdAt |
datetime |
Date of creation |
data.*.updatedAt |
datetime |
Date of last modification |
6.2.5. HTTP Response
HTTP/1.0 200 OK
Content-type: application/json
Access-control-allow-origin: *
X-ratelimit-limit: 500
X-ratelimit-remaining: 499
{
"message": "MediaAsset created.",
"data": [
{
"id": 21,
"userId": 106,
"mediaType": "video",
"originName": "test-video.mp4",
"name": "test-video.mp4",
"extension": "mp4",
"url": "\/storage\/test-video.mp4",
"width": 320,
"height": 240,
"weight": 5312,
"mimeType": "video\/quicktime",
"bitrate": 201493,
"duration": 0,
"durationTime": "00:00:00",
"playtime": "00:00:00",
"createdAt": "2026-02-20 08:49:36",
"updatedAt": "2026-02-20 08:49:36"
}
]
}
6.3. Store HTML
A `POST` request will upload HTML archive. Use `multipart/form-data` with `media_assets[]` file(s) (not JSON/base64).
6.3.1. Request Body
| Path | Type | Description | Required |
|---|---|---|---|
media_assets |
file |
Array of files to upload |
+ |
6.3.2. HTTP Request
URL
POST api/media-asset/upload/html HTTP/1.1
HEADER
Accept: application/json Content-type: application/json Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwOi8vbG9jYWxob3N0Ojk5MjMiLCJpYXQiOjE3NzE1NzczNzYsImV4cCI6MTc3MTU4MDk3NiwibmJmIjoxNzcxNTc3Mzc2LCJqdGkiOiJ5bDN0ZG1KYkthaFpFWUs3Iiwic3ViIjoiMTA3IiwicHJ2IjoiMjNiZDVjODk0OWY2MDBhZGIzOWU3MDFjNDAwODcyZGI3YTU5NzZmNyJ9.56t6bBPvokVVsEKC5w0HVbzK2oYJ4VBBT779n8oPO00
DATA
{
"media_assets": [
<Binary file>
]
}
6.3.3. Curl request
$ curl 'https://dsp-api.smartyads.com/api/media-asset/upload/html' -i -X POST \
-H 'Accept: application/json' \
-H 'Content-type: application/json' \
-H 'Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwOi8vbG9jYWxob3N0Ojk5MjMiLCJpYXQiOjE3NzE1NzczNzYsImV4cCI6MTc3MTU4MDk3NiwibmJmIjoxNzcxNTc3Mzc2LCJqdGkiOiJ5bDN0ZG1KYkthaFpFWUs3Iiwic3ViIjoiMTA3IiwicHJ2IjoiMjNiZDVjODk0OWY2MDBhZGIzOWU3MDFjNDAwODcyZGI3YTU5NzZmNyJ9.56t6bBPvokVVsEKC5w0HVbzK2oYJ4VBBT779n8oPO00' \
-d '{
"media_assets": [
<Binary file>
]
}'
6.3.4. Response Body
| Path | Type | Description |
|---|---|---|
message |
string |
Result message |
data.*.id |
integer |
Media id |
data.*.userId |
integer |
User Id |
data.*.mediaType |
string |
Media type (html, image, video) |
data.*.originName |
string |
Original file name |
data.*.name |
string |
Uploaded file name |
data.*.extension |
string |
Uploaded file extension |
data.*.url |
string |
Uploaded file url |
data.*.width |
integer |
Uploaded file image width |
data.*.height |
integer |
Uploaded file image height |
data.*.weight |
integer |
Uploaded file size kB |
data.*.createdAt |
datetime |
Date of creation |
data.*.updatedAt |
datetime |
Date of last modification |
6.3.5. HTTP Response
HTTP/1.0 200 OK
Content-type: application/json
Access-control-allow-origin: *
X-ratelimit-limit: 500
X-ratelimit-remaining: 499
{
"message": "MediaAsset created.",
"data": [
{
"id": 22,
"userId": 107,
"mediaType": "html",
"originName": "test-html.zip",
"name": "TEST\/index.html",
"extension": "zip",
"url": "\/storage\/TEST\/index.html",
"width": 0,
"height": 0,
"weight": 0,
"createdAt": "2026-02-20 08:49:36",
"updatedAt": "2026-02-20 08:49:36"
}
]
}
6.4. Store filter list
A `POST` request will upload video
6.4.1. HTTP Request
URL
POST api/parsefile HTTP/1.1
HEADER
Accept: application/json Content-type: application/json Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwOi8vbG9jYWxob3N0Ojk5MjMiLCJpYXQiOjE3NzE1NzczNzYsImV4cCI6MTc3MTU4MDk3NiwibmJmIjoxNzcxNTc3Mzc2LCJqdGkiOiJRSlpnd0JlRktnM1Nsb2RSIiwic3ViIjoiMTA4IiwicHJ2IjoiMjNiZDVjODk0OWY2MDBhZGIzOWU3MDFjNDAwODcyZGI3YTU5NzZmNyJ9.1XdZbC6AXmgD07ajREAJLK5LdU8gLWkNJ3ChHembofk
DATA
{
"file": <Binary file>
}
6.4.2. Curl request
$ curl 'https://dsp-api.smartyads.com/api/parsefile' -i -X POST \
-H 'Accept: application/json' \
-H 'Content-type: application/json' \
-H 'Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwOi8vbG9jYWxob3N0Ojk5MjMiLCJpYXQiOjE3NzE1NzczNzYsImV4cCI6MTc3MTU4MDk3NiwibmJmIjoxNzcxNTc3Mzc2LCJqdGkiOiJRSlpnd0JlRktnM1Nsb2RSIiwic3ViIjoiMTA4IiwicHJ2IjoiMjNiZDVjODk0OWY2MDBhZGIzOWU3MDFjNDAwODcyZGI3YTU5NzZmNyJ9.1XdZbC6AXmgD07ajREAJLK5LdU8gLWkNJ3ChHembofk' \
-d '{
"file": <Binary file>
}'
6.4.3. Response Body
| Path | Type | Description |
|---|---|---|
message |
string |
Result message |
items.* |
string |
List item (domain, bundle, IP, etc.) |
fileName |
string |
File name |
countItems |
integer |
Count items |
6.4.4. HTTP Response
HTTP/1.0 200 OK
Content-type: application/json
Access-control-allow-origin: *
X-ratelimit-limit: 500
X-ratelimit-remaining: 499
{
"message": "success",
"items": [
"test.com"
],
"fileName": "1771577376_test-filter.csv",
"countItems": 0
}
7. Assign Creatives to Campaigns
7.1. Get list of Creatives assigned to Campaign
A `GET` request with Campaign Id in url will get list of Creatives assigned to Campaign
7.1.1. HTTP Request
URL
GET api/campaigns/26/creatives HTTP/1.1
HEADER
Accept: application/json Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwOi8vbG9jYWxob3N0Ojk5MjMiLCJpYXQiOjE3NzE1NzczNjgsImV4cCI6MTc3MTU4MDk2OCwibmJmIjoxNzcxNTc3MzY4LCJqdGkiOiJEeDFnMTB5ZGZ0dDFBeThNIiwic3ViIjoiNDgiLCJwcnYiOiIyM2JkNWM4OTQ5ZjYwMGFkYjM5ZTcwMWM0MDA4NzJkYjdhNTk3NmY3In0.NCFvYvZ4Bhrr9jfCbxHO-5WfPjH6f3l69nff7O7P7sY
DATA
{}
7.1.2. Curl request
$ curl 'https://dsp-api.smartyads.com/api/campaigns/26/creatives' -i -X GET \
-H 'Accept: application/json' \
-H 'Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwOi8vbG9jYWxob3N0Ojk5MjMiLCJpYXQiOjE3NzE1NzczNjgsImV4cCI6MTc3MTU4MDk2OCwibmJmIjoxNzcxNTc3MzY4LCJqdGkiOiJEeDFnMTB5ZGZ0dDFBeThNIiwic3ViIjoiNDgiLCJwcnYiOiIyM2JkNWM4OTQ5ZjYwMGFkYjM5ZTcwMWM0MDA4NzJkYjdhNTk3NmY3In0.NCFvYvZ4Bhrr9jfCbxHO-5WfPjH6f3l69nff7O7P7sY' \
-d '{}'
7.1.3. Response Body
| Path | Type | Description |
|---|---|---|
data.*.id |
integer |
Creative Id |
data.*.userId |
integer |
User Id |
data.*.isActive |
boolean |
Creative status |
data.*.approved |
string |
Creative approval status (approved, pending, disapproved) |
data.*.creativeType |
string |
Creative type: banner, native, video, audio |
data.*.name |
string |
Creative name |
data.*.frequencyType |
string |
Identify the user to limit the number of the ad shows for the specific user (user, ip). Required if frequency is on. |
data.*.frequency |
string |
Frequency on/off |
data.*.frequencyCap |
integer |
Show ads no more than "Frequency Cap" times in "Frequency Period". Required if frequency is on. |
data.*.frequencyPeriod |
integer |
Frequency period in days (min-1,max-3). Required if frequency is on. |
data.*.bidPrice |
float |
CPM |
data.*.autoresize |
boolean |
autoresize |
data.*.adaptiveCpm |
bool |
adaptiveCpm |
data.*.size |
string |
Image width and height |
data.*.weight |
string |
File size |
data.*.thumbnail |
string |
Thumbnail URL |
data.*.folderId |
string |
Folder Id |
data.*.createdAt |
datetime |
Date of creation |
data.*.updatedAt |
datetime |
Date of last modification |
data.*.pendingAt |
datetime |
Date of pending start |
data.*.deletedAt |
datetime |
Date of deletion |
data.*.status |
string |
Status |
meta.pagination.total |
integer |
Pagination: total items count |
meta.pagination.count |
integer |
Pagination: page items count |
meta.pagination.per_page |
integer |
Pagination: items per page |
meta.pagination.current_page |
integer |
Pagination: current page number |
meta.pagination.total_pages |
integer |
Pagination: total pages count |
meta.pagination.links |
object |
Pagination links |
7.1.4. HTTP Response
HTTP/1.0 200 OK
Content-type: application/json
Access-control-allow-origin: *
X-ratelimit-limit: 500
X-ratelimit-remaining: 499
{
"data": [
{
"id": 1,
"userId": 48,
"isActive": 1,
"approved": "pending",
"creativeType": "banner",
"name": "Test Creative #1",
"frequencyType": "ip",
"frequency": 0,
"frequencyCap": 9,
"frequencyPeriod": 1,
"bidPrice": "0.64",
"autoresize": 0,
"adaptiveCpm": false,
"size": "410 x 312",
"weight": "0.24 MB",
"thumbnail": null,
"folderId": null,
"createdAt": "2026-02-20 08:49:28",
"updatedAt": "2026-02-20 08:49:28",
"pendingAt": null,
"deletedAt": null,
"media": {
"id": 1,
"userId": 48,
"mediaType": "image",
"originName": "richmedia.zip",
"name": "48_bab41c6fd2ea118dc061a1ab877c1e6a\/index.html",
"extension": "zip",
"url": "http:\/\/www.blick.net\/non-eveniet-doloremque-mollitia-iure-iusto.html\/48_bab41c6fd2ea118dc061a1ab877c1e6a\/index.html",
"width": 360,
"height": 340,
"weight": 256176
},
"relation": {
"banner": {
"apiFramework": 0,
"admBody": "<a target=\"_blank\" href=\"http:\/\/friesen.com\/ut-officia-voluptate-neque-et\" ><img src=\"http:\/\/www.swift.org\/ea-velit-sint-vitae-laborum.html\/10.jpg\"\/><\/a>",
"bannerType": "banner",
"clickUrl": "http:\/\/wisozk.biz\/ab-delectus-et-hic-numquam-sit",
"width": 410,
"height": 312,
"childrenCreative": null,
"statusChildrenCreative": [],
"main": 1
}
},
"status": ""
}
],
"meta": {
"pagination": {
"total": 1,
"count": 1,
"per_page": 1000,
"current_page": 1,
"total_pages": 1,
"links": []
}
}
}
7.2. Replace Creatives assigned to Campaign
A `POST` request with Campaign Id in url will replace Creatives assigned to Campaign
7.2.1. Request Body
| Path | Type | Description | Required |
|---|---|---|---|
ids.* |
integer |
Creative id |
+ |
7.2.2. HTTP Request
URL
POST api/campaigns/27/creatives HTTP/1.1
HEADER
Accept: application/json Content-type: application/json Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwOi8vbG9jYWxob3N0Ojk5MjMiLCJpYXQiOjE3NzE1NzczNjgsImV4cCI6MTc3MTU4MDk2OCwibmJmIjoxNzcxNTc3MzY4LCJqdGkiOiIwbk1ud3NSQVB3QTVBVm9xIiwic3ViIjoiNDkiLCJwcnYiOiIyM2JkNWM4OTQ5ZjYwMGFkYjM5ZTcwMWM0MDA4NzJkYjdhNTk3NmY3In0.pakrDZo6XDLs5zVzE6ZY6vvpIDmO81mHs8G7nvysK0w
DATA
{
"ids": [
2,
3
]
}
7.2.3. Curl request
$ curl 'https://dsp-api.smartyads.com/api/campaigns/27/creatives' -i -X POST \
-H 'Accept: application/json' \
-H 'Content-type: application/json' \
-H 'Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwOi8vbG9jYWxob3N0Ojk5MjMiLCJpYXQiOjE3NzE1NzczNjgsImV4cCI6MTc3MTU4MDk2OCwibmJmIjoxNzcxNTc3MzY4LCJqdGkiOiIwbk1ud3NSQVB3QTVBVm9xIiwic3ViIjoiNDkiLCJwcnYiOiIyM2JkNWM4OTQ5ZjYwMGFkYjM5ZTcwMWM0MDA4NzJkYjdhNTk3NmY3In0.pakrDZo6XDLs5zVzE6ZY6vvpIDmO81mHs8G7nvysK0w' \
-d '{
"ids": [
2,
3
]
}'
7.2.4. Response Body
| Path | Type | Description |
|---|---|---|
message |
string |
Result message |
7.2.5. HTTP Response
HTTP/1.0 200 OK
Content-type: application/json
Access-control-allow-origin: *
X-ratelimit-limit: 500
X-ratelimit-remaining: 499
{
"message": "Replaced."
}
7.3. Append Creatives assigned to Campaign
A `PATCH` request with Campaign Id in url will append Creatives assigned to Campaign
7.3.1. Request Body
| Path | Type | Description | Required |
|---|---|---|---|
ids.* |
integer |
Creative id |
+ |
7.3.2. HTTP Request
URL
PATCH api/campaigns/28/creatives HTTP/1.1
HEADER
Accept: application/json Content-type: application/json Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwOi8vbG9jYWxob3N0Ojk5MjMiLCJpYXQiOjE3NzE1NzczNjgsImV4cCI6MTc3MTU4MDk2OCwibmJmIjoxNzcxNTc3MzY4LCJqdGkiOiJMWVN5eFNLSTEzYXNPSTZFIiwic3ViIjoiNTAiLCJwcnYiOiIyM2JkNWM4OTQ5ZjYwMGFkYjM5ZTcwMWM0MDA4NzJkYjdhNTk3NmY3In0.69vH0bdFME3dBS_cRbf5FJRqQZNHK06kMuPDywDBUuA
DATA
{
"ids": [
5
]
}
7.3.3. Curl request
$ curl 'https://dsp-api.smartyads.com/api/campaigns/28/creatives' -i -X PATCH \
-H 'Accept: application/json' \
-H 'Content-type: application/json' \
-H 'Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwOi8vbG9jYWxob3N0Ojk5MjMiLCJpYXQiOjE3NzE1NzczNjgsImV4cCI6MTc3MTU4MDk2OCwibmJmIjoxNzcxNTc3MzY4LCJqdGkiOiJMWVN5eFNLSTEzYXNPSTZFIiwic3ViIjoiNTAiLCJwcnYiOiIyM2JkNWM4OTQ5ZjYwMGFkYjM5ZTcwMWM0MDA4NzJkYjdhNTk3NmY3In0.69vH0bdFME3dBS_cRbf5FJRqQZNHK06kMuPDywDBUuA' \
-d '{
"ids": [
5
]
}'
7.3.4. Response Body
| Path | Type | Description |
|---|---|---|
message |
string |
Result message |
7.3.5. HTTP Response
HTTP/1.0 200 OK
Content-type: application/json
Access-control-allow-origin: *
X-ratelimit-limit: 500
X-ratelimit-remaining: 499
{
"message": "Appended."
}
7.4. Remove Creatives assigned to Campaign
A `DELETE` request with Campaign Id in url will remove Creatives assigned to Campaign
7.4.1. Request Body
| Path | Type | Description | Required |
|---|---|---|---|
ids.* |
integer |
Creative id |
+ |
7.4.2. HTTP Request
URL
DELETE api/campaigns/29/creatives HTTP/1.1
HEADER
Accept: application/json Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwOi8vbG9jYWxob3N0Ojk5MjMiLCJpYXQiOjE3NzE1NzczNjksImV4cCI6MTc3MTU4MDk2OSwibmJmIjoxNzcxNTc3MzY5LCJqdGkiOiJUSWpJZGVENWRDVEtBQ3ZyIiwic3ViIjoiNTEiLCJwcnYiOiIyM2JkNWM4OTQ5ZjYwMGFkYjM5ZTcwMWM0MDA4NzJkYjdhNTk3NmY3In0.XNrfbHQYfCBPHxKaWQpD7aI6CIBANFk1ybpOU9-57Bc Content-type: application/x-www-form-urlencoded
DATA
{
"ids": [
7
]
}
7.4.3. Curl request
$ curl 'https://dsp-api.smartyads.com/api/campaigns/29/creatives' -i -X DELETE \
-H 'Accept: application/json' \
-H 'Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwOi8vbG9jYWxob3N0Ojk5MjMiLCJpYXQiOjE3NzE1NzczNjksImV4cCI6MTc3MTU4MDk2OSwibmJmIjoxNzcxNTc3MzY5LCJqdGkiOiJUSWpJZGVENWRDVEtBQ3ZyIiwic3ViIjoiNTEiLCJwcnYiOiIyM2JkNWM4OTQ5ZjYwMGFkYjM5ZTcwMWM0MDA4NzJkYjdhNTk3NmY3In0.XNrfbHQYfCBPHxKaWQpD7aI6CIBANFk1ybpOU9-57Bc' \
-H 'Content-type: application/x-www-form-urlencoded' \
-d '{
"ids": [
7
]
}'
7.4.4. Response Body
| Path | Type | Description |
|---|---|---|
message |
string |
Result message |
deleted |
boolean |
Deleting result |
7.4.5. HTTP Response
HTTP/1.0 200 OK
Content-type: application/json
Access-control-allow-origin: *
X-ratelimit-limit: 500
X-ratelimit-remaining: 499
{
"message": "Deleted.",
"deleted": true
}
8. Filterlists
8.1. Filter lists
A `GET` request will return a filter lists
8.1.1. HTTP Request
URL
GET api/filterlist HTTP/1.1
HEADER
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
DATA
{}
8.1.2. Curl request
$ curl 'https://dsp-api.smartyads.com/api/filterlist' -i -X GET \
-H 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8' \
-d '{}'
8.1.3. Response Body
| Path | Type | Description |
|---|---|---|
data.*.id |
integer |
List Id |
data.*.userId |
integer |
User Id |
data.*.isInclude |
boolean |
White/Black list |
data.*.title |
string |
List title |
data.*.type |
string |
Filter list type: domain, apps, bundles, deviceIfas, publishers, ipAdresses, siteAndAppsIds, urls, tagIds |
data.*.createdAt |
datetime |
Date of creation |
data.*.updatedAt |
datetime |
Date of last modification |
meta.pagination.total |
integer |
Pagination: total items count |
meta.pagination.count |
integer |
Pagination: page items count |
meta.pagination.per_page |
integer |
Pagination: items per page |
meta.pagination.current_page |
integer |
Pagination: current page number |
meta.pagination.total_pages |
integer |
Pagination: total pages count |
meta.pagination.links |
array |
Pagination: array links |
8.1.4. HTTP Response
HTTP/1.0 200 OK
Content-type: application/json
{
"data": [
{
"id": 1,
"userId": 10,
"isInclude": true,
"title": "Test Filter list #1",
"type": "domain",
"createdAt": "2026-02-20 08:49:33",
"updatedAt": "2026-02-20 08:49:33"
},
{
"id": 2,
"userId": 10,
"isInclude": false,
"title": "Test Filter list #2",
"type": "ipAdresses",
"createdAt": "2026-02-20 08:49:33",
"updatedAt": "2026-02-20 08:49:33"
}
],
"meta": {
"pagination": {
"total": 2,
"count": 2,
"per_page": 15,
"current_page": 1,
"total_pages": 1,
"links": []
}
}
}
8.2. Get filter lists by ID
A `GET` request will return a filter list by ID
8.2.1. HTTP Request
URL
GET api/filterlist/123 HTTP/1.1
HEADER
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
DATA
{}
8.2.2. Curl request
$ curl 'https://dsp-api.smartyads.com/api/filterlist/123' -i -X GET \
-H 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8' \
-d '{}'
8.2.3. Response Body
| Path | Type | Description |
|---|---|---|
data.id |
integer |
List Id |
data.userId |
integer |
User Id |
data.isInclude |
boolean |
White/Black list |
data.title |
string |
List title |
data.items.* |
string |
List item (domain, bundle, IP, etc.) |
data.type |
string |
Filter list type: domain, apps, bundles, deviceIfas, publishers, ipAdresses, siteAndAppsIds, urls, tagIds |
data.createdAt |
datetime |
Date of creation |
data.updatedAt |
datetime |
Date of last modification |
8.2.4. HTTP Response
HTTP/1.0 200 OK
Content-type: application/json
{
"data": {
"id": 123,
"userId": 10,
"isInclude": true,
"title": "Test Filter list #4",
"items": [
"a",
"b",
"c"
],
"type": "domain",
"createdAt": "2026-02-20 08:49:34",
"updatedAt": "2026-02-20 08:49:34"
}
}
8.3. Create a filter lists
A `POST` request will set new filter list
8.3.1. Request Body
| Path | Type | Description | Required |
|---|---|---|---|
title |
string |
List title |
+ |
type |
string |
Filter list type: domain, apps, bundles, deviceIfas, publishers, ipAdresses, siteAndAppsIds, urls, tagIds |
+ |
isInclude |
bool |
white/black |
+ |
items.* |
string |
List item (domain, bundle, IP, etc.) |
|
fileName |
string |
null |
File name from upload file - Store filter list |
8.3.2. HTTP Request
URL
POST api/filterlist HTTP/1.1
HEADER
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Content-type: application/x-www-form-urlencoded
DATA
{
"title": "Test Filter list #5",
"type": "ipAdresses",
"isInclude": true,
"items": [
"56.212.169.153",
"163.172.114.93",
"241.45.191.186",
"212.203.138.120",
"134.186.162.17"
],
"fileName": null
}
8.3.3. Curl request
$ curl 'https://dsp-api.smartyads.com/api/filterlist' -i -X POST \
-H 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8' \
-H 'Content-type: application/x-www-form-urlencoded' \
-d '{
"title": "Test Filter list #5",
"type": "ipAdresses",
"isInclude": true,
"items": [
"56.212.169.153",
"163.172.114.93",
"241.45.191.186",
"212.203.138.120",
"134.186.162.17"
],
"fileName": null
}'
8.3.4. Response Body
| Path | Type | Description |
|---|---|---|
message |
string |
message |
data.id |
integer |
List Id |
data.userId |
integer |
User Id |
data.isInclude |
boolean |
White (1)/Black list(0) |
data.listCount |
integer |
list count |
data.title |
string |
List title |
data.type |
string |
Filter list type: domain, apps, bundles, deviceIfas, publishers, ipAdresses, siteAndAppsIds, urls, tagIds |
data.createdAt |
datetime |
Date of creation |
data.updatedAt |
datetime |
Date of last modification |
8.3.5. HTTP Response
HTTP/1.0 200 OK
Content-type: application/json
{
"message": "Created",
"data": {
"id": 321,
"userId": 10,
"isInclude": true,
"listCount": 5,
"title": "Test Filter list #5",
"type": "ipAdresses",
"createdAt": "2026-02-20 08:49:34",
"updatedAt": "2026-02-20 08:49:34"
}
}
8.4. Filter lists update
A `PATCH` request will update filter lists
8.4.1. Request Body
| Path | Type | Description | Required |
|---|---|---|---|
title |
string |
List title |
|
isInclude |
bool |
white/black |
|
items.* |
string |
List item (domain, bundle, IP, etc.) |
|
fileName |
string |
null |
File name from upload file - Store filter list |
8.4.2. HTTP Request
URL
PUT api/filterlist/999 HTTP/1.1
HEADER
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Content-type: application/x-www-form-urlencoded
DATA
{
"title": "Test FilterList #7",
"isInclude": true,
"items": [
"https:\/\/www.casper.net\/fuga-in-occaecati-voluptas-eum",
"https:\/\/shanahan.com\/explicabo-eos-eum-minima-et-nemo.html",
"https:\/\/bruen.info\/placeat-quia-veritatis-autem-ipsam-molestias-voluptatem-pariatur.html"
],
"fileName": null
}
8.4.3. Curl request
$ curl 'https://dsp-api.smartyads.com/api/filterlist/999' -i -X PUT \
-H 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8' \
-H 'Content-type: application/x-www-form-urlencoded' \
-d '{
"title": "Test FilterList #7",
"isInclude": true,
"items": [
"https:\/\/www.casper.net\/fuga-in-occaecati-voluptas-eum",
"https:\/\/shanahan.com\/explicabo-eos-eum-minima-et-nemo.html",
"https:\/\/bruen.info\/placeat-quia-veritatis-autem-ipsam-molestias-voluptatem-pariatur.html"
],
"fileName": null
}'
8.4.4. Response Body
| Path | Type | Description |
|---|---|---|
message |
string |
Result message |
data.id |
integer |
List Id |
data.userId |
integer |
User Id |
data.isInclude |
boolean |
white/black |
data.listCount |
integer |
listCount |
data.title |
string |
List title |
data.type |
string |
Filter list type: domain, apps, bundles, deviceIfas, publishers, ipAdresses, siteAndAppsIds, urls, tagIds |
data.createdAt |
datetime |
Date of creation |
data.updatedAt |
datetime |
Date of last modification |
8.4.5. HTTP Response
HTTP/1.0 200 OK
Content-type: application/json
{
"message": "Updated",
"data": {
"id": 999,
"userId": 10,
"isInclude": true,
"listCount": 3,
"title": "Test FilterList #7",
"type": "urls",
"createdAt": "2026-02-20 08:49:34",
"updatedAt": "2026-02-20 08:49:34"
}
}
8.5. Filter lists delete
A `DELETE` request will delete a filter lists
8.5.1. HTTP Request
URL
DELETE api/filterlist/1001 HTTP/1.1
HEADER
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Content-type: application/x-www-form-urlencoded
DATA
{}
8.5.2. Curl request
$ curl 'https://dsp-api.smartyads.com/api/filterlist/1001' -i -X DELETE \
-H 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8' \
-H 'Content-type: application/x-www-form-urlencoded' \
-d '{}'
8.5.3. Response Body
| Path | Type | Description |
|---|---|---|
message |
string |
Result message |
deleted |
boolean |
is deleted |
8.5.4. HTTP Response
HTTP/1.0 200 OK
Content-type: application/json
{
"message": "Deleted",
"deleted": true
}
9. Assign Filterlists to Campaigns
9.1. Get list of Filter Lists assigned to Campaign
A `GET` request with Campaign Id in url will get list of Filter Lists assigned to Campaign
9.1.1. HTTP Request
URL
GET api/campaigns/34/filterlists HTTP/1.1
HEADER
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
DATA
{}
9.1.2. Curl request
$ curl 'https://dsp-api.smartyads.com/api/campaigns/34/filterlists' -i -X GET \
-H 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8' \
-d '{}'
9.1.3. Response Body
| Path | Type | Description |
|---|---|---|
data.*.filterList.id |
integer |
List Id |
data.*.filterList.title |
string |
List title |
data.*.filterList.items |
array |
List items (strings). May be empty depending on endpoint or pagination mode |
meta.pagination.total |
integer |
Pagination: total items count |
meta.pagination.count |
integer |
Pagination: page items count |
meta.pagination.per_page |
integer |
Pagination: items per page |
meta.pagination.current_page |
integer |
Pagination: current page number |
meta.pagination.total_pages |
integer |
Pagination: total pages count |
meta.pagination.links |
array |
Pagination: array links |
9.1.4. HTTP Response
HTTP/1.0 200 OK
Content-type: application/json
{
"data": [
{
"filterList": {
"id": 1,
"title": "Test Filter list #1",
"items": []
}
},
{
"filterList": {
"id": 2,
"title": "Test Filter list #2",
"items": []
}
},
{
"filterList": {
"id": 3,
"title": "Test Filter list #3",
"items": []
}
}
],
"meta": {
"pagination": {
"total": 3,
"count": 3,
"per_page": 15,
"current_page": 1,
"total_pages": 1,
"links": []
}
}
}
9.2. Replace Filter Lists assigned to Campaign
A `POST` request with Campaign Id in url will replace Filter Lists assigned to Campaign
9.2.1. Request Body
| Path | Type | Description | Required |
|---|---|---|---|
items.*.id |
integer |
Filter list id |
+ |
9.2.2. HTTP Request
URL
POST api/campaigns/35/filterlists HTTP/1.1
HEADER
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Content-type: application/x-www-form-urlencoded
DATA
{
"items": [
{
"id": 4
},
{
"id": 5
}
]
}
9.2.3. Curl request
$ curl 'https://dsp-api.smartyads.com/api/campaigns/35/filterlists' -i -X POST \
-H 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8' \
-H 'Content-type: application/x-www-form-urlencoded' \
-d '{
"items": [
{
"id": 4
},
{
"id": 5
}
]
}'
9.2.4. Response Body
| Path | Type | Description |
|---|---|---|
message |
string |
Result message |
9.2.5. HTTP Response
HTTP/1.0 200 OK
Content-type: application/json
{
"message": "Replaced."
}
9.3. Remove Filter Lists assigned to Campaign
A `DELETE` request with Campaign Id in url will remove Filter Lists assigned to Campaign
9.3.1. Request Body
| Path | Type | Description | Required |
|---|---|---|---|
ids.* |
integer |
FilterList id |
+ |
9.3.2. HTTP Request
URL
DELETE api/campaigns/36/filterlists HTTP/1.1
HEADER
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Content-type: application/x-www-form-urlencoded
DATA
{
"ids": [
7
]
}
9.3.3. Curl request
$ curl 'https://dsp-api.smartyads.com/api/campaigns/36/filterlists' -i -X DELETE \
-H 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8' \
-H 'Content-type: application/x-www-form-urlencoded' \
-d '{
"ids": [
7
]
}'
9.3.4. Response Body
| Path | Type | Description |
|---|---|---|
message |
string |
Result message |
9.3.5. HTTP Response
HTTP/1.0 200 OK
Content-type: application/json
{
"message": "Deleted."
}
10. Providers
10.1. Get list of Third-Party Data Providers
A `GET` request returns paginated list of available third-party data providers (Eyeota, LiveRamp, etc.). These providers supply audience segments for targeting.
10.1.1. HTTP Request
URL
GET api/providers HTTP/1.1
HEADER
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
DATA
{}
10.1.2. Curl request
$ curl 'https://dsp-api.smartyads.com/api/providers' -i -X GET \
-H 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8' \
-d '{}'
10.1.3. Response Body
| Path | Type | Description |
|---|---|---|
data.*.id |
integer |
Provider id |
data.*.name |
string |
Provider name (eyeota, liveramp, etc.) |
meta.pagination.total |
integer |
Total items count |
meta.pagination.count |
integer |
Current page items count |
meta.pagination.per_page |
integer |
Items per page |
meta.pagination.current_page |
integer |
Current page number |
meta.pagination.total_pages |
integer |
Total pages count |
meta.pagination.links |
object |
Pagination links |
10.1.4. HTTP Response
HTTP/1.0 200 OK
Content-type: application/json
{
"data": [
{
"id": 1,
"name": "eyeota"
},
{
"id": 2,
"name": "liveramp"
},
{
"id": 3,
"name": "oracle"
}
],
"meta": {
"pagination": {
"total": 3,
"count": 3,
"per_page": 15,
"current_page": 1,
"total_pages": 1,
"links": []
}
}
}
11. Eyeota Segments
11.1. Get Eyeota segments (hierarchical structure)
A `GET` request returns hierarchical structure of Eyeota audience segments organized in layers (0-8). Used for building segment selection tree in UI. Optional search by segment name.
11.1.1. HTTP Request
URL
GET api/eyeota HTTP/1.1
HEADER
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
DATA
{}
11.1.2. Curl request
$ curl 'https://dsp-api.smartyads.com/api/eyeota' -i -X GET \
-H 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8' \
-d '{}'
11.1.3. Response Body
| Path | Type | Description |
|---|---|---|
items |
object |
Hierarchical items structure |
layer0.*.index |
string |
Category index/key |
layer0.*.name |
string |
Category name |
layer1 |
object |
Second level categories |
layer2 |
object |
Third level categories |
layer3 |
object |
Fourth level categories |
layer4 |
object |
Fifth level categories |
layer5 |
object |
Sixth level categories |
layer6 |
object |
Seventh level categories |
layer7 |
object |
Eighth level categories (usually empty) |
layer8 |
object |
Ninth level categories (usually empty) |
11.1.4. HTTP Response
HTTP/1.0 200 OK
Content-type: application/json
{
"items": [],
"layer0": [
{
"index": "automotive",
"name": "Automotive"
},
{
"index": "business",
"name": "Business"
}
],
"layer1": [],
"layer2": [],
"layer3": [],
"layer4": [],
"layer5": [],
"layer6": [],
"layer7": [],
"layer8": []
}
11.2. Get Eyeota segments (inline format)
A `GET` request returns flat list of all Eyeota segments in format: `segmentId => "#ID | Name | CPM$"`. Useful for quick segment lookup and autocomplete.
11.2.1. HTTP Request
URL
GET api/eyeota/inline HTTP/1.1
HEADER
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
DATA
{}
11.2.2. Curl request
$ curl 'https://dsp-api.smartyads.com/api/eyeota/inline' -i -X GET \
-H 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8' \
-d '{}'
11.2.3. Response Body
| Path | Type | Description |
|---|---|---|
* |
string |
Formatted segment string: "#ID |
11.2.4. HTTP Response
HTTP/1.0 200 OK
Content-type: application/json
{
"12345": "#12345 | Automotive Enthusiasts | 2.5$",
"67890": "#67890 | Business Professionals | 3.0$"
}
12. Optimization Rule
12.1. Rule
A `GET` request will return a optimization rules
12.1.1. HTTP Request
URL
GET api/optimization-rule HTTP/1.1
HEADER
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
DATA
{}
12.1.2. Curl request
$ curl 'https://dsp-api.smartyads.com/api/optimization-rule' -i -X GET \
-H 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8' \
-d '{}'
12.1.3. Response Body
| Path | Type | Description |
|---|---|---|
data.*.id |
integer |
Id |
data.*.userId |
integer |
User Id |
data.*.ownerCampaignId |
integer |
Campaign id where it was created rule |
data.*.name |
string |
Name |
data.*.timeRange |
string |
type: last_day,last_3_days,last_week,last_month |
data.*.then |
string |
type: whitelist_source,blacklist_source |
data..conditions..condition |
string |
Condition type: (when,and,or) first condition must be - when |
data..conditions..action |
string |
Actions type: (ctr,clicks,winrate,impressions,dspSpend) |
data..conditions..comparison |
string |
Comparison type: (>,<,=) |
data..conditions..value |
string |
Value |
data.*.targetFilterListId |
integer |
Filter list id |
data.*.createdAt |
datetime |
Date of creation |
data.*.updatedAt |
datetime |
Date of last modification |
meta.pagination.total |
integer |
Pagination: total items count |
meta.pagination.count |
integer |
Pagination: page items count |
meta.pagination.per_page |
integer |
Pagination: items per page |
meta.pagination.current_page |
integer |
Pagination: current page number |
meta.pagination.total_pages |
integer |
Pagination: total pages count |
meta.pagination.links |
array |
Pagination: array links |
12.1.4. HTTP Response
HTTP/1.0 200 OK
Content-type: application/json
{
"data": [
{
"id": 1,
"userId": 10,
"ownerCampaignId": 100,
"name": "TEST Rule#1",
"timeRange": "last_day",
"then": "blacklist_source",
"conditions": [
{
"condition": "when",
"action": "dspSpend",
"comparison": ">",
"value": "10"
}
],
"targetFilterListId": 501,
"createdAt": "2026-02-20 08:49:36",
"updatedAt": "2026-02-20 08:49:36"
}
],
"meta": {
"pagination": {
"total": 1,
"count": 1,
"per_page": 15,
"current_page": 1,
"total_pages": 1,
"links": []
}
}
}
12.2. Get rule by ID
A `GET` request will return a optimization rule
12.2.1. HTTP Request
URL
GET api/optimization-rule/999 HTTP/1.1
HEADER
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
DATA
{}
12.2.2. Curl request
$ curl 'https://dsp-api.smartyads.com/api/optimization-rule/999' -i -X GET \
-H 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8' \
-d '{}'
12.2.3. Response Body
| Path | Type | Description |
|---|---|---|
data.id |
integer |
Id |
data.userId |
integer |
User Id |
data.ownerCampaignId |
integer |
Campaign id where it was created rule |
data.name |
string |
Name |
data.timeRange |
string |
type: last_day,last_3_days,last_week,last_month |
data.then |
string |
type: whitelist_source,blacklist_source |
data.conditions.*.condition |
string |
Condition type: (when,and,or) first condition must be - when |
data.conditions.*.action |
string |
Actions type: (ctr,clicks,winrate,impressions,dspSpend) |
data.conditions.*.comparison |
string |
Comparison type: (>,<,=) |
data.conditions.*.value |
string |
Value |
data.targetFilterListId |
integer |
Filter list id |
data.createdAt |
datetime |
Date of creation |
data.updatedAt |
datetime |
Date of last modification |
12.2.4. HTTP Response
HTTP/1.0 200 OK
Content-type: application/json
{
"data": {
"id": 999,
"userId": 10,
"ownerCampaignId": 100,
"name": "TEST Rule#1",
"timeRange": "last_day",
"then": "blacklist_source",
"conditions": [
{
"condition": "when",
"action": "dspSpend",
"comparison": ">",
"value": "10"
}
],
"targetFilterListId": 501,
"createdAt": "2026-02-20 08:49:36",
"updatedAt": "2026-02-20 08:49:36"
}
}
12.3. Create a rule
A `POST` request will return a optimization rule
12.3.1. Request Body
| Path | Type | Description | Required |
|---|---|---|---|
name |
string |
Name |
+ |
timeRange |
string |
type: (last_day,last_3_days,last_week,last_month) |
+ |
then |
string |
type: (whitelist_source,blacklist_source) |
+ |
targetFilterListId |
integer |
Filter list id |
+ |
conditions.*.condition |
string |
Condition type: (when,and,or) first condition must be - when |
+ |
conditions.*.action |
string |
Actions type: (ctr,clicks,winrate,impressions,dspSpend) |
+ |
conditions.*.comparison |
string |
Comparison type: (>,<,=) |
+ |
conditions.*.value |
string |
Value |
+ |
12.3.2. HTTP Request
URL
POST api/optimization-rule HTTP/1.1
HEADER
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Content-type: application/x-www-form-urlencoded
DATA
{
"name": "Test",
"timeRange": "last_day",
"then": "blacklist_source",
"targetFilterListId": 501,
"conditions": [
{
"condition": "when",
"action": "dspPrice",
"comparison": ">",
"value": "0.5"
}
]
}
12.3.3. Curl request
$ curl 'https://dsp-api.smartyads.com/api/optimization-rule' -i -X POST \
-H 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8' \
-H 'Content-type: application/x-www-form-urlencoded' \
-d '{
"name": "Test",
"timeRange": "last_day",
"then": "blacklist_source",
"targetFilterListId": 501,
"conditions": [
{
"condition": "when",
"action": "dspPrice",
"comparison": ">",
"value": "0.5"
}
]
}'
12.3.4. Response Body
| Path | Type | Description |
|---|---|---|
data.id |
integer |
Id |
data.userId |
integer |
User Id |
data.ownerCampaignId |
integer |
Campaign id where it was created rule |
data.name |
string |
Name |
data.timeRange |
string |
type: (last_day,last_3_days,last_week,last_month) |
data.then |
string |
type: (whitelist_source,blacklist_source) |
data.conditions.*.condition |
string |
Condition type: (when,and,or) first condition must be - when |
data.conditions.*.action |
string |
Actions type: (ctr,clicks,winrate,impressions,dspSpend) |
data.conditions.*.comparison |
string |
Comparison type: (>,<,=) |
data.conditions.*.value |
string |
Value |
data.targetFilterListId |
integer |
Filter list id |
data.createdAt |
datetime |
Date of creation |
data.updatedAt |
datetime |
Date of last modification |
12.3.5. HTTP Response
HTTP/1.0 200 OK
Content-type: application/json
{
"data": {
"id": 1001,
"userId": 10,
"ownerCampaignId": 100,
"name": "Test",
"timeRange": "last_day",
"then": "blacklist_source",
"conditions": [
{
"condition": "when",
"action": "dspPrice",
"comparison": ">",
"value": "0.5"
}
],
"targetFilterListId": 501,
"createdAt": "2026-02-20 08:49:36",
"updatedAt": "2026-02-20 08:49:36"
}
}
12.4. Rule update
A `PATCH` request will return a optimization rule
12.4.1. Request Body
| Path | Type | Description | Required |
|---|---|---|---|
name |
string |
Name |
+ |
timeRange |
string |
type: (last_day,last_3_days,last_week,last_month) |
+ |
then |
string |
type: (whitelist_source,blacklist_source) |
+ |
targetFilterListId |
integer |
Filter list id |
+ |
conditions.*.condition |
string |
Condition type: (when,and,or) first condition must be - when |
+ |
conditions.*.action |
string |
Actions type: (ctr,clicks,winrate,impressions,dspSpend) |
+ |
conditions.*.comparison |
string |
Comparison type: (>,<,=) |
+ |
conditions.*.value |
string |
Value |
+ |
12.4.2. HTTP Request
URL
PUT api/optimization-rule/2002 HTTP/1.1
HEADER
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Content-type: application/x-www-form-urlencoded
DATA
{
"name": "Test#2",
"timeRange": "last_week",
"then": "whitelist_source",
"targetFilterListId": 777,
"conditions": [
{
"condition": "when",
"action": "dspPrice",
"comparison": "<",
"value": "1"
}
]
}
12.4.3. Curl request
$ curl 'https://dsp-api.smartyads.com/api/optimization-rule/2002' -i -X PUT \
-H 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8' \
-H 'Content-type: application/x-www-form-urlencoded' \
-d '{
"name": "Test#2",
"timeRange": "last_week",
"then": "whitelist_source",
"targetFilterListId": 777,
"conditions": [
{
"condition": "when",
"action": "dspPrice",
"comparison": "<",
"value": "1"
}
]
}'
12.4.4. Response Body
| Path | Type | Description |
|---|---|---|
data.id |
integer |
Id |
data.userId |
integer |
User Id |
data.ownerCampaignId |
integer |
Campaign id where it was created rule |
data.name |
string |
Name |
data.timeRange |
string |
type: (last_day,last_3_days,last_week,last_month) |
data.then |
string |
type: (whitelist_source,blacklist_source) |
data.conditions.*.condition |
string |
Condition type: (when,and,or) first condition must be - when |
data.conditions.*.action |
string |
Actions type: (ctr,clicks,winrate,impressions,dspSpend) |
data.conditions.*.comparison |
string |
Comparison type: (>,<,=) |
data.conditions.*.value |
string |
Value |
data.targetFilterListId |
integer |
Filter list id |
data.createdAt |
datetime |
Date of creation |
data.updatedAt |
datetime |
Date of last modification |
12.4.5. HTTP Response
HTTP/1.0 200 OK
Content-type: application/json
{
"data": {
"id": 2002,
"userId": 10,
"ownerCampaignId": 100,
"name": "Test#2",
"timeRange": "last_week",
"then": "whitelist_source",
"conditions": [
{
"condition": "when",
"action": "dspPrice",
"comparison": "<",
"value": "1"
}
],
"targetFilterListId": 777,
"createdAt": "2026-02-20 08:49:36",
"updatedAt": "2026-02-20 08:49:36"
}
}
12.5. Remove Rule assigned to Campaign
A `DELETE` request will delete a Optimization rule relation
12.5.1. HTTP Request
URL
DELETE api/optimization-rule/3003 HTTP/1.1
HEADER
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Content-type: application/x-www-form-urlencoded
DATA
{}
12.5.2. Curl request
$ curl 'https://dsp-api.smartyads.com/api/optimization-rule/3003' -i -X DELETE \
-H 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8' \
-H 'Content-type: application/x-www-form-urlencoded' \
-d '{}'
12.5.3. Response Body
| Path | Type | Description |
|---|---|---|
deleted |
boolean |
is deleted |
12.5.4. HTTP Response
HTTP/1.0 200 OK
Content-type: application/json
{
"deleted": true
}
13. Assign Optimization rules to Campaigns
13.1. Get Rule assigned to Campaign
A `GET` request will return a optimization rule relation
13.1.1. HTTP Request
URL
GET api/campaign/15/optimization-rule-relation HTTP/1.1
HEADER
Accept: application/json Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwOi8vbG9jYWxob3N0Ojk5MjMiLCJpYXQiOjE3NzE1NzczNjcsImV4cCI6MTc3MTU4MDk2NywibmJmIjoxNzcxNTc3MzY3LCJqdGkiOiJ0NXRTS2ZySnVjQzdNM2liIiwic3ViIjoiMzciLCJwcnYiOiIyM2JkNWM4OTQ5ZjYwMGFkYjM5ZTcwMWM0MDA4NzJkYjdhNTk3NmY3In0.ccSrQMIEbqpVHIXOh8jv_cYuGuSsit97qzDzCbu5-B8
DATA
{}
13.1.2. Curl request
$ curl 'https://dsp-api.smartyads.com/api/campaign/15/optimization-rule-relation' -i -X GET \
-H 'Accept: application/json' \
-H 'Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwOi8vbG9jYWxob3N0Ojk5MjMiLCJpYXQiOjE3NzE1NzczNjcsImV4cCI6MTc3MTU4MDk2NywibmJmIjoxNzcxNTc3MzY3LCJqdGkiOiJ0NXRTS2ZySnVjQzdNM2liIiwic3ViIjoiMzciLCJwcnYiOiIyM2JkNWM4OTQ5ZjYwMGFkYjM5ZTcwMWM0MDA4NzJkYjdhNTk3NmY3In0.ccSrQMIEbqpVHIXOh8jv_cYuGuSsit97qzDzCbu5-B8' \
-d '{}'
13.1.3. Response Body
| Path | Type | Description |
|---|---|---|
data.id |
integer |
Id |
data.userId |
integer |
User Id |
data.ownerCampaignId |
integer |
Campaign id where it was created rule |
data.name |
string |
Name |
data.timeRange |
string |
last_day |
last_3_days |
last_week |
last_month |
data.then |
string |
whitelist_source |
blacklist_source |
data.targetFilterListId |
integer |
Filter list id |
data.conditions.*.condition |
string |
Condition (when |
and |
or) first condition must be - when |
data.conditions.*.action |
string |
Actions (ctr |
clicks |
winrate |
impressions |
dspSpend) |
data.conditions.*.comparison |
string |
Comparison types (> |
< |
=) |
data.conditions.*.value |
string |
Value |
data.createdAt |
datetime |
Date of creation |
data.updatedAt |
datetime |
Date of last modification |
13.1.4. HTTP Response
HTTP/1.0 200 OK
Content-type: application/json
Access-control-allow-origin: *
X-ratelimit-limit: 500
X-ratelimit-remaining: 499
{
"data": {
"id": 1,
"userId": 37,
"ownerCampaignId": 15,
"name": "TEST Rule#1",
"timeRange": "last_week",
"then": "whitelist_source",
"targetFilterListId": 1,
"conditions": [
{
"condition": "and",
"action": "impressions",
"comparison": "=",
"value": 5000
}
],
"createdAt": "2026-02-20T08:49:27.000000Z",
"updatedAt": "2026-02-20T08:49:27.000000Z"
}
}
13.2. Replace Rule assigned to Campaign
A `POST` request will return a optimization rule relation
13.2.1. Request Body
| Path | Type | Description | Required |
|---|---|---|---|
campaignId |
integer |
campaignId |
+ |
ruleId |
integer |
ruleId |
+ |
13.2.2. HTTP Request
URL
POST api/campaign/optimization-rule-relation HTTP/1.1
HEADER
Accept: application/json Content-type: application/json Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwOi8vbG9jYWxob3N0Ojk5MjMiLCJpYXQiOjE3NzE1NzczNjcsImV4cCI6MTc3MTU4MDk2NywibmJmIjoxNzcxNTc3MzY3LCJqdGkiOiJTMml2SnBZN1VIcU9OWlNZIiwic3ViIjoiMzgiLCJwcnYiOiIyM2JkNWM4OTQ5ZjYwMGFkYjM5ZTcwMWM0MDA4NzJkYjdhNTk3NmY3In0.rkuJlAeckcBfMot1olb363jIkgNGhXmx9IcAZTasnwc
DATA
{
"campaignId": 16,
"ruleId": 2
}
13.2.3. Curl request
$ curl 'https://dsp-api.smartyads.com/api/campaign/optimization-rule-relation' -i -X POST \
-H 'Accept: application/json' \
-H 'Content-type: application/json' \
-H 'Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwOi8vbG9jYWxob3N0Ojk5MjMiLCJpYXQiOjE3NzE1NzczNjcsImV4cCI6MTc3MTU4MDk2NywibmJmIjoxNzcxNTc3MzY3LCJqdGkiOiJTMml2SnBZN1VIcU9OWlNZIiwic3ViIjoiMzgiLCJwcnYiOiIyM2JkNWM4OTQ5ZjYwMGFkYjM5ZTcwMWM0MDA4NzJkYjdhNTk3NmY3In0.rkuJlAeckcBfMot1olb363jIkgNGhXmx9IcAZTasnwc' \
-d '{
"campaignId": 16,
"ruleId": 2
}'
13.2.4. Response Body
| Path | Type | Description |
|---|---|---|
campaignId |
integer |
campaignId |
ruleId |
integer |
ruleId |
13.2.5. HTTP Response
HTTP/1.0 200 OK
Content-type: application/json
Access-control-allow-origin: *
X-ratelimit-limit: 500
X-ratelimit-remaining: 499
{
"campaignId": 0,
"ruleId": 2
}
13.3. Remove Rule assigned to Campaign
A `DELETE` request will delete a Optimization rule relation
13.3.1. HTTP Request
URL
DELETE api/campaign/17/optimization-rule-relation HTTP/1.1
HEADER
Accept: application/json Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwOi8vbG9jYWxob3N0Ojk5MjMiLCJpYXQiOjE3NzE1NzczNjcsImV4cCI6MTc3MTU4MDk2NywibmJmIjoxNzcxNTc3MzY3LCJqdGkiOiJMMFdIQTNtOGFBdFFOazdqIiwic3ViIjoiMzkiLCJwcnYiOiIyM2JkNWM4OTQ5ZjYwMGFkYjM5ZTcwMWM0MDA4NzJkYjdhNTk3NmY3In0.hpBNe6gDHoLq0Mz1Frv-UfG8mv5YxRGmZiOIRCqxv8Q Content-type: application/x-www-form-urlencoded
DATA
{}
13.3.2. Curl request
$ curl 'https://dsp-api.smartyads.com/api/campaign/17/optimization-rule-relation' -i -X DELETE \
-H 'Accept: application/json' \
-H 'Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwOi8vbG9jYWxob3N0Ojk5MjMiLCJpYXQiOjE3NzE1NzczNjcsImV4cCI6MTc3MTU4MDk2NywibmJmIjoxNzcxNTc3MzY3LCJqdGkiOiJMMFdIQTNtOGFBdFFOazdqIiwic3ViIjoiMzkiLCJwcnYiOiIyM2JkNWM4OTQ5ZjYwMGFkYjM5ZTcwMWM0MDA4NzJkYjdhNTk3NmY3In0.hpBNe6gDHoLq0Mz1Frv-UfG8mv5YxRGmZiOIRCqxv8Q' \
-H 'Content-type: application/x-www-form-urlencoded' \
-d '{}'
13.3.3. Response Body
| Path | Type | Description |
|---|---|---|
deleted |
boolean |
is deleted |
13.3.4. HTTP Response
HTTP/1.0 200 OK
Content-type: application/json
Access-control-allow-origin: *
X-ratelimit-limit: 500
X-ratelimit-remaining: 499
{
"deleted": true
}
14. Assign Time Targeting to Campaigns
14.1. Get Campaign Time Targeting
A `GET` request with Campaign Id in url will return time targeting mapped to the campaign.
14.1.1. HTTP Request
URL
GET api/campaigns/45/time-targeting HTTP/1.1
HEADER
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
DATA
{}
14.1.2. Curl request
$ curl 'https://dsp-api.smartyads.com/api/campaigns/45/time-targeting' -i -X GET \
-H 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8' \
-d '{}'
14.1.3. Response Body
| Path | Type | Description |
|---|---|---|
data.*.dayOfWeek |
integer |
Day of week (0..6) |
data.*.hour |
integer |
Hour of day (0..23) |
14.1.4. HTTP Response
HTTP/1.0 200 OK
Content-type: application/json
{
"data": [
{
"dayOfWeek": 0,
"hour": 0
},
{
"dayOfWeek": 6,
"hour": 23
}
]
}
14.2. Replace Campaign Time Targeting
A `POST` request replaces all time targeting settings for the campaign. Provide array of day/hour combinations (dayOfWeek: 0-6, hour: 0-23). Optional `timeZone` offset for conversion. All existing time targeting will be removed and replaced with new data.
14.2.1. Request Body
| Path | Type | Description | Required |
|---|---|---|---|
items.*.dayOfWeek |
integer |
Day of week (0..6) |
+ |
items.*.hour |
integer |
Hour of day (0..23) |
+ |
timeZone |
float |
Timezone offset for conversion of day/hour to internal timestamps |
14.2.2. HTTP Request
URL
POST api/campaigns/46/time-targeting HTTP/1.1
HEADER
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Content-type: application/x-www-form-urlencoded
DATA
{
"items": [
{
"dayOfWeek": 3,
"hour": 12
}
],
"timeZone": 0
}
14.2.3. Curl request
$ curl 'https://dsp-api.smartyads.com/api/campaigns/46/time-targeting' -i -X POST \
-H 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8' \
-H 'Content-type: application/x-www-form-urlencoded' \
-d '{
"items": [
{
"dayOfWeek": 3,
"hour": 12
}
],
"timeZone": 0
}'
14.2.4. Response Body
| Path | Type | Description |
|---|---|---|
message |
string |
Result message |
14.2.5. HTTP Response
HTTP/1.0 200 OK
Content-type: application/json
{
"message": "Replaced."
}
14.3. Append Campaign Time Targeting
A `PATCH` request with Campaign Id in url will append time targeting mapped to the campaign.
14.3.1. Request Body
| Path | Type | Description | Required |
|---|---|---|---|
items.*.dayOfWeek |
integer |
Day of week (0..6) |
+ |
items.*.hour |
integer |
Hour of day (0..23) |
+ |
14.3.2. HTTP Request
URL
PATCH api/campaigns/47/time-targeting HTTP/1.1
HEADER
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
DATA
{
"items": [
{
"dayOfWeek": 3,
"hour": 12
}
]
}
14.3.3. Curl request
$ curl 'https://dsp-api.smartyads.com/api/campaigns/47/time-targeting' -i -X PATCH \
-H 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8' \
-d '{
"items": [
{
"dayOfWeek": 3,
"hour": 12
}
]
}'
14.3.4. Response Body
| Path | Type | Description |
|---|---|---|
message |
string |
Result message |
14.3.5. HTTP Response
HTTP/1.0 200 OK
Content-type: application/json
{
"message": "Appended."
}
14.4. Delete Campaign Time Targeting
A `DELETE` request with Campaign Id in url will remove time targeting mapped to the campaign.
14.4.1. Request Body
| Path | Type | Description | Required |
|---|---|---|---|
items.*.dayOfWeek |
integer |
Day of week (0..6). If empty, deletes all items. |
|
items.*.hour |
integer |
Hour of day (0..23). If empty, deletes all items. |
14.4.2. HTTP Request
URL
DELETE api/campaigns/48/time-targeting HTTP/1.1
HEADER
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Content-type: application/x-www-form-urlencoded
DATA
{
"items": [
{
"dayOfWeek": 0,
"hour": 0
}
]
}
14.4.3. Curl request
$ curl 'https://dsp-api.smartyads.com/api/campaigns/48/time-targeting' -i -X DELETE \
-H 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8' \
-H 'Content-type: application/x-www-form-urlencoded' \
-d '{
"items": [
{
"dayOfWeek": 0,
"hour": 0
}
]
}'
14.4.4. Response Body
| Path | Type | Description |
|---|---|---|
message |
string |
Result message |
14.4.5. HTTP Response
HTTP/1.0 200 OK
Content-type: application/json
{
"message": "Deleted."
}
15. Assign GEO Targeting (GPS) to Campaigns
15.1. Get Campaign GEO Targeting (GPS)
A `GET` request with Campaign Id in url will return GPS targeting mapped to the campaign.
15.1.1. HTTP Request
URL
GET api/campaigns/37/geo-targeting HTTP/1.1
HEADER
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
DATA
{}
15.1.2. Curl request
$ curl 'https://dsp-api.smartyads.com/api/campaigns/37/geo-targeting' -i -X GET \
-H 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8' \
-d '{}'
15.1.3. Response Body
| Path | Type | Description |
|---|---|---|
data.*.lat |
float |
Latitude |
data.*.lng |
float |
Longitude |
data.*.radius |
float |
Radius |
data.*.include |
boolean |
Include/exclude flag |
meta.pagination.total |
integer |
Total items count |
meta.pagination.count |
integer |
Current page items count |
meta.pagination.per_page |
integer |
Items per page |
meta.pagination.current_page |
integer |
Current page number |
meta.pagination.total_pages |
integer |
Total pages count |
meta.pagination.links.prev |
string |
URL to previous page |
meta.pagination.links.next |
string |
URL to next page |
15.1.4. HTTP Response
HTTP/1.0 200 OK
Content-type: application/json
{
"data": [
{
"lat": 50.4501,
"lng": 30.5234,
"radius": 10,
"include": true
}
],
"meta": {
"pagination": {
"total": 1,
"count": 1,
"per_page": 1000,
"current_page": 1,
"total_pages": 1,
"links": {
"prev": null,
"next": null
}
}
}
}
15.2. Replace Campaign GEO Targeting (GPS)
A `POST` request with Campaign Id in url will replace GPS targeting mapped to the campaign.
15.2.1. Request Body
| Path | Type | Description | Required |
|---|---|---|---|
items.*.lat |
float |
Latitude |
+ |
items.*.lng |
float |
Longitude |
+ |
items.*.radius |
float |
Radius |
+ |
items.*.include |
boolean |
Include/exclude |
+ |
15.2.2. HTTP Request
URL
POST api/campaigns/38/geo-targeting HTTP/1.1
HEADER
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Content-type: application/x-www-form-urlencoded
DATA
{
"items": [
{
"lat": 50.4501,
"lng": 30.5234,
"radius": 10,
"include": true
}
]
}
15.2.3. Curl request
$ curl 'https://dsp-api.smartyads.com/api/campaigns/38/geo-targeting' -i -X POST \
-H 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8' \
-H 'Content-type: application/x-www-form-urlencoded' \
-d '{
"items": [
{
"lat": 50.4501,
"lng": 30.5234,
"radius": 10,
"include": true
}
]
}'
15.2.4. Response Body
| Path | Type | Description |
|---|---|---|
message |
string |
Result message |
15.2.5. HTTP Response
HTTP/1.0 200 OK
Content-type: application/json
{
"message": "Replaced."
}
15.3. Append Campaign GEO Targeting (GPS)
A `PATCH` request with Campaign Id in url will append GPS targeting mapped to the campaign.
15.3.1. Request Body
| Path | Type | Description | Required |
|---|---|---|---|
items.*.lat |
float |
Latitude |
+ |
items.*.lng |
float |
Longitude |
+ |
items.*.radius |
float |
Radius |
+ |
items.*.include |
boolean |
Include/exclude |
+ |
15.3.2. HTTP Request
URL
PATCH api/campaigns/39/geo-targeting HTTP/1.1
HEADER
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
DATA
{
"items": [
{
"lat": 50.4501,
"lng": 30.5234,
"radius": 10,
"include": true
}
]
}
15.3.3. Curl request
$ curl 'https://dsp-api.smartyads.com/api/campaigns/39/geo-targeting' -i -X PATCH \
-H 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8' \
-d '{
"items": [
{
"lat": 50.4501,
"lng": 30.5234,
"radius": 10,
"include": true
}
]
}'
15.3.4. Response Body
| Path | Type | Description |
|---|---|---|
message |
string |
Result message |
15.3.5. HTTP Response
HTTP/1.0 200 OK
Content-type: application/json
{
"message": "Appended."
}
15.4. Delete Campaign GEO Targeting (GPS)
A `DELETE` request with Campaign Id in url will remove GPS targeting mapped to the campaign.
15.4.1. Request Body
| Path | Type | Description | Required |
|---|---|---|---|
message |
string |
Result message |
+ |
15.4.2. HTTP Request
URL
DELETE api/campaigns/40/geo-targeting HTTP/1.1
HEADER
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Content-type: application/x-www-form-urlencoded
DATA
{
"message": "Deleted."
}
15.4.3. Curl request
$ curl 'https://dsp-api.smartyads.com/api/campaigns/40/geo-targeting' -i -X DELETE \
-H 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8' \
-H 'Content-type: application/x-www-form-urlencoded' \
-d '{
"message": "Deleted."
}'
15.4.4. Response Body
| Path | Type | Description |
|---|---|---|
message |
string |
Result message |
15.4.5. HTTP Response
HTTP/1.0 200 OK
Content-type: application/json
{
"message": "Deleted."
}
16. Assign GEO Targeting (ZipCode) to Campaigns
16.1. Get Campaign GEO Targeting (ZipCode)
A `GET` request with Campaign Id in url will return ZipCode geo targeting mapped to the campaign.
16.1.1. HTTP Request
URL
GET api/campaigns/41/geo-targeting-zip-code HTTP/1.1
HEADER
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
DATA
{}
16.1.2. Curl request
$ curl 'https://dsp-api.smartyads.com/api/campaigns/41/geo-targeting-zip-code' -i -X GET \
-H 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8' \
-d '{}'
16.1.3. Response Body
| Path | Type | Description |
|---|---|---|
data.*.lat |
float |
Latitude |
data.*.lng |
float |
Longitude |
data.*.zip |
string |
Zip code |
data.*.iso2 |
string |
Country ISO2 code |
data.*.countryName |
string |
Country name |
data.*.include |
boolean |
Include/exclude flag |
meta.pagination.total |
integer |
Total items count |
meta.pagination.count |
integer |
Current page items count |
meta.pagination.per_page |
integer |
Items per page |
meta.pagination.current_page |
integer |
Current page number |
meta.pagination.total_pages |
integer |
Total pages count |
meta.pagination.links.prev |
string |
URL to previous page |
meta.pagination.links.next |
string |
URL to next page |
16.1.4. HTTP Response
HTTP/1.0 200 OK
Content-type: application/json
{
"data": [
{
"lat": 50.4501,
"lng": 30.5234,
"zip": "01001",
"iso2": "UA",
"countryName": "Ukraine",
"include": true
}
],
"meta": {
"pagination": {
"total": 1,
"count": 1,
"per_page": 1000,
"current_page": 1,
"total_pages": 1,
"links": {
"prev": null,
"next": null
}
}
}
}
16.2. Replace Campaign GEO Targeting (ZipCode)
A `POST` request with Campaign Id in url will replace ZipCode geo targeting mapped to the campaign.
16.2.1. Request Body
| Path | Type | Description | Required |
|---|---|---|---|
items.*.lat |
float |
Latitude |
+ |
items.*.lng |
float |
Longitude |
+ |
items.*.zip |
string |
Zip code |
+ |
items.*.iso2 |
string |
Country ISO2 code |
+ |
items.*.include |
boolean |
Include/exclude |
+ |
16.2.2. HTTP Request
URL
POST api/campaigns/42/geo-targeting-zip-code HTTP/1.1
HEADER
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Content-type: application/x-www-form-urlencoded
DATA
{
"items": [
{
"lat": 50.4501,
"lng": 30.5234,
"zip": "01001",
"iso2": "UA",
"include": true
}
]
}
16.2.3. Curl request
$ curl 'https://dsp-api.smartyads.com/api/campaigns/42/geo-targeting-zip-code' -i -X POST \
-H 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8' \
-H 'Content-type: application/x-www-form-urlencoded' \
-d '{
"items": [
{
"lat": 50.4501,
"lng": 30.5234,
"zip": "01001",
"iso2": "UA",
"include": true
}
]
}'
16.2.4. Response Body
| Path | Type | Description |
|---|---|---|
message |
string |
Result message |
16.2.5. HTTP Response
HTTP/1.0 200 OK
Content-type: application/json
{
"message": "Replaced."
}
16.3. Append Campaign GEO Targeting (ZipCode)
A `PATCH` request with Campaign Id in url will append ZipCode geo targeting mapped to the campaign.
16.3.1. Request Body
| Path | Type | Description | Required |
|---|---|---|---|
items.*.lat |
float |
Latitude |
+ |
items.*.lng |
float |
Longitude |
+ |
items.*.zip |
string |
Zip code |
+ |
items.*.iso2 |
string |
Country ISO2 code |
+ |
items.*.include |
boolean |
Include/exclude |
+ |
16.3.2. HTTP Request
URL
PATCH api/campaigns/43/geo-targeting-zip-code HTTP/1.1
HEADER
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
DATA
{
"items": [
{
"lat": 50.4501,
"lng": 30.5234,
"zip": "01001",
"iso2": "UA",
"include": true
}
]
}
16.3.3. Curl request
$ curl 'https://dsp-api.smartyads.com/api/campaigns/43/geo-targeting-zip-code' -i -X PATCH \
-H 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8' \
-d '{
"items": [
{
"lat": 50.4501,
"lng": 30.5234,
"zip": "01001",
"iso2": "UA",
"include": true
}
]
}'
16.3.4. Response Body
| Path | Type | Description |
|---|---|---|
message |
string |
Result message |
16.3.5. HTTP Response
HTTP/1.0 200 OK
Content-type: application/json
{
"message": "Appended."
}
16.4. Delete Campaign GEO Targeting (ZipCode)
A `DELETE` request with Campaign Id in url will remove ZipCode geo targeting mapped to the campaign.
16.4.1. Request Body
| Path | Type | Description | Required |
|---|---|---|---|
message |
string |
Result message |
+ |
16.4.2. HTTP Request
URL
DELETE api/campaigns/44/geo-targeting-zip-code HTTP/1.1
HEADER
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Content-type: application/x-www-form-urlencoded
DATA
{
"message": "Deleted."
}
16.4.3. Curl request
$ curl 'https://dsp-api.smartyads.com/api/campaigns/44/geo-targeting-zip-code' -i -X DELETE \
-H 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8' \
-H 'Content-type: application/x-www-form-urlencoded' \
-d '{
"message": "Deleted."
}'
16.4.4. Response Body
| Path | Type | Description |
|---|---|---|
message |
string |
Result message |
16.4.5. HTTP Response
HTTP/1.0 200 OK
Content-type: application/json
{
"message": "Deleted."
}
17. Assign Audiences to Campaigns
17.1. Get list of Audiences assigned to Campaign
A `GET` request returns paginated list of audiences assigned to the campaign. Each audience has a `type` field: `collect` (first-party retargeting), `trade` (lookalike/similar audiences), or `thirdParty` (external data provider audiences).
17.1.1. HTTP Request
URL
GET api/campaigns/18/audiences HTTP/1.1
HEADER
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
DATA
{}
17.1.2. Curl request
$ curl 'https://dsp-api.smartyads.com/api/campaigns/18/audiences' -i -X GET \
-H 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8' \
-d '{}'
17.1.3. Response Body
| Path | Type | Description |
|---|---|---|
data.*.type |
string |
Audience relation type (collect, trade, thirdParty) |
data.*.audience.id |
integer |
Audience id |
data.*.audience.title |
string |
Audience title |
data.*.audience.userId |
integer |
Audience owner user id |
data.*.audience.isIncludeDateRange |
boolean |
Is include date range |
data.*.audience.dateFrom |
datetime |
Date from |
data.*.audience.dateTo |
datetime |
Date to |
data.*.audience.usersTtlInDays |
integer |
Users TTL in days |
data.*.audience.collectionType |
string |
Collection type |
data.*.audience.hashTag |
string |
Hash tag |
data.*.audience.allUsers |
boolean |
All users |
data.*.audience.isActive |
boolean |
Audience active status |
data.*.audience.providerList |
array |
Provider list |
data.*.audience.providerId |
integer |
Provider id |
data.*.audience.isInclude |
boolean |
Audience isInclude flag |
data.*.audience.createdAt |
date |
Created at |
data.*.audience.updatedAt |
date |
Updated at |
meta.pagination.total |
integer |
Total items count |
meta.pagination.count |
integer |
Current page items count |
meta.pagination.per_page |
integer |
Items per page |
meta.pagination.current_page |
integer |
Current page number |
meta.pagination.total_pages |
integer |
Total pages count |
meta.pagination.links.prev |
string |
URL to previous page |
meta.pagination.links.next |
string |
URL to next page |
17.1.4. HTTP Response
HTTP/1.0 200 OK
Content-type: application/json
{
"data": [
{
"type": "collect",
"audience": {
"id": 1,
"title": "Audience #1",
"userId": 40,
"isIncludeDateRange": false,
"dateFrom": null,
"dateTo": null,
"usersTtlInDays": 30,
"collectionType": null,
"hashTag": null,
"allUsers": false,
"isActive": true,
"providerList": [],
"providerId": null,
"isInclude": true,
"createdAt": "2026-02-20",
"updatedAt": "2026-02-20"
}
}
],
"meta": {
"pagination": {
"total": 1,
"count": 1,
"per_page": 100,
"current_page": 1,
"total_pages": 1,
"links": {
"prev": null,
"next": null
}
}
}
}
17.2. Replace Audiences assigned to Campaign
A `POST` request with Campaign Id in url will replace Audiences assigned to Campaign.
17.2.1. Request Body
| Path | Type | Description | Required |
|---|---|---|---|
items.*.id |
integer |
Audience id |
+ |
items.*.type |
string |
Audience relation type (collect, trade, thirdParty) |
+ |
17.2.2. HTTP Request
URL
POST api/campaigns/19/audiences HTTP/1.1
HEADER
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Content-type: application/x-www-form-urlencoded
DATA
{
"items": [
{
"id": 1,
"type": "collect"
}
]
}
17.2.3. Curl request
$ curl 'https://dsp-api.smartyads.com/api/campaigns/19/audiences' -i -X POST \
-H 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8' \
-H 'Content-type: application/x-www-form-urlencoded' \
-d '{
"items": [
{
"id": 1,
"type": "collect"
}
]
}'
17.2.4. Response Body
| Path | Type | Description |
|---|---|---|
message |
string |
Result message |
17.2.5. HTTP Response
HTTP/1.0 200 OK
Content-type: application/json
{
"message": "Replaced."
}
17.3. Append Audiences assigned to Campaign
A `PATCH` request with Campaign Id in url will append Audiences assigned to Campaign.
17.3.1. Request Body
| Path | Type | Description | Required |
|---|---|---|---|
items.*.id |
integer |
Audience id |
+ |
items.*.type |
string |
Audience relation type (collect, trade, thirdParty) |
+ |
17.3.2. HTTP Request
URL
PATCH api/campaigns/20/audiences HTTP/1.1
HEADER
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
DATA
{
"items": [
{
"id": 1,
"type": "collect"
}
]
}
17.3.3. Curl request
$ curl 'https://dsp-api.smartyads.com/api/campaigns/20/audiences' -i -X PATCH \
-H 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8' \
-d '{
"items": [
{
"id": 1,
"type": "collect"
}
]
}'
17.3.4. Response Body
| Path | Type | Description |
|---|---|---|
message |
string |
Result message |
17.3.5. HTTP Response
HTTP/1.0 200 OK
Content-type: application/json
{
"message": "Appended."
}
17.4. Delete Audiences assigned to Campaign
A `DELETE` request with Campaign Id in url will remove Audiences assigned to Campaign.
17.4.1. Request Body
| Path | Type | Description | Required |
|---|---|---|---|
ids.* |
integer |
Audience id. If empty, deletes all items. |
17.4.2. HTTP Request
URL
DELETE api/campaigns/21/audiences HTTP/1.1
HEADER
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Content-type: application/x-www-form-urlencoded
DATA
{
"ids": [
1
]
}
17.4.3. Curl request
$ curl 'https://dsp-api.smartyads.com/api/campaigns/21/audiences' -i -X DELETE \
-H 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8' \
-H 'Content-type: application/x-www-form-urlencoded' \
-d '{
"ids": [
1
]
}'
17.4.4. Response Body
| Path | Type | Description |
|---|---|---|
message |
string |
Result message |
17.4.5. HTTP Response
HTTP/1.0 200 OK
Content-type: application/json
{
"message": "Deleted."
}
18. Assign Deals to Campaigns
18.1. Get list of Deals assigned to Campaign
A `GET` request returns paginated list of PMP (Private Marketplace) deals assigned to the campaign. Each deal has custom `bidPrice` that overrides campaign default bid for that specific deal inventory.
18.1.1. HTTP Request
URL
GET api/campaigns/30/deals HTTP/1.1
HEADER
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
DATA
{}
18.1.2. Curl request
$ curl 'https://dsp-api.smartyads.com/api/campaigns/30/deals' -i -X GET \
-H 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8' \
-d '{}'
18.1.3. Response Body
| Path | Type | Description |
|---|---|---|
data.*.id |
integer |
Deal record id |
data.*.campaignId |
integer |
Campaign id |
data.*.dealId |
string |
Deal identifier |
data.*.bidPrice |
string |
Bid price |
data.*.createdAt |
datetime |
Created at |
data.*.updatedAt |
datetime |
Updated at |
meta.pagination.total |
integer |
Total items count |
meta.pagination.count |
integer |
Current page items count |
meta.pagination.per_page |
integer |
Items per page |
meta.pagination.current_page |
integer |
Current page number |
meta.pagination.total_pages |
integer |
Total pages count |
meta.pagination.links.prev |
string |
URL to previous page |
meta.pagination.links.next |
string |
URL to next page |
18.1.4. HTTP Response
HTTP/1.0 200 OK
Content-type: application/json
{
"data": [
{
"id": 1,
"campaignId": 30,
"dealId": "DEAL-1",
"bidPrice": "1.00",
"createdAt": "2026-02-20 08:49:29",
"updatedAt": "2026-02-20 08:49:29"
}
],
"meta": {
"pagination": {
"total": 1,
"count": 1,
"per_page": 1000,
"current_page": 1,
"total_pages": 1,
"links": {
"prev": null,
"next": null
}
}
}
}
18.2. Get all Deals assigned to Campaign
A `GET` request with Campaign Id in url will get all Deals assigned to Campaign.
18.2.1. HTTP Request
URL
GET api/campaigns/31/deals-all HTTP/1.1
HEADER
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
DATA
{}
18.2.2. Curl request
$ curl 'https://dsp-api.smartyads.com/api/campaigns/31/deals-all' -i -X GET \
-H 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8' \
-d '{}'
18.2.3. Response Body
| Path | Type | Description |
|---|---|---|
data.*.id |
integer |
Deal record id |
data.*.campaignId |
integer |
Campaign id |
data.*.dealId |
string |
Deal identifier |
data.*.bidPrice |
string |
Bid price |
data.*.createdAt |
datetime |
Created at |
data.*.updatedAt |
datetime |
Updated at |
18.2.4. HTTP Response
HTTP/1.0 200 OK
Content-type: application/json
{
"data": [
{
"id": 1,
"campaignId": 31,
"dealId": "DEAL-1",
"bidPrice": "1.00",
"createdAt": "2026-02-20 08:49:29",
"updatedAt": "2026-02-20 08:49:29"
}
]
}
18.3. Replace Deals assigned to Campaign
A `POST` request with Campaign Id in url will replace Deals assigned to Campaign.
18.3.1. Request Body
| Path | Type | Description | Required |
|---|---|---|---|
deals.*.dealId |
string |
Deal identifier |
+ |
deals.*.bidPrice |
string |
Bid price |
+ |
18.3.2. HTTP Request
URL
POST api/campaigns/32/deals HTTP/1.1
HEADER
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Content-type: application/x-www-form-urlencoded
DATA
{
"deals": [
{
"dealId": "DEAL-1",
"bidPrice": "1.00"
}
]
}
18.3.3. Curl request
$ curl 'https://dsp-api.smartyads.com/api/campaigns/32/deals' -i -X POST \
-H 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8' \
-H 'Content-type: application/x-www-form-urlencoded' \
-d '{
"deals": [
{
"dealId": "DEAL-1",
"bidPrice": "1.00"
}
]
}'
18.3.4. Response Body
| Path | Type | Description |
|---|---|---|
message |
string |
Result message |
18.3.5. HTTP Response
HTTP/1.0 200 OK
Content-type: application/json
{
"message": "Replaced."
}
18.4. Delete Deals assigned to Campaign
A `DELETE` request with Campaign Id in url will remove Deals assigned to Campaign.
18.4.1. Request Body
| Path | Type | Description | Required |
|---|---|---|---|
deals.*.id |
integer |
Deal record id |
18.4.2. HTTP Request
URL
DELETE api/campaigns/33/deals HTTP/1.1
HEADER
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Content-type: application/x-www-form-urlencoded
DATA
{
"deals": [
{
"id": 1
}
]
}
18.4.3. Curl request
$ curl 'https://dsp-api.smartyads.com/api/campaigns/33/deals' -i -X DELETE \
-H 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8' \
-H 'Content-type: application/x-www-form-urlencoded' \
-d '{
"deals": [
{
"id": 1
}
]
}'
18.4.4. Response Body
| Path | Type | Description |
|---|---|---|
message |
string |
Result message |
18.4.5. HTTP Response
HTTP/1.0 200 OK
Content-type: application/json
{
"message": "Deleted."
}
19. Assign Contextual Targeting to Campaigns
19.1. Get Campaign Contextual Targeting
A `GET` request with Campaign Id in url will return contextual targeting ids mapped to the campaign.
19.1.1. HTTP Request
URL
GET api/campaigns/22/contextual-targeting HTTP/1.1
HEADER
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
DATA
{}
19.1.2. Curl request
$ curl 'https://dsp-api.smartyads.com/api/campaigns/22/contextual-targeting' -i -X GET \
-H 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8' \
-d '{}'
19.1.3. Response Body
| Path | Type | Description |
|---|---|---|
* |
any |
19.1.4. HTTP Response
HTTP/1.0 200 OK
Content-type: application/json
{
"data": [
1,
2,
3
]
}
19.2. Replace Campaign Contextual Targeting
A `POST` request with Campaign Id in url will replace contextual targeting mapped to the campaign.
19.2.1. Request Body
| Path | Type | Description | Required |
|---|---|---|---|
targetIds.* |
integer |
Contextual targeting id |
+ |
19.2.2. HTTP Request
URL
POST api/campaigns/23/contextual-targeting HTTP/1.1
HEADER
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Content-type: application/x-www-form-urlencoded
DATA
{
"targetIds": [
1,
2,
3
]
}
19.2.3. Curl request
$ curl 'https://dsp-api.smartyads.com/api/campaigns/23/contextual-targeting' -i -X POST \
-H 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8' \
-H 'Content-type: application/x-www-form-urlencoded' \
-d '{
"targetIds": [
1,
2,
3
]
}'
19.2.4. Response Body
| Path | Type | Description |
|---|---|---|
message |
string |
Result message |
19.2.5. HTTP Response
HTTP/1.0 200 OK
Content-type: application/json
{
"message": "Replaced."
}
19.3. Append Campaign Contextual Targeting
A `PATCH` request with Campaign Id in url will append contextual targeting mapped to the campaign.
19.3.1. Request Body
| Path | Type | Description | Required |
|---|---|---|---|
targetIds.* |
integer |
Contextual targeting id |
+ |
19.3.2. HTTP Request
URL
PATCH api/campaigns/24/contextual-targeting HTTP/1.1
HEADER
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
DATA
{
"targetIds": [
1,
2,
3
]
}
19.3.3. Curl request
$ curl 'https://dsp-api.smartyads.com/api/campaigns/24/contextual-targeting' -i -X PATCH \
-H 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8' \
-d '{
"targetIds": [
1,
2,
3
]
}'
19.3.4. Response Body
| Path | Type | Description |
|---|---|---|
message |
string |
Result message |
19.3.5. HTTP Response
HTTP/1.0 200 OK
Content-type: application/json
{
"message": "Replaced."
}
19.4. Delete Campaign Contextual Targeting
A `DELETE` request with Campaign Id in url will remove contextual targeting mapped to the campaign.
19.4.1. Request Body
| Path | Type | Description | Required |
|---|---|---|---|
deleted |
boolean |
Delete result |
+ |
19.4.2. HTTP Request
URL
DELETE api/campaigns/25/contextual-targeting HTTP/1.1
HEADER
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Content-type: application/x-www-form-urlencoded
DATA
{
"deleted": true
}
19.4.3. Curl request
$ curl 'https://dsp-api.smartyads.com/api/campaigns/25/contextual-targeting' -i -X DELETE \
-H 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8' \
-H 'Content-type: application/x-www-form-urlencoded' \
-d '{
"deleted": true
}'
19.4.4. Response Body
| Path | Type | Description |
|---|---|---|
deleted |
boolean |
Delete result |
19.4.5. HTTP Response
HTTP/1.0 200 OK
Content-type: application/json
{
"deleted": true
}
20. CTR Booster Settings
20.1. Get CTR Booster setting for Campaign
A `GET` request returns CTR booster status for the campaign (boolean). CTR booster automatically optimizes campaign performance by adjusting bids based on predicted click-through rates.
20.1.1. HTTP Request
URL
GET api/booster-settings/3 HTTP/1.1
HEADER
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
DATA
{}
20.1.2. Curl request
$ curl 'https://dsp-api.smartyads.com/api/booster-settings/3' -i -X GET \
-H 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8' \
-d '{}'
20.1.3. Response Body
| Path | Type | Description |
|---|---|---|
data |
boolean |
True if CTR Booster setting exists for the campaign |
20.1.4. HTTP Response
HTTP/1.0 200 OK
Content-type: application/json
{
"data": true
}
20.2. Enable CTR Booster setting for Campaign
A `POST` request will enable CTR Booster for the campaign by creating a record.
20.2.1. Request Body
| Path | Type | Description | Required |
|---|---|---|---|
cid |
integer |
Campaign id |
+ |
20.2.2. HTTP Request
URL
POST api/booster-settings HTTP/1.1
HEADER
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Content-type: application/x-www-form-urlencoded
DATA
{
"cid": 4
}
20.2.3. Curl request
$ curl 'https://dsp-api.smartyads.com/api/booster-settings' -i -X POST \
-H 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8' \
-H 'Content-type: application/x-www-form-urlencoded' \
-d '{
"cid": 4
}'
20.2.4. Response Body
| Path | Type | Description |
|---|---|---|
id |
integer |
Booster setting record id |
cid |
integer |
Campaign id |
createdAt |
string |
Created at date |
20.2.5. HTTP Response
HTTP/1.0 200 OK
Content-type: application/json
{
"id": 1,
"cid": 4,
"createdAt": "2026-02-20"
}
20.3. Disable CTR Booster setting for Campaign
A `DELETE` request with Campaign Id in url will disable CTR Booster for the campaign.
20.3.1. HTTP Request
URL
DELETE api/booster-settings/5 HTTP/1.1
HEADER
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Content-type: application/x-www-form-urlencoded
DATA
{}
20.3.2. Curl request
$ curl 'https://dsp-api.smartyads.com/api/booster-settings/5' -i -X DELETE \
-H 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8' \
-H 'Content-type: application/x-www-form-urlencoded' \
-d '{}'
20.3.3. Response Body
| Path | Type | Description |
|---|---|---|
deleted |
boolean |
Delete result |
20.3.4. HTTP Response
HTTP/1.0 200 OK
Content-type: application/json
{
"deleted": true
}
21. Audiences
21.1. Get list of Audiences
A `GET` request returns paginated list of first-party audiences owned by current user. First-party audiences are custom audiences created from user data (clicks, conversions, pixels, video events).
21.1.1. HTTP Request
URL
GET api/audiences HTTP/1.1
HEADER
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
DATA
{}
21.1.2. Curl request
$ curl 'https://dsp-api.smartyads.com/api/audiences' -i -X GET \
-H 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8' \
-d '{}'
21.1.3. Response Body
| Path | Type | Description |
|---|---|---|
data.*.id |
integer |
Audience id |
data.*.title |
string |
Audience title |
data.*.userId |
integer |
Audience owner user id |
data.*.isIncludeDateRange |
boolean |
Is include date range |
data.*.dateFrom |
datetime |
Date from |
data.*.dateTo |
datetime |
Date to |
data.*.usersTtlInDays |
integer |
Users TTL in days |
data.*.collectionType |
string |
Collection type (click, conversion, pixel, liveRamp, eyeota, impression, videoStart, videoFirstQuartile, videoMidpoint, videoThirdQuartile, videoComplete) |
data.*.hashTag |
string |
Hash tag |
data.*.allUsers |
boolean |
All users |
data.*.isActive |
boolean |
Audience active status |
data.*.providerList |
array |
Provider list |
data.*.providerId |
integer |
Provider id |
data.*.isInclude |
boolean |
Audience isInclude flag |
data.*.createdAt |
date |
Created at |
data.*.updatedAt |
date |
Updated at |
meta.pagination.total |
integer |
Total items count |
meta.pagination.count |
integer |
Current page items count |
meta.pagination.per_page |
integer |
Items per page |
meta.pagination.current_page |
integer |
Current page number |
meta.pagination.total_pages |
integer |
Total pages count |
meta.pagination.links.prev |
string |
URL to previous page |
meta.pagination.links.next |
string |
URL to next page |
21.1.4. HTTP Response
HTTP/1.0 200 OK
Content-type: application/json
{
"data": [
{
"id": 1,
"title": "Audience #1",
"userId": 14,
"isIncludeDateRange": false,
"dateFrom": null,
"dateTo": null,
"usersTtlInDays": 30,
"collectionType": "pixel",
"hashTag": null,
"allUsers": false,
"isActive": true,
"providerList": [],
"providerId": null,
"isInclude": true,
"createdAt": "2026-02-20",
"updatedAt": "2026-02-20"
}
],
"meta": {
"pagination": {
"total": 1,
"count": 1,
"per_page": 100,
"current_page": 1,
"total_pages": 1,
"links": {
"prev": null,
"next": null
}
}
}
}
21.2. Get Audience by ID
A `GET` request with Audience Id in url will return audience details.
21.2.1. HTTP Request
URL
GET api/audiences/1 HTTP/1.1
HEADER
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
DATA
{}
21.2.2. Curl request
$ curl 'https://dsp-api.smartyads.com/api/audiences/1' -i -X GET \
-H 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8' \
-d '{}'
21.2.3. Response Body
| Path | Type | Description |
|---|---|---|
data.id |
integer |
Audience id |
data.title |
string |
Audience title |
data.userId |
integer |
Audience owner user id |
data.isIncludeDateRange |
boolean |
Is include date range |
data.dateFrom |
datetime |
Date from |
data.dateTo |
datetime |
Date to |
data.usersTtlInDays |
integer |
Users TTL in days |
data.collectionType |
string |
Collection type |
data.hashTag |
string |
Hash tag |
data.allUsers |
boolean |
All users |
data.isActive |
boolean |
Audience active status |
data.providerList |
array |
Provider list |
data.providerId |
integer |
Provider id |
data.isInclude |
boolean |
Audience isInclude flag |
data.createdAt |
date |
Created at |
data.updatedAt |
date |
Updated at |
21.2.4. HTTP Response
HTTP/1.0 200 OK
Content-type: application/json
{
"data": {
"id": 1,
"title": "Audience #1",
"userId": 15,
"isIncludeDateRange": false,
"dateFrom": null,
"dateTo": null,
"usersTtlInDays": 30,
"collectionType": "pixel",
"hashTag": null,
"allUsers": false,
"isActive": true,
"providerList": [],
"providerId": null,
"isInclude": true,
"createdAt": "2026-02-20",
"updatedAt": "2026-02-20"
}
}
21.3. Create Audience
A `POST` request creates a new first-party audience. Required fields: `title` (unique per user) and `collectionType`. Audience will be owned by current authenticated user.
21.3.1. Request Body
| Path | Type | Description | Required |
|---|---|---|---|
title |
string |
Audience title (unique per user, 2-50 chars) |
+ |
collectionType |
string |
Collection type (click, conversion, pixel, liveRamp, eyeota, impression, videoStart, videoFirstQuartile, videoMidpoint, videoThirdQuartile, videoComplete) |
+ |
usersTtlInDays |
integer |
Users TTL in days |
|
isActive |
integer |
Audience active status (0 or 1) |
21.3.2. HTTP Request
URL
POST api/audiences HTTP/1.1
HEADER
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Content-type: application/x-www-form-urlencoded
DATA
{
"title": "New Audience",
"collectionType": "pixel",
"usersTtlInDays": 30,
"isActive": 1
}
21.3.3. Curl request
$ curl 'https://dsp-api.smartyads.com/api/audiences' -i -X POST \
-H 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8' \
-H 'Content-type: application/x-www-form-urlencoded' \
-d '{
"title": "New Audience",
"collectionType": "pixel",
"usersTtlInDays": 30,
"isActive": 1
}'
21.3.4. Response Body
| Path | Type | Description |
|---|---|---|
message |
string |
Result message |
data.id |
integer |
Audience id |
data.title |
string |
Audience title |
data.userId |
integer |
Audience owner user id |
data.isIncludeDateRange |
boolean |
Is include date range |
data.dateFrom |
datetime |
Date from |
data.dateTo |
datetime |
Date to |
data.usersTtlInDays |
integer |
Users TTL in days |
data.collectionType |
string |
Collection type |
data.hashTag |
string |
Hash tag |
data.allUsers |
boolean |
All users |
data.isActive |
boolean |
Audience active status |
data.providerList |
array |
Provider list |
data.providerId |
integer |
Provider id |
data.isInclude |
boolean |
Audience isInclude flag |
data.createdAt |
date |
Created at |
data.updatedAt |
date |
Updated at |
21.3.5. HTTP Response
HTTP/1.0 200 OK
Content-type: application/json
{
"message": "Audience created.",
"data": {
"id": 1,
"title": "New Audience",
"userId": 16,
"isIncludeDateRange": false,
"dateFrom": null,
"dateTo": null,
"usersTtlInDays": 30,
"collectionType": "pixel",
"hashTag": null,
"allUsers": false,
"isActive": true,
"providerList": [],
"providerId": null,
"isInclude": true,
"createdAt": "2026-02-20",
"updatedAt": "2026-02-20"
}
}
21.4. Update Audience
A `PUT/PATCH` request with Audience Id in url will update audience.
21.4.1. Request Body
| Path | Type | Description | Required |
|---|---|---|---|
title |
string |
Audience title (unique per user, 2-50 chars) |
|
isActive |
integer |
Audience active status (0 or 1) |
21.4.2. HTTP Request
URL
PUT api/audiences/1 HTTP/1.1
HEADER
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Content-type: application/x-www-form-urlencoded
DATA
{
"title": "Updated Audience",
"isActive": 0
}
21.4.3. Curl request
$ curl 'https://dsp-api.smartyads.com/api/audiences/1' -i -X PUT \
-H 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8' \
-H 'Content-type: application/x-www-form-urlencoded' \
-d '{
"title": "Updated Audience",
"isActive": 0
}'
21.4.4. Response Body
| Path | Type | Description |
|---|---|---|
message |
string |
Result message |
data.id |
integer |
Audience id |
data.title |
string |
Audience title |
data.userId |
integer |
Audience owner user id |
data.isIncludeDateRange |
boolean |
Is include date range |
data.dateFrom |
datetime |
Date from |
data.dateTo |
datetime |
Date to |
data.usersTtlInDays |
integer |
Users TTL in days |
data.collectionType |
string |
Collection type |
data.hashTag |
string |
Hash tag |
data.allUsers |
boolean |
All users |
data.isActive |
boolean |
Audience active status |
data.providerList |
array |
Provider list |
data.providerId |
integer |
Provider id |
data.isInclude |
boolean |
Audience isInclude flag |
data.createdAt |
date |
Created at |
data.updatedAt |
date |
Updated at |
21.4.5. HTTP Response
HTTP/1.0 200 OK
Content-type: application/json
{
"message": "Audience updated.",
"data": {
"id": 1,
"title": "Updated Audience",
"userId": 17,
"isIncludeDateRange": false,
"dateFrom": null,
"dateTo": null,
"usersTtlInDays": 30,
"collectionType": "pixel",
"hashTag": null,
"allUsers": false,
"isActive": false,
"providerList": [],
"providerId": null,
"isInclude": true,
"createdAt": "2026-02-20",
"updatedAt": "2026-02-20"
}
}
21.5. Delete Audience
A `DELETE` request with Audience Id in url will delete audience.
21.5.1. HTTP Request
URL
DELETE api/audiences/1 HTTP/1.1
HEADER
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Content-type: application/x-www-form-urlencoded
DATA
{}
21.5.2. Curl request
$ curl 'https://dsp-api.smartyads.com/api/audiences/1' -i -X DELETE \
-H 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8' \
-H 'Content-type: application/x-www-form-urlencoded' \
-d '{}'
21.5.3. Response Body
| Path | Type | Description |
|---|---|---|
message |
string |
Result message |
deleted |
boolean |
Delete result |
21.5.4. HTTP Response
HTTP/1.0 200 OK
Content-type: application/json
{
"message": "Audience deleted.",
"deleted": true
}
21.6. Get list of Third-Party Audiences
A `GET` request returns paginated list of third-party audiences owned by current user. Third-party audiences are purchased from external data providers (LiveRamp, Eyeota, etc.).
21.6.1. HTTP Request
URL
GET api/audiences/third-parties HTTP/1.1
HEADER
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
DATA
{}
21.6.2. Curl request
$ curl 'https://dsp-api.smartyads.com/api/audiences/third-parties' -i -X GET \
-H 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8' \
-d '{}'
21.6.3. Response Body
| Path | Type | Description |
|---|---|---|
data.*.id |
integer |
Audience id |
data.*.title |
string |
Audience title |
data.*.userId |
integer |
Audience owner user id |
data.*.isActive |
boolean |
Audience active status |
data.*.providerList |
array |
Provider list |
data.*.providerId |
integer |
Provider id |
data.*.providerName |
string |
Provider name |
data.*.isInclude |
boolean |
Audience isInclude flag |
data.*.segments |
integer |
Segments count |
data.*.createdAt |
date |
Created at |
meta.pagination.total |
integer |
Total items count |
meta.pagination.count |
integer |
Current page items count |
meta.pagination.per_page |
integer |
Items per page |
meta.pagination.current_page |
integer |
Current page number |
meta.pagination.total_pages |
integer |
Total pages count |
meta.pagination.links.prev |
string |
URL to previous page |
meta.pagination.links.next |
string |
URL to next page |
21.6.4. HTTP Response
HTTP/1.0 200 OK
Content-type: application/json
{
"data": [
{
"id": 1,
"title": "Third-Party Audience #1",
"userId": 19,
"isActive": true,
"providerList": [],
"providerId": 1,
"providerName": "Provider Name",
"isInclude": true,
"segments": 5,
"createdAt": "2026-02-20"
}
],
"meta": {
"pagination": {
"total": 1,
"count": 1,
"per_page": 100,
"current_page": 1,
"total_pages": 1,
"links": {
"prev": null,
"next": null
}
}
}
}
21.7. Create Third-Party Audience
A `POST` request will create a new third-party audience.
21.7.1. Request Body
| Path | Type | Description | Required |
|---|---|---|---|
title |
string |
Audience title (unique per user, 2-50 chars) |
+ |
userID |
integer |
User ID (owner) |
+ |
providerID |
integer |
Provider ID |
+ |
segments.* |
integer |
Segment ID |
+ |
type |
string |
Type (include/exclude) |
+ |
21.7.2. HTTP Request
URL
POST api/audiences/third-parties HTTP/1.1
HEADER
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Content-type: application/x-www-form-urlencoded
DATA
{
"title": "New Third-Party Audience",
"userID": 20,
"providerID": 1,
"segments": [
1,
2,
3
],
"type": "include"
}
21.7.3. Curl request
$ curl 'https://dsp-api.smartyads.com/api/audiences/third-parties' -i -X POST \
-H 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8' \
-H 'Content-type: application/x-www-form-urlencoded' \
-d '{
"title": "New Third-Party Audience",
"userID": 20,
"providerID": 1,
"segments": [
1,
2,
3
],
"type": "include"
}'
21.7.4. Response Body
| Path | Type | Description |
|---|---|---|
message |
string |
Result message |
data.id |
integer |
Audience id |
data.title |
string |
Audience title |
data.userId |
integer |
Audience owner user id |
data.isActive |
boolean |
Audience active status |
data.providerList |
array |
Provider list |
data.providerId |
integer |
Provider id |
data.providerName |
string |
Provider name |
data.isInclude |
boolean |
Audience isInclude flag |
data.segments |
integer |
Segments count |
data.createdAt |
date |
Created at |
21.7.5. HTTP Response
HTTP/1.0 200 OK
Content-type: application/json
{
"message": "Audience created.",
"data": {
"id": 1,
"title": "New Third-Party Audience",
"userId": 20,
"isActive": true,
"providerList": [],
"providerId": 1,
"providerName": "Provider Name",
"isInclude": true,
"segments": 3,
"createdAt": "2026-02-20"
}
}
21.8. Update Third-Party Audience
A `PUT/PATCH` request with Audience Id in url will update third-party audience.
21.8.1. Request Body
| Path | Type | Description | Required |
|---|---|---|---|
id |
integer |
Audience ID |
+ |
title |
string |
Audience title (unique per user, 2-50 chars) |
+ |
segments.* |
integer |
Segment ID |
+ |
type |
string |
Type (include/exclude) |
+ |
21.8.2. HTTP Request
URL
PUT api/audiences/third-parties/1 HTTP/1.1
HEADER
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Content-type: application/x-www-form-urlencoded
DATA
{
"id": 1,
"title": "Updated Third-Party Audience",
"segments": [
1,
2,
3,
4
],
"type": "exclude"
}
21.8.3. Curl request
$ curl 'https://dsp-api.smartyads.com/api/audiences/third-parties/1' -i -X PUT \
-H 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8' \
-H 'Content-type: application/x-www-form-urlencoded' \
-d '{
"id": 1,
"title": "Updated Third-Party Audience",
"segments": [
1,
2,
3,
4
],
"type": "exclude"
}'
21.8.4. Response Body
| Path | Type | Description |
|---|---|---|
message |
string |
Result message |
data.id |
integer |
Audience id |
data.title |
string |
Audience title |
data.userId |
integer |
Audience owner user id |
data.isActive |
boolean |
Audience active status |
data.providerList |
array |
Provider list |
data.providerId |
integer |
Provider id |
data.providerName |
string |
Provider name |
data.isInclude |
boolean |
Audience isInclude flag |
data.segments |
integer |
Segments count |
data.createdAt |
date |
Created at |
21.8.5. HTTP Response
HTTP/1.0 200 OK
Content-type: application/json
{
"message": "Audience updated.",
"data": {
"id": 1,
"title": "Updated Third-Party Audience",
"userId": 21,
"isActive": true,
"providerList": [],
"providerId": 1,
"providerName": "Provider Name",
"isInclude": false,
"segments": 4,
"createdAt": "2026-02-20"
}
}
22. Third-Party Audiences
22.1. Get list of Third-Party Audiences
A `GET` request returns paginated list of third-party audiences owned by current user. Third-party audiences are purchased from external data providers (LiveRamp, Eyeota, etc.).
22.1.1. HTTP Request
URL
GET api/audiences/third-parties HTTP/1.1
HEADER
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
DATA
{}
22.1.2. Curl request
$ curl 'https://dsp-api.smartyads.com/api/audiences/third-parties' -i -X GET \
-H 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8' \
-d '{}'
22.1.3. Response Body
| Path | Type | Description |
|---|---|---|
data.*.id |
integer |
Audience id |
data.*.title |
string |
Audience title |
data.*.userId |
integer |
Audience owner user id |
data.*.isActive |
boolean |
Audience active status |
data.*.providerList |
array |
Provider list |
data.*.providerId |
integer |
Provider id |
data.*.providerName |
string |
Provider name |
data.*.isInclude |
boolean |
Audience isInclude flag |
data.*.segments |
integer |
Segments count |
data.*.createdAt |
date |
Created at |
meta.pagination.total |
integer |
Total items count |
meta.pagination.count |
integer |
Current page items count |
meta.pagination.per_page |
integer |
Items per page |
meta.pagination.current_page |
integer |
Current page number |
meta.pagination.total_pages |
integer |
Total pages count |
meta.pagination.links |
object |
Pagination links |
22.1.4. HTTP Response
HTTP/1.0 200 OK
Content-type: application/json
{
"data": [
{
"id": 1,
"title": "Third-Party Audience #1",
"userId": 1,
"isActive": true,
"providerList": [],
"providerId": 1,
"providerName": "eyeota",
"isInclude": true,
"segments": 5,
"createdAt": "2024-01-01"
}
],
"meta": {
"pagination": {
"total": 1,
"count": 1,
"per_page": 100,
"current_page": 1,
"total_pages": 1,
"links": []
}
}
}
22.2. Create Third-Party Audience
A `POST` request will create a new third-party audience.
22.2.1. Request Body
| Path | Type | Description | Required |
|---|---|---|---|
title |
string |
Audience title (unique per user, 2-50 chars) |
+ |
userID |
integer |
User ID (owner) |
+ |
providerID |
integer |
Provider ID |
+ |
segments.* |
integer |
Segment ID |
+ |
type |
string |
Type (include/exclude) |
+ |
22.2.2. HTTP Request
URL
POST api/audiences/third-parties HTTP/1.1
HEADER
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Content-type: application/x-www-form-urlencoded
DATA
{
"title": "New Third-Party Audience",
"userID": 1,
"providerID": 1,
"segments": [
1,
2,
3
],
"type": "include"
}
22.2.3. Curl request
$ curl 'https://dsp-api.smartyads.com/api/audiences/third-parties' -i -X POST \
-H 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8' \
-H 'Content-type: application/x-www-form-urlencoded' \
-d '{
"title": "New Third-Party Audience",
"userID": 1,
"providerID": 1,
"segments": [
1,
2,
3
],
"type": "include"
}'
22.2.4. Response Body
| Path | Type | Description |
|---|---|---|
message |
string |
Result message |
data.id |
integer |
Audience id |
data.title |
string |
Audience title |
data.userId |
integer |
Audience owner user id |
data.isActive |
boolean |
Audience active status |
data.providerList |
array |
Provider list |
data.providerId |
integer |
Provider id |
data.providerName |
string |
Provider name |
data.isInclude |
boolean |
Audience isInclude flag |
data.segments |
integer |
Segments count |
data.createdAt |
date |
Created at |
22.2.5. HTTP Response
HTTP/1.0 200 OK
Content-type: application/json
{
"message": "Audience created.",
"data": {
"id": 1,
"title": "New Third-Party Audience",
"userId": 1,
"isActive": true,
"providerList": [],
"providerId": 1,
"providerName": "eyeota",
"isInclude": true,
"segments": 3,
"createdAt": "2024-01-01"
}
}
22.3. Update Third-Party Audience
A `PUT/PATCH` request with Audience Id in url will update third-party audience.
22.3.1. Request Body
| Path | Type | Description | Required |
|---|---|---|---|
id |
integer |
Audience ID |
+ |
title |
string |
Audience title (unique per user, 2-50 chars) |
+ |
segments.* |
integer |
Segment ID |
+ |
type |
string |
Type (include/exclude) |
+ |
22.3.2. HTTP Request
URL
PUT api/audiences/third-parties/1 HTTP/1.1
HEADER
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Content-type: application/x-www-form-urlencoded
DATA
{
"id": 1,
"title": "Updated Third-Party Audience",
"segments": [
1,
2,
3,
4
],
"type": "exclude"
}
22.3.3. Curl request
$ curl 'https://dsp-api.smartyads.com/api/audiences/third-parties/1' -i -X PUT \
-H 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8' \
-H 'Content-type: application/x-www-form-urlencoded' \
-d '{
"id": 1,
"title": "Updated Third-Party Audience",
"segments": [
1,
2,
3,
4
],
"type": "exclude"
}'
22.3.4. Response Body
| Path | Type | Description |
|---|---|---|
message |
string |
Result message |
data.id |
integer |
Audience id |
data.title |
string |
Audience title |
data.userId |
integer |
Audience owner user id |
data.isActive |
boolean |
Audience active status |
data.providerList |
array |
Provider list |
data.providerId |
integer |
Provider id |
data.providerName |
string |
Provider name |
data.isInclude |
boolean |
Audience isInclude flag |
data.segments |
integer |
Segments count |
data.createdAt |
date |
Created at |
22.3.5. HTTP Response
HTTP/1.0 200 OK
Content-type: application/json
{
"message": "Audience updated.",
"data": {
"id": 1,
"title": "Updated Third-Party Audience",
"userId": 1,
"isActive": true,
"providerList": [],
"providerId": 1,
"providerName": "eyeota",
"isInclude": false,
"segments": 4,
"createdAt": "2024-01-01"
}
}
23. Contextual Targeting
23.1. Get list of Contextual Targeting
A `GET` request returns paginated list of contextual targeting rules owned by current user. Contextual targeting allows filtering traffic by keywords or IAB categories for web/in-app inventory.
23.1.1. HTTP Request
URL
GET api/contextual-targeting HTTP/1.1
HEADER
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
DATA
{}
23.1.2. Curl request
$ curl 'https://dsp-api.smartyads.com/api/contextual-targeting' -i -X GET \
-H 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8' \
-d '{}'
23.1.3. Response Body
| Path | Type | Description |
|---|---|---|
data.*.id |
integer |
Target id |
data.*.name |
string |
Target name |
data.*.type |
string |
Target type (web, inApp) |
data.*.rule |
string |
Target rule (include, exclude) |
data.*.userId |
integer |
Target owner user id |
data..keywords..* |
string |
Keyword data |
data.*.iabCategories |
array |
IAB categories array |
data.*.keywordsCount |
integer |
Keywords/categories count |
data..campaigns. |
integer |
Campaign ID |
data.*.createdAt |
datetime |
Created at |
data.*.updatedAt |
datetime |
Updated at |
meta.pagination.total |
integer |
Total items count |
meta.pagination.count |
integer |
Current page items count |
meta.pagination.per_page |
integer |
Items per page |
meta.pagination.current_page |
integer |
Current page number |
meta.pagination.total_pages |
integer |
Total pages count |
meta.pagination.links.prev |
string |
URL to previous page |
meta.pagination.links.next |
string |
URL to next page |
23.1.4. HTTP Response
HTTP/1.0 200 OK
Content-type: application/json
{
"data": [
{
"id": 1,
"name": "Target #1",
"type": "web",
"rule": "include",
"userId": 71,
"keywords": [
[
"keyword1",
"keyword2"
]
],
"iabCategories": [],
"keywordsCount": 2,
"campaigns": [
1,
2
],
"createdAt": "2026-02-20 08:49:30",
"updatedAt": "2026-02-20 08:49:30"
}
],
"meta": {
"pagination": {
"total": 1,
"count": 1,
"per_page": 1000,
"current_page": 1,
"total_pages": 1,
"links": {
"prev": null,
"next": null
}
}
}
}
23.2. Get Contextual Targeting by ID
A `GET` request with Target Id in url will return target details.
23.2.1. HTTP Request
URL
GET api/contextual-targeting/1 HTTP/1.1
HEADER
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
DATA
{}
23.2.2. Curl request
$ curl 'https://dsp-api.smartyads.com/api/contextual-targeting/1' -i -X GET \
-H 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8' \
-d '{}'
23.2.3. Response Body
| Path | Type | Description |
|---|---|---|
data.id |
integer |
Target id |
data.name |
string |
Target name |
data.type |
string |
Target type (web, inApp) |
data.rule |
string |
Target rule (include, exclude) |
data.userId |
integer |
Target owner user id |
data.keywords.. |
string |
Keyword data |
data.iabCategories |
array |
IAB categories array |
data.keywordsCount |
integer |
Keywords/categories count |
data.campaigns.* |
integer |
Campaign ID |
data.createdAt |
datetime |
Created at |
data.updatedAt |
datetime |
Updated at |
23.2.4. HTTP Response
HTTP/1.0 200 OK
Content-type: application/json
{
"data": {
"id": 1,
"name": "Target #1",
"type": "web",
"rule": "include",
"userId": 72,
"keywords": [
[
"keyword1",
"keyword2"
]
],
"iabCategories": [],
"keywordsCount": 2,
"campaigns": [
1,
2
],
"createdAt": "2026-02-20 08:49:30",
"updatedAt": "2026-02-20 08:49:30"
}
}
23.3. Create Contextual Targeting
A `POST` request creates a new contextual targeting rule. Required fields: `name`, `type` (web/inApp), `rule` (include/exclude). Must provide either `keywords` or `iabCategories` (at least one is required).
23.3.1. Request Body
| Path | Type | Description | Required |
|---|---|---|---|
name |
string |
Target name (min 2 chars) |
+ |
type |
string |
Target type (web, inApp) |
+ |
rule |
string |
Target rule (include, exclude) |
+ |
keywords.. |
string |
Keyword data |
|
iabCategories |
array |
IAB categories array (required if keywords empty) |
23.3.2. HTTP Request
URL
POST api/contextual-targeting HTTP/1.1
HEADER
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Content-type: application/x-www-form-urlencoded
DATA
{
"name": "New Target",
"type": "web",
"rule": "include",
"keywords": [
[
"keyword1",
"keyword2"
]
],
"iabCategories": []
}
23.3.3. Curl request
$ curl 'https://dsp-api.smartyads.com/api/contextual-targeting' -i -X POST \
-H 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8' \
-H 'Content-type: application/x-www-form-urlencoded' \
-d '{
"name": "New Target",
"type": "web",
"rule": "include",
"keywords": [
[
"keyword1",
"keyword2"
]
],
"iabCategories": []
}'
23.3.4. Response Body
| Path | Type | Description |
|---|---|---|
message |
string |
Result message |
data.id |
integer |
Target id |
data.name |
string |
Target name |
data.type |
string |
Target type |
data.rule |
string |
Target rule |
data.userId |
integer |
Target owner user id |
data.keywords.. |
string |
Keyword data |
data.iabCategories |
array |
IAB categories array |
data.keywordsCount |
integer |
Keywords/categories count |
data.campaigns |
array |
Array of campaign IDs |
data.createdAt |
datetime |
Created at |
data.updatedAt |
datetime |
Updated at |
23.3.5. HTTP Response
HTTP/1.0 200 OK
Content-type: application/json
{
"message": "Target created.",
"data": {
"id": 1,
"name": "New Target",
"type": "web",
"rule": "include",
"userId": 73,
"keywords": [
[
"keyword1",
"keyword2"
]
],
"iabCategories": [],
"keywordsCount": 2,
"campaigns": [],
"createdAt": "2026-02-20 08:49:30",
"updatedAt": "2026-02-20 08:49:30"
}
}
23.4. Update Contextual Targeting
A `PUT/PATCH` request with Target Id in url will update contextual targeting rule.
23.4.1. Request Body
| Path | Type | Description | Required |
|---|---|---|---|
name |
string |
Target name (min 2 chars) |
+ |
keywords.. |
string |
Keyword data |
23.4.2. HTTP Request
URL
PUT api/contextual-targeting/1 HTTP/1.1
HEADER
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Content-type: application/x-www-form-urlencoded
DATA
{
"name": "Updated Target",
"keywords": [
[
"keyword1",
"keyword2",
"keyword3"
]
]
}
23.4.3. Curl request
$ curl 'https://dsp-api.smartyads.com/api/contextual-targeting/1' -i -X PUT \
-H 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8' \
-H 'Content-type: application/x-www-form-urlencoded' \
-d '{
"name": "Updated Target",
"keywords": [
[
"keyword1",
"keyword2",
"keyword3"
]
]
}'
23.4.4. Response Body
| Path | Type | Description |
|---|---|---|
message |
string |
Result message |
data.id |
integer |
Target id |
data.name |
string |
Target name |
data.type |
string |
Target type |
data.rule |
string |
Target rule |
data.userId |
integer |
Target owner user id |
data.keywords.. |
string |
Keyword data |
data.iabCategories |
array |
IAB categories array |
data.keywordsCount |
integer |
Keywords/categories count |
data.campaigns |
array |
Array of campaign IDs |
data.createdAt |
datetime |
Created at |
data.updatedAt |
datetime |
Updated at |
23.4.5. HTTP Response
HTTP/1.0 200 OK
Content-type: application/json
{
"message": "Target updated.",
"data": {
"id": 1,
"name": "Updated Target",
"type": "web",
"rule": "include",
"userId": 74,
"keywords": [
[
"keyword1",
"keyword2",
"keyword3"
]
],
"iabCategories": [],
"keywordsCount": 3,
"campaigns": [],
"createdAt": "2026-02-20 08:49:30",
"updatedAt": "2026-02-20 08:49:30"
}
}
23.5. Delete Contextual Targeting
A `DELETE` request with Target Id in url will delete contextual targeting rule.
23.5.1. HTTP Request
URL
DELETE api/contextual-targeting/1 HTTP/1.1
HEADER
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Content-type: application/x-www-form-urlencoded
DATA
{}
23.5.2. Curl request
$ curl 'https://dsp-api.smartyads.com/api/contextual-targeting/1' -i -X DELETE \
-H 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8' \
-H 'Content-type: application/x-www-form-urlencoded' \
-d '{}'
23.5.3. Response Body
| Path | Type | Description |
|---|---|---|
message |
string |
Result message |
deleted |
boolean |
Delete result |
23.5.4. HTTP Response
HTTP/1.0 200 OK
Content-type: application/json
{
"message": "Target deleted.",
"deleted": true
}
23.6. Get IAB Categories
A `GET` request will return IAB categories and subcategories dictionary.
23.6.1. HTTP Request
URL
GET api/get-iab-categories HTTP/1.1
HEADER
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
DATA
{}
23.6.2. Curl request
$ curl 'https://dsp-api.smartyads.com/api/get-iab-categories' -i -X GET \
-H 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8' \
-d '{}'
23.6.3. Response Body
| Path | Type | Description |
|---|---|---|
categories.*.id |
string |
Category ID |
categories.*.name |
string |
Category name |
subCategories.*.id |
string |
Subcategory ID |
subCategories.*.parentId |
string |
Parent category ID |
subCategories.*.name |
string |
Subcategory name |
23.6.4. HTTP Response
HTTP/1.0 200 OK
Content-type: application/json
{
"categories": [
{
"id": 1,
"name": "Arts & Entertainment"
},
{
"id": 2,
"name": "Automotive"
}
],
"subCategories": [
{
"id": 101,
"parentId": 1,
"name": "Books & Literature"
},
{
"id": 102,
"parentId": 1,
"name": "Celebrity Fan\/Gossip"
}
]
}
23.7. Search Keywords
A `POST` request searches and returns keyword suggestions based on provided search text. Used for autocomplete when creating contextual targeting rules. Supports language filtering and web/inApp type filtering.
23.7.1. Request Body
| Path | Type | Description | Required |
|---|---|---|---|
searchText |
string |
Search text (min 2, max 255 chars) |
+ |
language |
string |
Language code (optional, 2-10 chars) |
|
type |
string |
Type: web or inApp (optional, default: web) |
23.7.2. HTTP Request
URL
POST api/contextual-targeting/search-keywords HTTP/1.1
HEADER
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Content-type: application/x-www-form-urlencoded
DATA
{
"searchText": "technology",
"language": "en",
"type": "web"
}
23.7.3. Curl request
$ curl 'https://dsp-api.smartyads.com/api/contextual-targeting/search-keywords' -i -X POST \
-H 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8' \
-H 'Content-type: application/x-www-form-urlencoded' \
-d '{
"searchText": "technology",
"language": "en",
"type": "web"
}'
23.7.4. Response Body
| Path | Type | Description |
|---|---|---|
* |
any |
23.7.5. HTTP Response
HTTP/1.0 200 OK
Content-type: application/json
{
"data": [
"technology",
"tech news",
"technology trends",
"tech gadgets"
]
}
24. Geo Dictionaries
24.1. Get list of Countries
A `GET` request returns paginated list of all available countries for geo targeting. Countries are sorted alphabetically by name. Use ISO3 codes for selecting countries in campaigns.
24.1.1. HTTP Request
URL
GET api/geo/countries HTTP/1.1
HEADER
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
DATA
{}
24.1.2. Curl request
$ curl 'https://dsp-api.smartyads.com/api/geo/countries' -i -X GET \
-H 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8' \
-d '{}'
24.1.3. Response Body
| Path | Type | Description |
|---|---|---|
data.*.id |
integer |
Country id |
data.*.country_name |
string |
Country name |
data.*.country_iso2 |
string |
Country ISO2 code |
data.*.country_iso3 |
string |
Country ISO3 code |
meta.pagination.total |
integer |
Total items count |
meta.pagination.count |
integer |
Current page items count |
meta.pagination.per_page |
integer |
Items per page |
meta.pagination.current_page |
integer |
Current page number |
meta.pagination.total_pages |
integer |
Total pages count |
meta.pagination.links.prev |
string |
URL to previous page |
meta.pagination.links.next |
string |
URL to next page |
24.1.4. HTTP Response
HTTP/1.0 200 OK
Content-type: application/json
{
"data": [
{
"id": 1,
"country_name": "Ukraine",
"country_iso2": "UA",
"country_iso3": "UKR"
},
{
"id": 2,
"country_name": "United States",
"country_iso2": "US",
"country_iso3": "USA"
}
],
"meta": {
"pagination": {
"total": 2,
"count": 2,
"per_page": 300,
"current_page": 1,
"total_pages": 1,
"links": {
"prev": null,
"next": null
}
}
}
}
24.2. Get list of Regions
A `GET` request returns list of regions/states for selected countries. Required parameter: `selectedCountries` (comma-separated ISO3 codes). Optional: `selectedRegions` to move already selected regions to the top of the list.
24.2.1. HTTP Request
URL
GET api/geo/regions HTTP/1.1
HEADER
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
DATA
{
"selectedCountries": "USA,UKR",
"selectedRegions": ""
}
24.2.2. Curl request
$ curl 'https://dsp-api.smartyads.com/api/geo/regions' -i -X GET \
-H 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8' \
-d '{
"selectedCountries": "USA,UKR",
"selectedRegions": ""
}'
24.2.3. Response Body
| Path | Type | Description |
|---|---|---|
*.country_iso3 |
any |
|
*.state |
any |
|
*.state_iso2 |
any |
24.2.4. HTTP Response
HTTP/1.0 200 OK
Content-type: application/json
{
"data": [
{
"country_iso3": "USA",
"state": "California",
"state_iso2": "CA"
},
{
"country_iso3": "UKR",
"state": "Kyiv",
"state_iso2": "KV"
}
]
}
24.3. Get list of Cities
A `GET` request returns list of cities for selected countries and optionally filtered by regions. Required: `selectedCountries` (ISO3 codes). Optional: `selectedRegions` (ISO2 codes) to filter cities by regions, `selectedCities` to move already selected cities to the top.
24.3.1. HTTP Request
URL
GET api/geo/cities HTTP/1.1
HEADER
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
DATA
{
"selectedCountries": "USA",
"selectedRegions": "CA",
"selectedCities": ""
}
24.3.2. Curl request
$ curl 'https://dsp-api.smartyads.com/api/geo/cities' -i -X GET \
-H 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8' \
-d '{
"selectedCountries": "USA",
"selectedRegions": "CA",
"selectedCities": ""
}'
24.3.3. Response Body
| Path | Type | Description |
|---|---|---|
*.country_iso3 |
any |
|
*.state |
any |
|
*.state_iso2 |
any |
|
*.city_name |
any |
|
*.geoname_id |
any |
24.3.4. HTTP Response
HTTP/1.0 200 OK
Content-type: application/json
{
"data": [
{
"country_iso3": "USA",
"state": "California",
"state_iso2": "CA",
"city_name": "Los Angeles",
"geoname_id": "5368361"
},
{
"country_iso3": "USA",
"state": "California",
"state_iso2": "CA",
"city_name": "San Francisco",
"geoname_id": "5391959"
}
]
}
25. Conversion Pixels
25.1. Get list of Conversion Pixels
A `GET` request returns paginated list of conversion pixels owned by current user. Conversion pixels track user actions (conversions) and can be attached to campaigns for optimization.
25.1.1. HTTP Request
URL
GET api/conversion-pixel HTTP/1.1
HEADER
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
DATA
{}
25.1.2. Curl request
$ curl 'https://dsp-api.smartyads.com/api/conversion-pixel' -i -X GET \
-H 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8' \
-d '{}'
25.1.3. Response Body
| Path | Type | Description |
|---|---|---|
data.*.id |
integer |
Conversion pixel id |
data.*.isActive |
boolean |
Is active |
data.*.userId |
integer |
User id |
data.*.name |
string |
Conversion pixel name |
data.*.conversionType |
string |
Conversion type |
data.*.repeatConversionsType |
string |
Repeat conversions type |
data.*.frequency |
integer |
Frequency |
data.*.code |
string |
Pixel code |
data.*.createdAt |
datetime |
Created at |
data.*.updatedAt |
datetime |
Updated at |
meta.pagination.total |
integer |
Total items count |
meta.pagination.count |
integer |
Current page items count |
meta.pagination.per_page |
integer |
Items per page |
meta.pagination.current_page |
integer |
Current page number |
meta.pagination.total_pages |
integer |
Total pages count |
meta.pagination.links.prev |
string |
URL to previous page |
meta.pagination.links.next |
string |
URL to next page |
25.1.4. HTTP Response
HTTP/1.0 200 OK
Content-type: application/json
{
"data": [
{
"id": 1,
"isActive": true,
"userId": 78,
"name": "Conversion Pixel #1",
"conversionType": "postback",
"repeatConversionsType": "once",
"frequency": 0,
"code": "pixel-code-123",
"createdAt": "2026-02-20 08:49:31",
"updatedAt": "2026-02-20 08:49:31"
}
],
"meta": {
"pagination": {
"total": 1,
"count": 1,
"per_page": 100,
"current_page": 1,
"total_pages": 1,
"links": {
"prev": null,
"next": null
}
}
}
}
25.2. Get Conversion Pixel by ID
A `GET` request with Conversion Pixel Id in url will return pixel details.
25.2.1. HTTP Request
URL
GET api/conversion-pixel/1 HTTP/1.1
HEADER
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
DATA
{}
25.2.2. Curl request
$ curl 'https://dsp-api.smartyads.com/api/conversion-pixel/1' -i -X GET \
-H 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8' \
-d '{}'
25.2.3. Response Body
| Path | Type | Description |
|---|---|---|
id |
integer |
Conversion pixel id |
isActive |
boolean |
Is active |
userId |
integer |
User id |
name |
string |
Conversion pixel name |
conversionType |
string |
Conversion type |
repeatConversionsType |
string |
Repeat conversions type |
frequency |
integer |
Frequency |
code |
string |
Pixel code |
createdAt |
datetime |
Created at |
updatedAt |
datetime |
Updated at |
25.2.4. HTTP Response
HTTP/1.0 200 OK
Content-type: application/json
{
"id": 1,
"isActive": true,
"userId": 79,
"name": "Conversion Pixel #1",
"conversionType": "postback",
"repeatConversionsType": "once",
"frequency": 0,
"code": "pixel-code-123",
"createdAt": "2026-02-20 08:49:31",
"updatedAt": "2026-02-20 08:49:31"
}
25.3. Create Conversion Pixel
A `POST` request creates a new conversion pixel. Required fields: `name`, `conversionType`, `repeatConversionsType`. Pixel will be owned by current authenticated user and can be attached to campaigns.
25.3.1. Request Body
| Path | Type | Description | Required |
|---|---|---|---|
name |
string |
Conversion pixel name |
+ |
isActive |
boolean |
Is active |
|
conversionType |
string |
Conversion type |
+ |
repeatConversionsType |
string |
Repeat conversions type |
+ |
frequency |
integer |
Frequency |
|
code |
string |
Pixel code |
25.3.2. HTTP Request
URL
POST api/conversion-pixel HTTP/1.1
HEADER
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Content-type: application/x-www-form-urlencoded
DATA
{
"name": "New Conversion Pixel",
"isActive": true,
"conversionType": "postback",
"repeatConversionsType": "once",
"frequency": 0,
"code": "pixel-code-456"
}
25.3.3. Curl request
$ curl 'https://dsp-api.smartyads.com/api/conversion-pixel' -i -X POST \
-H 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8' \
-H 'Content-type: application/x-www-form-urlencoded' \
-d '{
"name": "New Conversion Pixel",
"isActive": true,
"conversionType": "postback",
"repeatConversionsType": "once",
"frequency": 0,
"code": "pixel-code-456"
}'
25.3.4. Response Body
| Path | Type | Description |
|---|---|---|
id |
integer |
Conversion pixel id |
isActive |
boolean |
Is active |
userId |
integer |
User id |
name |
string |
Conversion pixel name |
conversionType |
string |
Conversion type |
repeatConversionsType |
string |
Repeat conversions type |
frequency |
integer |
Frequency |
code |
string |
Pixel code |
createdAt |
datetime |
Created at |
updatedAt |
datetime |
Updated at |
25.3.5. HTTP Response
HTTP/1.0 200 OK
Content-type: application/json
{
"id": 1,
"isActive": true,
"userId": 80,
"name": "New Conversion Pixel",
"conversionType": "postback",
"repeatConversionsType": "once",
"frequency": 0,
"code": "pixel-code-456",
"createdAt": "2026-02-20 08:49:31",
"updatedAt": "2026-02-20 08:49:31"
}
25.4. Update Conversion Pixel
A `PUT/PATCH` request with Conversion Pixel Id in url will update pixel.
25.4.1. Request Body
| Path | Type | Description | Required |
|---|---|---|---|
name |
string |
Conversion pixel name |
|
isActive |
boolean |
Is active |
25.4.2. HTTP Request
URL
PUT api/conversion-pixel/1 HTTP/1.1
HEADER
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Content-type: application/x-www-form-urlencoded
DATA
{
"name": "Updated Conversion Pixel",
"isActive": false
}
25.4.3. Curl request
$ curl 'https://dsp-api.smartyads.com/api/conversion-pixel/1' -i -X PUT \
-H 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8' \
-H 'Content-type: application/x-www-form-urlencoded' \
-d '{
"name": "Updated Conversion Pixel",
"isActive": false
}'
25.4.4. Response Body
| Path | Type | Description |
|---|---|---|
id |
integer |
Conversion pixel id |
isActive |
boolean |
Is active |
userId |
integer |
User id |
name |
string |
Conversion pixel name |
conversionType |
string |
Conversion type |
repeatConversionsType |
string |
Repeat conversions type |
frequency |
integer |
Frequency |
code |
string |
Pixel code |
createdAt |
datetime |
Created at |
updatedAt |
datetime |
Updated at |
25.4.5. HTTP Response
HTTP/1.0 200 OK
Content-type: application/json
{
"id": 1,
"isActive": false,
"userId": 81,
"name": "Updated Conversion Pixel",
"conversionType": "postback",
"repeatConversionsType": "once",
"frequency": 0,
"code": "pixel-code-456",
"createdAt": "2026-02-20 08:49:31",
"updatedAt": "2026-02-20 08:49:31"
}
25.5. Delete Conversion Pixel
A `DELETE` request with Conversion Pixel Id and Campaign Id in url will delete pixel.
25.5.1. HTTP Request
URL
DELETE api/conversion-pixel/1/1 HTTP/1.1
HEADER
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Content-type: application/x-www-form-urlencoded
DATA
{}
25.5.2. Curl request
$ curl 'https://dsp-api.smartyads.com/api/conversion-pixel/1/1' -i -X DELETE \
-H 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8' \
-H 'Content-type: application/x-www-form-urlencoded' \
-d '{}'
25.5.3. Response Body
| Path | Type | Description |
|---|---|---|
deleted |
boolean |
Delete result |
25.5.4. HTTP Response
HTTP/1.0 200 OK
Content-type: application/json
{
"deleted": true
}
Request validation list
Campaign.contentCategories
-
IAB1
-
IAB2
-
IAB3
-
IAB4
-
IAB5
-
IAB6
-
IAB7
-
IAB8
-
IAB9
-
IAB10
-
IAB11
-
IAB12
-
IAB13
-
IAB14
-
IAB15
-
IAB16
-
IAB17
-
IAB18
-
IAB19
-
IAB20
-
IAB21
-
IAB22
-
IAB23
Campaign.type
-
banner
-
native
-
video
-
audio
Campaign.connectionTypes
-
wifi
-
ethernet
-
cellular_all
-
cellular_all
-
cellular_3g
-
cellular_4g
-
cellular_5g
Campaign.geoCountries
-
Use GET /geo/countries
-
Use response field: iso3
Campaign.geoRegions
-
Use GET /geo/regions?selectedCountries=USA,CAN
-
Use response field: state_iso2
Campaign.geoCities
-
Use GET /geo/cities?selectedCountries=USA&selectedRegions=US-CA
-
Use response field: geoname_id
Campaign.OS
-
Android
-
Android 8.0
-
Android 8.1
-
Android 9.0
-
Android 10.0
-
Android 11.0
-
Android 12.0
-
Android 13.0
-
Android 14.0
-
Android 15.0
-
iOS
-
iOS 10.0
-
iOS 10.1
-
iOS 10.2
-
iOS 10.3
-
iOS 11.0
-
iOS 11.1
-
iOS 11.2
-
iOS 11.3
-
iOS 11.4
-
iOS 12.0
-
iOS 12.1
-
iOS 12.2
-
iOS 12.3
-
iOS 12.4
-
iOS 12.5
-
iOS 13.0
-
iOS 13.1
-
iOS 13.2
-
iOS 13.3
-
iOS 13.4
-
iOS 13.5
-
iOS 13.6
-
iOS 13.7
-
iOS 14.0
-
iOS 14.1
-
iOS 14.2
-
iOS 14.3
-
iOS 14.4
-
iOS 14.5
-
iOS 14.6
-
iOS 14.7
-
iOS 14.8
-
iOS 15.0
-
iOS 15.1
-
iOS 15.2
-
iOS 15.3
-
iOS 15.4
-
iOS 15.5
-
iOS 15.6
-
iOS 15.7
-
iOS 15.8
-
iOS 16.0
-
iOS 16.1
-
iOS 16.2
-
iOS 16.3
-
iOS 16.4
-
iOS 16.5
-
iOS 16.6
-
iOS 16.7
-
iOS 17.0
-
iOS 17.1
-
iOS 17.2
-
iOS 17.3
-
iOS 17.4
-
iOS 17.5
-
iOS 17.6
-
iOS 17.7
-
iOS 18.0
-
iOS 18.1
-
iOS 18.2
-
iOS 18.3
-
iOS 18.4
-
iOS 18.5
-
iOS 18.6
-
iOS 18.7
-
iOS 26.0
-
iOS 26.1
-
iOS 26.2
-
Mac OS
-
Mac OS 10.1
-
Mac OS 10.2
-
Mac OS 10.3
-
Mac OS 10.4
-
Mac OS 10.5
-
Mac OS 10.6
-
Mac OS 10.7
-
Mac OS 10.8
-
Mac OS 10.9
-
Mac OS 10.10
-
Mac OS 10.11
-
Mac OS 10.12
-
Mac OS 10.13
-
Mac OS 10.14
-
Mac OS 10.15
-
Mac OS 11.0
-
Mac OS 11.1
-
Mac OS 11.2
-
Mac OS 11.3
-
Mac OS 11.4
-
Mac OS 11.5
-
Mac OS 11.6
-
Mac OS 12.0
-
Mac OS 12.1
-
Mac OS 12.2
-
Mac OS 12.3
-
Mac OS 12.4
-
Mac OS 12.5
-
Mac OS 12.6
-
Mac OS 13.0
-
Mac OS 13.1
-
Mac OS 13.2
-
Mac OS 13.3
-
Mac OS 13.4
-
Mac OS 13.5
-
Mac OS 13.6
-
Mac OS 14.0
-
Mac OS 14.1
-
Mac OS 14.2
-
Mac OS 14.3
-
Mac OS 14.4
-
Mac OS 14.5
-
BlackBerry
-
Linux
-
Windows
-
Windows 8.1
-
Windows 10
-
Windows 11
-
Windows Mobile
-
Symbian
-
Symbian 9.1
-
Symbian 9.2
-
Symbian 9.3
-
Symbian 9.4
Campaign.browser
-
Chrome
-
Edge
-
IE
-
Safari
-
Mozilla
-
Opera
-
UCBrowser
-
Yandex
Campaign.deviceLanguage
-
ab
-
aa
-
af
-
sq
-
am
-
ar
-
an
-
hy
-
as
-
ay
-
az
-
ba
-
eu
-
bn
-
dz
-
bh
-
bi
-
br
-
bg
-
my
-
be
-
km
-
ca
-
zh
-
zh-Hans
-
zh-Hant
-
co
-
hr
-
cs
-
da
-
nl
-
en
-
eo
-
et
-
fo
-
fa
-
fj
-
fi
-
fr
-
fy
-
gl
-
gd
-
gv
-
ka
-
de
-
el
-
kl
-
gn
-
gu
-
ht
-
ha
-
he
-
iw
-
hi
-
hu
-
is
-
io
-
id
-
in
-
ia
-
ie
-
iu
-
ik
-
ga
-
it
-
ja
-
jv
-
kn
-
ks
-
kk
-
rw
-
ky
-
rn
-
ko
-
ku
-
lo
-
la
-
lv
-
li
-
ln
-
lt
-
mk
-
mg
-
ms
-
ml
-
mt
-
mi
-
mr
-
mo
-
mn
-
na
-
ne
-
no
-
oc
-
or
-
om
-
ps
-
pl
-
pt
-
pa
-
qu
-
rm
-
ro
-
ru
-
sm
-
sg
-
sa
-
sr
-
sh
-
st
-
tn
-
sn
-
ii
-
sd
-
si
-
ss
-
sk
-
sl
-
so
-
es
-
su
-
sw
-
sv
-
tl
-
tg
-
ta
-
tt
-
te
-
th
-
bo
-
ti
-
to
-
ts
-
tr
-
tk
-
tw
-
ug
-
uk
-
ur
-
uz
-
vi
-
vo
-
wa
-
cy
-
wo
-
xh
-
yi
-
ji
-
yo
-
zu
Campaign.extention.deviceVendor
-
acer
-
alcatel
-
alcatel one touch
-
amazon
-
apple
-
asus
-
dell
-
google
-
htc
-
huawei
-
lenovo
-
lg
-
motorola
-
oneplus
-
rca
-
samsung
-
sony
-
sony ericsson
-
verizon
-
xiaomi
-
zte
Campaign.budgetUse
-
fast
-
pacer
Campaign.frequencyType
-
user
-
ip