Developers · API v1

One API.
Every model.

Images, video, audio and 3D behind one API, paid from the same balance as the studio. Create a key in Settings; the CLI is coming soon.

coming soonThe Opencran CLI is on its way. This page previews how it will work; until then, use the API.

$npm i -g @opencran/cli
Models
682
Endpoints
9
Minimum top-up
€3
01 · Examples

Same call, any output

Swap the model ID to switch between image, video and speech. The fields follow the model.

1import { writeFile } from "node:fs/promises";2 3const API = "https://opencran.com/api/v1/api/catalog";4const auth = { Authorization: `Bearer ${process.env.OPENCRAN_API_KEY}` };5 6// 1. Generate an image7const res = await fetch(`${API}/generations`, {8  method: "POST",9  headers: { ...auth, "Content-Type": "application/json", "Idempotency-Key": crypto.randomUUID() },10  body: JSON.stringify({11    modelId: "luma/uni-v1/text-to-image",12    inputs: { prompt: "Neon city street after rain, cinematic night", size: "16:9" },13  }),14});15let { generation } = await res.json();16 17// 2. Wait for the result18while (generation.status === "queued" || generation.status === "generating") {19  await new Promise((r) => setTimeout(r, 3000));20  ({ generation } = await (await fetch(`${API}/generations/${generation.id}`, { headers: auth })).json());21}22 23// 3. Save the file24const file = await fetch(`${API}/generations/${generation.id}/content`, { headers: auth });25await writeFile("result.jpeg", Buffer.from(await file.arrayBuffer()));
Example renderluma/uni-v1/text-to-image
02 · Quickstart

First render in three steps

  1. 01Create an API keySign in with your email, open Settings, API keys and create a key. Top up from €3 in Billing.export OPENCRAN_API_KEY="oc_live_..."
  2. 02The CLI is coming sooncoming soonThe command-line tool is not published yet. Until it is, everything runs in the studio.
  3. 03Make your first renderPick a model ID from the catalog and send a prompt. Add --dry-run to see the price without spending anything.opencran run luma/uni-v1/text-to-image -p "violet neon fox" -o ./out/
03 · CLIcoming soon

Render from the terminal

Run any model from a shell, a CI job or a coding agent. Every render is priced before it starts and drawn from the same balance.

Scripts and CIEvery field of a model is a flag; a local file is uploaded for you.
JSON on stdoutOne JSON document per run, progress and errors on stderr, a non-zero exit on failure.
Coding agentsA skill file teaches your agent to check the price first and cap it.
Full CLI guide →
CommandWhat it does
opencran loginPaste your API key once; it is checked and saved
opencran whoamiThe key's name and your balance
opencran models --type videoEvery video model with its starting price
opencran run <model> -hA model's fields, fetched live: type, default, allowed values
opencran run <model> -p "<prompt>" -o ./out/Render and save the result in a folder
opencran run <model> -p "..." --dry-runThe exact price, without spending anything
opencran run <model> -p "..." --max-price 0.50Refuse to run if the price is higher
opencran run <model> -p "..." --json -o ./out/One JSON result, ready for the next step
opencran skill installTeach your coding agent to use the CLI
04 · API essentials

Built for production

Authentication

A Bearer token in the Authorization header. Create keys in Settings and revoke any of them at any time.

Authorization: Bearer oc_live_...

Background renders

Starting a render answers at once with status queued. Poll the render until it has succeeded, failed or been refunded.

{ "status": "queued" }

Price first

Ask for the exact price of your inputs without starting anything. Every amount is in euro cents.

POST /api/v1/api/catalog/quote

Safe retries

Send an Idempotency-Key header and a retried request never charges twice.

Idempotency-Key: render-042

Limits

Each key has a per-minute limit and an optional daily cap. Past the limit the API answers 429.

429 Too Many Requests

Errors and refunds

JSON errors with a code and a message. A render that fails is refunded to your balance automatically.

{ "status": "refunded" }
05 · Reference

Endpoints

Base URL https://opencran.com/api/v1

Full API reference →
GET/api/catalog/meYour key and balance
GET/api/catalog/modelsEvery model
GET/api/catalog/models/detail?id=MODEL_IDOne model and its fields
POST/api/catalog/quotePrice for exact inputs
POST/api/catalog/generationsStart a render
GET/api/catalog/generationsYour recent renders
GET/api/catalog/generations/IDOne render's status
GET/api/catalog/generations/ID/contentThe result file
DELETE/api/catalog/generations/IDDelete a render

Top up €3 and ship today

Create an API key in Settings and call any model. The CLI is coming soon. Failed renders are refunded.