
Blotato
Social media publishing through Blotato — find the connected account and its Page or board, create or schedule posts (single, threads, carousels, reels/stories) on ten platforms, and confirm each one actually went live.
Your business needs you. Your posting needs an agent. When I finish a social post, the work is still not done: I have to pick the right accounts, format each destination's fields, schedule the time, and come back later to verify it actually went live. I built the @opvs-ai/blotato skill so my agent takes that recurring publishing job off my plate. I supply the finished post, target accounts, and timing; the skill handles the rest across 10 platforms—X, LinkedIn, Facebook, Instagram, TikTok, Pinterest, Threads, Bluesky, YouTube, and Slack—using 5 focused tools. It looks up connected accounts with listAccounts, resolves Facebook Pages, LinkedIn Pages, YouTube playlists, Slack channels, and Pinterest boards before sending, and formats single posts, threads, carousels, reels, or scheduled drops via createPost. An accepted send is not proof of publication. The skill polls getPostStatus and reports what actually happened at each destination: published with a live link, scheduled, in-progress, or failed with the exact error. Blotato delivers finished posts—it does not write copy, generate media, or manage replies—and runs on your own Blotato API key from Settings -> Integrations.
Features4
Send single posts, threads, carousels, reels or stories with one request shape.
Look up Facebook and LinkedIn Pages, YouTube playlists and Pinterest boards first.
Publish immediately or queue an ISO 8601 scheduledTime per destination.
Poll getPostStatus to confirm published, scheduled, in-progress or failed.
Videos1 video
DemoBlotato · Demo video
Demo · SpiderMediaArticles about Blotato1 article
Videos1 video
DemoBlotato · Demo video
Demo · SpiderMediaArticles about Blotato1 article
Showing all 1
SKILL.mdthe file your agent reads
SKILL.md loads when you open this tab.
What's new5 releases · newest first · from the package's CHANGELOG
v2.1.32026-11-13Latest
- Fixed installed calls rejecting the duplicated provider configuration. The skill now inherits the package-level Blotato upstream and brand credential settings. No method or payload changes.
v2.1.22026-11-13
- Rewrote the marketplace store card from the MS-49 launch film (`off-your-plate` angle): added hero + 3 panel illustrations, first-person description, 4 capability features, and SEO metadata. No skill or tool change.
v2.1.12026-11-12
- The marketplace listing shows the launch film. No skill change.
v2.1.02026-11-12
- **New name: `@opvs-ai/blotato`** (was `@opvs-ai/vibe-publish`; owner ruling 11 Nov 2026, plan
skill-store-2026-11-11, card MS-43). A new registry identity, not an in-place rename: the
registry keys a package on vendor/name/version and has no alias redirect. Skill id `blotato`;
`vibe-publish` stays a search alias.
- **3 read-only methods** (owner ruling 12 Nov 2026): `listSubaccounts` (Facebook/LinkedIn Page,
Slack channel, YouTube playlist ids), `listPinterestBoards` (board ids) and `getPostStatus`
(published / failed / scheduled). Without them Facebook, LinkedIn company Pages and Pinterest
needed an id nobody could fetch, and "posted" could not be checked.
- `listAccounts` takes an optional `platform` filter (Blotato supports it).
- **Fix:** Instagram `target.trial` is an object `{graduationStrategy}`, not a boolean (Blotato
API reference). Declared 9 documented target fields that were missing: Slack `channelId`,
`firstComment`, `audioName`, TikTok `autoAddMusic`/`isDraft`/`imageCoverIndex`/
`videoCoverTimestamp`, YouTube `isMadeForKids`/`containsSyntheticMedia`. Undeclared keys were
already forwarded; now `skill_describe` shows them.
- **Outside-host wiring:** `provider_config.upstream` (`backend.blotato.com`) with `provider:
blotato` beside `auth`. Needs the host approved for the opvs-ai vendor.
- **7-layer build:** router SKILL.md, 3 references, 5 recipes, 7 registry payloads, 5 learnings,
instructions, and 2 checkers (`verify-post-payload.mjs`, `verify-published.mjs`).
- Version 2.1.0 (not 1.0.0) so a brand's `^2` intent carries over; brands held on the old 1.x
shape are not moved silently.vEarlieras @opvs-ai/vibe-publish
### 2.0.2 — 2026-08-03
- **Discovery synonyms (2.3):** added top-level `aliases` (`multipost`, `cross-post`,
`social-scheduler`, `social-publish`, `blotato`) and `tags` (`social-media`,
`publishing`, `scheduling`, `content-distribution`) so agents that search by a
synonym not present in the name/description still surface this skill. Indexed by
the registry's lexical-match boost (exact alias = +1.0). Metadata-only — no shape,
entitlement, or credential change. First live use of the #903 aliases/tags feature.
### 2.0.1 — 2026-07-12
- **Fix (caller-proof `mediaUrls`):** `createPost.post.content.mediaUrls` and each
`additionalPosts[].mediaUrls` now declare `default: []`. Blotato's `POST /v2/posts`
requires the `mediaUrls` key even for text-only posts (send `[]`); a caller who
omitted it (schema said `required: false`) previously ate an opaque Blotato 400.
The marketplace runtime now injects declared `default:` values for absent params
(including nested objects + array items), so the call succeeds without the caller
having to send `[]` explicitly. No shape change — additive, backward-compatible.
### 2.0.0 — 2026-07-12
- **BREAKING (schema reshape):** `createPost.post.content` and `createPost.post.target`
are now **objects**, not strings — mirroring Blotato's real `POST /v2/posts` request
shape. Any caller passing bare strings breaks and must send the object form.
- `content`: `{text, mediaUrls[], platform, additionalPosts[{text, mediaUrls[]}]}`.
`mediaUrls` (2–10 image URLs) renders a **carousel**; `additionalPosts` are the
follow-on **thread** segments (twitter/bluesky/threads).
- `target`: `{targetType, …per-platform extras}` — **full parity** across platforms:
YouTube (`title`, `privacyStatus`, `shouldNotifySubscribers`, `playlistIds`,
`thumbnailUrl`), Pinterest (`boardId`, `altText`, `link`), TikTok (`privacyLevel`,
`disabledComments`/`disabledDuet`/`disabledStitch`, `isBrandedContent`/`isYourBrand`/
`isAiGenerated`), Facebook (`pageId`, `mediaType`, `link`), Instagram (`altText`,
`collaborators`, `coverImageUrl`, `shareToFeed`, `trial`, `mediaType`), LinkedIn
(`pageId`), Threads (`replyControl`), reels/stories (`mediaType`).
- Added top-level optional `useNextFreeSlot` (schedule into the account's next open
Blotato queue slot).
- Guidance blocks preserved. Part of the Blotato Multi-Post plan (opvsVibe, slice S2).
### 1.0.2 — 2026-07-10
- Fix (BYOK): added `provider_config.provider: blotato` so the Path-B runtime
resolves each brand's own Blotato key from Settings → Integrations
(`api_integrations.provider_name = 'blotato'`). Without it the runtime used
the vendor default (`opvs-ai`), found no matching row, and silently fell back
to the platform-shared `BLOTATO_API_KEY` env var — so a brand's BYOK key was
never used. Pairs with the dashboard change that added the `blotato` provider
to Settings → Integrations (OPVS #669).
### 1.0.1 — 2026-06-08
- Fix: `provider_config.auth` was missing `token_env: BLOTATO_API_KEY`, so the
Path-B marketplace runtime sent an empty `blotato-api-key` header (the
upstream key never resolved). Added `token_env` so the runtime resolves the
Blotato key from the api-gateway environment. Without this, every Path-B
vibe-publish call failed before reaching Blotato.
### 1.0.0 — 2026-06-08
- First marketplace publish of the in-tree `vibe-publish` skill (Stage 5 Wave 3).
- Schema + SKILL.md carried over unchanged from the in-tree source.Showing all 5







