Image, Video & Carousel Pins
Publish one image, a two-to-five image carousel, or an MP4 video with a cover frame through one request.
Pinterest is a visual search engine, not a feed. A single Pin keeps surfacing in search and sending referral traffic for months after you publish it. PostZen publishes image, video, and carousel Pins to any board through one REST endpoint, schedules them for any date, and reads Pin analytics back, so you never touch Pinterest API v5 directly.
No credit card required

import PostZen from '@postzen/node';
const postzen = new PostZen();
await postzen.posts.createPost({
body: {
content: 'A quiet workspace for focused afternoons.',
mediaItems: [{ url: 'https://cdn.example.com/pin.jpg' }],
publishNow: true,
platforms: [{
platform: 'pinterest',
accountId: 'your-pinterest-account-id',
settings: { boardId: 'your-board-id', title: 'A calm workspace' },
}],
},
});Why PostZen?
Pinterest API brings its own authentication, rate limits, media rules, and maintenance. PostZen replaces it with one predictable integration.

2.3M+ posts
2,000+ usersFEATURES
One complete API for Pinterest formats, controls, and scheduled publishing

Publish one image, a two-to-five image carousel, or an MP4 video with a cover frame through one request.
List boards, create boards, and save a default board per account, or pass a board ID on each Pin.
Set a 100-character title, a 500-character description, and alt text alongside the media in the same request.
Attach a click-through link so every Pin sends people to the page you want, validated before publishing.
Pinterest's own scheduler stops at 30 days. PostZen holds Pins server-side and publishes at any date, or fills your queue slots.
Read impressions, saves, clicks, and follower counts, and publish the same Pin alongside Instagram, Facebook, X, and the other supported platforms.
Three steps to integrate the Pinterest Upload API

Sign up for PostZen and grab your API key from the dashboard.

Authorize your Pinterest account once. We manage OAuth, permissions, and publishing access for you.

POST to /v1/posts with Pinterest selected and your content or media. Done.
AI AGENTS
PostZen ships a hosted MCP server, so Claude, Cursor, Codex, and any other MCP client can connect Pinterest and publish with the same API your code uses.
Give your agent a Pinterest MCP server with Standard API access behind it. Connect a business account once, and any MCP client can create image, video, and carousel Pins on the right board, with links and alt text, from the conversation.
Set up PostZen from postzen.dev/mcp/pinterestEndpoint: https://mcp.postzen.dev/mcp. The agent reads the setup block on that page, registers the server, and connects Pinterest.
CODE EXAMPLE
One POST request to /v1/post — send a file or a public URL

const response = await fetch("https://api.postzen.dev/v1/posts", {
method: "POST",
headers: {
"Authorization": "Bearer POSTZEN_API_KEY",
"Content-Type": "application/json"
},
body: JSON.stringify({
platforms: [{
platform: "pinterest",
accountId: "your-pinterest-account-id",
settings: {
boardId: "your-board-id",
title: "Fall color palette guide",
link: "https://example.com/blog/fall-colors",
altText: "Twelve autumn color swatches on a linen background"
}
}],
content: "12 warm palettes for autumn brand refreshes",
mediaItems: [{ url: "https://cdn.example.com/fall-palette.jpg" }],
scheduledFor: "2026-11-15T19:00:00Z",
tags: ["design", "pinterest"]
})
});
const result = await response.json();
console.log("Scheduled successfully:", result.post._id);import requests
response = requests.post(
"https://api.postzen.dev/v1/posts",
headers={
"Authorization": "Bearer POSTZEN_API_KEY",
"Content-Type": "application/json",
},
json={
"platforms": [{
"platform": "pinterest",
"accountId": "your-pinterest-account-id",
"settings": {
"boardId": "your-board-id",
"title": "Fall color palette guide",
"link": "https://example.com/blog/fall-colors",
"altText": "Twelve autumn color swatches on a linen background",
},
}],
"content": "12 warm palettes for autumn brand refreshes",
"mediaItems": [{"url": "https://cdn.example.com/fall-palette.jpg"}],
"scheduledFor": "2026-11-15T19:00:00Z",
},
)
result = response.json()
print("Scheduled successfully:", result["post"]["_id"])const response = await fetch("https://api.postzen.dev/v1/posts", {
method: "POST",
headers: {
"Authorization": "Bearer POSTZEN_API_KEY",
"Content-Type": "application/json"
},
body: JSON.stringify({
platforms: [{
platform: "pinterest",
accountId: "your-pinterest-account-id",
settings: {
boardId: "your-board-id",
title: "Workspace tour",
coverImageKeyFrameTime: 2
}
}],
content: "A 30-second walk through the studio setup",
mediaItems: [{ url: "https://cdn.example.com/videos/workspace-tour.mp4" }],
publishNow: true
})
});
const result = await response.json();
console.log("Published:", result.post._id);PINTEREST API DETAILS
The facts developers ask about before choosing between building on Pinterest API v5 directly and publishing through PostZen.
Every new Pinterest app starts on Trial access. Pins created under Trial are visible only to the account that made them, and the app is capped at 1,000 reads and 300 writes per day. Standard access requires a review of your app and its use case. PostZen already holds Standard access, so Pins you publish through us are public from the first call.
Creating a Pin needs four scopes: boards:read, boards:write, pins:read, and pins:write. Access tokens last 30 days and must be refreshed with a refresh token that also expires. PostZen requests the right scopes during one-click OAuth and refreshes tokens in the background, so connections do not silently die.
Standard access allows 100 writes per minute per user, which is the limit Pin publishing consumes, and 1,000 reads per minute. PostZen queues publishes against these limits and retries a 429 automatically after the reset window Pinterest reports, so a burst of scheduled Pins never fails outright.
Pinterest API v5 has no scheduling endpoint, and the native scheduler in the Pinterest app only reaches 30 days ahead. PostZen stores the Pin and publishes it at the timestamp you set, weeks or months out, or drops it into the account's next open queue slot.
Every Pin needs a board ID. PostZen exposes endpoints to list an account's boards, create a new board, and save a default board, and lets the user pick a board during the connect flow. Pass settings.boardId on a Pin to override the default.
One JPEG, PNG, or WebP image up to 32 MB, two to five images for a carousel, or one MP4, MOV, or M4V video up to 150 MB with a cover image URL or keyframe. Titles are capped at 100 characters, descriptions and alt text at 500. PostZen checks all of this before the request reaches Pinterest, so you get a readable validation error instead of a Pinterest 400.
Still have questions?
Yes. Pinterest API v5 is a REST API for creating Pins and boards, reading analytics, and managing ads and catalogs. Creating Pins requires a business account, an approved app, and OAuth tokens with four scopes. PostZen wraps the organic publishing part so you send one request and we handle the rest.
Pinterest charges nothing for API access. The cost is the engineering: app review, OAuth, 30-day token refresh, board lookups, and the multi-step video upload. PostZen's Free plan includes 2 connected accounts and 20 posts; paid plans start at $19 per month.
Not with PostZen. You connect a Pinterest business account through our OAuth flow and authenticate to PostZen with your own API key. There is no Pinterest developer app to register, no Trial-to-Standard access review, and no Pinterest token to store.
Yes. Pinterest publishing requires a Pinterest business account, which you connect through our one-click OAuth flow. You can convert a personal account to a free business account in your Pinterest settings, and PostZen refreshes the OAuth token for you so the connection stays live.
Send a POST to /v1/posts with the Pinterest account, a board ID, and your image or video, then set publishNow for immediate publishing or scheduledFor for a future time. For hands-off posting, define weekly queue slots and PostZen fills them in order. The same call can post to Instagram, Facebook, X, and the other supported platforms.
Yes, and further ahead than Pinterest allows. Pinterest's native scheduler stops at 30 days and the API has no scheduling endpoint at all. Set scheduledFor to any future timestamp and PostZen publishes the Pin at that time, or add it to your queue.
Yes. Attach one MP4, MOV, or M4V video up to 150 MB for a video Pin, with a cover image URL or a keyframe time, or two to five images for a carousel Pin. PostZen runs Pinterest's register, upload, and poll steps for you. Animated GIF Pins are not supported yet.
Images are JPEG, PNG, or WebP up to 32 MB each, with 1000 by 1500 pixels and a 2:3 ratio recommended. Titles are limited to 100 characters, and descriptions and alt text to 500 characters each. PostZen validates all of this before publishing and returns a readable error instead of a Pinterest 400.
Yes. Pass settings.boardId to choose the board, or save a default board on the account and omit it. Add settings.link for the click-through URL. You can also list and create boards through the API.
Yes. PostZen has an official Python SDK (pip install postzen-sdk) and a Node SDK, and the REST API works from any language with an HTTP client. The Python example on this page schedules a Pin in about twenty lines.
Yes. Once an account is connected, PostZen syncs impressions, saves, clicks, likes, comments, and views for each Pin, plus follower counts, through the analytics endpoints. Analytics use the same OAuth connection as publishing.
Learn More
Join the 2,000+ users who chose PostZen over building around disconnected platform tools. Same reliability, 10x less code.