Programmatically create, schedule, and manage posts across all your connected social platforms.
https://app.timedpost.com/api/v1POST /v1/keyscurl -X POST https://app.timedpost.com/api/v1/posts \
-H "Authorization: Bearer tp_live_your_key_here" \
-H "Content-Type: application/json" \
-d '{
"platforms": ["x", "tiktok"],
"content": {
"text": "Hello from the API!",
"media_urls": ["https://example.com/video.mp4"],
"hashtags": ["#automation", "#api"]
}
}'All API requests require authentication via a Bearer token in the Authorization header.
Authorization: Bearer tp_live_xxxxxxxxxxxxxxxxxxxxxxxxKey types:
tp_live_ — Production keys. Actions are real.tp_test_ — Test keys. Posts are validated but not published.API requests are rate limited per key at 100 requests per hour (default). Rate limit info is returned in response headers:
| Header | Description |
|---|---|
| X-RateLimit-Limit | Max requests per hour |
| X-RateLimit-Remaining | Requests remaining in window |
| X-RateLimit-Reset | ISO timestamp when window resets |
When rate limited, you'll receive a 429 response with a Retry-After header (in seconds).
All errors follow a consistent format:
{
"error": {
"code": "error_code",
"message": "Human-readable description"
}
}| Status | Code | Meaning |
|---|---|---|
| 400 | validation_error | Invalid request body or parameters |
| 401 | unauthorized | Missing or invalid API key |
| 403 | forbidden | API key lacks required permission |
| 404 | not_found | Resource not found |
| 409 | invalid_state | Action not allowed for current state |
| 429 | rate_limited | Too many requests |
| 500 | server_error | Internal server error |
Create, list, check status, and cancel posts.
Idempotency-Key on POST requests from agents. Reusing the same key with the same body returns the original post; reusing it with a different body returns 409 idempotency_conflict.queued→publishing→publishedscheduled→queued→publishing→publishedqueued — Immediate publish, waiting for cron pickupscheduled — Scheduled for future publish_at timepublishing — Currently being published to platformspublished — Successfully published to all platformspartial — Published to some platforms, failed on othersfailed — Failed on all platformscancelled — Cancelled before publishingList your connected social media accounts.
Get available platforms and their supported features.
Receive real-time notifications when posts are published or fail. Webhook payloads are signed with HMAC-SHA256 using your webhook secret.
Every webhook request includes an X-TimedPost-Signature header. Verify it to ensure the request came from TimedPost:
const crypto = require('crypto');
function verifyWebhook(body, signature, secret) {
const expected = crypto
.createHmac('sha256', secret)
.update(body)
.digest('hex');
return crypto.timingSafeEqual(
Buffer.from(signature),
Buffer.from(expected)
);
}| Event | Fired when |
|---|---|
| post.published | Post successfully published to platforms |
| post.failed | Post failed on all platforms |
| post.cancelled | Post was cancelled before publishing |
{
"event": "post.published",
"data": {
"post_id": "550e8400-...",
"platforms": ["x", "tiktok"],
"status": "published",
"published_at": "2026-03-08T12:01:00Z"
},
"timestamp": "2026-03-08T12:01:01Z"
}PATCH with {"active": true}.Manage API keys. These endpoints require session authentication (logged in via the app), not API key auth.
Need help? Contact us at [email protected]