Skip to main content

Models

A model is one generation engine, addressed by a stable slug like kling-3 or nano-banana-2. Every model declares two things you need before you can call it: capabilities (what parameter values it accepts) and pricing (what it costs in credits).

Read the catalog rather than hardcoding: models are enabled and disabled without a deploy, and capability lists change as providers ship new versions.

The model object

FieldTypeDescription
idstringStable slug. Pass this as model to POST /v1/generations.
kindenumvideo · image · audio · upscale. Must match params.kind.
displayNamestringHuman label, e.g. "Kling 3.0".
providerenumfal · mock. Informational.
providerModelIdstringThe upstream provider's own identifier. Informational.
paidOnlybooleantrue means the paying account must have bought something — a top-up or a plan; accounts that never have get plan_required (402).
enabledbooleanAlways true in responses — disabled models are filtered out.
pricingobjectSee Pricing.
capabilitiesobjectShape depends on kind. See Capabilities.

Pricing

Only the keys relevant to a model's billing basis are present.

FieldTypeDescription
creditsPerSecondmapCredits per output second, keyed by resolution. "*" is the fallback for every resolution.
creditsPerImagemapCredits per image, keyed by "resolution|quality", quality, resolution, or "*".
creditsPerRunnumberFlat credits per job.
creditsPerThousandCharsnumberCredits per 1,000 characters of input text (TTS).

100 credits = $1. To estimate a video job: creditsPerSecond["*"] × duration. You don't have to — POST /v1/generations returns estimatedCredits, and that's the number checked against your balance.

Capabilities

Capabilities are enforced server-side. Sending a value outside a declared list returns invalid_params (400) with the valid values in the message, before anything is charged.

kind: "video"

FieldTypeDescription
durationsnumber[]Allowed values for params.duration, in seconds.
resolutionsstring[]Allowed params.resolution, e.g. ["720p", "1080p"]. Optional.
aspectRatiosstring[]Allowed params.aspectRatio, listed widest to tallest.
supportsFirstFramebooleanAccepts startFrameStorageId.
supportsLastFramebooleanAccepts endFrameStorageId.
supportsAudioTogglebooleanHonours generateAudio: false — returns a video-only file.
maxReferenceImagesnumberCap on referenceImageStorageIds. 0 means unsupported.
maxReferenceVideosnumberCap on referenceVideoStorageIds.
maxReferenceAudiosnumberCap on referenceAudioStorageIds.
requiresSourceVideobooleansourceVideoStorageId is mandatory (video-to-video, reframe, lip sync).
requiresReferenceImagebooleanNeeds startFrameStorageId or at least one referenceImageStorageIds.

kind: "image"

FieldTypeDescription
aspectRatiosstring[]Allowed params.aspectRatio.
resolutionsstring[]Allowed params.resolution. Optional.
qualitiesstring[]Allowed params.quality. Optional.
supportsImageReferencebooleanAccepts referenceStorageIds.
maxImagesnumberUpper bound on params.numImages.

kind: "audio"

FieldTypeDescription
categoryenumtts · music · sfx · cleanup · dubbing. Determines which params apply.
voicesstring[]Allowed params.voice for tts. Optional.
defaultVoicestringUsed when voice is omitted. Optional.
supportsLyricsbooleanAccepts params.lyrics.
supportsInstrumentalbooleanAccepts params.instrumental.
supportsStyleInstructionsbooleanAccepts params.styleInstructions.
minSeconds / maxSecondsnumberBounds on params.durationSeconds. Optional.
targetLanguagesstring[]Allowed params.targetLanguage for dubbing. Optional.

kind: "upscale"

FieldTypeDescription
supportedTypesstring[]Which inputs the upscaler accepts: "video", "image", or both.

GET /v1/models

List the models enabled for the account.

Query parameters

NameTypeDefaultDescription
kindstringFilter by kind: video, image, audio, or upscale — the same values as the model object's kind field. Any other value returns invalid_params (400).
limitnumberunsetPage size, 1500. Omit for the full catalog (pickers render everything).
offsetnumber0Only meaningful with limit.

Returns { "models": Model[], "total": number }total counts every model matching the filter, not the page.

Request
curl -s "https://api.corte.so/v1/models?kind=video" \
-H "Authorization: Bearer corte_sk_…"
Response
{
"models": [
{
"id": "kling-3",
"kind": "video",
"displayName": "Kling 3.0",
"provider": "fal",
"providerModelId": "fal-ai/kling-video/v3/standard/text-to-video",
"paidOnly": false,
"enabled": true,
"pricing": {
"creditsPerSecond": { "*": 17 }
},
"capabilities": {
"kind": "video",
"durations": [3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15],
"resolutions": ["720p", "1080p"],
"aspectRatios": ["16:9", "9:16", "1:1"],
"supportsFirstFrame": true,
"supportsLastFrame": false,
"maxReferenceImages": 0,
"maxReferenceVideos": 0,
"maxReferenceAudios": 0,
"requiresSourceVideo": false,
"requiresReferenceImage": false
}
}
],
"total": 16
}

An image model, for contrast:

{
"id": "nano-banana-2",
"kind": "image",
"displayName": "Nano Banana 2",
"provider": "fal",
"providerModelId": "fal-ai/nano-banana-2",
"paidOnly": false,
"enabled": true,
"pricing": { "creditsPerImage": { "*": 12 } },
"capabilities": {
"kind": "image",
"aspectRatios": ["21:9", "16:9", "3:2", "4:3", "5:4", "1:1", "4:5", "3:4", "2:3", "9:16"],
"supportsImageReference": true,
"maxImages": 4
}
}

:::note Pricing in examples The credit numbers above are illustrative. Real pricing is derived from live provider rates and moves when providers reprice — always read it from the catalog rather than copying it into your code. :::

Picking a model

Nothing in the API designates a default, and catalog order is storage order, not a ranking. Choose deliberately:

  • Filter by kind for the medium you want.
  • Filter out paidOnly: true if the paying account may be on Free.
  • Check the capability you actually needrequiresSourceVideo for video-to-video, supportsImageReference for image-conditioned generation, maxReferenceImages > 0 for multi-reference work.
  • Prefer 16:9 when the model offers it. aspectRatios[0] is a display accident — several models lead with 21:9, and taking the first entry silently opens them on ultrawide.

If you'd rather not choose at all, Applications bundle a model, a tuned prompt, and input requirements into a single id.