doublespeed
  1. Developers
  2. API Reference

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-here

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

ParameterRequiredDescription
statusYesscheduled, posted, or all
account_idNoFilter to a specific account (UUID)
page_sizeNoItems per page, default 20, max 100
pageNoPage number, default 1
date_from / date_toNoInclusive 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/create creates a video or slideshow post in one multipart request: caption, files, target account (or randomAccount), optional music and schedule.
  • PATCH /api/v1/posts/{post_id}/status moves a post between draft and scheduled. 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-request files a tracked deletion request instead; the post is marked delete_requested for 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.

ParameterRequiredDescription
searchNoCase-insensitive name or description pattern
only_pinnedNotrue to return only pinned templates
page / page_sizeNoPagination, 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}/accounts lists tracked creators (paginated).
  • POST and DELETE on 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.