Vindo do fal, do Replicateou do WaveSpeed
Como levar as chamadas ao Seedance 2.0 e ao Qwen-Image para o /v1: autenticação, IDs de modelo, todos os campos, tarefas assíncronas e webhooks, e o que não se transfere.
Não é só trocar a URL base
Em nenhuma das três basta trocar a URL base e a chave. Toda requisição também muda nestes pontos:
- A chave:
Authorization: Bearercom uma chave que começa comsk_test_ousk_live_. - O ID do modelo vai no corpo como
model, e um só ID cobre texto, um primeiro quadro e referências. - Um cabeçalho
Idempotency-Keyem toda requisição de geração. - Um limite de preço:
max_creditsou umquote_iddePOST /v1/quotes. - O resultado é uma tarefa: consulte
GET /v1/jobs/{id}ou receba nosso webhook assinado.
- fal
- O mais parecido com o nosso: a maioria dos nomes de campo do Seedance vem do fal. Também renomeie
image_urlsparareference_image_urls, enviedurationcomo número e movafal_webhookpara o corpo comowebhook_url. - Replicate
- Tire os campos de dentro de
input. Também renomeieimageparaimage_url,reference_imagesparareference_image_urlsewebhookparawebhook_url. - WaveSpeed
- Também renomeie
imageparaimage_urlereference_imagesparareference_image_urls, e movastandard_webhookpara o corpo comowebhook_url. Leia os resultados emGET /v1/jobs/{id}.
Autenticação
Para onde vão as requisições e como são assinadas.
| Plataforma | URL base | Cabeçalho de autenticação |
|---|---|---|
| Pershot | https://api.pershot.app/v1 | Authorization: Bearer $API_KEY |
| fal | https://queue.fal.run | Authorization: Key $FAL_KEY |
| Replicate | https://api.replicate.com/v1 | Authorization: Bearer $REPLICATE_API_TOKEN |
| WaveSpeed | https://api.wavespeed.ai/api/v3 | Authorization: Bearer $WAVESPEED_API_KEY |
O acesso à API para desenvolvedores é por solicitação: peça no estúdio, em Chaves de API. A chave é exibida uma única vez. Uma chave de desenvolvedor usa o saldo da API para desenvolvedores, e a mesma chave funciona como cabeçalho Bearer no servidor MCP.
IDs de modelo
Os deles vão na URL; o nosso vai no corpo como model. Um dos nossos IDs cobre texto, um primeiro quadro e referências: os campos que você envia decidem.
| Nosso | fal | Replicate | WaveSpeed | Observações |
|---|---|---|---|---|
seedance-2.0-fast | bytedance/seedance-2.0/fast/text-to-videobytedance/seedance-2.0/fast/image-to-videobytedance/seedance-2.0/fast/reference-to-video | bytedance/seedance-2.0-fast | bytedance/seedance-2.0-fast/text-to-videobytedance/seedance-2.0-fast/image-to-video | Um ID para texto, um primeiro quadro e imagens de referência. |
seedance-2.0-mini | bytedance/seedance-2.0/mini/text-to-videobytedance/seedance-2.0/mini/image-to-videobytedance/seedance-2.0/mini/reference-to-video | bytedance/seedance-2.0-mini | bytedance/seedance-2.0-mini/text-to-video | Um ID para texto, um primeiro quadro e imagens de referência. |
qwen-image-2512 | fal-ai/qwen-image-2512 | qwen/qwen-image-2512 | wavespeed-ai/qwen-image/text-to-image-2512 | Os mesmos pesos abertos. |
qwen-image-2512-lightning | fal-ai/qwen-image-2512/lora | nenhum | nenhum | Nosso nível Lightning de 4 passos. O fal o executa como LoRA no endpoint /lora dele; não encontramos um modelo Lightning pronto no Replicate nem no WaveSpeed. |
qwen-image-edit-2511 | fal-ai/qwen-image-edit-2511 | qwen/qwen-image-edit-2511 | wavespeed-ai/qwen-image/edit-2511 | Os mesmos pesos abertos. |
qwen-image-edit-2511-lightning | fal-ai/qwen-image-edit-2511/lora | nenhum | nenhum | Nosso nível Lightning de 4 passos. O fal o executa como LoRA no endpoint /lora dele; não encontramos um modelo Lightning pronto no Replicate nem no WaveSpeed. |
- Para agentes de IA
- Texto simples para agentes de IA: entradas, valores aceitos, cada preço e um exemplo de requisição
seedance-2.0-fastseedance-2.0-miniqwen-image-2512-lightningqwen-image-2512qwen-image-edit-2511-lightningqwen-image-edit-2511
Seedance 2.0, campo a campo
Nossos nomes seguem os do fal quando o fal tem o campo, e as observações dizem onde diferem. Os campos ficam no nível superior do corpo JSON; o Replicate os coloca dentro de input.
| Nosso | fal | Replicate | WaveSpeed | Observações |
|---|---|---|---|---|
model | na URL | na URL | na URL | Um ID no corpo para texto, um primeiro quadro e referências. O deles fica na URL. |
prompt | prompt | prompt | prompt | O texto continua o mesmo. |
duration | duration | duration | duration | Um número inteiro, de 4 a 15, padrão 5. O fal envia uma string e oferece auto; o Replicate usa -1 para automático. Aqui não há duração automática. |
resolution | resolution | resolution | resolution | 480p ou 720p, padrão 720p. O WaveSpeed também lista 1080p e 4k; aqui, resoluções maiores são a etapa separada enhance. |
aspect_ratio | aspect_ratio | aspect_ratio | aspect_ratio | 16:9, 9:16 ou 1:1, padrão 16:9. Sem auto, adaptive, 4:3, 3:4 ou 21:9. |
generate_audio | generate_audio | generate_audio | generate_audio | Mesmo significado, ativado por padrão. O preço é o mesmo com o áudio ativado ou desativado. |
image_url | image_url | image | image | O primeiro quadro. Mesmo nome do fal; o Replicate e o WaveSpeed o chamam de image. Não junto com imagens de referência. |
reference_image_urls | image_urls | reference_images | reference_images | Até 9 imagens, @image1, @image2 no prompt. Difere do fal, que o chama de image_urls. |
seed | nenhum | seed | nenhum | Aceita e não usada: o Seedance 2.0 não usa semente. O fal e o WaveSpeed não listam nenhuma. |
quote_id | nenhum | nenhum | nenhum | Novo: envie exatamente um entre quote_id e max_credits. Uma tarefa nunca custa mais. |
max_credits | nenhum | nenhum | nenhum | Novo: envie exatamente um entre quote_id e max_credits. Uma tarefa nunca custa mais. |
webhook_url | fal_webhookna query string | webhook | standard_webhookna query string | No corpo. Difere do fal, que recebe fal_webhook na query string. |
end_user_id | end_user_id | nenhum | nenhum | O mesmo nome do fal. Para contas de desenvolvedor aprovadas (o acesso é por solicitação): o seu próprio ID de usuário, exibido nos dados de uso. |
project_id | nenhum | nenhum | nenhum | Só nosso, opcional: projetos e roteamento de fornecedor. |
shot_id | nenhum | nenhum | nenhum | Só nosso, opcional: projetos e roteamento de fornecedor. |
routing_preference | nenhum | nenhum | nenhum | Só nosso, opcional: projetos e roteamento de fornecedor. |
enhance | nenhum | nenhum | nenhum | Só nosso, opcional: um aumento de resolução por IA depois da geração, com o selo AI Enhanced. |
Idempotency-Keycabeçalho | nenhum | nenhum | nenhum | Novo e obrigatório: a mesma chave dentro de 24 horas retorna a mesma tarefa. |
Campos do Seedance deles sem equivalente aqui. Enviados como estão, são recusados como campos desconhecidos (400 invalid_request).
- fal
end_image_urlvideo_urlsaudio_urlsbitrate_modecodec- Replicate
last_frame_imagereference_videosreference_audios- WaveSpeed
last_imagereference_videosreference_audiosenable_web_search
Qwen-Image, campo a campo
Nosso corpo de imagem é menor que o deles: um tamanho e uma proporção em vez de pixels livres, uma imagem por tarefa e nenhuma configuração de sampler.
| Nosso | fal | Replicate | WaveSpeed | Observações |
|---|---|---|---|---|
model | na URL | na URL | na URL | Quatro IDs no corpo: Image Mini e Image Fast, cada um para gerar e para editar. |
prompt | prompt | prompt | prompt | O texto continua o mesmo. |
size | image_size | nenhum | size | 1K ou 2K, padrão 1K. Junto com a proporção, define um tamanho fixo, de no máximo 2048 px por lado. Sem largura e altura livres. |
aspect_ratio | image_size | aspect_ratio | size | 16:9, 9:16 ou 1:1, padrão 1:1. Não altera o preço. |
image_url | image_urls | image | images | Só nos modelos de edição: exatamente uma imagem de origem, como URL. Os deles recebem uma lista. |
seed | seed | seed | seed | Mesmo significado. |
quote_id | nenhum | nenhum | nenhum | Novo: envie exatamente um entre quote_id e max_credits. Uma tarefa nunca custa mais. |
max_credits | nenhum | nenhum | nenhum | Novo: envie exatamente um entre quote_id e max_credits. Uma tarefa nunca custa mais. |
webhook_url | fal_webhookna query string | webhook | standard_webhookna query string | No corpo. Difere do fal, que recebe fal_webhook na query string. |
end_user_id | nenhum | nenhum | nenhum | Só nosso, opcional, para contas de desenvolvedor aprovadas (o acesso é por solicitação): o seu próprio ID de usuário, exibido nos dados de uso. |
project_id | nenhum | nenhum | nenhum | Só nosso, opcional: projetos e roteamento de fornecedor. |
shot_id | nenhum | nenhum | nenhum | Só nosso, opcional: projetos e roteamento de fornecedor. |
routing_preference | nenhum | nenhum | nenhum | Só nosso, opcional: projetos e roteamento de fornecedor. |
Idempotency-Keycabeçalho | nenhum | nenhum | nenhum | Novo e obrigatório: a mesma chave dentro de 24 horas retorna a mesma tarefa. |
Campos do Qwen-Image deles sem equivalente aqui. Enviados como estão, são recusados como campos desconhecidos (400 invalid_request).
- fal
negative_promptnum_inference_stepsguidance_scalenum_imagesoutput_formataccelerationenable_safety_checkersync_modeloras- Replicate
negative_promptstrengthwidthheightguidancenum_inference_stepsgo_fastoutput_formatoutput_qualitydisable_safety_checkerlora_weightslora_scale- WaveSpeed
widthheightoutput_formatenable_base64_outputenable_sync_mode
Tarefas assíncronas e webhooks
As quatro executam tarefas em segundo plano. Como cada uma chama as etapas:
| Etapa | Pershot | fal | Replicate | WaveSpeed |
|---|---|---|---|---|
| Criar | POST /v1/videos/generationsPOST /v1/images/generations202 → { id: "job_…" } | POST https://queue.fal.run/<endpoint id>→ request_id, status_url, response_url | POST /v1/models/{owner}/{name}/predictions{ "input": { … } } | POST /api/v3/<model id>→ data.id |
| Consultar | GET /v1/jobs/{id} | GET status_urlGET response_url | GET /v1/predictions/{id} | GET /api/v3/predictions/{id}/result |
| Status | queuedprocessingsucceededfailedcancelledunknown | IN_QUEUEIN_PROGRESSCOMPLETED | startingprocessingsucceededfailedcanceled | createdcompletedfailedcancelledtimeoutdeleted |
| Webhook | webhook_url (body) | ?fal_webhook=… | webhook (body)webhook_events_filter | ?standard_webhook=…?webhook=… (legacy) |
| Assinatura | X-Signature: t=…,v1=…HMAC-SHA256, whsec_…X-Event-Id | X-Fal-Webhook-SignatureED25519, JWKS | webhook-idwebhook-timestampwebhook-signature | webhook-idwebhook-timestampwebhook-signature |
| Novas tentativas de entrega | Após 1 min, 5 min, 30 min, 2 h e 6 h. Um 2xx em até 10 segundos conta como entregue. | Até 31 novas tentativas, enquanto o resultado armazenado não expirar. | Pode repetir: trate entregas duplicadas. | Até 3 novas tentativas. |
| Arquivos de saída | Links assinados válidos por 24 horas; consulte a tarefa de novo para obter um novo. Os arquivos são mantidos por 12 meses. | Seguem suas configurações de expiração de mídia. | Removidos após uma hora nas predictions criadas pela API. | Mantidos por até 7 dias. |
| Esperar em uma chamada | Não há: toda tarefa é assíncrona. Via MCP, wait_for_job espera até 60 segundos. | POST https://fal.run/<endpoint id> | Prefer: wait=n | enable_sync_mode |
O corpo do nosso webhook é a própria tarefa, e a assinatura é nossa: um código que verifica os webhooks deles vai recusar os nossos. Como verificar os nossos
Idempotência
Toda requisição de geração exige um cabeçalho Idempotency-Key, de 1 a 255 caracteres ASCII visíveis. A mesma chave dentro de 24 horas retorna a mesma tarefa com HTTP 200, então uma nova tentativa após um timeout nunca cria nem cobra uma segunda tarefa.
Nenhuma das três documenta uma chave de idempotência para criar uma tarefa (em 2026-10-22): o fal sugere eliminar webhooks duplicados pelo request_id, e o WaveSpeed pede que você envie uma vez e procure a tarefa antes de reenviar. Dê uma chave a cada tarefa e reutilize-a em toda nova tentativa.
O que não é compatível
Enviados como estão, estes itens falham ou são recusados aqui:
- As bibliotecas de cliente deles (fal_client, replicate, wavespeed) não chamam o /v1. Use HTTP puro, o documento OpenAPI ou o servidor MCP.
- Os formatos de resposta deles: aqui uma tarefa é um Job com
outputs[].url, não um resultado do fal, uma prediction do Replicate nem um wrapperdatado WaveSpeed. - Últimos quadros: fal
end_image_url, Replicatelast_frame_image, WaveSpeedlast_image. - Vídeos e áudios de referência: fal
video_urlseaudio_urls, Replicate e WaveSpeedreference_videosereference_audios. - Duração ou proporção automática, as proporções 4:3, 3:4 e 21:9 e gerações em 1080p ou 4K. Aqui, resoluções maiores são uma etapa separada,
enhance, com o selo AI Enhanced. - Um primeiro quadro junto com imagens de referência. O Replicate também recusa isso.
- Esperar o resultado em uma chamada (fal.run,
Prefer: waitdo Replicate,enable_sync_modedo WaveSpeed): aqui toda tarefa é assíncrona. - Várias imagens por tarefa, saída em PNG ou WebP, largura e altura livres, várias imagens de origem em uma edição, LoRAs e configurações de sampler.
- A verificação de webhook deles: nossas entregas trazem
X-Signature, um HMAC-SHA256 com o seu segredo whsec_, e não a assinatura ED25519 do fal nem o cabeçalhowebhook-signature. - Pagar depois do uso: os créditos são pré-pagos, toda tarefa tem um limite, e uma tarefa acima de
max_creditsé recusada, não cobrada. - Links de resultado duradouros: os nossos valem por 24 horas. Consulte a tarefa de novo para obter um novo.
Antes e depois
A mesma requisição ao Seedance 2.0 Fast com um primeiro quadro, como cada plataforma a documenta, e depois no /v1. O limite de preço vem do nosso motor de preços.
curl -X POST https://queue.fal.run/bytedance/seedance-2.0/fast/image-to-video \
-H "Authorization: Key $FAL_KEY" \
-H "Content-Type: application/json" \
-d '{
"prompt": "Slow dolly-in on a ceramic mug on a wooden table, morning window light",
"image_url": "https://example.com/first-frame.jpg",
"duration": "5",
"resolution": "720p",
"aspect_ratio": "16:9",
"generate_audio": true
}'curl https://api.pershot.app/v1/videos/generations \
-H "Authorization: Bearer $API_KEY" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" \
-d '{
"model": "seedance-2.0-fast",
"prompt": "Slow dolly-in on a ceramic mug on a wooden table, morning window light",
"image_url": "https://example.com/first-frame.jpg",
"duration": 5,
"resolution": "720p",
"aspect_ratio": "16:9",
"generate_audio": true,
"max_credits": 34
}'Os preços são nossos
Toda tarefa aqui é cotada em créditos antes de rodar (US$ 1 = 100 créditos) e nunca custa mais que a cotação ou o max_credits.
O que o fal, o Replicate e o WaveSpeed cobram está nas páginas deles. Nossas páginas de comparação listam os preços do Seedance 2.0 publicados por eles, cada um com a data em que foi consultado.
| Modelo | 480p, por segundo | 720p, por segundo |
|---|---|---|
Seedance 2.0 Fastseedance-2.0-fast | US$ 0,031 | US$ 0,067 |
Seedance 2.0 Miniseedance-2.0-mini | US$ 0,020 | US$ 0,042 |
| Modelo | 1K, por imagem | 2K, por imagem |
|---|---|---|
Qwen-Image-2512 · Lightning 4-stepqwen-image-2512-lightning | 1 cr | 3 cr |
Qwen-Image-2512qwen-image-2512 | 2 cr | 6 cr |
Qwen-Image-Edit-2511 · Lightningqwen-image-edit-2511-lightning | 2 cr | 4 cr |
Qwen-Image-Edit-2511qwen-image-edit-2511 | 3 cr | 10 cr |
Fontes
Os nomes de campo e o comportamento deles conforme as páginas públicas mostravam em 2026-10-22. Confira a documentação deles antes de migrar:
- fal
- fal.ai/models/bytedance/seedance-2.0/fast/text-to-video/llms.txtfal.ai/models/bytedance/seedance-2.0/fast/image-to-video/llms.txtfal.ai/models/bytedance/seedance-2.0/fast/reference-to-video/llms.txtfal.ai/models/fal-ai/qwen-image-2512/llms.txtfal.ai/models/fal-ai/qwen-image-edit-2511/llms.txtfal.ai/docs/model-apis/model-endpoints/queuefal.ai/docs/model-apis/model-endpoints/webhooks
- Replicate
- replicate.com/bytedance/seedance-2.0-fast/llms.txtreplicate.com/qwen/qwen-image-2512/llms.txtreplicate.com/qwen/qwen-image-edit-2511/llms.txtreplicate.com/docs/reference/httpreplicate.com/docs/topics/webhooks/verify-webhook
- WaveSpeed
- wavespeed.ai/models/bytedance/seedance-2.0-fast/text-to-videowavespeed.ai/models/bytedance/seedance-2.0-fast/image-to-videowavespeed.ai/models/wavespeed-ai/qwen-image/text-to-image-2512wavespeed.ai/models/wavespeed-ai/qwen-image/edit-2511wavespeed.ai/docs/submit-taskwavespeed.ai/docs/how-to-use-webhookswavespeed.ai/docs/verify-webhookswavespeed.ai/docs/data-retention-policy