Skip to main content
Once a campaign is running, the API lets you adjust its daily budget, reallocate geographic tiers, and stop delivery. All management endpoints require the campaigns:write scope and work on wallet-funded campaigns only.

Which campaigns can you manage?

Campaign list and detail responses include an apiManageable boolean. It is true only for wallet-funded campaigns — the ones these endpoints accept. Calling a management endpoint on a non-manageable campaign returns 400 invalid_request (for example, “Stopping is only supported for wallet campaigns.”).
Stop and budget endpoints require the same Idempotency-Key header as campaign creation: unique string up to 255 characters, honored for 24 hours, same key + same body replays the original response.

Increase budget

POST /v1/campaigns/{campaignId}/budget/increase Adds budget using credits already in your wallet — there is no new card payment.
  • amount is the total USD debit for the current cycle. With mode: next_renewal you may send amount: 0 together with targetDailyBudget to set an absolute next-cycle daily budget.
  • The wallet is debited whenever the current cycle is increased. If the balance is too low, you get 402 insufficient_credit with details.available and details.required.
The response returns the wallet balance after the debit:

Decrease budget

POST /v1/campaigns/{campaignId}/budget/decrease Lowers the campaign’s daily budget to targetDailyBudget and refunds unused budget to your wallet.
Rules (violations return 400 invalid_request):
  • targetDailyBudget must be at least $10/day and lower than the current daily budget
  • More than 3 days must remain in the current billing cycle
  • Modes: current_cycle or current_and_renewals (default) — next_renewal is not supported for decreases
A success response returns accepted: true. The refund of unused budget is applied to your wallet asynchronously after acceptance — it may take a moment to appear in your balance.

Update geographic tiers

GET /v1/campaigns/{campaignId}/tiers (requires campaigns:read) returns the current allocation:
PATCH /v1/campaigns/{campaignId}/tiers enables/disables tiers and reallocates budget shares:
Request rules:
  • Include all of the campaign’s tiers in items — not just the ones you change
  • newAllocationPercent values must sum to exactly 100
  • At least one tier must have isEnabled: true
After a successful update, further tier changes on that campaign are blocked for 72 hours. During the cooldown, PATCH returns 409 tier_update_cooldown. Use lastUpdate from the GET response to know when the last change happened.

Stop a campaign

POST /v1/campaigns/{campaignId}/stop Stops delivery and refunds the unspent budget to your wallet.
Expected (200):
Stopping is idempotent at the campaign level: stopping an already-stopped campaign succeeds without a second refund. Stopped campaigns cannot be restarted via the API — create a new campaign instead.

Common management errors

See Errors for the full list.

Next

Creating campaigns · Understanding metrics · Credit wallet