One-click import of the StrataKit OpenAPI spec into popular API clients. Postman and Insomnia deep links always use the canonical production spec at stratakit.io/openapi.yaml. The download link uses this page's origin when public, so preview deployments can expose their own local spec.
Filter by status (pending, processing, completed, failed)
Try It
Python Example
List productions with filtering
36 linespython
1
import requests
2
import os
3
4
API_KEY = os.environ['STRATAKIT_API_KEY']
5
BASE_URL = 'https://stratakit.io/api/v1'
6
7
def list_productions(limit: int = 20, offset: int = 0, status: str = None):
8
"""List productions with optional filtering."""
GET/api/v1/productions/:id
Get details of a specific production.
Path Parameters
Parameter
Type
Description
id
string (UUID)
Production ID
Try It
Response Fields
Field
Type
Description
id
string
Unique production ID
status
string
queued, processing, completed, failed
output_url
string
Direct presigned R2 URL of the rendered video (when completed), plus url_expires_at and canonical output_size on the same response. Signed for GET only; treat HEAD as best-effort because storage providers may reject or inconsistently serve it. Use a ranged GET (Range: bytes=0-0) to probe headers cheaply, and fall back to output_size if Content-Range is absent. Expires after 1 hour; re-fetch this endpoint to mint a fresh URL.
url_expires_at
string
ISO 8601 expiry for all presigned media URLs in this response. Show users before long downloads; re-fetch the production after this time.
output_duration
number
Duration in seconds (when completed)
processing_time_ms
number
Processing time in milliseconds
credits_used
number
Credits deducted for this production
error
string
Error details (when failed)
created_at
string
ISO 8601 timestamp
completed_at
string
ISO 8601 timestamp (when completed)
Python Example (with polling)
Get production status with polling
54 linespython
1
import requests
2
import os
3
import time
4
5
API_KEY = os.environ['STRATAKIT_API_KEY']
6
BASE_URL = 'https://stratakit.io/api/v1'
7
8
def get_production(production_id: str):
DELETE/api/v1/productions/:id
Permanently delete a production and its associated video/thumbnail files from storage. Works for productions in any status (queued, processing, completed, failed). This action cannot be undone.
"""Delete a production and its associated video files."""
Canvas Wizard
The Canvas Wizard applies themes and AI-powered effects to your canvas in one step. Use it to style media, add effects/transitions, and optionally create a production and deploy to social platforms — all in a single request.
POST/api/v1/canvas-wizard
Apply a theme and/or AI guidance to a canvas. Can preview changes or directly create a production.
If true, creates a production with the styled canvas (default: false — preview only)
name
string
No
Optional name for the production
priority
string
No
Queue priority: low, normal, high
testMode
boolean
No
If true and createProduction is true, production credits are not deducted (wizard styling credit still applies). Ignored in preview mode. Default: false
deploy
object
No
Auto-deploy to social platforms on completion (requires createProduction: true, Pro plan or higher, and social:deploy scope)
Conditional: at least one of theme, guidance, or tags is required. Effect tags are free (0 credits); there is no extra style surcharge for using them.
Deploy Object
Field
Type
Description
connection_ids
string[]
Social connection UUIDs to publish to (1-10). Either connection_ids or use_defaults is required. Requires Pro plan or higher
use_defaults
boolean
Use your default publish targets from Settings. Either connection_ids or use_defaults is required. Requires Pro plan or higher
The canvas object defines your video's dimensions and content. Use the segments format to define your content — base content (video, image, color) auto-sequences, overlays (text, shape) render on top, and audio/TTS each get their own track automatically.
Canvas Properties
Property
Type
Required
Description
preset
string
Either preset or width/height
Resolution preset (see table below)
width
integer
Either preset or width/height
Custom width in pixels (64-4096)
height
integer
Either preset or width/height
Custom height in pixels (64-4096)
segments
array
Yes
Flat array of segments with type discriminator — base content auto-sequences, overlays render on top
fps
integer
No (default: 30)
Frame rate (24, 25, 30, 60)
backgroundColor
string
No (default: #000000)
Hex color for background
Resolution Presets
Preset
Resolution
Aspect Ratio
Use Case
youtube_short
1080x1920
9:16
YouTube Shorts
youtube_landscape
1920x1080
16:9
YouTube Videos
instagram_reel
1080x1920
9:16
Instagram Reels
instagram_story
1080x1920
9:16
Instagram Stories
instagram_feed
1080x1080
1:1
Instagram Feed
tiktok
1080x1920
9:16
TikTok Videos
hd
1280x720
16:9
HD Video
full_hd
1920x1080
16:9
Full HD Video
4k
3840x2160
16:9
4K Ultra HD
Segments
Segments define what content appears and when. Base content (video, image, color) auto-sequences, overlays (text, shape) render on top, and audio/TTS each get their own track automatically.
All errors return a JSON response with an error field.
Error Response Format
json
{
"error": {
"code": "ERROR_CODE",
"message": "Error message describing what went wrong"
}
}
HTTP Status
Code
Description
400
INVALID_REQUEST
Request body is malformed or missing required fields
401
UNAUTHORIZED
Missing or invalid API key
403
FORBIDDEN
API key doesn't have permission for this action
404
NOT_FOUND
Resource not found
409
CONFLICT
Cannot delete resource in current state
429
RATE_LIMITED
Too many requests, slow down
500
INTERNAL_ERROR
Something went wrong on our end
503
SERVICE_UNAVAILABLE
Service temporarily unavailable, retry later
Rate Limits
Rate limits are enforced per API key. When you hit a limit, you'll receive a 429 response with a Retry-After header.
Plan
API Requests
Productions/Hour
Concurrent
Starter
120/min
30/hour
3
Creator
120/min
30/hour
3
Pro
300/min
60/hour
5
Scale
1,000/min
240/hour
10
429 Too Many Requests Response
12 linesbash
HTTP/1.1 429 Too Many Requests
Retry-After: 30
X-RateLimit-Limit: 60
X-RateLimit-Remaining: 0
X-RateLimit-Reset: 1705320000
{
"error": {
Complete Example
The segments format is the recommended way to build productions. Just list your content as flat segments with a type field — the API auto-organizes them, auto-calculates timing, and handles audio/TTS routing.
Segments Format (Recommended)
Two video clips with background music. Start times are auto-calculated for sequential video segments.
With Text Overlay
Text segments automatically render on top of base content. Add text alongside video and audio in the same flat segments array.
Python SDK Example
A complete Python client class with error handling, retry logic, and rate limit support.
stratakit_client.py - Complete Python Client
210 linespython
1
"""
2
StrataKit Python Client
3
A complete client with error handling, retry logic, and rate limits.
4
5
Usage:
6
client = StrataKitClient(api_key='sk_live_...')
7
production = client.create_production(canvas={...})
8
result = client.wait_for_completion(production['id'])
Error Handling Best Practices
Robust error handling
37 linespython
1
from stratakit_client import StrataKitClient, StrataKitError, RateLimitError
2
3
client = StrataKitClient()
4
5
def create_video_safely(canvas: dict) -> dict:
6
"""Create a video with comprehensive error handling."""
7
try:
8
production = client.create_production(canvas)
Batch Processing
Process multiple videos concurrently
58 linespython
1
import concurrent.futures
2
from stratakit_client import StrataKitClient
3
4
client = StrataKitClient()
5
6
def process_batch(items: list, max_workers: int = 5):