---
title: "Get bid floors"
method: POST
path: "/ad_accounts/{ad_account_id}/bid_floor"
tags: ["ad_groups"]
---

# Get bid floors

`POST /ad_accounts/{ad_account_id}/bid_floor`

## Request

- Base URL: `https://api.pinterest.com/v5`
- URL: `https://api.pinterest.com/v5/ad_accounts/{ad_account_id}/bid_floor`
- Auth: one of:
  - OAuth 2
    - Authorization code: `https://www.pinterest.com/oauth/`
    - Token URL: `https://api.pinterest.com/v5/oauth/token` scopes: `ads:read`
  - OAuth 2
    - Client credentials
    - Token URL: `https://api.pinterest.com/v3/oauth/access_token/` scopes: `ads:read`
- TypeScript: <https://skmtc.dev/pinterest/apis/pinterest-rest-api/docs/ad_accounts/:ad_account_id/bid_floor/post.ts> (a function with typed inputs; its response is checked against the schema)

List bid floors for your campaign configuration. Bid floors are given in microcurrency values based on the currency in the bid floor specification.

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, mutiply dollars by 1,000,000
* To convert microdollars to dollars, divide microdollars by 1,000,000

For more on bid floors see [Set your bid](https://help.pinterest.com/en/business/article/set-your-bid).

## Path parameters

- `ad_account_id` string, required

## Request body

- BidFloorCreate: Resource create operation model.
  - `bid_floor_specs` BidFloorSpec[], required: List of bid floor specifications.
    - `billable_event` 'CLICKTHROUGH' | 'IMPRESSION' | 'VIDEO_V_50_MRC', required: Ad group billable event type. For update, only draft ad groups may update billable event.
    - `countries` Country[]: List of ISO 3166-1 alpha-2 country codes.
    - `creative_type` 'REGULAR' | 'VIDEO' | 'SHOPPING' | 'CAROUSEL' | 'MAX_VIDEO' | 'SHOP_THE_PIN' | 'COLLECTION' | 'IDEA' | 'SHOWCASE' | 'QUIZ' | 'COLLAGE' | 'MAX_WIDTH_REGULAR_COLLECTION' | 'MAX_WIDTH_VIDEO_COLLECTION' | 'APP': Ad creative type enum. **Note:** SHOP_THE_PIN has been deprecated. Please use COLLECTION instead.
    - `currency` 'UNK' | 'USD' | 'GBP' | 'CAD' | 'EUR' | 'AUD' | 'NZD' | 'SEK' | 'ILS' | 'CHF' | 'HKD' | 'JPY' | 'SGD' | 'KRW' | 'NOK' | 'DKK' | 'PLN' | 'RON' | 'HUF' | 'CZK' | 'BRL' | 'MXN' | 'ARS' | 'CLP' | 'COP' | 'INR' | 'TRY', required: Currency Codes from ISO 4217
    - `objective_type` 'AWARENESS' | 'CONSIDERATION' | 'WEB_CONVERSION' | 'CATALOG_SALES' | 'VIDEO_COMPLETION' | 'SALES': 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.
    - `optimization_goal_metadata` OptimizationGoalMetadata
      - `conversion_tag_v3_goal_metadata` ConversionTagV3GoalMetadata
        - `attribution_windows` AttributionWindows
          - `click_window_days` integer
          - `engagement_window_days` integer
          - `view_window_days` integer
        - `conversion_event` 'PAGE_VISIT' | 'SIGNUP' | 'CHECKOUT' | 'CUSTOM' | 'VIEW_CATEGORY' | 'SEARCH' | 'ADD_TO_CART' | 'WATCH_VIDEO' | 'LEAD' | 'APP_INSTALL'
        - `conversion_tag_id` string
        - `cpa_goal_value_in_micro_currency` string
        - `is_roas_optimized` boolean, nullable: Pinterest Performance+ ROAS bidding. When enabled, Pinterest will optimize for conversion value instead of conversion volume. Only supported when `conversion_event` is set to `"CHECKOUT"` and `bid_strategy_type` is set to `"AUTOMATIC_BID"`. This parameter is not enabled for all advertisers. [Learn more](https://developers.pinterest.com/docs/getting-started/using-beta-and-restricted-features/).
        - `reporting_event` string: Event name for custom or standard events mapped to an oCPM model
      - `frequency_goal_metadata` FrequencyGoalMetadata: Frequency target can only be between 2 and 20
        - `frequency` integer
        - `timerange` 'THIRTY_DAY' | 'DAY' | 'SEVEN_DAY' | 'TWENTY_MINUTE' | 'TEN_MINUTE' | 'TWENTY_FOUR_HOUR'
      - `scrollup_goal_metadata` ScrollupGoalMetadata
        - `scrollup_goal_value_in_micro_currency` string, nullable
  - `targeting_spec` TargetingSpecOptimal
    - `AGE_BUCKET` TargetingSpecAgeBucket[], nullable: **Legacy field.** Predefined age ranges. We recommend using MINIMUM_AGE and MAXIMUM_AGE instead for more flexible targeting. Cannot be combined with MINIMUM_AGE/MAXIMUM_AGE. If neither AGE_BUCKET nor MINIMUM_AGE/MAXIMUM_AGE are specified, all ages will be targeted.
    - `APPTYPE` TargetingSpecAppType[], nullable: Allowed devices. If the APPTYPE field is missing, the default behavior in terms of ad delivery is that **All devices/apptypes** will be targeted.
    - `AUDIENCE_EXCLUDE` PinterestLibIntegerFormatType[], nullable: Excluded customer list IDs. Used to drive new customer acquisition goals. For example: ["2542620905475"]. Audience lists need to have at least 100 people with Pinterest accounts in them. If the AUDIENCE_EXCLUDE field is missing, the default behavior in terms of ad delivery is that **No users will be excluded**.
    - `AUDIENCE_INCLUDE` PinterestLibIntegerFormatType[], nullable: Targeted customer list IDs. For example: ["2542620905473"]. Audience lists need to have at least 100 people with Pinterest accounts in them Audience lists need to have at least 100 people with Pinterest accounts in them. If the AUDIENCE_INCLUDE field is missing, the default behavior in terms of ad delivery is that **All users will be included**.
    - `GENDER` TargetingSpecGender[], nullable: Targeted genders. Values: ["unknown","male","female"]. If the GENDER field is missing, the default behavior in terms of ad delivery is that **All genders will be targeted**.
    - `GEO` string[], nullable: Region codes or postal codes to include for targeting. Region codes represent broader geographical areas. Example: `US-CA` is the region code for California in the United States. Postal codes represent more granular, specific areas. Example: `94103` is a postal code for a specifc area in San Francisco, California, U.S.A. For each ad group, use only one of these methods, depending on which fits your targeting needs. Do not use both. For example, either specify a broader region code like `US-CA` or a more granular postal code within that regon, such as `94103`. You can specify multiple region codes or postal codes in an array, depending on which method you choose. Precede a region code array with the `region_codes` key and a postal code value with the `postal_codes` key. Examples: ``` "geo": { "region_codes": ["US-CA"] } ``` ``` "geo": { "postal_codes": ["94103"] } ``` For each ad group, specify at least one `GEO` or `LOCATION`. If you do not specifiy a `GEO` code, only `LOCATION` values will be targeted (See `LOCATION` parameter in this targeting spec.). Learn how to [get a current, complete list of codes](/docs/analytics-and-reports/ads-reporting/#get-all-available-codes-and-zones).
    - `GEO_EXCLUDE` string[]: [Closed beta](/docs/getting-started/using-beta-and-restricted-features/) Region codes or postal codes to exclude from the targeting inclusion area. See `GEO` parameter in this targeting spec for rules, syntax, and other information.
    - `INTEREST` string[]: Array of interest object IDs. If the INTEREST field is missing, the default behavior in terms of ad delivery is that **All interests will be targeted**.
    - `LOCALE` string[], nullable: 24 ISO 639-1 two-letter language codes. If the LOCALE field is not included in the request, all languages are targeted.
    - `LOCATION` string[], nullable: Metropolitan codes and/or ISO-Alpha-2, two-letter country codes to include for targeting. Precede country code values with the `country_codes` key and metro code values with `metro_codes` key. Example: ``` "location": { "country_codes": ["US", "CA"], "metro_codes": ["501", "602"] } ``` For each ad group, specify at least one `GEO` or `LOCATION` code. If you do not specify a `LOCATION` code, only `GEO` values will be targeted (See `GEO` parameter in this targeting spec.). Learn how to [get a current, complete list of codes](/docs/analytics-and-reports/ads-reporting/#get-all-available-codes-and-zones).
    - `LOCATION_EXCLUDE` string[]: [Closed beta](/docs/getting-started/using-beta-and-restricted-features/) Metropolitan codes and/or ISO-Alpha-2, two-letter country codes to exclude from targeting. See `LOCATION` parameter in this targeting spec for rules, syntax, and other information.
    - `MAXIMUM_AGE` string: Maximum age to target (inclusive). Values: "18", "19", ..., "65", "65+". Must be used together with `MINIMUM_AGE`. Cannot be combined with `AGE_BUCKET`. If neither `MINIMUM_AGE`/`MAXIMUM_AGE` nor `AGE_BUCKET` are specified, all ages will be targeted.
    - `MINIMUM_AGE` string: Minimum age to target (inclusive). Values: "18", "19", ..., "65". Note: 65+ is not allowed for minimum age. Must be used together with `MAXIMUM_AGE`. Cannot be combined with `AGE_BUCKET`. If neither `MINIMUM_AGE`/`MAXIMUM_AGE` nor `AGE_BUCKET` are specified, all ages will be targeted.
    - `SHOPPING_RETARGETING` TargetingSpecShoppingRetargeting[], nullable: Array of object: lookback_window [Integer]: Number of days ago to start lookback timeframe for dynamic retargeting tag_types [Array of integer]: Event types to target for dynamic retargeting exclusion_window [Integer]: Number of days ago to stop lookback timeframe for dynamic retargeting
      - `exclusion_window` integer: Number of days ago to stop lookback timeframe for dynamic retargeting
      - `lookback_window` integer: Number of days ago to start lookback timeframe for dynamic retargeting
      - `tag_types` integer[]: Event types to target for dynamic retargeting
    - `TARGETING_STRATEGY` TargetingStrategy[], nullable

## Response `200`

The request has succeeded.

- BidFloor: Bid floor request and response model.
  - `bid_floors` integer[]: A list of bid floors in micro currency. For example, [100000, 200000]
  - `type` string: Always the string 'bidfloor'.

## Other responses

- `201`: Resource create operation completed successfully.
- `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.

## Changes

- **2026-06-04** (v5) `b698c180678a`: 60 breaking, 16 warning, 8 info
  - added `#/components/schemas/ActionType` to the `bid_floor_specs/items/billable_event` request property `allOf` list
  - added `#/components/schemas/BidFloorObjectiveType` to the `bid_floor_specs/items/objective_type` request property `allOf` list
  - added `#/components/schemas/CreativeType` to the `bid_floor_specs/items/creative_type` request property `allOf` list
  - added `#/components/schemas/Currency` to the `bid_floor_specs/items/currency` request property `allOf` list
  - …80 more
- **2025-12-10** (v5) `6768e3ca1ffa`: 2 info
  - added the new optional request property `targeting_spec/MAXIMUM_AGE`
  - added the new optional request property `targeting_spec/MINIMUM_AGE`
- **2025-10-16** (v5) `14c297539b64`: 3 info
  - added the new `COLLAGE` enum value to the request property `bid_floor_specs/items/creative_type`
  - added the new `MAX_WIDTH_REGULAR_COLLECTION` enum value to the request property `bid_floor_specs/items/creative_type`
  - added the new `MAX_WIDTH_VIDEO_COLLECTION` enum value to the request property `bid_floor_specs/items/creative_type`
- **2025-08-12** (v5) `8fb7ab040159`: 1 info
  - added the new optional request property `bid_floor_specs/items/optimization_goal_metadata/conversion_tag_v3_goal_metadata/reporting_event`
- …earlier changes not shown

[Operation history](https://skmtc.dev/pinterest/apis/pinterest-rest-api/changes/ad_accounts/:ad_account_id/bid_floor/post.md)

---

[API](https://skmtc.dev/pinterest/apis/pinterest-rest-api.md) - [All operations](https://skmtc.dev/pinterest/apis/pinterest-rest-api/llms.txt) - [OpenAPI document](https://skmtc.dev/pinterest/apis/pinterest-rest-api/revisions/b698c180678a?raw)
