Pinterest posting requires an access token and a target board ID. Every pin needs one image or video.
Content support
| Capability | Support |
|---|---|
| Title | Optional. Up to 100 characters. |
| Description | Optional. Up to 500 characters. |
| Required media | Yes (one image or video). |
| Required options | boardId. |
| Optional options | title, description, link, altText. |
Set up credentials
- Create a Pinterest developer app.
- Configure redirect URIs for your app or Scheduler deployment.
- Request scopes for content publishing (
pins:write,boards:read,user_accounts:read). - Complete OAuth authorization for the Pinterest account.
- List boards and copy the board ID you want to post to.
- Store the access token and board ID.
The CLI does not bundle a Pinterest OAuth app. To use it from the CLI, supply your own client secret through SIMPLE_POST_PINTEREST_CLIENT_SECRET before running simplepost account add pinterest.
Pinterest refresh tokens rotate on every refresh — see token rotation.
Environment variables
PINTEREST_ACCESS_TOKEN=
PINTEREST_BOARD_ID=
Both variables are required for env-only setup. Without PINTEREST_BOARD_ID, the SDK has no target board and rejects the post.
SDK options
await post({
content: {
text: "A short description for the pin",
media: [{ type: "image", path: "./photo.jpg" }],
},
platforms: ["pinterest"],
options: {
pinterest: {
boardId: "1234567890123456789",
title: "Pin title",
link: "https://example.com",
altText: "A descriptive alt text",
},
},
});
REST server account
Add this entry under accounts in the self-hosted REST server's accounts.json:
{
"id": "pinterest-main",
"platform": "pinterest",
"credentials": { "accessToken": "..." },
"options": {
"boardId": "987654321"
}
}