/public/v1 prefix. All requests are authenticated with your organization API key, and responses are JSON.
Base URL
All endpoints are relative to your PostSider instance:On a self-hosted instance the public API is served under
/api behind the bundled nginx, so your base URL is your domain plus /api/public/v1, for example https://social.example.com/api/public/v1.Authentication
Every request includes your API key in theAuthorization header. There is no Bearer prefix; pass the raw key value:
Rate limiting
The API allows 60 requests per minute per organization by default (self-hosted operators can change this with theAPI_LIMIT environment variable). Every response includes:
| Header | Description |
|---|---|
X-RateLimit-Limit | Maximum requests allowed in the current window |
X-RateLimit-Remaining | Requests remaining in the current window |
Retry-After | Seconds to wait before retrying, sent only on a 429 |
429 Too Many Requests. Back off for the number of seconds in Retry-After before retrying.
Request and response format
Send request bodies as JSON with theContent-Type: application/json header. Responses are JSON. File uploads to /upload use multipart/form-data instead.
Error codes
The API uses standard HTTP status codes. The response body carries amsg with more detail where available.
| Code | Meaning |
|---|---|
400 | Invalid request, or a post failed channel validation (the message says which channel and why) |
401 | Missing or invalid API key |
402 | Plan limit reached, for example your channel or monthly post quota |
404 | Resource not found |
429 | Rate limit exceeded; retry after Retry-After |
Endpoints
Posts
Create, schedule, list, validate, and delete posts across connected channels.
Channels
List channels and groups, connect or disconnect accounts, and read channel analytics.
Media
Upload images and video to the PostSider media library.
Full endpoint reference
| Method | Path | Description |
|---|---|---|
POST | /public/v1/posts | Create, schedule, or publish a post |
GET | /public/v1/posts | List posts in a date range |
GET | /public/v1/posts/:id/missing | Per-channel validation for a post |
PUT | /public/v1/posts/:id/status | Change a post’s status |
DELETE | /public/v1/posts/:id | Delete a post |
DELETE | /public/v1/posts/group/:group | Delete a post group |
GET | /public/v1/find-slot/:id | Next free queue slot for a channel |
GET | /public/v1/integrations | List connected channels |
GET | /public/v1/groups | List channel groups |
GET | /public/v1/social/:integration | Start connecting a new channel |
DELETE | /public/v1/integrations/:id | Disconnect a channel |
GET | /public/v1/analytics/:integration | Channel analytics |
GET | /public/v1/analytics/post/:postId | Post analytics |
GET | /public/v1/notifications | List notifications |
POST | /public/v1/upload | Upload a media file |
POST | /public/v1/upload-from-url | Import media from a URL |

