The Social Media Posting API
One API call. Nine platforms. Zero headaches.
Quick Start
Base URL
https://fanout.digital/api/v1Get your API key from Dashboard → Profiles → [Profile] → API Key. One key per profile. Rate-limited per profile.
Authentication
All API requests require a Bearer token in the Authorization header.
Authorization: Bearer YOUR_API_KEYcurl https://fanout.digital/api/v1/platforms \
-H "Authorization: Bearer YOUR_API_KEY"Endpoints
/api/v1/postAuth requiredPost content to one or more platforms immediately.
Request body
{
"content": "Your post content here",
"platforms": ["twitter", "linkedin", "instagram"],
"mediaUrls": ["https://example.com/image.jpg"],
"profileId": "your-profile-uuid"
}Response
{
"postId": "a1b2c3d4-...",
"results": [
{ "platform": "twitter", "status": "success", "postUrl": "https://twitter.com/..." },
{ "platform": "linkedin", "status": "success", "postUrl": "https://linkedin.com/..." },
{ "platform": "instagram", "status": "queued", "postUrl": null }
]
}/api/v1/scheduleAuth requiredSchedule a post to be published at a future time (ISO 8601).
Request body
{
"content": "Your scheduled post",
"platforms": ["twitter", "linkedin"],
"scheduledAt": "2026-04-01T10:00:00Z",
"profileId": "your-profile-uuid"
}Response
{
"postId": "a1b2c3d4-...",
"scheduledAt": "2026-04-01T10:00:00Z"
}/api/v1/platformsAuth requiredGet all connected platforms for the authenticated profile.
Response
{
"platforms": [
{
"platform": "twitter",
"connected": true,
"username": "youraccount",
"expiresAt": "2026-06-01T00:00:00Z"
},
{
"platform": "linkedin",
"connected": true,
"username": "Your Name",
"expiresAt": null
}
]
}/api/v1/analytics/:postIdAuth requiredRetrieve engagement analytics for a specific post across all platforms.
Response
{
"postId": "a1b2c3d4-...",
"results": [
{
"platform": "twitter",
"likes": 42,
"shares": 8,
"comments": 3,
"impressions": 1240
},
{
"platform": "linkedin",
"likes": 15,
"shares": 2,
"comments": 1,
"impressions": 890
}
]
}Code Examples
Post to multiple platforms with a single request.
curl -X POST https://fanout.digital/api/v1/post \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"content": "Hello from Fanout!",
"platforms": ["twitter", "linkedin", "instagram"],
"profileId": "your-profile-uuid"
}'Rate Limits
Rate limits are applied per API key (per profile). Limits reset monthly.
Rate limit headers are returned on every response:
X-RateLimit-Remaining: 842
Retry-After: 60 # seconds until reset (only on 429)Webhooks
Configure a webhook URL per profile in Dashboard → Profiles → [Profile] → Settings. Fanout sends a POST request to your URL for the following events.
Events
post.publishedAll platforms successfully postedpost.failedOne or more platforms failed after 3 retriestoken.expiringOAuth token expires within 7 daysPayload example
{
"event": "post.published",
"postId": "a1b2c3d4-...",
"profileId": "your-profile-uuid",
"timestamp": "2026-04-01T10:00:05Z",
"results": [
{ "platform": "twitter", "status": "success", "postUrl": "https://twitter.com/..." },
{ "platform": "linkedin", "status": "success", "postUrl": "https://linkedin.com/..." }
]
}Need help?
Contact brad@nustack.digital or start your free trial to get your API key.