Aller au contenu

Développeurs

Référence de l’API Vellria

Tous les modèles via un seul endpoint HTTPS, avec votre clé API.

URL de base
https://vellria.com/v1
Authentification
Authorization: Bearer vll_...

Démarrage rapide

#

Quatre appels mènent d’une clé API à un fichier terminé. Chaque génération dépense des crédits de votre solde au prix indiqué par le catalogue ; envoyez expectedCost et une requête dont le prix a changé est refusée au lieu d’être facturée (Prix et coût attendu).

  1. Créez une clé API

    Connectez-vous et créez une clé sur la page Clés API. Les clés commencent par vll_ ; envoyez la vôtre comme jeton Bearer à chaque appel.

  2. Choisissez un modèle

    GET /v1/models liste chaque id de modèle avec ses tailles, ses paramètres et son prix en crédits. Lisez-le plutôt que de figer une liste de modèles dans votre code.

  3. Lancez une génération

    POST /v1/generate/image avec un id de modèle et un prompt. La réponse est 202, avec l’id de la génération et les crédits débités ; une génération échouée est remboursée.

  4. Interrogez, puis téléchargez

    Appelez GET /v1/generations/{id} toutes les quelques secondes jusqu’à ce que status vaille completed, ou failed avec un error_code. Téléchargez ensuite output_url avec la même clé.

2. Choisissez un modèle
curl
curl https://vellria.com/v1/models \
  -H "Authorization: Bearer vll_..."
Réponse · 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. Lancez une génération
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 phare à l’aube, lumière douce",
    "size": "1536*1536"
  }'
Réponse · 202
{
  "id": "gen_3f9a1c7e5b2d4086",
  "status": "processing",
  "model": "vellria-seedream-5-pro",
  "size": "1536*1536",
  "cost_cents": 10
}
4. Interrogez, puis téléchargez
curl
curl https://vellria.com/v1/generations/{id} \
  -H "Authorization: Bearer vll_..."
Réponse · 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_..."

Authentification

#

Envoyez votre clé API comme jeton Bearer dans l’en-tête Authorization de chaque requête. Les clés commencent par le préfixe vll_ et se créent sur la page Clés API.

http
Authorization: Bearer vll_...

Erreurs

#

Toute erreur revient avec le même corps JSON. Branchez votre logique sur error.code : il est stable, alors que error.message s’adresse aux humains et peut changer. error.param désigne le champ en cause lorsqu’il y en a un, et quelques codes ajoutent error.reason (image_unreadable : animated, transparent, too_small ou too_large). Aucun crédit n’est conservé pour une requête qui renvoie une erreur : les erreurs de requête sont levées avant tout débit, et une génération qui n’a pas pu démarrer est remboursée.

Codes de statut HTTP

HTTPSignification
400La requête est invalide ; error.code indique quel champ ou quelle règle est en cause.
401La clé API est absente ou invalide.
402Crédits insuffisants.
403Ce compte ou cette clé ne peut pas utiliser l’endpoint.
404La ressource n’existe pas ou appartient à un autre compte.
409La requête entre en conflit avec l’état actuel, par exemple un prix modifié ou une génération encore en cours.
410Le fichier a dépassé sa durée de conservation et a été supprimé.
413Le fichier ou le corps est trop volumineux.
415Le Content-Type n’est pas un type d’image accepté.
416La plage d’octets demandée ne peut pas être servie.
429Trop de requêtes ; attendez la durée de l’en-tête Retry-After, puis réessayez.
500Erreur inattendue de notre côté.
502Le prestataire du modèle ou du paiement a refusé la requête ou a échoué.
503Le service est temporairement indisponible ; rien n’est débité.

Codes d’erreur

Authentification et compte8authentication_requiredaccount_deletedaccount_suspendedaccount_mergedforbiddenpending_paymentmerge_in_progressaccount_delete_failed
Code d’erreurHTTPSignification
authentication_required401Aucune clé API n’a été envoyée, ou elle est invalide ou révoquée.
account_deleted403Le compte a été fermé.
account_suspended403Le compte est suspendu.
account_merged403Le compte a été fusionné avec un autre ; utilisez la clé de ce compte.
forbidden403L’endpoint fonctionne uniquement avec une session de la Console, pas avec une clé API.
pending_payment409Un paiement n’a pas encore abouti ; réessayez une fois qu’il l’a fait.
merge_in_progress409Le compte est en cours de liaison avec un autre ; réessayez dans un instant.
account_delete_failed500Le compte n’a pas pu être fermé ; réessayez dans un instant.
Validation de la requête22invalid_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
Code d’erreurHTTPSignification
invalid_body400Le corps n’est pas un JSON valide ou il manque un champ obligatoire.
invalid_prompt400prompt est absent ou vide.
prompt_too_long400prompt dépasse le max_prompt_length du modèle.
invalid_expected_cost400expectedCost n’est pas un entier positif ou nul.
invalid_model400L’identifiant du modèle ne figure pas dans GET /v1/models.
invalid_size400size ne fait pas partie des tailles du modèle.
invalid_duration400duration est hors de la plage du mode.
invalid_resolution400resolution ne fait pas partie des résolutions du mode.
invalid_ratio400ratio ne fait pas partie des formats du mode.
invalid_reference_mode400reference_mode n’est ni frame ni subject, ou le modèle n’a pas de mode subject.
invalid_reference_token400Le prompt cite un @image sans référence correspondante, par exemple @image3 avec deux images.
text_to_video_not_supported400Le modèle exige une image de référence et ne peut pas fonctionner avec un prompt seul.
invalid_<parameter>400Un paramètre propre au modèle a une valeur que le modèle ne déclare pas.
invalid_type400type n’est ni image ni video.
invalid_status400status n’est ni queued, ni processing, ni completed.
invalid_query400Le texte de recherche est trop long.
invalid_ids400ids n’est pas une liste de 1-50 identifiants de génération.
invalid_until400until n’est pas un horodatage valide.
invalid_generation_type400Seules les générations d’image peuvent devenir une référence.
thumbnail_unsupported400Les miniatures n’existent que pour les images.
thumbnail_size_unsupported400thumb n’est pas une taille de miniature prise en charge.
invalid_range416L’en-tête Range ne peut pas être satisfait.
Prompts, références et imports11content_blockedinvalid_image_urlsreference_not_publicimage_unreadablereference_not_allowedempty_uploadinvalid_imagefile_too_largepayload_too_largeunsupported_media_typeupload_in_use
Code d’erreurHTTPSignification
content_blocked400Le prompt a été refusé par le filtre de sécurité avant tout débit de crédits.
invalid_image_urls400image_urls est mal formé, contient trop peu ou trop d’images pour le modèle, ou est absent là où le mode l’exige.
reference_not_public400Une référence pointe vers l’URL d’un fichier protégé ; importez-le plutôt avec POST /v1/uploads.
image_unreadable400Une image de référence est inutilisable ; error.reason en donne la raison (animated, transparent, too_small ou too_large).
reference_not_allowed403Les images de référence ne sont pas disponibles sur ce service.
empty_upload400Le corps de l’import est vide.
invalid_image400Le fichier importé n’est pas une image lisible du type déclaré.
file_too_large413Le fichier dépasse la taille autorisée.
payload_too_large413Le corps de la requête dépasse la taille autorisée.
unsupported_media_type415Le Content-Type ne fait pas partie des types d’image acceptés.
upload_in_use409L’import a servi à une génération ; il est conservé jusqu’à son expiration.
Générations et fichiers8not_foundcontent_expiredgeneration_in_progressgeneration_not_completedupstream_errorreference_rejectedgeneration_unavailablereference_unavailable
Code d’erreurHTTPSignification
not_found404Aucune ressource de ce type sur ce compte.
content_expired410Le fichier a dépassé sa durée de conservation et a été supprimé.
generation_in_progress409La génération est encore queued ou processing.
generation_not_completed409La génération n’est pas encore terminée.
upstream_error502La génération n’a pas pu démarrer ; les crédits sont remboursés.
reference_rejected502Le modèle a refusé une image de référence ; les crédits sont remboursés.
generation_unavailable503La génération est temporairement indisponible ; rien n’est débité.
reference_unavailable503Une image de référence n’a pas pu être préparée ; rien n’est débité.
Crédits et paiements18insufficient_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
Code d’erreurHTTPSignification
insufficient_balance402Le compte n’a pas assez de crédits.
price_changed409Le prix diffère de expectedCost ; le prix actuel figure dans price.cost et rien n’est débité.
invalid_package400package_id ne figure pas dans GET /v1/billing/packages.
invalid_amount400price_amount est hors de la plage min_usd à max_usd.
invalid_provider400Le prestataire est inconnu, fermé, ou non accepté pour ce paiement.
package_unavailable_for_provider400Le prestataire choisi ne peut pas vendre ce pack (il figure dans excluded_providers du pack, par exemple telegram_stars pour les gros packs) ; aucun paiement n’est ouvert.
invalid_plan400plan_id ne fait pas partie des formules.
checkout_locked429Le paiement par carte (provider whop) est verrouillé un moment après trop de tentatives échouées ; la crypto et Telegram Stars restent ouverts. Voir Retry-After.
payment_create_failed502Le prestataire de paiement n’a pas pu ouvrir la page de paiement ; réessayez.
not_configured503Les paiements ne sont pas disponibles pour le moment.
already_paid409Le paiement est déjà terminé.
already_subscribed409Vous avez déjà cette formule.
downgrade_requires_cancel409Passer à une formule inférieure exige d’abord une annulation.
checkout_in_progress409Un paiement d’abonnement est encore en cours d’ouverture.
subscription_changed409L’abonnement a changé pendant l’ouverture du paiement ; rechargez et réessayez.
subscription_under_review409Le premier paiement d’un abonnement est en cours de vérification ; aucun nouveau paiement n’est ouvert avant la décision.
subscription_not_found404Il n’y a aucun abonnement actif.
subscription_cancel_failed502L’annulation n’a pas pu être confirmée ; réessayez.
Limites de débit2rate_limit_exceededreference_rate_limited
Code d’erreurHTTPSignification
rate_limit_exceeded429Trop de requêtes dans la fenêtre ; attendez la durée de Retry-After.
reference_rate_limited429Plus de requêtes avec images de référence que la limite horaire.
Discussion9insufficient_creditsinvalid_jsoninvalid_requestcontext_too_longunsupported_contentdata_url_not_supportedinvalid_image_urltoo_many_imagesempty_response
Code d’erreurHTTPSignification
insufficient_credits402Le solde ne couvre pas la réponse la plus longue possible (max_tokens) ; rien n'est facturé.
invalid_json400Le corps n'est pas un JSON valide.
invalid_request400Un champ manque ou est mal formé (messages, role, stream, max_tokens, temperature ou top_p) ; error.param le nomme.
context_too_long400Trop de messages ou de caractères pour les limites du modèle.
unsupported_content400Une partie du contenu n'est ni text ni image_url, ou une image se trouve hors d'un message user.
data_url_not_supported400L'image a été envoyée en data URL ; importez-la avec POST /v1/uploads et passez l'URL renvoyée.
invalid_image_url400image_url.url n'est pas une URL http(s).
too_many_images400Plus d'images que le modèle n'en accepte par message ou par requête.
empty_response502Le modèle a renvoyé une réponse vide ; rien n'est facturé.
Serveur1internal_error
Code d’erreurHTTPSignification
internal_error500Erreur inattendue de notre côté.

Générations en échec

Une génération qui échoue après son démarrage n’est pas une erreur HTTP : GET /v1/generations/{id} la renvoie avec le statut failed et l’une de ces valeurs error_code, et ses crédits sont remboursés automatiquement.

Afficher 10 codes10content_blockedprovider_errorprovider_timeoutprovider_cancelledprovider_unavailableabandonedunknown_providerimage_blockedmoderation_failedreference_rejected
Code d’erreurSignification
content_blockedLe prompt a été refusé par un contrôle de sécurité après la mise en file de la génération.
provider_errorLe modèle n’a pas réussi à produire de résultat.
provider_timeoutLe modèle n’a pas terminé à temps.
provider_cancelledLe modèle a annulé la tâche.
provider_unavailableLe modèle était indisponible.
abandonedLa tâche est restée trop longtemps sans réponse et a été abandonnée.
unknown_providerLa tâche n’a pas pu être rattachée à une exécution de modèle.
image_blockedAnciennes lignes uniquement : une image de référence a été refusée par un contrôle qui n’est plus utilisé.
moderation_failedAnciennes lignes uniquement : le contrôle lui-même a échoué.
reference_rejectedLe modèle a refusé une image de référence.
Réponse · 400
{
  "error": {
    "message": "vellria-seedance-2-5 does not support reference_mode \"subject\"",
    "type": "invalid_request_error",
    "param": "reference_mode",
    "code": "invalid_reference_mode"
  }
}
Réponse · 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"
  }
}
Réponse · 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 débit

#

20 images et 10 vidéos par minute. Les générations avec images de référence partagent aussi une limite de 120 tentatives par heure, refus compris ; au-delà, les endpoints de génération renvoient le code reference_rate_limited. Le dépassement d’une limite renvoie HTTP 429 ; attendez la durée indiquée dans l’en-tête Retry-After, puis réessayez.

Catalogue des modèles

#

Les modèles valides, avec leur coût en crédits, sont renvoyés sous la forme { image: [...], video: [...] }. Interrogez cet endpoint plutôt que de coder en dur une grille tarifaire de votre côté.

Plus de détails

Chaque entrée porte id (la valeur que vous envoyez comme model), label, kind (image ou video), family et developer, l’entreprise qui l’a conçu (null pour un modèle proposé sous le nom Vellria), ainsi que deux modes, text et reference : envoyez seulement un prompt et le modèle s’exécute en mode text — un appel text-to-image ou text-to-video ; joignez une ou plusieurs images de référence à ce même id et il s’exécute en mode reference à la place — image-to-image ou image-to-video —, il n’y a pas d’id distinct à choisir entre les deux. Chaque mode porte ses propres sizes (image) ou resolutions (vidéo), un default, max_prompt_length (la limite de caractères que ce mode applique au prompt, et à tout paramètre de texte libre qui ne déclare pas la sienne) et parameters. Chaque taille ou résolution porte ratio et tier en plus de son libellé : vous n’avez donc jamais à analyser le libellé pour connaître le format d’image ou le palier de résolution (un ratio adaptive signifie que le résultat reprend les proportions de l’image d’entrée). reference_images vaut null en mode text ; en mode reference, il porte le minimum et le maximum d’images de référence que ce mode accepte, extra_credits facturé pour chaque référence au-delà de la première, et les limites de fichier qu’une image de référence doit respecter. Un modèle dont les emplacements de référence ont des rôles fixes les liste dans l’ordre sous reference_images.roles (null pour tous les modèles à ce jour) : la première URL de image_urls prendrait le premier rôle, chaque URL suivante le suivant, et le dernier rôle se répéterait pour le reste.

Modèles d’image

#
  • Modèle
    Seedream 5 Pro Non censurévellria-seedream-5-pro
    Modes de génération
    Texte vers imageImage vers image
    Tailles
    2K · 5 tailles
    Prix
    10 crédits
    Paramètres

    Texte vers image · 10 crédits quelle que soit la taille + 1 crédit par image de référence au-delà de la première

    ParamètreValeurs autoriséesPar défaut
    image_urlsType de valeur: string[]0–10 URL https (obligatoire)—
    sizeType de valeur: string1536*15361776*13281328*17762048*11521152*20481536*1536
    reasoningType de valeur: stringenableddisabledenabled

    Image vers image · 10 crédits quelle que soit la taille + 1 crédit par image de référence au-delà de la première

    ParamètreValeurs autoriséesPar défaut
    image_urlsType de valeur: string[]1–10 URL https (obligatoire)—
    Page du modèle — Seedream 5 Pro Non censuré
  • Modèle
    Qwen 3 Non censurévellria-qwen-3
    Modes de génération
    Texte vers imageImage vers image
    Tailles
    1K, 1.5K, 2K · 8 tailles
    Prix
    8 crédits
    Paramètres

    Texte vers image · 8 crédits quelle que soit la taille

    ParamètreValeurs autoriséesPar défaut
    sizeType de valeur: string1024*10241536*10241024*15362048*15361536*20482048*11521152*20482048*20481024*1024
    seedType de valeur: integer0–2147483647aléatoire s’il est omis, renvoyé dans la réponse
    negative_promptType de valeur: stringtexte, 8000 caractères au plus—

    Image vers image · 8 crédits quelle que soit la taille + 1 crédit par image de référence au-delà de la première

    ParamètreValeurs autoriséesPar défaut
    image_urlsType de valeur: string[]1–3 URL https (obligatoire)—
    sizeType de valeur: string1024*10241280*960960*12801280*720720*12801440*14401024*1024
    Page du modèle — Qwen 3 Non censuré
  • Modèle
    Qwen 3 Pro Non censurévellria-qwen-3-pro
    Modes de génération
    Texte vers imageImage vers image
    Tailles
    1K, 1.5K · 3 tailles
    Prix
    10 crédits
    Paramètres

    Texte vers image · 10 crédits quelle que soit la taille

    ParamètreValeurs autoriséesPar défaut
    sizeType de valeur: string1024*10241536*10241024*15361024*1024
    seedType de valeur: integer0–2147483647aléatoire s’il est omis, renvoyé dans la réponse
    negative_promptType de valeur: stringtexte, 8000 caractères au plus—

    Image vers image · 10 crédits quelle que soit la taille + 1 crédit par image de référence au-delà de la première

    ParamètreValeurs autoriséesPar défaut
    image_urlsType de valeur: string[]1–3 URL https (obligatoire)—
    sizeType de valeur: string1024*10241280*960960*12801280*720720*12801440*14401024*1024
    Page du modèle — Qwen 3 Pro Non censuré
  • Modèle
    Qwen Image Edit 2511 Non censurévellria-qwen-image-edit-2511
    Modes de génération
    Texte vers imageImage vers image
    Tailles
    1K, 1.3K · 5 tailles
    Prix
    6 crédits
    Paramètres

    Texte vers image · 6 crédits quelle que soit la taille

    ParamètreValeurs autoriséesPar défaut
    sizeType de valeur: string1024*10241280*960960*12801280*720720*12801024*1024
    seedType de valeur: integer0–2147483647aléatoire s’il est omis, renvoyé dans la réponse

    Image vers image · 6 crédits quelle que soit la taille

    ParamètreValeurs autoriséesPar défaut
    image_urlsType de valeur: string[]1–3 URL https (obligatoire)—
    sizeType de valeur: string1K1K
    Page du modèle — Qwen Image Edit 2511 Non censuré
  • Modèle
    Qwen Image 2.1 Non censurévellria-qwen-image-2-1
    Modes de génération
    Texte vers imageImage vers image
    Tailles
    1K, 1.2K, 1.3K · 7 tailles
    Prix
    à partir de 7 crédits
    Paramètres

    Texte vers image · 7 crédits quelle que soit la taille

    ParamètreValeurs autoriséesPar défaut
    sizeType de valeur: string1024*10241248*832832*12481184*896896*11841376*768768*13761024*1024
    seedType de valeur: integer0–2147483647aléatoire s’il est omis, renvoyé dans la réponse

    Image vers image · 8 crédits quelle que soit la taille + 1 crédit par image de référence au-delà de la première

    ParamètreValeurs autoriséesPar défaut
    image_urlsType de valeur: string[]1–10 URL https (obligatoire)—
    sizeType de valeur: string1K1024*10241248*832832*12481184*896896*11841376*768768*13761K
    Page du modèle — Qwen Image 2.1 Non censuré
  • Modèle
    Seedream 5 Lite Non censurévellria-seedream-5-lite
    Modes de génération
    Texte vers imageImage vers image
    Tailles
    3K, 4K · 8 tailles
    Prix
    8 crédits
    Paramètres

    Texte vers image · 8 crédits quelle que soit la taille

    ParamètreValeurs autoriséesPar défaut
    sizeType de valeur: string3072*30723456*25922592*34563744*24962496*37444096*23042304*40964704*20163072*3072

    Image vers image · 8 crédits quelle que soit la taille

    ParamètreValeurs autoriséesPar défaut
    image_urlsType de valeur: string[]1–10 URL https (obligatoire)—
    Page du modèle — Seedream 5 Lite Non censuré
  • Modèle
    Seedream 4.5 Non censurévellria-seedream-4-5
    Modes de génération
    Texte vers imageImage vers image
    Tailles
    2K · 8 tailles
    Prix
    9 crédits
    Paramètres

    Texte vers image · 9 crédits quelle que soit la taille

    ParamètreValeurs autoriséesPar défaut
    sizeType de valeur: string2048*20482304*17281728*23042496*16641664*24962848*16001600*28483136*13442048*2048

    Image vers image · 9 crédits quelle que soit la taille

    ParamètreValeurs autoriséesPar défaut
    image_urlsType de valeur: string[]1–10 URL https (obligatoire)—
    Page du modèle — Seedream 4.5 Non censuré
  • Modèle
    Seedream 4 Non censurévellria-seedream-4
    Modes de génération
    Texte vers imageImage vers image
    Tailles
    2K · 5 tailles
    Prix
    7 crédits
    Paramètres

    Texte vers image · 7 crédits quelle que soit la taille

    ParamètreValeurs autoriséesPar défaut
    sizeType de valeur: string2048*20482368*17761776*23682816*15841584*28162048*2048

    Image vers image · 7 crédits quelle que soit la taille

    ParamètreValeurs autoriséesPar défaut
    image_urlsType de valeur: string[]1–10 URL https (obligatoire)—
    sizeType de valeur: string2K2048*20482368*17761776*23682816*15841584*28162K
    Page du modèle — Seedream 4 Non censuré
  • Modèle
    Wan 2.7 Non censurévellria-wan-2-7
    Modes de génération
    Texte vers imageImage vers image
    Tailles
    2K · 1 taille
    Prix
    8 crédits
    Paramètres

    Texte vers image · 8 crédits quelle que soit la taille

    ParamètreValeurs autoriséesPar défaut
    sizeType de valeur: string2K2K
    seedType de valeur: integer0–2147483647aléatoire s’il est omis, renvoyé dans la réponse

    Image vers image · 8 crédits quelle que soit la taille

    ParamètreValeurs autoriséesPar défaut
    image_urlsType de valeur: string[]1–9 URL https (obligatoire)—
    Page du modèle — Wan 2.7 Non censuré
  • Modèle
    Bria FIBO 2.0 Non censurévellria-bria-fibo-2-0
    Modes de génération
    Texte vers imageImage vers image
    Tailles
    2K, 1K · 30 tailles
    Prix
    10 crédits
    Paramètres

    Texte vers image · 10 crédits quelle que soit la taille

    ParamètreValeurs autoriséesPar défaut
    sizeType de valeur: 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
    seedType de valeur: integer0–2147483647aléatoire s’il est omis, renvoyé dans la réponse

    Image vers image · 10 crédits quelle que soit la taille

    ParamètreValeurs autoriséesPar défaut
    image_urlsType de valeur: string[]1–4 URL https (obligatoire)—
    sizeType de valeur: string1K1K
    Page du modèle — Bria FIBO 2.0 Non censuré
  • Modèle
    Bria FIBO 1.5 Non censurévellria-bria-fibo-1-5
    Modes de génération
    Texte vers imageImage vers image
    Tailles
    2K, 2.3K · 7 tailles
    Prix
    10 crédits
    Paramètres

    Texte vers image · 10 crédits quelle que soit la taille

    ParamètreValeurs autoriséesPar défaut
    sizeType de valeur: string2048*20482304*15361536*23042048*15361536*20482048*11521152*20482048*2048
    seedType de valeur: integer0–2147483647aléatoire s’il est omis, renvoyé dans la réponse

    Image vers image · 10 crédits quelle que soit la taille

    ParamètreValeurs autoriséesPar défaut
    image_urlsType de valeur: string[]1–4 URL https (obligatoire)—
    sizeType de valeur: string1K1K
    Page du modèle — Bria FIBO 1.5 Non censuré
  • Modèle
    MiniMax H3 Image Non censurévellria-minimax-h3-image
    Modes de génération
    Texte vers imageImage vers image
    Tailles
    1K, 1.2K, 1.3K · 7 tailles
    Prix
    8 crédits
    Paramètres

    Texte vers image · 8 crédits quelle que soit la taille

    ParamètreValeurs autoriséesPar défaut
    sizeType de valeur: string1024*10241248*832832*12481184*896896*11841376*768768*13761024*1024
    seedType de valeur: integer0–2147483647aléatoire s’il est omis, renvoyé dans la réponse

    Image vers image · 8 crédits quelle que soit la taille + 1 crédit par image de référence au-delà de la première

    ParamètreValeurs autoriséesPar défaut
    image_urlsType de valeur: string[]1–9 URL https (obligatoire)—
    sizeType de valeur: string1K1024*10241248*832832*12481184*896896*11841376*768768*13761K
    Page du modèle — MiniMax H3 Image Non censuré
  • Modèle
    Seedream 5 Flash Non censurévellria-seedream-5-flash
    Modes de génération
    Texte vers imageImage vers image
    Tailles
    2K · 5 tailles
    Prix
    8 crédits
    Paramètres

    Texte vers image · 8 crédits quelle que soit la taille

    ParamètreValeurs autoriséesPar défaut
    sizeType de valeur: string2048*20482368*17761776*23682816*15841584*28162048*2048

    Image vers image · 8 crédits quelle que soit la taille

    ParamètreValeurs autoriséesPar défaut
    image_urlsType de valeur: string[]1–10 URL https (obligatoire)—
    sizeType de valeur: string2K2048*20482368*17761776*23682816*15841584*28162K
    Page du modèle — Seedream 5 Flash Non censuré
  • Modèle
    Z-Image Turbo Non censurévellria-z-image-turbo
    Modes de génération
    Texte vers image
    Tailles
    1K, 1.5K, 2K · 6 tailles
    Prix
    2 crédits
    Paramètres

    Texte vers image · 2 crédits quelle que soit la taille

    ParamètreValeurs autoriséesPar défaut
    sizeType de valeur: string1024*10241536*10241024*15362048*11521152*20482048*20481024*1024
    seedType de valeur: integer0–2147483647aléatoire s’il est omis, renvoyé dans la réponse
    Page du modèle — Z-Image Turbo Non censuré
  • Modèle
    Anima Non censurévellria-anima
    Modes de génération
    Texte vers imageImage vers image
    Tailles
    1K, 1.2K, 1.1K, 1.3K · 7 tailles
    Prix
    5 crédits
    Paramètres

    Texte vers image · 5 crédits quelle que soit la taille

    ParamètreValeurs autoriséesPar défaut
    sizeType de valeur: string1024*10241248*832832*12481168*880880*11681360*768768*13601024*1024
    seedType de valeur: integer0–2147483647aléatoire s’il est omis, renvoyé dans la réponse

    Image vers image · 5 crédits quelle que soit la taille

    ParamètreValeurs autoriséesPar défaut
    image_urlsType de valeur: string[]1–1 URL https (obligatoire)—
    sizeType de valeur: string1K1K
    Page du modèle — Anima Non censuré
  • Modèle
    Vellria Anime Pro Spicy Non censurévellria-anime-pro-spicy
    Modes de génération
    Texte vers imageImage vers image
    Tailles
    2K · 5 tailles
    Prix
    10 crédits
    Paramètres

    Texte vers image · 10 crédits quelle que soit la taille + 1 crédit par image de référence au-delà de la première

    ParamètreValeurs autoriséesPar défaut
    image_urlsType de valeur: string[]0–10 URL https (obligatoire)—
    sizeType de valeur: string1536*15361776*13281328*17762048*11521152*20481536*1536

    Image vers image · 10 crédits quelle que soit la taille + 1 crédit par image de référence au-delà de la première

    ParamètreValeurs autoriséesPar défaut
    image_urlsType de valeur: string[]1–10 URL https (obligatoire)—
    Page du modèle — Vellria Anime Pro Spicy Non censuré
  • Modèle
    Pruna P-Image Non censurévellria-p-image
    Modes de génération
    Texte vers imageImage vers image
    Tailles
    1K, 1.2K, 1.1K, 1.3K · 7 tailles
    Prix
    4 crédits
    Paramètres

    Texte vers image · 4 crédits quelle que soit la taille

    ParamètreValeurs autoriséesPar défaut
    sizeType de valeur: string1024*10241216*832832*12161152*896896*11521344*768768*13441024*1024
    seedType de valeur: integer0–2147483647aléatoire s’il est omis, renvoyé dans la réponse

    Image vers image · 4 crédits quelle que soit la taille

    ParamètreValeurs autoriséesPar défaut
    image_urlsType de valeur: string[]1–5 URL https (obligatoire)—
    sizeType de valeur: string1K1024*10241216*832832*12161152*896896*11521344*768768*13441K
    Page du modèle — Pruna P-Image Non censuré
  • Modèle
    Flux 2 Klein 9B Non censurévellria-flux-2-klein-9b
    Modes de génération
    Texte vers imageImage vers image
    Tailles
    1K, 1.2K, 1.1K, 1.3K · 7 tailles
    Prix
    5 crédits
    Paramètres

    Texte vers image · 5 crédits quelle que soit la taille

    ParamètreValeurs autoriséesPar défaut
    sizeType de valeur: string1024*10241248*832832*12481152*864864*11521360*768768*13601024*1024
    seedType de valeur: integer0–2147483647aléatoire s’il est omis, renvoyé dans la réponse

    Image vers image · 5 crédits quelle que soit la taille

    ParamètreValeurs autoriséesPar défaut
    image_urlsType de valeur: string[]1–3 URL https (obligatoire)—
    sizeType de valeur: string1K1024*10241248*832832*12481152*864864*11521360*768768*13601K
    Page du modèle — Flux 2 Klein 9B Non censuré
  • Modèle
    Moss Image Non censurévellria-moss-image
    Modes de génération
    Texte vers image
    Tailles
    1K, 1.2K, 1.1K, 1.3K, 1.4K, 1.5K, 1.7K · 15 tailles
    Prix
    5 crédits
    Paramètres

    Texte vers image · 5 crédits quelle que soit la taille

    ParamètreValeurs autoriséesPar défaut
    sizeType de valeur: string1024*10241248*832832*12481168*880880*11681136*912912*11361360*768768*13601440*720720*14401552*656656*15521760*576576*17601024*1024
    seedType de valeur: integer0–2147483647aléatoire s’il est omis, renvoyé dans la réponse
    Page du modèle — Moss Image Non censuré
  • Modèle
    Jib Mix Qwen Image Non censurévellria-jib-mix-qwen-image
    Modes de génération
    Texte vers image
    Tailles
    1K, 1.2K, 1.1K, 1.3K · 7 tailles
    Prix
    5 crédits
    Paramètres

    Texte vers image · 5 crédits quelle que soit la taille

    ParamètreValeurs autoriséesPar défaut
    sizeType de valeur: string1024*10241248*832832*12481152*864864*11521360*768768*13601024*1024
    seedType de valeur: integer0–2147483647aléatoire s’il est omis, renvoyé dans la réponse
    Page du modèle — Jib Mix Qwen Image Non censuré
  • Modèle
    Z-Image Spicy Non censurévellria-z-image-spicy
    Modes de génération
    Texte vers image
    Tailles
    1K, 1.5K · 7 tailles
    Prix
    4 crédits
    Paramètres

    Texte vers image · 4 crédits quelle que soit la taille

    ParamètreValeurs autoriséesPar défaut
    sizeType de valeur: string1024*10241024*15361536*10241152*15361536*1152864*15361536*8641024*1536
    seedType de valeur: integer0–2147483647aléatoire s’il est omis, renvoyé dans la réponse
    Page du modèle — Z-Image Spicy Non censuré
  • Modèle
    Z-Image Spicy Pro Non censurévellria-z-image-spicy-pro
    Modes de génération
    Texte vers image
    Tailles
    1K, 2K, 2.5K · 8 tailles
    Prix
    5 crédits
    Paramètres

    Texte vers image · 5 crédits quelle que soit la taille

    ParamètreValeurs autoriséesPar défaut
    sizeType de valeur: string1024*10242048*20481536*20482048*15361680*25202520*16801440*25602560*14401024*1024
    seedType de valeur: integer0–2147483647aléatoire s’il est omis, renvoyé dans la réponse
    Page du modèle — Z-Image Spicy Pro Non censuré
  • Modèle
    Qwen Image Edit Spicy Non censurévellria-qwen-image-edit-spicy
    Modes de génération
    Texte vers imageImage vers image
    Tailles
    1K · 1 taille
    Prix
    10 crédits
    Paramètres

    Texte vers image · 10 crédits quelle que soit la taille

    ParamètreValeurs autoriséesPar défaut
    image_urlsType de valeur: string[]1–3 URL https (obligatoire)—
    sizeType de valeur: string1K1K
    seedType de valeur: integer0–2147483647aléatoire s’il est omis, renvoyé dans la réponse

    Image vers image · 10 crédits quelle que soit la taille

    Page du modèle — Qwen Image Edit Spicy Non censuré

GET/v1/models

Liste tous les modèles avec leurs modes, tailles ou résolutions, paramètres et prix en crédits. Public : aucune clé requise.
curl
curl https://vellria.com/v1/models \
  -H "Authorization: Bearer vll_..."
#

Génération d’images

#

Créez une image à partir d’un prompt texte, ou joignez des images de référence dans image_urls pour les modifier ou en changer le style avec le même identifiant de modèle. L’appel répond aussitôt avec HTTP 202 et l’identifiant de la génération ; l’image est produite en arrière-plan : interrogez donc GET /v1/generations/{id} jusqu’à ce que le statut soit completed, puis téléchargez-la depuis output_url.

Plus de détails

Les crédits de la taille choisie sont débités au démarrage de la génération et remboursés automatiquement si elle échoue. Les tailles, les limites de référence, les paramètres et les prix de chaque modèle viennent de GET /v1/models.

POST/v1/generate/image

Lance une génération d’image. Renvoie 202 avec l’identifiant de la génération ; interrogez-la pour obtenir le résultat.

Paramètres

ParamètreDétails
modelstring · corpsFacultatifIdentifiant du modèle, issu de GET /v1/models.
promptstring · corpsObligatoireCe qu’il faut générer. Au maximum max_prompt_length caractères pour le modèle.
sizestring · corpsFacultatifUn identifiant de taille parmi les sizes du modèle ; la taille par défaut du modèle si le champ est omis.
image_urlsstring[] · corpsFacultatifURL des images de référence : une URL d’import obtenue avec POST /v1/uploads ou n’importe quelle URL https publique. Le nombre d’images acceptées par un modèle et les limites de fichier figurent sous reference_images.
image_urlstring · corpsFacultatifRaccourci pour une seule image de référence.
expectedCostinteger · corpsFacultatifVérification facultative du prix : les crédits que vous attendez pour cette requête. Un prix différent renvoie 409 price_changed et rien n’est débité.

Chaque modèle accepte aussi les paramètres listés sous parameters dans son entrée GET /v1/models, comme seed ; une valeur que le modèle ne déclare pas renvoie 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
  }'
#

Tailles, paramètres et prix de chaque modèle : Modèles d’image.

Prix et coût attendu

#

Les deux endpoints de génération acceptent un champ facultatif expectedCost : le nombre de crédits que vous attendez pour cette requête précise, d'après les prix de GET /v1/models (modèle, taille ou résolution, durée et images de référence supplémentaires). S'il diffère du montant réellement facturé, l'appel renvoie HTTP 409 avec le code price_changed et le prix actuel dans price.cost ; rien n'est débité et aucune génération ne démarre. Omettez le champ pour ignorer cette vérification.

Génération de vidéos

#

Joignez des images de référence dans image_urls et choisissez avec reference_mode la façon dont le modèle les utilise. La valeur par défaut, frame (également appliquée si le champ est omis), fait partir la vidéo de cette image. subject traite chaque image comme la référence d'une personne, d'un objet ou d'un décor qui doit apparaître dans la vidéo, et le prompt les cite sous la forme @image1, @image2, etc., dans l'ordre de image_urls (sans tenir compte de la casse).

Plus de détails

Le mode subject n'existe que sur les modèles dont l'entrée GET /v1/models comporte un bloc subject (null pour les autres) ; ce bloc indique ses propres résolutions, durées, formats et paramètres, la limite de références dans subject.reference_images.max et le modèle du jeton dans subject.reference_token. Il est facturé comme l'image en vidéo sur le même modèle, sans supplément par référence. Erreurs, toutes en HTTP 400 et avant tout débit de crédits : invalid_reference_mode si la valeur n'est ni frame ni subject ou si le modèle n'a pas de mode subject ; invalid_image_urls si le mode subject ne reçoit aucune référence ou plus que le modèle n'en accepte ; invalid_reference_token si le prompt cite un @image sans référence correspondante (par exemple @image3 avec deux images). En mode frame, @image1 est du texte ordinaire.

POST/v1/generate/video

Lance une génération de vidéo à partir d’un prompt, avec des images de référence en option. Renvoie 202 avec l’identifiant de la génération.

Paramètres

ParamètreDétails
modelstring · corpsFacultatifIdentifiant du modèle, issu de GET /v1/models.
promptstring · corpsObligatoireCe qu’il faut générer. Au maximum max_prompt_length caractères pour le modèle.
durationinteger · corpsFacultatifDurée en secondes, dans la plage de durées du mode ; une valeur hors plage renvoie 400.
resolutionstring · corpsFacultatifUn identifiant de résolution parmi les resolutions du mode.
ratiostring · corpsFacultatifUn identifiant de format d’image parmi les ratios du mode.
reference_modeframe | subject · corpsFacultatifframe (par défaut) fait partir la vidéo de la première image ; subject utilise chaque image comme une référence que le prompt cite sous la forme @image1, @image2, etc.
image_urlsstring[] · corpsFacultatifURL des images de référence : une URL d’import obtenue avec POST /v1/uploads ou n’importe quelle URL https publique. Le nombre d’images acceptées par un modèle et les limites de fichier figurent sous reference_images.
image_urlstring · corpsFacultatifRaccourci pour une seule image de référence.
expectedCostinteger · corpsFacultatifVérification facultative du prix : les crédits que vous attendez pour cette requête. Un prix différent renvoie 409 price_changed et rien n’est débité.

Chaque modèle accepte aussi les paramètres listés sous parameters dans son entrée GET /v1/models, comme seed ; une valeur que le modèle ne déclare pas renvoie 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"
  }'
mode subject : image_urls sont les personnes et objets cités dans le 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"
  }'
#

Tailles, paramètres et prix de chaque modèle : Modèles vidéo.

Conversation

#

Chat et roleplay sans censure : incarnez des personnages, écrivez des histoires à deux ou discutez simplement, et partagez des images qu'il comprendra. Par million de tokens : 50 crédits (0,50 $US) en entrée, 200 crédits (2,00 $US) en sortie.

Plus de détails

Il est compatible OpenAI : pointez n'importe quel SDK OpenAI vers l'URL de base de Vellria avec votre clé vll_. Chaque réponse est facturée au token sur vos crédits.

Par million de tokens : entrée 50 crédits (0,50 $US) · entrée en cache 5 crédits (0,05 $US) · sortie 200 crédits (2,00 $US).

  • Les réponses ne sont pas filtrées : Vellria n'ajoute aucune modération de contenu à cet endpoint, la modération de vos propres utilisateurs finaux vous incombe. Une instruction d'identité d'une ligne est placée avant vos messages ; ses tokens ne sont pas facturés et ne comptent pas dans usage.
  • Images : ajoutez des parties image_url à un message user, au plus 4 par message et 8 par requête. Importez d'abord l'image avec POST /v1/uploads et passez l'URL renvoyée ; les data URL sont refusées avec data_url_not_supported.
  • max_tokens vaut 1024 par défaut et au plus 4096. Les champs de raisonnement (reasoning, thinking) sont ignorés et les réponses ne contiennent jamais de raisonnement.
  • Avec stream: true la réponse arrive en événements serveur (lignes data:) au format de fragments OpenAI et se termine par data: [DONE]. Le fragment précédent a un choices vide et porte usage et la facturation. Une erreur après le début du streaming arrive sous forme d'événement data: {"error": …} ; si du texte a déjà été envoyé, ce texte est facturé (le fragment usage arrive juste avant l'erreur), sinon rien n'est facturé.
  • Chaque réponse porte usage d'OpenAI ainsi que credits_charged (crédits fractionnaires), cost_usd et credits_debited (crédits entiers débités du solde maintenant ; les fractions s'accumulent sur votre compte). Les réponses refusées, échouées ou vides ne sont pas facturées ; un streaming que vous annulez est facturé pour les tokens déjà produits.
  • Le solde doit couvrir la réponse la plus longue possible avant le début de la requête (sinon 402 insufficient_credits). Les requêtes par minute et les requêtes simultanées sont limitées par compte (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: "Commençons une histoire." }],
  stream: true,
})
for await (const chunk of stream) {
  process.stdout.write(chunk.choices[0]?.delta?.content ?? "")
}

POST/v1/chat/completions

Envoyez une conversation et recevez la réponse du modèle, entière ou en streaming. Compatible OpenAI ; facturé au token.

Paramètres

ParamètreDétails
modelstring · corpsObligatoireId du modèle de chat dans le groupe text de GET /v1/models.
messagesobject[] · corpsObligatoireLa conversation : des objets avec role (system, user ou assistant) et content. content est un texte ou, dans un message user, une liste de parties text et image_url ; les URL d'image viennent de POST /v1/uploads.
streamboolean · corpsFacultatiftrue diffuse la réponse en événements serveur (SSE) ; false (par défaut) la renvoie entière.
max_tokensinteger · corpsFacultatifNombre maximal de tokens de la réponse : le default_max_tokens du modèle s'il est omis, au plus son max_output_tokens.
temperaturenumber · corpsFacultatifTempérature d'échantillonnage, de 0 à 2.
top_pnumber · corpsFacultatifÉchantillonnage nucleus, supérieur à 0 et au plus 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": "Tu es Mira, une pirate de l'\''espace sarcastique. Reste dans ton personnage."},
      {"role": "user", "content": "Mira, où allons-nous ce soir ?"}
    ],
    "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": "Décris ce personnage et écris-lui une réplique d'\''entrée."},
        {"type": "image_url", "image_url": {"url": "<upload_url>"}}
      ]}
    ]
  }'
#

Import d’images

#

Vous n’avez pas à héberger vous-même les images de référence : envoyez le fichier à cet endpoint en corps brut, récupérez une URL publique et utilisez-la dans image_urls. L’en-tête Content-Type est obligatoire et doit correspondre au corps ; les types acceptés sont image/jpeg, image/png, image/webp, image/bmp et image/gif, avec une limite de 20 Mo par fichier.

Plus de détails

Une image utilisée comme référence doit être une image fixe au format JPEG, PNG, GIF ou WebP de 20 Mo au maximum, sans zone transparente. Une fois ce plafond passé, chaque modèle publie les limites qu’il accepte : `GET /v1/models` les renvoie par modèle sous `reference_images.limits` (octets, côté en pixels, mégapixels). Une référence hors de ces limites est refusée avec HTTP 400 et `image_unreadable`, motif `too_small` ou `too_large`, avant toute dépense de crédits. Les métadonnées (EXIF, par exemple) sont supprimées à l’enregistrement du fichier. L’URL contient un identifiant impossible à deviner et est supprimée 24 heures après l’envoi si aucune génération ne l’utilise (champ expires_at de la réponse) ; utilisée comme référence dans une génération, elle reste disponible 48 heures après l’envoi, bien moins longtemps que les fichiers générés ; une fois ce délai écoulé, l’endpoint renvoie HTTP 410 et content_expired. L’URL du fichier d’une génération (/v1/generations/{id}/file) exige une authentification et ne peut pas servir de référence : les endpoints de génération la refusent avec HTTP 400 et le code reference_not_public avant tout débit de crédits. Importez plutôt le fichier ici, ou transformez une génération d’image en URL de référence publique avec POST /v1/generations/{id}/reference. Les images de référence ne sont soumises à aucun contrôle de contenu : aucune image n’est refusée pour les personnes ou les choses qu’elle montre, et il n’existe aucun refus image_blocked sur ce chemin. Nous ne refusons une référence que lorsque le fichier lui-même est illisible : une image illisible renvoie HTTP 400 et image_unreadable, et reason vaut animated, transparent too_small ou too_large lorsque c’est la cause. Le modèle lui-même peut encore refuser une image de référence qu’il ne parvient pas à traiter ; cette génération échoue alors avec error_code reference_rejected et ses crédits sont remboursés automatiquement. Si une référence ne peut pas être préparée, la requête renvoie HTTP 503 et reference_unavailable, sans débit de crédits. Les prompts envoyés avec une clé d’API arrivent au modèle tels quels ; seules les requêtes impliquant des abus sexuels sur mineurs sont refusées, avec HTTP 400 et le code content_blocked. Chaque référence est d’abord enregistrée comme fichier importé (une image fournie par une URL externe est copiée, sans ses métadonnées), et le prestataire récupère cette même URL figée : il reçoit donc exactement le fichier enregistré.

POST/v1/uploads

Importe une image de référence en corps brut et renvoie une URL publique à utiliser dans image_urls.

Paramètres

ParamètreDétails
Content-Typeimage/* · en-têteObligatoireLe type d’image du corps : image/jpeg, image/png, image/webp, image/bmp ou image/gif.
bodybinary · corpsObligatoireLe fichier image brut, 20 Mo au maximum.
curl
curl https://vellria.com/v1/uploads \
  -H "Authorization: Bearer vll_..." \
  -H "Content-Type: image/png" \
  --data-binary @reference.png
#

GET/v1/uploads/{id}

Récupère une image importée. Public : aucune clé requise, l’identifiant impossible à deviner fait office d’accès.

Paramètres

ParamètreDétails
idstring · cheminObligatoireL’identifiant de l’import.
curl
curl -o reference.png https://vellria.com/v1/uploads/{id}
#

DELETE/v1/uploads/{id}

Supprime un import qu’aucune génération n’a utilisé. Propriétaire uniquement ; renvoie 204. Un import utilisé répond 409 upload_in_use et expire de lui-même.

Paramètres

ParamètreDétails
idstring · cheminObligatoireL’identifiant de l’import.
curl
curl -X DELETE https://vellria.com/v1/uploads/{id} \
  -H "Authorization: Bearer vll_..."
#

POST/v1/generations/{id}/reference

Transforme une génération d’image terminée en fichier de référence public, utilisable dans image_urls.

Paramètres

ParamètreDétails
idstring · cheminObligatoireL’identifiant de la génération.
curl
curl -X POST https://vellria.com/v1/generations/{id}/reference \
  -H "Authorization: Bearer vll_..."
#

Suivre l’état d’une génération

#

Les générations s’exécutent de manière asynchrone ; le statut passe par queued → processing → completed (en file d’attente → en cours → terminé). Les crédits sont remboursés automatiquement lorsqu’une génération échoue.

Plus de détails

La liste GET /v1/generations ne montre que les générations terminées et en cours : une génération en échec n’apparaît ni dans la liste ni dans son total, tandis que GET /v1/generations/{id} la renvoie avec son error_code pendant 30 jours ; ensuite l’enregistrement en échec est supprimé et GET /v1/generations/{id} comme l’endpoint du fichier renvoient HTTP 404 avec le code not_found. Filtrer la liste avec ?status=failed renvoie 400, et les générations en échec sont aussi exclues de la moitié générations de GET /v1/billing/history (generations_total compris). Les échecs qui ne vous ont pas encore été signalés sont listés par GET /v1/generations/failures : count, refunded_cents (crédits réellement remboursés, 0 sans remboursement), until et jusqu'à 5 des plus récents dans data. Marquez-les comme vus avec POST /v1/generations/failures/seen en envoyant soit ids (1 à 50 identifiants de génération), soit until (tous les échecs jusqu'à cet horodatage) ; les identifiants d'autres comptes sont ignorés et un échec n'est signalé qu'une fois, quel que soit l'appareil.

GET/v1/generations/{id}

Lit une génération : son statut, output_url une fois terminée, ou error_code en cas d’échec.

Paramètres

ParamètreDétails
idstring · cheminObligatoireL’identifiant de la génération.
curl
curl https://vellria.com/v1/generations/{id} \
  -H "Authorization: Bearer vll_..."
#

GET/v1/generations

Liste vos générations, paginées et filtrables. Les générations en échec n’y figurent pas.

Paramètres

ParamètreDétails
limitinteger · requêteFacultatifTaille de page, 1-50 (20 par défaut).
offsetinteger · requêteFacultatifNombre de lignes à ignorer.
typeimage | video · requêteFacultatifimage ou video.
statusstring · requêteFacultatifqueued, processing ou completed ; failed renvoie 400.
modelstring · requêteFacultatifUniquement les générations faites avec cet identifiant de modèle.
favoritesstring · requêteFacultatif1 ou true : favoris uniquement.
availablestring · requêteFacultatif1 ou true : uniquement les générations dont le fichier est encore conservé ; les fichiers expirés ou supprimés sont exclus de data et total.
qstring · requêteFacultatifRecherche dans le prompt et le modèle.
curl
curl "https://vellria.com/v1/generations?type=image" \
  -H "Authorization: Bearer vll_..."
#

GET/v1/generations/{id}/file

Télécharge le fichier généré. Exige votre clé : il ne peut donc pas servir d’URL de référence.

Paramètres

ParamètreDétails
idstring · cheminObligatoireL’identifiant de la génération.
downloadstring · requêteFacultatifN’importe quelle valeur : le fichier est servi en pièce jointe.
thumbstring · requêteFacultatifTaille de la miniature, images uniquement.
curl
curl -o result.png https://vellria.com/v1/generations/{id}/file \
  -H "Authorization: Bearer vll_..."
#

GET/v1/generations/failures

Les générations en échec dont vous n’avez pas encore été informé, avec les crédits remboursés.
curl
curl https://vellria.com/v1/generations/failures \
  -H "Authorization: Bearer vll_..."
#

POST/v1/generations/failures/seen

Marque des échecs comme vus, par identifiant ou jusqu’à un horodatage.

Paramètres

ParamètreDétails
idsstring[] · corpsFacultatif1-50 identifiants de génération à marquer comme vus.
untilinteger · corpsFacultatifUn horodatage Unix en millisecondes, la valeur until de GET /v1/generations/failures : tous les échecs jusqu’à cette date sont marqués.
curl
curl -X POST https://vellria.com/v1/generations/failures/seen \
  -H "Authorization: Bearer vll_..." \
  -H "Content-Type: application/json" \
  -d '{"ids": ["gen_..."]}'
#

Ajouter des crédits

#

Les crédits s’achètent sur une page de paiement hébergée. GET /v1/billing/packages renvoie une liste unique de packs, chacun avec un id, un prix usd et ses crédits, ainsi que min_usd et max_usd pour un montant libre ; récupérez ces valeurs depuis l’endpoint plutôt que de les coder en dur.

Plus de détails

POST /v1/billing/create-checkout accepte soit un package_id de cette liste, soit un price_amount libre en USD entre 30 et 10000, arrondi au centime ; un montant libre est converti au même taux fixe que les packs. Si les deux sont envoyés, package_id l’emporte et le prix comme les crédits proviennent du catalogue. Un package_id inconnu renvoie HTTP 400 avec le code invalid_package, et un montant hors limites renvoie invalid_amount. Cinq paiements au maximum peuvent être ouverts en même temps ; au-delà, la requête renvoie HTTP 429 jusqu’à ce que l’un d’eux soit payé, annulé ou expiré. La réponse est l’enregistrement du paiement, avec un checkout_url : redirigez le payeur vers cette adresse pour qu’il paie en USD par carte (Visa ou Mastercard) sur la page sécurisée de notre partenaire de paiement. Les crédits sont ajoutés automatiquement dès que le paiement est confirmé ; suivez son statut avec GET /v1/billing/payments/{id}. POST /v1/billing/payments/{id}/cancel marque un paiement ouvert comme annulé ; s’il aboutit malgré tout, les crédits sont tout de même ajoutés. Le champ facultatif provider choisit le prestataire qui encaisse le paiement ; les valeurs acceptées sont whop (carte), nowpayments (crypto) et telegram_stars (Étoiles Telegram). GET /v1/billing/packages liste dans providers les prestataires ouverts au checkout, et le premier est utilisé par défaut si le champ est omis. Un prestataire inconnu ou fermé renvoie HTTP 400 avec le code invalid_provider, et une liste providers vide signifie que les paiements sont indisponibles pour le moment. Chaque pack indique aussi dans excluded_providers les prestataires qui ne peuvent pas l’encaisser, par exemple telegram_stars quand le pack dépasse la limite de facture des Étoiles Telegram ; un checkout de ce pack avec un prestataire exclu renvoie HTTP 400 avec le code package_unavailable_for_provider et n’ouvre aucun paiement. GET /v1/billing/balance renvoie credits, le total dépensable, réparti entre permanent_credits, qui n'expirent jamais, subscription_credits, qui expirent à subscription_expires_at (un horodatage en millisecondes, ou null s'il n'y a pas de crédits d'abonnement actifs), et gift_credits, le cadeau unique d'inscription, qui expirent à gift_expires_at (null s'il n'y a pas de cadeau actif) ; les dépenses utilisent d'abord les crédits offerts, puis les crédits d'abonnement, puis les crédits permanents. Les formules d'abonnement mensuel sont listées à part dans plans de GET /v1/billing/packages, chacune avec un id, un nom, un prix mensuel en usd et les crédits accordés à chaque période. POST /v1/billing/subscribe prend un plan_id de cette liste et renvoie l'abonnement en attente avec un checkout_url vers lequel envoyer le payeur. Les abonnements se paient uniquement par carte : un provider autre que whop renvoie HTTP 400 avec le code invalid_provider, et un plan_id inconnu renvoie invalid_plan. Chaque période payée remplace les crédits d'abonnement restants par le montant complet de la formule ; les crédits d'abonnement non utilisés ne sont pas reportés et les crédits permanents ne sont pas touchés. S'abonner à la formule que vous avez déjà renvoie HTTP 409 avec already_subscribed. Passer à une formule supérieure la démarre immédiatement et ajoute les crédits restants de la formule actuelle à la nouvelle période ; passer à une formule inférieure renvoie HTTP 409 avec downgrade_requires_cancel. GET /v1/billing/subscription renvoie l'abonnement actif dans subscription (plan_id, status, current_period_end et cancel_at_period_end) et un paiement ouvert dans pending ; chaque champ vaut null s'il n'existe pas. Un seul paiement peut être ouvert à la fois : se réabonner à la même formule renvoie le paiement ouvert, choisir une autre formule ferme d'abord celui qui est ouvert, et un paiement encore en cours d'ouverture renvoie HTTP 409 avec checkout_in_progress. POST /v1/billing/subscription/cancel arrête le renouvellement à la fin de la période en cours : les crédits d'abonnement restent utilisables jusqu'à current_period_end et rien n'est remboursé. Il renvoie l'abonnement avec cancel_at_period_end à true (un nouvel appel renvoie la même chose), HTTP 404 avec subscription_not_found s'il n'y a pas d'abonnement actif et HTTP 502 avec subscription_cancel_failed si l'annulation n'a pas pu être confirmée ; réessayez dans ce cas. Chaque plan de plans porte aussi un rank : un plan de rank plus élevé est une montée en gamme par rapport à un plan de rank plus bas ; lisez le sens dans rank, pas dans le prix. GET /v1/billing/history liste les paiements d’abonnement à part, dans subscription_payments (type subscription, payment_id, subscription_id, plan_id, amount_usd, status paid, refunded ou mismatch, period_end et created_at), paginés séparément avec subscription_payments_offset et comptés dans subscription_payments_total.

GET/v1/billing/balance

Vos crédits dépensables, répartis entre crédits permanents, crédits d’abonnement et crédits offerts.
curl
curl https://vellria.com/v1/billing/balance \
  -H "Authorization: Bearer vll_..."
#

GET/v1/billing/packages

Les packs de crédits, la plage du montant libre, les prestataires de paiement ouverts et les formules d’abonnement. Public.
curl
curl https://vellria.com/v1/billing/packages
#

POST/v1/billing/create-checkout

Ouvre une page de paiement hébergée pour un pack ou un montant libre, puis envoyez le payeur vers checkout_url.

Paramètres

ParamètreDétails
package_idstring · corpsFacultatifUn identifiant de pack issu de GET /v1/billing/packages ; il l’emporte si price_amount est aussi envoyé.
price_amountnumber · corpsFacultatifUn montant libre en USD entre min_usd et max_usd, arrondi au centime.
providerstring · corpsFacultatifUne valeur de providers dans GET /v1/billing/packages ; la première si le champ est omis.
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}

Lit un paiement et son statut ; les crédits sont ajoutés dès qu’il est confirmé.

Paramètres

ParamètreDétails
idstring · cheminObligatoireL’identifiant du paiement.
curl
curl https://vellria.com/v1/billing/payments/{id} \
  -H "Authorization: Bearer vll_..."
#

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

Marque un paiement ouvert comme annulé. S’il est payé malgré tout, les crédits sont tout de même ajoutés.

Paramètres

ParamètreDétails
idstring · cheminObligatoireL’identifiant du paiement.
curl
curl -X POST https://vellria.com/v1/billing/payments/{id}/cancel \
  -H "Authorization: Bearer vll_..."
#

GET/v1/billing/history

Vos paiements, générations facturées et paiements d’abonnement, chaque liste étant paginée séparément.

Paramètres

ParamètreDétails
limitinteger · requêteFacultatifTaille de page, 1-50 (20 par défaut).
payments_offsetinteger · requêteFacultatifDécalage pour la liste des paiements uniquement.
generations_offsetinteger · requêteFacultatifDécalage pour la liste des générations uniquement.
subscription_payments_offsetinteger · requêteFacultatifDécalage pour la liste des paiements d’abonnement uniquement.
curl
curl "https://vellria.com/v1/billing/history?limit=20" \
  -H "Authorization: Bearer vll_..."
#

GET/v1/chat/usage

Vos requêtes de chat, de la plus récente : source, tokens, coût fractionnaire en crédits et son équivalent en USD, ainsi que le coût cumulé pas encore déduit de votre solde.

Paramètres

ParamètreDétails
limitinteger · requêteFacultatifTaille de page, 1-50 (20 par défaut).
offsetinteger · requêteFacultatifNombre de lignes à ignorer.
curl
curl "https://vellria.com/v1/chat/usage?limit=20" \
  -H "Authorization: Bearer vll_..."
#

POST/v1/billing/subscribe

Ouvre une page de paiement pour une formule mensuelle. Carte uniquement.

Paramètres

ParamètreDétails
plan_idstring · corpsObligatoireUn identifiant de formule issu de plans dans GET /v1/billing/packages.
providerstring · corpsFacultatifCarte uniquement (whop) ; toute autre valeur renvoie 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

L’abonnement actif et, le cas échéant, le paiement d’abonnement ouvert.
curl
curl https://vellria.com/v1/billing/subscription \
  -H "Authorization: Bearer vll_..."
#

POST/v1/billing/subscription/cancel

Arrête le renouvellement à la fin de la période en cours ; rien n’est remboursé.
curl
curl -X POST https://vellria.com/v1/billing/subscription/cancel \
  -H "Authorization: Bearer vll_..."
#

Conservation

#

Les fichiers générés sont conservés 7 jours, puis supprimés du serveur. L’enregistrement reste dans votre historique de facturation, mais le fichier devient inaccessible.

Plus de détails

La réponse de GET /v1/generations porte un champ retention_days et chaque génération porte expires_at ; demander un fichier expiré renvoie HTTP 410 avec le code content_expired. Téléchargez tout ce que vous devez garder plus longtemps. Vous pouvez aussi supprimer une génération vous-même : DELETE /v1/generations/{id} supprime immédiatement le fichier stocké et renvoie purged_at. Une génération supprimée disparaît de l’API : elle n’apparaît plus dans GET /v1/generations, et GET /v1/generations/{id}, l’endpoint du fichier et un second DELETE renvoient HTTP 404 avec le code not_found, comme un id qui n’a jamais existé. Les crédits qu’elle a coûtés ne sont pas remboursés et restent dans GET /v1/billing/history. L’enregistrement d’une génération en échec est supprimé au bout de 30 jours ; ensuite GET /v1/generations/{id} et l’endpoint du fichier renvoient HTTP 404. Une génération encore queued ou processing ne peut pas encore être supprimée et renvoie HTTP 409 avec le code generation_in_progress.

DELETE/v1/generations/{id}

Supprime dès maintenant une génération : son fichier est effacé et l’enregistrement disparaît de l’API (404) ; les crédits qu’elle a coûtés restent dans l’historique de facturation.

Paramètres

ParamètreDétails
idstring · cheminObligatoireL’identifiant de la génération.
curl
curl -X DELETE https://vellria.com/v1/generations/{id} \
  -H "Authorization: Bearer vll_..."
#

Fermer votre compte

#

Fermer votre compte supprime vos générations et leurs fichiers stockés, vos fichiers importés, vos clés API et vos messages d’assistance, puis vous déconnecte. Les crédits restant sur le compte sont perdus et ne sont pas remboursés.

Plus de détails

Les données de paiement sont conservées à titre de justificatifs de facturation : un compte fermé figure donc toujours dans l’historique des paiements que nous sommes tenus de conserver. L’endpoint s’authentifie uniquement par session : il est appelé depuis la page Compte de la Console, et une requête portant une clé API est refusée avec HTTP 403. Un compte dont un paiement n’a pas encore abouti ne peut pas être fermé et renvoie HTTP 409 avec le code pending_payment, car ce paiement peut encore être crédité ; le même 409 avec merge_in_progress est renvoyé pendant que le compte est en cours de liaison avec un autre compte. Dans les deux cas, patientez un instant, puis réessayez.

DELETE/v1/account

Ferme votre compte. Session uniquement : appelé depuis la Console, refusé avec une clé API.
#

Politique de contenu

#

Les requêtes faites avec une clé d’API arrivent au modèle telles qu’envoyées : le prompt et negative_prompt parviennent au prestataire octet pour octet, et lorsqu’un modèle propose la réécriture du prompt comme réglage, ce réglage est envoyé désactivé (quelques modèles vidéo gardent leur étape de réflexion interne). La modération dans votre application relève de votre responsabilité.

Plus de détails
  • Un seul contrôle reste sur l’API : les requêtes impliquant des abus sexuels sur mineurs sont refusées avec HTTP 400 et content_blocked avant tout débit de crédits (HTTP 503 avec Retry-After si le contrôle est momentanément indisponible). Rien d’autre n’est contrôlé, images de référence comprises. Les conditions interdisent toujours la zoophilie, l’inceste entre parents par le sang, les relations sexuelles non consenties, la violence extrême et le gore, le contenu en caméra cachée et la représentation d’une personne réelle sans son consentement ; la règle sur les mineurs et celle sur l’absence de consentement relèvent de la tolérance zéro et toute infraction entraîne la fermeture du compte sans préavis. Les prompts envoyés depuis la console Vellria sont aussi contrôlés automatiquement.
  • Le prestataire qui exécute un modèle applique son propre filtre de sécurité et peut refuser une requête après son démarrage ; la génération est alors marquée comme échouée et les crédits débités au départ sont remboursés automatiquement.