Pinterest Bulk API

The Bulk API from Pinterest — 3 operation(s) for bulk.

Operations 3

POST /ad_accounts/{ad_account_id}/bulk/download Get advertiser entities in bulk #
POST /ad_accounts/{ad_account_id}/bulk/upsert Create/update ad entities in bulk #
GET /ad_accounts/{ad_account_id}/bulk/{bulk_request_id} Download advertiser entities in bulk #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/pinterest-bulk-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

pinterest-bulk-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  version: 5.13.0
  title: Pinterest Bulk API
  description: This is the description of your API.
  contact:
    name: Pinterest, Inc.
    url: https://developers.pinterest.com/
  license:
    name: MIT
    url: https://spdx.org/licenses/MIT
  termsOfService: https://developers.pinterest.com/terms/
servers:
- url: https://api.pinterest.com/v5
tags:
- name: Bulk
paths:
  /ad_accounts/{ad_account_id}/bulk/download:
    post:
      summary: Get advertiser entities in bulk
      description: 'Create an asynchronous report that may include information on campaigns, ad groups, product groups, ads,

        and/or keywords; can filter by campaigns. Though the entities may be active, archived, or paused,

        only active entities will return data.'
      operationId: bulk_download/create
      security:
      - pinterest_oauth2:
        - ads:read
      x-ratelimit-category: ads_read
      x-sandbox: disabled
      parameters:
      - $ref: '#/components/parameters/path_ad_account_id'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/BulkDownloadRequest'
        description: Parameters to get ad entities in bulk
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BulkDownloadResponse'
          description: Success
        default:
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
          description: Unexpected error
      tags:
      - Bulk
  /ad_accounts/{ad_account_id}/bulk/upsert:
    post:
      description: 'Either create or update any combination of campaigns, ad groups, product groups, ads, or keywords.

        Note that this request will be processed asynchronously; the response will include a <code>request_id</code>

        that can be used to obtain the status of the request.'
      operationId: bulk_upsert/create
      security:
      - pinterest_oauth2:
        - ads:write
      x-ratelimit-category: ads_write
      x-sandbox: disabled
      parameters:
      - $ref: '#/components/parameters/path_ad_account_id'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/BulkUpsertRequest'
        description: Parameters to get create/update ad entities in bulk
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BulkUpsertResponse'
          description: Success
        default:
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
          description: Unexpected error
      summary: Create/update ad entities in bulk
      tags:
      - Bulk
  /ad_accounts/{ad_account_id}/bulk/{bulk_request_id}:
    get:
      description: 'Get the status of a bulk request by <code>request_id</code>, along with a download URL that will allow you to download the

        new or updated entity data (campaigns, ad groups, product groups, ads, or keywords).'
      operationId: bulk_request/get
      security:
      - pinterest_oauth2:
        - ads:read
      x-ratelimit-category: ads_read
      x-sandbox: disabled
      parameters:
      - $ref: '#/components/parameters/path_ad_account_id'
      - $ref: '#/components/parameters/path_bulk_request_id'
      - $ref: '#/components/parameters/include_details'
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BulkUpsertStatusResponse'
          description: Success
        default:
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
          description: Unexpected error
      summary: Download advertiser entities in bulk
      tags:
      - Bulk
components:
  parameters:
    path_bulk_request_id:
      name: bulk_request_id
      description: Unique identifier of a bulk upsert request.
      in: path
      required: true
      schema:
        type: string
    include_details:
      name: include_details
      description: if set to True then attach the errors/details to all the requests
      in: query
      schema:
        type: boolean
        default: false
    path_ad_account_id:
      name: ad_account_id
      description: Unique identifier of an ad account.
      in: path
      required: true
      schema:
        type: string
        pattern: ^\d+$
        maxLength: 18
  schemas:
    QuizPinResult:
      description: The result, and link out, based on the users choice.
      example:
        organic_pin_id: pinId
        android_deep_link: https://www.pinterest.com/
        ios_deep_link: https://www.pinterest.com/
        destination_url: https://www.pinterest.com/
      type:
      - object
      - 'null'
      properties:
        organic_pin_id:
          type: string
        android_deep_link:
          type: string
        ios_deep_link:
          type: string
        destination_url:
          type: string
        result_id:
          type: number
    ProductGroupPromotionCreateRequest:
      example:
        product_group_promotion:
        - slideshow_collections_description: Description
          collections_hero_pin_id: '123123'
          catalog_product_group_name: catalogProductGroupName
          collections_hero_destination_url: http://www.pinterest.com
          tracking_url: https://www.pinterest.com
          slideshow_collections_title: Title
          is_mdl: true
          status: ACTIVE
          creative_type: REGULAR
        - slideshow_collections_description: Description
          collections_hero_pin_id: '123123'
          catalog_product_group_name: catalogProductGroupName
          collections_hero_destination_url: http://www.pinterest.com
          tracking_url: https://www.pinterest.com
          slideshow_collections_title: Title
          is_mdl: true
          status: ACTIVE
          creative_type: REGULAR
        ad_group_id: '2680059592705'
      properties:
        ad_group_id:
          description: ID of the Ad Group the Product Group Promotion belongs to.
          example: '2680059592705'
          pattern: ^(AG)?\d+$
          title: ad_group_id
          type: string
        product_group_promotion:
          items:
            $ref: '#/components/schemas/ProductGroupPromotionCreateRequestElement'
          title: product_group_promotion
          type: array
      required:
      - ad_group_id
      - product_group_promotion
      title: ProductGroupPromotionCreateRequest
      type: object
    MatchTypeResponse:
      type:
      - string
      - 'null'
      description: Keyword match type
      example: BROAD
      enum:
      - BROAD
      - PHRASE
      - EXACT
      - EXACT_NEGATIVE
      - PHRASE_NEGATIVE
      - null
    CampaignCreateCommon:
      type: object
      allOf:
      - $ref: '#/components/schemas/CampaignCommon'
      - type: object
        properties:
          status:
            type: string
            default: ACTIVE
            allOf:
            - $ref: '#/components/schemas/EntityStatus'
          is_flexible_daily_budgets:
            type: boolean
            default: false
            allOf:
            - $ref: '#/components/schemas/CampaignIsFlexibleDailyBudgets'
          default_ad_group_budget_in_micro_currency:
            type:
            - integer
            - 'null'
            description: 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.
            example: 0
          is_automated_campaign:
            type: boolean
            default: false
            allOf:
            - $ref: '#/components/schemas/CampaignIsAutomatedCampaign'
    CampaignCommon:
      type: object
      description: Campaign Data
      properties:
        ad_account_id:
          description: Campaign's Advertiser ID. If you want to create a campaign in a Business Account shared account you need to specify the Business Access advertiser ID in both the query path param as well as the request body schema.
          example: '549755885175'
          type: string
          pattern: ^\d+$
        name:
          type: string
          description: Campaign name.
          example: ACME Tools
        status:
          type: string
          allOf:
          - $ref: '#/components/schemas/EntityStatus'
        lifetime_spend_cap:
          description: Campaign total spending cap. Required for Campaign Budget Optimization (CBO) campaigns. This and "daily_spend_cap" cannot be set at the same time.
          example: 1432744744
          type:
          - integer
          - 'null'
        daily_spend_cap:
          description: Campaign daily spending cap. Required for Campaign Budget Optimization (CBO) campaigns. This and "lifetime_spend_cap" cannot be set at the same time.
          example: 1432744744
          type:
          - integer
          - 'null'
        order_line_id:
          description: Order line ID that appears on the invoice.
          example: '549755885175'
          type:
          - string
          - 'null'
          pattern: ^\d+$
        tracking_urls:
          type:
          - object
          - 'null'
          allOf:
          - $ref: '#/components/schemas/TrackingUrls'
        start_time:
          type:
          - integer
          - 'null'
          description: Campaign start time. Unix timestamp in seconds. Only used for Campaign Budget Optimization (CBO) campaigns.
          example: 1580865126
        end_time:
          type:
          - integer
          - 'null'
          description: Campaign end time. Unix timestamp in seconds. Only used for Campaign Budget Optimization (CBO) campaigns.
          example: 1644023526
        summary_status:
          type: string
          allOf:
          - $ref: '#/components/schemas/CampaignSummaryStatus'
    BulkUpsertRequest:
      type: object
      description: Two set of objects to be managed asyncronusly by bulk. One for creations, one for modifications.
      properties:
        create:
          $ref: '#/components/schemas/BulkUpsertRequestCreate'
        update:
          $ref: '#/components/schemas/BulkUpsertRequestUpdate'
    CampaignIsFlexibleDailyBudgets:
      type: boolean
      description: Determine if a campaign has flexible daily budgets setup.
      example: true
      default: false
    ProductGroupPromotionUpdateRequest:
      example:
        product_group_promotion:
        - catalog_product_group_id: '1234123'
          slideshow_collections_description: Description
          collections_hero_pin_id: '123123'
          catalog_product_group_name: ProductGroupName
          collections_hero_destination_url: http://www.pinterest.com
          tracking_url: https://www.pinterest.com
          slideshow_collections_title: Title
          status: ACTIVE
          id: '2680059592705'
        - catalog_product_group_id: '1231231'
          slideshow_collections_description: Other description
          collections_hero_pin_id: '123124'
          catalog_product_group_name: ProductGroupName
          collections_hero_destination_url: http://www.pinterest.com
          tracking_url: https://www.pinterest.com
          slideshow_collections_title: Title
          status: ACTIVE
          id: '2680059592706'
        ad_group_id: '26823439592705'
      properties:
        ad_group_id:
          description: ID of the ad group the product group belongs to.
          example: '2680059592705'
          pattern: ^(AG)?\d+$
          title: ad_group_id
          type: string
        product_group_promotion:
          items:
            $ref: '#/components/schemas/ProductGroupPromotion'
          title: product_group_promotion
          type: array
      required:
      - ad_group_id
      - product_group_promotion
      title: ProductGroupPromotionUpdateRequest
      type: object
    KeywordsCommon:
      type: object
      properties:
        bid:
          type:
          - integer
          - 'null'
          description: Keyword custom bid in microcurrency - null if inherited from parent ad group.
          example: 200000
        match_type:
          $ref: '#/components/schemas/MatchTypeResponse'
        value:
          type: string
          description: Keyword value (120 chars max).
      required:
      - match_type
      - value
    OptimizationGoalMetadata:
      type: object
      properties:
        conversion_tag_v3_goal_metadata:
          properties:
            attribution_windows:
              properties:
                click_window_days:
                  type: integer
                engagement_window_days:
                  type: integer
                view_window_days:
                  type: integer
              type: object
            conversion_event:
              type: string
              enum:
              - PAGE_VISIT
              - SIGNUP
              - CHECKOUT
              - CUSTOM
              - VIEW_CATEGORY
              - SEARCH
              - ADD_TO_CART
              - WATCH_VIDEO
              - LEAD
              - APP_INSTALL
            conversion_tag_id:
              type: string
              pattern: ^[0-9]+$
            cpa_goal_value_in_micro_currency:
              type: string
              pattern: ^[0-9]+$
            is_roas_optimized:
              description: Ad group is ROAS optimized
              title: is_roas_optimized
              type:
              - boolean
              - 'null'
            learning_mode_type:
              description: Conversion learning model type
              enum:
              - NOT_ACTIVE
              - ACTIVE
              - null
              example: ACTIVE
              title: ConversionLearningModeType
              type:
              - string
              - 'null'
          type: object
        frequency_goal_metadata:
          properties:
            frequency:
              type: integer
            timerange:
              type: string
              description: User entity counts time range
              example: DAY
              enum:
              - THIRTY_DAY
              - DAY
              - SEVEN_DAY
              - TWENTY_MINUTE
              - TEN_MINUTE
              - TWENTY_FOUR_HOUR
          type: object
        scrollup_goal_metadata:
          properties:
            scrollup_goal_value_in_micro_currency:
              pattern: ^[0-9]+$
              type:
              - string
              - 'null'
          type: object
    AdUpdateRequest:
      type: object
      allOf:
      - $ref: '#/components/schemas/AdCommon'
      - type: object
        title: AdUpdateRequest
        properties:
          id:
            type: string
            example: '687195134316'
            pattern: ^\d+$
            description: The ID of this ad.
            title: id
          pin_id:
            type:
            - string
            - 'null'
            description: Pin ID. This field may only be updated for draft ads.
            example: '394205773611545468'
            pattern: ^\d+$
        required:
        - id
    AdPinId:
      type: object
      properties:
        pin_id:
          description: Pin ID.
          example: '394205773611545468'
          type: string
          pattern: ^\d+$
    BulkOutputFormat:
      type: string
      description: Bulk file output format
      enum:
      - CSV
      - JSON
    BulkEntityType:
      type: string
      description: Refers ads entity type
      example: AD
      enum:
      - CAMPAIGN
      - AD_GROUP
      - PRODUCT_GROUP
      - AD
      - KEYWORD
    ProductGroupPromotion:
      properties:
        id:
          description: ID of the product group promotion.
          example: '2680059592705'
          title: id
          type: string
          pattern: ^\d+$
        ad_group_id:
          description: ID of the ad group the product group belongs to.
          example: '2680059592705'
          pattern: ^(AG)?\d+$
          title: ad_group_id
          type: string
        bid_in_micro_currency:
          description: The bid in micro currency.
          example: 14000000
          title: bid_in_micro_currency
          type:
          - integer
          - 'null'
        included:
          description: True if the group is BIDDABLE, false if it should be EXCLUDED from serving ads.
          example: true
          title: included
          type:
          - boolean
          - 'null'
        definition:
          description: The full product group definition path
          example: '*/product_type_0=''kitchen''/product_type_1=''beverage appliances'''
          title: definition
          type:
          - string
          - 'null'
        relative_definition:
          description: The definition of the product group, relative to its parent - an attribute name/value pair
          example: product_type_1='beverage appliances'
          title: relative_definition
          type:
          - string
          - 'null'
        parent_id:
          description: The parent Product Group ID of this Product Group
          example: '1231234'
          title: parent_id
          type:
          - string
          - 'null'
          pattern: ^\d+$
        slideshow_collections_title:
          description: Slideshow Collections Title
          example: slideshow title
          title: slideshow_collections_title
          type:
          - string
          - 'null'
        slideshow_collections_description:
          description: Slideshow Collections Description
          example: slideshow description
          title: slideshow_collections_description
          type:
          - string
          - 'null'
        is_mdl:
          description: If set to true products promoted in this product group will use the Mobile Deep Link specified in your catalog
          example: true
          title: is_mdl
          type:
          - boolean
          - 'null'
        status:
          $ref: '#/components/schemas/EntityStatus'
        tracking_url:
          description: Tracking template for proudct group promotions. 4000 limit
          example: https://www.pinterest.com
          title: tracking_url
          type:
          - string
          - 'null'
        catalog_product_group_id:
          description: ID of the catalogs product group that this product group promotion references
          example: '1231235'
          title: catalog_product_group_id
          type:
          - string
          - 'null'
          pattern: ^\d+$
        catalog_product_group_name:
          description: Catalogs product group name
          example: catalogProductGroupName
          title: product_group_promotion_name
          type:
          - string
          - 'null'
        collections_hero_pin_id:
          description: Hero Pin ID if this PG is promoted as a Collection
          example: '123123'
          title: collections_hero_pin_id
          type:
          - string
          - 'null'
          pattern: ^\d+$
        collections_hero_destination_url:
          description: Collections Hero Destination Url
          example: http://www.pinterest.com
          title: collections_hero_destination_url
          type:
          - string
          - 'null'
        grid_click_type:
          $ref: '#/components/schemas/GridClickType'
      type: object
      title: ProductGroupPromotion
    GridClickType:
      type:
      - string
      - 'null'
      description: Where a user is taken after clicking on an ad in grid. </p><strong>Note:</strong>  This parameter is read-only and is set to DIRECT_TO_DESTINATION by default for direct links supported ads.  grid_click_type values provided will be ignored.
      example: CLOSEUP
      enum:
      - CLOSEUP
      - DIRECT_TO_DESTINATION
    TargetingSpec:
      description: Ad group targeting specification defining the ad group target audience. For example, `{"APPTYPE":["iphone"], "GENDER":["male"], "LOCALE":["en-US"], "LOCATION":["501"], "AGE_BUCKET":["25-34"]}`
      type: object
      properties:
        AGE_BUCKET:
          type:
          - array
          - 'null'
          description: Age ranges. If the AGE_BUCKET field is missing, the default behavior in terms of ad delivery is that **All age buckets** will be targeted.
          example:
          - 35-44
          - 50-54
          items:
            type: string
            enum:
            - 18-24
            - 21+
            - 25-34
            - 35-44
            - 45-49
            - 50-54
            - 55-64
            - 65+
        APPTYPE:
          type:
          - array
          - 'null'
          description: Allowed devices. If the APPTYPE field is missing, the default behavior in terms of ad delivery is that **All devices/apptypes** will be targeted.
          example:
          - ipad
          - iphone
          items:
            type: string
            enum:
            - android_mobile
            - android_tablet
            - ipad
            - iphone
            - web
            - web_mobile
        AUDIENCE_EXCLUDE:
          type:
          - array
          - 'null'
          description: '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**.'
          items:
            type: string
            pattern: ^\d+$
            minItems: 100
        AUDIENCE_INCLUDE:
          type:
          - array
          - 'null'
          description: '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**.'
          items:
            type: string
            pattern: ^\d+$
            minItems: 100
        GENDER:
          type:
          - array
          - 'null'
          description: '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**.'
          items:
            type: string
            enum:
            - unknown
            - male
            - female
        GEO:
          type:
          - array
          - 'null'
          description: Location region codes, e.g., "BE-VOV" (East Flanders, Belgium) For complete list, <a href="https://help.pinterest.com/sub/helpcenter/partner/pinterest_location_targeting_codes.xlsx" target="_blank">click here</a> or postal codes, e.g., "US-94107". Use either region codes or postal codes but not both. At least one of LOCATION or GEO must be specified. If the GEO field is missing, then only LOCATION values will be targeted (see LOCATION field below).
          items:
            type: string
        INTEREST:
          type: array
          description: 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**.
          items:
            type: string
        LOCALE:
          type:
          - array
          - 'null'
          description: 24 ISO 639-1 two letter language codes. If the LOCALE field is missing, the default behavior in terms of ad delivery is that **All languages will be targeted, only english non-sublanguage will be targeted**.
          items:
            type: string
        LOCATION:
          type:
          - array
          - 'null'
          description: 22 ISO Alpha 2 two letter country codes or US Nielsen DMA (Designated Market Area) codes (location region codes) (e.g., ["US", "807"]). For complete list, click here. Location-Country and Location-Metro codes apply. At least one of LOCATION or GEO must be specified. If the LOCATION field is missing, then only GEO values will be targeted (see GEO field above).
          items:
            type: string
        SHOPPING_RETARGETING:
          type:
          - array
          - 'null'
          description: "Array of object: lookback_window\t[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"
          items:
            type: object
            example:
              lookback_window: 30
              exclusion_window: 14
              tag_types:
              - 0
              - 6
            properties:
              lookback_window:
                description: Number of days ago to start lookback timeframe for dynamic retargeting
                example: 30
                title: lookback_window
                type: integer
              tag_types:
                description: Event types to target for dynamic retargeting
                example:
                - 0
                - 6
                items:
                  type: integer
                title: tag_types
                type: array
              exclusion_window:
                description: Number of days ago to stop lookback timeframe for dynamic retargeting
                example: 14
                title: exclusion_window
                type: integer
            title: TargetingSpec_SHOPPING_RETARGETING
        TARGETING_STRATEGY:
          type:
          - array
          - 'null'
          description: ''
          items:
            enum:
            - CHOOSE_YOUR_OWN
            - FIND_NEW_CUSTOMERS
            - RECONNECT_WITH_USERS
    ProductGroupPromotionCreateRequestElement:
      type: object
      title: ProductGroupPromotionCreateRequestElement
      allOf:
      - $ref: '#/components/schemas/ProductGroupPromotion'
      - type: object
        properties:
          creative_type:
            $ref: '#/components/schemas/CreativeType'
    QuizPinOption:
      description: ' This field contains multiple options to a quiz question.'
      example:
        id: 1
        text: Where do you thrive?
      type:
      - object
      - 'null'
      properties:
        id:
          type: number
        text:
          type: string
    CampaignSummaryStatus:
      type: string
      description: Summary status for campaign
      example: RUNNING
      enum:
      - RUNNING
      - PAUSED
      - NOT_STARTED
      - COMPLETED
      - ADVERTISER_DISABLED
      - ARCHIVED
      - DRAFT
      - DELETED_DRAFT
    CampaignUpdateRequest:
      type: object
      allOf:
      - $ref: '#/components/schemas/CampaignId'
      - $ref: '#/components/schemas/CampaignCommon'
      - $ref: '#/components/schemas/CampaignCreateCommon'
      - type: object
        properties:
          is_campaign_budget_optimization:
            type:
            - boolean
            - 'null'
            allOf:
            - $ref: '#/components/schemas/CampaignIsCampaignBudgetOptimization'
          is_flexible_daily_budgets:
            type:
            - boolean
            - 'null'
            allOf:
            - $ref: '#/components/schemas/CampaignIsFlexibleDailyBudgets'
          is_automated_campaign:
            type:
            - boolean
            - 'null'
            allOf:
            - $ref: '#/components/schemas/CampaignIsAutomatedCampaign'
          status:
            type:
            - string
            - 'null'
            allOf:
            - $ref: '#/components/schemas/EntityStatus'
          objective_type:
            type:
            - string
            - 'null'
            allOf:
            - $ref: '#/components/schemas/ObjectiveType'
        required:
        - id
        - ad_account_id
    EntityStatus:
      type: string
      description: Entity status
      example: ACTIVE
      enum:
      - ACTIVE
      - PAUSED
      - ARCHIVED
      - DRAFT
      - DELETED_DRAFT
    BulkDownloadResponse:
      type: object
      example:
        request_id: '2680059592705'
      properties:
        request_id:
          description: ID of the bulk request.
          example: '2680059592705'
          type: string
    TrackingUrls:
      description: 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 <a href="https://help.pinterest.com/en/business/article/third-party-and-dynamic-tracking" target="_blank">Third-party and dynamic tracking</a>.
      example:
        impression:
        - URL1
        - URL2
        click:
        - URL1
        - URL2
        engagement:
        - URL1
        - URL2
        buyable_button:
        - URL1
        - URL2
        audience_verification:
        - URL1
        - URL2
      type:
      - object
      - 'null'
      properties:
        impression:
          type: array
          items:
            type: string
        click:
          type: array
          items:
            type: string
        engagement:
          type: array
          items:
            type: string
        buyable_button:
          type: array
          items:
            type: string
        audience_verification:
          type: array
          items:
            type: string
    ObjectiveType:
      type: string
      description: Campaign objective type. If set as one of ["AWARENESS", "CONSIDERATION", "WEB_CONVERSION", "CATALOG_SALES"] 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. For update, only draft campaigns may update objective type.
      enum:
      - AWARENESS
      - CONSIDERATION
      - VIDEO_VIEW
      - WEB_CONVERSION
      - CATALOG_SALES
      - WEB_SESSIONS
    BulkDownloadRequest:
      type: object
      description: Ad entities to get in bulk request.
      properties:
        entity_types:
          type: array
          items:
            type: string
            allOf:
            - $ref: '#/components/schemas/BulkEntityType'
          minItems: 1
          maxItems: 5
          description: All entity types specified will be downloaded. Fewer types result in faster downloads.
          example:
          - CAMPAIGN
          - AD_GROUP
        entity_ids:
          type: array
          items:
            type: string
            pattern: ^\d+$
          description: All entities specified by these IDs as well as their children and grandchildren will be downloaded if the entity type is one of the types requested to be downloaded.
        updated_since:
          type: string
          pattern: ^\d+$
          example: '1622848072'
          description: Unix UTC timestamp to retrieve all entities that have changed since this time.
        campaign_filter:
          type: object
          properties:
            start_time:
              type: string
              pattern: ^\d+$
              example: '1622848072'
              description: Unix UTC timestamp.
            end_time:
              type: string
              pattern: ^\d+$
              example: '1622848072'
              description: Unix UTC timestamp.
            name:
              type: string
              example: campaign name
              description: Campaign name
            campaign_status:
              type: array
              items:
                $ref: '#/components/schemas/CampaignSummaryStatus'
            objective_type:
              type: array
              items:
                $ref: '#/components/schemas/ObjectiveType'
        output_format:
          type: string
          allOf:
          - $ref: '#/components/schemas/BulkOutputFormat'
          default: JSON
    CreativeType:
      type: string
      description: Ad creative type enum. For update, only draft ads may update creative type. </p><strong>Note:</strong> SHOP_THE_PIN has been deprecated. Please use COLLECTION instead.
      enum:
      - REGULAR
      - VIDEO
      - SHOPPING
      - CAROUSEL
      - 

# --- truncated at 32 KB (53 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/pinterest/refs/heads/main/openapi/pinterest-bulk-api-openapi.yml