---
title: "Update campaigns"
method: PATCH
path: "/ad_accounts/{ad_account_id}/campaigns"
tags: ["campaigns"]
---

# Update campaigns

`PATCH /ad_accounts/{ad_account_id}/campaigns`

Update multiple ad campaigns based on campaign_ids.

**Note:**
- The values for `lifetime_spend_cap` and `daily_spend_cap` are microcurrency amounts based on the currency field set in the advertiser's profile (e.g. USD).

Microcurrency is used to track very small transactions, based on the currency set in the advertiser's profile.

A microcurrency unit is 10^(-6) of the standard unit of currency selected in the advertiser's profile.

**Equivalency equations**, using dollars as an example currency:

- $1 = 1,000,000 microdollars
- 1 microdollar = $0.000001

**To convert between currency and microcurrency**, using dollars as an example currency:

- To convert dollars to microdollars, multiply dollars by 1,000,000
- To convert microdollars to dollars, divide microdollars by 1,000,000

## Path parameters

- `ad_account_id` string, required

## Request body

- CampaignBatchUpdateItem[] — Request body for batch campaign update.
  - `ad_account_id` string — Setting this field does nothing. The ad account ID gets set from the path parameter.
  - `app_id` string — [Closed beta](/docs/getting-started/using-beta-and-restricted-features/) The store ID of the mobile app for `APP_INSTALL` campaigns.
  - `app_platform` 'IOS' | 'ANDROID' — [Closed beta](/docs/getting-started/using-beta-and-restricted-features/) Platform of the mobile app for an `APP_INSTALL` campaign.
  - `bid_options` CampaignBidOptionsUpdate, nullable — Object describing an update to the campaign level bid multipliers.
    - `age_bucket_multipliers` AgeBucketMultipliers, nullable — This represents a mapping from age bucket to a bid price adjustment. Multiplier values must be between 0 and 10. A value of 10 represents a 900% increase in bid price (from $1 to $10 for example). A value of 0 will stop distribution for this item on the specified age bucket in `MAX_BID` ad groups in `CATALOG_SALES` campaigns. All age bucket multipliers must be set at the same time. If a multiplier is not provided it is assumed to be 1 (no bid adjustment).
      - `AGE_BUCKET` '18-24' | '19+' | '20+' | '21+' | '25-34' | '35-44' | '45-49' | '50-54' | '55-64' | '65+'
    - `app_type_multipliers` AppTypeMultipliers, nullable — This represents a mapping from app type targeting criteria to a bid price adjustment. Multiplier values must be between 0 and 10. A value of 10 represents a 900% increase in bid price (from $1 to $10 for example). A value of 0 will stop distribution for this item on the specified app type in `MAX_BID` ad groups in `CATALOG_SALES` campaigns. All app type multipliers must be set at the same time. If a multiplier is not provided it is assumed to be 1 (no bid adjustment).
      - `APP_TYPE` 'android_mobile' | 'android_tablet' | 'ipad' | 'iphone' | 'web' | 'web_mobile'
    - `audience_multipliers` CampaignAudienceMultipliers — This represents a mapping from Audience ID to a bid price adjustment. Multiplier values must be between 0 and 10. A value of 10 represents a 900% increase in bid price (from $1 to $10 for example). A value of 0 will stop distribution for this item on the specified audience in `MAX_BID` ad groups in `CATALOG_SALES` campaigns. All audience multipliers must be set at the same time. If a multiplier is not provided it is assumed to be 1 (no bid adjustment).
      - `AUDIENCE_ID` string — Audience ID for the multiplier.
    - `freq_bid_multiplier_time_window` 'WEEK' | 'MONTH' | 'null', nullable — The time window for frequency bid multipliers.
    - `frequency_multipliers` FrequencyMultipliers, nullable — This represents a mapping from impression count to a bid price adjustment for frequency-based bidding. Keys are impression counts (0-10) representing how many times a user has seen the ad. Multiplier values must be between 0 and 10. A value of 10 represents a 900% increase in bid price. A value of 0 will stop distribution for this impression count. If a multiplier is not provided it is assumed to be 1 (no bid adjustment).
      - `IMPRESSION_COUNT` string — Impression count identifier.
    - `gender_multipliers` GenderMultipliers, nullable — This represents a mapping from gender targeting criteria to a bid price adjustment. Multiplier values must be between 0 and 10. A value of 10 represents a 900% increase in bid price (from $1 to $10 for example). A value of 0 will stop distribution for this item on the specified gender in `MAX_BID` ad groups in `CATALOG_SALES` campaigns. All gender multipliers must be set at the same time. If a multiplier is not provided it is assumed to be 1 (no bid adjustment).
      - `GENDER` 'unknown' | 'male' | 'female'
    - `placement_multipliers` PlacementMultipliers, nullable — This represents a mapping from placement to a bid price adjustment. Multiplier values must be between 0 and 10. A value of 10 represents a 900% increase in bid price (from $1 to $10 for example). A value of 0 will stop distribution for this item on the specified placement in `MAX_BID` ad groups in `CATALOG_SALES` campaigns. All placement multipliers must be set at the same time. If a multiplier is not provided it is assumed to be 1 (no bid adjustment).
      - `PLACEMENT` 'SEARCH' | 'BROWSE' | 'RELATED_PINS' — Placement type for bid multiplier targeting.
    - `update_mask` CampaignBidOptionsUpdateMaskItems[], required — List of fields to update. Only the fields in the list will be updated.
  - `daily_spend_cap` integer, nullable — Note: The default for this field is null, which is treated the same as 0. For campaign budget optimization, a daily or lifetime spend cap must be set, but not both. For ad group level budgets, this field must be 0 or unset.
  - `default_ad_group_budget_in_micro_currency` integer, nullable — Setting this field does nothing.
  - `end_time` integer, nullable — Note: To clear this field on update, set the end time to -1. Timestamp in Unix format for scheduling when ads in the campaign stop appearing. Must occur after any end times for child ad groups. If `end_time` is not specified for the campaign, ads run indefinitely unless you update the campaign, changing their status to `paused`. Learn about [scheduling campaigns](/docs/api-features/managing-campaigns/#campaign-scheduling). Different end times can be set for the campaign's child ad groups, but they cannot occur after an `end_time` specified for the campaign. - If your campaign has a child ad group with an end time specified, and if you update that campaign with an `end_time` that is earlier than that of the ad group, the campaign `end_time` will supersede the ad group `end_time`, and the request will not return an error. - In this scenario, if you call [List campaigns](/docs/api/v5/campaigns-list) or [List ad groups](/docs/api/v5/ad_groups-list), the returned campaigns or ad groups are listed with the start and end times that you assigned them, regardless of supersedence.
  - `id` string, required — Campaign ID, must be associated with the ad account ID provided in the path.
  - `intended_promotion_type` 'LEGACY' | 'STANDARD_AD' | 'CATALOG' — Specifies the intended promotion type for the campaign. Note: This field is immutable unless the campaign is in draft status. **STANDARD_AD** - For ads derived from Pins. - Supported for all objective types except for current CATALOG\_SALES and WEB\_CONVERSION, which are being deprecated. - For simplified objective types. **CATALOG** - For creating product group promotions. - Supported for CONSIDERATION and SALES objective types. - For simplified objective types. **LEGACY** - Intended only for maintaining backward compatibility. - Must be used for CATALOG\_SALES and WEB\_CONVERSION. - Supported for CATALOG\_SALES and WEB\_CONVERSION objective types. **If you do not provide this parameter, the default is:** - LEGACY for CATALOG\_SALES and WEB\_CONVERSION - STANDARD_AD for other objective types
  - `is_automated_campaign` boolean, nullable — Note: This field is immutable unless the campaign is in draft status. Specifies whether the campaign was created in the automated campaign flow. When using Automated Campaigns, a daily spend cap must be set, and Pinterest Performance+ may not be used. The following objective types are supported: - CONSIDERATION - WEB\_CONVERSION - SALES - LEADS - CATALOG\_SALES
  - `is_campaign_budget_optimization` boolean, nullable — Note: This field is immutable unless the campaign is in draft status. Determines if a campaign automatically generates ad-group level budgets given a campaign budget to maximize campaign outcome. When using campaign budgets with a lifetime spend cap, the end time must be provided.
  - `is_flexible_daily_budgets` boolean, nullable — Determine if a campaign has setup for flexible daily budgets, also known as "Pinterest Performance+ budgets". Flexible daily budgets are only supported for campaign budget optimization with a daily spend cap, and not a lifetime spend cap.
  - `is_ltv_optimized` boolean — Specifies whether the campaign is optimized for Lifetime Value (LTV). Only available for eligible advertisers.
  - `is_performance_plus` boolean — Note: This field is immutable unless the campaign is in draft status. You can only use this feature with the following objectives: - CONSIDERATION - WEB\_CONVERSION - SALES - LEADS - CATALOG\_SALES - APP\_INSTALL Enable Pinterest Performance+ for your campaign. To learn more, see [Pinterest Performance+ Setup](https://developers.pinterest.com/docs/api-features/pinterest-performance-plus-setup/)
  - `is_top_of_search` boolean — Note: This field is immutable unless the campaign is in draft status. [Restricted](/docs/getting-started/using-beta-and-restricted-features/) Have your ads and content appear at the top of search result lists in Pinterest. You can only use this feature with the following objectives: - CONSIDERATION - WEB\_CONVERSION - SALES - LEADS - CATALOG\_SALES You cannot use this feature with Pinterest Performance+ or Premiere Spotlight enabled.
  - `lifetime_spend_cap` integer, nullable — Note: The default for this field is null, which is treated the same as 0. For campaign budget optimization, a daily or lifetime spend cap must be set, but not both. For ad group level budgets, this field must be 0 or unset.
  - `name` string — Campaign name - 255 chars max.
  - `objective_type` 'AWARENESS' | 'CONSIDERATION' | 'WEB_CONVERSION' | 'CATALOG_SALES' | 'VIDEO_COMPLETION' | 'APP_INSTALL' | 'SALES' | 'LEADS' | 'CTV_CONSIDERATION' — Intended result of the campaign. You can only update objectives for draft campaigns. `WEB_SESSIONS` and `VIDEO_VIEW` objectives are deprecated. We recommend using `VIDEO_COMPLETION` as an alternative for the latter.
  - `order_line_id` string, nullable — Note: To clear this field on update, set the order line ID to 0. Order line ID that appears on the invoice. The order line must not be expired.
  - `performance_plus_campaign_settings` PerformancePlusCampaignSettings, nullable — Pinterest Performance+ campaign settings.
    - `boost_prospecting_ad_group_bid` boolean — Whether to boost prospecting ad group bid.
    - `pinner_list_exclusions` string[] — List of campaign-level exclusion pinner list IDs.
  - `start_time` integer, nullable — Timestamp in Unix format for scheduling when ads in the campaign start to appear. Must precede any start times set for child ad groups. Defaults to current time if no time is specified. Learn about [scheduling campaigns](/docs/api-features/managing-campaigns/#campaign-scheduling). Different start times can be set for the campaign's child ad groups, but they cannot occur before a `start_time` specified for the campaign. - If your campaign has a child ad group with a start time specified, and if you update that campaign with a `start_time` that is later than that of the ad group, the campaign `start_time` will supersede the ad group `start_time`, and the request will not return an error. - In this scenario, if you call [List campaigns](/docs/api/v5/campaigns-list) or [List ad groups](/docs/api/v5/ad_groups-list), the returned campaigns or ad groups are listed with the start and end times that you assigned them, regardless of supersedence.
  - `status` 'ACTIVE' | 'PAUSED' | 'ARCHIVED' | 'DRAFT' | 'DELETED_DRAFT' — Entity status
  - `tracking_urls` TrackingUrls, nullable — Third-party tracking URLs. Up to three tracking URLs - with a max length of 2,000 - are supported for each event type. Tracking URLs set at the ad group or ad level can override those set at the campaign level. For more information, see [Third-party and dynamic tracking](https://help.pinterest.com/en/business/article/third-party-and-dynamic-tracking).
    - `audience_verification` string[]
    - `buyable_button` string[]
    - `click` string[]
    - `engagement` string[]
    - `impression` string[]

## Response `200`

The request has succeeded.

- CampaignBatchWriteResponseModel — Response model for batch campaign write operations.
  - `items` CampaignBatchItem[], required
    - `data` CampaignBatchResponseData — Campaign data in batch response, with all fields optional to support error cases where data may be empty.
      - `ad_account_id` string — Campaign's Advertiser ID.
      - `bid_options` CampaignBidOptions, nullable — Object describing the campaign level bid multipliers.
        - `age_bucket_multipliers` AgeBucketMultipliers, nullable — This represents a mapping from age bucket to a bid price adjustment. Multiplier values must be between 0 and 10. A value of 10 represents a 900% increase in bid price (from $1 to $10 for example). A value of 0 will stop distribution for this item on the specified age bucket in `MAX_BID` ad groups in `CATALOG_SALES` campaigns. All age bucket multipliers must be set at the same time. If a multiplier is not provided it is assumed to be 1 (no bid adjustment).
          - `AGE_BUCKET` '18-24' | '19+' | '20+' | '21+' | '25-34' | '35-44' | '45-49' | '50-54' | '55-64' | '65+'
        - `app_type_multipliers` AppTypeMultipliers, nullable — This represents a mapping from app type targeting criteria to a bid price adjustment. Multiplier values must be between 0 and 10. A value of 10 represents a 900% increase in bid price (from $1 to $10 for example). A value of 0 will stop distribution for this item on the specified app type in `MAX_BID` ad groups in `CATALOG_SALES` campaigns. All app type multipliers must be set at the same time. If a multiplier is not provided it is assumed to be 1 (no bid adjustment).
          - `APP_TYPE` 'android_mobile' | 'android_tablet' | 'ipad' | 'iphone' | 'web' | 'web_mobile'
        - `audience_multipliers` CampaignAudienceMultipliers — This represents a mapping from Audience ID to a bid price adjustment. Multiplier values must be between 0 and 10. A value of 10 represents a 900% increase in bid price (from $1 to $10 for example). A value of 0 will stop distribution for this item on the specified audience in `MAX_BID` ad groups in `CATALOG_SALES` campaigns. All audience multipliers must be set at the same time. If a multiplier is not provided it is assumed to be 1 (no bid adjustment).
          - `AUDIENCE_ID` string — Audience ID for the multiplier.
        - `freq_bid_multiplier_time_window` 'WEEK' | 'MONTH' | 'null', nullable — The time window for frequency bid multipliers.
        - `frequency_multipliers` FrequencyMultipliers, nullable — This represents a mapping from impression count to a bid price adjustment for frequency-based bidding. Keys are impression counts (0-10) representing how many times a user has seen the ad. Multiplier values must be between 0 and 10. A value of 10 represents a 900% increase in bid price. A value of 0 will stop distribution for this impression count. If a multiplier is not provided it is assumed to be 1 (no bid adjustment).
          - `IMPRESSION_COUNT` string — Impression count identifier.
        - `gender_multipliers` GenderMultipliers, nullable — This represents a mapping from gender targeting criteria to a bid price adjustment. Multiplier values must be between 0 and 10. A value of 10 represents a 900% increase in bid price (from $1 to $10 for example). A value of 0 will stop distribution for this item on the specified gender in `MAX_BID` ad groups in `CATALOG_SALES` campaigns. All gender multipliers must be set at the same time. If a multiplier is not provided it is assumed to be 1 (no bid adjustment).
          - `GENDER` 'unknown' | 'male' | 'female'
        - `placement_multipliers` PlacementMultipliers, nullable — This represents a mapping from placement to a bid price adjustment. Multiplier values must be between 0 and 10. A value of 10 represents a 900% increase in bid price (from $1 to $10 for example). A value of 0 will stop distribution for this item on the specified placement in `MAX_BID` ad groups in `CATALOG_SALES` campaigns. All placement multipliers must be set at the same time. If a multiplier is not provided it is assumed to be 1 (no bid adjustment).
          - `PLACEMENT` 'SEARCH' | 'BROWSE' | 'RELATED_PINS' — Placement type for bid multiplier targeting.
      - `created_time` integer — Campaign creation time. Unix timestamp in seconds.
      - `daily_spend_cap` integer, nullable — Note: The default for this field is null, which is treated the same as 0. For campaign budget optimization, a daily or lifetime spend cap must be set, but not both. For ad group level budgets, this field must be 0 or unset.
      - `default_ad_group_budget_in_micro_currency` integer, nullable — When transitioning from campaign budget optimization to non-campaign budget optimization, the default_ad_group_budget_in_micro_currency will propagate to each child ad groups daily budget. Unit is micro currency of the associated advertiser account.
      - `end_time` integer, nullable — Note: To clear this field on update, set the end time to -1. Timestamp in Unix format for scheduling when ads in the campaign stop appearing. Must occur after any end times for child ad groups. If `end_time` is not specified for the campaign, ads run indefinitely unless you update the campaign, changing their status to `paused`. Learn about [scheduling campaigns](/docs/api-features/managing-campaigns/#campaign-scheduling). Different end times can be set for the campaign's child ad groups, but they cannot occur after an `end_time` specified for the campaign. - If your campaign has a child ad group with an end time specified, and if you update that campaign with an `end_time` that is earlier than that of the ad group, the campaign `end_time` will supersede the ad group `end_time`, and the request will not return an error. - In this scenario, if you call [List campaigns](/docs/api/v5/campaigns-list) or [List ad groups](/docs/api/v5/ad_groups-list), the returned campaigns or ad groups are listed with the start and end times that you assigned them, regardless of supersedence.
      - `id` string — Campaign ID.
      - `intended_promotion_type` 'LEGACY' | 'STANDARD_AD' | 'CATALOG' — Specifies the intended promotion type for the campaign. Note: This field is immutable unless the campaign is in draft status. **STANDARD_AD** - For ads derived from Pins. - Supported for all objective types except for current CATALOG\_SALES and WEB\_CONVERSION, which are being deprecated. - For simplified objective types. **CATALOG** - For creating product group promotions. - Supported for CONSIDERATION and SALES objective types. - For simplified objective types. **LEGACY** - Intended only for maintaining backward compatibility. - Must be used for CATALOG\_SALES and WEB\_CONVERSION. - Supported for CATALOG\_SALES and WEB\_CONVERSION objective types. **If you do not provide this parameter, the default is:** - LEGACY for CATALOG\_SALES and WEB\_CONVERSION - STANDARD_AD for other objective types
      - `is_automated_campaign` boolean, nullable — Note: This field is immutable unless the campaign is in draft status. Specifies whether the campaign was created in the automated campaign flow. When using Automated Campaigns, a daily spend cap must be set, and Pinterest Performance+ may not be used. The following objective types are supported: - CONSIDERATION - WEB\_CONVERSION - SALES - LEADS - CATALOG\_SALES
      - `is_campaign_budget_optimization` boolean, nullable — Note: This field is immutable unless the campaign is in draft status. Determines if a campaign automatically generates ad-group level budgets given a campaign budget to maximize campaign outcome. When using campaign budgets with a lifetime spend cap, the end time must be provided.
      - `is_carting` boolean — Whether the campaign contains a carting(where-to-buy link) ad.
      - `is_flexible_daily_budgets` boolean, nullable — Determine if a campaign has setup for flexible daily budgets, also known as "Pinterest Performance+ budgets". Flexible daily budgets are only supported for campaign budget optimization with a daily spend cap, and not a lifetime spend cap.
      - `is_ltv_optimized` boolean — Specifies whether the campaign is optimized for Lifetime Value (LTV). Only available for eligible advertisers.
      - `is_performance_plus` boolean — Note: This field is immutable unless the campaign is in draft status. You can only use this feature with the following objectives: - CONSIDERATION - WEB\_CONVERSION - SALES - LEADS - CATALOG\_SALES - APP\_INSTALL Enable Pinterest Performance+ for your campaign. To learn more, see [Pinterest Performance+ Setup](https://developers.pinterest.com/docs/api-features/pinterest-performance-plus-setup/)
      - `is_top_of_search` boolean — Note: This field is immutable unless the campaign is in draft status. [Restricted](/docs/getting-started/using-beta-and-restricted-features/) Have your ads and content appear at the top of search result lists in Pinterest. You can only use this feature with the following objectives: - CONSIDERATION - WEB\_CONVERSION - SALES - LEADS - CATALOG\_SALES You cannot use this feature with Pinterest Performance+ or Premiere Spotlight enabled.
      - `lifetime_spend_cap` integer, nullable — Note: The default for this field is null, which is treated the same as 0. For campaign budget optimization, a daily or lifetime spend cap must be set, but not both. For ad group level budgets, this field must be 0 or unset.
      - `name` string — Campaign name - 255 chars max.
      - `objective_type` 'AWARENESS' | 'CONSIDERATION' | 'VIDEO_VIEW' | 'WEB_CONVERSION' | 'CATALOG_SALES' | 'WEB_SESSIONS' | 'VIDEO_COMPLETION' | 'APP_INSTALL' | 'SALES' | 'LEADS' | 'CTV_CONSIDERATION' — Campaign objective type. If set as one of ["AWARENESS", "CONSIDERATION", "WEB_CONVERSION", "CATALOG_SALES", "VIDEO_COMPLETION", "CTV_CONSIDERATION"] the campaign is considered as a Campaign Budget Optimization (CBO) campaign, meaning budget needs to be set at the campaign level rather than at the ad group level. ["WEB_SESSIONS"] is DEPRECATED. `VIDEO_VIEW` is deprecated; use `VIDEO_COMPLETION` instead. `CTV_CONSIDERATION` is in BETA. For update, only draft campaigns may update objective type.
      - `order_line_id` string, nullable — Note: To clear this field on update, set the order line ID to 0. Order line ID that appears on the invoice. The order line must not be expired.
      - `performance_plus_campaign_settings` PerformancePlusCampaignSettings, nullable — Pinterest Performance+ campaign settings.
        - `boost_prospecting_ad_group_bid` boolean — Whether to boost prospecting ad group bid.
        - `pinner_list_exclusions` string[] — List of campaign-level exclusion pinner list IDs.
      - `start_time` integer, nullable — Timestamp in Unix format for scheduling when ads in the campaign start to appear. Must precede any start times set for child ad groups. Defaults to current time if no time is specified. Learn about [scheduling campaigns](/docs/api-features/managing-campaigns/#campaign-scheduling). Different start times can be set for the campaign's child ad groups, but they cannot occur before a `start_time` specified for the campaign. - If your campaign has a child ad group with a start time specified, and if you update that campaign with a `start_time` that is later than that of the ad group, the campaign `start_time` will supersede the ad group `start_time`, and the request will not return an error. - In this scenario, if you call [List campaigns](/docs/api/v5/campaigns-list) or [List ad groups](/docs/api/v5/ad_groups-list), the returned campaigns or ad groups are listed with the start and end times that you assigned them, regardless of supersedence.
      - `status` 'ACTIVE' | 'PAUSED' | 'ARCHIVED' | 'DRAFT' | 'DELETED_DRAFT' | 'null', nullable — Entity status
      - `summary_status` 'RUNNING' | 'PAUSED' | 'NOT_STARTED' | 'COMPLETED' | 'ADVERTISER_DISABLED' | 'ARCHIVED' | 'DRAFT' | 'DELETED_DRAFT' — Summary status for campaign
      - `tracking_urls` TrackingUrls, nullable — Third-party tracking URLs. Up to three tracking URLs - with a max length of 2,000 - are supported for each event type. Tracking URLs set at the ad group or ad level can override those set at the campaign level. For more information, see [Third-party and dynamic tracking](https://help.pinterest.com/en/business/article/third-party-and-dynamic-tracking).
        - `audience_verification` string[]
        - `buyable_button` string[]
        - `click` string[]
        - `engagement` string[]
        - `impression` string[]
      - `type` string — Always "campaign".
      - `updated_time` integer — UTC timestamp. Last update time.
    - `exceptions` Exception[] — Exceptions on failure.
      - `code` integer
      - `message` string, required

## Other responses

- `400` — The request could not be understood by the server due to unexpected data.
- `401` — Authentication is required and has either failed or not been provided.
- `403` — The request was valid, but the server is refusing action. The user might not have the necessary permissions for a resource.
- `404` — The requested resource could not be found on this server.
- `429` — The user has sent too many requests in a given amount of time and is being rate limited.
- `default` — An unexpected error response.

---

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