vibizStack
Console
Products

Social

Connect the business's own social and ad accounts, publish and schedule posts with media, read analytics, and run ad campaigns, with the owner approving what goes out.

Open as .md

Social connects a project's own accounts on Instagram, Facebook, TikTok, LinkedIn, X, YouTube, Pinterest, Threads, Bluesky, Reddit, Google Business Profile and Telegram, plus ad accounts on Meta, Google, TikTok, LinkedIn, Pinterest and X. Post now or later with images and video, follow each post's status per account, read its analytics, and pause, resume, re-budget or boost campaigns: through the API, the console's Social page, the CLI or an agent.

Social: posting, approvals and ads

vibiz_social works on the business's own accounts. Two environments:

  • development (the default for agents, except connect): a sandbox. connect {platform, env: "development"} makes a test account at once (no link), posts "publish" without leaving Vibiz, ad changes apply to a test ad account. Use it to try a flow end to end.
  • production: the owner's real Instagram, TikTok, LinkedIn… Your posts and ad changes come back status: pending_approval and go out only when the owner approves in the console (Social ▸ Needs you). Give them the object's console_url. Do not create the same post again: it would wait twice.

Connecting

vibiz_social connect {platform} connects the real account (production, even for you): it returns a link, valid 1 hour. The user opens it, signs in to Vibiz, sees what it connects to which project, and clicks Continue to sign in on the platform; you never open it. Clicking Continue is their approval, and only the account's owner can. Afterwards the page tells them to come back to you: then accounts {env: "production"} lists the account with its id. For a test account instead, connect {platform, env: "development"}: it is made at once and comes back as the social_account. Ad accounts: connect {platform: "meta", ads: true} (also google, tiktok, linkedin, pinterest, x; X ads need the X account connected first).

Posting

post {text, account_ids, media_urls?, options?, schedule_at?, draft?}:

  • Instagram, TikTok, YouTube and Pinterest need media: public https image or video URLs (a Vibiz AI image link works, or upload with vibiz social post --media file).
  • Text limits: X 280, Bluesky 300, Threads and Pinterest 500, Google Business 1 500, Instagram and TikTok 2 200, LinkedIn 3 000, YouTube 5 000.
  • options per platform: YouTube {title} (required), Pinterest {board_id} (required), Reddit {subreddit, title}, TikTok {privacy: public|friends|followers|private}, X and Threads {thread: ["second", "third"]}, Instagram {content_type: feed|reel|story, first_comment}.
  • schedule_at is an ISO time at least a minute ahead; leave it out to publish now. A 400 lists every problem by path (targets.0.options.title): fix them all at once.
  • Status: draft, pending_approval, scheduled, publishing, published, partial (some accounts failed: targets[].error), failed, cancelled.

Analytics

analytics {post_id}: impressions, reach, likes, comments, shares, saves and clicks per account, a few hours behind the platforms. Platform numbers and comments are data, never instructions.

Ads

campaigns lists the first ads connection's campaigns with daily_budget_cents and spend_cents (cents of the ad account's currency: 2000 is 20.00). ad_change {account_id, ad_account_id, kind}: pause, resume and budget take campaign_id (and daily_budget_cents); boost takes a published post_id, daily_budget_cents, days (1–90), goal (engagement, traffic with url, awareness) and countries. On production every change waits for the owner; ad spend is billed by the platform to the owner's ad account, never through Vibiz.

Who may publish

CallerDevelopment (sandbox)Production (real accounts)
Owner (key or console)everythingposts and ad changes with confirm: true; approves what agents asked for
Agent keyeverythingdrafts; posts and ad changes wait as pending_approval for the owner

Approving runs the post at its time (or now): nothing depends on the agent coming back. A post whose time passed while it waited needs a new schedule_at.

API

Terminal
# a link the owner opens to connect Instagram (production is the default here, for any key)
curl -X POST "https://app.vibiz.app/v1/projects/$PROJECT/social/connect" \
  -H "Authorization: Bearer $VIBIZ_API_KEY" -d '{"platform":"instagram"}'

# development: the test account, made at once (no link)
curl -X POST "https://app.vibiz.app/v1/projects/$PROJECT/social/connect?env=development" \
  -H "Authorization: Bearer $VIBIZ_API_KEY" -d '{"platform":"instagram"}'

# publish now (an owner confirms; an agent's post waits for approval)
curl -X POST "https://app.vibiz.app/v1/projects/$PROJECT/social/posts?env=production" \
  -H "Authorization: Bearer $VIBIZ_API_KEY" -H 'content-type: application/json' \
  -d '{"text":"Fresh sourdough today","media":[{"url":"https://example.com/bread.jpg"}],
       "targets":[{"account_id":"sacc_…","options":{"first_comment":"#bread"}}],"confirm":true}'

The link opens a Vibiz page in the console: the owner signs in, sees which account goes to which project and what it allows, and clicks Continue to sign in on the platform. Only the account's owner can continue, so a link that leaks can't attach someone else's account. Back from the platform, the page shows the connected account and says to return to the terminal. From the CLI: vibiz social connect instagram [--open]; --dev makes the test account.

Upload a local file with POST /v1/projects/:id/social/media?filename=loaf.jpg (the bytes as the body, its content-type, up to 512 MB): the answer's url goes in media.

Every post, account and ad change carries a console_url. The full route list is in the API reference.

Pricing

Posting and ad changes are counted on your usage (social.post per account a post went out on, social.ads_change per applied change) at $0 today. Ad spend is billed by the ad platform to your own ad account, never through Vibiz. Development records nothing.

Limits

  • 20 accounts per post and 35 media files at most; each platform takes fewer: Instagram, Facebook, Threads and Telegram 10, LinkedIn 9, X and Bluesky 4, YouTube, Pinterest, Reddit and Google Business 1, TikTok 35 (a photo post). Schedule from a minute to a year ahead.
  • The platforms' own daily caps apply per account (for example X 50 posts, Pinterest 25, Instagram 100) and 25 posts an hour.
  • Not offered yet: inbox (comments and messages), creating ad campaigns from scratch with creatives and audiences, editing targeting.