Skip to main content

API overview

The Corte API exposes the platform to your code: trigger Applications, run your Workflows with custom inputs, generate with any Corte model, and manage uploaded assets — from scripts, backends, or agents like Claude Code (see MCP).

Base URL: https://api.corte.so

:::tip Looking for endpoint-by-endpoint detail? This page is the tour. Every resource, parameter, and response shape lives in the API reference. :::

Authentication

Create a key in Settings → API (see API keys) and send it on every request:

Authorization: Bearer corte_sk_…

:::warning Keys act as you Generations, LLM steps, and workflow runs started with your key spend your credits, exactly as if you'd clicked Generate in the app. Watch your balance with GET /v1/usage, or in Settings → Usage. :::

Quick start

List the model catalog, start a generation, and poll it to completion:

# 1. What models exist, and what do they cost?
curl -s https://api.corte.so/v1/models?kind=video \
-H "Authorization: Bearer corte_sk_…"

# 2. Start a generation ({ model, params } — params match the model kind)
curl -s -X POST https://api.corte.so/v1/generations \
-H "Authorization: Bearer corte_sk_…" \
-H "content-type: application/json" \
-d '{
"model": "kling-3",
"params": { "prompt": "Slow dolly-in on a foggy ridgeline at dawn", "durationSeconds": 5, "aspectRatio": "16:9" }
}'

# 3. Poll until succeeded / failed — results land in resultUrls
curl -s https://api.corte.so/v1/generations/GEN_ID \
-H "Authorization: Bearer corte_sk_…"

POST /v1/generations returns the job and a credit estimate, so you can account for spend before the result lands. Cancel an in-flight job with POST /v1/generations/:id/cancel.

The surface at a glance

AreaEndpoints
Models & generationsGET /v1/models, POST /v1/generations, GET /v1/generations/:id, POST /v1/generations/:id/cancel
ApplicationsGET /v1/applications, POST /v1/applications/:id/run
WorkflowsGET /v1/workflows, GET /v1/workflows/:id, POST /v1/workflows/:id/execute, GET /v1/workflows/:id/runs/:runId
AssetsPOST /v1/uploads/import, POST /v1/uploads/ticket, POST /v1/uploads/:storageId/commit, GET /v1/storage/usage, DELETE /v1/storage/:id
Keys & accountPOST /v1/api-keys, GET /v1/api-keys, DELETE /v1/api-keys/:id, GET /v1/account, GET /v1/usage

Each area has a full reference page: Models, Generations, Applications, Workflows and runs, Files, Transcriptions, Projects, and Account & keys.

Applications are the same 43 curated experiences as in Studio: GET /v1/applications describes each one's input requirements (minImages/maxImages, inputKind, acceptsText) and presets, and POST /v1/applications/:id/run with { imageStorageIds?, videoStorageId?, audioStorageId?, text?, presetId? } returns a standard generation job you poll like any other.

For running pipelines with your own inputs, see Workflows via the API.

Errors

Every error has the same shape, with a conventional HTTP status:

{ "error": { "code": "insufficient_credits", "message": "…" } }
CodeStatusMeaning
unauthenticated401Missing or invalid API key.
insufficient_credits402Not enough credits for the estimated cost — top up or upgrade.
forbidden403The key's account can't access this resource.
not_found404Unknown id (or a resource owned by someone else).
invalid_params400The request body doesn't match the model/endpoint contract.
provider_unavailable503An upstream model provider is down — retry later.

The complete list, with handling guidance, is in Errors.

Good to know

  • Generation is asynchronous. Create, then poll GET /v1/generations/:id until succeeded or failed. There are no webhooks yet — poll politely.
  • Estimates up front. Creation responses include a credit estimate, so a 402 fires before any spend, not after.
  • Workflows run fully server-side. API-started runs behave identically to runs from the app — see Workflows via the API.