Pinterest

Pinterest is covered by Managed Keys - connect accounts and publish pins without a Pinterest developer app. Bring your own app (BYOK) only if you want full white-labelling.

Pinterest is covered by Managed Keys: your subscription includes Outstand's own Pinterest app, so you can connect Pinterest accounts and publish pins through Outstand's unified social media API without registering anything yourself. The Bring Your Own Key (BYOK) section at the end of this page is optional - follow it only if you want your own Pinterest app on the connection screen.

Managed Keys are included with your subscription and cover Pinterest. We handle the OAuth app setup for you, so there is no developer portal, no Pinterest access-tier upgrade and no app credentials to manage. Everything up to Bring Your Own Pinterest App (BYOK) applies to both Managed Keys and BYOK. Contact support@outstand.so if you have questions about your Managed Keys setup.

OAuth Scopes

Whether you use Managed Keys or BYOK, Outstand requests these scopes when an account connects:

ScopePurpose
pins:readRead pins and pin analytics
pins:writeCreate and delete pins
boards:readList the account's boards
boards:writeCreate boards
user_accounts:readRead the profile and account analytics

Connect a Pinterest Account

Connect from the Outstand Dashboard, or generate an authentication URL through the API and redirect your user to it:

curl -X POST https://api.outstand.so/v1/social-networks/pinterest/auth-url \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "redirect_uri": "https://yourapp.com/pinterest/connected",
    "tenant_id": "customer_123"
  }'

Both fields are optional:

  • redirect_uri - where the user is sent after the connection completes (for white-label flows)
  • tenant_id - associates the connected account with one of your own customers, so you can filter with GET /v1/social-accounts?tenantId=...

See Get social network authentication URL for the full request and response.

Discover and Create Boards

Every pin is published to a board. After connecting an account, list its boards to find a board_id:

curl https://api.outstand.so/v1/pinterest/accounts/{accountId}/boards \
  -H "Authorization: Bearer YOUR_API_KEY"

Response:

{
  "success": true,
  "data": [
    {
      "id": "123456789",
      "name": "Summer Collection",
      "description": "Our summer products",
      "pin_count": 42,
      "privacy": "PUBLIC"
    }
  ],
  "count": 1
}

The endpoint returns every board the account owns in one response. To create a board, POST to the same path with a name and optionally a description and privacy (PUBLIC, PROTECTED or SECRET - defaults to PUBLIC):

curl -X POST https://api.outstand.so/v1/pinterest/accounts/{accountId}/boards \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "name": "Travel inspiration", "privacy": "PUBLIC" }'

GET /v1/pinterest/accounts/{accountId}/profile returns the account's Pinterest profile (username, board, pin and follower counts, monthly views).

Creating Pinterest Posts

Pinterest requires a board_id for every pin. Pass it in the top-level pinterest object when creating a post:

curl -X POST https://api.outstand.so/v1/posts \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "accounts": ["YOUR_PINTEREST_ACCOUNT_ID"],
    "containers": [
      {
        "content": "Beautiful summer dresses now available",
        "media": [
          {
            "url": "https://example.com/dress.jpg",
            "filename": "dress.jpg"
          }
        ]
      }
    ],
    "pinterest": {
      "board_id": "123456789",
      "title": "Summer Dresses 2026",
      "link": "https://example.com/summer-collection",
      "alt_text": "A model wearing a red summer dress"
    }
  }'

The container's content becomes the pin description.

Pinterest Configuration Fields

FieldRequiredDescription
board_idYesThe ID of the board to pin to
titleNoPin title, max 100 characters. Defaults to the first 100 characters of the content
linkNoDestination URL when the pin is clicked
alt_textNoAccessibility text for images, max 500 characters
cover_image_urlNoCover image for a video pin. See Video
contentNoPin description used for Pinterest instead of the post's shared content

Supported Features

FeatureSupportedNotes
Single image pinYesOne image in media
Multi-image pin (carousel)YesSeveral images in media
Video pinYesVideo first in media; uploaded and processed by Pinterest before the pin is created
Delete pinYesDELETE /v1/posts/{id}/remote removes the pin from Pinterest (DELETE /v1/posts/{id} alone leaves it live)
Pin analyticsYesImpressions, saves, pin clicks and outbound clicks over the last 90 days
Account analyticsYesFollowers, pin count and account-level impressions, saves and clicks for a date range
Board managementYesList and create boards (see above)
Comments/repliesNoPinterest API v5 has no comments endpoint
Repost/repinNoNot available through the API

Media Requirements

Pins are created through the Pinterest API v5. See the official Create Pin and register media upload references.

At least one image or video is required for every pin. Text-only pins are not supported.

Images

RequirementSpecification
FormatsBMP, JPEG, PNG, TIFF, WEBP (per Pinterest's Pin specs)
Maximum size20 MB
Aspect ratio2:3 recommended
DeliveryPublicly accessible HTTPS URL - Pinterest fetches the image directly

One image creates a standard pin. Two or more images create a multi-image (carousel) pin.

Video

RequirementSpecification
ContainerMP4 or MOV
CodecsH.264 or HEVC video, AAC audio
Duration4 seconds to 5 minutes
Maximum size2 GB
ResolutionUp to 1920 px on the longest edge, up to 60 fps
DeliveryOutstand registers the upload with Pinterest (POST /v5/media), streams the file and waits for Pinterest to finish processing before creating the pin

The video must be the first item in media. A video pin carries one video, and its cover image is chosen in this order:

  1. pinterest.cover_image_url, if set
  2. the second item in media, if there is one
  3. otherwise the first frame of the video

Outstand checks each video against these limits when the post is created. See Video Processing for how videos that miss them are handled.

Token Management

Pinterest access tokens expire after 30 days. Outstand's token refresher runs daily and refreshes each connected Pinterest account about 7 days before its access token expires - roughly every 23 days - so you do not need to do anything.

Pinterest issues a continuous refresh token: it expires after 60 days, but every refresh returns a new one, so it can be renewed indefinitely. Because Outstand refreshes on a ~23-day cadence, the refresh token is always rotated well inside its 60-day window and never lapses on an account that stays connected. Pinterest no longer issues the legacy 365-day (non-renewable) refresh token.

If a refresh fails permanently - for example because the account holder revoked access in Pinterest - Outstand marks the social account inactive so the dashboard prompts a reconnect, and fires an account.token_expired webhook to any subscribed endpoint.

See Pinterest's authentication and authorization guide for the underlying token rules.

Limitations

  • Every pin must be assigned to a board (board_id is required)
  • Pin titles are limited to 100 characters. A title longer than that is rejected; the default title taken from the content is truncated to 100 characters
  • Pin descriptions are limited to 800 characters. Longer content is truncated to 800 characters
  • A pin cannot mix images and video
  • Pinterest has no comments/replies API
  • Repinning is not available through the API

Bring Your Own Pinterest App (BYOK)

Most customers can skip this section. It only applies if you want your own Pinterest app, and your own brand, on the connection screen instead of Outstand's. With Managed Keys, Outstand's Pinterest app already has the access Pinterest requires for publishing, and none of the steps or limits below apply to you.

Prerequisites

  1. A Pinterest business account - Pinterest requires one to register an app
  2. An app registered in Pinterest's Developer Portal
  3. Standard access for that app (see Access Tiers and Rate Limits)
  4. The app's App ID and App secret

Step 1: Add Outstand's Redirect URI

In your Pinterest app's settings, add this redirect URI:

https://www.outstand.so/app/api/socials/pinterest/callback

Pinterest sends users here after they authorize your app. If it is missing, Pinterest rejects the connection with a redirect URI mismatch.

Step 2: Add Your Credentials to Outstand

Add the App ID and App secret in the dashboard under Settings → Social Networks, or through the API:

curl -X POST https://api.outstand.so/v1/social-networks \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "network": "pinterest",
    "client_key": "YOUR_PINTEREST_APP_ID",
    "client_secret": "YOUR_PINTEREST_APP_SECRET"
  }'

Then connect accounts as usual. Connections now use your app.

If your Pinterest app was created before 25 September 2025, you do not need to change anything for continuous refresh tokens: Outstand sends continuous_refresh=true on every refresh, which opts older apps in. Newer apps issue them by default.

Access Tiers and Rate Limits

Pinterest limits what an app can do by its access tier:

Access tierWhat it allowsRate limit basis
TrialPins and boards are created as sandbox entities, visible only to their creatorCalls per day, per app
StandardReal, public pinsCalls per minute, per user, per app

New apps start on Trial. Outstand publishes through Pinterest's production API, so your app needs Standard access before it can publish pins through Outstand. Apply for the upgrade in the Developer Portal. Pinterest asks for a video recording of your app completing an action with the Pinterest API.

With Standard access, limits are counted per connected Pinterest account, so one busy account does not use up another's allowance. Each endpoint belongs to a rate-limit category, the current allowance is reported in the x-ratelimit-limit, x-ratelimit-remaining and x-ratelimit-reset response headers, and exceeding it returns HTTP 429.

See Pinterest's access tiers and rate limits documentation.

Troubleshooting

  • "Missing Pinterest App credentials for organization" - no Pinterest credentials are stored for your organization. Add them as in Step 2.
  • Redirect URI mismatch - the redirect URI in your Pinterest app must match https://www.outstand.so/app/api/socials/pinterest/callback exactly.
  • Pins fail to publish on a new app - check the app's access tier. Trial apps cannot publish real pins.