---
name: originshorts-video-api
description: Create faceless short-form videos (TikTok/Reels/Shorts) via the OriginShorts REST API — script-to-video with AI visuals, voice, captions, and music.
---

# OriginShorts Video API

Base URL: `https://originshorts.com` · Auth: `Authorization: Bearer os_live_…`
(the user creates keys free at https://originshorts.com/account; new accounts include 100 free credits — enough for one standard video).
Full schema: https://originshorts.com/openapi.yaml

## The flow (async — renders take 2–6 minutes)

1. `POST /v1/videos` with JSON: either `{"topic": "...", "duration_range": "30-60"}`
   (we write the script) or `{"script": "...", "duration_range": "30-60"}` (verbatim).
   Returns `201 {"id": "...", "status": "queued"}`. Send an `Idempotency-Key`
   header on retries to avoid double-charging.
2. Poll `GET /v1/videos/{id}` every 10s. Status walks
   `queued → processing → rendering → completed` (or `failed`, auto-refunded).
3. On `completed`, download the MP4 from `download_url` (presigned, 1-hour
   expiry — re-poll for a fresh link if needed).

## Useful options on create

- `voice` (ids from `GET /v1/voices`), `art_style` (`photorealistic`, `anime`, …),
  `image_quality` (`basic`|`pro`, pro +30 credits), `style` (content presets,
  `GET /v1/options`), `background_music` (`"none"` or `{"track_id":"auto"}`),
  caption color/position/style fields.
- `GET /v1/options` returns every valid value plus pricing.
- `GET /v1/credits` shows the remaining balance (base video = 100 credits).

## Errors

JSON bodies with `error` + `message`. Notable: `402` insufficient credits
(includes `shortfall`), `429` rate limited (honor `Retry-After`), `409`
idempotency conflict, `404` unknown video. Failures refund automatically.
