Build with Fast Social
A simple, powerful API to schedule and publish social content programmatically. Integrate Fast Social into your app, automate your workflows, or build your own social media tool.
curl -X GET https://fastsocial.ai/api/v1/posts \ -H "Authorization: Bearer fsk_live_••••••••••••" \ -H "Content-Type: application/json"
Everything you need to build
REST API
Schedule and publish posts, manage platforms, pull analytics. Full CRUD on your content pipeline.
Webhooks
Get notified the instant a post publishes or fails. Real-time events delivered to your endpoint with HMAC-SHA256 verification.
Free Developer Access
No expiration date. 1,000 requests/hour. Connect your app and start building immediately.
Get started in 5 minutes
From zero to your first scheduled post in under five minutes.
- 1
Request API access
Contact us to get your API key. We'll provision it within 1 business day. Your key will appear in the Fast Social client portal under Settings → API Keys.
- 2
Copy your API key
Your key looks like
fsk_live_xxxxxxxxxxxx. Keep it secret — treat it like a password. Never commit it to version control.Authorization: Bearer fsk_live_xxxxxxxxxxxx - 3
Make your first request
Call
GET /me— this returns your account info and confirms your key is working.curlcurl -X GET https://fastsocial.ai/api/v1/me \ -H "Authorization: Bearer fsk_live_your_key" \ -H "Content-Type: application/json"
- 4
Schedule your first post
POST to
/postswith your content, target platform, and a scheduled time.curlcurl -X POST https://fastsocial.ai/api/v1/posts \ -H "Authorization: Bearer fsk_live_your_key" \ -H "Content-Type: application/json" \ -d '{ "text": "Hello from the API!", "platform": "twitter", "scheduled_at": "2026-06-01T10:00:00Z" }' - 5
Set up a webhook (optional)
Register a webhook endpoint to receive real-time notifications when posts publish or fail. See the Webhook Events section for setup instructions and HMAC signature verification.
Authentication
All API requests require a Bearer token. Generate your API key from the Fast Social client portal under Settings → API Keys.
Base URL
https://fastsocial.ai/api/v1API Reference
Base URL: https://fastsocial.ai/api/v1
Select a language above — all code examples will update together.
/meReturns your account info and connected platforms.Example Response
{
"client_id": "cl_abc123",
"name": "Acme Corp",
"plan": "agency",
"platforms": ["twitter", "linkedin", "instagram"]
}Code Example
curl -X GET https://fastsocial.ai/api/v1/me \ -H "Authorization: Bearer fsk_live_your_key" \ -H "Content-Type: application/json"
/postsList scheduled and published posts.Query Params
status, platform, limit (default 20, max 100), offset, from, to
Example Response
{
"posts": [
{
"id": "p_xyz",
"text": "Hello world",
"platform": "twitter",
"status": "scheduled",
"scheduled_at": "2026-06-01T10:00:00Z",
"created_at": "2026-05-20T08:30:00Z",
"media_urls": []
}
],
"total": 42,
"limit": 20,
"offset": 0,
"has_more": true
}Code Example
curl -X GET "https://fastsocial.ai/api/v1/posts?limit=20&offset=0" \ -H "Authorization: Bearer fsk_live_your_key" \ -H "Content-Type: application/json"
/postsSchedule a new post.Request Body
{
"text": "Your post content",
"platform": "twitter",
"scheduled_at": "2026-06-01T10:00:00Z",
"media_urls": []
}Example Response
{
"post": {
"id": "p_newpost",
"text": "Your post content",
"platform": "twitter",
"status": "scheduled",
"scheduled_at": "2026-06-01T10:00:00Z",
"created_at": "2026-05-21T09:00:00Z",
"media_urls": []
}
}Code Example
curl -X POST https://fastsocial.ai/api/v1/posts \
-H "Authorization: Bearer fsk_live_your_key" \
-H "Content-Type: application/json" \
-d '{
"text": "Your post content",
"platform": "twitter",
"scheduled_at": "2026-06-01T10:00:00Z"
}'/posts/:idGet a single post by ID.Example Response
{
"post": {
"id": "p_xyz",
"text": "Hello world",
"platform": "twitter",
"status": "published",
"scheduled_at": "2026-05-15T10:00:00Z",
"created_at": "2026-05-10T08:00:00Z",
"media_urls": []
}
}Code Example
curl -X GET https://fastsocial.ai/api/v1/posts/p_abc123 \ -H "Authorization: Bearer fsk_live_your_key" \ -H "Content-Type: application/json"
/posts/:idUpdate a draft or scheduled post.Request Body
{
"text": "Updated content",
"scheduled_at": "2026-06-02T10:00:00Z"
}Example Response
{
"post": {
"id": "p_xyz",
"text": "Updated content",
"status": "scheduled",
"scheduled_at": "2026-06-02T10:00:00Z"
}
}Code Example
curl -X PATCH https://fastsocial.ai/api/v1/posts/p_abc123 \
-H "Authorization: Bearer fsk_live_your_key" \
-H "Content-Type: application/json" \
-d '{
"text": "Updated content",
"scheduled_at": "2026-06-02T10:00:00Z"
}'/posts/:idRemove a post permanently.Example Response
{ "deleted": true }Code Example
curl -X DELETE https://fastsocial.ai/api/v1/posts/p_abc123 \ -H "Authorization: Bearer fsk_live_your_key"
/platformsList connected social media accounts.Example Response
{
"platforms": [
{
"platform": "twitter",
"display_name": "@acmecorp",
"connected_at": "2026-01-15T08:00:00Z"
},
{
"platform": "linkedin",
"display_name": "Acme Corp",
"connected_at": "2026-02-10T12:00:00Z"
}
]
}Code Example
curl -X GET https://fastsocial.ai/api/v1/platforms \ -H "Authorization: Bearer fsk_live_your_key" \ -H "Content-Type: application/json"
/analyticsPost performance summary for the current month.Example Response
{
"published_this_month": 24,
"scheduled": 12,
"failed": 1,
"by_platform": {
"twitter": 10,
"linkedin": 8,
"instagram": 6
}
}Code Example
curl -X GET https://fastsocial.ai/api/v1/analytics \ -H "Authorization: Bearer fsk_live_your_key" \ -H "Content-Type: application/json"
/webhooksList registered webhook endpoints.Example Response
{
"webhooks": [
{
"id": "wh_abc",
"url": "https://yourapp.com/hooks",
"events": ["post.published", "post.failed"],
"created_at": "2026-03-01T10:00:00Z"
}
]
}Code Example
curl -X GET https://fastsocial.ai/api/v1/webhooks \ -H "Authorization: Bearer fsk_live_your_key" \ -H "Content-Type: application/json"
/webhooksRegister a new webhook endpoint.Request Body
{
"url": "https://yourapp.com/webhooks",
"events": ["post.published", "post.failed"]
}Example Response
{
"webhook": {
"id": "wh_new",
"url": "https://yourapp.com/webhooks",
"events": ["post.published", "post.failed"],
"created_at": "2026-05-21T09:00:00Z"
}
}Code Example
curl -X POST https://fastsocial.ai/api/v1/webhooks \
-H "Authorization: Bearer fsk_live_your_key" \
-H "Content-Type: application/json" \
-d '{
"url": "https://yourapp.com/webhooks",
"events": ["post.published", "post.failed"]
}'/webhooks/:idRemove a webhook.Example Response
{ "deleted": true }Code Example
curl -X DELETE https://fastsocial.ai/api/v1/webhooks/wh_abc123 \ -H "Authorization: Bearer fsk_live_your_key"
Pagination
All list endpoints (/posts, /webhooks, /platforms) support cursor-free offset pagination via limit and offset query parameters.
limitDefault: 20 · Max: 100
Number of results to return per page.
offsetDefault: 0
Number of results to skip before returning.
has_moreResponse field
true if additional pages exist.
Example request
Response envelope
{
"posts": [...],
"total": 243,
"limit": 50,
"offset": 100,
"has_more": true
}The has_more field is true whenever offset + limit < total. Use it to decide whether to fetch another page.
JavaScript pagination loop
async function fetchAllPosts(apiKey) {
const allPosts = [];
let offset = 0;
const limit = 100;
while (true) {
const res = await fetch(
`https://fastsocial.ai/api/v1/posts?limit=${limit}&offset=${offset}`,
{ headers: { 'Authorization': `Bearer ${apiKey}` } }
);
const data = await res.json();
allPosts.push(...data.posts);
if (!data.has_more) break;
offset += limit;
}
return allPosts;
}Webhook Events
Subscribe to real-time events. Each delivery includes an x-fastsocial-signature header for HMAC-SHA256 verification.
post.publishedpost.failedpost.scheduledVerify signatures (Node.js)
const crypto = require('crypto'); const signature = req.headers['x-fastsocial-signature']; const expected = 'sha256=' + crypto.createHmac('sha256', webhookSecret).update(rawBody).digest('hex'); const valid = crypto.timingSafeEqual(Buffer.from(signature), Buffer.from(expected));
JavaScript SDK
npm package coming soonCopy this class directly into your project for a typed wrapper around the API. A full npm package is in the works — watch this page for updates.
// Fast Social API Client
// Copy this class into your project or install from npm (coming soon)
class FastSocialClient {
private baseUrl = 'https://fastsocial.ai/api/v1';
constructor(private apiKey: string) {}
private async request(method: string, path: string, body?: unknown) {
const res = await fetch(`${this.baseUrl}${path}`, {
method,
headers: {
'Authorization': `Bearer ${this.apiKey}`,
'Content-Type': 'application/json',
},
body: body ? JSON.stringify(body) : undefined,
});
if (!res.ok) {
const error = await res.json();
throw new Error(error.error?.message ?? 'API request failed');
}
return res.json();
}
// Account
getMe() { return this.request('GET', '/me'); }
// Posts
listPosts(params?: { status?: string; platform?: string; limit?: number; offset?: number }) {
const qs = new URLSearchParams(params as Record<string, string>).toString();
return this.request('GET', `/posts${qs ? `?${qs}` : ''}`);
}
createPost(data: { text: string; platform: string; scheduled_at: string; media_urls?: string[] }) {
return this.request('POST', '/posts', data);
}
getPost(id: string) { return this.request('GET', `/posts/${id}`); }
updatePost(id: string, data: object) { return this.request('PATCH', `/posts/${id}`, data); }
deletePost(id: string) { return this.request('DELETE', `/posts/${id}`); }
// Platforms
listPlatforms() { return this.request('GET', '/platforms'); }
// Analytics
getAnalytics() { return this.request('GET', '/analytics'); }
// Webhooks
listWebhooks() { return this.request('GET', '/webhooks'); }
createWebhook(data: { url: string; events: string[] }) { return this.request('POST', '/webhooks', data); }
deleteWebhook(id: string) { return this.request('DELETE', `/webhooks/${id}`); }
}
// Usage:
const client = new FastSocialClient('fsk_live_your_key');
const posts = await client.listPosts({ platform: 'twitter', limit: 10 });Error Codes
| Status | Code | Description |
|---|---|---|
| 401 | UNAUTHORIZED | Invalid or missing API key |
| 403 | FORBIDDEN | API key lacks required scope |
| 404 | NOT_FOUND | Resource not found |
| 422 | VALIDATION_ERROR | Invalid request body |
| 429 | RATE_LIMITED | Exceeded 1,000 req/hour |
| 500 | SERVER_ERROR | Internal server error |
API Scopes
| Scope | Description |
|---|---|
| posts:read | Read posts and their statuses |
| posts:write | Create, update, and delete posts |
| platforms:read | View connected social accounts |
| analytics:read | Access analytics data |
Versioning
The API follows semantic versioning. We aim for maximum backwards compatibility within a version.
Current version
The API is at v1 (/api/v1/). All endpoints documented here are stable.
Breaking changes
Breaking changes will be released under a new version path (e.g. /api/v2/). The v1 endpoint will remain active for at least 12 months after a new major version is released.
Non-breaking additions
New fields, new endpoints, and new optional parameters are added to the current version without notice. Your integration should tolerate unknown fields in responses.
Changelog
Subscribe to API change notifications by contacting developer support.
Start building today
Get your API key from the client portal. Free developer access, no expiration.
Get API Access →