Kolbo.AIKolbo.AI Docs
Developer API

Models & Pricing

Live model credit costs and pricing sources. Personal subscription credits have no fixed USD exchange rate; Developer USD wallet pricing is separate.

Kolbo provides …+ AI models that are dynamically available. New models are added regularly and immediately accessible via the API.

Comparing website subscription prices? Fetch the live pricing facts for current subscription charges, annual payments, credit allowances and Unlimited settings. Read the response's check time before quoting prices. This credit-billed API catalog is separate from the Developer USD wallet; its credit counts are not dollar prices.

List Models

GET /api/v1/models

Query Parameters

ParameterTypeRequiredDescription
typestringNoFilter by DB type name: text_to_img, image_editing, text_to_video, img_to_video, draw_to_video, video_to_video, elements, firstlastgenerations, lipsync-image, lipsync-video, music_gen, text_to_speech, text_to_sound, stt, text. Legacy aliases expand to one or more DB types: image, image_edit, video, video_from_image, video_from_video, music, speech, sound, chat, first_last_frame, transcription, lipsync (both lipsync types), three_d (all four 3D types). Edit-engine types are also recognised: image_upscale, image_reframe, image_zoom_out, video_upscale, video_reframe, video_background_removal, video_to_sound, video_face_swap, video_watermark_removal, video_extend, video_inpaint, video_retake. Any other string is passed through as a raw type match, so the individual 3D types work too: 3d_text_to_model, 3d_image_to_model, 3d_multi_image_to_model, 3d_world. Omit for all models.
providerstringNoExact-match filter on the model's stored provider field. This is not the same value as the public provider key returned in the response (the product-family key, e.g. nano-banana, kling), so a value read off a response can return zero models. To narrow by product family, fetch by type and filter on provider / group client-side. An unknown provider is not an error — it just returns zero models.

Neither filter is validated. An unrecognised type or provider returns 200 with "models": [] and "count": 0 — not a 400. Always check count before assuming the catalog is empty.

Hidden and soft-deleted models are excluded from every response, as are web-only navigation rows (identifiers starting with kolbo_gateway_), so this endpoint only ever lists models you can actually generate with. The Smart Select router itself (kolbo_smart_select_router) is listed under the types it routes for.

Example

# All image generation models
curl "https://api.kolbo.ai/api/v1/models?type=text_to_img" \
  -H "X-API-Key: kolbo_live_..."

# All lipsync models (legacy alias: expands to lipsync-image + lipsync-video)
curl "https://api.kolbo.ai/api/v1/models?type=lipsync" \
  -H "X-API-Key: kolbo_live_..."

Response

{
  "success": true,
  "models": [
    {
      "identifier": "nano-banana-2",
      "name": "Nano Banana 2",
      "avatar": "google-gemini-icon.svg",
      "provider": "nano-banana",
      "group": "Nano Banana",
      "provider_family": "Nano Banana",
      "types": ["text_to_img", "thumbnail"],
      "credit": 10,
      "supported_aspect_ratios": ["21:9", "16:9", "3:2", "4:3", "5:4", "1:1", "4:5", "3:4", "2:3", "9:16"],
      "supported_aspect_ratios_by_type": null,
      "default_aspect_ratio": null,
      "supported_durations": null,
      "supported_resolutions": ["1K", "2K", "4K"],
      "draft_resolutions": [],
      "draft": null,
      "resolution_multipliers": { "1K": 1, "2K": 1.5, "4K": 2 },
      "video_input_credit": null,
      "video_input_resolution_multipliers": null,
      "video_input_billing": null,
      "max_reference_images": 14,
      "editing_model_identifier": "nano-banana-2-image-editing",
      "max_visual_dna": 14,
      "max_total_media": null,
      "elements_max_images": null,
      "elements_max_videos": null,
      "elements_max_audio": null,
      "elements_max_documents": null,
      "max_images": null,
      "max_videos": null,
      "max_elements": null,
      "max_audio": null,
      "images_per_request": 1,
      "sound_generation_type": "none",
      "sound_enabled_by_default": false,
      "sound_baked_in": false,
      "sound_credit_multiplier": 1,
      "requires_prompt": null,
      "min_prompt_length": 1,
      "max_prompt_length": 10000,
      "supports_custom_fonts": false,
      "supports_transparent_background": false,
      "supports_visual_dna": true,
      "supports_first_last_frame": false,
      "max_file_size": null,
      "model_type": null,
      "recommended": false,
      "new_model": false,
      "summary": "Secondary versatile image generator. ...",
      "description": "Default all-around pick, weak text rendering",
      "input_token_rate": null,
      "output_token_rate": null,
      "supported_qualities": null,
      "quality_multipliers": null,
      "default_quality": null,
      "flat_credit_by_resolution": null,
      "params": {},
      "estimated_duration_seconds": 94,
      "nsfw_only": false,
      "requires_nsfw_consent": false,
      "haveThinking": false,
      "thinkingLevels": [],
      "thinkingDefault": null,
      "routingModes": [],
      "routingDefault": null
    }
  ],
  "count": 80
}

Abridged: every model object carries the full field set documented below, including the duration, audio-input and keyframe fields omitted here for brevity. Values are illustrative — read live ones from the endpoint.

The envelope is always success, models and count. count is simply the length of models in this response, not a total across pages — the endpoint is unpaginated and returns every matching model in one payload, sorted by the catalog's internal sort order and then by name.

avatar is returned exactly as stored — usually a bare filename, occasionally an absolute URL. Resolve a bare filename against https://api.kolbo.ai/assets/ before rendering it. Do not assume it is already a URL.

Model Fields — full reference

The response is a flat object; fields not applicable to a model family are null / [] / 0. Read the constraint envelope before submitting a generation.

The map-valued fields — resolution_multipliers, quality_multipliers, flat_credit_by_resolution, supported_aspect_ratios_by_type and video_input_resolution_multipliers — and the supported_qualities array are serialised through an || null fallback, so you will see a value, an empty {} / [], or null when the field is absent from the stored document (common). Treat null, {} and [] as the same thing: no entries. Never index into one of them without a guard.

Identity & cost

FieldDescription
identifierUse this exact value as the model parameter in generation requests. Identifiers may contain / (e.g. blackforestlabs/flux-3/text-to-image).
nameHuman-readable display name. Not a valid model value: generation endpoints treat it as an unknown identifier and return 400 MODEL_NOT_FOUND (see Auto-Selection). Several models can share one name across types (e.g. a text-to-video / image-to-video pair). Always send identifier.
providerPublic product-family key — a lowercased slug of group (e.g. nano-banana, kling), or kolbo-ai. It is not the upstream infrastructure provider and not the value the provider query filter matches. Kept for backward compatibility.
group / provider_familyDisplay name of the product family (e.g. "Nano Banana"). Use these to group models.
typesArray of DB type names this model is catalogued under (a model can be multimodal, e.g. both text_to_img and image_editing). May include internal types outside the filter list.
descriptionShort catalog blurb. Empty string when unset.
avatarIcon reference as stored — a bare filename or an absolute URL. Resolve bare filenames against https://api.kolbo.ai/assets/.
creditBase cost. null on the Smart Select router row (kolbo_smart_select_router, listed under text and every other type it routes for), whose price depends on the model it routes to. The unit depends on the model family: per generation (image/music/sound/3D), per second of output (video), per 100 characters (speech: ceil(chars / 100) × credit), per minute of input audio (transcription: ceil(seconds / 60) × credit). Chat is the exception: a chat model configured with per-1K input/output token rates is billed on real token usage and credit is never used. Read credits_used off the finished message for the real cost.
input_token_rate / output_token_rateChat per-1K-token rates (credits per 1K input / output tokens). Present on every model object; null when the model has no token rate configured (every non-chat model, and chat models billed on credit). Treat them as an estimate — the real charge is credits_used on the finished message.
video_input_creditAlternate per-combined-second rate used when this model receives video input. Billing becomes video_input_credit × (sum of each input video's billable seconds + output seconds) (rounding per video_input_billing); do not stack it with credit. null means the normal output-only profile applies.
video_input_resolution_multipliersResolution multipliers for the alternate video-input profile. Use these instead of resolution_multipliers when video_input_credit applies.
video_input_billingnull, or { unit: "combined_seconds", formula, duration_rounding, input_rounding } when video_input_credit is set. Each duration snaps to the nearest whole second when within 0.15 s of it (encoder padding); otherwise the started second is rounded up.
recommended / new_modelCurated badges.
summarySmart-Select strength summary (empty string = "named-only" — only use when the user explicitly requests by name).
model_typeSub-classification (e.g. for image-edit models: upscale, inpaint, face_swap, etc.). null when unset.
paramsData-driven controls for edit engines (upscale_factor, target_resolution, target_fps, enhancement_model, slowdown_factor, output_format, creativity, enhancement_tier, enhancement_preset, fidelity, bit_depth, scale_ratio). Each present key maps to a spec with any of type, values, default, min, max, step, snap, label, required, description, info. {} when the model has none.
haveThinking / thinkingLevels / thinkingDefaultChat reasoning control. When haveThinking is true, thinkingLevels lists { id, label } options (ids drawn from none, minimal, low, medium, high, xhigh, max) and thinkingDefault is the default id. Pass the id as thinking_level on chat.
routingModes / routingDefaultOnly on the Smart Select router row (kolbo_smart_select_router, which appears in every type list it routes for): fast, balanced, smart (each { id, label }), default balanced. Pass the id as routing_mode on chat. [] / null on every other model.
estimated_duration_secondsRealistic wall-clock generation time in seconds at the model's base resolution and base output duration, mined from production data. null = no published estimate. Use it to size a polling timeout, not as a guarantee.

Output constraints

FieldDescription
supported_aspect_ratiosValid aspect ratios. Empty array = the model has no aspect tiering.
supported_aspect_ratios_by_typePer-type override map (multimodal models). Prefer this over the flat array when set.
default_aspect_ratioWhat the API picks if aspect_ratio is omitted.
supported_resolutionsValid resolution labels (["1K","2K","3K","4K"] for images; ["720p","1080p","1440p","2160p"] for video). May include a draft tier label such as 480p-draft (see draft_resolutions).
draft_resolutionsLower-cost draft tiers folded into this model: [{ resolution, can_finalize, final_resolutions, lifetime_seconds }]. Select one by passing its resolution label (e.g. "480p-draft"), or draft: true on the video, image-to-video, elements, first-last-frame and video-to-video endpoints (400 UNSUPPORTED_DRAFT_MODE on a model without one, 400 INVALID_DRAFT_MODE when draft is not a boolean). [] when the model has no draft tier.
draftnull, or { is_draft: true, can_finalize, final_resolutions, lifetime_seconds } when the row itself is a draft tier. Draft tiers listed in draft_resolutions are folded into their parent and never appear as separate rows.
resolution_multipliersPer-resolution cost multiplier on credit. e.g. 2K = 1.5×.
min_resolution / max_resolutionModel-specific lower/upper bound (when supported_resolutions isn't enumerated).
supported_qualitiesValid quality values for image models. The vocabulary is per-model — e.g. ["low","medium","high","auto"] on one family, ["TURBO","BALANCED","QUALITY"] on another. null or [] = no quality tier; omit quality for those models.
quality_multipliersPer-quality cost multiplier on credit, stacked on top of resolution_multipliers. null / {} = no quality pricing.
default_qualityWhat the API picks if quality is omitted. null = no default.
flat_credit_by_resolutionFixed-price override. Maps a resolution label to a flat credit total for the whole generation. When this object is non-empty it replaces the entire per-second / duration / resolution / sound calculation — the model charges the flat value. null / {} = standard pricing.
supported_durationsValid output durations in seconds (video). Empty/null → use min_output_duration/max_output_duration instead.
default_duration / min_output_duration / max_output_durationVideo output bounds.
images_per_requestNumber of images the model returns per request (e.g. Midjourney returns 4). null when unset — treat as 1.
output_audio_formatsContainer/codec choices for the generated audio, when the model lets you pick one. Empty array = the model has one fixed output format and any audio_format you send is ignored.
default_output_audio_formatThe output format used when you omit the choice. null when the model has no choice.
outputs_videotrue when the result is a video file even though the model is catalogued under an audio type (e.g. a model that scores an existing clip).

Input constraints

FieldDescription
max_reference_imagesCap on reference_images / source_images for image tools (text_to_img, image_editing, Creative Director, text_to_video). 0 when unset.
editing_model_identifierFor a text_to_img model: the image_editing model it is auto-routed to when the request carries reference/source images. null means no editing variant — references stay style-only. You never need to send this identifier yourself; see Image Generation.
max_imagesCap on reference_images for video-to-video models.
max_videos / max_elements / max_audioVideo-to-video secondary input caps.
elements_max_images / elements_max_videos / elements_max_audio / elements_max_documentsCaps on reference_images, reference_videos, reference_audio_urls and files for elements models. null = no per-model cap published.
supports_keyframes / max_keyframesTimestamp-anchored keyframe support (gates keyframes) and the maximum number of keyframes per request. false / 0 on models that do not accept keyframes.
max_visual_dnaCap on visual_dna_ids. null when unset.
supports_visual_dnaAuthoritative boolean — prefer this over inferring from max_visual_dna > 0.
max_total_mediaCombined media-input cap (when set).
min_video_duration / max_video_durationSource/reference-video duration range for lipsync-video, video_to_video, and Elements requests that attach video (distinct from output durations above).
min_audio_duration / max_audio_durationAudio-input duration range for lipsync / elements audio.
audio_max_follows_video_durationWhen true, audio is also capped at the source-video duration.
min_recording_duration / max_recording_durationRecording-driven inputs (speech models).
supported_audio_formatsAccepted input audio formats, e.g. ["mp3","wav","m4a"]. Empty = no published restriction. Distinct from output_audio_formats above.
supports_audio_inputWhether the model accepts an audio URL input (background music on video models).
requires_video_inputtrue when the model cannot run from text alone — a source video is mandatory.
max_file_sizePer-upload size cap in bytes (null = unlimited). Pre-check before uploading rather than burning the round trip.
requires_prompt / min_prompt_length / max_prompt_lengthPrompt validation. Schema defaults are requires_prompt: false, min_prompt_length: 1, max_prompt_length: 2000 unless the model overrides them; a value absent from the stored document comes back as null (treat requires_prompt: null as false).
use_character_reference / supports_first_last_frame / supports_custom_loraCapability gates.
supports_custom_fontstrue when the model accepts personal-font font_ids.
supports_transparent_backgroundtrue when background: "transparent" is honoured.

Sound generation (video output)

FieldDescription
sound_generation_type"native" (model emits synced audio) or "none".
sound_enabled_by_defaultWhether sound is on if sound_enabled is omitted.
sound_baked_intrue when the model always outputs audio even though sound_generation_type is "none" (no toggle). Do not treat these models as silent.
sound_credit_multiplierExtra multiplier when sound is enabled (e.g. 1.5×). Defaults to 1.

Content safety

FieldDescription
nsfw_onlytrue when the model exists solely for NSFW output.
requires_nsfw_consenttrue when the model can produce NSFW output and is filtered against the account's content preferences. Requests can be rejected on this basis independently of your prompt.

Cost formula

final_cost = credit
           × (resolution_multipliers[resolution] || 1)
           × (quality_multipliers[quality]       || 1)    // image tools
           × (sound_enabled ? sound_credit_multiplier : 1)
           × (duration_seconds  ?? 1)    // video tools
           × (num_images        ?? 1)    // image tools

For a model with video_input_credit, when the request actually includes video input, replace the formula above with:

final_cost = ceil(video_input_credit
                × (sum(billable_seconds(each_input_video)) + output_seconds)
                × (video_input_resolution_multipliers[resolution] || 1))

Each input video is rounded independently: a duration within 0.15 s of a whole second snaps to it (encoder padding), anything else rounds up to the next started second, with a 1-second minimum. Dedicated Seedance Video Edit follows the selected source clip for its output duration; Seedance Extend counts only the requested added duration as output. A regular Seedance Elements request without video continues to use the ordinary output-only credit profile.

This formula does not apply when flat_credit_by_resolution is non-empty. Those models charge flat_credit_by_resolution[resolution] for the whole generation and ignore duration, resolution and sound multipliers entirely. Check that field first.

Three families bill on their own unit rather than through the formula:

  • Speech charges ceil(characters / 100) × credit.
  • Transcription charges ceil(duration_seconds / 60) × credit on the input audio.
  • Chat is billed per token whenever the model has per-1K input/output token rates configured, in which case credit is ignored entirely. GET /api/v1/models exposes them as input_token_rate / output_token_rate; treat them as an estimate — the authoritative chat cost is credits_used on the finished message.

For exact charged numbers, read credits_used from the generation status response — that's the authoritative server-side total, multiplier-adjusted. credits_breakdown on the same response itemises it per model with base, final and duration_multiplier.

Available Image Models

Loading text_to_img models...

Available Image Editing Models

Loading image_editing models...

Available Text-to-Video Models

Loading text_to_video models...

Available Image-to-Video Models

Loading img_to_video models...

Available Draw-to-Video Models

Loading draw_to_video models...

Available Video-to-Video Models

Loading video_to_video models...

Available Elements Models

Loading elements models...

Available First & Last Frame Models

Loading firstlastgenerations models...

Available Lipsync Models (Image Source)

Loading lipsync-image models...

Available Lipsync Models (Video Source)

Loading lipsync-video models...

Available Music Models

Loading music_gen models...

Available Speech Models

Loading text_to_speech models...

Available Sound Models

Loading text_to_sound models...

Available Chat Models

Loading text models...

Available 3D Models

Loading three_d models...

Available Transcription Models

Loading stt models...

Credit Costs

Credits are usage units for the credit-billed API and personal website. They have no fixed USD exchange rate. The effective cost per credit depends on the subscription or pack purchased, billing period and eligible discount. Divide the actual purchase price by its included credits only for that purchase; do not apply one conversion to every plan or provider. Unused credits and other included benefits also affect realized cost.

For a comparison, multiply the matched output's quoted credit charge by the effective cost for the chosen purchase, or calculate the covering subscription and pack budget for the full workload. Use live pricing facts for personal plans and bounded generation examples, and confirm the final quote before generating. Developer USD wallet quotes are already denominated in USD and must be compared separately.

Pricing by Type

TypePricing Model
ChatPer token, when the model has per-1K token rates: fresh input + cache-write tokens at the input rate, cache-read tokens at ~10% of it, output tokens at the output rate. The sum is rounded up to one decimal place with a 0.1 minimum. Falls back to a flat model.credit per completion only when the model has no token rates.
ImageFlat rate per generation
Image EditingFlat rate per generation
Video (text/image/video-to-video)Per-second: model.credit x duration_seconds
MusicFlat rate per generation
SpeechPer 100 characters: ceil(chars / 100) x model.credit
SoundFlat rate per generation
LipsyncPer-second: model.credit x duration_seconds
3DFlat rate per generation
ElementsPer-second: model.credit x duration_seconds
First & Last FramePer-second: model.credit x duration_seconds
TranscriptionPer minute of input audio, rounded up: ceil(duration_seconds / 60) x model.credit. A file shorter than one minute still bills one minute.

Exact costs are shown in the live tables above. The credit field on each model is always up to date.

Credit Multipliers

The base credit price shown on each model is the base cost at the default tier. Three optional selections on some models — resolution, quality, and audio — multiply the base cost.

Resolution Multipliers (resolutionMultipliers)

When you pass a resolution parameter, the final cost is credit × resolution_multipliers[resolution].

The map is arbitrary per model — some families are flat across every tier, others charge several times base for the top tier, and a few price sub-HD tiers below 1.0. Resolution labels are also not shared across families (1K/2K/4K for images; 720p/1080p/1440p/2160p for most video; other casings exist).

Never assume a multiplier. Call GET /api/v1/models, read supported_resolutions for the valid labels and resolution_multipliers for the cost at each one, then submit. null or an empty {} means the model has no resolution-based pricing. Omitting resolution uses the model's default tier.

Quality Multipliers (qualityMultipliers)

Some image models expose a quality tier via the quality parameter on image generation and image editing. The tier multiplier stacks on top of the resolution multiplier: base × resolutionMultiplier[tier] × qualityMultiplier[quality].

The tier names are not shared across models. One family uses low / medium / high / auto; another uses all-caps speed labels. There is no universal vocabulary — always read supported_qualities from GET /api/v1/models and pass one of the exact strings it returns. supported_qualities: null or [] means the model has no quality tier and quality should be omitted.

The spread between the cheapest and most expensive tier on a single model can be more than 10×, so read quality_multipliers before choosing.

An auto tier, where a model offers one, is billed on actuals. Credits are reserved at the top of the range and then reconciled down to what the generation really cost, so an auto run often charges less than the highest tier. Read credits_used on the finished generation for the authoritative number.

Omitting quality uses the model's default_quality.

Audio Multipliers (sound_credit_multiplier)

Some video models generate native audio. On those (sound_generation_type: "native"), enabling sound multiplies the cost by sound_credit_multiplier. Models without native audio report 1 and are unaffected. sound_enabled_by_default tells you what happens when you omit the flag.

All multipliers compound when a model has more than one:

final = credit
      × resolution_multipliers[resolution]
      × quality_multipliers[quality]
      × (sound_enabled ? sound_credit_multiplier : 1)
      × duration_seconds

The base (credit), resolution_multipliers, quality_multipliers, sound_credit_multiplier and the flat_credit_by_resolution override are all fields on the model document — they stay authoritative there, not in this doc.

Auto-Selection

If you omit the model parameter — or send null, an empty/whitespace string, or one of the aliases auto, auto-select, smart-select, smart_select, smartselect, Smart Select, default, none, kolbo_smart_select_router (matching is case-insensitive and ignores spaces and punctuation) — the endpoint substitutes its own default.

For image, image-edit, video, image-to-video, chat, elements, first-last-frame and lipsync that default is Smart Select, which picks a model for your prompt. Music, speech and sound instead fall back to a fixed default model identifier (suno-v6, eleven_v4 and elevenlabs-sound-effects-v1 respectively) rather than being routed, and 3D falls back to its controller's own built-in default. Creative Director uses Smart Select when model is omitted but does not normalise the alias strings above — omit model rather than sending auto. Transcription takes no model parameter. In every case the model actually used is reported in the completed status response, so read it there rather than assuming.

An unrecognised model is rejected. Identifiers are matched exactly; registered aliases and provider-prefixed legacy forms are mapped to the canonical identifier. Anything else — a typo, a display name that is not also a registered alias, an identifier from another platform — returns 400 MODEL_NOT_FOUND before the job starts. The message lists near matches (Did you mean: …?) and tells you to call GET /v1/models?type=…. Only an omitted, blank or auto-alias model gets the default above. Speech additionally accepts eleven_v4_turbo (ElevenLabs V4 with turbo on). One exception: if the server cannot load the catalog to check the identifier (an outage), it runs the default instead of returning 400, so still compare the echoed model with what you sent. Creative Director and the Visual DNA character sheet apply the same check.

Video-to-video does not support auto-select. POST /api/v1/generate/video-from-video rejects an omitted or auto model with 400 MODEL_REQUIRED — the model types (restyle, subtitles, motion control) are too different for an automatic pick. An unrecognised identifier is passed through to the generation controller, which rejects it with its own error rather than MODEL_NOT_FOUND. Call GET /api/v1/models?type=video_to_video and pass an explicit identifier.

model must always be a string. Passing an array or object returns 400 INVALID_MODEL.