Kolbo.AIKolbo.AI Docs
Developer API

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:

SlugCatalog
<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 run

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

FieldNotes
slug, name, description, family, tags, versionIdentity. Pass slug to the estimate and run routes
output_typeimage or video
estimated_creditsCatalog price at the recipe's own settings
free_trialWhether the trend can run as a free trial (see below)
previewWhen 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
resolutionsVideo trends: 480p, 720p, 1080p. Empty for image trends
aspect_ratiosImage trends: 3:4, 1:1, 9:16, 4:3, 16:9. Empty for video trends
examplesExample inputs and outputs (output, output_type, poster, preview, thumb, width, height)
inputsWhat the run asks for (next table)
cover, badges, communityCard display fields

Each entry in inputs:

FieldNotes
keyThe name to use in the run's inputs object
kindimage, video, audio, text or choice
roleWhat the input represents: character, pet, product, location, image, video, audio, text or choice
label, hintDisplay text
requiredWhether a run needs it. An optional photo left empty keeps the example's image
max_imagesPresent when the input accepts several photos of the same subject (up to 3)
max_lengthtext inputs only
optionschoice 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"
}
FieldTypeRequiredNotes
inputsobjectYes to runKeyed 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)
dnaobjectNoFill 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_idstringNoDefaults to your API Generations project. You need edit access (404 PROJECT_NOT_FOUND otherwise)
resolutionstringNoVideo trends only, one of resolutions (400 INVALID_RESOLUTION)
aspect_ratiostringNoImage trends only, one of aspect_ratios (400 INVALID_ASPECT_RATIO)
previewbooleanNotrue 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_keystringRun onlyRequired. 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_creditsnumberRun onlyCredit ceiling. When omitted, Kolbo sets one from the trend's ceiling or quote
free_trialbooleanRun onlyRun 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:

FieldNotes
run_idUse with GET /api/v1/trends/runs/:runId
trend, trend_name, trend_cover, trend_version, output_type, project_idWhat ran, and where
statusqueued, running, cancel_requested, completed, failed, cancelled or needs_attention
progress0–100
steps{ total, completed }
outputWhen completed: { type, url }, plus generation_id, media_id and thumbnail when available. The output is an ordinary media-library item
error, error_codeWhen 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_ceilingThe run's max_credits
created_at, finished_atTimestamps

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 preset

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