---
title: "Set default Pinterest board"
method: PUT
path: "/v1/accounts/{accountId}/pinterest-boards"
tags: ["Connect"]
---

# Set default Pinterest board

`PUT /v1/accounts/{accountId}/pinterest-boards`

## Request

- Base URL: `https://zernio.com/api`
- URL: `https://zernio.com/api/v1/accounts/{accountId}/pinterest-boards`
- Auth: HTTP bearer

Sets the default board used when publishing pins for this account.

## Path parameters

- `accountId` string, required

## Request body

- object
  - `defaultBoardId` string, required
  - `defaultBoardName` string

## Response `200`

Default board set

- object
  - `message` string
  - `account` SocialAccount
    - `_id` string, required
    - `platform` 'tiktok' | 'instagram' | 'facebook' | 'youtube' | 'linkedin' | 'twitter' | 'threads' | 'pinterest' | 'reddit' | 'bluesky' | 'googlebusiness' | 'telegram' | 'snapchat' | 'discord' | 'slack' | 'whatsapp' | 'shopify' | 'wordpress' | 'wix' | 'linkedinads' | 'metaads' | 'pinterestads' | 'tiktokads' | 'xads' | 'googleads' | 'openaiads' | 'redditads' | 'sms' | 'phone' | 'rcs' | 'whopads' | 'hubspot' | 'webflow', required
    - `profileId` union, required
      - string
      - Profile
        - `_id` string
        - `userId` string
        - `name` string
        - `description` string
        - `color` string
        - `timezone` string, nullable: IANA timezone new posts on this profile use when the request names no `timezone`. Null means UTC.
        - `externalId` string, nullable: Your own identifier for this profile, set on create or update. Null when none is set.
        - `isDefault` boolean
        - `isOverLimit` boolean: Only present when includeOverLimit=true. Indicates if this profile exceeds the plan limit.
        - `accountCount` integer: In the profile list. Connected accounts on the profile, including ones that need reconnecting; phone and SMS number internals and posting accounts hidden by an ads connect are not counted.
        - `createdAt` string, date-time
    - `username` string
    - `displayName` string
    - `platformUserId` string: The account's id on its platform as the platform reports it to Zernio; stable across reconnects, so it is the key to match an account against your own records. Instagram: the app-scoped user id on Instagram Login accounts (the professional account id is in `metadata.instagramScopedId`), the professional account id (`17841...`) on Facebook Login accounts. TikTok: the open_id of Zernio's TikTok app, which differs from the open_id any other app sees for the same user. Either value can be passed back as `expectedPlatformUserId` on GET /v1/connect/{platform}.
    - `tiktokAccountType` 'business' | 'personal' | 'unknown': TikTok accounts only. The account type TikTok reported when the account was connected. `personal` accounts cannot use TikTok direct messages through the API (TikTok limits Business Messaging to Business Accounts): skip the inbox for them and tell the user to switch to a Business Account in the TikTok app, then reconnect. `business` is the prerequisite, not a guarantee; messaging also needs the messaging scopes granted and TikTok's regional availability. `unknown` on accounts connected before this was captured or whose grant left out the account-type scope.
    - `profilePicture` string, nullable: URL to the account's profile picture on the platform. May be null if the platform does not provide one.
    - `profileUrl` string: Full profile URL for the connected account on its platform.
    - `isActive` boolean, required
    - `needsReconnection` boolean: The platform definitively reported the stored OAuth token as dead. While true, GET /v1/connect/{platform}/ads returns a fresh authUrl (implicit force=true) instead of alreadyConnected, so re-running the connect flow recovers the account. Cleared automatically when the account is re-authorized.
    - `followersCount` number: Follower count (only included if user has analytics add-on)
    - `followersLastUpdated` string, date-time: Last time follower count was updated (only included if user has analytics add-on)
    - `parentAccountId` string, nullable: Reference to the parent posting SocialAccount. Set for ads accounts that share or derive from a posting account's OAuth token. null for standalone ads (Google Ads) and all posting accounts. Meta ads business-login accounts also have no parent.
    - `enabled` boolean: Whether the user explicitly activated this account. false means the account was created as a side effect (e.g., posting account auto-created when user connected ads first). GET /v1/accounts still returns such accounts unless `excludeHidden=true` is passed. They cannot be posted to (`ACCOUNT_NOT_ENABLED_FOR_POSTING`) and are not billed as connected accounts. On an ads account (`metaads`, `googleads`, ...) the value does not hide the connection: ads accounts are listed whatever their `enabled` value and keep working for ads.
    - `rateLimitedUntil` string, date-time, nullable: End of the account's publishing cooldown. Compare it with the current time: a value in the past means the cooldown has ended (the field is cleared on the next successful publish), null means no cooldown since the last successful publish. A cooldown starts when a post to the account fails with `errorCategory` `user_abuse` (spam, abuse or rate-limit errors), or when 10 or more posts to it fail within an hour with `user_content`, `platform_error`, `platform_rate_limit` or `unknown`. It doubles with each start inside a 24-hour window that opens at the first one (10, 20, 40, 80 minutes and so on, capped at 24 hours). On a YouTube account with a recorded successful upload it instead runs until 24 hours after that upload, or 1 hour when that upload is older than 24 hours. While it is in the future, POST /v1/posts (drafts excepted) and POST /v1/posts/{postId}/retry return 429 for this account, and this account's pending targets on posts scheduled before the cooldown ends are failed when it starts.
    - `metadata` object: Platform-specific metadata. Fields vary by platform. For WhatsApp accounts, includes: - qualityRating: Phone number quality rating from Meta (GREEN, YELLOW, RED, or UNKNOWN) - nameStatus: Display name review status (APPROVED, PENDING_REVIEW, DECLINED, or NONE). A declined or pending display name does not by itself block sending; sendability is reported separately via health_status (can_send_message). - messagingLimitTier: Maximum unique business-initiated conversations per 24h rolling window (TIER_250, TIER_1K, TIER_10K, TIER_100K, or TIER_UNLIMITED). Scales automatically as quality rating improves. - verifiedName: Meta-verified business display name - displayPhoneNumber: Formatted phone number (e.g., "+1 555-123-4567") - wabaId: WhatsApp Business Account ID - phoneNumberId: Meta phone number ID For Meta ads business-login accounts: - tokenType: system-user - businessId: The owning Business Manager ID when there is one owner; null for multiple owners. - businessIds: Owning Business Manager IDs discovered from granted ad accounts. - grantedAdAccountIds: Ad-account IDs granted to the token. - adAccountBusinesses: Map from ad-account ID to its owning business ID or null. - availablePages: Granted Page IDs and names. No Page tokens are exposed. - selectedPageId: The Page selected for creatives and lead forms, or null. - scopedAdAccountIds: Existing sync scope preserved on reconnect. Non-expiring tokens have no tokenExpiresAt field. Parent posting reconnects do not replace this token. For LinkedIn accounts, profileData carries the profile details refreshed on each daily snapshot: - profileData.bio: The member's headline for personal accounts, or the organization description for organization accounts. null when the member has not set one. - profileData.extraData.vanityName: The member's profile slug, i.e. the /in/{vanityName} segment of profileUrl. Personal accounts only; an organization's own slug is in metadata.organizationInfo.vanityName. For Instagram accounts: - loginMethod: "facebook_login" when the account was connected through Facebook Login. Absent on accounts connected with Instagram Login. On facebook_login accounts, comment reads leave hidden comments out entirely instead of returning them with isHidden true. - instagramScopedId: the Instagram professional account id (`17841...`). On Instagram Login accounts this is the id that is the same whichever app connected the account, while platformUserId is app-scoped; Facebook Login accounts hold this id as platformUserId. For X (Twitter) accounts: - profileData.extraData.isPremium: Whether X reports a paid subscription (Basic, Premium, Premium+, or a blue verified badge), which raises the post length limit from 280 to 25,000 characters. Read live at connect and reconnect and refreshed by the daily follower snapshot; because X intermittently reports no subscription for subscribed accounts, a cancellation is stored on the fourth consecutive daily snapshot that reports it (about four days). Accounts connected before the extraData layout carry the same flag at profileData.isPremium.

## Other responses

- `400`: Invalid request
- `401`: Missing or invalid API key. `code` is `missing_credentials` when no Authorization header was sent and `invalid_credentials` when the key is unknown, revoked or expired.
- `404`: Account not found

## Changes

- **2026-10-21** `5304778ae6b6`: 1 warning
  - added the new `webflow` enum value to the `account/platform` response property for the response status `200`
- **2026-10-20** `b626f8dbba05`: 1 warning
  - added the new `hubspot` enum value to the `account/platform` response property for the response status `200`
- **2026-10-20** `0d064f3b2f7a`: 1 warning
  - added the new `wix` enum value to the `account/platform` response property for the response status `200`
- **2026-10-19** `cb7bcd090dce`: 1 info
  - added the optional property `account/rateLimitedUntil` to the response with the `200` status
- **2026-10-13** `27c96850cc66`: 1 warning, 1 info
  - added the new `redditads` enum value to the `account/platform` response property for the response status `200`
  - added the optional property `account/profileId/oneOf[#/components/schemas/Profile]/externalId` to the response with the `200` status

[Operation history](https://skmtc.dev/zernio/apis/zernio-api/changes/v1/accounts/:accountId/pinterest-boards/put.md)

---

[API](https://skmtc.dev/zernio/apis/zernio-api.md) · [All operations](https://skmtc.dev/zernio/apis/zernio-api/llms.txt) · [OpenAPI document](https://skmtc.dev/zernio/apis/zernio-api/revisions/4e74db179e73?raw)
