Campaigns Creation API (V 2.1.18)

Introduction 

The Advertiser Campaign API allows you to instantly create and update your campaigns through direct communication between your system and Start.io (Formerly StartApp) advertising platform.
The Campaign API allows you to easily manage your campaigns with no need to login to the Start.io ( Formerly StartApp) portal.
The API conforms to the RESTful design principles. Advertisers interact with the resources exposed via the API by accessing resource collection and element URIs using the HTTP verbs (GET, POST, and PUT). Advertiser Campaign API accepts and returns only JSON data.
In order to use Start.io's campaign creation API, please create your account on Start.io's portal , an API token will be provided by your Account Manager. You will be requested to provide your server’s IP address.
Note that in case of a request error you will receive an error id. Please save this id as you will be requested to provide it to our support.

Read Campaigns - HTTP GET

URL: https://api.start.io/adv/campaign/1.0?partner=accountId&token=accountToken

Headers:

Header Value Mandatory Description
Accept-Encoding gzip no Compress response data in gzip format. ‘Content-Encoding:gzip’ header will be added to the response headers.

Parameters:
You can choose to get specific campaigns on the API:

Field Description Type Mandatory Values
campaignId Get campaign by
campaign id
number no Campaign id.
For example: 3123456
status Get campaigns by status s array no draft, pending, paused, active,
denied, archived
default: all
limit Limit of the
total campaigns
presented
number no 1-200
default: 200


Read Examples:
Get campaigns 3000607:
https://api.start.io/adv/campaign/1.0?partner=accountId&token=accountToken&campaig
nId=3000607
Get last updated 200 paused and active campaigns:
https://api.start.io/adv/campaign/1.0?partner=accountId&token=accountToken&status=
paused,active&limit=200
Get last updated 100 campaigns:
https://api.start.io/adv/campaign/1.0?partner=accountId&token=accountToken&
limit=100

Get Campaigns Ids - HTTP GET

Get all campaigns ids.

URL:
https://api.start.io/adv/campaign/1.0/campaigns?partner=accountId&token=accountT
oken

Response: Array<JSON>

Get specific campaigns by campaigns Ids - HTTP POST

URL:
https://api.start.io/adv/campaign/1.0/campaigns?partner=accountId&token=accountT
oken

Header: Content-Type: application/json

Body: JSON

Field Description Type Mandatory Values
campaignId Requested campaign IDs.
maximum 200 campaigns
Array<string> yes For example:
[“311111”, “3222222”]

Result: Array<JSON>

{
  "campaignId": [
    "3111111",
    "3222222",
    "333333"
  ]
}

Create campaign - HTTP POST:

URL: https://api.start.io/adv/campaign/1.0?partner=accountId&token=accountToken
Header: Content-Type: application/json
Body: JSON
Result: JSON:

i. Success message containing generated campaign Id:

{
  "success": true,
  "campaignId": "3123456"
}

ii. Error message containing description:

{
  "success": false,
  "message": "Create campaign error: 'This campaign name already exists on your account'"
}

JSON Structure

Campaign Type

Field Description Type Mandatory Values
destinationUrl App link from Google Play or App store url  yes  
Platform  App platform  string no  ios, android
default: automatic 
category The category of theapp string   Only for web
destinationUrl 
See in this list

 

Campaign Info

Field Description Type Mandatory Values
name Campaign name url  yes  
startDate Start date of the
campaign
date  no  default: now
hasStartTime Use the time from
startDate
boolean  no  true, false
default: false
endDate End date of the campaign date  no  
hasEndTime Use the time from
endDate
boolean  no  true, false
default: false
dayParting Select specific days and/or hours for your campaign to run.
All selected times are in GMT.
Please note:selected times refer to
the ad request time, and not necessarily the impression time
array<dayParting>  no See Day Parting table

 

Day Parting

Field Description Type Mandatory Values
from  Start time date no  
to  End time date no  
day The day for this day parting string no all_week, sunday, monday, tuesday, wednesday, thursday, friday, Saturday

 

Targeting

Geo - countries

Field Description Type Mandatory Values
exclude  When exclude=false,
the values are a white list (target only specific geos); when exclude=true, the values are a black list (target all geos except the specified)
boolean no true, false
default: false
value Array of countries array< countryKey> no See Country Object table
default: [] (all countries)

 

Country Object

Field Description Type Mandatory Values
countryKey  Add a country or list of countries to the white
or black list
string no Country key according to ISO 3166-1 alpha-2

Currently, the API does not support City and Carrier targeting.

 

Device

Field Description Type Mandatory Values
connectionType Target by Connection Type string no ALL, WIFI, NO_WIFI
default: ALL 
osVersion Target by Max./Min. OS version object  no  
deviceType Target by Device Type string no all, mobile, tablet
default: all

 

OS Version

Field Description Type Mandatory Values
max.versionName Target the maximum OS version  string no default: all
min.versionName Target the minimum OS version  string no default: all

Currently, the API does not support Device Manufacturer and Device Language targeting.

 

Optimization

Field Description Type Mandatory
devId Target specific publishers or block specific publishers from displaying your ads by adding their publisher IDs to the Whitelist or Blacklist object  no
appId Target specific apps or block specific apps from displaying your ads by adding their App IDs to the Whitelist or Blacklist object  no
publisher
AppCate
gory
Target your campaign only to apps with specific app categories.
Please note that choosing specific categories might severely reduce the amount of traffic your campaign will receive
object  no
channels Target the traffic source for your campaign object  no
bundleId Target specific package / bundle or block specific package / bundle from displaying your ads by adding their bundle IDs to the Whitelist or Blacklist object  no

Publisher ID (devId)

Field Description Type Mandatory Values
exclude When exclude=false, the values are a whitelist (target only specific publisher IDs);
when exclude=true, the values are a blacklist (target all Publisher iDs except the specified)
boolean no true, false
 value List of publisher IDs to white/blacklist  array<string> no  

App ID (appId)

Field Description Type Mandatory Values
 exclude When exclude=false, the values are a
whitelist (target only specific App IDs);
when exclude=true, the values are a
blacklist (target all App IDs except the
specified)
 boolean  no  true, false
 value  List of app IDs to white/blacklist  array<string>  no  

Publisher App Category

Field Description Type Mandatory Values
exclude When exclude=false, the values are a whitelist(target only specific publisher
app categories);
when exclude=true,
the values are a black list (target all
publisher app categories except the
specified)
boolean no true, false
value List of publisher app categories to white/black list array<string>  no See categories options
default: [] (all)

Bundle IDs

Field Description Type Mandatory Values
exclude When exclude=false, the values are a
white list (target only specific bundle
ID);
when exclude=true, the values are a black list (target all bundle IDs except the specified)
boolean no true, false
exclude List of bundle IDs to white/black list array<string> no Example:
‘com.google.andr
oid.gm’.
default: [] (all)

Channels

Field Description Type Mandatory Values
value  List of supported channels  array<string> no sdk,
programmatic
default: [] (all)

Audience

Field Description Type Mandatory Values
targetAdv
ertiserId
When targetAdvertiserId=true,
the campaign will be limited to users who allow us to collect their
advertiser ID. This will require you to user our advertising ID macro
(startapp_advertising_id) in your tracking links
Boolean no true,false 

Ad Types

Field Description Type Mandatory Values
adTypes

List of Ad Types you can target

array<string> no fullPage, appWall,
smallBanner, bigBanner
default: [] (all)

Budget & Bid

Field Description Type Mandatory Values
totalBudget The total budget of the campaign,lifetime, accumulated number no default: unlimited
dailyBudget The daily budget of the campaign.
Please note that daily spend may
reach up to 20% over your daily budget
number no default: unlimited
pricingModel The pricing model of the campaign  string  yes CPC, CPM
bidPrice The bid price of the campaign. The minimum bid is set according to the targeting you specified.
Please note that minimum bids may vary
from time to time 
number yes  

Creative

Field Description Type Mandatory Values
name The Creative name, for
your personal use
string yes  
url Valid tracking URL to your
designated landing page
url yes  
images  The creative image files.
See Guidelines here
array<image> yes (except
rich text)
 
creativeType  The type of the Creative  string yes  banner,
interstitial,
richText 

Image Object

Field Description Type Mandatory Values
url The URL of the creative image, the API
will download and save it 
url yes  

Custom Fields

(optional) A free-form field for your own use. You can specify up to 2 custom fields.

Character length and limitations: value can contain only letters and numbers, up to 200
characters.

Create Examples:

Only mandatory fields:

{
  "campaignType": {
    "destinationUrl": "https://play.google.com/store/apps/details?id=com.gamehour.barcaDash"
  },
  "campaignInfo": {
    "name": "Barca50"
  },
  "budget": {
    "pricingModel": "CPC",
    "bidPrice": 0.008
  },
  "creativeList": [
    {
      "name": "Banner 1",
      "url": "https://play.google.com/store/apps/details?id=com.mcentric.mcclient.FCBWorld",
      "creativeType": "banner",
      "images": [
        {
          "url": "http://dummyimage.com/320x50/000/fff.png&text=Barca"
        }
      ]
    }
  ]
}

Add targeting to US:

{
  "campaignType": {
    "destinationUrl": "https://play.google.com/store/apps/details?id=com.gamehour.barcaDash"
  },
  "campaignInfo": {
    "name": "Barca51"
  },
  "budget": {
    "pricingModel": "CPC",
    "bidPrice": 0.03
  },
  "targeting": {
    "geo": {
      "countries": {
        "exclude": false,
        "value": [
          {
            "countryKey": "US"
          }
        ]
      }
    }
  },
  "creativeList": [
    {
      "name": "Banner 1",
      "url": "https://play.google.com/store/apps/details?id=com.mcentric.mcclient.FCBWorld",
      "creativeType": "banner",
      "images": [
        {
          "url": "http://dummyimage.com/320x50/000/fff.png&text=Barca"
        }
      ]
    }
  ]
}

Add targeting to the programmatic channel:

{
  "campaignType": {
    "destinationUrl": "https://play.google.com/store/apps/details?id=com.gamehour.barcaDash"
  },
  "campaignInfo": {
    "name": "Barca51"
  },
  "budget": {
    "pricingModel": "CPC",
    "bidPrice": 0.03
  },
  "targeting": {
    "optimization": {
      "channels": {
        "value": [
          "programmatic"
        ]
      }
    }
  },
  "creativeList": [
    {
      "name": "Banner 1",
      "url": "https://play.google.com/store/apps/details?id=com.mcentric.mcclient.FCBWorld",
      "creativeType": "banner",
      "images": [
        {
          "url": "http://dummyimage.com/320x50/000/fff.png&text=Barca"
        }
      ]
    }
  ]
}

Web campaign:

{
  "campaignType": {
    "destinationUrl": "https://www.2chef.co.il",
    "category": "Business",
    "platform": "android"
  },
  "campaignInfo": {
    "name": "2 chef"
  },
  "budget": {
    "pricingModel": "CPC",
    "bidPrice": 0.008
  },
  "creativeList": [
    {
      "name": "Banner 1",
      "url": "https://www.2chef.co.il",
      "creativeType": "banner",
      "images": [
        {
          "url": "http://dummyimage.com/320x50/000/fff.png&text=2chef"
        }
      ]
    }
  ]
}

Request example with most targeting options:


{
  "campaignType": {
    "destinationUrl": "https://play.google.com/store/apps/details?id=com.gamehour.barcaDash"
  },
  "campaignInfo": {
    "name": "Barca56",
    "startDate": "2018-01-26",
    "endDate": "2018-02-28T08:00",
    "hasEndTime": true,
    "dayParting": [
      {
        "from": "2018-01-25T01:00",
        "to": "2018-01-25T22:00",
        "day": "sunday"
      },
      {
        "from": "2018-01-25T02:00",
        "to": "2018-01-25T03:00",
        "day": "saturday"
      }
    ]
  },
  "targeting": {
    "geo": {
      "countries": {
        "exclude": false,
        "value": [
          {
            "countryKey": "US"
          }
        ]
      }
    },
    "device": {
      "connectionType": "WIFI",
      "osVersion": {
        "max": {
          "versionName": "All"
        },
        "min": {
          "versionName": "5.1"
        }
      },
      "deviceType": "mobile"
    },
    "optimization": {
      "devId": {
        "exclude": false,
        "value": [
          "104111111",
          "104222222",
          "104333333"
        ]
      },
      "appId": {
        "exclude": true,
        "value": [
          "212111111",
          "212222222",
          "212333333"
        ]
      },
      "publisherAppCategory": {
        "exclude": true,
        "value": [
          "Education",
          "Business"
        ]
      }
    },
    "placements": {
      "adTypes": [
        "fullPage",
        "appWall",
        "smallBanner"
      ]
    }
  },
  "budget": {
    "bidPrice": 2.5,
    "pricingModel": "CPM",
    "dailyBudget": 60,
    "totalBudget": 10000
  },
  "creativeList": [
    {
      "name": "My Banner Creative",
      "url": "https://play.google.com/store/apps/details?id=com.mcentric.mcclient.FCBWorld",
      "creativeType": "banner",
      "images": [
        {
          "url": "http://dummyimage.com/320x50/000/fff.png&text=Barca"
        }
      ]
    },
    {
      "name": "My Rich Text Creative",
      "creativeType": "richText",
      "url": "https://play.google.com/store/apps/details?id=com.mcentric.mcclient.FCBWorld"
    },
    {
      "name": "My Interstitial Creative",
      "creativeType": "interstitial",
      "url": "https://play.google.com/store/apps/details?id=com.mcentric.mcclient.FCBWorld",
      "images": [
        {
          "url": "http://dummyimage.com/320x480/000/fff.png&text=Barca"
        },
        {
          "url": "http://dummyimage.com/480x320/000/fff.png&text=Barca"
        }
      ]
    }
  ],
  "customFields": {
    "customField1": "somefield",
    "customField2": "anotherfield"
  }
}

 

Targeting Categories

Value list for targeting.optimization.publisherAppCategory.value

Android Categories:

Other,
Books & Reference,
Business,
Comics,
Communication,
Education,
Entertainment,
Finance,
Health & Fitness,
Libraries & Demo,
Lifestyle,
Medical,
Music & Audio,
News & Magazines,
Personalization,
Photography,
Productivity,
Shopping,
Social,
Sports,
Tools,
Travel & Local,
Weather,
GAME_ACTION,
GAME_ADVENTURE,
GAME_ARCADE,
GAME_BOARD,
GAME_CARD,
GAME_CASINO,
GAME_CASUAL,
GAME_EDUCATIONAL,
GAME_MUSIC,
GAME_PUZZLE,
GAME_RACING,
GAME_ROLE_PLAYING,
GAME_SIMULATION,
GAME_SPORTS,
GAME_STRATEGY,
GAME_TRIVIA,
GAME_WORD,
FAMILY_EDUCATION,
Art & Design,
Auto & Vehicles,
Beauty,
Dating,
Events,
House & Home,
Maps & Navigation,
Parenting,
Video Players & Editors,
Food & Drink

iOS Categories:

Other,
Books,
Business,
Catalogs,
Education,
Entertainment,
Finance,
Food & Drink,
Games,
Health & Fitness,
Lifestyle,
Medical,
Music,
Navigation,
News,
Photo & Video,
Productivity,
Reference,
Social Networking,
Sports,
Travel,
Utilities,
Weather,
Shopping,
Magazines & Newspapers,
Stickers

Creative Guidelines

Android

Creative Ad type Dimensions in pixels (limit file size in KB)
Banner smallBanner

300X50(150), 320X50(150), 480X32(150), 728X90(150), 468X60(150), 1024X90(150), 1200X628(250), 1200X627(250)

  bigBanner 300x250(150)
Interstitial fullPage 320X480(150), 768X1024(250) for portrait
480X320(150), 1024X768 (250) for landscape
  appWall 320X480(150), 768X1024(250) for portrait
480X320(150), 1024X768 (250) for landscape
Rich Text smallBanner

160x160(100), 175x175(100), 180x180(150), 300x300(150), 512x512(200), 1024x1024(400)

  fullPage

160x160(100), 175x175(100), 180x180(150), 300x300(150), 512x512(200), 1024x1024(400)

  largeBanner

1200X628(250), 1200X627(250)

  appWall

160x160(100), 175x175(100), 180x180(150), 300x300(150), 512x512(200), 1024x1024(400)

Video Video file

MP4 & webm. Up to 100MB

  Post Roll Image

any size. Up to 250KB

 

iOS

Creative Ad Type Dimensions in pixels (limit file size in KB)
Banner smallBanner 300X50(150), 300X250(150), 320X50(150), 480X32(150), 728X90 (150), 468X60(150), 1024X90 (150), 1200X628(250), 1200X627 (250).
Interstitial fullPage 320X480(150), 768X1024(250) for portrait
480X320(150), 1024X768 (250) for landscape
Rich Text smallBanner

160x160(100), 175x175(100), 300x300(150), 512x512(200), 1024x1024(400)

  fullPage

160x160(100), 175x175(100), 300x300(150), 512x512(200), 1024x1024(400)

  largeBanner

1200X628(250), 1200X627(250)

Video Video file

MP4 & webm. Up to 100MB

  Post Roll Image

any size. Up to 250KB

File extensions: jpg, jpeg, gif, png

Update campaign/creative - HTTP PUT:

URL: https://api.start.io/adv/campaign/1.0?partner=accountId&token=accountToken
Header: Content-Type: application/json
Body: Same as Create campaign (POST) + add campaignId (In the JSON)
Result: JSON (same as create):

Success message containing generated campaign Id:

{
  "success": true,
  "campaignId": "3123456"
}

Error message containing description:

{
  "success": false,
  "message": "Create campaign error: 'This campaign name already exists on your account"
}

Update Examples

Update campaign status:

{
  "campaignId": "3123456",
  "status": "paused"
} 

Update campaign name for example:

{
  "campaignId": "3123456",
  "campaignInfo": {
    "name": "New campaign name"
  }
}

Update end date:

{
  "campaignId": "3123456",
  "campaignInfo": {
    "endDate": "2018-03-18"
  }
}

Update creative name for example:

{
  "campaignId": "3123456",
  "creativeList": [
    {
      "creativeId": "4123",
      "name": "New creative name"
    }
  ]
}

Change day parting (will overwrite the old one):

{
  "campaignId": "3123456",
  "campaignInfo": {
    "dayParting": [
      {
        "from": "2018-04-20T10:00",
        "to": "2018-04-20T14:00",
        "day": "monday"
      }
    ]
  }
}

Change countries in targeting (will overwrite the old one):

{
  "campaignId": "3123456",
  "targeting": {
    "geo": {
      "countries": {
        "value": [
          {
            "countryKey": "ES"
          },
          {
            "countryKey": "TW"
          },
          {
            "countryKey": "NZ"
          }
        ]
      }
    }
  }
}

Update max OS version:

{
  "campaignId": "3123456",
  "targeting": {
    "device": {
      "osVersion": {
        "max": {
          "versionName": "5.1"
        }
      }
    }
  }
}

Remove OS version targeting form campaign:

{
  "campaignId": "3123456",
  "targeting": {
    "device": {
      "osVersion": null
    }
  }
}

Update daily budget:

{
  "campaignId": "3123456",
  "budget": {
    "dailyBudget": 318
  }
}

Add creative:

{
  "campaignId": "3123456",
  "creativeList": [
    {
      "url": "https://play.google.com/store/apps/details?id=com.mcentric.mcclient.FCBWorld",
      "images": [
        {
          "url": "http://dummyimage.com/320x50/000/fff.png&text=Barca"
        }
      ],
      "creativeType": "banner",
      "name": "My new creative"
    }
  ]
}

Update creative status (you must send creativeId):

{
  "campaignId": "3123456",
  "creativeList": [
    {
      "creativeId": "41440",
      "status": "paused"
    }
  ]
}

Update creative image (You must send creativeId and URL of the image that you want to update according to the read API):

{
  "campaignId": "3123456",
  "creativeList": [
    {
      "creativeId": "41443",
      "images": [
        {
          "url": "http://dummyimage.com/480x320/000/fff.png&text=Barca5"
        },
        {
          "url": "http://dummyimage.com/480x320/000/fff.png&text=Barca2"
        }
      ]
    }
  ]
}

Please note that updating a creative image URL or tracking URL will require re-approval of your creative. If you wish to update your creative name only, you may pass only the name value on the JSON, or make sure to use the exact same tracking URL and/or Image URL (as generated by Start.io's (Formerly StartApp) servers and may be extracted on the "read" campaigns API).

Was this article helpful?
Have more questions? submit a request