One POST starts the work. The call is asynchronous: it returns a generation id immediately and the provider keeps rendering in the background, so nothing hangs on a long video job.
curl -X POST https://ellisekiz.ai/api/v1/generations \
-H "Authorization: Bearer $ELLISEKIZ_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"model": "flux-schnell",
"prompt": "a lighthouse at dawn, oil painting"
}'| Field | Type | Description |
|---|---|---|
model | string · required | A canonical id from the catalog, for example flux-schnell. |
prompt | string · required | What to generate. Trimmed and stored with the generation; the first 2,000 characters are kept for your history. |
provider | string · optional | Pin the provider: fal, replicate, atlascloud or openrouter. Omit it and your routing policy decides. |
params | object · optional | Per-model inputs — size, steps, duration, reference images. Unknown keys are dropped rather than forwarded. |
Every model declares its own inputs. An image model takes size and step count; an image-to-image or video model takes source media as URLs. Send them under params:
{
"model": "wan-2.6-i2i",
"prompt": "repaint in watercolour, soft light",
"params": {
"image": "https://example.com/source.jpg",
"resolution": "1024x1024",
"num_inference_steps": 28
}
}The exact fields for a model are listed on its page under the API tab, next to a playground that builds the same request interactively. Values are filtered before they reach the provider: strings, numbers, booleans and short arrays of URLs pass through, up to eighteen keys.
model, prompt, input and text are ignored inside params — the prompt belongs at the top level.{
"id": "gen_01j...",
"status": "pending",
"provider": "fal",
"provider_model_id": "fal-ai/flux/schnell",
"kind": "image",
"credits": 3000,
"used_own_key": false,
"poll": "/api/v1/generations/gen_01j..."
}| Field | Type | Description |
|---|---|---|
id | string | Pass this to the poll endpoint. It is also the id shown in your request history. |
provider | string | Where the router actually sent it — worth logging when you let the router choose. |
credits | integer | What this generation will cost in micro-dollars, reserved against your balance and charged on completion. |
used_own_key | boolean | True when your stored provider key paid for it, in which case your ElliSekiz balance is untouched. |
poll | string | The relative URL to poll. Prefer it over building the path yourself. |
| Field | Type | Description |
|---|---|---|
400 | Bad request | model or prompt missing, or no provider serves that model for your policy. |
401 | Unauthorized | Invalid or missing API token. |
402 | Payment required | Balance below the generation cost; the message states what is needed and what you have. |
502 | Bad gateway | The upstream provider rejected the submission. Nothing is charged; retry, or pin a different provider. |