---
title: "Get promotions"
method: GET
path: "/ad_accounts/{ad_account_id}/promotions"
tags: ["promotions"]
---

# Get promotions

`GET /ad_accounts/{ad_account_id}/promotions`

## Request

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

Gets all promotions associated with an ad account ID that can be
applied to an ad group. Can be either internally-saved promotions or external
promotions imported from a commerce integration.

## Path parameters

- `ad_account_id` string, required

## Query parameters

- `bookmark` string
- `page_size` integer
- `order` 'ASCENDING' | 'DESCENDING'

## Response `200`

The request has succeeded.

- object
  - `bookmark` string, nullable
  - `items` Promotion[], required
    - `ad_account_id` string, required: The Ad Account ID that this promotion belongs to.
    - `discount_status` 'OTHER' | 'ACTIVE' | 'PAUSED' | 'SCHEDULED' | 'EXPIRED': Discount status based on the current time and start and end time of discount
    - `end_time` integer: Promotion end time. Unix timestamp in seconds. Independent of campaign end time.
    - `external_id` string: Platform-specific ID for this promotion. Will be null for promotions first created within Pinterest.
    - `id` string, required: Promotion ID
    - `platform_type` string: The source integration platform used when creating the promotion. Currently supported values are 'DEFAULT' and 'SHOPIFY'.
    - `promotion_code` string: Code that can be used to redeem a promotion.
    - `promotion_custom_id` string: An optional field for user defined promotion ID for this promotion. Will copy from Pinterest system generated ID if user did not provide one.
    - `promotion_title` string, required: Internal name for the promotion.
    - `promotion_type` 'VARIABLE' | 'SITEWIDE' | 'CHECKOUT' | 'SAVE_X_ON_Y' | 'BUY_X_GET_Y' | 'SPEND_X_SAVE_Y' | 'FREE_SHIPPING' | 'FREE_SHIPPING_MINIMUM' | 'FREE_SHIPPING_WITH_DISCOUNT' | 'SITEWIDE_IN_STORES' | 'EXTRA_PERCENT_OFF' | 'GIFT_WITH_PURCHASE' | 'GIFT_WITH_PURCHASE_MINIMUM' | 'FIXED' | 'PERCENT_OFF_CLEARANCE' | 'X_OFF_Y' | 'GIFT_WITH_FIRST_PURCHASE' | 'BUY_X_GET_ONE_FREE' | 'CASH_BACK' | 'POINTS_ON_ALL_PURCHASES' | 'BONUS' | 'POINTS_WITH_PURCHASE' | 'CUSTOM', required: Determines the displayed promotion text along with what parameters (if any) are needed to complete the template.
    - `start_time` integer: Promotion start time. Unix timestamp in seconds. Independent of campaign start time.
    - `status` 'ACTIVE' | 'PAUSED' | 'ARCHIVED' | 'DRAFT' | 'DELETED_DRAFT': Entity status
    - `template_values` PromotionTemplateValue[]: List of values to be inserted in the promotion type-specific template.
      - `amount` number: Numeric value.
      - `currency_code` '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': Currency Codes from ISO 4217
      - `custom_text` string: Custom text.
      - `percent` number: Percent value.

## 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.

## Changes

- **2026-06-04** (v5) `b698c180678a`: 2 breaking, 7 info
  - for the `query` request parameter `order`, default value `ASCENDING` was added
  - the response's body type changed from no type to `object` for status `200`
  - removed `#/components/schemas/Paginated, subschema #2` from the response body `allOf` list for the response status `200`
  - added the non-success response with the status `401`
  - …5 more
- **2025-08-12** (v5) `8fb7ab040159`: 1 warning, 1 info
  - added the new `CUSTOM` enum value to the `allOf[subschema #2]/items/items/allOf[subschema #1: Promotion]/promotion_type` response property for the response status `200`
  - added the optional property `allOf[subschema #2]/items/items/allOf[subschema #1: Promotion]/template_values/items/custom_text` to the response with the `200` status
- **2025-07-16** (v5) `43134ca41f18`: 1 info
  - added the optional property `allOf[subschema #2]/items/items/allOf[subschema #1: Promotion]/promotion_custom_id` to the response with the `200` status
- **2025-04-04** (v5) `10f9eba4ad97`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/pinterest/apis/pinterest-rest-api/changes/ad_accounts/:ad_account_id/promotions/get.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)
