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

# Get keywords

`GET /ad_accounts/{ad_account_id}/keywords`

## Request

- Base URL: `https://api.pinterest.com/v5`
- URL: `https://api.pinterest.com/v5/ad_accounts/{ad_account_id}/keywords`
- 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/keywords/get.ts> (a function with typed inputs; its response is checked against the schema)

Get a list of keywords based on the filters provided. If no filter is provided, it will default to the `ad_account_id` filter, which means it will only return keywords that specifically have `parent_id` set to the `ad_account_id`. Note: Keywords can have `ad_account_ids`, `campaign_ids`, and `ad_group_ids` set as their `parent_ids`. Keywords created through Ads Manager will have their `parent_id` set to an `ad_group_id`, not `ad_account_id`.

    For more information, see [Keyword targeting](https://help.pinterest.com/en/business/article/keyword-targeting).

    **Notes:**
    - Advertisers and campaigns can only be assigned keywords with excluding (`_NEGATIVE`).
    - All keyword match types are available for ad groups.

    For more information on match types, see [match type enums](/docs/api-features/targeting-overview/).

    **Returns:**
    - A successful call returns an object containing an array of new keyword objects and an empty `errors` object array.
    - An unsuccessful call returns an empty keywords array, and instead, inserts the entire object with nulled/negated properties into the `errors` object array:
      ```json
      {
        "keywords": [],
        "errors": [
          {
            "data": {
              "archived": null,
              "match_type": "EXACT",
              "parent_type": null,
              "value": "foobar",
              "parent_id": null,
              "type": "keyword",
              "id": null
            },
            "error_messages": [
              "Advertisers and Campaigns only accept excluded targeting attributes."
            ]
          }
        ]
      }

## Path parameters

- `ad_account_id` string, required

## Query parameters

- `campaign_id` string
- `ad_group_id` string
- `ad_group_ids` PinterestLibIntegerFormatType[]
- `match_types` MatchType[]
- `bookmark` string
- `page_size` integer

## Response `200`

The request has succeeded.

- object
  - `bookmark` string, nullable
  - `items` Keyword[], required
    - `archived` boolean
    - `bid` integer, nullable: **Note:** bid field has been deprecated. Input will not be set and field will return null. Keyword custom bid in microcurrency - null if inherited from parent ad group.
    - `id` string, required: Keyword ID .
    - `match_type` 'BROAD' | 'PHRASE' | 'EXACT' | 'EXACT_NEGATIVE' | 'PHRASE_NEGATIVE', required: Keyword match type
    - `parent_id` string, required: Keyword parent entity ID (advertiser, campaign, ad group).
    - `parent_type` string: Parent entity type (advertiser, campaign, ad group).
    - `type` string: Always keyword
    - `value` string, required: Keyword value (120 chars max).

## 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`: 1 breaking, 1 warning, 8 info
  - the response's body type changed from no type to `object` for status `200`
  - for the `query` request parameter `page_size`, the max was set to `250.00`
  - 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 `400`
  - …6 more
- **2025-10-16** (v5) `14c297539b64`: 1 info
  - added the new optional `query` request parameter `ad_group_ids`
- **2025-04-04** (v5) `10f9eba4ad97`: 1 info
  - the endpoint scheme security `client_credentials` was added to the API
- **2024-04-23** (v5) `f9321315766f`: 1 breaking, 5 warning, 5 info
  - the `allOf[subschema #2]/` response's property type changed from no type to `object` for status `200`
  - removed the optional property `allOf[subschema #2]/items/items/archived` from the response with the `200` status
  - removed the optional property `allOf[subschema #2]/items/items/id` from the response with the `200` status
  - removed the optional property `allOf[subschema #2]/items/items/parent_id` from the response with the `200` status
  - …7 more
- …earlier changes not shown

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