Skip to main content
Social is the distribution primitive. Naive wraps social infrastructure behind a consistent API so agents can connect social media accounts, create and publish posts across multiple platforms, schedule content, and retrieve analytics — all without custom OAuth flows or frontend components.

CLI First

Tools

ToolTypeDescriptionCost
naive_social_activateSetupActivate social media for the companyFree
naive_social_connectSetupGet OAuth URL for a single platformFree
naive_social_portalSetupGet portal URL for multi-platform connectFree
naive_social_statusInfoCheck activation + connected accountsFree
naive_social_accountsInfoList connected accountsFree
naive_social_syncInfoSync connected accountsFree
naive_social_labelSetupSet a label on a connected accountFree
naive_social_create_postCoreCreate and optionally publish a post10 credits (if publishing)
naive_social_publish_postCorePublish a draft10 credits
naive_social_uploadCoreUpload media from URLFree
naive_social_list_postsInfoList posts with status filterFree
naive_social_get_postInfoGet post detailsFree
naive_social_edit_postCoreEdit a draft postFree
naive_social_delete_postCoreDelete a postFree
naive_social_post_analyticsInfoGet post performance metricsFree
naive_social_post_commentsInfoGet post commentsFree
naive_social_account_analyticsInfoGet account-level analyticsFree
naive_social_disconnectSetupDisconnect an accountFree

Studio Connection UI

In the Naive Studio, navigate to Primitives > Social to connect accounts visually. The page:
  • Auto-activates social media on first visit
  • Shows a grid of connected accounts with platform icons and status
  • Provides per-platform “Connect” buttons that open OAuth in a new tab
  • Allows disconnecting accounts directly from the UI
  • Syncs accounts automatically to pick up new connections

Activation

Before posting, social media must be activated for the company.
Response:

Connecting Accounts

The API returns an OAuth URL. The user or agent opens this URL in a browser to authorize the social account. No custom frontend is needed.

Single Platform

Response:

Multi-Platform Portal

For connecting several platforms at once, use the portal endpoint:
After the user connects accounts, call POST /v1/social/sync to refresh the local account list.

Creating Posts

Response (202):

Parameters

ParamTypeRequiredDefaultDescription
contentstringYesPost text content
titlestringNoAuto from contentPost title (auto-generated if omitted)
platformsstring[]YesPlatforms to post to
platform_dataobjectNoAuto-generatedPer-platform overrides (see Platform Defaults below)
media_urlsstring[]NoMedia URLs — auto-uploaded and attached to video/image platforms
youtube_typestringNo"SHORT"YouTube type: "SHORT" (vertical, under 3min) or "VIDEO" (landscape)
publish_nowbooleanNofalsePublish immediately
scheduled_atstringNoISO 8601 datetime to schedule
account_idsstring[]NoAll activeSpecific account UUIDs to post from
If neither publish_now nor scheduled_at is set, the post is created as a draft. Drafts can be edited and published later with POST /v1/social/posts/:id/publish.

Video Post Example (YouTube + TikTok)

Platform Defaults

When you omit platform_data, the API applies sensible defaults per platform. You can override any field by passing platform_data.
PlatformAuto-applied defaultsNotes
TWITTERtext truncated to 280 charsText-only platform
BLUESKYtext truncated to 300 charsText-only platform
YOUTUBEtext (100 char title), type (SHORT/VIDEO), privacy: "PUBLIC", madeForKids: falseRequires media. youtube_type controls SHORT vs VIDEO
TIKTOKtext, privacy: "PUBLIC_TO_EVERYONE"Requires media for video posts
INSTAGRAMtext, type: "REEL"Defaults to Reel for video
REDDITtext, title (100 char limit)Pass "sr" in platform_data for subreddit
PINTERESTtitle (100 char limit), textMedia recommended
LINKEDINtext (full content)No truncation
FACEBOOKtext (full content)No truncation
THREADStext (full content)No truncation
MASTODONtext (full content)No truncation

Overriding Defaults

Pass platform_data to customize per-platform behavior:
Overrides are merged on top of defaults — you only need to specify the fields you want to change.

Media Handling

There are two ways to attach media to a post:

Option 1: media_urls (auto-upload)

When media_urls are provided, the server downloads and uploads each URL to the social media service, then attaches them to media-capable platforms (YouTube, Instagram, TikTok, Facebook, Pinterest). Text-only platforms are unaffected.

Option 2: upload_ids (pre-uploaded media)

If you’ve already uploaded media via POST /v1/social/upload or have assets in the Media Asset Manager, pass their Bundle upload IDs directly using upload_ids. This avoids re-uploading and prevents duplicate assets.
The Media Asset Manager returns upload_id on each asset — use this value in upload_ids when creating posts from assets in your library.

Scheduling & Drafts

Omit both publish_now and scheduled_at to create a draft:
Edit with PATCH /v1/social/posts/:id, then publish with POST /v1/social/posts/:id/publish.

Analytics

Retrieve performance metrics for published posts:
Response:
Analytics data varies by platform. The shape depends on which platforms the post was published to.
Account-level analytics:

Supported Platforms

PlatformKeyTypeCharacter Limit
Twitter/XTWITTERText + media280
LinkedInLINKEDINText + media
InstagramINSTAGRAMMedia (Reel default)
FacebookFACEBOOKText + media
TikTokTIKTOKVideo
YouTubeYOUTUBEVideo (SHORT/VIDEO)100 (title)
ThreadsTHREADSText
PinterestPINTERESTMedia + title100 (title)
RedditREDDITText + title100 (title)
BlueskyBLUESKYText300
MastodonMASTODONText

Error Handling

ErrorCauseRecovery
feature_not_configuredSocial provider credentials not setConfigure the API key
invalid_inputSocial not activatedCall POST /v1/social/activate
invalid_inputMissing required fieldsCheck content, platforms params
resource_not_foundPost or account not foundVerify UUID
insufficient_creditsNot enough credits to publishTop up with POST /v1/billing/topup
provider_errorSocial media service errorRetry or check platform requirements

Typical Workflow