Kolbo.AIKolbo.AI Docs
Developer API

Models & Pricing

Discover available AI models and their credit costs.

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

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). 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 provider field (e.g. fal, kie, elevenlabs). Read the provider value off a /models response rather than guessing — 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, so this endpoint only ever lists models you can actually generate with.

Example

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

# All text-to-video models from a specific provider
curl "https://api.kolbo.ai/api/v1/models?type=text_to_video&provider=fal" \
  -H "X-API-Key: kolbo_live_..."

Response

{
  "success": true,
  "models": [
    {
      "identifier": "nano-banana-2",
      "name": "Nano Banana 2 1K",
      "provider": "fal",
      "types": ["text_to_img"],
      "credit": 8,
      "supported_aspect_ratios": ["1:1", "16:9", "9:16", "4:3", "3:4"],
      "supported_aspect_ratios_by_type": {},
      "default_aspect_ratio": "1:1",
      "supported_resolutions": ["1K", "2K", "4K"],
      "resolution_multipliers": { "1K": 1.0, "2K": 1.5, "4K": 2.0 },
      "supported_qualities": [],
      "quality_multipliers": {},
      "default_quality": null,
      "flat_credit_by_resolution": {},
      "supported_durations": null,
      "max_reference_images": 8,
      "max_visual_dna": 8,
      "supports_visual_dna": true,
      "supports_first_last_frame": false,
      "requires_prompt": true,
      "min_prompt_length": 1,
      "max_prompt_length": 2000,
      "max_file_size": null,
      "estimated_duration_seconds": 24,
      "nsfw_only": false,
      "requires_nsfw_consent": false,
      "recommended": true,
      "new_model": false,
      "avatar": "nano-banana-2.png",
      "summary": "Fast, high-fidelity image model with strong reference adherence."
    }
  ],
  "count": 42
}

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 four map-valued fields — resolution_multipliers, quality_multipliers, flat_credit_by_resolution and supported_aspect_ratios_by_type — default to {} on the model document but are serialised through an || null fallback. You will normally see {}, and null only when the field is absent from the stored document. 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.
nameHuman-readable display name. Not accepted as a model value — always send identifier.
providerUpstream provider slug. This is also the value the provider query filter matches.
typesArray of DB type names this model is catalogued under (a model can be multimodal, e.g. both text_to_img and image_editing).
avatarIcon reference as stored — a bare filename or an absolute URL. Resolve bare filenames against https://api.kolbo.ai/assets/.
creditBase cost. 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. Those rates are not returned by this endpoint — read credits_used off the finished message instead.
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.
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).
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. GPT Image 2 uses ["low","medium","high","auto"]. Empty array ([]) = no quality tier; omit quality for those models.
quality_multipliersPer-quality cost multiplier on credit, stacked on top of resolution_multipliers. {} = 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. {} = 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 (default 1; e.g. Midjourney returns 4).
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).
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_audioCap on the corresponding inputs for elements models.
max_visual_dnaCap on visual_dna_ids.
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-video duration range for lipsync-video and video_to_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.
use_character_reference / supports_first_last_frame / supports_custom_loraCapability gates.

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_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

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. Those rates are not exposed by GET /api/v1/models, so the only 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 the universal currency for all generations. 1 credit = $0.01.

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. 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: [] 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, kolbo_smart_select_router (matching is case-insensitive and trimmed) — 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 rather than being routed, and 3D falls back to its controller's own built-in default. In all of those cases the model actually used is reported in the completed status response, so read it there rather than assuming.

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