API Reference
The doublespeed REST API lets you list and manage posts, discover templates, enqueue comments, manage comment monitors, and clone videos programmatically. Every endpoint is scoped to a single product through its API key.
Authentication
Generate a key from the API tab in your product dashboard, then send it in the Authorization header on every request:
Authorization: Bearer ds-your-api-key-hereThe key determines the product scope. Endpoints ignore any product_id or userId sent in the query or body.
Posts
GET /api/v1/posts
List scheduled or posted posts for your product.
| Parameter | Required | Description |
|---|---|---|
status | Yes | scheduled, posted, or all |
account_id | No | Filter to a specific account (UUID) |
page_size | No | Items per page, default 20, max 100 |
page | No | Page number, default 1 |
date_from / date_to | No | Inclusive YYYY-MM-DD date filters |
Responses are paginated (page, page_size, total_count, total_pages) and each post includes its status, account, caption, public post URL, and view/like/comment stats once live.
curl -H "Authorization: Bearer ds-your-api-key-here" \
"https://doublespeed.ai/api/v1/posts?status=posted&page_size=20"Three more post endpoints cover the rest of the lifecycle:
POST /api/posts/createcreates a video or slideshow post in one multipart request: caption, files, target account (orrandomAccount), optional music and schedule.PATCH /api/v1/posts/{post_id}/statusmoves a post betweendraftandscheduled. Scheduling places the post in the account's next available slot.DELETE /api/v1/posts/{post_id}removes a queued (scheduled) post. For live or pending posts,POST /api/v1/posts/{post_id}/deletion-requestfiles a tracked deletion request instead; the post is markeddelete_requestedfor follow-up rather than hard-deleted.
Templates
GET /api/v1/templates
List lightweight template metadata: id, name, description, thumbnail and preview URLs, tags, pinned/public flags, and timestamps. Pinned templates sort first, then most recently updated.
| Parameter | Required | Description |
|---|---|---|
search | No | Case-insensitive name or description pattern |
only_pinned | No | true to return only pinned templates |
page / page_size | No | Pagination, default 1 / 20, max 100 |
Comments
POST /api/v1/comments
Enqueue pre-written comments on public TikTok posts. Each request takes 1 to 500 rows of { postLink, comment }; comments are placed on a humanized schedule, by default at a random time between 5 minutes and 24 hours after submission. Pass placement_window: { min_hours, max_hours } for a tighter window (max 24 hours).
{
"rows": [
{
"postLink": "https://www.tiktok.com/@creator/video/7491234567890123456",
"comment": "This is so good"
}
],
"placement_window": { "min_hours": 8, "max_hours": 12 }
}Exact-duplicate comments on the same post are skipped rather than double-posted, so retrying a failed request is safe. Comments are billed to your product only when they actually publish.
GET /api/v1/comments/status
Poll delivery status for previously enqueued comment ids. Signed webhooks for status changes are available through the /api/v1/comments/webhook endpoints.
Comment Monitors
GET /api/v1/monitors
List your product's live comment monitors, then manage each monitor's tracked TikTok creators:
GET /api/v1/monitors/{monitorId}/accountslists tracked creators (paginated).POSTandDELETEon the same path add and remove creators by username.
Monitor creation and deletion happen in the dashboard, not through the API.
Clone
POST /api/v1/clone
Clone a source video into a fresh 15 second AI generation. Only source (a public video URL) is required; add a product object (name, description, and optional tone, audience, imageUrl) to have the clone feature your product, or omit it to recreate the reference faithfully. Optional prompt adds creative direction and voiceover: true generates native spoken audio.
Generation takes minutes, so the POST returns immediately with a jobId; poll GET /api/v1/clone/{jobId} for the result. Requests that the product's credit balance cannot cover return 402.
Errors
All endpoints return 400 for invalid parameters and 401 when the API key is missing, inactive, or invalid. Error bodies are JSON with ok: false and a message.