The Social Media Posting API

One API call. Nine platforms. Zero headaches.

Quick Start

Base URL

https://fanout.digital/api/v1

Get 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_KEY
curl https://fanout.digital/api/v1/platforms \
  -H "Authorization: Bearer YOUR_API_KEY"

Endpoints

POST/api/v1/postAuth required

Post 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 }
  ]
}
POST/api/v1/scheduleAuth required

Schedule 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"
}
GET/api/v1/platformsAuth required

Get 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
    }
  ]
}
GET/api/v1/analytics/:postIdAuth required

Retrieve 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.

Plan
Posts / Month
API Rate
Starter
1,000
100 req/min
Agency
10,000
500 req/min
White-Label
Unlimited
2,000 req/min

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 posted
post.failedOne or more platforms failed after 3 retries
token.expiringOAuth token expires within 7 days

Payload 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.