Pour les développeurs
Une API d’image NSFW qui rend le prompt envoyé par votre code
Une API d’image NSFW, autrement dit une API de génération d’images sans censure, accepte les prompts adultes venus de votre propre logiciel et renvoie le rendu sans reformuler la demande au préalable. C’est essentiel, car un prompt réécrit échoue en silence : l’appel réussit, la réponse a l’air normale, et l’image n’est pas celle demandée. Vellria expose tout son catalogue derrière une seule forme REST, avec des clés Bearer, des tâches asynchrones à interroger et des crédits prépayés remboursés d’office si une génération échoue.
Pourquoi les intégrations cassent sur la couche de modération
La plupart des API d’image se cachent derrière une étape de réécriture invisible. Votre texte est remanié en quelque chose que le fournisseur juge plus sûr, la version remaniée est rendue, et la réponse ne contient aucun champ signalant la substitution. Vu de votre application, tout indique un succès, soit le pire mode d’échec possible : rien à intercepter, rien à relancer, et une file de résultats qui, sans bruit, ne correspondent pas à leurs entrées.
Le second échec, c’est le refus qui surgit sous forme d’erreur à une fréquence imprévisible. Un prompt qui marchait hier renvoie aujourd’hui une erreur de politique, parce que le modèle de modération a changé sous vos pieds, pas votre requête. Relancer n’y fait rien, l’erreur n’est pas déterministe, et le code écrit pour la gérer accumule les cas particuliers autour d’une frontière que personne n’a publiée.
Ni l’un ni l’autre n’est une limite de débit ou une panne, donc aucun n’apparaît là où vous regarderiez d’habitude. Ils se traduisent par une lente perte de confiance dans votre propre chaîne, et la réponse habituelle est une couche défensive d’heuristiques qui triturent les prompts et dégradent le résultat, pour un problème qui n’a jamais été le vôtre.
Modèles
La forme de la requête
Les clés sont créées dans la Console et voyagent comme jeton Bearer. Un endpoint ouvre une tâche : nommez le modèle, passez-lui le prompt, ajoutez ce que ce modèle accepte. Ce qui revient est un identifiant, pas une image — la connexion se ferme aussitôt, car un rendu de trente secondes gardé dans une requête HTTP est un délai d’expiration en puissance, et toutes les intégrations qui l’ont tenté ont appris la même leçon.
À partir de là, vous interrogez la tâche au lieu de l’attendre. Un simple GET sur cet identifiant indique où en est le travail : encore en file d’attente, en plein rendu, terminé ou en échec. Votre processus peut s’arrêter et redémarrer entre deux appels sans rien perdre, puisque la tâche appartient au serveur et non à la connexion qui l’a ouverte.
Une habitude mérite d’être prise tôt : demandez à l’endpoint du catalogue ce qui existe plutôt que d’écrire des identifiants de modèle dans un fichier de constantes. Cet endpoint alimente l’affichage du site lui-même et sert de base à la facturation du registre, il bouge donc à l’instant où quelque chose change. Une liste codée en dur ne bouge pas, et vous l’apprenez des semaines plus tard par un appel refusé qui nomme une dimension retirée. La page de chaque modèle lit aussi cet endpoint et montre l’identifiant à envoyer avec les formats et coûts acceptés : les pages API Seedream, API Qwen pour l’image et API Wan pour l’image en sont trois exemples.
Images de référence et limites de débit
Les modèles d’édition ont besoin d’une image sur laquelle travailler, et les images passent d’abord par leur propre endpoint. Envoyez le fichier, gardez l’adresse qu’il renvoie et citez-la à l’ouverture de la tâche. Quiconque détient l’adresse peut la récupérer sans session, et c’est voulu : la machine qui effectue le rendu vit hors de votre compte et doit pourtant lire les octets.
Le catalogue ne brouille pas la frontière entre types de modèles. Ne donnez rien à regarder à un modèle à références, il décline ; joignez un fichier à un modèle texte seul, il décline aussi, au lieu de continuer comme si l’import n’était qu’une décoration. L’inverse vous facturerait une image que le rendu n’a jamais ouverte, tout en annonçant un succès.
La limitation est comptée par compte, et le refus vous indique le nombre de secondes à patienter. Ce chiffre existe pour que votre logique de nouvelle tentative puisse le lire, un objectif bien différent d’une ligne de journal qu’un humain déchiffre après coup.
Une facturation qui ne pénalise pas les tâches échouées
Le registre bouge au début d’une tâche plutôt qu’à sa fin, puisque c’est là que le travail est commandé. La conséquence qui intéresse les appelants automatisés : une tâche qui meurt chez le prestataire rend aussitôt ses crédits en arrivant à l’état d’échec. Rien à déposer, personne à qui écrire, et les deux écritures restent dans l’historique, où votre rapprochement les retrouve.
Rien, sur le compte, ne se renouvelle. Un service qui envoie vingt appels une semaine et aucun la suivante paie vingt appels, car aucune formule en dessous ne prélève de minimum. Chaque pack achète des crédits au même taux, et un pack achète du solde, rien d’autre — aucune clé n’est plus rapide, aucune n’atteint des modèles qu’une autre ne peut pas atteindre.
Face aux places de marché d’API généralistes
Si vous hésitez entre l’API de fal.ai, celle de Replicate ou ModelsLab pour de l’image adulte, la comparaison utile n’est pas une grille de fonctionnalités mais ce que chacun fait par défaut, tel que ses propres documents le formulaient le 12 septembre 2026. Le schéma publié par fal pour son endpoint FLUX.1 [dev] fixe enable_safety_checker à true ; le désactiver exige une autorisation sur le compte, une requête sans cette autorisation est toujours contrôlée, et une image signalée revient noire. La référence texte en image de ModelsLab met de même safety_checker à true par défaut et remplace une image signalée par une image vide, tandis que ses conditions d’utilisation, datées du 24 juin 2023, ne contiennent qu’une clause générale contre les usages illégaux ou nuisibles et rien d’écrit sur le contenu adulte en tant que tel.
Les documents de politique divergent plus encore que les paramètres. La politique d’utilisation acceptable de Novita, en vigueur depuis le 5 août 2026, range les contenus sexuellement explicites parmi les usages interdits et ne décrit aucune option d’adhésion pour le travail adulte. Les conditions de Replicate, mises à jour le 1er avril 2026, excluent la nudité non consentie et le matériel sexuel illégal, et leur section 8.6 dit en toutes lettres que les services peuvent générer du contenu adulte explicite, la responsabilité en incombant au client. Lisez ces clauses avant d’écrire le code d’intégration, puisque ce sont elles qui décident de ce que la plateforme permet. L’API d’image de Venice AI, avec son propre réglage de sécurité par défaut, est confrontée à la nôtre dans l’alternative à Venice AI.
La facturation n’a pas non plus la même forme. ModelsLab vend des formules mensuelles qui varient selon le volume d’appels et le nombre de requêtes simultanées plutôt que selon les modèles accessibles ; la page de modèle de fal n’annonce ni abonnement ni engagement minimum et facture ce modèle d’image au mégapixel ; Novita fonctionne au paiement à l’usage et facture à l’image sur les modèles d’image que nous avons consultés. Vellria se rapproche des deux derniers : un solde prépayé, un prix en crédits par image affiché sur la page de chaque modèle, et rien qui se renouvelle.
Ce qui manque à Vellria, dit tout aussi franchement. Il n’y a pas de SDK : un appel à cette API d’image adulte est un simple HTTPS avec un corps JSON, depuis le langage de votre choix. L’API n’est pas compatible OpenAI, donc un client OpenAI ne lui parlera pas si vous changez seulement l’URL de base. Il n’y a pas de webhooks sortants ; vous apprenez l’issue d’une tâche en l’interrogeant. Et le catalogue se limite à l’image et à la vidéo, sans modèle de texte ni de chat. Si l’un de ces points est une exigence, Vellria n’est pas la bonne pièce pour cette partie de votre pile ; et si l’exigence est de faire tourner vous-même des poids, le guide open source ou hébergé détaille ce que coûte cette voie.
La limite, énoncée une fois
Rien ne réécrit le prompt, et l’espace qui s’ouvre est réellement large — travail adulte fictif compris. Certaines choses restent fermées quels que soient la clé, le solde ou l’endpoint : les personnes réelles identifiables qui n’ont jamais accepté d’apparaître, et les catégories que les conditions excluent même en fiction, comme la zoophilie, l’inceste, l’absence de consentement et le gore extrême. Franchissez cette ligne et le compte disparaît, clés comprises.
Les contrôles automatiques ne cherchent pas les personnes réelles ordinaires. Le contrôle du prompt écarte tout prompt où il reconnaît une catégorie d’un ensemble fermé, dont la sexualisation d’un mineur, ou qui nomme une personnalité connue, et celui des références rejette, avec HTTP 400 et image_blocked, l’image où il pense repérer un âge peut-être inférieur à 21 ans, un visage célèbre ou des instructions glissées dans l’image pour le tromper. La règle sur les personnes réelles ordinaires est donc à faire respecter dans votre propre produit ; l’API ne la détectera pas pour vous. La page sur ce que permet un générateur d’image IA NSFW donne la politique complète, et la référence de l’API contient les corps de requête, codes de statut et formes d’erreur. Pour des clips plutôt que des images fixes, l’API vidéo NSFW prend les mêmes clés et le même principe d’interrogation.
Questions fréquentes
L’API réécrit-elle ou modère-t-elle mon prompt ?
Non. Ce que votre code envoie est exactement ce que le modèle rend. Restent des contrôles automatiques — sur le prompt, pour une liste fixe de catégories dont les mineurs, et sur toute image de référence envoyée, pour l’âge apparent et un visage connu, jamais pour le ton ni le degré d’explicite — et une requête qu’ils interceptent revient comme une erreur franche avant tout mouvement de crédits, au lieu d’être substituée en silence : votre application peut la traiter comme une erreur plutôt que la découvrir dans le résultat.
Est-ce synchrone, ou dois-je interroger ?
Vous interrogez. Lancer une génération renvoie aussitôt un identifiant d’enregistrement, et vous relisez cet enregistrement jusqu’à ce que la tâche soit terminée ou en échec. Rien n’est perdu si votre processus redémarre ou si une connexion tombe, car la tâche vit sur le serveur et non dans la requête qui l’a créée.
Que deviennent mes crédits quand une génération échoue ?
L’annulation est automatique. Le débit a lieu à l’ouverture de la tâche, et un échec côté prestataire rend ce débit dès que la tâche atteint l’état d’échec. Les deux mouvements figurent dans l’historique : rien en aval n’a à rapprocher un écart à la main.
Puis-je envoyer des images de référence depuis le code ?
Oui, via une étape d’import séparée. Le fichier monte, vous gardez l’adresse renvoyée, et cette adresse désigne l’image quand vous ouvrez une tâche. Elle se récupère sans session, puisque la machine de rendu se trouve hors de votre compte.
Existe-t-il des clés ou des formules à part pour les gros volumes ?
Aucun palier. Les clés sont délivrées depuis la Console et chacune atteint tout le catalogue aux mêmes conditions ; le volume est une question de solde, pas de formule. Les limites de débit s’appliquent par compte, et une réponse limitée indique le nombre de secondes à patienter.
Y a-t-il un SDK ou un endpoint compatible OpenAI ?
Ni l’un ni l’autre. Les requêtes sont du HTTPS ordinaire avec un corps JSON et une clé Bearer : n’importe quel client HTTP convient, mais il n’y a pas de bibliothèque officielle à installer, et un client OpenAI pointé vers une autre URL de base ne parlera pas cette API. Les résultats arrivent par interrogation, pas par webhook. Le guide d’intégration pas à pas montre toute la boucle en code.



