---
title: "Update a campaign"
method: PATCH
path: "/ads-management/v1/campaigns/{id}"
tags: ["Advertising"]
---

# Update a campaign

`PATCH /ads-management/v1/campaigns/{id}`

Updates the mutable fields of a campaign. You can change: name, budget.amountMicros, schedule.startTime and schedule.durationInDays (schedule changes are only allowed before the campaign starts), and status. Set status to ACTIVE to run or resume the campaign, PAUSED to pause it, or CANCELLED to cancel it permanently. budget.type cannot be changed — only the amount. A budget increase takes effect immediately, but a budget decrease on a running campaign is scheduled for the next midnight in the account's time zone; while a decrease is pending, the response reports it in budget.scheduledAmountMicros and budget.scheduledEffectiveTime. The fields objective, paymentType, targeting, creativeAssetIds, and bid are fixed after creation and return 400 if included. The updated campaign is returned with its recomputed deliveryStatus.

## Path parameters

- `id` string, required

## Request body

- InternalPublicV1UpdateCampaignRequest
  - `bid` InternalPublicV1Bid
    - `strategy` 'AUTOMATED' — The bidding strategy. v1 campaigns are always `AUTOMATED`.
  - `budget` InternalPublicV1UpdateBudget
    - `amountMicros` string — The new budget amount in micro-USD, as a decimal string (for example, `5000000` = $5.00). Money is sent as a string so large values keep full precision in every client. Must be a numeric string of micro-USD.
  - `creativeAssetIds` string[] — Immutable in v1; including it returns 400.
  - `name` string — A new display name for the campaign.
  - `schedule` InternalPublicV1Schedule
    - `durationInDays` integer — How long the campaign runs from startTime, in days. Must not exceed 3650 (about 10 years).
    - `endTime` string — Not accepted in v1 and never returned; supplying it returns 400. Use durationInDays to set when the campaign ends. Reserved for a future objective.
    - `startTime` string — The time the campaign starts serving, as an RFC 3339 UTC timestamp. On a create request it must not be in the past.
  - `status` 'ACTIVE' | 'PAUSED' | 'CANCELLED' — A lifecycle transition: `ACTIVE` to run or resume, `PAUSED` to pause, or `CANCELLED` to cancel permanently.
  - `targeting` InternalPublicV1Targeting
    - `ageGroups` string[] — The age brackets to deliver to. Empty means all ages. Values can be `AGE_13_17`, `AGE_18_24`, or `AGE_25_PLUS`.
    - `countries` string[] — The ISO 3166-1 alpha-2 country codes to deliver to (for example, `US`). Empty means all countries.
    - `devices` string[] — The device types to deliver to. Empty means all devices. Values can be `PHONE`, `TABLET`, `DESKTOP`, or `CONSOLE`.

## Response `200`

OK

- InternalPublicV1Campaign
  - `bid` InternalPublicV1Bid
    - `strategy` 'AUTOMATED' — The bidding strategy. v1 campaigns are always `AUTOMATED`.
  - `billingAccountId` string — The billing account that owns and funds the campaign.
  - `budget` InternalPublicV1Budget
    - `amountMicros` string — The budget amount in micro-USD, as a decimal string (for example, `5000000` = $5.00). Money is sent and returned as a string so large values keep full precision in every client. On a request it must be a numeric string of micro-USD.
    - `scheduledAmountMicros` string — The queued lower budget for a pending decrease, in micro-USD as a decimal string (same format as amountMicros). A budget increase takes effect immediately, but a decrease on a running campaign is applied at the next midnight in the account's time zone; until then the campaign keeps serving on amountMicros (the current, higher budget). Omitted when no decrease is pending.
    - `scheduledEffectiveTime` string — The time a pending budget decrease takes effect, as an RFC 3339 UTC timestamp. Omitted when no decrease is pending.
    - `type` 'DAILY' | 'LIFETIME' — The budget cadence. Fixed when the campaign is created. Can be `DAILY` or `LIFETIME`.
  - `createTime` string — The time the campaign was created, as an RFC 3339 UTC timestamp.
  - `creativeAssetIds` string[] — The Open Cloud image asset IDs the campaign advertises, as decimal strings.
  - `deliveryStatus` 'SERVING' | 'IN_REVIEW' | 'NOT_SERVING' | 'REJECTED' — The current serving state, derived by the system (read-only). Can be `SERVING`, `IN_REVIEW`, `NOT_SERVING`, or `REJECTED`.
  - `deliveryStatusReasons` string[] — The reasons behind the current deliveryStatus, such as why a campaign is not serving or was rejected, or `LEARNING` while a serving campaign ramps up. Omitted when there are none.
  - `id` string — The server-assigned unique identifier of the campaign.
  - `name` string — The display name of the campaign.
  - `objective` 'ENGAGEMENT' — The advertising goal of the campaign. Only `ENGAGEMENT` is supported in v1.
  - `paymentType` 'CREDIT_CARD' | 'ADS_CREDIT' | 'INVOICE' — How the campaign is paid for. Fixed when the campaign is created. Can be `CREDIT_CARD`, `ADS_CREDIT`, or `INVOICE`.
  - `schedule` InternalPublicV1Schedule
    - `durationInDays` integer — How long the campaign runs from startTime, in days. Must not exceed 3650 (about 10 years).
    - `endTime` string — Not accepted in v1 and never returned; supplying it returns 400. Use durationInDays to set when the campaign ends. Reserved for a future objective.
    - `startTime` string — The time the campaign starts serving, as an RFC 3339 UTC timestamp. On a create request it must not be in the past.
  - `status` 'ACTIVE' | 'PAUSED' | 'CANCELLED' — The lifecycle state you control through update requests. Can be `ACTIVE`, `PAUSED`, or `CANCELLED`. `CANCELLED` is permanent.
  - `targetUniverseId` string — The identifier of the experience the campaign advertises.
  - `targeting` InternalPublicV1Targeting
    - `ageGroups` string[] — The age brackets to deliver to. Empty means all ages. Values can be `AGE_13_17`, `AGE_18_24`, or `AGE_25_PLUS`.
    - `countries` string[] — The ISO 3166-1 alpha-2 country codes to deliver to (for example, `US`). Empty means all countries.
    - `devices` string[] — The device types to deliver to. Empty means all devices. Values can be `PHONE`, `TABLET`, `DESKTOP`, or `CONSOLE`.
  - `updateTime` string — The time the campaign was last updated, as an RFC 3339 UTC timestamp.

## Other responses

- `400` — Validation error or immutable field supplied
- `403` — Permission denied
- `404` — Campaign not found
- `429` — Rate limit exceeded
- `500` — Internal server error

---

[API](https://skmtc.net/roblox/apis/roblox-api.md) · [All operations](https://skmtc.net/roblox/apis/roblox-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/roblox/roblox-api/versions/e15802062270/schema)
