Create image and video pins on your boards from any AI app, with a title, description and link, right away or at a time you pick.
Limits
post _optionsget _insightscreate _postlist _scheduled _postscancel _scheduled _postPost rules
What Pinterest accepts, checked before anything is sent so a bad post costs nothing.
text.title.image_urls) or one video (video_url), not both. Files on your device go through upload_media first.board_idThe board to pin to (post_options lists them); default: the board picked when the account was connectedlinkThe https link the pin opensthumbnail_urlCover image of a video pin.Safety limits
What keeps your Pinterest account in good standing. They apply across every AI app and API key on this account, and you can’t turn them off.
publish_at is at least a minute ahead, at most a year. Links must keep working until then; uploads are kept with the post.When a limit is hit
Nothing is queued or retried behind your back: the tool answers with an error your AI app can read, explain and retry on time.
invalid_postThe post breaks a Pinterest rule. The message says which.gapToo soon after the last action. Wait retry_after_seconds.limitThe daily or weekly limit is used up. Says when it resets.cooldownPinterest pushed back; the account is resting.permissionThis app wasn’t allowed to do that. Reconnect and allow it.{ "error": "Pinterest actions are spaced 2–5 s apart, at random, to look human. Wait 2s.", "code": "gap", "retry_after_seconds": 2 }
Analytics
What get_insights reads on Pinterest. Ask in plain words; your AI app picks the report.
overview defaultViews, reach, engagement and followers over the last days, in the network’s own terms plus a headline every network shares. Without account, every analytics account side by side.followers The follower count day by day (subscribers on YouTube), with followers gained and lost.top_posts Your best posts of the period, ranked by engagement or by sort (views, reach, likes, comments, shares, date). Without account, across every analytics account.timing The weekday and hour slots that work best for your own posts (in UTC), how often you post against the engagement you get, and how fast posts peak. Instagram: when your followers are online.post One post’s figures, by the post_id from list_posts, top posts or create_post. details: true adds its day-by-day curve and the network’s extras.Tools
Pinterest has no tools of its own: it uses the shared posting tools, which work on every posting channel. This page shows only the fields Pinterest reads.
create_postPublish or schedule a post · PostsPosts · 20/dayWrite
Publish a post on one connected account, right away or at publish_at (then it's scheduled: returns a scheduled_post_id for list_scheduled_posts and cancel_scheduled_post). Pinterest: text ≤800, 1 image or 1 video (required), optional title ≤100. Pinterest pins to board_id, else the board picked at connect. Call post_options first for an account you haven't posted to in this conversation. Media: media_ids from upload_media (files the user has, or one you made), or public https links (image_urls, video_url); for a scheduled post, links must keep working until publish_at, uploads are kept with the post. Public and irreversible: confirm the account, final text, media, audience and time (with the user's time zone) with the user first.
accountaccount_id of the account to post from (list_accounts). Needed only when several accounts that can post are connected.textrequired on Pinteresttitlemedia_idsmedia_id values from upload_media, in order (images, or one video). Instead of image_urls and video_urlimage_urlsvideo_urllinkpublish_atthumbnail_urlboard_idpost_options lists them); default: the board picked when the account was connected{ "url": "https://www.threads.net/@ada.martin/post/DQ3kF8sDk2L", "post_id": "18063215523019873", "published": true }
{ "published": false, "status": "publishing", "post_id": "6914b2c8e4a1f0d3c2b5a7e9" }
invalid_postgaplimitcooldownpermissionpost_optionsPost options for an account · ReadsReads · 3,000/dayRead
What create_post accepts on one connected account: the network's limits (characters, title, media) and fields, and the account's own choices: TikTok privacy levels and which interactions the creator allows, Pinterest boards and the default one, the WordPress site, YouTube visibilities, Google Business Profile buttons. Call it before composing a post for an account you haven't posted to in this conversation.
accountaccount_id from list_accounts. Needed only when several accounts that can post are connected.{ "account_id": "a4c6e8f0-2b4d-4f6a-9c1e-3d5f7b9a1c72", "provider": "pinterest", "network": "Pinterest", "limits": { "max_chars": 800, "title_max": 100, "title_required": false, "media": "required", "max_images": 1, "video": true }, "fields": [ "board_id", "link", "thumbnail_url" ], "boards": [ { "id": "987654321098765432", "name": "Ceramics", "privacy": "PUBLIC" }, { "id": "987654321098765433", "name": "Studio life", "privacy": "PUBLIC" } ], "default_board": { "id": "987654321098765432", "name": "Ceramics" } }
gaplimitcooldownpermissionupload_mediaGet a link to upload an image, video or document · No callNo Pinterest callWrite
Returns a link where the user uploads an image, a video or a document from their device, and the media_id to pass to create_post (media_ids), comment or a message (send_message, start_chat: media_id). Use it when the user wants a photo, video or document (a PDF, say) in a post or message and it isn't already online: files attached in the chat can't reach Pluggzy, so ask them to upload it here. If you made the file yourself in a sandbox or terminal with internet access, upload it yourself with the upload_command it returns. Images: JPEG, PNG or WebP, at most 8 MB. Videos: MP4, MOV or WebM, at most 5 GB on the page (upload_command sends at most 100 MB), for create_post on publishing accounts only (LinkedIn, Instagram, Facebook posts, comments and messages take images). Documents (PDF, Word, Excel, PowerPoint (docx, xlsx, pptx, doc, xls, ppt), TXT or CSV, at most 15 MB) for send_message and start_chat only. Each link takes one file: for another one (each image of a carousel, say), call upload_media again. The file can be used for 24 hours, in as many posts and messages as needed; a scheduled post keeps its own copy until it goes out.
{ "url": "https://pluggzy.com/go/upload?t=eyJwIjoiY29ubmVjdCIsImV4cCI6MTc2MjY4MDAwMH0.k3Qm8ZrT0vX2bN5pL7wY1cA4dF6gH9jE", "media_id": "9b7d5f3a-1c2e-4a6b-8d0f-2e4c6a8b0d19", "upload_command": "curl -sS -T FILE_PATH -H 'X-File-Name: FILE_NAME' 'https://pluggzy.com/go/upload?t=eyJwIjoiY29ubmVjdCIsImV4cCI6MTc2MjY4MDAwMH0.k3Qm8ZrT0vX2bN5pL7wY1cA4dF6gH9jE'", "expires_in_minutes": 30, "usable_for_hours": 24, "max_image_mb": 8, "max_video_mb": 5000, "max_document_mb": 15 }
list_scheduled_postsList scheduled posts · No callNo Pinterest callRead
Posts scheduled with create_post (publish_at) or on the Pluggzy dashboard's calendar, on the accounts this connection can use: when, where, status, the text (and title, options and media links), and once published the post's URL. Posts scheduled before the calendar existed have no text here, only its length (chars).
statusaccountaccount_id from list_accounts (a listed chat's account_id). Needed only when several accounts are connected.limit{ "items": [ { "scheduled_post_id": "7c1e9a3f-5b2d-4e8a-9f0c-6d4b2a8e1c35", "account_id": "3f2b8c1e-7a4d-4e9b-9c21-5d8e6f0a1b2c", "provider": "linkedin", "publish_at": "2026-11-12T08:30:00.000Z", "status": "scheduled", "chars": 212, "text": "Three things we learned building a partner program from scratch 🧵" }, { "scheduled_post_id": "2a4c6e8f-0b1d-4f3a-8c5e-7d9b1f3a5c84", "account_id": "0d2f4b6a-8c1e-4a3d-b5f7-9e1c3a5d7f60", "provider": "threads", "publish_at": "2026-11-12T16:00:00.000Z", "status": "scheduled", "chars": 64, "text": "New glazes drop Friday. Which one goes in the shop first?", "media_kind": "image", "media": [ { "url": "https://cdn.northwind.example/glazes.jpg", "type": "image" } ] } ] }
cancel_scheduled_postCancel a scheduled post · No callNo Pinterest callWrite
Cancel a scheduled post (scheduled_post_id from create_post or list_scheduled_posts) that hasn't gone out yet, or a draft saved on the calendar. To change a post, cancel it and schedule the new version, or the user can edit it on the calendar in the Pluggzy dashboard.
scheduled_post_idrequired{ "scheduled_post_id": "7c1e9a3f-5b2d-4e8a-9f0c-6d4b2a8e1c35", "status": "cancelled" }
get_insightsGet insights · ReadsReads · 3,000/dayRead
How an account is doing, as its network reports it (Instagram Business, TikTok, YouTube, Pinterest, Google Business Profile, Threads). report: overview (default): the account's figures over the last `days` (views, reach, engagement, followers… as the network reports them, plus a comparable headline); without account, every analytics account side by side; followers: the follower (YouTube: subscriber) count day by day, with gained and lost; audience: followers by country, city, age and gender, as far as the network reports them; top_posts: the best posts of the last `days` by `sort` (engagement by default), with their figures; without account, across every analytics account; timing: when to post, from the account's own posts (best weekday × hour slots in UTC, posts per week vs engagement, how fast posts reach their final engagement; Instagram: when followers are online); inbox: messages received and sent, median time to first reply and the busiest hours; search_keywords: the Google searches that showed the Business Profile, by month; post: one post's figures (post_id from list_posts, top_posts or create_post); details=true adds its day-by-day curve and the network's extras (Facebook earnings, YouTube retention and daily views). Not every network has every report (followers: Instagram Business, TikTok, YouTube, Pinterest; audience: Instagram Business, TikTok, YouTube; inbox: Instagram Business; search_keywords: Google Business Profile). LinkedIn, WhatsApp, Telegram and the personal Instagram and Facebook logins have no insights here. Read-only.
accountaccount_id from list_accounts. Leave it out for overview or top_posts to cover every analytics account; the other reports need it when several are connected.providerreportdayspost_idpost_id (or the scheduled_post_id create_post gave)detailssorttop_posts: what ranks the postslimittop_posts: how many postscursorsearch_keywords: next_cursor from the previous page{ "report": "overview", "from": "2026-10-11", "to": "2026-11-09", "accounts": [ { "account_id": "e2c4a6b8-1d3f-4a5c-9e7b-2f4d6a8c0e13", "provider": "instagrambusiness", "name": "Northwind Studio", "source": "account", "metrics": { "reach": 12480, "views": 48210, "accounts_engaged": 1034, "total_interactions": 2876, "likes": 2310, "comments": 184, "saves": 212, "shares": 97, "profile_views": 1920, "website_clicks": 61 }, "headline": { "views": 48210, "reach": 12480, "engagement": 2876, "followers": null, "followers_gained": null, "followers_lost": null } }, { "account_id": "f1a3c5e7-9b2d-4f6a-8c0e-5d7b9f1a3c48", "provider": "facebookpages", "name": "Northwind Studio", "source": "account", "metrics": { "page_media_view": 21340, "page_total_media_view_unique": 8120, "page_views_total": 640, "page_post_engagements": 1120, "page_video_views": 3010, "page_follows": 3420, "followers_gained": 58, "followers_lost": 9 }, "headline": { "views": 21340, "reach": 8120, "engagement": 1120, "followers": 3420, "followers_gained": 58, "followers_lost": 9 } }, { "account_id": "a4c6e8f0-2b4d-4f6a-9c1e-3d5f7b9a1c72", "provider": "pinterest", "name": "Northwind Studio", "source": "account", "metrics": { "impressions": 30900, "engagements": 1460, "saves": 380, "pin_clicks": 610, "outbound_clicks": 205, "follower_count": 1288, "followers_gained": 41, "followers_lost": 6 }, "headline": { "views": 30900, "reach": null, "engagement": 1460, "followers": 1288, "followers_gained": 41, "followers_lost": 6 } } ] }
gaplimitcooldownpermission