Pular para o conteúdo

Desenvolvedores

Referência da API da Vellria

Todos os modelos em um único endpoint HTTPS, com sua chave de API.

URL base
https://vellria.com/v1
Autenticação
Authorization: Bearer vll_...

Início rápido

#

Quatro chamadas levam você de uma chave de API a um arquivo pronto. Cada geração gasta créditos do seu saldo pelo preço que o catálogo informa; envie expectedCost e uma solicitação cujo preço mudou é recusada em vez de cobrada (Preços e custo esperado).

  1. Crie uma chave de API

    Entre e crie uma chave na página Chaves de API. As chaves começam com vll_; envie a sua como token Bearer em cada chamada.

  2. Escolha um modelo

    GET /v1/models lista cada id de modelo com seus tamanhos, parâmetros e preço em créditos. Leia-o em vez de fixar uma lista de modelos no seu código.

  3. Inicie uma geração

    POST /v1/generate/image com um id de modelo e um prompt. A resposta é 202, com o id da geração e os créditos cobrados; uma geração que falha é reembolsada.

  4. Consulte e baixe

    Chame GET /v1/generations/{id} a cada poucos segundos até que status seja completed, ou failed com um error_code. Depois baixe output_url com a mesma chave.

2. Escolha um modelo
curl
curl https://vellria.com/v1/models \
  -H "Authorization: Bearer vll_..."
Resposta · 200
{
  "image": [
    {
      "id": "vellria-seedream-5-pro",
      "label": "Seedream 5 Pro",
      "kind": "image"
    }
  ],
  "video": [
    {
      "id": "vellria-seedance-2-5",
      "label": "Seedance 2.5",
      "kind": "video"
    }
  ]
}
3. Inicie uma geração
curl
curl https://vellria.com/v1/generate/image \
  -H "Authorization: Bearer vll_..." \
  -H "Content-Type: application/json" \
  -d '{
    "model": "vellria-seedream-5-pro",
    "prompt": "Um farol ao amanhecer, luz suave",
    "size": "1536*1536"
  }'
Resposta · 202
{
  "id": "gen_3f9a1c7e5b2d4086",
  "status": "processing",
  "model": "vellria-seedream-5-pro",
  "size": "1536*1536",
  "cost_cents": 10
}
4. Consulte e baixe
curl
curl https://vellria.com/v1/generations/{id} \
  -H "Authorization: Bearer vll_..."
Resposta · 200
{
  "id": "gen_3f9a1c7e5b2d4086",
  "status": "completed",
  "output_url": "https://vellria.com/v1/generations/gen_3f9a1c7e5b2d4086/file",
  "error_code": null,
  "expires_at": 1791936000000
}
curl
curl -o result.png https://vellria.com/v1/generations/{id}/file \
  -H "Authorization: Bearer vll_..."

Autenticação

#

Envie sua chave de API como token Bearer no cabeçalho Authorization em todas as requisições. As chaves começam com o prefixo vll_ e são criadas na página Chaves de API.

http
Authorization: Bearer vll_...

Erros

#

Todo erro volta com o mesmo corpo JSON. Decida pelo error.code: ele é estável, enquanto error.message é escrito para pessoas e pode mudar. error.param indica o campo com problema quando há um, e alguns códigos acrescentam error.reason (image_unreadable: animated, transparent, too_small ou too_large). Os créditos nunca ficam retidos em uma requisição que retorna erro: os erros de requisição são levantados antes de qualquer cobrança, e uma geração que não pôde ser iniciada é reembolsada.

Códigos de status HTTP

Status HTTPSignificado
400A requisição é inválida; error.code diz qual campo ou regra.
401A chave de API está ausente ou é inválida.
402Créditos insuficientes.
403Esta conta ou chave não pode usar o endpoint.
404O recurso não existe ou pertence a outra conta.
409A requisição conflita com o estado atual, como um preço alterado ou uma geração ainda em andamento.
410O arquivo passou do prazo de retenção e foi excluído.
413O arquivo ou o corpo é grande demais.
415O Content-Type não é um tipo de imagem aceito.
416O intervalo de bytes pedido não pode ser atendido.
429Requisições demais; aguarde o tempo do cabeçalho Retry-After e tente novamente.
500Erro inesperado do nosso lado.
502O provedor do modelo ou do pagamento recusou a requisição ou falhou.
503O serviço está temporariamente indisponível; nada é cobrado.

Códigos de erro

Autenticação e conta8authentication_requiredaccount_deletedaccount_suspendedaccount_mergedforbiddenpending_paymentmerge_in_progressaccount_delete_failed
CódigoStatus HTTPSignificado
authentication_required401Nenhuma chave de API foi enviada, ou ela é inválida ou foi revogada.
account_deleted403A conta foi encerrada.
account_suspended403A conta está suspensa.
account_merged403A conta foi unificada a outra; use a chave dessa conta.
forbidden403O endpoint funciona apenas com uma sessão do Painel, não com chave de API.
pending_payment409Um pagamento ainda não foi liquidado; tente de novo quando ele for.
merge_in_progress409A conta está sendo vinculada a outra; tente de novo em um instante.
account_delete_failed500A conta não pôde ser encerrada; tente de novo em um instante.
Validação da requisição22invalid_bodyinvalid_promptprompt_too_longinvalid_expected_costinvalid_modelinvalid_sizeinvalid_durationinvalid_resolutioninvalid_ratioinvalid_reference_modeinvalid_reference_tokentext_to_video_not_supportedinvalid_<parameter>invalid_typeinvalid_statusinvalid_queryinvalid_idsinvalid_untilinvalid_generation_typethumbnail_unsupportedthumbnail_size_unsupportedinvalid_range
CódigoStatus HTTPSignificado
invalid_body400O corpo não é um JSON válido ou falta um campo obrigatório.
invalid_prompt400prompt está ausente ou vazio.
prompt_too_long400prompt é mais longo que o max_prompt_length do modelo.
invalid_expected_cost400expectedCost não é um número inteiro não negativo.
invalid_model400O id do modelo não está em GET /v1/models.
invalid_size400size não é um dos sizes do modelo.
invalid_duration400duration está fora da faixa do modo.
invalid_resolution400resolution não é uma das resolutions do modo.
invalid_ratio400ratio não é um dos ratios do modo.
invalid_reference_mode400reference_mode não é frame nem subject, ou o modelo não tem modo subject.
invalid_reference_token400O prompt cita um @image sem referência correspondente, como @image3 com duas imagens.
text_to_video_not_supported400O modelo precisa de uma imagem de referência e não funciona só com um prompt.
invalid_<parameter>400Um parâmetro específico do modelo tem um valor que o modelo não declara.
invalid_type400type não é image nem video.
invalid_status400status não é queued, processing nem completed.
invalid_query400O texto da busca é longo demais.
invalid_ids400ids não é uma lista de 1 a 50 ids de geração.
invalid_until400until não é um carimbo de data válido.
invalid_generation_type400Apenas gerações de imagem podem virar uma referência.
thumbnail_unsupported400Miniaturas existem apenas para imagens.
thumbnail_size_unsupported400thumb não é um tamanho de miniatura aceito.
invalid_range416O cabeçalho Range não pode ser atendido.
Prompts, referências e envios11content_blockedinvalid_image_urlsreference_not_publicimage_unreadablereference_not_allowedempty_uploadinvalid_imagefile_too_largepayload_too_largeunsupported_media_typeupload_in_use
CódigoStatus HTTPSignificado
content_blocked400O prompt foi recusado pelo filtro de segurança antes de qualquer crédito ser gasto.
invalid_image_urls400image_urls está malformado, tem imagens de menos ou demais para o modelo, ou está ausente onde o modo exige.
reference_not_public400Uma referência aponta para a URL de um arquivo que exige autenticação; envie-o com POST /v1/uploads.
image_unreadable400Uma imagem de referência não pode ser usada; error.reason diz o motivo (animated, transparent, too_small ou too_large).
reference_not_allowed403Imagens de referência não estão disponíveis neste serviço.
empty_upload400O corpo do envio está vazio.
invalid_image400O envio não é uma imagem legível do tipo declarado.
file_too_large413O arquivo é maior que o tamanho permitido.
payload_too_large413O corpo da requisição é maior que o tamanho permitido.
unsupported_media_type415O Content-Type não é um dos tipos de imagem aceitos.
upload_in_use409O envio foi usado em uma geração; fica guardado até expirar.
Gerações e arquivos8not_foundcontent_expiredgeneration_in_progressgeneration_not_completedupstream_errorreference_rejectedgeneration_unavailablereference_unavailable
CódigoStatus HTTPSignificado
not_found404Esse recurso não existe nesta conta.
content_expired410O arquivo passou do prazo de retenção e foi excluído.
generation_in_progress409A geração ainda está em queued ou processing.
generation_not_completed409A geração ainda não foi concluída.
upstream_error502A geração não pôde ser iniciada; os créditos são reembolsados.
reference_rejected502O modelo recusou uma imagem de referência; os créditos são reembolsados.
generation_unavailable503A geração está temporariamente indisponível; nada é cobrado.
reference_unavailable503Uma imagem de referência não pôde ser preparada; nada é cobrado.
Créditos e pagamentos18insufficient_balanceprice_changedinvalid_packageinvalid_amountinvalid_providerpackage_unavailable_for_providerinvalid_plancheckout_lockedpayment_create_failednot_configuredalready_paidalready_subscribeddowngrade_requires_cancelcheckout_in_progresssubscription_changedsubscription_under_reviewsubscription_not_foundsubscription_cancel_failed
CódigoStatus HTTPSignificado
insufficient_balance402A conta não tem créditos suficientes.
price_changed409O preço é diferente de expectedCost; o preço atual está em price.cost e nada é cobrado.
invalid_package400package_id não está em GET /v1/billing/packages.
invalid_amount400price_amount está fora do intervalo de min_usd a max_usd.
invalid_provider400O provedor é desconhecido, está fechado ou não é aceito para este pagamento.
package_unavailable_for_provider400O provedor escolhido não pode vender este pacote (ele está em excluded_providers do pacote, por exemplo telegram_stars nos pacotes grandes); nenhum pagamento é aberto.
invalid_plan400plan_id não é um dos planos.
checkout_locked429O pagamento com cartão (provider whop) fica bloqueado por um tempo após muitas tentativas malsucedidas com cartão; cripto e Telegram Stars continuam abertos. Veja Retry-After.
payment_create_failed502O provedor de pagamento não conseguiu abrir a página de pagamento; tente de novo.
not_configured503Os pagamentos não estão disponíveis no momento.
already_paid409O pagamento já foi concluído.
already_subscribed409Você já tem este plano.
downgrade_requires_cancel409Mudar para um plano menor exige um cancelamento antes.
checkout_in_progress409Uma página de pagamento de assinatura ainda está sendo aberta.
subscription_changed409A assinatura mudou enquanto a página de pagamento era aberta; recarregue e tente de novo.
subscription_under_review409O primeiro pagamento de uma assinatura está em análise; nenhum novo pagamento é aberto até a decisão.
subscription_not_found404Não há assinatura ativa.
subscription_cancel_failed502O cancelamento não pôde ser confirmado; tente de novo.
Limites de requisições2rate_limit_exceededreference_rate_limited
CódigoStatus HTTPSignificado
rate_limit_exceeded429Requisições demais na janela; aguarde o tempo de Retry-After.
reference_rate_limited429Mais requisições com imagens de referência do que o limite por hora.
Conversa9insufficient_creditsinvalid_jsoninvalid_requestcontext_too_longunsupported_contentdata_url_not_supportedinvalid_image_urltoo_many_imagesempty_response
CódigoStatus HTTPSignificado
insufficient_credits402O saldo não cobre a resposta mais longa possível (max_tokens); nada é cobrado.
invalid_json400O corpo não é um JSON válido.
invalid_request400Um campo está ausente ou malformado (messages, role, stream, max_tokens, temperature ou top_p); error.param diz qual.
context_too_long400Mensagens ou caracteres demais para os limites do modelo.
unsupported_content400Uma parte do conteúdo não é text nem image_url, ou há uma imagem fora de uma mensagem user.
data_url_not_supported400A imagem foi enviada como data URL; envie-a com POST /v1/uploads e passe a URL devolvida.
invalid_image_url400image_url.url não é uma URL http(s).
too_many_images400Mais imagens do que o modelo aceita por mensagem ou por solicitação.
empty_response502O modelo devolveu uma resposta vazia; nada é cobrado.
Servidor1internal_error
CódigoStatus HTTPSignificado
internal_error500Erro inesperado do nosso lado.

Gerações que falharam

Uma geração que falha depois de iniciada não é um erro HTTP: GET /v1/generations/{id} a devolve com status failed e um destes valores de error_code, e os créditos dela são reembolsados automaticamente.

Mostrar 10 códigos10content_blockedprovider_errorprovider_timeoutprovider_cancelledprovider_unavailableabandonedunknown_providerimage_blockedmoderation_failedreference_rejected
CódigoSignificado
content_blockedO prompt foi recusado por uma verificação de segurança depois que a geração entrou na fila.
provider_errorO modelo não conseguiu produzir um resultado.
provider_timeoutO modelo não terminou a tempo.
provider_cancelledO modelo cancelou o trabalho.
provider_unavailableO modelo estava indisponível.
abandonedO trabalho ficou sem resposta por tempo demais e foi abandonado.
unknown_providerNão foi possível rastrear o trabalho até uma execução de modelo.
image_blockedApenas linhas antigas: uma imagem de referência foi recusada por uma verificação que não é mais usada.
moderation_failedApenas linhas antigas: a própria verificação falhou.
reference_rejectedO modelo recusou uma imagem de referência.
Resposta · 400
{
  "error": {
    "message": "vellria-seedance-2-5 does not support reference_mode \"subject\"",
    "type": "invalid_request_error",
    "param": "reference_mode",
    "code": "invalid_reference_mode"
  }
}
Resposta · 400
{
  "error": {
    "message": "image_urls[0] is animated: use a still, opaque JPEG, PNG, GIF or WebP image of at most 20 MB, 36 megapixels",
    "type": "invalid_request_error",
    "param": "image_urls",
    "code": "image_unreadable",
    "reason": "animated"
  }
}
Resposta · 409
{
  "error": {
    "message": "Price changed: this request now costs 10 credits",
    "type": "invalid_request_error",
    "param": "expectedCost",
    "code": "price_changed"
  },
  "price": {
    "cost": 10
  }
}

Limites de requisições

#

20 imagens e 10 vídeos por minuto. As gerações com imagens de referência também compartilham um limite de 120 tentativas por hora, incluindo as recusadas; acima dele, os endpoints de geração retornam o código reference_rate_limited. Ultrapassar um limite retorna HTTP 429; aguarde o tempo indicado no cabeçalho Retry-After e tente novamente.

Catálogo de modelos

#

Os modelos válidos, com seus custos em créditos, são devolvidos como { image: [...], video: [...] }. Consulte este endpoint em vez de fixar no código uma tabela de preços do seu lado.

Mais detalhes

Cada entrada traz id (o valor que você envia como model), label, kind (image ou video), family e developer, a empresa que o criou (null para um modelo oferecido com o nome Vellria), além de dois modos, text e reference: envie apenas um prompt e o modelo é executado no modo text — uma chamada text-to-image ou text-to-video; anexe uma ou mais imagens de referência a esse mesmo id e ele é executado no modo reference em vez disso — image-to-image ou image-to-video —, não há um id separado para escolher entre os dois. Cada modo traz seus próprios sizes (imagem) ou resolutions (vídeo), um default, max_prompt_length (o limite de caracteres que esse modo impõe ao prompt, e a qualquer parâmetro de texto livre que não declare o próprio limite) e parameters. Cada tamanho ou resolução traz ratio e tier junto com o rótulo, então você nunca precisa interpretar o rótulo para saber a proporção ou o nível de resolução (um ratio adaptive significa que o resultado usa as proporções da imagem de entrada). reference_images é null no modo text; no modo reference ele traz o mínimo e o máximo de imagens de referência que esse modo aceita, extra_credits cobrado por cada referência após a primeira, e os limites de arquivo que uma imagem de referência deve cumprir. Um modelo cujos espaços de referência têm papéis fixos os lista em ordem em reference_images.roles (null em todos os modelos por ora): a primeira URL de image_urls receberia o primeiro papel, cada URL seguinte o próximo, e o último papel se repetiria para o restante.

Modelos de imagem

#
  • Modelo
    Seedream 5 Pro Sem censuravellria-seedream-5-pro
    Modos
    Texto para imagemImagem para imagem
    Tamanhos
    2K · 5 tamanhos
    Preço
    10 créditos
    Parâmetros

    Texto para imagem · 10 créditos para qualquer tamanho + 1 crédito por imagem de referência após a primeira

    ParâmetroValores permitidosPadrão
    image_urlsTipo: string[]0–10 URLs https (obrigatório)—
    sizeTipo: string1536*15361776*13281328*17762048*11521152*20481536*1536
    reasoningTipo: stringenableddisabledenabled

    Imagem para imagem · 10 créditos para qualquer tamanho + 1 crédito por imagem de referência após a primeira

    ParâmetroValores permitidosPadrão
    image_urlsTipo: string[]1–10 URLs https (obrigatório)—
    Página do modelo — Seedream 5 Pro Sem censura
  • Modelo
    Qwen 3 Sem censuravellria-qwen-3
    Modos
    Texto para imagemImagem para imagem
    Tamanhos
    1K, 1.5K, 2K · 8 tamanhos
    Preço
    8 créditos
    Parâmetros

    Texto para imagem · 8 créditos para qualquer tamanho

    ParâmetroValores permitidosPadrão
    sizeTipo: string1024*10241536*10241024*15362048*15361536*20482048*11521152*20482048*20481024*1024
    seedTipo: integer0–2147483647aleatório quando omitido, devolvido na resposta
    negative_promptTipo: stringtexto, no máximo 8000 caracteres—

    Imagem para imagem · 8 créditos para qualquer tamanho + 1 crédito por imagem de referência após a primeira

    ParâmetroValores permitidosPadrão
    image_urlsTipo: string[]1–3 URLs https (obrigatório)—
    sizeTipo: string1024*10241280*960960*12801280*720720*12801440*14401024*1024
    Página do modelo — Qwen 3 Sem censura
  • Modelo
    Qwen 3 Pro Sem censuravellria-qwen-3-pro
    Modos
    Texto para imagemImagem para imagem
    Tamanhos
    1K, 1.5K · 3 tamanhos
    Preço
    10 créditos
    Parâmetros

    Texto para imagem · 10 créditos para qualquer tamanho

    ParâmetroValores permitidosPadrão
    sizeTipo: string1024*10241536*10241024*15361024*1024
    seedTipo: integer0–2147483647aleatório quando omitido, devolvido na resposta
    negative_promptTipo: stringtexto, no máximo 8000 caracteres—

    Imagem para imagem · 10 créditos para qualquer tamanho + 1 crédito por imagem de referência após a primeira

    ParâmetroValores permitidosPadrão
    image_urlsTipo: string[]1–3 URLs https (obrigatório)—
    sizeTipo: string1024*10241280*960960*12801280*720720*12801440*14401024*1024
    Página do modelo — Qwen 3 Pro Sem censura
  • Modelo
    Qwen Image Edit 2511 Sem censuravellria-qwen-image-edit-2511
    Modos
    Texto para imagemImagem para imagem
    Tamanhos
    1K, 1.3K · 5 tamanhos
    Preço
    6 créditos
    Parâmetros

    Texto para imagem · 6 créditos para qualquer tamanho

    ParâmetroValores permitidosPadrão
    sizeTipo: string1024*10241280*960960*12801280*720720*12801024*1024
    seedTipo: integer0–2147483647aleatório quando omitido, devolvido na resposta

    Imagem para imagem · 6 créditos para qualquer tamanho

    ParâmetroValores permitidosPadrão
    image_urlsTipo: string[]1–3 URLs https (obrigatório)—
    sizeTipo: string1K1K
    Página do modelo — Qwen Image Edit 2511 Sem censura
  • Modelo
    Qwen Image 2.1 Sem censuravellria-qwen-image-2-1
    Modos
    Texto para imagemImagem para imagem
    Tamanhos
    1K, 1.2K, 1.3K · 7 tamanhos
    Preço
    a partir de 7 créditos
    Parâmetros

    Texto para imagem · 7 créditos para qualquer tamanho

    ParâmetroValores permitidosPadrão
    sizeTipo: string1024*10241248*832832*12481184*896896*11841376*768768*13761024*1024
    seedTipo: integer0–2147483647aleatório quando omitido, devolvido na resposta

    Imagem para imagem · 8 créditos para qualquer tamanho + 1 crédito por imagem de referência após a primeira

    ParâmetroValores permitidosPadrão
    image_urlsTipo: string[]1–10 URLs https (obrigatório)—
    sizeTipo: string1K1024*10241248*832832*12481184*896896*11841376*768768*13761K
    Página do modelo — Qwen Image 2.1 Sem censura
  • Modelo
    Seedream 5 Lite Sem censuravellria-seedream-5-lite
    Modos
    Texto para imagemImagem para imagem
    Tamanhos
    3K, 4K · 8 tamanhos
    Preço
    8 créditos
    Parâmetros

    Texto para imagem · 8 créditos para qualquer tamanho

    ParâmetroValores permitidosPadrão
    sizeTipo: string3072*30723456*25922592*34563744*24962496*37444096*23042304*40964704*20163072*3072

    Imagem para imagem · 8 créditos para qualquer tamanho

    ParâmetroValores permitidosPadrão
    image_urlsTipo: string[]1–10 URLs https (obrigatório)—
    Página do modelo — Seedream 5 Lite Sem censura
  • Modelo
    Seedream 4.5 Sem censuravellria-seedream-4-5
    Modos
    Texto para imagemImagem para imagem
    Tamanhos
    2K · 8 tamanhos
    Preço
    9 créditos
    Parâmetros

    Texto para imagem · 9 créditos para qualquer tamanho

    ParâmetroValores permitidosPadrão
    sizeTipo: string2048*20482304*17281728*23042496*16641664*24962848*16001600*28483136*13442048*2048

    Imagem para imagem · 9 créditos para qualquer tamanho

    ParâmetroValores permitidosPadrão
    image_urlsTipo: string[]1–10 URLs https (obrigatório)—
    Página do modelo — Seedream 4.5 Sem censura
  • Modelo
    Seedream 4 Sem censuravellria-seedream-4
    Modos
    Texto para imagemImagem para imagem
    Tamanhos
    2K · 5 tamanhos
    Preço
    7 créditos
    Parâmetros

    Texto para imagem · 7 créditos para qualquer tamanho

    ParâmetroValores permitidosPadrão
    sizeTipo: string2048*20482368*17761776*23682816*15841584*28162048*2048

    Imagem para imagem · 7 créditos para qualquer tamanho

    ParâmetroValores permitidosPadrão
    image_urlsTipo: string[]1–10 URLs https (obrigatório)—
    sizeTipo: string2K2048*20482368*17761776*23682816*15841584*28162K
    Página do modelo — Seedream 4 Sem censura
  • Modelo
    Wan 2.7 Sem censuravellria-wan-2-7
    Modos
    Texto para imagemImagem para imagem
    Tamanhos
    2K · 1 tamanho
    Preço
    8 créditos
    Parâmetros

    Texto para imagem · 8 créditos para qualquer tamanho

    ParâmetroValores permitidosPadrão
    sizeTipo: string2K2K
    seedTipo: integer0–2147483647aleatório quando omitido, devolvido na resposta

    Imagem para imagem · 8 créditos para qualquer tamanho

    ParâmetroValores permitidosPadrão
    image_urlsTipo: string[]1–9 URLs https (obrigatório)—
    Página do modelo — Wan 2.7 Sem censura
  • Modelo
    Bria FIBO 2.0 Sem censuravellria-bria-fibo-2-0
    Modos
    Texto para imagemImagem para imagem
    Tamanhos
    2K, 1K · 30 tamanhos
    Preço
    10 créditos
    Parâmetros

    Texto para imagem · 10 créditos para qualquer tamanho

    ParâmetroValores permitidosPadrão
    sizeTipo: string2048*20482304*15361536*23042048*15361536*20481920*15361536*19202048*11521152*20481024*10241248*832832*12481152*864864*11521120*896896*11201408*792792*14081280*800800*12801440*720720*14401568*672672*15681776*592592*17762048*512512*20482320*464464*23202048*2048
    seedTipo: integer0–2147483647aleatório quando omitido, devolvido na resposta

    Imagem para imagem · 10 créditos para qualquer tamanho

    ParâmetroValores permitidosPadrão
    image_urlsTipo: string[]1–4 URLs https (obrigatório)—
    sizeTipo: string1K1K
    Página do modelo — Bria FIBO 2.0 Sem censura
  • Modelo
    Bria FIBO 1.5 Sem censuravellria-bria-fibo-1-5
    Modos
    Texto para imagemImagem para imagem
    Tamanhos
    2K, 2.3K · 7 tamanhos
    Preço
    10 créditos
    Parâmetros

    Texto para imagem · 10 créditos para qualquer tamanho

    ParâmetroValores permitidosPadrão
    sizeTipo: string2048*20482304*15361536*23042048*15361536*20482048*11521152*20482048*2048
    seedTipo: integer0–2147483647aleatório quando omitido, devolvido na resposta

    Imagem para imagem · 10 créditos para qualquer tamanho

    ParâmetroValores permitidosPadrão
    image_urlsTipo: string[]1–4 URLs https (obrigatório)—
    sizeTipo: string1K1K
    Página do modelo — Bria FIBO 1.5 Sem censura
  • Modelo
    MiniMax H3 Image Sem censuravellria-minimax-h3-image
    Modos
    Texto para imagemImagem para imagem
    Tamanhos
    1K, 1.2K, 1.3K · 7 tamanhos
    Preço
    8 créditos
    Parâmetros

    Texto para imagem · 8 créditos para qualquer tamanho

    ParâmetroValores permitidosPadrão
    sizeTipo: string1024*10241248*832832*12481184*896896*11841376*768768*13761024*1024
    seedTipo: integer0–2147483647aleatório quando omitido, devolvido na resposta

    Imagem para imagem · 8 créditos para qualquer tamanho + 1 crédito por imagem de referência após a primeira

    ParâmetroValores permitidosPadrão
    image_urlsTipo: string[]1–9 URLs https (obrigatório)—
    sizeTipo: string1K1024*10241248*832832*12481184*896896*11841376*768768*13761K
    Página do modelo — MiniMax H3 Image Sem censura
  • Modelo
    Seedream 5 Flash Sem censuravellria-seedream-5-flash
    Modos
    Texto para imagemImagem para imagem
    Tamanhos
    2K · 5 tamanhos
    Preço
    8 créditos
    Parâmetros

    Texto para imagem · 8 créditos para qualquer tamanho

    ParâmetroValores permitidosPadrão
    sizeTipo: string2048*20482368*17761776*23682816*15841584*28162048*2048

    Imagem para imagem · 8 créditos para qualquer tamanho

    ParâmetroValores permitidosPadrão
    image_urlsTipo: string[]1–10 URLs https (obrigatório)—
    sizeTipo: string2K2048*20482368*17761776*23682816*15841584*28162K
    Página do modelo — Seedream 5 Flash Sem censura
  • Modelo
    Z-Image Turbo Sem censuravellria-z-image-turbo
    Modos
    Texto para imagem
    Tamanhos
    1K, 1.5K, 2K · 6 tamanhos
    Preço
    2 créditos
    Parâmetros

    Texto para imagem · 2 créditos para qualquer tamanho

    ParâmetroValores permitidosPadrão
    sizeTipo: string1024*10241536*10241024*15362048*11521152*20482048*20481024*1024
    seedTipo: integer0–2147483647aleatório quando omitido, devolvido na resposta
    Página do modelo — Z-Image Turbo Sem censura
  • Modelo
    Anima Sem censuravellria-anima
    Modos
    Texto para imagemImagem para imagem
    Tamanhos
    1K, 1.2K, 1.1K, 1.3K · 7 tamanhos
    Preço
    5 créditos
    Parâmetros

    Texto para imagem · 5 créditos para qualquer tamanho

    ParâmetroValores permitidosPadrão
    sizeTipo: string1024*10241248*832832*12481168*880880*11681360*768768*13601024*1024
    seedTipo: integer0–2147483647aleatório quando omitido, devolvido na resposta

    Imagem para imagem · 5 créditos para qualquer tamanho

    ParâmetroValores permitidosPadrão
    image_urlsTipo: string[]1–1 URLs https (obrigatório)—
    sizeTipo: string1K1K
    Página do modelo — Anima Sem censura
  • Modelo
    Vellria Anime Pro Spicy Sem censuravellria-anime-pro-spicy
    Modos
    Texto para imagemImagem para imagem
    Tamanhos
    2K · 5 tamanhos
    Preço
    10 créditos
    Parâmetros

    Texto para imagem · 10 créditos para qualquer tamanho + 1 crédito por imagem de referência após a primeira

    ParâmetroValores permitidosPadrão
    image_urlsTipo: string[]0–10 URLs https (obrigatório)—
    sizeTipo: string1536*15361776*13281328*17762048*11521152*20481536*1536

    Imagem para imagem · 10 créditos para qualquer tamanho + 1 crédito por imagem de referência após a primeira

    ParâmetroValores permitidosPadrão
    image_urlsTipo: string[]1–10 URLs https (obrigatório)—
    Página do modelo — Vellria Anime Pro Spicy Sem censura
  • Modelo
    Pruna P-Image Sem censuravellria-p-image
    Modos
    Texto para imagemImagem para imagem
    Tamanhos
    1K, 1.2K, 1.1K, 1.3K · 7 tamanhos
    Preço
    4 créditos
    Parâmetros

    Texto para imagem · 4 créditos para qualquer tamanho

    ParâmetroValores permitidosPadrão
    sizeTipo: string1024*10241216*832832*12161152*896896*11521344*768768*13441024*1024
    seedTipo: integer0–2147483647aleatório quando omitido, devolvido na resposta

    Imagem para imagem · 4 créditos para qualquer tamanho

    ParâmetroValores permitidosPadrão
    image_urlsTipo: string[]1–5 URLs https (obrigatório)—
    sizeTipo: string1K1024*10241216*832832*12161152*896896*11521344*768768*13441K
    Página do modelo — Pruna P-Image Sem censura
  • Modelo
    Flux 2 Klein 9B Sem censuravellria-flux-2-klein-9b
    Modos
    Texto para imagemImagem para imagem
    Tamanhos
    1K, 1.2K, 1.1K, 1.3K · 7 tamanhos
    Preço
    5 créditos
    Parâmetros

    Texto para imagem · 5 créditos para qualquer tamanho

    ParâmetroValores permitidosPadrão
    sizeTipo: string1024*10241248*832832*12481152*864864*11521360*768768*13601024*1024
    seedTipo: integer0–2147483647aleatório quando omitido, devolvido na resposta

    Imagem para imagem · 5 créditos para qualquer tamanho

    ParâmetroValores permitidosPadrão
    image_urlsTipo: string[]1–3 URLs https (obrigatório)—
    sizeTipo: string1K1024*10241248*832832*12481152*864864*11521360*768768*13601K
    Página do modelo — Flux 2 Klein 9B Sem censura
  • Modelo
    Moss Image Sem censuravellria-moss-image
    Modos
    Texto para imagem
    Tamanhos
    1K, 1.2K, 1.1K, 1.3K, 1.4K, 1.5K, 1.7K · 15 tamanhos
    Preço
    5 créditos
    Parâmetros

    Texto para imagem · 5 créditos para qualquer tamanho

    ParâmetroValores permitidosPadrão
    sizeTipo: string1024*10241248*832832*12481168*880880*11681136*912912*11361360*768768*13601440*720720*14401552*656656*15521760*576576*17601024*1024
    seedTipo: integer0–2147483647aleatório quando omitido, devolvido na resposta
    Página do modelo — Moss Image Sem censura
  • Modelo
    Jib Mix Qwen Image Sem censuravellria-jib-mix-qwen-image
    Modos
    Texto para imagem
    Tamanhos
    1K, 1.2K, 1.1K, 1.3K · 7 tamanhos
    Preço
    5 créditos
    Parâmetros

    Texto para imagem · 5 créditos para qualquer tamanho

    ParâmetroValores permitidosPadrão
    sizeTipo: string1024*10241248*832832*12481152*864864*11521360*768768*13601024*1024
    seedTipo: integer0–2147483647aleatório quando omitido, devolvido na resposta
    Página do modelo — Jib Mix Qwen Image Sem censura
  • Modelo
    Z-Image Spicy Sem censuravellria-z-image-spicy
    Modos
    Texto para imagem
    Tamanhos
    1K, 1.5K · 7 tamanhos
    Preço
    4 créditos
    Parâmetros

    Texto para imagem · 4 créditos para qualquer tamanho

    ParâmetroValores permitidosPadrão
    sizeTipo: string1024*10241024*15361536*10241152*15361536*1152864*15361536*8641024*1536
    seedTipo: integer0–2147483647aleatório quando omitido, devolvido na resposta
    Página do modelo — Z-Image Spicy Sem censura
  • Modelo
    Z-Image Spicy Pro Sem censuravellria-z-image-spicy-pro
    Modos
    Texto para imagem
    Tamanhos
    1K, 2K, 2.5K · 8 tamanhos
    Preço
    5 créditos
    Parâmetros

    Texto para imagem · 5 créditos para qualquer tamanho

    ParâmetroValores permitidosPadrão
    sizeTipo: string1024*10242048*20481536*20482048*15361680*25202520*16801440*25602560*14401024*1024
    seedTipo: integer0–2147483647aleatório quando omitido, devolvido na resposta
    Página do modelo — Z-Image Spicy Pro Sem censura
  • Modelo
    Qwen Image Edit Spicy Sem censuravellria-qwen-image-edit-spicy
    Modos
    Texto para imagemImagem para imagem
    Tamanhos
    1K · 1 tamanho
    Preço
    10 créditos
    Parâmetros

    Texto para imagem · 10 créditos para qualquer tamanho

    ParâmetroValores permitidosPadrão
    image_urlsTipo: string[]1–3 URLs https (obrigatório)—
    sizeTipo: string1K1K
    seedTipo: integer0–2147483647aleatório quando omitido, devolvido na resposta

    Imagem para imagem · 10 créditos para qualquer tamanho

    Página do modelo — Qwen Image Edit Spicy Sem censura

GET/v1/models

Lista todos os modelos com seus modos, tamanhos ou resoluções, parâmetros e preços em créditos. Público: não precisa de chave.
curl
curl https://vellria.com/v1/models \
  -H "Authorization: Bearer vll_..."
#

Geração de imagem

#

Crie uma imagem a partir de um prompt de texto, ou anexe imagens de referência em image_urls para editá-las ou mudar o estilo delas com o mesmo id de modelo. A chamada responde na hora com HTTP 202 e o id da geração; a imagem é feita em segundo plano, então consulte GET /v1/generations/{id} até o status ser completed e baixe-a em output_url.

Mais detalhes

Os créditos do tamanho escolhido são cobrados quando a geração começa e reembolsados automaticamente se ela falhar. Tamanhos, limites de referência, parâmetros e preços de cada modelo vêm de GET /v1/models.

POST/v1/generate/image

Inicia uma geração de imagem. Retorna 202 com o id da geração; consulte-o até obter o resultado.

Parâmetros

ParâmetroDescrição
modelstring · corpoOpcionalId do modelo de GET /v1/models.
promptstring · corpoObrigatórioO que gerar. No máximo max_prompt_length caracteres do modelo.
sizestring · corpoOpcionalUm id de tamanho dos sizes do modelo; o tamanho padrão do modelo quando omitido.
image_urlsstring[] · corpoOpcionalURLs das imagens de referência: uma URL de envio de POST /v1/uploads ou qualquer URL https pública. Quantas um modelo aceita e os limites de arquivo estão em reference_images.
image_urlstring · corpoOpcionalAtalho para uma única imagem de referência.
expectedCostinteger · corpoOpcionalVerificação de preço opcional: os créditos que você espera que esta requisição custe. Um preço diferente retorna 409 price_changed e nada é cobrado.

Cada modelo também aceita os parâmetros listados em parameters na sua entrada de GET /v1/models, como seed; um valor fora do que o modelo declara retorna invalid_<parameter>.

curl
curl https://vellria.com/v1/generate/image \
  -H "Authorization: Bearer vll_..." \
  -H "Content-Type: application/json" \
  -d '{
    "model": "vellria-qwen-3",
    "prompt": "A cat asleep in space, cinematic light",
    "size": "1024*1024",
    "seed": 42
  }'
#

Tamanhos, parâmetros e preços de cada modelo: Modelos de imagem.

Preços e custo esperado

#

Os dois endpoints de geração aceitam um campo opcional expectedCost: quantos créditos você espera que esta solicitação custe, pelos preços de GET /v1/models (modelo, tamanho ou resolução, duração e imagens de referência extras). Se for diferente do valor que seria cobrado, a chamada retorna HTTP 409 com o código price_changed e o preço atual em price.cost; nada é cobrado e nenhuma geração começa. Omita o campo para pular a verificação.

Geração de vídeo

#

Anexe imagens de referência em image_urls e escolha como o modelo as usa com reference_mode. O padrão, frame (também quando o campo é omitido), faz o vídeo começar a partir dessa imagem. subject trata cada imagem como referência de uma pessoa, objeto ou cenário que deve aparecer no vídeo, e o prompt as cita como @image1, @image2 e assim por diante, na ordem de image_urls (maiúsculas e minúsculas tanto faz).

Mais detalhes

O modo subject só existe nos modelos cuja entrada em GET /v1/models traz um bloco subject (null nos demais); esse bloco informa as próprias resoluções, durações, proporções e parâmetros, o limite de referências em subject.reference_images.max e o padrão do token em subject.reference_token. O preço é o mesmo de imagem em vídeo no mesmo modelo, sem cobrança por referência. Erros, todos HTTP 400 e antes de qualquer crédito ser gasto: invalid_reference_mode quando o valor não é frame nem subject ou o modelo não tem modo subject; invalid_image_urls quando o modo subject não recebe referência ou recebe mais do que o modelo aceita; invalid_reference_token quando o prompt cita um @image sem referência correspondente (por exemplo, @image3 com duas imagens). No modo frame, @image1 é texto comum.

POST/v1/generate/video

Inicia uma geração de vídeo a partir de um prompt, opcionalmente com imagens de referência. Retorna 202 com o id da geração.

Parâmetros

ParâmetroDescrição
modelstring · corpoOpcionalId do modelo de GET /v1/models.
promptstring · corpoObrigatórioO que gerar. No máximo max_prompt_length caracteres do modelo.
durationinteger · corpoOpcionalDuração em segundos, dentro da faixa de duração do modo; um valor fora dela retorna 400.
resolutionstring · corpoOpcionalUm id de resolução das resolutions do modo.
ratiostring · corpoOpcionalUm id de proporção dos ratios do modo.
reference_modeframe | subject · corpoOpcionalframe (o padrão) faz o vídeo começar a partir da primeira imagem; subject usa cada imagem como uma referência que o prompt cita como @image1, @image2 e assim por diante.
image_urlsstring[] · corpoOpcionalURLs das imagens de referência: uma URL de envio de POST /v1/uploads ou qualquer URL https pública. Quantas um modelo aceita e os limites de arquivo estão em reference_images.
image_urlstring · corpoOpcionalAtalho para uma única imagem de referência.
expectedCostinteger · corpoOpcionalVerificação de preço opcional: os créditos que você espera que esta requisição custe. Um preço diferente retorna 409 price_changed e nada é cobrado.

Cada modelo também aceita os parâmetros listados em parameters na sua entrada de GET /v1/models, como seed; um valor fora do que o modelo declara retorna invalid_<parameter>.

curl
curl https://vellria.com/v1/generate/video \
  -H "Authorization: Bearer vll_..." \
  -H "Content-Type: application/json" \
  -d '{
    "model": "vellria-wan-3",
    "prompt": "Ocean waves at sunset, slow dolly forward",
    "duration": 5,
    "resolution": "1080p"
  }'
modo subject: image_urls são as pessoas e objetos citados no prompt
curl
curl https://vellria.com/v1/generate/video \
  -H "Authorization: Bearer vll_..." \
  -H "Content-Type: application/json" \
  -d '{
    "model": "vellria-wan-3",
    "reference_mode": "subject",
    "image_urls": [
      "https://vellria.com/v1/uploads/{id1}",
      "https://vellria.com/v1/uploads/{id2}"
    ],
    "prompt": "@image1 walks along the beach at sunset holding @image2",
    "duration": 5,
    "resolution": "1080p"
  }'
#

Tamanhos, parâmetros e preços de cada modelo: Modelos de vídeo.

Conversa

#

Chat e roleplay sem censura: interprete personagens, escreva histórias a quatro mãos ou só converse, e compartilhe imagens para ele entender. Por 1M de tokens: 50 créditos (US$ 0,50) de entrada, 200 créditos (US$ 2,00) de saída.

Mais detalhes

É compatível com a OpenAI: aponte qualquer SDK da OpenAI para a URL base da Vellria com sua chave vll_. Cada resposta é cobrada por token dos seus créditos.

Por 1M de tokens: entrada 50 créditos (US$ 0,50) · entrada em cache 5 créditos (US$ 0,05) · saída 200 créditos (US$ 2,00).

  • As respostas não têm filtro: a Vellria não adiciona moderação de conteúdo a este endpoint, então moderar seus próprios usuários finais é responsabilidade sua. Uma instrução de identidade de uma linha é colocada antes das suas mensagens; os tokens dela não são cobrados e não entram em usage.
  • Imagens: adicione partes image_url a uma mensagem user, no máximo 4 por mensagem e 8 por solicitação. Envie a imagem antes com POST /v1/uploads e passe a URL devolvida; data URLs são recusadas com data_url_not_supported.
  • max_tokens vale 1024 por padrão e no máximo 4096. Campos de raciocínio (reasoning, thinking) são ignorados e as respostas nunca contêm raciocínio.
  • Com stream: true a resposta chega como eventos do servidor (linhas data:) no formato de fragmentos da OpenAI e termina com data: [DONE]. O fragmento anterior tem choices vazio e traz usage e a cobrança. Um erro depois do início do streaming chega como evento data: {"error": …}; se já foi enviado texto, esse texto é cobrado (o fragmento com usage chega logo antes do erro), senão nada é cobrado.
  • Cada resposta traz usage da OpenAI mais credits_charged (créditos fracionários), cost_usd e credits_debited (créditos inteiros descontados do saldo agora; as frações se acumulam na sua conta). Respostas recusadas, com falha ou vazias não são cobradas; um streaming que você cancela é cobrado pelos tokens já gerados.
  • O saldo precisa cobrir a resposta mais longa possível antes de a solicitação começar (senão 402 insufficient_credits). Solicitações por minuto e solicitações simultâneas são limitadas por conta (429 rate_limit_exceeded).
javascript
import OpenAI from "openai"

const client = new OpenAI({
  apiKey: "vll_...",
  baseURL: "https://vellria.com/v1",
})

const stream = await client.chat.completions.create({
  model: "vellria-uncensored-chat",
  messages: [{ role: "user", content: "Vamos começar uma história." }],
  stream: true,
})
for await (const chunk of stream) {
  process.stdout.write(chunk.choices[0]?.delta?.content ?? "")
}

POST/v1/chat/completions

Envie uma conversa e receba a resposta do modelo, inteira ou em streaming. Compatível com a OpenAI; cobrado por token.

Parâmetros

ParâmetroDescrição
modelstring · corpoObrigatórioId do modelo de chat do grupo text de GET /v1/models.
messagesobject[] · corpoObrigatórioA conversa: objetos com role (system, user ou assistant) e content. content é um texto ou, numa mensagem user, uma lista de partes text e image_url; as URLs de imagem vêm de POST /v1/uploads.
streamboolean · corpoOpcionaltrue transmite a resposta como eventos do servidor (SSE); false (padrão) a devolve inteira.
max_tokensinteger · corpoOpcionalMáximo de tokens da resposta: o default_max_tokens do modelo se omitido, no máximo seu max_output_tokens.
temperaturenumber · corpoOpcionalTemperatura de amostragem, de 0 a 2.
top_pnumber · corpoOpcionalAmostragem de núcleo, maior que 0 e no máximo 1.
curl
curl https://vellria.com/v1/chat/completions \
  -H "Authorization: Bearer vll_..." \
  -H "Content-Type: application/json" \
  -d '{
    "model": "vellria-uncensored-chat",
    "messages": [
      {"role": "system", "content": "Você é Mira, uma pirata espacial sarcástica. Não saia da personagem."},
      {"role": "user", "content": "Mira, para onde vamos esta noite?"}
    ],
    "max_tokens": 512
  }'
curl
curl -N https://vellria.com/v1/chat/completions \
  -H "Authorization: Bearer vll_..." \
  -H "Content-Type: application/json" \
  -d '{
    "model": "vellria-uncensored-chat",
    "stream": true,
    "messages": [
      {"role": "user", "content": [
        {"type": "text", "text": "Descreva esta personagem e escreva uma fala de abertura para ela."},
        {"type": "image_url", "image_url": {"url": "<upload_url>"}}
      ]}
    ]
  }'
#

Envio de imagens

#

Você não precisa hospedar as imagens de referência por conta própria: envie o arquivo a este endpoint como corpo bruto, receba de volta uma URL pública e use essa URL em image_urls. O cabeçalho Content-Type é obrigatório e deve corresponder ao corpo; os tipos aceitos são image/jpeg, image/png, image/webp, image/bmp e image/gif, com limite de 20 MB por arquivo.

Mais detalhes

Uma imagem usada como referência deve ser um JPEG, PNG, GIF ou WebP estático de até 20 MB, sem áreas transparentes e dentro dos limites de arquivo que o modelo escolhido publica: `GET /v1/models` os devolve por modelo em `reference_images.limits` (bytes, lado em pixels e megapixels). Uma referência fora desses limites é recusada com HTTP 400 e `image_unreadable`, com motivo `too_small` ou `too_large`, antes de gastar créditos. Metadados como EXIF são removidos quando o arquivo é armazenado. A URL traz um ID impossível de adivinhar e é excluída 24 horas após o envio se nenhuma geração a usar (campo expires_at da resposta); se for usada como referência em uma geração, fica armazenada por 48 horas após o envio, bem menos que os arquivos gerados; depois que ela expira, o endpoint retorna HTTP 410 e content_expired. A URL do arquivo de uma geração (/v1/generations/{id}/file) exige autenticação e não pode ser usada como referência: os endpoints de geração a rejeitam com HTTP 400 e o código reference_not_public antes de qualquer crédito ser gasto. Em vez disso, envie o arquivo aqui ou transforme uma geração de imagem em uma URL de referência pública com POST /v1/generations/{id}/reference. As imagens de referência não passam por verificação de conteúdo: nenhuma imagem é recusada por quem ou o que mostra, e não há recusa image_blocked nesta rota. Nós só recusamos uma referência quando o próprio arquivo não pode ser lido: uma imagem que não pode ser lida retorna HTTP 400 e image_unreadable, com reason animated, transparent too_small ou too_large quando essa for a causa. O próprio modelo ainda pode recusar uma imagem de referência que não consegue processar; essa geração falha com error_code reference_rejected e os créditos são reembolsados automaticamente. Se uma referência não puder ser preparada, a requisição retorna HTTP 503 e reference_unavailable, sem gastar créditos. Prompts enviados com uma chave de API chegam ao modelo como foram enviados; só são recusadas as requisições que envolvem abuso sexual de menores, com HTTP 400 e o código content_blocked. Toda referência é primeiro armazenada como arquivo enviado (uma imagem informada por URL externa é copiada, sem os metadados) e o provedor do modelo busca essa mesma URL fixada, então o provedor recebe exatamente o arquivo armazenado.

POST/v1/uploads

Envia uma imagem de referência como corpo bruto e devolve uma URL pública para usar em image_urls.

Parâmetros

ParâmetroDescrição
Content-Typeimage/* · cabeçalhoObrigatórioO tipo de imagem do corpo: image/jpeg, image/png, image/webp, image/bmp ou image/gif.
bodybinary · corpoObrigatórioO arquivo de imagem bruto, de no máximo 20 MB.
curl
curl https://vellria.com/v1/uploads \
  -H "Authorization: Bearer vll_..." \
  -H "Content-Type: image/png" \
  --data-binary @reference.png
#

GET/v1/uploads/{id}

Baixa uma imagem enviada. Público: não precisa de chave, o id impossível de adivinhar é o acesso.

Parâmetros

ParâmetroDescrição
idstring · caminhoObrigatórioO id do envio.
curl
curl -o reference.png https://vellria.com/v1/uploads/{id}
#

DELETE/v1/uploads/{id}

Exclui um envio que nenhuma geração usou. Só o dono; responde 204. Um envio usado responde 409 upload_in_use e expira sozinho.

Parâmetros

ParâmetroDescrição
idstring · caminhoObrigatórioO id do envio.
curl
curl -X DELETE https://vellria.com/v1/uploads/{id} \
  -H "Authorization: Bearer vll_..."
#

POST/v1/generations/{id}/reference

Transforma uma geração de imagem concluída em um envio de referência público que você pode passar em image_urls.

Parâmetros

ParâmetroDescrição
idstring · caminhoObrigatórioO id da geração.
curl
curl -X POST https://vellria.com/v1/generations/{id}/reference \
  -H "Authorization: Bearer vll_..."
#

Consultar o status da geração

#

As gerações são executadas de forma assíncrona; o status passa por queued → processing → completed (na fila → processando → concluída). Os créditos são reembolsados automaticamente quando uma geração falha.

Mais detalhes

A lista de GET /v1/generations mostra apenas gerações concluídas e em andamento: uma geração que falhou fica fora da lista e do seu total, enquanto GET /v1/generations/{id} continua a devolvê-la com o seu error_code por 30 dias; depois o registro que falhou é excluído e GET /v1/generations/{id} e o endpoint do arquivo devolvem HTTP 404 com o código not_found. Filtrar a lista com ?status=failed devolve 400, e as gerações que falharam também ficam fora da metade de gerações de GET /v1/billing/history (incluindo generations_total). As falhas que ainda não foram informadas a você são listadas por GET /v1/generations/failures: count, refunded_cents (créditos realmente reembolsados, 0 quando não houve reembolso), until e até 5 das mais recentes em data. Marque-as como vistas com POST /v1/generations/failures/seen enviando ids (1 a 50 ids de geração) ou until (todas as falhas até esse instante); ids de outras contas são ignorados e uma falha é informada só uma vez, em qualquer dispositivo.

GET/v1/generations/{id}

Lê uma geração: o status, output_url quando ela está concluída ou error_code quando falhou.

Parâmetros

ParâmetroDescrição
idstring · caminhoObrigatórioO id da geração.
curl
curl https://vellria.com/v1/generations/{id} \
  -H "Authorization: Bearer vll_..."
#

GET/v1/generations

Lista suas gerações, paginadas e filtráveis. As gerações que falharam ficam de fora.

Parâmetros

ParâmetroDescrição
limitinteger · consultaOpcionalTamanho da página, de 1 a 50 (20 por padrão).
offsetinteger · consultaOpcionalNúmero de linhas a pular.
typeimage | video · consultaOpcionalimage ou video.
statusstring · consultaOpcionalqueued, processing ou completed; failed retorna 400.
modelstring · consultaOpcionalApenas gerações feitas com este id de modelo.
favoritesstring · consultaOpcional1 ou true: apenas favoritas.
availablestring · consultaOpcional1 ou true: apenas gerações cujo arquivo ainda está guardado; arquivos expirados ou excluídos ficam fora de data e total.
qstring · consultaOpcionalBusca no prompt e no modelo.
curl
curl "https://vellria.com/v1/generations?type=image" \
  -H "Authorization: Bearer vll_..."
#

GET/v1/generations/{id}/file

Baixa o arquivo gerado. Exige sua chave, então não pode ser usado como URL de referência.

Parâmetros

ParâmetroDescrição
idstring · caminhoObrigatórioO id da geração.
downloadstring · consultaOpcionalQualquer valor: o arquivo é servido como anexo.
thumbstring · consultaOpcionalTamanho da miniatura, apenas para imagens.
curl
curl -o result.png https://vellria.com/v1/generations/{id}/file \
  -H "Authorization: Bearer vll_..."
#

GET/v1/generations/failures

As gerações que falharam e que você ainda não viu, com os créditos reembolsados por elas.
curl
curl https://vellria.com/v1/generations/failures \
  -H "Authorization: Bearer vll_..."
#

POST/v1/generations/failures/seen

Marca falhas como vistas, por id ou todas até um carimbo de data.

Parâmetros

ParâmetroDescrição
idsstring[] · corpoOpcionalDe 1 a 50 ids de geração para marcar como vistas.
untilinteger · corpoOpcionalUm carimbo de data Unix em milissegundos, o valor until de GET /v1/generations/failures: todas as falhas até ele são marcadas.
curl
curl -X POST https://vellria.com/v1/generations/failures/seen \
  -H "Authorization: Bearer vll_..." \
  -H "Content-Type: application/json" \
  -d '{"ids": ["gen_..."]}'
#

Adicionar créditos

#

Os créditos são comprados por uma página de pagamento hospedada. GET /v1/billing/packages retorna uma lista única de pacotes, cada um com id, preço em usd e seus créditos, junto com min_usd e max_usd para um valor livre; obtenha esses valores do endpoint em vez de fixá-los no código.

Mais detalhes

POST /v1/billing/create-checkout recebe um package_id dessa lista ou um price_amount livre em USD entre 30 e 10000, arredondado para centavos; um valor livre é convertido pela mesma tarifa fixa dos pacotes. Quando os dois são enviados, package_id prevalece e o preço e os créditos vêm do catálogo. Um package_id desconhecido retorna HTTP 400 com o código invalid_package, e um valor fora do intervalo retorna invalid_amount. No máximo cinco pagamentos podem ficar abertos ao mesmo tempo; um novo retorna HTTP 429 até que um deles seja pago, cancelado ou expire. A resposta é o registro do pagamento com um checkout_url: envie o pagador para esse endereço para pagar em USD com cartão (Visa ou Mastercard) na página segura do nosso parceiro de pagamento. Os créditos são adicionados automaticamente assim que o pagamento é confirmado; consulte o status com GET /v1/billing/payments/{id}. POST /v1/billing/payments/{id}/cancel marca um pagamento aberto como cancelado; se ele for concluído mesmo assim, os créditos ainda são adicionados. O campo opcional provider escolhe o provedor que recebe o pagamento; os valores aceitos são whop (cartão), nowpayments (cripto) e telegram_stars (Estrelas do Telegram). GET /v1/billing/packages lista em providers os provedores abertos para checkout, e o primeiro é o padrão quando o campo não é enviado. Um provedor desconhecido ou fechado retorna HTTP 400 com o código invalid_provider, e uma lista providers vazia significa que os pagamentos estão indisponíveis no momento. Cada pacote também lista em excluded_providers os provedores que não podem recebê-lo, por exemplo telegram_stars quando o pacote passa do limite de fatura do Telegram Stars; um checkout desse pacote com um provedor excluído retorna HTTP 400 com o código package_unavailable_for_provider e não abre nenhum pagamento. GET /v1/billing/balance devolve credits, o total que você pode gastar, dividido em permanent_credits, que não expiram, subscription_credits, que expiram em subscription_expires_at (um carimbo de data em milissegundos, ou null quando não há créditos de assinatura ativos), e gift_credits, o presente único de cadastro, que expiram em gift_expires_at (null quando não há presente ativo); os gastos usam primeiro os créditos de presente, depois os de assinatura e por último os permanentes. Os planos de assinatura mensal aparecem separadamente em plans no GET /v1/billing/packages, cada um com um id, um nome, um preço mensal em usd e os créditos concedidos a cada período. POST /v1/billing/subscribe recebe um plan_id dessa lista e devolve a assinatura pendente com um checkout_url para onde enviar o pagador. As assinaturas são pagas apenas com cartão: um provider diferente de whop devolve HTTP 400 com o código invalid_provider, e um plan_id desconhecido devolve invalid_plan. Cada período pago substitui os créditos de assinatura restantes pelo valor total do plano; créditos de assinatura não usados não acumulam e os créditos permanentes não são afetados. Assinar o plano que você já tem devolve HTTP 409 com already_subscribed. Mudar para um plano maior o inicia na hora e soma ao novo período os créditos restantes do plano atual; mudar para um menor devolve HTTP 409 com downgrade_requires_cancel. GET /v1/billing/subscription devolve a assinatura ativa em subscription (plan_id, status, current_period_end e cancel_at_period_end) e um pagamento aberto em pending; cada campo é null quando não existe. Só pode haver um pagamento aberto por vez: assinar de novo o mesmo plano devolve o pagamento aberto, escolher outro plano fecha antes o que está aberto, e um pagamento ainda sendo aberto devolve HTTP 409 com checkout_in_progress. POST /v1/billing/subscription/cancel interrompe a renovação no fim do período atual: os créditos de assinatura continuam disponíveis até current_period_end e nada é reembolsado. Devolve a assinatura com cancel_at_period_end em true (chamar de novo devolve o mesmo), HTTP 404 com subscription_not_found quando não há assinatura ativa e HTTP 502 com subscription_cancel_failed quando o cancelamento não pôde ser confirmado; nesse caso, tente de novo. Cada plano em plans também traz um rank: um plano com rank maior é um upgrade em relação a um com rank menor, então leia a direção no rank, não no preço. GET /v1/billing/history lista os pagamentos de assinatura à parte, em subscription_payments (type subscription, payment_id, subscription_id, plan_id, amount_usd, status paid, refunded ou mismatch, period_end e created_at), com paginação própria via subscription_payments_offset e total em subscription_payments_total.

GET/v1/billing/balance

Seus créditos disponíveis, divididos em créditos permanentes, de assinatura e de presente.
curl
curl https://vellria.com/v1/billing/balance \
  -H "Authorization: Bearer vll_..."
#

GET/v1/billing/packages

Pacotes de créditos, a faixa de valor livre, os provedores de checkout abertos agora e os planos de assinatura. Público.
curl
curl https://vellria.com/v1/billing/packages
#

POST/v1/billing/create-checkout

Abre uma página de pagamento hospedada para um pacote ou um valor livre; depois envie o pagador para checkout_url.

Parâmetros

ParâmetroDescrição
package_idstring · corpoOpcionalUm id de pacote de GET /v1/billing/packages; ele prevalece quando price_amount também é enviado.
price_amountnumber · corpoOpcionalUm valor livre em USD entre min_usd e max_usd, arredondado para centavos.
providerstring · corpoOpcionalUm dos providers de GET /v1/billing/packages; o primeiro quando omitido.
curl
curl https://vellria.com/v1/billing/create-checkout \
  -H "Authorization: Bearer vll_..." \
  -H "Content-Type: application/json" \
  -d '{ "package_id": "pack_30", "provider": "whop" }'
curl
curl https://vellria.com/v1/billing/create-checkout \
  -H "Authorization: Bearer vll_..." \
  -H "Content-Type: application/json" \
  -d '{ "price_amount": 25 }'
#

GET/v1/billing/payments/{id}

Lê um pagamento e seu status; os créditos são adicionados quando ele é confirmado.

Parâmetros

ParâmetroDescrição
idstring · caminhoObrigatórioO id do pagamento.
curl
curl https://vellria.com/v1/billing/payments/{id} \
  -H "Authorization: Bearer vll_..."
#

POST/v1/billing/payments/{id}/cancel

Marca um pagamento aberto como cancelado. Se ele for pago mesmo assim, os créditos ainda são adicionados.

Parâmetros

ParâmetroDescrição
idstring · caminhoObrigatórioO id do pagamento.
curl
curl -X POST https://vellria.com/v1/billing/payments/{id}/cancel \
  -H "Authorization: Bearer vll_..."
#

GET/v1/billing/history

Seus pagamentos, gerações cobradas e pagamentos de assinatura, cada lista paginada separadamente.

Parâmetros

ParâmetroDescrição
limitinteger · consultaOpcionalTamanho da página, de 1 a 50 (20 por padrão).
payments_offsetinteger · consultaOpcionalOffset apenas para a lista de pagamentos.
generations_offsetinteger · consultaOpcionalOffset apenas para a lista de gerações.
subscription_payments_offsetinteger · consultaOpcionalOffset apenas para a lista de pagamentos de assinatura.
curl
curl "https://vellria.com/v1/billing/history?limit=20" \
  -H "Authorization: Bearer vll_..."
#

GET/v1/chat/usage

Suas solicitações de chat, da mais recente: origem, tokens, custo fracionário em créditos e o equivalente em USD, mais o custo acumulado ainda não descontado do seu saldo.

Parâmetros

ParâmetroDescrição
limitinteger · consultaOpcionalTamanho da página, de 1 a 50 (20 por padrão).
offsetinteger · consultaOpcionalNúmero de linhas a pular.
curl
curl "https://vellria.com/v1/chat/usage?limit=20" \
  -H "Authorization: Bearer vll_..."
#

POST/v1/billing/subscribe

Abre uma página de pagamento para um plano mensal. Apenas cartão.

Parâmetros

ParâmetroDescrição
plan_idstring · corpoObrigatórioUm id de plano de plans em GET /v1/billing/packages.
providerstring · corpoOpcionalApenas cartão (whop); qualquer outro valor retorna invalid_provider.
curl
curl https://vellria.com/v1/billing/subscribe \
  -H "Authorization: Bearer vll_..." \
  -H "Content-Type: application/json" \
  -d '{ "plan_id": "starter" }'
#

GET/v1/billing/subscription

A assinatura ativa e a página de pagamento de assinatura aberta, se houver.
curl
curl https://vellria.com/v1/billing/subscription \
  -H "Authorization: Bearer vll_..."
#

POST/v1/billing/subscription/cancel

Interrompe a renovação no fim do período atual; nada é reembolsado.
curl
curl -X POST https://vellria.com/v1/billing/subscription/cancel \
  -H "Authorization: Bearer vll_..."
#

Retenção de arquivos

#

Os arquivos gerados ficam armazenados por 7 dias e depois são excluídos do servidor. O registro continua no seu histórico, mas o arquivo fica inacessível.

Mais detalhes

A resposta de GET /v1/generations traz o campo retention_days e cada geração traz expires_at; uma requisição a um arquivo expirado retorna HTTP 410 com o código content_expired. Baixe tudo o que precisar manter por mais tempo. Você também pode excluir uma geração: DELETE /v1/generations/{id} remove o arquivo armazenado na hora e retorna purged_at. Uma geração excluída sai da API: ela não aparece mais em GET /v1/generations, e GET /v1/generations/{id}, o endpoint do arquivo e um segundo DELETE retornam HTTP 404 com o código not_found, como um id que nunca existiu. Os créditos que ela custou não são reembolsados e continuam em GET /v1/billing/history. O registro de uma geração que falhou é excluído após 30 dias; a partir daí GET /v1/generations/{id} e o endpoint do arquivo retornam HTTP 404. Uma geração que ainda está em queued ou processing não pode ser excluída e retorna HTTP 409 com o código generation_in_progress.

DELETE/v1/generations/{id}

Exclui agora uma geração: o arquivo é removido e o registro some da API (404); os créditos que ela custou continuam no histórico de cobrança.

Parâmetros

ParâmetroDescrição
idstring · caminhoObrigatórioO id da geração.
curl
curl -X DELETE https://vellria.com/v1/generations/{id} \
  -H "Authorization: Bearer vll_..."
#

Encerrar a conta

#

Encerrar a conta exclui suas gerações e os arquivos armazenados delas, seus arquivos enviados, suas chaves de API e suas mensagens de suporte, e encerra sua sessão. Os créditos que restarem na conta são perdidos e não são reembolsados.

Mais detalhes

Os registros de pagamento são mantidos como comprovantes de cobrança, então uma conta encerrada continua aparecendo no histórico de pagamentos que somos obrigados a manter. O endpoint é autenticado apenas por sessão: ele é chamado na página Conta do Painel, e uma requisição com chave de API é recusada com HTTP 403. Uma conta com um pagamento ainda não liquidado não pode ser encerrada e retorna HTTP 409 com o código pending_payment, porque os créditos desse pagamento ainda podem ser adicionados; o mesmo 409, com merge_in_progress, é retornado enquanto a conta está sendo vinculada a outra. Nos dois casos, aguarde um momento e tente novamente.

DELETE/v1/account

Encerra sua conta. Apenas por sessão: chamado pelo Painel, recusado com chave de API.
#

Política de conteúdo

#

Requisições feitas com uma chave de API chegam ao modelo como foram enviadas: o prompt e o negative_prompt chegam ao provedor byte a byte, e quando um modelo oferece a reescrita automática do prompt como configuração, ela é enviada desativada (alguns modelos de vídeo mantêm sua etapa interna de raciocínio). A moderação no seu aplicativo é responsabilidade sua.

Mais detalhes
  • Resta uma única verificação na API: requisições que envolvem abuso sexual de menores são recusadas com HTTP 400 e content_blocked antes de qualquer crédito ser cobrado (HTTP 503 com Retry-After se a verificação estiver indisponível por um instante). Nada mais é verificado, nem as imagens de referência. Os termos continuam proibindo zoofilia, incesto entre parentes de sangue, sexo sem consentimento, violência extrema e gore, conteúdo de câmera escondida e retratar uma pessoa real sem consentimento; a regra sobre menores e a de conteúdo sem consentimento são de tolerância zero e uma violação encerra a conta sem aviso prévio. Prompts enviados pelo console da Vellria também são verificados automaticamente.
  • O provedor que executa o modelo aplica o próprio filtro de segurança e pode recusar uma requisição depois que ela já começou; a geração passa para failed e os créditos cobrados no início são reembolsados automaticamente.