Trends
Run ready-made trend recipes, Motion Library presets and Morphious styles on your own photos and videos.
A trend is a ready-made recipe: you supply the inputs it asks for (a photo, a video, a short text or a choice) and Kolbo runs the whole recipe as one job. The recipe's steps and prompts stay private; you see its inputs, examples, price and the finished output.
Three catalogs are served through the same routes, distinguished by the slug:
| Slug | Catalog |
|---|---|
<slug> | Trends |
motion/<slug> | Motion Library presets (see Motion Library below) |
style/<slug> | Morphious catalog styles, restyling your own video (see Morphious Styles) |
Endpoints
GET /api/v1/trends list trends (?family=)
GET /api/v1/trends/motion list Motion Library presets as trends
GET /api/v1/trends/styles list Morphious catalog styles as trends
GET /api/v1/trends/:slug one trend (also /motion/:slug, /style/:slug)
POST /api/v1/trends/:slug/estimate free price quote (also /motion/:slug/estimate, /style/:slug/estimate)
POST /api/v1/trends/:slug/runs start a run (also /motion/:slug/runs, /style/:slug/runs)
GET /api/v1/trends/runs your runs (?project_id=&limit=)
GET /api/v1/trends/runs/:runId one run
POST /api/v1/trends/runs/:runId/cancel cancel a runResponses use { "status": true, "data": { ... } }; errors use { "status": false, "code": "...", "message": "..." }. Starting and cancelling a run need a write-enabled API key (403 FORBIDDEN). Limits: 120 requests per minute per account across these routes, and estimate and run calls are additionally capped at 20 per minute. Both count every request, and a limited request receives the plain-text body Too many requests, please try again later.
Read a trend
GET /api/v1/trends returns data: { trends: [...], free_trials_left }. GET /api/v1/trends/:slug returns one trend plus free_trials_left. A missing slug returns 404 TREND_NOT_FOUND.
| Field | Notes |
|---|---|
slug, name, description, family, tags, version | Identity. Pass slug to the estimate and run routes |
output_type | image or video |
estimated_credits | Catalog price at the recipe's own settings |
free_trial | Whether the trend can run as a free trial (see below) |
preview | When present, { duration, estimated_credits } for a short test run at the same per-second price. Catalog styles (style/<slug>) offer one too: it runs on the first 4 seconds of your own video |
output | { aspect_ratio, resolution, duration } defaults |
resolutions | Video trends: 480p, 720p, 1080p. Empty for image trends |
aspect_ratios | Image trends: 3:4, 1:1, 9:16, 4:3, 16:9. Empty for video trends |
examples | Example inputs and outputs (output, output_type, poster, preview, thumb, width, height) |
inputs | What the run asks for (next table) |
cover, badges, community | Card display fields |
Each entry in inputs:
| Field | Notes |
|---|---|
key | The name to use in the run's inputs object |
kind | image, video, audio, text or choice |
role | What the input represents: character, pet, product, location, image, video, audio, text or choice |
label, hint | Display text |
required | Whether a run needs it. An optional photo left empty keeps the example's image |
max_images | Present when the input accepts several photos of the same subject (up to 3) |
max_length | text inputs only |
options | choice inputs only: [{ value, label }] |
Estimate and run
POST /api/v1/trends/:slug/estimate is free and runs nothing. POST /api/v1/trends/:slug/runs starts the run and spends credits.
{
"project_id": "YOUR_PROJECT_ID",
"inputs": { "slot_1": ["https://cdn.example.com/me-front.jpg", "https://cdn.example.com/me-side.jpg"] },
"resolution": "720p",
"idempotency_key": "trend-run-0001"
}| Field | Type | Required | Notes |
|---|---|---|---|
inputs | object | Yes to run | Keyed by each input's key. Media inputs take an https:// URL (up to 2,048 characters); an input with max_images also takes an array of 1–3 photo URLs. text inputs are trimmed to their max_length; choice inputs take one option value. An estimate accepts missing inputs. A run needs every required input (400 INPUT_REQUIRED) |
dna | object | No | Fill a multi-photo input from a Visual DNA instead: { "<input key>": "<Visual DNA id>" }. Up to 3 of the DNA's images are used. An unknown or inaccessible DNA returns 404 VISUAL_DNA_NOT_FOUND |
project_id | string | No | Defaults to your API Generations project. You need edit access (404 PROJECT_NOT_FOUND otherwise) |
resolution | string | No | Video trends only, one of resolutions (400 INVALID_RESOLUTION) |
aspect_ratio | string | No | Image trends only, one of aspect_ratios (400 INVALID_ASPECT_RATIO) |
preview | boolean | No | true runs the short preview cut instead (400 PREVIEW_NOT_AVAILABLE when the trend has none). On style/<slug> the preview trims your video to its first preview.duration seconds before restyling it |
idempotency_key | string | Run only | Required. 8–100 characters of letters, digits, _, ., : or -. Repeating a key with the same body returns the original run; reusing it with a different body returns 409 IDEMPOTENCY_CONFLICT |
max_credits | number | Run only | Credit ceiling. When omitted, Kolbo sets one from the trend's ceiling or quote |
free_trial | boolean | Run only | Run as one of your free trials (below) |
A run may use at most 25 images in total (400 INVALID_INPUT).
The estimate returns data: { trend, total_credits, known_credits, provisional, resolution?, aspect_ratio?, preview? }. provisional: true means some steps settle at their measured price (for example a step priced by your video's length).
Free trials. Each account has 2 free trend runs. Send "free_trial": true on a trend whose free_trial is true; the run is paid with credits granted for it, up to 300, so it works with an empty balance. Trials run only in your own projects. When none are left the run returns 402 TRIAL_USED; a trend outside the trial returns 400 TRIAL_NOT_AVAILABLE. Trial runs cannot be cancelled (409 TRIAL_RUN_NOT_CANCELLABLE).
Track a run
Starting, reading and cancelling all return the same run object:
| Field | Notes |
|---|---|
run_id | Use with GET /api/v1/trends/runs/:runId |
trend, trend_name, trend_cover, trend_version, output_type, project_id | What ran, and where |
status | queued, running, cancel_requested, completed, failed, cancelled or needs_attention |
progress | 0–100 |
steps | { total, completed } |
output | When completed: { type, url }, plus generation_id, media_id and thumbnail when available. The output is an ordinary media-library item |
error, error_code | When a step failed. error_code is one of copyright, content_policy, no_face, photo, photo_shape, video, credits, busy, timeout or unknown. For the recognised codes error is a fixed, user-facing sentence; for unknown it is the failed step's own reason (up to 300 characters, provider names removed), or a generic line when there is none |
credits_ceiling | The run's max_credits |
created_at, finished_at | Timestamps |
Poll GET /api/v1/trends/runs/:runId until status is completed, failed, cancelled or needs_attention. An unknown run, or one that is not yours, returns 404 RUN_NOT_FOUND. GET /api/v1/trends/runs returns data: { runs: [...] }, newest first, for one project (project_id) or all of your projects; limit is up to 100 (default 30).
Motion Library
The Motion Library is a read-only catalog of motion presets. Each one is also runnable as a trend under motion/<slug> (above).
GET /api/v1/recast-presets list presets
GET /api/v1/recast-presets/:slug one presetQuery parameters for the list: section (kolbo or community), category (up to 40 characters), limit (1–200, default 60) and offset (default 0). The list returns data: { presets, total, offset, limit }; each preset has slug, name, summary, category, section, mode, model, source, prompt, references, examples and badges. An unknown slug returns 404 PRESET_NOT_FOUND.
MCP
list_trends, get_trend, estimate_trend_run, run_trend, get_trend_run, list_trend_runs and cancel_trend_run. estimate_trend_run is free; run_trend spends credits.