Provider settings
Platform-specific metadata and platform_options for Social0 publish requests.
Overview
Most platforms accept content, platforms (connected account UUIDs), and optional media. When a network needs extra fields — TikTok privacy, Pinterest board, YouTube title, X disclosure flags — pass them in metadata and/or platform_options.
Both objects are merged into the post's stored metadata before publish. Prefer metadata when you control the full shape; use platform_options for a flatter, per-platform API that Social0 compiles into metadata (see Posts reference).
Base URL: https://api.social0.app/v1
Auth: Authorization: Bearer sk_live_…
Connected account UUIDs
The platforms field is always an array of connected account UUIDs, not platform name strings.
curl https://api.social0.app/v1/accounts \
-H "Authorization: Bearer sk_live_YOUR_KEY"Use data[].id from the response. Each ID maps to one connected profile or page (e.g. two LinkedIn entries = personal + company page).
| Mistake | Fix |
|---|---|
"platforms": ["linkedin"] | Use UUID: "platforms": ["550e8400-e29b-41d4-a716-446655440000"] |
| Stale ID after reconnect | Re-list accounts; IDs can change on reconnect |
| Wrong user's account | Keys are user-scoped — only your accounts appear |
metadata vs platform_options
| Field | Shape | When to use |
|---|---|---|
metadata | Nested object stored on the post | Full control; matches dashboard composer output |
platform_options | Per-platform config compiled into metadata | Simpler API; supports per-account overrides via accounts.<uuid> |
Example — same TikTok privacy via either field:
{
"metadata": {
"contentType": "video",
"tiktok": {
"ACCOUNT_UUID": { "privacy_level": "PUBLIC_TO_EVERYONE" }
}
}
}{
"platform_options": {
"tiktok": {
"privacy_level": "PUBLIC_TO_EVERYONE"
}
}
}Per-account overrides in platform_options:
{
"platform_options": {
"pinterest": {
"accounts": {
"ACCOUNT_UUID": { "boardId": "1234567890" }
}
}
}
}Per-platform guides
| Platform | Enum | Guide |
|---|---|---|
| X / Twitter | twitter_x | X / Twitter settings |
linkedin | LinkedIn settings | |
facebook | Facebook settings | |
instagram | Instagram settings | |
| Threads | threads | Threads settings |
| Bluesky | bluesky | Bluesky settings |
| YouTube | youtube | YouTube settings |
| TikTok | tiktok | TikTok settings |
pinterest | Pinterest settings |
Publish flow
Create + publish returns 202 with a tracking_id. Poll until terminal:
curl -X POST https://api.social0.app/v1/posts/publish \
-H "Authorization: Bearer sk_live_YOUR_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $(uuidgen)" \
-d '{ "content": "Hello", "platforms": ["ACCOUNT_UUID"] }'curl https://api.social0.app/v1/jobs/TRACKING_ID \
-H "Authorization: Bearer sk_live_YOUR_KEY"See Jobs reference and Publish guide.
Common pitfalls
| Issue | Cause | Fix |
|---|---|---|
validation_error on platforms | Platform name instead of UUID | GET /v1/accounts → use data[].id |
| TikTok publish fails | Missing metadata.tiktok per account | See TikTok settings |
| Pinterest "No board" | No board in metadata or account defaults | Set metadata.pinterest.<uuid>.boardId or connect default board |
| YouTube rejected | Images-only post | YouTube requires video media |
| Thread only posts once | Missing metadata.twitterThread.parts | Use structured thread parts or legacy --- split (X only) |
| Partial publish | One platform failed, others succeeded | Poll job; check per-platform errors in response |
| Missing media | Skipped presign/confirm flow | Upload media guide |
Character limits (approximate)
| Platform | Limit |
|---|---|
twitter_x | 280 (higher with X Premium on connected account) |
linkedin | 3,000 |
facebook | 63,206 |
bluesky | 3,000 |
youtube | 5,000 (description); title ~100 via metadata |
pinterest | 500 |
instagram | 2,200 |
tiktok | 2,200 |
threads | 500 per part |
Social0 truncates where the platform requires it; stay under limits to avoid cut-off captions.