Pinterest Board Pins API
List a board's pins, up to 250 a page: title, description, link, saves, and whether each is an image or a video.
- 1 credit per call
- Failed calls are free
- Updated
- pinterest.board-pins.list
{ "board": { "id": "871517034080907898", "is_collaborative": false, "pin_count": 145, "privacy": "public", "section_count": 0, "url": "/pinterestpredicts/gimme-gummy/" }, "outcome": { "status": "incomplete" }, "pagination": { "has_more": false, "retrieved_total": 102 }, "items": [ { "favorite_count": 0, "has_products": false, "id": "871516965411036700", "is_native": false, "is_promoted": false, "is_repin": true, "is_story_pin": false, "is_video": false, "media_detection": "unverified", "media_type": "unknown", "repin_count": 28, "save_count": 140458, "board": { "id": "871517034080907898", "is_collaborative": false, "pin_count": 0, "privacy": "public", "section_count": 0, "url": "/PinterestPredicts/gimme-gummy/" }, "images": { "170x": { "height": 419, "url": "https://i.pinimg.com/236x/87/e0/76/87e076fc50c11492486f98cadfbd7ec0.jpg", "width": 236 }, "236x": { "height": 419, "url": "https://i.pinimg.com/236x/87/e0/76/87e076fc50c11492486f98cadfbd7ec0.jpg", "width": 236 }, "474x": { "height": 842, "url": "https://i.pinimg.com/474x/87/e0/76/87e076fc50c11492486f98cadfbd7ec0.jpg", "width": 474 }, "736x": { "height": 1280, "url": "https://i.pinimg.com/736x/87/e0/76/87e076fc50c11492486f98cadfbd7ec0.jpg", "width": 720 }, "orig": { "height": 1280, "url": "https://i.pinimg.com/originals/87/e0/76/87e076fc50c11492486f98cadfbd7ec0.jpg", "width": 720 } } }, { "favorite_count": 0, "has_products": false, "id": "871516965411509619", "is_native": false, "is_promoted": false, "is_repin": true, "is_story_pin": false, "is_video": true, "media_detection": "confirmed", "media_type": "video", "repin_count": 52, "save_count": 130036, "video_url": "https://v1.pinimg.com/videos/iht/av1Mp4-control-v2/0e/fb/1e/0efb1e25a593b9e9d30a95acc95c3c1e_720w.mp4", "board": { "id": "871517034080907898", "is_collaborative": false, "pin_count": 0, "privacy": "public", "section_count": 0, "url": "/PinterestPredicts/gimme-gummy/" }, "images": { "170x": { "height": 419, "url": "https://i.pinimg.com/236x/ef/83/b2/ef83b2788a7a9a873024d667458c7142.jpg", "width": 236 }, "236x": { "height": 419, "url": "https://i.pinimg.com/236x/ef/83/b2/ef83b2788a7a9a873024d667458c7142.jpg", "width": 236 }, "474x": { "height": 842, "url": "https://i.pinimg.com/474x/ef/83/b2/ef83b2788a7a9a873024d667458c7142.jpg", "width": 474 }, "736x": { "height": 1308, "url": "https://i.pinimg.com/736x/ef/83/b2/ef83b2788a7a9a873024d667458c7142.jpg", "width": 736 }, "orig": { "height": 2080, "url": "https://i.pinimg.com/originals/ef/83/b2/ef83b2788a7a9a873024d667458c7142.jpg", "width": 1170 } } } ]}
| # | Favorite count | Has products | Is native | Is promoted | Is repin | Is story pin | Is video | Media detection | Media type | Repin count |
|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 0 | false | false | false | true | false | false | unverified | unknown | 28 |
| 2 | 0 | false | false | false | true | false | true | confirmed | video | 52 |
| 3 | 0 | false | false | false | true | false | false | unverified | unknown | 351 |
What you send
The input
object of the request, with every field the endpoint accepts.
| Field | Type | Required | What it does | Example |
|---|---|---|---|---|
| url | string | yes | The board's link. | https://www.pinterest.com/PinterestPredicts/gim… |
| cursor | string | no | Pass the cursor from the last response to get the next page. | |
| limit | integer | no | How many pins to return in this page, up to 250. | 25 |
Fields it returns
What each record in the response holds, with the values from the sample above.
| Field | Type | What it is | Example |
|---|---|---|---|
| items[].board | object | The board the pin is saved to. | 6 fields |
| items[].board.id | string | Pinterest's ID for the board. | 871517034080907898 |
| items[].board.is_collaborative | boolean | Whether several people can add pins to the board. | false |
| items[].board.pin_count | integer | Pins Pinterest reports for the board. | 0 |
| items[].board.privacy | string | Who can see the board, such as public. | public |
| items[].board.section_count | integer | How many sections the board has. | 0 |
| items[].board.url | string | The board's address on Pinterest. | /PinterestPredicts/gimme-gummy/ |
| items[].favorite_count | integer | Times the pin was marked as a favourite. | 0 |
| items[].has_products | boolean | Whether the pin shows products to buy. | false |
| items[].id | string | Pinterest's ID for the pin. | 871516965411036700 |
| items[].images | object | The pin's image in several sizes. | 5 fields |
| items[].images.* | object | 3 fields | |
| items[].is_native | boolean | Whether the pin was created on Pinterest rather than saved from a site. | false |
| items[].is_promoted | boolean | Whether the pin is an ad. | false |
| items[].is_repin | boolean | Whether the pin was saved from another board. | true |
| items[].is_story_pin | boolean | Whether it is an idea pin with several pages. | false |
| items[].is_video | boolean | Whether the pin is a video. | false |
| items[].media_detection | string | Whether the media type was confirmed or not yet verified. | unverified |
| items[].media_type | string | The kind of media, such as video, when Pinterest says. | unknown |
| items[].repin_count | integer | Times the pin was saved to other boards. | 28 |
| items[].save_count | integer | Saves, as Pinterest shows them. | 140,458 |
| board | object | The board the pin is saved to. | 6 fields |
| board.id | string | Pinterest's ID for the board. | 871517034080907898 |
| board.is_collaborative | boolean | Whether several people can add pins to the board. | false |
| board.pin_count | integer | Pins Pinterest reports for the board. | 145 |
| board.privacy | string | Who can see the board, such as public. | public |
| board.section_count | integer | How many sections the board has. | 0 |
| board.url | string | The board's address on Pinterest. | /pinterestpredicts/gimme-gummy/ |
| items | array | The board's pins. | 3 records |
| outcome | object | Whether every pin was read, and why reading stopped. | 1 fields |
| outcome.status | string | Whether every pin was read: complete or incomplete. | incomplete |
| pagination | object | Paging details for this answer. | 2 fields |
| pagination.has_more | boolean | Whether more pins are available. | false |
| pagination.retrieved_total | integer | How many pins were read for this answer. | 102 |
Call it from your code, or ask your agent
Set UPSCRAPE_API_KEY to your key and copy a working request.
curl --request POST \ --url https://data.upscrape.com/execute \ --header "Authorization: Bearer $UPSCRAPE_API_KEY" \ --header "Content-Type: application/json" \ --header "Prefer: wait=30" \ --data '{ "capability": "pinterest.board-pins.list", "input": { "limit": 25, "url": "https://www.pinterest.com/PinterestPredicts/gimme-gummy/" }}'
import jsonimport osimport requestspayload = json.loads(r'''{ "capability": "pinterest.board-pins.list", "input": { "limit": 25, "url": "https://www.pinterest.com/PinterestPredicts/gimme-gummy/" }}''')response = requests.post( "https://data.upscrape.com/execute", headers={ "Authorization": f"Bearer {os.environ['UPSCRAPE_API_KEY']}", "Content-Type": "application/json", "Prefer": "wait=30", }, json=payload,)response.raise_for_status()print(json.dumps(response.json(), indent=2))
const response = await fetch("https://data.upscrape.com/execute", { method: "POST", headers: { "Authorization": `Bearer ${process.env.UPSCRAPE_API_KEY}`, "Content-Type": "application/json", "Prefer": "wait=30", }, body: JSON.stringify({ "capability": "pinterest.board-pins.list", "input": { "limit": 25, "url": "https://www.pinterest.com/PinterestPredicts/gimme-gummy/" }}),});if (!response.ok) { throw new Error(`Upscrape request failed: ${response.status}`);}console.log(JSON.stringify(await response.json(), null, 2));
https://data.upscrape.com/mcp
With Upscrape, get the Pinterest board pins for https://www.pinterest.com/PinterestPredicts/gimme-gummy/. Tell me what it costs before you run it, then show the results as a table.
More from the Pinterest API
Pinterest Board Pins API FAQ
The short answers. The docs have the long ones.
How much does the Pinterest Board Pins API cost?
1 credit per successful call, shown before it runs. You buy credits once, and paid credits never expire.
What do I send?
Send url. The input fields below list every option with its type and limits.
Do I need a Pinterest login?
No. It reads public Pinterest data; nothing runs on your account.
Can my AI agent call it?
Yes, over MCP: the agent finds pinterest.board-pins.list, checks its price and runs it with the same credits as the REST API.
Your first Pinterest call is free.
Up to 100 free credits to start, no card needed.