The Pinterest API for pins and boards
Create pins and manage boards on Pinterest through one API.
- Free tier, no credit card
- Instant API key
- MCP server included

New white lows just landed. In store Saturday, all sizes.
Ledge Skate & Shoe
Saved to New arrivals
/v1/posts201 CreatedCapabilities: What you can build on Pinterest
Every capability is one endpoint, the same one you call on every other platform.The screens show where each call lands.
Publishing
Create pins through the same POST /v1/posts call as every other platform. Each target names a board and carries one image.
- POST
/v1/posts - GET
/v1/posts/validate
- pin to a board
- one image
- POST
Boards
List, create, rename and delete boards through /v1/accounts/:id/boards. Boards are fetched live from Pinterest on every read, never cached.
- GET
/v1/accounts/{id}/boards - POST
/v1/accounts/{id}/boards
- list
- create
- rename
- delete
- GET
On every platform
Agent-ready
Every Pinterest capability is a typed tool on the SocialAPI.ai MCP server.
- social_api_validate_post
- social_api_create_post
One API key
The key that calls Pinterest calls all 13 platforms.
Authorization: Bearer sapi_key_…Predictable errors
The same status codes everywhere, whatever the platform behind them.
- 401expired token
- 429rate limited
- 501not on this platform
Call the Pinterest API
Create a pin on Pinterest
The same POST /v1/posts endpoint you already use for every other platform. A Pinterest target names the board the pin lands on and carries exactly one image.
# 1. List the account's boards to pick a target
curl https://api.social-api.ai/v1/accounts/<pinterest-account-id>/boards \
-H "Authorization: Bearer <your-api-key>" | jq
# 2. Create the pin on one of them
curl -X POST https://api.social-api.ai/v1/posts \
-H "Authorization: Bearer <your-api-key>" \
-H "Content-Type: application/json" \
-d '{
"title": "Weeknight roast chicken",
"text": "One pan, forty minutes, no marinade.",
"targets": [{
"account_id": "<pinterest-account-id>",
"board_id": "<board-id>",
"media": [{ "source_type": "url", "source": "https://example.com/chicken.jpg", "type": "image" }]
}]
}' | jqimport requests
AUTH = {"Authorization": "Bearer <your-api-key>"}
# Boards are fetched live from Pinterest, so list them when you need one.
boards = requests.get(
"https://api.social-api.ai/v1/accounts/<pinterest-account-id>/boards",
headers=AUTH,
).json()["data"]
resp = requests.post(
"https://api.social-api.ai/v1/posts",
headers=AUTH,
json={
"title": "Weeknight roast chicken",
"text": "One pan, forty minutes, no marinade.",
"targets": [{
"account_id": "<pinterest-account-id>",
"board_id": boards[0]["id"],
"media": [{
"source_type": "url",
"source": "https://example.com/chicken.jpg",
"type": "image",
}],
}],
},
)
print(resp.json()) # { "id": "...", "status": "published", ... }const auth = { Authorization: "Bearer <your-api-key>" };
const boardsRes = await fetch(
"https://api.social-api.ai/v1/accounts/<pinterest-account-id>/boards",
{ headers: auth },
);
const { data: boards } = await boardsRes.json();
const res = await fetch("https://api.social-api.ai/v1/posts", {
method: "POST",
headers: { ...auth, "Content-Type": "application/json" },
body: JSON.stringify({
title: "Weeknight roast chicken",
text: "One pan, forty minutes, no marinade.",
targets: [{
account_id: "<pinterest-account-id>",
board_id: boards[0].id,
media: [{ source_type: "url", source: "https://example.com/chicken.jpg", type: "image" }],
}],
}),
});
console.log(await res.json());In depth: How the Pinterest API works on SocialAPI.ai
Publish pins, list and manage boards, and read back pin metrics through the same unified API you already use for every other platform. Connect an account once through OAuth, name a board on the target, and the rest of your publishing code is untouched. Pinterest has no comments, DMs or mentions to read: it is a publishing surface, and this page says so plainly rather than implying an inbox that does not exist.
Pins through the endpoint you already call
A Pinterest pin goes out through the same POST /v1/posts request as Instagram, LinkedIn or Threads. The target names a board and carries one image, the post title becomes the pin title and the text becomes its description. Scheduling, retries and the publish webhook work exactly as they do everywhere else, because those are ours rather than Pinterest's.
Boards as a first-class resource
List, create, rename and delete boards through /v1/accounts/:id/boards without writing a line of Pinterest-specific HTTP. Every read goes live to Pinterest rather than to a cache of ours, so the board list you get is the board list the account actually has, including a board someone created in the Pinterest app a second ago.
We never store your Pinterest data
Pinterest's Developer Terms forbid storing information accessed through their API, so we do not: boards are fetched on every call and kept only for the length of the request. There is no cache to go stale, no sync job to fall behind, and nothing of yours sitting in our database waiting to be wrong.
One schema, one set of error codes
Pins come back in the same unified post schema as every other platform and fail with the same HTTP sentinels: 401 for a dead credential, 429 when Pinterest throttles you, 501 for something Pinterest does not support. Pinterest is a new target for code you have already written, not a second integration to maintain.
Token refresh handled for you
Pinterest access tokens expire after thirty days and refresh tokens after sixty. We refresh in the background before expiry and keep the account live, so a connection made once keeps working without a reconnect prompt appearing in front of your user.
Simple, honest pricing.
Reading comments, DMs, and mentions is free and unlimited on every plan. Paid plans start at $29/mo with unlimited posts and interactions. The free tier needs no credit card.
Frequently asked questions
What developers ask before they ship Pinterest.
Does Pinterest have an API?
Yes. Pinterest's v5 API covers pins and boards, and SocialAPI.ai exposes it through the same REST API as every other platform, so you create a pin with the same request you use to post to Instagram or LinkedIn.
Can I publish pins through the API?
Yes. Send a POST /v1/posts request with a Pinterest account in the targets array, a board_id on that target, and one image. The post title becomes the pin title and the text becomes its description.
Can I read or reply to comments on my pins?
No. Pinterest's public API exposes no comment endpoints, so there is nothing for us to read. Those calls return 501 for a Pinterest account rather than pretending the inbox is empty. If you need comment moderation today, Instagram, Facebook, YouTube, TikTok, Threads, X, Bluesky and LinkedIn all support it through the same endpoints.
How do I manage Pinterest boards?
Through /v1/accounts/:id/boards: list, create, rename and delete. Every read goes live to Pinterest rather than to a cache, because Pinterest's Developer Terms forbid storing what you fetch from their API.
How do I connect a Pinterest account?
Through OAuth, once per account, the same flow as every other platform. You do not need your own Pinterest developer app: the connection runs through SocialAPI.ai's, and we refresh the token in the background before it expires.
Can I edit a pin after publishing it?
No. Pinterest's edit endpoint is still in their own beta and pin media is immutable regardless, so changing a published pin means deleting it and creating a new one. The new pin gets a new id.
Can AI agents create pins?
Yes. The built-in MCP server exposes publishing and board management as tools, so Claude and other MCP-capable agents can draft pins and pick boards inside your existing approval flow.
Every other platform, one API: Every other platform, one API
Same key, same shapes, same webhook.
Ready to unify your social interactions?
Free tier available. No credit card required. Ships with the MCP server.