Saltar al contenido

Desarrolladores

Referencia de la API de Vellria

Todos los modelos desde un único endpoint HTTPS, con tu clave de API.

URL base
https://vellria.com/v1
Autenticación
Authorization: Bearer vll_...

Inicio rápido

#

Cuatro llamadas te llevan de una clave de API a un archivo terminado. Cada generación gasta créditos de tu saldo al precio que indica el catálogo; envía expectedCost y una solicitud cuyo precio haya cambiado se rechaza en lugar de cobrarse (Precios y coste esperado).

  1. Crea una clave de API

    Inicia sesión y crea una clave en la página Claves de API. Las claves empiezan por vll_; envía la tuya como token Bearer en cada llamada.

  2. Elige un modelo

    GET /v1/models lista cada id de modelo con sus tamaños, parámetros y precio en créditos. Léelo en lugar de fijar una lista de modelos en tu código.

  3. Inicia una generación

    POST /v1/generate/image con un id de modelo y un prompt. Responde 202 con el id de la generación y los créditos cobrados; una generación fallida se reembolsa.

  4. Consulta y descarga

    Llama a GET /v1/generations/{id} cada pocos segundos hasta que status sea completed, o failed con un error_code. Después descarga output_url con la misma clave.

2. Elige un modelo
curl
curl https://vellria.com/v1/models \
  -H "Authorization: Bearer vll_..."
Respuesta · 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. Inicia una generación
curl
curl https://vellria.com/v1/generate/image \
  -H "Authorization: Bearer vll_..." \
  -H "Content-Type: application/json" \
  -d '{
    "model": "vellria-seedream-5-pro",
    "prompt": "Un faro al amanecer, luz suave",
    "size": "1536*1536"
  }'
Respuesta · 202
{
  "id": "gen_3f9a1c7e5b2d4086",
  "status": "processing",
  "model": "vellria-seedream-5-pro",
  "size": "1536*1536",
  "cost_cents": 10
}
4. Consulta y descarga
curl
curl https://vellria.com/v1/generations/{id} \
  -H "Authorization: Bearer vll_..."
Respuesta · 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_..."

Autenticación

#

Envía tu clave de API como token Bearer en el encabezado Authorization de cada solicitud. Las claves empiezan con el prefijo vll_ y se crean en la página Claves de API.

http
Authorization: Bearer vll_...

Errores

#

Todos los errores llegan con el mismo cuerpo JSON. Decide según error.code: es estable, mientras que error.message está escrito para personas y puede cambiar. error.param indica el campo que falla cuando lo hay, y algunos códigos añaden error.reason (image_unreadable: animated, transparent, too_small o too_large). Nunca se retienen créditos por una solicitud que devuelve un error: los errores de solicitud se lanzan antes de cobrar nada, y una generación que no puede iniciarse se reembolsa.

Códigos de estado HTTP

HTTPSignificado
400La solicitud no es válida; error.code indica qué campo o regla falla.
401Falta la clave de API o no es válida.
402No hay créditos suficientes.
403Esta cuenta o clave no puede usar el endpoint.
404El recurso no existe o pertenece a otra cuenta.
409La solicitud entra en conflicto con el estado actual, por ejemplo un precio que cambió o una generación que sigue en curso.
410El archivo superó su periodo de conservación y se eliminó.
413El archivo o el cuerpo es demasiado grande.
415El Content-Type no es un tipo de imagen aceptado.
416No se puede servir el rango de bytes solicitado.
429Demasiadas solicitudes; espera el tiempo del encabezado Retry-After y vuelve a intentarlo.
500Error inesperado de nuestra parte.
502El modelo o el proveedor de pagos rechazó la solicitud o falló.
503El servicio no está disponible temporalmente; no se cobra nada.

Códigos de error

Autenticación y cuenta8authentication_requiredaccount_deletedaccount_suspendedaccount_mergedforbiddenpending_paymentmerge_in_progressaccount_delete_failed
CódigoHTTPSignificado
authentication_required401No se envió ninguna clave de API, o no es válida o fue revocada.
account_deleted403La cuenta se cerró.
account_suspended403La cuenta está suspendida.
account_merged403La cuenta se fusionó con otra; usa la clave de esa cuenta.
forbidden403El endpoint solo funciona con una sesión de la consola, no con una clave de API.
pending_payment409Un pago aún no se ha liquidado; inténtalo de nuevo cuando lo haga.
merge_in_progress409La cuenta se está vinculando con otra; inténtalo de nuevo en un momento.
account_delete_failed500No se pudo cerrar la cuenta; inténtalo de nuevo en un momento.
Validación de la solicitud22invalid_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ódigoHTTPSignificado
invalid_body400El cuerpo no es un JSON válido o le falta un campo obligatorio.
invalid_prompt400Falta prompt o está vacío.
prompt_too_long400prompt es más largo que el max_prompt_length del modelo.
invalid_expected_cost400expectedCost no es un número entero no negativo.
invalid_model400El id del modelo no está en GET /v1/models.
invalid_size400size no es uno de los tamaños del modelo.
invalid_duration400duration está fuera del rango del modo.
invalid_resolution400resolution no es una de las resoluciones del modo.
invalid_ratio400ratio no es una de las relaciones de aspecto del modo.
invalid_reference_mode400reference_mode no es frame ni subject, o el modelo no tiene modo subject.
invalid_reference_token400El prompt cita un @image sin referencia correspondiente, por ejemplo @image3 con dos imágenes.
text_to_video_not_supported400El modelo necesita una imagen de referencia y no puede ejecutarse solo con un prompt.
invalid_<parameter>400Un parámetro propio del modelo tiene un valor que el modelo no declara.
invalid_type400type no es image ni video.
invalid_status400status no es queued, processing ni completed.
invalid_query400El texto de búsqueda es demasiado largo.
invalid_ids400ids no es una lista de 1 a 50 ids de generación.
invalid_until400until no es una marca de tiempo válida.
invalid_generation_type400Solo las generaciones de imagen pueden convertirse en referencia.
thumbnail_unsupported400Las miniaturas existen solo para imágenes.
thumbnail_size_unsupported400thumb no es un tamaño de miniatura admitido.
invalid_range416No se puede satisfacer el encabezado Range.
Prompts, referencias y subidas11content_blockedinvalid_image_urlsreference_not_publicimage_unreadablereference_not_allowedempty_uploadinvalid_imagefile_too_largepayload_too_largeunsupported_media_typeupload_in_use
CódigoHTTPSignificado
content_blocked400El filtro de seguridad rechazó el prompt antes de gastar ningún crédito.
invalid_image_urls400image_urls tiene un formato incorrecto, trae demasiadas o muy pocas imágenes para el modelo, o falta donde el modo lo exige.
reference_not_public400Una referencia apunta a una URL de archivo autenticada; súbela con POST /v1/uploads en su lugar.
image_unreadable400No se puede usar una imagen de referencia; error.reason indica el motivo (animated, transparent, too_small o too_large).
reference_not_allowed403Las imágenes de referencia no están disponibles en este servicio.
empty_upload400El cuerpo de la subida está vacío.
invalid_image400La subida no es una imagen legible del tipo declarado.
file_too_large413El archivo supera el tamaño permitido.
payload_too_large413El cuerpo de la solicitud supera el tamaño permitido.
unsupported_media_type415El Content-Type no es uno de los tipos de imagen aceptados.
upload_in_use409La subida se usó en una generación; se conserva hasta que caduque.
Generaciones y archivos8not_foundcontent_expiredgeneration_in_progressgeneration_not_completedupstream_errorreference_rejectedgeneration_unavailablereference_unavailable
CódigoHTTPSignificado
not_found404No existe ese recurso en esta cuenta.
content_expired410El archivo superó su periodo de conservación y se eliminó.
generation_in_progress409La generación sigue en queued o processing.
generation_not_completed409La generación aún no se ha completado.
upstream_error502No se pudo iniciar la generación; los créditos se reembolsan.
reference_rejected502El modelo rechazó una imagen de referencia; los créditos se reembolsan.
generation_unavailable503La generación no está disponible temporalmente; no se cobra nada.
reference_unavailable503No se pudo preparar una imagen de referencia; no se cobra nada.
Créditos y pagos18insufficient_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ódigoHTTPSignificado
insufficient_balance402La cuenta no tiene créditos suficientes.
price_changed409El precio difiere de expectedCost; el precio actual está en price.cost y no se cobra nada.
invalid_package400package_id no está en GET /v1/billing/packages.
invalid_amount400price_amount está fuera del rango de min_usd a max_usd.
invalid_provider400El proveedor es desconocido, está cerrado o no se acepta para este pago.
package_unavailable_for_provider400El proveedor elegido no puede vender este paquete (figura en excluded_providers del paquete, por ejemplo telegram_stars en los paquetes grandes); no se abre ningún pago.
invalid_plan400plan_id no es uno de los planes.
checkout_locked429El pago con tarjeta (provider whop) está bloqueado por un tiempo tras demasiados intentos fallidos con tarjeta; cripto y Telegram Stars siguen abiertos. Consulta Retry-After.
payment_create_failed502El proveedor de pagos no pudo abrir el pago; inténtalo de nuevo.
not_configured503Los pagos no están disponibles en este momento.
already_paid409El pago ya se completó.
already_subscribed409Ya tienes este plan.
downgrade_requires_cancel409Pasar a un plan menor requiere cancelar antes.
checkout_in_progress409Aún se está abriendo un pago de suscripción.
subscription_changed409La suscripción cambió mientras se abría el pago; recarga e inténtalo de nuevo.
subscription_under_review409El primer pago de una suscripción está en revisión; no se abre un nuevo pago hasta que se resuelva.
subscription_not_found404No hay ninguna suscripción activa.
subscription_cancel_failed502No se pudo confirmar la cancelación; inténtalo de nuevo.
Límites de frecuencia2rate_limit_exceededreference_rate_limited
CódigoHTTPSignificado
rate_limit_exceeded429Demasiadas solicitudes en la ventana; espera el tiempo de Retry-After.
reference_rate_limited429Se superó el límite por hora de solicitudes con imágenes de referencia.
Conversación9insufficient_creditsinvalid_jsoninvalid_requestcontext_too_longunsupported_contentdata_url_not_supportedinvalid_image_urltoo_many_imagesempty_response
CódigoHTTPSignificado
insufficient_credits402El saldo no cubre la respuesta más larga posible (max_tokens); no se cobra nada.
invalid_json400El cuerpo no es un JSON válido.
invalid_request400Falta un campo o es incorrecto (messages, role, stream, max_tokens, temperature o top_p); error.param indica cuál.
context_too_long400Demasiados mensajes o caracteres para los límites del modelo.
unsupported_content400Una parte del contenido no es text ni image_url, o hay una imagen fuera de un mensaje user.
data_url_not_supported400La imagen se envió como data URL; súbela con POST /v1/uploads y pasa la URL devuelta.
invalid_image_url400image_url.url no es una URL http(s).
too_many_images400Más imágenes de las que el modelo acepta por mensaje o por solicitud.
empty_response502El modelo devolvió una respuesta vacía; no se cobra nada.
Servidor1internal_error
CódigoHTTPSignificado
internal_error500Error inesperado de nuestra parte.

Generaciones fallidas

Una generación que falla después de haber empezado no es un error HTTP: GET /v1/generations/{id} la devuelve con estado failed y uno de estos valores de error_code, y sus créditos se reembolsan automáticamente.

Ver 10 códigos10content_blockedprovider_errorprovider_timeoutprovider_cancelledprovider_unavailableabandonedunknown_providerimage_blockedmoderation_failedreference_rejected
CódigoSignificado
content_blockedUn control de seguridad rechazó el prompt después de que la generación entrara en cola.
provider_errorEl modelo no logró producir un resultado.
provider_timeoutEl modelo no terminó a tiempo.
provider_cancelledEl modelo canceló el trabajo.
provider_unavailableEl modelo no estaba disponible.
abandonedEl trabajo estuvo demasiado tiempo sin respuesta y se abandonó.
unknown_providerNo se pudo rastrear el trabajo hasta una ejecución del modelo.
image_blockedSolo filas antiguas: una imagen de referencia fue rechazada por un control que ya no se usa.
moderation_failedSolo filas antiguas: falló el propio control.
reference_rejectedEl modelo rechazó una imagen de referencia.
Respuesta · 400
{
  "error": {
    "message": "vellria-seedance-2-5 does not support reference_mode \"subject\"",
    "type": "invalid_request_error",
    "param": "reference_mode",
    "code": "invalid_reference_mode"
  }
}
Respuesta · 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"
  }
}
Respuesta · 409
{
  "error": {
    "message": "Price changed: this request now costs 10 credits",
    "type": "invalid_request_error",
    "param": "expectedCost",
    "code": "price_changed"
  },
  "price": {
    "cost": 10
  }
}

Límites de frecuencia

#

20 imágenes y 10 videos por minuto. Las generaciones con imágenes de referencia también comparten un límite de 120 intentos por hora, incluidos los rechazados; al superarlo, los endpoints de generación devuelven el código reference_rate_limited. Superar un límite devuelve HTTP 429; espera el tiempo que indica el encabezado Retry-After y vuelve a intentarlo.

Catálogo de modelos

#

Los modelos válidos, con su costo en créditos, se devuelven como { image: [...], video: [...] }. Lee este endpoint en lugar de fijar una lista de precios en tu código.

Más detalles

Cada entrada incluye id (el valor que envías como model), label, kind (image o video), family y developer, la empresa que lo creó (null en un modelo que se ofrece con el nombre Vellria), además de dos modos, text y reference: envía solo un prompt y el modelo se ejecuta en modo text —una llamada text-to-image o text-to-video—; adjunta una o más imágenes de referencia a ese mismo id y se ejecuta en modo reference en su lugar —image-to-image o image-to-video—, no hay un id separado para elegir entre los dos. Cada modo incluye sus propios sizes (imagen) o resolutions (video), un default, max_prompt_length (el límite de caracteres que ese modo aplica a prompt, y a cualquier parámetro de texto libre que no declare el suyo) y parameters. Cada tamaño o resolución incluye ratio y tier junto a su etiqueta, así que nunca tienes que analizar la etiqueta para saber la relación de aspecto o el nivel de resolución (un ratio adaptive significa que el resultado toma sus proporciones de la imagen de entrada). reference_images es null en modo text; en modo reference incluye el mínimo y el máximo de imágenes de referencia que ese modo acepta, extra_credits cobrados por cada referencia después de la primera, y los límites de archivo que debe cumplir una imagen de referencia. Un modelo cuyos huecos de referencia tienen roles fijos los enumera en orden en reference_images.roles (null en todos los modelos por ahora): la primera URL de image_urls tomaría el primer rol, cada URL siguiente el siguiente, y el último rol se repetiría para el resto.

Modelos de imagen

#
  • Modelo
    Seedream 5 Pro Sin censuravellria-seedream-5-pro
    Modos
    Texto a imagenImagen a imagen
    Tamaños
    2K · 5 tamaños
    Precio
    10 créditos
    Parámetros

    Texto a imagen · 10 créditos en todos los tamaños + 1 crédito por cada imagen de referencia después de la primera

    ParámetroValores permitidosPredeterminado
    image_urlsTipo: string[]0–10 URL https (obligatorio)—
    sizeTipo: string1536*15361776*13281328*17762048*11521152*20481536*1536
    reasoningTipo: stringenableddisabledenabled

    Imagen a imagen · 10 créditos en todos los tamaños + 1 crédito por cada imagen de referencia después de la primera

    ParámetroValores permitidosPredeterminado
    image_urlsTipo: string[]1–10 URL https (obligatorio)—
    Página del modelo — Seedream 5 Pro Sin censura
  • Modelo
    Qwen 3 Sin censuravellria-qwen-3
    Modos
    Texto a imagenImagen a imagen
    Tamaños
    1K, 1.5K, 2K · 8 tamaños
    Precio
    8 créditos
    Parámetros

    Texto a imagen · 8 créditos en todos los tamaños

    ParámetroValores permitidosPredeterminado
    sizeTipo: string1024*10241536*10241024*15362048*15361536*20482048*11521152*20482048*20481024*1024
    seedTipo: integer0–2147483647aleatorio si se omite, se devuelve en la respuesta
    negative_promptTipo: stringtexto, como máximo 8000 caracteres—

    Imagen a imagen · 8 créditos en todos los tamaños + 1 crédito por cada imagen de referencia después de la primera

    ParámetroValores permitidosPredeterminado
    image_urlsTipo: string[]1–3 URL https (obligatorio)—
    sizeTipo: string1024*10241280*960960*12801280*720720*12801440*14401024*1024
    Página del modelo — Qwen 3 Sin censura
  • Modelo
    Qwen 3 Pro Sin censuravellria-qwen-3-pro
    Modos
    Texto a imagenImagen a imagen
    Tamaños
    1K, 1.5K · 3 tamaños
    Precio
    10 créditos
    Parámetros

    Texto a imagen · 10 créditos en todos los tamaños

    ParámetroValores permitidosPredeterminado
    sizeTipo: string1024*10241536*10241024*15361024*1024
    seedTipo: integer0–2147483647aleatorio si se omite, se devuelve en la respuesta
    negative_promptTipo: stringtexto, como máximo 8000 caracteres—

    Imagen a imagen · 10 créditos en todos los tamaños + 1 crédito por cada imagen de referencia después de la primera

    ParámetroValores permitidosPredeterminado
    image_urlsTipo: string[]1–3 URL https (obligatorio)—
    sizeTipo: string1024*10241280*960960*12801280*720720*12801440*14401024*1024
    Página del modelo — Qwen 3 Pro Sin censura
  • Modelo
    Qwen Image Edit 2511 Sin censuravellria-qwen-image-edit-2511
    Modos
    Texto a imagenImagen a imagen
    Tamaños
    1K, 1.3K · 5 tamaños
    Precio
    6 créditos
    Parámetros

    Texto a imagen · 6 créditos en todos los tamaños

    ParámetroValores permitidosPredeterminado
    sizeTipo: string1024*10241280*960960*12801280*720720*12801024*1024
    seedTipo: integer0–2147483647aleatorio si se omite, se devuelve en la respuesta

    Imagen a imagen · 6 créditos en todos los tamaños

    ParámetroValores permitidosPredeterminado
    image_urlsTipo: string[]1–3 URL https (obligatorio)—
    sizeTipo: string1K1K
    Página del modelo — Qwen Image Edit 2511 Sin censura
  • Modelo
    Qwen Image 2.1 Sin censuravellria-qwen-image-2-1
    Modos
    Texto a imagenImagen a imagen
    Tamaños
    1K, 1.2K, 1.3K · 7 tamaños
    Precio
    desde 7 créditos
    Parámetros

    Texto a imagen · 7 créditos en todos los tamaños

    ParámetroValores permitidosPredeterminado
    sizeTipo: string1024*10241248*832832*12481184*896896*11841376*768768*13761024*1024
    seedTipo: integer0–2147483647aleatorio si se omite, se devuelve en la respuesta

    Imagen a imagen · 8 créditos en todos los tamaños + 1 crédito por cada imagen de referencia después de la primera

    ParámetroValores permitidosPredeterminado
    image_urlsTipo: string[]1–10 URL https (obligatorio)—
    sizeTipo: string1K1024*10241248*832832*12481184*896896*11841376*768768*13761K
    Página del modelo — Qwen Image 2.1 Sin censura
  • Modelo
    Seedream 5 Lite Sin censuravellria-seedream-5-lite
    Modos
    Texto a imagenImagen a imagen
    Tamaños
    3K, 4K · 8 tamaños
    Precio
    8 créditos
    Parámetros

    Texto a imagen · 8 créditos en todos los tamaños

    ParámetroValores permitidosPredeterminado
    sizeTipo: string3072*30723456*25922592*34563744*24962496*37444096*23042304*40964704*20163072*3072

    Imagen a imagen · 8 créditos en todos los tamaños

    ParámetroValores permitidosPredeterminado
    image_urlsTipo: string[]1–10 URL https (obligatorio)—
    Página del modelo — Seedream 5 Lite Sin censura
  • Modelo
    Seedream 4.5 Sin censuravellria-seedream-4-5
    Modos
    Texto a imagenImagen a imagen
    Tamaños
    2K · 8 tamaños
    Precio
    9 créditos
    Parámetros

    Texto a imagen · 9 créditos en todos los tamaños

    ParámetroValores permitidosPredeterminado
    sizeTipo: string2048*20482304*17281728*23042496*16641664*24962848*16001600*28483136*13442048*2048

    Imagen a imagen · 9 créditos en todos los tamaños

    ParámetroValores permitidosPredeterminado
    image_urlsTipo: string[]1–10 URL https (obligatorio)—
    Página del modelo — Seedream 4.5 Sin censura
  • Modelo
    Seedream 4 Sin censuravellria-seedream-4
    Modos
    Texto a imagenImagen a imagen
    Tamaños
    2K · 5 tamaños
    Precio
    7 créditos
    Parámetros

    Texto a imagen · 7 créditos en todos los tamaños

    ParámetroValores permitidosPredeterminado
    sizeTipo: string2048*20482368*17761776*23682816*15841584*28162048*2048

    Imagen a imagen · 7 créditos en todos los tamaños

    ParámetroValores permitidosPredeterminado
    image_urlsTipo: string[]1–10 URL https (obligatorio)—
    sizeTipo: string2K2048*20482368*17761776*23682816*15841584*28162K
    Página del modelo — Seedream 4 Sin censura
  • Modelo
    Wan 2.7 Sin censuravellria-wan-2-7
    Modos
    Texto a imagenImagen a imagen
    Tamaños
    2K · 1 tamaño
    Precio
    8 créditos
    Parámetros

    Texto a imagen · 8 créditos en todos los tamaños

    ParámetroValores permitidosPredeterminado
    sizeTipo: string2K2K
    seedTipo: integer0–2147483647aleatorio si se omite, se devuelve en la respuesta

    Imagen a imagen · 8 créditos en todos los tamaños

    ParámetroValores permitidosPredeterminado
    image_urlsTipo: string[]1–9 URL https (obligatorio)—
    Página del modelo — Wan 2.7 Sin censura
  • Modelo
    Bria FIBO 2.0 Sin censuravellria-bria-fibo-2-0
    Modos
    Texto a imagenImagen a imagen
    Tamaños
    2K, 1K · 30 tamaños
    Precio
    10 créditos
    Parámetros

    Texto a imagen · 10 créditos en todos los tamaños

    ParámetroValores permitidosPredeterminado
    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–2147483647aleatorio si se omite, se devuelve en la respuesta

    Imagen a imagen · 10 créditos en todos los tamaños

    ParámetroValores permitidosPredeterminado
    image_urlsTipo: string[]1–4 URL https (obligatorio)—
    sizeTipo: string1K1K
    Página del modelo — Bria FIBO 2.0 Sin censura
  • Modelo
    Bria FIBO 1.5 Sin censuravellria-bria-fibo-1-5
    Modos
    Texto a imagenImagen a imagen
    Tamaños
    2K, 2.3K · 7 tamaños
    Precio
    10 créditos
    Parámetros

    Texto a imagen · 10 créditos en todos los tamaños

    ParámetroValores permitidosPredeterminado
    sizeTipo: string2048*20482304*15361536*23042048*15361536*20482048*11521152*20482048*2048
    seedTipo: integer0–2147483647aleatorio si se omite, se devuelve en la respuesta

    Imagen a imagen · 10 créditos en todos los tamaños

    ParámetroValores permitidosPredeterminado
    image_urlsTipo: string[]1–4 URL https (obligatorio)—
    sizeTipo: string1K1K
    Página del modelo — Bria FIBO 1.5 Sin censura
  • Modelo
    MiniMax H3 Image Sin censuravellria-minimax-h3-image
    Modos
    Texto a imagenImagen a imagen
    Tamaños
    1K, 1.2K, 1.3K · 7 tamaños
    Precio
    8 créditos
    Parámetros

    Texto a imagen · 8 créditos en todos los tamaños

    ParámetroValores permitidosPredeterminado
    sizeTipo: string1024*10241248*832832*12481184*896896*11841376*768768*13761024*1024
    seedTipo: integer0–2147483647aleatorio si se omite, se devuelve en la respuesta

    Imagen a imagen · 8 créditos en todos los tamaños + 1 crédito por cada imagen de referencia después de la primera

    ParámetroValores permitidosPredeterminado
    image_urlsTipo: string[]1–9 URL https (obligatorio)—
    sizeTipo: string1K1024*10241248*832832*12481184*896896*11841376*768768*13761K
    Página del modelo — MiniMax H3 Image Sin censura
  • Modelo
    Seedream 5 Flash Sin censuravellria-seedream-5-flash
    Modos
    Texto a imagenImagen a imagen
    Tamaños
    2K · 5 tamaños
    Precio
    8 créditos
    Parámetros

    Texto a imagen · 8 créditos en todos los tamaños

    ParámetroValores permitidosPredeterminado
    sizeTipo: string2048*20482368*17761776*23682816*15841584*28162048*2048

    Imagen a imagen · 8 créditos en todos los tamaños

    ParámetroValores permitidosPredeterminado
    image_urlsTipo: string[]1–10 URL https (obligatorio)—
    sizeTipo: string2K2048*20482368*17761776*23682816*15841584*28162K
    Página del modelo — Seedream 5 Flash Sin censura
  • Modelo
    Z-Image Turbo Sin censuravellria-z-image-turbo
    Modos
    Texto a imagen
    Tamaños
    1K, 1.5K, 2K · 6 tamaños
    Precio
    2 créditos
    Parámetros

    Texto a imagen · 2 créditos en todos los tamaños

    ParámetroValores permitidosPredeterminado
    sizeTipo: string1024*10241536*10241024*15362048*11521152*20482048*20481024*1024
    seedTipo: integer0–2147483647aleatorio si se omite, se devuelve en la respuesta
    Página del modelo — Z-Image Turbo Sin censura
  • Modelo
    Anima Sin censuravellria-anima
    Modos
    Texto a imagenImagen a imagen
    Tamaños
    1K, 1.2K, 1.1K, 1.3K · 7 tamaños
    Precio
    5 créditos
    Parámetros

    Texto a imagen · 5 créditos en todos los tamaños

    ParámetroValores permitidosPredeterminado
    sizeTipo: string1024*10241248*832832*12481168*880880*11681360*768768*13601024*1024
    seedTipo: integer0–2147483647aleatorio si se omite, se devuelve en la respuesta

    Imagen a imagen · 5 créditos en todos los tamaños

    ParámetroValores permitidosPredeterminado
    image_urlsTipo: string[]1–1 URL https (obligatorio)—
    sizeTipo: string1K1K
    Página del modelo — Anima Sin censura
  • Modelo
    Vellria Anime Pro Spicy Sin censuravellria-anime-pro-spicy
    Modos
    Texto a imagenImagen a imagen
    Tamaños
    2K · 5 tamaños
    Precio
    10 créditos
    Parámetros

    Texto a imagen · 10 créditos en todos los tamaños + 1 crédito por cada imagen de referencia después de la primera

    ParámetroValores permitidosPredeterminado
    image_urlsTipo: string[]0–10 URL https (obligatorio)—
    sizeTipo: string1536*15361776*13281328*17762048*11521152*20481536*1536

    Imagen a imagen · 10 créditos en todos los tamaños + 1 crédito por cada imagen de referencia después de la primera

    ParámetroValores permitidosPredeterminado
    image_urlsTipo: string[]1–10 URL https (obligatorio)—
    Página del modelo — Vellria Anime Pro Spicy Sin censura
  • Modelo
    Pruna P-Image Sin censuravellria-p-image
    Modos
    Texto a imagenImagen a imagen
    Tamaños
    1K, 1.2K, 1.1K, 1.3K · 7 tamaños
    Precio
    4 créditos
    Parámetros

    Texto a imagen · 4 créditos en todos los tamaños

    ParámetroValores permitidosPredeterminado
    sizeTipo: string1024*10241216*832832*12161152*896896*11521344*768768*13441024*1024
    seedTipo: integer0–2147483647aleatorio si se omite, se devuelve en la respuesta

    Imagen a imagen · 4 créditos en todos los tamaños

    ParámetroValores permitidosPredeterminado
    image_urlsTipo: string[]1–5 URL https (obligatorio)—
    sizeTipo: string1K1024*10241216*832832*12161152*896896*11521344*768768*13441K
    Página del modelo — Pruna P-Image Sin censura
  • Modelo
    Flux 2 Klein 9B Sin censuravellria-flux-2-klein-9b
    Modos
    Texto a imagenImagen a imagen
    Tamaños
    1K, 1.2K, 1.1K, 1.3K · 7 tamaños
    Precio
    5 créditos
    Parámetros

    Texto a imagen · 5 créditos en todos los tamaños

    ParámetroValores permitidosPredeterminado
    sizeTipo: string1024*10241248*832832*12481152*864864*11521360*768768*13601024*1024
    seedTipo: integer0–2147483647aleatorio si se omite, se devuelve en la respuesta

    Imagen a imagen · 5 créditos en todos los tamaños

    ParámetroValores permitidosPredeterminado
    image_urlsTipo: string[]1–3 URL https (obligatorio)—
    sizeTipo: string1K1024*10241248*832832*12481152*864864*11521360*768768*13601K
    Página del modelo — Flux 2 Klein 9B Sin censura
  • Modelo
    Moss Image Sin censuravellria-moss-image
    Modos
    Texto a imagen
    Tamaños
    1K, 1.2K, 1.1K, 1.3K, 1.4K, 1.5K, 1.7K · 15 tamaños
    Precio
    5 créditos
    Parámetros

    Texto a imagen · 5 créditos en todos los tamaños

    ParámetroValores permitidosPredeterminado
    sizeTipo: string1024*10241248*832832*12481168*880880*11681136*912912*11361360*768768*13601440*720720*14401552*656656*15521760*576576*17601024*1024
    seedTipo: integer0–2147483647aleatorio si se omite, se devuelve en la respuesta
    Página del modelo — Moss Image Sin censura
  • Modelo
    Jib Mix Qwen Image Sin censuravellria-jib-mix-qwen-image
    Modos
    Texto a imagen
    Tamaños
    1K, 1.2K, 1.1K, 1.3K · 7 tamaños
    Precio
    5 créditos
    Parámetros

    Texto a imagen · 5 créditos en todos los tamaños

    ParámetroValores permitidosPredeterminado
    sizeTipo: string1024*10241248*832832*12481152*864864*11521360*768768*13601024*1024
    seedTipo: integer0–2147483647aleatorio si se omite, se devuelve en la respuesta
    Página del modelo — Jib Mix Qwen Image Sin censura
  • Modelo
    Z-Image Spicy Sin censuravellria-z-image-spicy
    Modos
    Texto a imagen
    Tamaños
    1K, 1.5K · 7 tamaños
    Precio
    4 créditos
    Parámetros

    Texto a imagen · 4 créditos en todos los tamaños

    ParámetroValores permitidosPredeterminado
    sizeTipo: string1024*10241024*15361536*10241152*15361536*1152864*15361536*8641024*1536
    seedTipo: integer0–2147483647aleatorio si se omite, se devuelve en la respuesta
    Página del modelo — Z-Image Spicy Sin censura
  • Modelo
    Z-Image Spicy Pro Sin censuravellria-z-image-spicy-pro
    Modos
    Texto a imagen
    Tamaños
    1K, 2K, 2.5K · 8 tamaños
    Precio
    5 créditos
    Parámetros

    Texto a imagen · 5 créditos en todos los tamaños

    ParámetroValores permitidosPredeterminado
    sizeTipo: string1024*10242048*20481536*20482048*15361680*25202520*16801440*25602560*14401024*1024
    seedTipo: integer0–2147483647aleatorio si se omite, se devuelve en la respuesta
    Página del modelo — Z-Image Spicy Pro Sin censura
  • Modelo
    Qwen Image Edit Spicy Sin censuravellria-qwen-image-edit-spicy
    Modos
    Texto a imagenImagen a imagen
    Tamaños
    1K · 1 tamaño
    Precio
    10 créditos
    Parámetros

    Texto a imagen · 10 créditos en todos los tamaños

    ParámetroValores permitidosPredeterminado
    image_urlsTipo: string[]1–3 URL https (obligatorio)—
    sizeTipo: string1K1K
    seedTipo: integer0–2147483647aleatorio si se omite, se devuelve en la respuesta

    Imagen a imagen · 10 créditos en todos los tamaños

    Página del modelo — Qwen Image Edit Spicy Sin censura

GET/v1/models

Lista todos los modelos con sus modos, tamaños o resoluciones, parámetros y precios en créditos. Público: no necesita clave.
curl
curl https://vellria.com/v1/models \
  -H "Authorization: Bearer vll_..."
#

Generación de imágenes

#

Crea una imagen a partir de un prompt de texto, o adjunta imágenes de referencia en image_urls para editarlas o cambiarles el estilo con el mismo id de modelo. La llamada responde de inmediato con HTTP 202 y el id de la generación; la imagen se crea en segundo plano, así que consulta GET /v1/generations/{id} hasta que el estado sea completed y descárgala desde output_url.

Más detalles

Los créditos del tamaño elegido se cobran al iniciar la generación y se reembolsan automáticamente si falla. Los tamaños, límites de referencia, parámetros y precios de cada modelo salen de GET /v1/models.

POST/v1/generate/image

Inicia una generación de imagen. Devuelve 202 con el id de la generación; consúltala para obtener el resultado.

Parámetros

ParámetroDescripción
modelstring · cuerpoOpcionalId del modelo de GET /v1/models.
promptstring · cuerpoObligatorioLo que se va a generar. Como máximo max_prompt_length caracteres del modelo.
sizestring · cuerpoOpcionalUn id de tamaño de los sizes del modelo; si se omite, el tamaño predeterminado del modelo.
image_urlsstring[] · cuerpoOpcionalURL de las imágenes de referencia: una URL de subida de POST /v1/uploads o cualquier URL https pública. Cuántas acepta un modelo y los límites de archivo están en reference_images.
image_urlstring · cuerpoOpcionalAtajo para una sola imagen de referencia.
expectedCostinteger · cuerpoOpcionalComprobación de precio opcional: los créditos que esperas que cueste esta solicitud. Un precio distinto devuelve 409 price_changed y no se cobra nada.

Cada modelo también acepta los parámetros que aparecen en parameters dentro de su entrada de GET /v1/models, como seed; un valor fuera de lo que declara el modelo devuelve 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
  }'
#

Tamaños, parámetros y precios de cada modelo: Modelos de imagen.

Precios y coste esperado

#

Los dos endpoints de generación aceptan un campo opcional expectedCost: los créditos que esperas que cueste exactamente esta solicitud, según los precios de GET /v1/models (modelo, tamaño o resolución, duración e imágenes de referencia adicionales). Si no coincide con lo que se cobraría de verdad, la llamada devuelve HTTP 409 con el código price_changed y el precio actual en price.cost; no se cobra nada y no empieza ninguna generación. Omite el campo para saltarte la comprobación.

Generación de video

#

Adjunta imágenes de referencia en image_urls y elige cómo las usa el modelo con reference_mode. El valor por defecto, frame (también si omites el campo), hace que el video empiece desde esa imagen. subject trata cada imagen como referencia de una persona, un objeto o un escenario que debe aparecer en el video, y el prompt las cita como @image1, @image2, etc., en el orden de image_urls (sin distinguir mayúsculas).

Más detalles

El modo subject solo existe en los modelos cuya entrada de GET /v1/models trae un bloque subject (null en los demás); ese bloque indica sus propias resoluciones, duraciones, proporciones y parámetros, el límite de referencias en subject.reference_images.max y el patrón del token en subject.reference_token. Cuesta lo mismo que imagen a video en ese modelo, sin cargo por referencia. Errores, todos HTTP 400 y antes de gastar créditos: invalid_reference_mode si el valor no es frame ni subject o el modelo no tiene modo subject; invalid_image_urls si el modo subject no recibe ninguna referencia o recibe más de las que admite el modelo; invalid_reference_token si el prompt cita un @image sin referencia que le corresponda (por ejemplo, @image3 con dos imágenes). En modo frame, @image1 es texto normal.

POST/v1/generate/video

Inicia una generación de video a partir de un prompt, con imágenes de referencia opcionales. Devuelve 202 con el id de la generación.

Parámetros

ParámetroDescripción
modelstring · cuerpoOpcionalId del modelo de GET /v1/models.
promptstring · cuerpoObligatorioLo que se va a generar. Como máximo max_prompt_length caracteres del modelo.
durationinteger · cuerpoOpcionalDuración en segundos, dentro del rango de duration del modo; un valor fuera de él devuelve 400.
resolutionstring · cuerpoOpcionalUn id de resolución de las resolutions del modo.
ratiostring · cuerpoOpcionalUn id de relación de aspecto de los ratios del modo.
reference_modeframe | subject · cuerpoOpcionalframe (el valor por defecto) hace que el video empiece desde la primera imagen; subject usa cada imagen como referencia que el prompt cita como @image1, @image2, etc.
image_urlsstring[] · cuerpoOpcionalURL de las imágenes de referencia: una URL de subida de POST /v1/uploads o cualquier URL https pública. Cuántas acepta un modelo y los límites de archivo están en reference_images.
image_urlstring · cuerpoOpcionalAtajo para una sola imagen de referencia.
expectedCostinteger · cuerpoOpcionalComprobación de precio opcional: los créditos que esperas que cueste esta solicitud. Un precio distinto devuelve 409 price_changed y no se cobra nada.

Cada modelo también acepta los parámetros que aparecen en parameters dentro de su entrada de GET /v1/models, como seed; un valor fuera de lo que declara el modelo devuelve 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 son las personas y objetos que cita el 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"
  }'
#

Tamaños, parámetros y precios de cada modelo: Modelos de vídeo.

Conversación

#

Chat y roleplay sin censura: interpreta personajes, escribe historias a dos manos o simplemente conversa, y comparte imágenes para que las entienda. Por 1M de tokens: 50 créditos (USD 0.50) de entrada, 200 créditos (USD 2.00) de salida.

Más detalles

Es compatible con OpenAI: apunta cualquier SDK de OpenAI a la URL base de Vellria con tu clave vll_. Cada respuesta se cobra por token de tus créditos.

Por 1M de tokens: entrada 50 créditos (USD 0.50) · entrada en caché 5 créditos (USD 0.05) · salida 200 créditos (USD 2.00).

  • Las respuestas no tienen filtro: Vellria no añade moderación de contenido a este endpoint, así que moderar a tus propios usuarios finales es responsabilidad tuya. Antes de tus mensajes se añade una instrucción de identidad de una línea; sus tokens no se cobran y no cuentan en usage.
  • Imágenes: añade partes image_url a un mensaje user, como mucho 4 por mensaje y 8 por solicitud. Sube primero la imagen con POST /v1/uploads y pasa la URL devuelta; las data URL se rechazan con data_url_not_supported.
  • max_tokens vale 1024 por defecto y como mucho 4096. Los campos de razonamiento (reasoning, thinking) se ignoran y las respuestas nunca contienen razonamiento.
  • Con stream: true la respuesta llega como eventos del servidor (líneas data:) en el formato de fragmentos de OpenAI y termina con data: [DONE]. El fragmento anterior tiene choices vacío y lleva usage y el cobro. Un error tras empezar el streaming llega como evento data: {"error": …}; si ya se envió texto, ese texto se cobra (el fragmento con usage llega justo antes del error); si no, no se cobra nada.
  • Cada respuesta lleva usage de OpenAI más credits_charged (créditos fraccionarios), cost_usd y credits_debited (créditos enteros descontados ahora del saldo; las fracciones se acumulan en tu cuenta). Las respuestas rechazadas, fallidas o vacías no se cobran; un streaming que cancelas se cobra por los tokens ya generados.
  • El saldo debe cubrir la respuesta más larga posible antes de empezar (si no, 402 insufficient_credits). Las solicitudes por minuto y las que se ejecutan a la vez están limitadas por cuenta (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: "Empecemos una historia." }],
  stream: true,
})
for await (const chunk of stream) {
  process.stdout.write(chunk.choices[0]?.delta?.content ?? "")
}

POST/v1/chat/completions

Envía una conversación y recibe la respuesta del modelo, completa o en streaming. Compatible con OpenAI; se cobra por token.

Parámetros

ParámetroDescripción
modelstring · cuerpoObligatorioId del modelo de chat del grupo text de GET /v1/models.
messagesobject[] · cuerpoObligatorioLa conversación: objetos con role (system, user o assistant) y content. content es un texto o, en un mensaje user, una lista de partes text e image_url; las URL de imagen vienen de POST /v1/uploads.
streamboolean · cuerpoOpcionaltrue envía la respuesta como eventos del servidor (SSE); false (por defecto) la devuelve completa.
max_tokensinteger · cuerpoOpcionalMáximo de tokens de la respuesta: el default_max_tokens del modelo si se omite, como mucho su max_output_tokens.
temperaturenumber · cuerpoOpcionalTemperatura de muestreo, de 0 a 2.
top_pnumber · cuerpoOpcionalMuestreo de núcleo, mayor que 0 y como mucho 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": "Eres Mira, una pirata espacial sarcástica. No salgas del personaje."},
      {"role": "user", "content": "Mira, ¿adónde vamos esta noche?"}
    ],
    "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": "Describe a este personaje y escríbele una frase de presentación."},
        {"type": "image_url", "image_url": {"url": "<upload_url>"}}
      ]}
    ]
  }'
#

Subida de imágenes

#

No necesitas alojar tú mismo las imágenes de referencia: envía el archivo a este endpoint como cuerpo sin procesar, recibe una URL pública y usa esa URL en image_urls. El encabezado Content-Type es obligatorio y debe coincidir con el cuerpo; los tipos aceptados son image/jpeg, image/png, image/webp, image/bmp e image/gif, con un límite de 20 MB por archivo.

Más detalles

Una imagen que se usa como referencia debe ser un JPEG, PNG, GIF o WebP estático de 20 MB como máximo, sin áreas transparentes y dentro de los límites de archivo que publica el modelo elegido: `GET /v1/models` los devuelve por modelo en `reference_images.limits` (bytes, lado en píxeles y megapíxeles). Una referencia fuera de esos límites se rechaza con HTTP 400 e `image_unreadable`, con motivo `too_small` o `too_large`, antes de gastar créditos. Los metadatos, como EXIF, se eliminan cuando se guarda el archivo. La URL lleva un ID imposible de adivinar y se elimina 24 horas después de la subida si ninguna generación la usa (campo expires_at de la respuesta); si se usa como referencia en una generación, se conserva 48 horas desde la subida, mucho menos que los archivos generados; cuando expira, el endpoint devuelve HTTP 410 y content_expired. La URL del archivo de una generación (/v1/generations/{id}/file) requiere autenticación y no se puede usar como referencia: los endpoints de generación la rechazan con HTTP 400 y el código reference_not_public antes de gastar créditos. En su lugar, sube el archivo aquí o convierte una generación de imagen en una URL de referencia pública con POST /v1/generations/{id}/reference. Las imágenes de referencia no pasan ningún control de contenido: ninguna imagen se rechaza por quién o qué muestra, y en esta ruta no existe el rechazo image_blocked. Nosotros solo rechazamos una referencia cuando el propio archivo no se puede leer: una imagen que no se puede leer devuelve HTTP 400 e image_unreadable, con reason animated, transparent too_small o too_large cuando esa es la causa. El propio modelo aún puede rechazar una imagen de referencia que no logra procesar; esa generación falla con error_code reference_rejected y sus créditos se reembolsan automáticamente. Si una referencia no se puede preparar, la solicitud devuelve HTTP 503 y reference_unavailable, sin gastar créditos. Los prompts enviados con una clave de API llegan al modelo tal como se envían; solo se rechazan las solicitudes que implican abuso sexual de menores, con HTTP 400 y el código content_blocked. Cada referencia se guarda primero como archivo subido (una imagen indicada con una URL externa se copia, sin sus metadatos) y el proveedor descarga esa misma URL fijada, así que el proveedor recibe exactamente el archivo guardado.

POST/v1/uploads

Sube una imagen de referencia como cuerpo sin procesar y devuelve una URL pública para usar en image_urls.

Parámetros

ParámetroDescripción
Content-Typeimage/* · encabezadoObligatorioEl tipo de imagen del cuerpo: image/jpeg, image/png, image/webp, image/bmp o image/gif.
bodybinary · cuerpoObligatorioEl archivo de imagen sin procesar, de 20 MB como máximo.
curl
curl https://vellria.com/v1/uploads \
  -H "Authorization: Bearer vll_..." \
  -H "Content-Type: image/png" \
  --data-binary @reference.png
#

GET/v1/uploads/{id}

Descarga una imagen subida. Público: no necesita clave, el id imposible de adivinar es el acceso.

Parámetros

ParámetroDescripción
idstring · rutaObligatorioEl id de la subida.
curl
curl -o reference.png https://vellria.com/v1/uploads/{id}
#

DELETE/v1/uploads/{id}

Elimina una subida que ninguna generación ha usado. Solo el propietario; responde 204. Una subida usada responde 409 upload_in_use y caduca por sí sola.

Parámetros

ParámetroDescripción
idstring · rutaObligatorioEl id de la subida.
curl
curl -X DELETE https://vellria.com/v1/uploads/{id} \
  -H "Authorization: Bearer vll_..."
#

POST/v1/generations/{id}/reference

Convierte una generación de imagen completada en una subida de referencia pública que puedes pasar en image_urls.

Parámetros

ParámetroDescripción
idstring · rutaObligatorioEl id de la generación.
curl
curl -X POST https://vellria.com/v1/generations/{id}/reference \
  -H "Authorization: Bearer vll_..."
#

Consultar el estado de una generación

#

Las generaciones se ejecutan de forma asíncrona; el estado pasa por queued → processing → completed (en cola → procesando → completada). Los créditos se reembolsan automáticamente cuando una generación falla.

Más detalles

La lista de GET /v1/generations solo muestra generaciones completadas y en curso: una generación fallida queda fuera de la lista y de su total, mientras que GET /v1/generations/{id} la sigue devolviendo con su error_code durante 30 días; después el registro fallido se elimina y GET /v1/generations/{id} y el endpoint del archivo devuelven HTTP 404 con el código not_found. Filtrar la lista con ?status=failed devuelve 400, y las generaciones fallidas tampoco cuentan en la mitad de generaciones de GET /v1/billing/history (generations_total incluido). Los fallos que aún no se te han notificado se listan en GET /v1/generations/failures: count, refunded_cents (créditos realmente reembolsados, 0 si no hubo reembolso), until y hasta 5 de los más recientes en data. Márcalos como vistos con POST /v1/generations/failures/seen enviando ids (de 1 a 50 ids de generación) o until (todos los fallos hasta esa marca de tiempo); los ids de otras cuentas se ignoran y un fallo se notifica una sola vez, en cualquier dispositivo.

GET/v1/generations/{id}

Lee una generación: su estado, output_url cuando está completada o error_code cuando falló.

Parámetros

ParámetroDescripción
idstring · rutaObligatorioEl id de la generación.
curl
curl https://vellria.com/v1/generations/{id} \
  -H "Authorization: Bearer vll_..."
#

GET/v1/generations

Lista tus generaciones, con paginación y filtros. Las generaciones fallidas no aparecen.

Parámetros

ParámetroDescripción
limitinteger · consultaOpcionalTamaño de página, 1-50 (20 por defecto).
offsetinteger · consultaOpcionalNúmero de filas que se omiten.
typeimage | video · consultaOpcionalimage o video.
statusstring · consultaOpcionalqueued, processing o completed; failed devuelve 400.
modelstring · consultaOpcionalSolo las generaciones hechas con este id de modelo.
favoritesstring · consultaOpcional1 o true: solo los favoritos.
availablestring · consultaOpcional1 o true: solo las generaciones cuyo archivo se conserva; los archivos caducados o eliminados quedan fuera de data y total.
qstring · consultaOpcionalBusca en el prompt y en el modelo.
curl
curl "https://vellria.com/v1/generations?type=image" \
  -H "Authorization: Bearer vll_..."
#

GET/v1/generations/{id}/file

Descarga el archivo generado. Requiere tu clave, así que no sirve como URL de referencia.

Parámetros

ParámetroDescripción
idstring · rutaObligatorioEl id de la generación.
downloadstring · consultaOpcionalCualquier valor: el archivo se sirve como adjunto.
thumbstring · consultaOpcionalTamaño de la miniatura, solo para imágenes.
curl
curl -o result.png https://vellria.com/v1/generations/{id}/file \
  -H "Authorization: Bearer vll_..."
#

GET/v1/generations/failures

Las generaciones fallidas de las que aún no se te ha avisado, con los créditos reembolsados por cada una.
curl
curl https://vellria.com/v1/generations/failures \
  -H "Authorization: Bearer vll_..."
#

POST/v1/generations/failures/seen

Marca fallos como vistos, por id o todos hasta una marca de tiempo.

Parámetros

ParámetroDescripción
idsstring[] · cuerpoOpcionalDe 1 a 50 ids de generación que se marcan como vistos.
untilinteger · cuerpoOpcionalUna marca de tiempo Unix en milisegundos, el valor until de GET /v1/generations/failures: se marcan todos los fallos hasta ella.
curl
curl -X POST https://vellria.com/v1/generations/failures/seen \
  -H "Authorization: Bearer vll_..." \
  -H "Content-Type: application/json" \
  -d '{"ids": ["gen_..."]}'
#

Recargar créditos

#

Los créditos se compran en una página de pago alojada. GET /v1/billing/packages devuelve una única lista de paquetes, cada uno con un id, un precio usd y sus créditos, junto con min_usd y max_usd para un monto libre; lee estos valores del endpoint en lugar de fijarlos en tu código.

Más detalles

POST /v1/billing/create-checkout recibe un package_id de esa lista o un price_amount libre en USD entre 30 y 10000, redondeado a centavos; un monto libre se convierte con la misma tarifa fija que los paquetes. Si se envían ambos, gana package_id y el precio y los créditos salen del catálogo. Un package_id desconocido devuelve HTTP 400 con el código invalid_package y un monto fuera del rango devuelve invalid_amount. Puede haber como máximo cinco pagos abiertos a la vez; uno más devuelve HTTP 429 hasta que alguno se pague, se cancele o expire. La respuesta es el registro del pago con un checkout_url: envía ahí a quien paga para que pague en USD con tarjeta (Visa o Mastercard) en la página segura de nuestro proveedor de pagos. Los créditos se agregan automáticamente cuando se confirma el pago; consulta el estado con GET /v1/billing/payments/{id}. POST /v1/billing/payments/{id}/cancel marca un pago abierto como cancelado; si se completa de todos modos, los créditos se agregan. El campo opcional provider elige el proveedor que cobra el pago; los valores aceptados son whop (tarjeta), nowpayments (cripto) y telegram_stars (Estrellas de Telegram). GET /v1/billing/packages enumera en providers los proveedores abiertos para el checkout, y el primero es el predeterminado si no se envía el campo. Un proveedor desconocido o cerrado devuelve HTTP 400 con el código invalid_provider, y una lista providers vacía significa que los pagos no están disponibles en este momento. Cada paquete indica además en excluded_providers los proveedores que no pueden cobrarlo, por ejemplo telegram_stars cuando el paquete supera el límite de factura de Telegram Stars; un checkout de ese paquete con un proveedor excluido devuelve HTTP 400 con el código package_unavailable_for_provider y no abre ningún pago. GET /v1/billing/balance devuelve credits, el total que puedes gastar, dividido en permanent_credits, que no caducan, subscription_credits, que caducan en subscription_expires_at (una marca de tiempo en milisegundos, o null si no hay créditos de suscripción activos), y gift_credits, el regalo único de registro, que caducan en gift_expires_at (null si no hay regalo activo); el gasto usa primero los créditos de regalo, luego los de suscripción y por último los permanentes. Los planes de suscripción mensual aparecen por separado en plans dentro de GET /v1/billing/packages, cada uno con un id, un nombre, un precio mensual en usd y los créditos que concede en cada periodo. POST /v1/billing/subscribe recibe un plan_id de esa lista y devuelve la suscripción pendiente con un checkout_url al que enviar al pagador. Las suscripciones solo se pagan con tarjeta: un provider distinto de whop devuelve HTTP 400 con el código invalid_provider, y un plan_id desconocido devuelve invalid_plan. Cada periodo pagado sustituye los créditos de suscripción restantes por la cantidad completa del plan; los créditos de suscripción no usados no se acumulan y los créditos permanentes no se tocan. Suscribirte al plan que ya tienes devuelve HTTP 409 con already_subscribed. Pasar a un plan mayor lo inicia de inmediato y añade al nuevo periodo los créditos restantes del plan actual; pasar a uno menor devuelve HTTP 409 con downgrade_requires_cancel. GET /v1/billing/subscription devuelve la suscripción activa en subscription (plan_id, status, current_period_end y cancel_at_period_end) y un pago abierto en pending; cada campo es null si no existe. Solo puede haber un pago abierto a la vez: suscribirte de nuevo al mismo plan devuelve el pago abierto, elegir otro plan cierra antes el abierto y un pago que aún se está abriendo devuelve HTTP 409 con checkout_in_progress. POST /v1/billing/subscription/cancel detiene la renovación al final del periodo actual: los créditos de suscripción siguen disponibles hasta current_period_end y no se reembolsa nada. Devuelve la suscripción con cancel_at_period_end en true (llamarlo de nuevo devuelve lo mismo), HTTP 404 con subscription_not_found si no hay suscripción activa y HTTP 502 con subscription_cancel_failed si la cancelación no pudo confirmarse; en ese caso inténtalo de nuevo. Cada plan de plans lleva además un rank: un plan con rank mayor es una mejora respecto a uno con rank menor, así que lee la dirección en rank, no en el precio. GET /v1/billing/history lista los pagos de suscripción aparte, en subscription_payments (type subscription, payment_id, subscription_id, plan_id, amount_usd, status paid, refunded o mismatch, period_end y created_at), con su propia paginación mediante subscription_payments_offset y su total en subscription_payments_total.

GET/v1/billing/balance

Tus créditos disponibles, divididos en créditos permanentes, de suscripción y de regalo.
curl
curl https://vellria.com/v1/billing/balance \
  -H "Authorization: Bearer vll_..."
#

GET/v1/billing/packages

Paquetes de créditos, el rango del monto libre, los proveedores de pago abiertos ahora y los planes de suscripción. Público.
curl
curl https://vellria.com/v1/billing/packages
#

POST/v1/billing/create-checkout

Abre un pago alojado para un paquete o un monto libre; luego envía a quien paga a checkout_url.

Parámetros

ParámetroDescripción
package_idstring · cuerpoOpcionalUn id de paquete de GET /v1/billing/packages; gana si también se envía price_amount.
price_amountnumber · cuerpoOpcionalUn monto libre en USD entre min_usd y max_usd, redondeado a centavos.
providerstring · cuerpoOpcionalUno de providers en GET /v1/billing/packages; el primero si se omite.
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}

Lee un pago y su estado; los créditos se agregan cuando se confirma.

Parámetros

ParámetroDescripción
idstring · rutaObligatorioEl id del pago.
curl
curl https://vellria.com/v1/billing/payments/{id} \
  -H "Authorization: Bearer vll_..."
#

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

Marca un pago abierto como cancelado. Si se paga de todos modos, los créditos se agregan igual.

Parámetros

ParámetroDescripción
idstring · rutaObligatorioEl id del pago.
curl
curl -X POST https://vellria.com/v1/billing/payments/{id}/cancel \
  -H "Authorization: Bearer vll_..."
#

GET/v1/billing/history

Tus pagos, generaciones cobradas y pagos de suscripción, cada lista con su propia paginación.

Parámetros

ParámetroDescripción
limitinteger · consultaOpcionalTamaño de página, 1-50 (20 por defecto).
payments_offsetinteger · consultaOpcionalDesplazamiento solo para la lista de pagos.
generations_offsetinteger · consultaOpcionalDesplazamiento solo para la lista de generaciones.
subscription_payments_offsetinteger · consultaOpcionalDesplazamiento solo para la lista de pagos de suscripción.
curl
curl "https://vellria.com/v1/billing/history?limit=20" \
  -H "Authorization: Bearer vll_..."
#

GET/v1/chat/usage

Tus solicitudes de chat, de la más reciente: origen, tokens, coste fraccionario en créditos y su equivalente en USD, más el coste acumulado aún no descontado de tu saldo.

Parámetros

ParámetroDescripción
limitinteger · consultaOpcionalTamaño de página, 1-50 (20 por defecto).
offsetinteger · consultaOpcionalNúmero de filas que se omiten.
curl
curl "https://vellria.com/v1/chat/usage?limit=20" \
  -H "Authorization: Bearer vll_..."
#

POST/v1/billing/subscribe

Abre un pago para un plan mensual. Solo con tarjeta.

Parámetros

ParámetroDescripción
plan_idstring · cuerpoObligatorioUn id de plan de plans en GET /v1/billing/packages.
providerstring · cuerpoOpcionalSolo tarjeta (whop); cualquier otro valor devuelve 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

La suscripción activa y el pago de suscripción abierto, si lo hay.
curl
curl https://vellria.com/v1/billing/subscription \
  -H "Authorization: Bearer vll_..."
#

POST/v1/billing/subscription/cancel

Detiene la renovación al final del periodo actual; no se reembolsa nada.
curl
curl -X POST https://vellria.com/v1/billing/subscription/cancel \
  -H "Authorization: Bearer vll_..."
#

Conservación de archivos

#

Los archivos generados se conservan 7 días y luego se eliminan del servidor. El registro sigue en tu historial de facturación, pero ya no se puede acceder al archivo.

Más detalles

La respuesta de GET /v1/generations incluye el campo retention_days y cada generación incluye expires_at; pedir un archivo expirado devuelve HTTP 410 con el código content_expired. Descarga todo lo que necesites conservar por más tiempo. También puedes eliminar una generación tú mismo: DELETE /v1/generations/{id} elimina de inmediato el archivo guardado y devuelve purged_at. Una generación eliminada desaparece de la API: ya no aparece en GET /v1/generations, y GET /v1/generations/{id}, el endpoint del archivo y un segundo DELETE devuelven HTTP 404 con el código not_found, igual que un id que nunca existió. Los créditos que costó no se reembolsan y siguen en GET /v1/billing/history. El registro de una generación fallida se elimina a los 30 días; a partir de ahí GET /v1/generations/{id} y el endpoint del archivo devuelven HTTP 404. Una generación que todavía está en queued o processing aún no se puede eliminar y devuelve HTTP 409 con el código generation_in_progress.

DELETE/v1/generations/{id}

Elimina ya una generación: se borra su archivo y el registro desaparece de la API (404); los créditos que costó siguen en el historial de facturación.

Parámetros

ParámetroDescripción
idstring · rutaObligatorioEl id de la generación.
curl
curl -X DELETE https://vellria.com/v1/generations/{id} \
  -H "Authorization: Bearer vll_..."
#

Cerrar tu cuenta

#

Al cerrar tu cuenta se eliminan tus generaciones y sus archivos guardados, tus archivos subidos, tus claves de API y tus mensajes de soporte, y se cierra tu sesión. Los créditos que queden en la cuenta se pierden y no se reembolsan.

Más detalles

Los registros de pago se conservan como registros de facturación, así que una cuenta cerrada sigue apareciendo en el historial de pagos que estamos obligados a conservar. El endpoint solo se autentica con la sesión: se llama desde la página Cuenta de la consola, y una solicitud que lleve una clave de API se rechaza con HTTP 403. Una cuenta con un pago aún sin liquidar no se puede cerrar y devuelve HTTP 409 con el código pending_payment, porque ese pago todavía puede acreditarse; el mismo 409 con merge_in_progress se devuelve mientras la cuenta se vincula con otra. En ambos casos, espera un momento y vuelve a intentarlo.

DELETE/v1/account

Cierra tu cuenta. Solo con sesión: se llama desde la consola y se rechaza con una clave de API.
#

Política de contenido

#

Las solicitudes hechas con una clave de API llegan al modelo tal como se envían: el prompt y negative_prompt llegan al proveedor byte a byte, y si un modelo ofrece un reescritor de prompts como opción, se envía desactivado (algunos modelos de video conservan su paso de razonamiento interno). La moderación en tu aplicación es responsabilidad tuya.

Más detalles
  • En la API queda una sola verificación: las solicitudes que implican abuso sexual de menores se rechazan con HTTP 400 y content_blocked antes de cobrar ningún crédito (HTTP 503 con Retry-After si la verificación no está disponible por un momento). Nada más se revisa, tampoco las imágenes de referencia. Los términos siguen prohibiendo la zoofilia, el incesto entre parientes consanguíneos, el sexo no consentido, la violencia extrema y el gore, el contenido de cámara oculta y representar a una persona real sin su consentimiento; la regla sobre menores y la de contenido no consentido son de tolerancia cero y un incumplimiento cierra la cuenta sin previo aviso. Los prompts enviados desde la consola de Vellria también se revisan automáticamente.
  • El proveedor que ejecuta un modelo aplica su propio filtro de seguridad y puede rechazar una solicitud ya iniciada; la generación se marca como fallida y los créditos cobrados al inicio se reembolsan automáticamente.