Skip to main content
POST
Change an Apple Ads campaign, ad group or keyword

Authorizations

Authorization
string
header
required

Bearer authentication using the project Secret Key (prefixed with sk_), used exactly as shown in the dashboard. Endpoints that support sandbox data take an explicit environment field or parameter. All v4 public endpoints require the Secret Key — see Authentication. Never expose the Secret Key in client-side code.

X-Qonversion-Actor-Assertion
string
header
required

Authorization supplied by Qonversion MCP, naming the acting dashboard user and granted scopes. Required together with secretAuth for campaign management. Direct HTTP clients cannot supply this authorization.

Headers

Idempotency-Key
string

Alternative to the body field. Copied into idempotency_key when the body omits it.

Maximum string length: 64

Body

application/json

Exactly ONE of status, bid, daily_budget, and the matching before_* value, which is mandatory.

level
enum<string>
required

Which entity is being changed. Ids below the level are ignored.

Available options:
campaign,
ad_group,
keyword
campaign_id
string
required

Apple campaign id. A STRING: Apple ids are int64.

ad_group_id
string

Required for ad_group and keyword levels.

keyword_id
string

Required for the keyword level.

keyword_text
string

Required for the keyword level — Apple wants the keyword identity echoed back.

keyword_match_type
string

Required for the keyword level (e.g. EXACT, BROAD).

org_id
string

Optional. The organization is DERIVED server-side from the campaign; a value that disagrees with the resolved one is rejected rather than silently overriding it.

status
enum<string>

New status. ACTIVE is accepted as the keyword-level spelling of ENABLED.

Available options:
ENABLED,
PAUSED,
ACTIVE
before_status
string

Required with status. The status you believe is current: if it disagrees with a status Qonversion recently saw Apple confirm, the change is refused with 409 value_changed.

bid
object

New bid. Keyword level only — ad-group bids cannot be changed. Must be an {amount, currency} object; a plain number or string is refused with 422.

before_bid

Required with bid: the current bid, as a decimal string or an {amount, currency} object. A new bid more than three times the last bid Qonversion saw Apple confirm is refused with 422. When there is no confirmed history the ceiling is not applied and the response says so with baseline_unverified.

daily_budget
object

New daily budget. Campaign level only. Must be an {amount, currency} object; a plain number or string is refused with 422.

before_daily_budget

Required with daily_budget: the current daily budget, as a decimal string or an {amount, currency} object. The same three-times ceiling applies as for bids.

idempotency_key
string

Required — in the body, or via the Idempotency-Key header when the body has none (a key in the body wins); a request without it is refused with 422. Resending the same change with the same idempotency_key returns the original result with replayed: true. Reusing the key for a different change returns 409 idempotency_key_reuse. With the Idempotency-Key header, the API also caches successful (2xx) answers for 24 hours: a byte-identical resend gets the cached answer without replayed, and a different body with the same header key gets 409 idempotency_conflict. A dry run consumes its key: send the live change with a different key, otherwise you get the dry-run result back.

Maximum string length: 64
dry_run
boolean

Simulate only. Nothing is sent to Apple and the response carries would_send.

Response

The change was accepted by Apple, or simulated when dry_run was set. A repeat of an earlier request with the same idempotency_key returns that request's stored result with replayed: true.

confirmed
object
required

The entity's values as Apple confirmed them after the change, or null when Apple did not return them. Verify a change from this value, not by re-reading the report.

applied
boolean
required

The change was submitted to Apple.

dry_run
boolean
required

True when nothing was sent.

action_id
integer<int64>
required

Identifier of this change; include it when contacting support.

replayed
boolean

Present and true when this response repeats the stored result of an earlier request with the same idempotency_key; nothing was changed again.

baseline_unverified
boolean

Present and true when there was no confirmed bid history for this entity, so the ×3 ceiling could NOT be applied and the change was counted as a raise. Treat it as a prompt for explicit human confirmation: it is the one signal that the server could not check the size of what it was about to do.

would_send
object

Dry runs only — the exact payload Apple would have received (an array of one element for a keyword).