Skip to main content
POST
Boost post as ad

Request contract

  • Method and path: POST /apis/v1/ads/boost
  • Availability: enabled
  • Request URL template: https://api.aisa.one/apis/v1/ads/boost
  • connectionId: query; required
  • X-Aisa-Confirm: header; optional
  • Idempotency-Key: header; optional
  • Runtime facts: fe60122939c67dc98a3a6ac6b97bd5c326b526105150c8959304dd2160d4dd09
Complete OpenAPI definition Effective request and pricing declaration (including authentication and referenced schemas):

Cost and request rules

A request reference price is not currently available; use a request quote where supported. Account-specific pricing and final settlement may differ. Published reference values are not an account-specific quote or a settled charge. For endpoints supporting X-AISA-Cost-Mode: quote, obtain a free quote for your exact request before execution; reconcile the settled cost with response metadata and Usage Logs. USD amounts use 1,000,000 integer micro-USD per dollar.

Authorizations

Authorization
string
header
required

Bearer authentication header of the form Bearer <token>, where <token> is your auth token.

Headers

X-Aisa-Confirm
enum<string>

Required with the value "spend" when the request can spend money or change spend. Without it the request is refused with 409 confirmation_required, which describes what would happen; nothing is sent to the ad platform.

Available options:
spend
Idempotency-Key
string

Passed to the ad platform integration: a retry with the same key returns the first result instead of acting twice. AIsa never retries a write for you.

Required string length: 1 - 191

Query Parameters

connectionId
string
required

The ads connection (adc_...) the request runs on: one of yours, from GET /apis/v1/ads/connections. On a request with a JSON body it may be sent as a top-level body member instead.

Pattern: ^adc_[0-9A-Za-z]+$

Body

application/json
adAccountId
string
required

Platform ad account ID

goal
enum<string>
required

Available goals vary by platform. Meta (Facebook/Instagram) and TikTok support all 7. LinkedIn supports all except app_promotion. X supports engagement, traffic, awareness, video_views, app_promotion.

Available options:
engagement,
traffic,
awareness,
video_views,
lead_generation,
conversions,
app_promotion
name
string
required
Maximum string length: 255
adSetId
string

Meta, or TikTok with smartPlus: true. Attach the boosted post to this existing ad set instead of creating a campaign. Meta: the ad set then owns budget, schedule and targeting; sending those too is a 400. Must be yours: it is checked through the connection before the request is sent, and an id that is not yours answers not_found.

adSetName
string

Exact name for the ad-group level this boost provisions. Omitted keeps the default - Ad Group. Meta: ad set; TikTok, Pinterest, Google: ad group; X: line item; LinkedIn: the campaign under the campaign group.

Maximum string length: 255
adSetStatus
enum<string>

Every platform, same semantics as POST /apis/v1/ads/create. Sets the switch of the new ad set alone and overrides status for it. Omitted, it follows status.

Available options:
ACTIVE,
PAUSED
adStatus
enum<string>

Request-side publish switch for adStatus on ad creation endpoints only (status, campaignStatus and adSetStatus carry their own inline ACTIVE/PAUSED enum there; the status-update endpoints are a separate lowercase active/paused…

Available options:
ACTIVE,
PAUSED
attributionSpec
object[]

Meta only. Ad-set attribution windows, same shape as POST /apis/v1/ads/create.

Required array length: 1 - 3 elements
bidAmount
number

Deprecated: send it inside platformSpecificData instead (Meta today; TikTok's nested shape is planned). The flat field keeps working during the deprecation window; sending both shapes returns a 400.

bidStrategy
enum<string>

Deprecated: send it inside platformSpecificData instead (Meta today; TikTok's nested shape is planned). The flat field keeps working during the deprecation window; sending both shapes returns a 400.

Available options:
LOWEST_COST_WITHOUT_CAP,
LOWEST_COST_WITH_BID_CAP,
COST_CAP,
LOWEST_COST_WITH_MIN_ROAS
bodies
string[]

Meta only. Extra primary-text options Meta rotates on the boosted post (asset_feed_spec.bodies with DEGREES_OF_FREEDOM). The post keeps its own text as one of the options. Works for Facebook posts and Instagram media.

Required array length: 1 - 5 elements
budget
object

Alias of budgetAmount + budgetType, kept for existing callers

budgetAmount
number

Budget in whole currency units, the same flat field as POST /apis/v1/ads/create. Required unless adSetId is set. Minimum varies: TikTok=$20, Pinterest=$5, others=$1

budgetLevel
enum<string>

Meta only, same semantics as POST /apis/v1/ads/create: campaign = Advantage campaign budget (CBO), the budget and bid strategy sit on the campaign and the ad set inherits them. Default adset. Not allowed with adSetId.

Available options:
adset,
campaign
budgetType
enum<string>

Goes together with budgetAmount. lifetime requires schedule.endDate.

Available options:
daily,
lifetime
callToAction
string

CTA button label. Non-messaging CTAs require linkUrl. WHATSAPP_MESSAGE, MESSAGE_PAGE, and INSTAGRAM_MESSAGE do not require a URL and reject linkUrl.

campaignName
string

Exact name for the campaign this boost provisions. Omitted keeps the default - Campaign. Every platform: on LinkedIn it names the campaign group. Ignored on the Meta attach shape (adSetId), which creates no campaign.

Maximum string length: 255
campaignStatus
enum<string>

Every platform, same semantics as POST /apis/v1/ads/create. Sets the switch of the new campaign alone (LinkedIn: the campaign group) and overrides status for it. When omitted, it follows status.

Available options:
ACTIVE,
PAUSED
connectionId
string

The ads connection (adc_...), when not sent as the connectionId query parameter.

Pattern: ^adc_[0-9A-Za-z]+$
creativeFeatures
object

Meta Advantage+ creative enhancements. Map snake_case feature names to OPT_IN or OPT_OUT; Meta validates supported keys and unspecified features default to OPT_OUT.

currency
string

ISO 4217 currency code matching the ad account's currency. Meta only.

Required string length: 3
destinationType
enum<string>

Meta only. Ad-set destination_type: where the click LANDS, as opposed to instagramAccountId which is who the ad runs as. Independent of plain link CTAs and their goal.

Available options:
INSTAGRAM_PROFILE,
WEBSITE,
ON_AD,
MESSENGER,
WHATSAPP,
INSTAGRAM_DIRECT
dsaBeneficiary
string

Legal entity that benefits from the ad. Required when targeting EU users (EU DSA, Article 26).

Maximum string length: 100
dsaPayor
string

Legal entity that pays for the ad. Can differ from dsaBeneficiary (for example, an agency paying for a client's ads). Same rules as dsaBeneficiary: required for EU targeting unless the ad account has a default payor.

Maximum string length: 100
endDate
string<date-time>

Ad-set end time (ISO 8601). Required for lifetime budgets. Same field as on POST /apis/v1/ads/create. Maps to the ad set's end_time (on X, the line item's end_time; X campaigns carry no flight dates).

existingCampaignId
string

TikTok only. Create the ad group and the Spark ad under this existing TikTok campaign instead of creating a new campaign. The campaign keeps its own status and objective (the objective must fit goal). Must be yours: it is checked through the connection before the request is sent, and an id that is not yours answers not_found.

identityId
string

TikTok only. The identity the ad runs as (the profile shown on the ad), from GET /apis/v1/ads/tiktok-identities. Default: the connected TikTok account's own identity.

identityType
enum<string>

TikTok only. Type of identityId; resolved from the advertiser's identity list when omitted.

Available options:
TT_USER,
CUSTOMIZED_USER,
BC_AUTH_TT
instagramAccountId
string

Meta only. Instagram identity the ad runs AS (creative.instagram_user_id), overriding the account linked to the Page. Live-verified against a Page-post creative.

leadGenFormId
string

Lead Gen form ID to attach to the boosted ad's creative. REQUIRED when goal is lead_generation; ignored for other goals. Meta: the leadgen_forms ID (create one via POST /apis/v1/ads/lead-forms).

lifetimeBudgetCap
number

X only (400 on another platform or on a lifetime budget). A lifetime total, in whole currency units, that caps a daily budget (budgetType daily). Must be at least budgetAmount.

Website URL for non-messaging CTA buttons. Send it with callToAction. Omit for messaging boosts. Meta: adds a top-level call_to_action to the post-reference creative.

locationTargetingType
enum<string>

Google only (400 elsewhere). Written on the campaign the boost creates.

Available options:
presence,
presence_or_interest
metaObjective
enum<string>

Meta only, with goal: engagement and without adSetId (400 otherwise).

Available options:
OUTCOME_ENGAGEMENT
optimizationGoal
string

Ad-set optimization goal override. Meta, or TikTok with goal: video_views. TikTok: ENGAGED_VIEW (6-second Focused View, the default) or ENGAGED_VIEW_FIFTEEN (15-second views), both billed per view (CPV). Any other value is a 400.

platformPostId
string

Platform post ID (alternative to postId). Reddit: the post id, with or without the t3_ prefix. Meta: a Page post id (_ or the bare post id) or an Instagram media id.

platformSpecificData
object

Platform-specific options. The platform is derived from connectionId; sending options for a different platform returns a 400. LinkedIn (campaign bidding and delivery controls) and Meta (the bid trio) have options today.

postId
string
promoCodes
object[]

TikTok Smart+ Web Conversions only (requires smartPlus: true, goal conversions). Promo codes or offers TikTok highlights on the ad (Ads Manager's "Add promo code or offer"). A promo code needs shoppers to enter it at checkout.

Required array length: 1 - 10 elements
promotedObject
object

Meta, TikTok and Reddit. What the conversion ad set optimizes toward, so a boost of an existing organic post can run for a conversion instead of only engagement or traffic.

rawTargeting
object

Meta only. A Meta-native targeting spec (e.g. { "geo_locations": { "cities": [{ "key": "...", "radius": 15, "distance_unit": "kilometer" }] } }). Sent alone, it is forwarded unchanged.

regionalRegulatedCategories
string[]

Meta only. Regional regulation categories required when the ad set targets certain countries (e.g.

regionalRegulationIdentities
object

Meta only. Verified identity IDs of the beneficiary and payer for each declared regionalRegulatedCategories value. Ignored when adSetId adds the ad to an existing ad set.

rehostOnInstagramVideoRejection
boolean
default:true

Meta only (a 400 elsewhere). Controls the fallback when Meta refuses an existing Instagram video as the ad (subcode 1815279).

roasAverageFloor
number

Deprecated: send it inside platformSpecificData instead (Meta today; TikTok's nested shape is planned). The flat field keeps working during the deprecation window; sending both shapes returns a 400.

schedule
object

Alias of the top-level startDate / endDate, kept for existing callers. Sending both forms with differing values is a 400.

smartPlus
boolean

TikTok only. Run the Spark post in a Smart+ campaign instead of a regular one: goal conversions = Smart+ Web Conversions, lead_generation = Smart+ Lead Generation. Rejected with a 400 on other platforms. Requires:

smartTargeting
object

TikTok only (a 400 elsewhere). TikTok Smart Targeting on the ad group: audience is TikTok's smart_audience_enabled, interestsBehaviors its smart_interest_behavior_enabled.

sparkAuthCode
string

TikTok-only. Spark Code (the creator's auth_code) authorizing cross-creator Spark Ads: the advertiser can boost a video owned by a DIFFERENT TikTok account. Maps to auth_code on the creative entry of /v2/ad/create/.

sparkPosts
object[]

TikTok Smart+ only (requires smartPlus: true; a 400 on other platforms). Several Spark posts as creatives of ONE Smart+ ad, each with its own post code. Replaces platformPostId + sparkAuthCode.

Required array length: 1 - 50 elements
specialAdCategories
enum<string>[]

Meta only. Required for housing, employment, credit, or political ads.

Available options:
HOUSING,
EMPLOYMENT,
CREDIT,
FINANCIAL_PRODUCTS_SERVICES,
ISSUES_ELECTIONS_POLITICS,
ONLINE_GAMBLING_AND_GAMING
specialAdCategoryCountry
string[]

Meta (metaads) only. 2-letter ISO country codes the special ad category applies to. Requires specialAdCategories to be set (400 otherwise).

startDate
string<date-time>

Ad-set start time (ISO 8601, e.g. "2026-06-10T09:00:00Z"), mapped to the ad set's start_time. When omitted the ad starts delivering immediately.

status
enum<string>

Publish state of the created entities, on every platform. Omitted or ACTIVE publishes live (default). PAUSED pauses only the top-most object this boost creates and switches everything below it on:

Available options:
ACTIVE,
PAUSED
targeting
object

Same geo/demographic fields as the TargetingSpec used by /apis/v1/ads/create. Geo keys (regions/cities/zips/metros) resolve via GET /apis/v1/ads/targeting/search?dimension=geo. Meta only: city radius and lat/lng customLocations.

tracking
object

Meta only, except pixelId, which also picks the Reddit pixel of the new ad group (promotedObject.pixelId wins when both are sent). Tracking specs (pixel, URL tags).

validateOnly
boolean
default:false

Meta only (facebook, instagram and Meta ads connections). Returns 200 with the same body as a validateOnly POST /apis/v1/ads/create (validateOnly, results per node, message).

whatsappPhoneNumber
string

Meta WhatsApp only. E.164 number already paired with the Page. Omit to use the default pairing. Requires WHATSAPP_MESSAGE callToAction. Stored as creative.whatsappPhoneNumber on the ad.

Pattern: ^\+[1-9]\d{6,14}$
workflowId
string

Meta messaging boosts only (callToAction MESSAGE_PAGE, WHATSAPP_MESSAGE or INSTAGRAM_MESSAGE). A workflow in the account's profile, started in the conversation a click on the ad opens. Stored on the ad.

Pattern: ^[a-fA-F0-9]{24}$

Response

validateOnly dry-run passed (Meta), nothing was created

message
string
results
object[]
validateOnly
boolean

Always true in a validate-only response.