Pinterest Pin API
The Pin API from Pinterest — 4 operation(s) for pin.
The Pin API from Pinterest — 4 operation(s) for pin.
openapi: 3.0.3
info:
version: 5.13.0
title: Pinterest Pin 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: Pin
paths:
/ad_accounts/{ad_account_id}/ssio/insertion_orders/{pin_order_id}/status:
get:
summary: Get insertion order status by pin order id.
description: 'Get insertion order status for pin order id <code>pin_order_id</code>.
- The token''s user_account must either be the Owner of the specified ad account, or have one of the necessary roles granted to them via <a href="https://help.pinterest.com/en/business/article/share-and-manage-access-to-your-ad-accounts">Business Access</a>: Admin, Finance, Campaign.'
operationId: ssio_insertion_orders_status/get_by_pin_order_id
security:
- pinterest_oauth2:
- ads:read
x-ratelimit-category: ads_read
x-sandbox: enabled
parameters:
- $ref: '#/components/parameters/path_ad_account_id'
- $ref: '#/components/parameters/path_pin_order_id'
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/SSIOInsertionOrderStatusResponse'
description: Success
'400':
description: Invalid request parameter.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
example:
code: 400
message: Invalid request parameter.
default:
description: Unexpected error
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
tags:
- Pin
/pins/{pin_id}:
get:
summary: Get Pin
description: 'Get a Pin owned by the "operation user_account" - or on a group board that has been shared with this account.
- By default, the "operation user_account" is the token user_account.
Optional: Business Access: Specify an <code>ad_account_id</code> (obtained via <a href=''/docs/api/v5/#operation/ad_accounts/list''>List ad accounts</a>) to use the owner of that ad_account as the "operation user_account". In order to do this, the token user_account must have one of the following <a href="https://help.pinterest.com/en/business/article/share-and-manage-access-to-your-ad-accounts">Business Access</a> roles on the ad_account:
- For Pins on public or protected boards: Owner, Admin, Analyst, Campaign Manager.
- For Pins on secret boards: Owner, Admin.'
tags:
- Pin
operationId: pins/get
security:
- pinterest_oauth2:
- boards:read
- pins:read
x-ratelimit-category: org_read
x-sandbox: enabled
x-codeSamples:
- lang: python
label: Python SDK
source: '# Follow this link for initial setup: https://github.com/pinterest/pinterest-python-sdk#getting-started
from pinterest.organic.pins import Pin
# Pin information can be fetched from profile page or from list pin method here:
# https://developers.pinterest.com/docs/api/v5/#operation/pins/list
PIN_ID="<Add your pin id here>"
pin_get = Pin(pin_id=PIN_ID)
print("Pin Id: %s, Pin Title:%s" %(pin_get.id, pin_get.title))
'
- lang: cURL
label: curl
source: '# Pin information can be fetched from profile page or from list pin method here:
# https://developers.pinterest.com/docs/api/v5/#operation/pins/list
curl --location --request GET ''https://api.pinterest.com/v5/pins/<insert_pin_id>'' \
--header ''Authorization: Bearer <Add your token here>'' \
--header ''Content-Type: application/json''
'
- lang: cURL
label: curl (Sandbox)
source: '# Pin information can be fetched from profile page or from list pin method here:
# https://developers.pinterest.com/docs/api/v5/#operation/pins/list
curl --location --request GET ''https://api-sandbox.pinterest.com/v5/pins/<insert_sandbox_pin_id>'' \
--header ''Authorization: Bearer <Add your token here>'' \
--header ''Content-Type: application/json''
'
parameters:
- $ref: '#/components/parameters/path_pin_id'
- $ref: '#/components/parameters/query_pin_metrics'
- $ref: '#/components/parameters/query_ad_account_id'
responses:
'200':
description: response
content:
application/json:
schema:
$ref: '#/components/schemas/Pin'
'403':
description: Not authorized to access board or Pin.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
example:
code: 29
message: You are not permitted to access that resource.
'404':
description: Pin not found.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
example:
code: 50
message: Pin not found.
default:
description: Unexpected error
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
delete:
summary: Delete Pin
description: 'Delete a Pins owned by the "operation user_account" - or on a group board that has been shared with this account.
- By default, the "operation user_account" is the token user_account.
Optional: Business Access: Specify an <code>ad_account_id</code> (obtained via <a href=''/docs/api/v5/#operation/ad_accounts/list''>List ad accounts</a>) to use the owner of that ad_account as the "operation user_account". In order to do this, the token user_account must have one of the following <a href="https://help.pinterest.com/en/business/article/share-and-manage-access-to-your-ad-accounts">Business Access</a> roles on the ad_account:
- For Pins on public or protected boards: Owner, Admin, Analyst, Campaign Manager.
- For Pins on secret boards: Owner, Admin.'
tags:
- Pin
operationId: pins/delete
security:
- pinterest_oauth2:
- boards:read
- boards:write
- pins:read
- pins:write
x-ratelimit-category: org_write
x-sandbox: enabled
x-codeSamples:
- lang: python
label: Python SDK
source: '# Follow this link for initial setup: https://github.com/pinterest/pinterest-python-sdk#getting-started
from pinterest.organic.pins import Pin
# Pin information can be fetched from profile page or from create/list pin method here:
# https://developers.pinterest.com/docs/api/v5/#operation/pins/list
PIN_ID="<Add your pin id here>"
pin_delete=Pin.delete(pin_id=PIN_ID)
print("Pin was deleted? %s" % (pin_delete))
'
- lang: cURL
label: curl
source: '# Pin information can be fetched from profile page or from create/list pin method here:
# https://developers.pinterest.com/docs/api/v5/#operation/pins/list
curl --request DELETE ''https://api.pinterest.com/v5/pins/<insert_pin_id>'' \
--header ''Authorization: Bearer <Add your token here>'' \
--header ''Content-Type: application/json''
'
- lang: cURL
label: curl (Sandbox)
source: '# Pin information can be fetched from profile page or from create/list pin method here:
# https://developers.pinterest.com/docs/api/v5/#operation/pins/list
curl --request DELETE ''https://api-sandbox.pinterest.com/v5/pins/<insert_sandbox_pin_id>'' \
--header ''Authorization: Bearer <Add your token here>'' \
--header ''Content-Type: application/json''
'
parameters:
- $ref: '#/components/parameters/path_pin_id'
- $ref: '#/components/parameters/query_ad_account_id'
responses:
'204':
description: Successfully deleted Pin
'403':
description: Not authorized to access board or Pin.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
example:
code: 403
message: Not authorized to access board or Pin.
'404':
description: Pin not found.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
example:
code: 404
message: Pin not found.
default:
description: Unexpected error
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
patch:
summary: Update Pin
description: 'Update a pin owned by the "operating user_account".
- By default, the "operation user_account" is the token user_account.
Optional: Business Access: Specify an <code>ad_account_id</code> (obtained via <a href=''/docs/api/v5/#operation/ad_accounts/list''>List ad accounts</a>) to use the owner of that ad_account as the "operation user_account". In order to do this, the token user_account must have one of the following <a href="https://help.pinterest.com/en/business/article/share-and-manage-access-to-your-ad-accounts">Business Access</a> roles on the ad_account:
- For Pins on public or protected boards: Owner, Admin, Analyst, Campaign Manager.
- For Pins on secret boards: Owner, Admin.
<strong>This endpoint is currently in beta and not available to all apps. <a href=''/docs/new/about-beta-access/''>Learn more</a>.</strong>'
tags:
- Pin
operationId: pins/update
security:
- pinterest_oauth2:
- boards:read
- boards:write
- pins:read
- pins:write
x-ratelimit-category: org_write
x-sandbox: enabled
x-codeSamples:
- lang: cURL
label: curl
source: "# Pin information can be fetched from profile page or from create/list pin method here:\n# https://developers.pinterest.com/docs/api/v5/#operation/pins/list\n\ncurl --location --request PATCH 'https://api.pinterest.com/v5/pins/<insert_pin_id>' \\\n--header 'Authorization: Bearer <Add your token here>' \\\n--header 'Content-Type: application/json' \\\n--data-raw '{\n \"title\": \"My updated Pin title\"\n}'\n"
- lang: cURL
label: curl (Sandbox)
source: "# Pin information can be fetched from profile page or from create/list pin method here:\n# https://developers.pinterest.com/docs/api/v5/#operation/pins/list\n\ncurl --location --request GET 'https://api-sandbox.pinterest.com/v5/pins/<insert_sandbox_pin_id>' \\\n--header 'Authorization: Bearer <Add your token here>' \\\n--header 'Content-Type: application/json' \\\n--data-raw '{\n \"title\": \"My updated Pin title\"\n}'\n"
parameters:
- $ref: '#/components/parameters/path_pin_id'
- $ref: '#/components/parameters/query_ad_account_id'
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/PinUpdate'
responses:
'200':
description: response
content:
application/json:
schema:
$ref: '#/components/schemas/Pin'
'403':
description: Not authorized to update Pin.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
example:
code: 29
message: Not authorized to update Pin.
'404':
description: Pin not found.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
example:
code: 50
message: Pin not found.
'429':
description: 'This request exceeded a rate limit. This can happen if the client exceeds one
of the published rate limits or if multiple write operations are applied to
an object within a short time window.'
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
example:
code: 8
message: 'This request exceeded a rate limit. This can happen if the client exceeds one
of the published rate limits or if multiple write operations are applied to
an object within a short time window.'
default:
description: Unexpected error
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
/pins/{pin_id}/analytics:
get:
summary: Get Pin analytics
description: 'Get analytics for a Pin owned by the "operation user_account" - or on a group board that has been shared with this account.
- By default, the "operation user_account" is the token user_account.
Optional: Business Access: Specify an <code>ad_account_id</code> (obtained via <a href="https://developers.pinterest.com/docs/api/v5/#operation/ad_accounts/list">List ad accounts</a>) to use the owner of that ad_account as the "operation user_account". In order to do this, the token user_account must have one of the following <a href="https://help.pinterest.com/en/business/article/share-and-manage-access-to-your-ad-accounts">Business Access</a> roles on the ad_account:
- For Pins on public or protected boards: Admin, Analyst.
- For Pins on secret boards: Admin.
If Pin was created before <code>2023-03-20</code> lifetime metrics will only be available for Video and Idea Pin formats. Lifetime metrics are available for all Pin formats since then.'
tags:
- Pin
operationId: pins/analytics
security:
- pinterest_oauth2:
- boards:read
- pins:read
x-ratelimit-category: org_analytics
x-sandbox: disabled
parameters:
- $ref: '#/components/parameters/path_pin_id'
- $ref: '#/components/parameters/query_start_date'
- $ref: '#/components/parameters/query_end_date'
- $ref: '#/components/parameters/query_app_types'
- $ref: '#/components/parameters/query_pin_analytics_metric_types'
- $ref: '#/components/parameters/query_split_field_pins'
- $ref: '#/components/parameters/query_ad_account_id'
responses:
'200':
description: response
content:
application/json:
schema:
$ref: '#/components/schemas/PinAnalyticsResponse'
'400':
description: Invalid pins analytics parameters.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
example:
code: 400
message: Invalid pins analytics parameters.
'403':
description: Not authorized to access board or Pin.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
example:
code: 403
message: Not authorized to access board or Pin.
'404':
description: Pin not found.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
example:
code: 404
message: Pin not found.
default:
description: Unexpected error
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
/pins/{pin_id}/save:
post:
summary: Save Pin
description: 'Save a Pin on a board or board section owned by the "operation user_account".
- By default, the "operation user_account" is the token user_account.
Optional: Business Access: Specify an <code>ad_account_id</code> (obtained via <a href=''/docs/api/v5/#operation/ad_accounts/list''>List ad accounts</a>) to use the owner of that ad_account as the "operation user_account". In order to do this, the token user_account must have one of the following <a href="https://help.pinterest.com/en/business/article/share-and-manage-access-to-your-ad-accounts">Business Access</a> roles on the ad_account:
- For Pins on public or protected boards: Owner, Admin, Analyst, Campaign Manager.
- For Pins on secret boards: Owner, Admin.
- Any Pin type can be saved: image Pin, video Pin, Idea Pin, product Pin, etc.
- Any public Pin can be saved given a pin ID.'
tags:
- Pin
operationId: pins/save
security:
- pinterest_oauth2:
- boards:read
- boards:write
- pins:read
- pins:write
x-ratelimit-category: org_write
x-sandbox: enabled
x-codeSamples:
- lang: python
label: Python SDK
source: '# Follow this link for initial setup: https://github.com/pinterest/pinterest-python-sdk#getting-started
from pinterest.organic.pins import Pin
# Pin information can be fetched from profile page or from create/list pin method here:
# https://developers.pinterest.com/docs/api/v5/#operation/pins/list
PIN_ID="<Add your pin id here>"
# Board information can be fetched from profile page or from list board method here:
# https://developers.pinterest.com/docs/api/v5/#operation/boards/list
NEW_BOARD_ID="<Add your board id here>"
pin_save = Pin(pin_id=PIN_ID)
pin_save.save(board_id=NEW_BOARD_ID)
print("Pin Id: %s, Board Id:%s" %(pin_save.id, pin_save.board_id))
'
- lang: cURL
label: curl
source: "# Pin and Board information can be fetched from profile page or from create/list pin method here:\n# https://developers.pinterest.com/docs/api/v5/#operation/pins/list\n# https://developers.pinterest.com/docs/api/v5/#operation/boards/list\n\ncurl --request DELETE 'https://api.pinterest.com/v5/pins/<insert_pin_id>/save' \\\n--header 'Authorization: Bearer <Add your token here>' \\\n--header 'Content-Type: application/json' \\\n--data-raw '{\n \"board_id\": <insert_new_board_id>\n}'\n"
- lang: cURL
label: curl (Sandbox)
source: "# Pin and Board information can be fetched from profile page or from create/list pin method here:\n# https://developers.pinterest.com/docs/api/v5/#operation/pins/list\n# https://developers.pinterest.com/docs/api/v5/#operation/boards/list\n\ncurl --request DELETE 'https://api-sandbox.pinterest.com/v5/pins/<insert_sandbox_pin_id>/save' \\\n--header 'Authorization: Bearer <Add your token here>' \\\n--header 'Content-Type: application/json' \\\n--data-raw '{\n \"board_id\": <insert_new_sandbox_board_id>\n}'\n"
parameters:
- $ref: '#/components/parameters/path_pin_id'
- $ref: '#/components/parameters/query_ad_account_id'
requestBody:
description: Request object used to save an existing pin
required: true
content:
application/json:
schema:
type: object
properties:
board_id:
description: Unique identifier of the board to which the pin will be saved.
type: string
pattern: ^\d+$
nullable: true
board_section_id:
description: Unique identifier of the board section to which the pin will be saved.
type: string
pattern: ^\d+$
nullable: true
responses:
'201':
description: Successfully saved pin.
content:
application/json:
schema:
$ref: '#/components/schemas/Pin'
'403':
description: Not authorized to access Board or Pin.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
example:
code: 29
message: You are not permitted to access that resource.
'404':
description: Board or Pin not found.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
examples:
BoardNotFound:
value:
code: 40
message: Board not found.
PinNotFound:
value:
code: 50
message: Pin not found.
BoardSectionNotFound:
value:
code: 2031
message: Sorry! We couldn't find this board section.
default:
description: Unexpected error
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
components:
schemas:
PinAnalyticsMetricsResponse:
type: object
properties:
lifetime_metrics:
description: The lifetime metric name and value.
type: object
additionalProperties:
type: integer
example:
TOTAL_COMMENTS: 10
TOTAL_REACTIONS: 12
daily_metrics:
description: Array with the requested daily metric records
items:
type: object
properties:
data_status:
$ref: '#/components/schemas/DataStatus'
date:
description: 'Metrics date (UTC): YYYY-MM-DD.'
example: '2019-12-01'
type: string
metrics:
description: The metric name and daily value for each requested metric
type: object
additionalProperties:
type: number
example:
IMPRESSION: 240
OUTBOUND_CLICK: 20
PIN_CLICK: 37
QUARTILE_95_PERCENT_VIEW: 8
SAVE: 20
SAVE_RATE: 0.18
VIDEO_10S_VIEW: 2
VIDEO_AVG_WATCH_TIME: 2507.75
VIDEO_MRC_VIEW: 20
VIDEO_START: 29
VIDEO_V50_WATCH_TIME: 10031
type: array
summary_metrics:
description: The metric name and value over the requested period for each requested metric
type: object
additionalProperties:
type: number
example:
IMPRESSION: 240
OUTBOUND_CLICK: 20
PIN_CLICK: 37
QUARTILE_95_PERCENT_VIEW: 8
SAVE: 20
SAVE_RATE: 0.18
VIDEO_10S_VIEW: 2
VIDEO_AVG_WATCH_TIME: 2507.75
VIDEO_MRC_VIEW: 20
VIDEO_START: 29
VIDEO_V50_WATCH_TIME: 10031
Error:
title: Error
type: object
properties:
code:
type: integer
message:
type: string
required:
- code
- message
SSIOInsertionOrderStatus:
type: object
properties:
pin_order_id:
description: Salesforce order id
example: 0Q01N0000015hekSAB
type: string
status:
description: Salesforce insertion order status
example: Approved
type: string
creation_time:
description: Salesforce insertion order creation time
example: '2017-06-21T23:11:11.000Z'
type: string
nullable: true
PinMediaSourceImageURL:
title: Image URL
description: Image URL-based media source
type: object
properties:
source_type:
type: string
enum:
- image_url
url:
type: string
is_standard:
type: boolean
description: Set the parameter to false to create the new simplified Pin instead of the standard pin. Currently the field is only available to a list of beta users.
default: true
required:
- source_type
- url
PinMediaSourceImageBase64:
title: Image Base64
description: Base64-encoded image media source
type: object
properties:
source_type:
type: string
enum:
- image_base64
content_type:
type: string
enum:
- image/jpeg
- image/png
data:
type: string
pattern: '[a-zA-Z0-9+\/=]+'
is_standard:
type: boolean
description: Set the parameter to false to create the new simplified Pin instead of the standard pin. Currently the field is only available to a list of beta users.
default: true
required:
- source_type
- content_type
- data
PinMediaSourcePinURL:
title: Pin URL
description: Pin URL-based media source for product pin creation. Currently the field is only available to a list of beta users.
type: object
properties:
source_type:
type: string
enum:
- pin_url
is_affiliate_link:
type: boolean
description: This is an affiliate link or sponsored product. The FTC requires disclosure for paid partnerships and affiliate products.
default: false
required:
- source_type
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
- MAX_VIDEO
- SHOP_THE_PIN
- COLLECTION
- IDEA
- SHOWCASE
- QUIZ
example: REGULAR
title: CreativeType
BoardOwner:
title: Board owner
type: object
properties:
username:
type: string
readOnly: true
PinMediaSourceVideoID:
title: Video ID
description: Video ID-based media source
type: object
properties:
source_type:
type: string
enum:
- video_id
cover_image_url:
type: string
description: Cover image url.
cover_image_content_type:
type: string
description: Content type for cover image Base64.
enum:
- image/jpeg
- image/png
cover_image_data:
type: string
description: Cover image Base64.
media_id:
type: string
pattern: ^\d+$
is_standard:
type: boolean
description: Set the parameter to false to create the new simplified Pin instead of the standard pin. Currently the field is only available to a list of beta users.
default: true
required:
- source_type
- media_id
SSIOInsertionOrderStatusResponse:
allOf:
- $ref: '#/components/schemas/SSIOInsertionOrderStatus'
- type: object
PinAnalyticsResponse:
type: object
additionalProperties:
$ref: '#/components/schemas/PinAnalyticsMetricsResponse'
PinMediaSourceImagesBase64:
title: Images Base64
description: Multiple Base64-encoded images media source
additionalProperties: false
properties:
source_type:
type: string
enum:
- multiple_image_base64
items:
items:
additionalProperties: false
properties:
title:
type: string
description:
type: string
link:
type: string
description: Destination link for the image.
content_type:
type: string
enum:
- image/jpeg
- image/png
data:
type: string
description: Image to upload as base64 string.
pattern: '[a-zA-Z0-9+\/=]+'
required:
- data
- content_type
type: object
minItems: 2
maxItems: 5
description: Array with image objects.
type: array
index:
type: integer
minimum: 0
required:
- items
type: object
Pin:
title: Pin
description: Pin
type: object
nullable: true
properties:
id:
type: string
readOnly: true
example: '813744226420795884'
pattern: ^\d+$
created_at:
type: string
format: date-time
readOnly: true
example: '2020-01-01T20:10:40-00:00'
link:
type: string
nullable: true
example: https://www.pinterest.com/
maxLength: 2048
title:
type: string
nullable: true
description:
type: string
nullable: true
dominant_color:
type: string
nullable: true
description: Dominant pin color. Hex number, e.g. \"#6E7874\".
example: '#6E7874'
alt_text:
type: string
nullable: true
maxLength: 500
creative_type:
readOnly: true
nullable: true
type: string
allOf:
- $ref: '#/components/schemas/CreativeType'
board_id:
description: The board to which this Pin belongs.
type: string
pattern: ^\d+$
board_section_id:
description: The board section to which this Pin belongs.
type: string
pattern: ^\d+$
nullable: true
board_owner:
allOf:
- $ref: '#/components/schemas/BoardOwner'
type: object
readOnly: true
is_owner:
description: Whether the "operation user_account" is the Pin owner.
type: boolean
readOnly: true
media:
allOf:
- $ref: '#/components/schemas/PinMedia'
type: object
readOnly: true
media_source:
allOf:
- $ref: '#/components/schemas/PinMediaSource'
type: object
writeOnly: true
parent_pin_id:
description: The source pin id if this pin was saved from another pin. <a href="https://help.pinterest.com/article/save-pins-on-pinterest">Learn more</a>.
type: string
pattern: ^\d+$
nullable: true
is_standard:
description: Whether the Pin is standard or not. See documentation on <a href="https://developers.pinterest.com/docs/content/update/">Changes to Pin creation</a> for more information.
type: boolean
has_been_promoted:
description: Whether the Pin has been promoted or not.
type: boolean
readOnly: true
note:
description: Private note for this Pin. <a href="https://help.pinterest.com/en/article/add-notes-to-your-pins">Learn more</a>.
type: string
nullable: true
pin_metrics:
description: Pin metrics with associated time intervals if any.
type: object
nullable: true
example:
pin_metrics:
- 90d:
pin_click: 7
impression: 2
clickthrough: 3
all_time:
pin_click: 7
impression: 2
clickthrough: 3
reaction: 10
comment: 2
- null
PinUpdate:
title: PinUpdate
description: Pin fields for updates
type: object
nullable: true
properties:
alt_text:
type: string
nullable: true
description: Pin's alternative text.
maxLength: 500
board_id:
type: string
nullable: true
description: The id of the board to move the Pin onto.
p
# --- truncated at 32 KB (42 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/pinterest/refs/heads/main/openapi/pinterest-pin-api-openapi.yml