Blotato
On this page
Tip: Watch the Blotato launch film on opvs.ai/skills/blotato or view the embedded video player.
Current package: @opvs-ai/blotato v2.1.1 (beta, public, 5 methods) · Upstream: https://backend.blotato.com · Auth: blotato-api-key header (resolved per brand via Settings → Integrations, provider blotato, or BLOTATO_API_KEY).
@opvs-ai/blotato replaces @opvs-ai/vibe-publish (2.1.0+) with a unified social publishing skill across ten platforms: twitter, instagram, linkedin, facebook, tiktok, pinterest, threads, bluesky, youtube, and slack. It adds three read-only lookup and verification methods (listSubaccounts, listPinterestBoards, getPostStatus), optional platform filtering on listAccounts, and full platform target declarations on createPost.
Methods
listAccounts({ platform? })
GET /v2/users/me/accounts
List all connected social media accounts for the authenticated Blotato user. Filter by platform when you already know the target network (twitter, instagram, linkedin, facebook, tiktok, pinterest, threads, bluesky, youtube, slack).
Parameters
Parameter | Type | Required | Description |
|---|---|---|---|
|
| No | Filter connected accounts by platform name. |
Example
opvs -w opvs tools call @opvs-ai/blotato listAccounts \
--input '{"platform":"linkedin"}'Response
{
"items": [
{
"id": "acc_12345",
"platform": "linkedin",
"fullname": "OPVS AI"
}
]
}Errors
Error | Trigger | Resolution |
|---|---|---|
| Missing or invalid | Save a valid Blotato API key in Settings → Integrations (provider |
| Unsupported | Use one of the 10 supported platform identifiers ( |
| No social accounts connected in Blotato for that platform | Connect the social account inside the Blotato dashboard before calling |
listSubaccounts({ accountId })
GET /v2/users/me/accounts/{accountId}/subaccounts
List the Facebook Pages, LinkedIn company Pages, YouTube playlists, and Slack channels connected under an account. Pass the returned item id as target.pageId (Facebook, LinkedIn Page), target.playlistIds entry (YouTube), or target.channelId (Slack). Omitting pageId on LinkedIn posts to the personal profile.
Parameters
Parameter | Type | Required | Description |
|---|---|---|---|
|
| Yes | Account ID returned by |
Example
opvs -w opvs tools call @opvs-ai/blotato listSubaccounts \
--input '{"accountId":"acc_12345"}'Response
{
"items": [
{
"id": "page_98765",
"name": "OPVS Company Page"
}
]
}Errors
Error | Trigger | Resolution |
|---|---|---|
| Missing or invalid | Verify the Blotato key in Settings → Integrations. |
|
| Re-run |
| No Pages, playlists, or channels connected under the account | Connect the Page or channel inside Blotato; empty is not proof that none exist. |
listPinterestBoards({ accountId })
GET /v2/social/pinterest/boards
List the boards owned by a connected Pinterest account. Pass the returned id as target.boardId when creating a pin with createPost.
Parameters
Parameter | Type | Required | Description |
|---|---|---|---|
|
| Yes | Pinterest account ID returned by |
Example
opvs -w opvs tools call @opvs-ai/blotato listPinterestBoards \
--input '{"accountId":"acc_pin_01"}'Response
{
"items": [
{
"id": "board_4567",
"name": "Product Launches"
}
]
}Errors
Error | Trigger | Resolution |
|---|---|---|
| Missing or invalid | Verify the Blotato key in Settings → Integrations. |
|
| Call |
createPost({ post, scheduledTime?, useNextFreeSlot? })
POST /v2/posts
Create and optionally schedule a social media post. post.content is an object (text, mediaUrls, platform, and optional additionalPosts for threads on twitter, bluesky, and threads). post.target is a per-platform object (targetType plus platform-specific fields such as pageId, boardId, channelId, mediaType, title, privacyStatus, trial: { graduationStrategy }, TikTok disclosure flags, and YouTube isMadeForKids / containsSyntheticMedia).
Parameters
Parameter | Type | Required | Description |
|---|---|---|---|
|
| Yes |
|
|
| No | ISO 8601 timestamp for scheduled publishing (e.g. |
|
| No | Schedule into the account's next open Blotato queue slot. |
Example
opvs -w opvs tools call @opvs-ai/blotato createPost \
--input '{
"post": {
"accountId": "acc_12345",
"content": {
"text": "Give your agent the publishing job.",
"mediaUrls": [],
"platform": "linkedin"
},
"target": {
"targetType": "linkedin",
"pageId": "page_98765"
}
},
"scheduledTime": "2026-11-15T14:00:00Z"
}'Response
{
"postSubmissionId": "sub_abc123"
}Errors
Error | Trigger | Resolution |
|---|---|---|
| Missing required | Include all required platform fields in |
| Invalid | Pass a future ISO 8601 timestamp in |
| Missing or invalid | Verify the Blotato key in Settings → Integrations. |
getPostStatus({ postSubmissionId })
GET /v2/posts/{postSubmissionId}
Read the outcome of a createPost submission: in-progress, scheduled (with scheduledTime), published (with publicUrl when supplied), or failed (with errorMessage). Always pass the postSubmissionId returned by createPost, never a published post ID. Note that in-progress is also returned for an unknown ID; poll at intervals of at least 10 seconds with a retry limit.
Parameters
Parameter | Type | Required | Description |
|---|---|---|---|
|
| Yes | The |
Example
opvs -w opvs tools call @opvs-ai/blotato getPostStatus \
--input '{"postSubmissionId":"sub_abc123"}'Response
{
"postSubmissionId": "sub_abc123",
"status": "published",
"publicUrl": "https://www.linkedin.com/feed/update/urn:li:share:12345"
}Errors
Error | Trigger | Resolution |
|---|---|---|
| Missing or invalid | Verify the Blotato key in Settings → Integrations. |
| Submission record expired or invalid endpoint path | Confirm |
| Upstream platform rejected the post (returned in | Fix the missing field, media format, or account permission reported in |