campaigns

Create Campaign

Create a new campaign.

post/api/v1/campaigns

Request

  • Base URL: https://app.kaminari.ad
  • URL: https://app.kaminari.ad/api/v1/campaigns
  • Auth: HTTP bearer

Request body

namestring required
campaign_typestring
urlstring uri nullable
ad_tagstring nullable

Ad tag to check: an HTML snippet OR an http(s) URL of a page with the creative already rendered. Required for ad_tag campaigns.

vast_tagstring nullable

VAST video tag: an http(s) URL of a VAST endpoint OR raw VAST XML. Required for vast campaigns.

referrerstring uri nullable

Optional http(s) page URL every scan of this campaign is checked from. For ad_tag and vast campaigns it is the page the tag is embedded in: the browser commits the harness document on this URL without fetching the publisher, so the creative is embedded exactly as it would be on that page. For url and ad_discovery campaigns it is where the visitor came from and travels as the Referer of the page request. Cross-origin subrequests receive the origin only (https://publisher.example/, no path) under Chromium's default strict-origin-when-cross-origin policy — same as on a real publisher. Must be a publicly routable host, carry no credentials, and stay within 2048 characters once normalised.

ignore_first_n_domainsinteger

Skips detection and tagging on the first N unique domains of the redirect chain, counted from the entry point. Use it to exclude your own click/tracking domains so they don't trigger tags or alerts. Domains fold to their registrable form, so www.example.com and example.com count as one. Any other request to one of those domains is excluded too, wherever in the page it was made from. Default 0 (nothing skipped). Maximum 5.

max_discovered_adsinteger nullable

How many ad blocks to look for on each publisher page before stopping. Each detected ad becomes its own scan with its own report, and is billed as a separate check. Only valid when campaign_type is 'ad_discovery'. Omit to use the platform default; on update, send null to go back to it. Maximum 25.

ad_formatsDiscoveryAdFormat[] nullable

Which ad formats each discovery run captures: banner, video and/or pop (pop covers both pop-unders and tab-unders), each at most once. A format left out is neither captured nor billed — e.g. ['pop'] checks the page's pops without screenshotting or clicking its banners; a tab-under the page forces on its own is still reported as a pop. Only valid when campaign_type is 'ad_discovery'. Omit to capture every format; on update, send null to go back to every format.

country_codesstring[] required
group_idstring uuid nullable
emulator_categoriesstring[]
emulator_specific_idsstring[]
emulator_modestring
proxy_typestring
proxy_regionstring
proxy_citystring
proxy_ispstring
repeat_countinteger
repeat_mode'isolated' | 'shared'

How the repeats of one url x country x device relate to each other.

Value-compatible with scanning's RepeatModeType — campaigns owns its own copy because the write side must not import another domain's package (check-imports), and only the value crosses the boundary.

retry_max_attemptsinteger
labelsobject
policy_set_idstring nullable

Policy set to bind. Omit the field to use the organization's default policy set, or leave the campaign unbound if none is set. Send JSON null to create the campaign unbound so it does not generate alerts.

schedule_typestring nullable
schedule_weeklyobject nullable
schedule_interval_secondsinteger nullable
schedule_enabledboolean nullable
schedule_timezonestring nullable

Response

Successful Response

idstring uuid required
namestring required
campaign_typestring
urlstring required
ad_tagstring nullable
vast_tagstring nullable
referrerstring nullable
ignore_first_n_domainsinteger
max_discovered_adsinteger nullable
ad_formatsDiscoveryAdFormat[] nullable
country_codesstring[] required
group_idstring uuid required
proxy_typestring
proxy_regionstring
proxy_citystring
proxy_ispstring
repeat_countinteger
repeat_mode'isolated' | 'shared'

How the repeats of one url x country x device relate to each other.

Value-compatible with scanning's RepeatModeType — campaigns owns its own copy because the write side must not import another domain's package (check-imports), and only the value crosses the boundary.

retry_max_attemptsinteger
schedule_typestring nullable
schedule_weeklyobject nullable
schedule_interval_secondsinteger nullable
schedule_timezonestring nullable
labelsobject
policy_set_idstring uuid nullable
schedule_enabledboolean required
is_archivedboolean required
created_atstring date-time required
last_run_atstring date-time nullable

Changes

No recorded changes to this operation across all 1 revision of this API.