Doro API Sign in
Doro API

API documentation

The Doro API generates images and videos with the same engines as the site. You send the request, follow its progress and download the result. Every response is JSON.

Create a key

PTENESITFRNO

Authentication

Create a key in your account and send it on every call, in the Authorization: Bearer header. The key is shown only once; keep it like a password and never put it in code that runs in a browser. Once revoked, it stops immediately.

curl https://dorovisual.com/v1/saldo \
  -H "Authorization: Bearer doro_xxxxxxxxxxxx_..."

Billing

Prepaid balance only, in US dollars only: you top up in USD (minimum US$ 10) and each generation deducts its price. No monthly fee, and the balance never expires.

Credits from the site's plans don't pay for the API. Even subscribers use the dollar balance here.

The amount is reserved when the generation is created. If it fails, is rejected or cancelled, the full amount goes back to your balance. Without enough balance, the response is 402 and nothing is created or charged.

Prices

You pay for the real unit of usage: per second of video and per image, by resolution. Use /v1/estimativa to get the exact price before generating.

Video

EnginemotorResolutionPrice (USD)
Seedance 2.0seedance_2_0720p US$ 0.92 per second
Omni Flash 1.1omni_flash_1_1720p US$ 0.36 per second
Omni Flash 1.1omni_flash_1_11080p US$ 0.51 per second
Hailuo 3hailuo_h3768P US$ 0.27 per second
Hailuo 3hailuo_h32K US$ 0.43 per second
Hailuo 3 Maxhailuo_h3_max480P US$ 0.19 per second
Hailuo 3 Maxhailuo_h3_max768P US$ 0.27 per second
Kling 2.5 Turbokling_2_5— US$ 0.23 per second
Kling 3.0kling_3_0— US$ 0.53 per second
Kling 3.0 Omnikling_3_0_omni— US$ 0.43 per second
Grok Imagine 1.5grok_imagine_1_5480p US$ 0.27 per second
Grok Imagine 1.5grok_imagine_1_5720p US$ 0.45 per second
Grok Imagine 1.5grok_imagine_1_51080p US$ 0.77 per second
FLUX 3 Videoflux_3_video720p US$ 0.53 per second
FLUX 3 Videoflux_3_video1080p US$ 0.89 per second
FLUX 3 Video Draftflux_3_video_draft— US$ 0.19 per second
Wan 3.0wan_3_0480p US$ 0.17 per second
Wan 3.0wan_3_0720p US$ 0.31 per second
Wan 3.0wan_3_01080p US$ 0.61 per second
Seedance 2.5seedance_2_5480p US$ 0.69 per second
Seedance 2.5seedance_2_5720p US$ 1.43 per second
Seedance 2.5seedance_2_51080p US$ 3.51 per second

Image

EnginemotorResolutionPrice (USD)
Nano Banana Pronano_banana_pro1K US$ 0.45 per image
Nano Banana Pronano_banana_pro2K US$ 0.45 per image
Nano Banana Pronano_banana_pro4K US$ 0.90 per image
GPT Image 2.5 Sunburstgpt_image_2_5_sunburst— US$ 0.71 per image
GPT Image 2.5 Flaregpt_image_2_5_flare— US$ 0.71 per image
Nano Banana 2nano_banana_21K US$ 0.31 per image
Nano Banana 2nano_banana_22K US$ 0.41 per image
Nano Banana 2nano_banana_24K US$ 0.51 per image
Muse Imagemuse_image— US$ 0.11 per image
Seedream 5.0 Proseedream_5_pro1.5K US$ 0.31 per image
Seedream 5.0 Proseedream_5_pro2K US$ 0.51 per image
Seedream 5.0 Liteseedream_5_lite— US$ 0.21 per image
FLUX 3flux_31K US$ 0.31 per image
FLUX 3flux_32K US$ 0.81 per image
Recraft V4recraft_v4— US$ 0.21 per image
Recraft V4 Prorecraft_v4_pro— US$ 0.81 per image

Endpoints

Base: this site's address. Money amounts are whole US cents.

GET/v1/motores

Lists the engines, accepted parameters (values and defaults), accepted references and the price per unit in dollars. Filter with ?tipo=imagem or ?tipo=video.

curl https://dorovisual.com/v1/motores -H "Authorization: Bearer $DORO_KEY"

POST/v1/estimativa

Tells you what a generation costs in dollars, without creating anything.

curl https://dorovisual.com/v1/estimativa -H "Authorization: Bearer $DORO_KEY" \
  -H "Content-Type: application/json" \
  -d '{"motor": "seedance_2_0", "params": {"duracao": 5, "resolucao": "720p"}}'

POST/v1/geracoes

Creates a generation and returns 201 with it in "criando". Fields: motor, prompt, params (optional; missing ones use the default) and webhook_url (optional). It is always charged to the dollar balance.

curl https://dorovisual.com/v1/geracoes -H "Authorization: Bearer $DORO_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: pedido-123" \
  -d '{"motor": "nano_banana_pro", "prompt": "a red fox in the snow, golden hour",
       "params": {"resolucao": "2K", "proporcao": "16:9", "quantidade": 1},
       "webhook_url": "https://example.com/doro/aviso"}'

With reference images, send multipart/form-data: the same fields as text (params as JSON) and each image in the referencias field (PNG, JPEG or WebP, up to 10 MB each).

curl https://dorovisual.com/v1/geracoes -H "Authorization: Bearer $DORO_KEY" \
  -F motor=seedance_2_0 -F prompt="the fox starts to run" \
  -F 'params={"duracao": 5}' -F [email protected]
{"geracao": {"id": "3f1c…", "motor": "Seedance 2.0", "tipo": "video", "estado": "criando",
  "cobranca": "saldo", "valor": {"moeda": "USD", "centavos": 460}, "arquivos": [],
  "estornado": false, "criado_em": "2026-10-06T12:00:00+00:00", "pronto_em": null}}

GET/v1/geracoes/<id>

The generation status: criando, pronta, falhou or cancelada. When ready, "arquivos" lists the address of each file. "estornado": true when the amount has been refunded.

curl https://dorovisual.com/v1/geracoes/3f1c… -H "Authorization: Bearer $DORO_KEY"

GET/v1/geracoes/<id>/arquivos/<n>

Redirects (302) to a temporary download link for the file. Use -L in curl to follow it.

curl -L -o resultado.mp4 https://dorovisual.com/v1/geracoes/3f1c…/arquivos/0 \
  -H "Authorization: Bearer $DORO_KEY"

POST/v1/geracoes/<id>/cancelar

Cancels while the generation hasn't started and refunds the amount. After that, 409 nao_cancelavel.

GET/v1/geracoes?pagina=1

Your account's generations through the API, newest first, 50 per page.

GET/v1/saldo

Your dollar balance, in cents.

{"saldo": {"USD": 2000}}

Retry without paying twice

Send the Idempotency-Key header (letters, digits, . _ : -, up to 128) on POST /v1/geracoes. Repeating the same key returns the same generation without charging again: safe to retry after a network error.

Completion notice (webhook)

With webhook_url (https, port 443, public address), Doro sends a JSON POST when the generation finishes: {"evento": "geracao.terminada", "geracao": {...}}, the same body as the status call. 2xx responses count as delivered; up to 3 attempts. Redirects are not followed.

Doro-Signature: t=1760000000,v1=5f2b…

# Python
import hmac, hashlib
t, v1 = (p.split("=", 1)[1] for p in header.split(","))
esperado = hmac.new(segredo.encode(), f"{t}.".encode() + corpo, hashlib.sha256).hexdigest()
assert hmac.compare_digest(esperado, v1)

Check the Doro-Signature header: HMAC-SHA256 of your account secret (in the keys area) over "<t>.<body>". Reject notices with a t that is too old.

Limits

Per key: 3 generations in progress at once and 60 per hour; per account: 6 in progress and 120 per hour; and 120 calls per minute per key. Above that, 429 with the Retry-After header.

Errors

Every error is JSON: {"erro": "<code>"}, with "campo" on 400. The code text never changes; use it in your handling.

HTTPerro
400parametroA field is outside what is accepted (its name comes in "campo").
401chave_invalidaKey missing, wrong or revoked.
402sem_saldoYour dollar balance doesn't cover the generation. Nothing was created.
404nao_encontradaIt doesn't exist, or it isn't from your account.
409nao_cancelavelThe generation has already started and can no longer be cancelled.
429limiteLimit reached ("motivo" says which). Wait for Retry-After.
503indisponivelThe engine is unavailable right now. Nothing was charged; try again.
500internoOur error. The "codigo" helps support find the case.