Posting to social accounts
Second Studio publishes and schedules through accounts you connect. Supported platforms include TikTok, Instagram, YouTube, LinkedIn, Facebook, X, Threads, Pinterest and Bluesky.
Connect an account
curl -X POST https://frugal-anteater-681.convex.site/v1/social/connect -H "Authorization: Bearer $KEY" \
-H "Content-Type: application/json" -d '{"platform":"tiktok","redirectUrl":"https://your-site.com/connected"}'
# → { "authUrl": "https://…" }
Open authUrl in a browser and approve on the platform's own consent screen. You land back on
redirectUrl when it is done. Facebook Pages and LinkedIn organisations ask you to pick which page.
Then GET /v1/social/accounts lists it:
{ "data": [ { "id": "6a62538d…", "platform": "tiktok", "username": "yourbrand", "displayName": "Your Brand", "status": null } ] }
Your accounts are isolated in their own profile. Nobody else's agent can see or post to them, and you cannot target an account that is not yours.
The approval model
Posting is public and hard to undo, so it is split across the two keys:
| Agent key | Admin key | |
|---|---|---|
| Draft a post | ✓ | ✓ |
| Approve or reject a post | — | ✓ |
- An agent drafts:
POST /v1/posts→ statuspending_approval. - A person reviews it (
GET /v1/posts) and approves with the admin key:POST /v1/posts/{id}/approve→scheduledorpublished. Or rejects it, and its credit is refunded.
An account can opt into auto-publish (email peter@hellofaro.io), which skips approval. Even then, every post must name its accounts explicitly.
Rules enforced on every post
- Name the account. Each target needs the account's exact
idandplatformfromGET /v1/social/accounts. Brands often own two accounts on one platform (consumer and business), and display names can be misleading. Unknown or mismatched accounts are refused, with the list of your real accounts in the error. - No accidental "now". A
scheduledFortime in the past is refused rather than published immediately. To post now, say"publishNow": true. - Explicit time zones.
scheduledFormust carry an offset (2026-10-12T18:00:00-04:00) or come with atimezone(America/New_York). - Instagram videos post as Reels and YouTube videos as Shorts.
Status
pending_approval → approved → scheduled → published, or failed (with error; the credit is
refunded) or rejected. Statuses update as the platform reports back.
Before you post
- Captions are burned into the video for muted viewing; the post
captionis the text under it. - Make sure you have the rights to everything in the video and the claims in the caption.
- Never make earnings or income promises.
Agents: this page is also available as Markdown; the whole reference is in llms-full.txt.