Seedream 5.0 Flash API
Générez des images, éditez des références ou décomposez une image en calques avec votre clé API Seevio. Les tâches s'exécutent de façon asynchrone ; enregistrez taskId et interrogez le point de terminaison de la tâche ou recevez un callback.
POST https://api.seevio.ai/v1/images/generationsFonctionnalités
| Fonctionnalité | Valeurs acceptées |
|---|---|
| Modes de génération | text-to-image, image-to-image, layer-decomposition |
| Résolution de sortie | auto, 1K, 1.5K, 2K |
| Format d'image | 1:1, 4:3, 3:4, 16:9, 9:16, 2:3, 3:2, 21:9 |
| Images de référence | URL HTTPS publiques d'images PNG / JPEG / WebP, jusqu'à 30 Mo chacune. N'incluez aucune image pour le mode texte-vers-image, 1 à 10 pour le mode image-vers-image, et exactement une pour la décomposition en calques. |
| Prompt | Le prompt doit contenir entre 4 et 5 000 caractères après suppression des espaces au début et à la fin. En mode layer-decomposition uniquement, le champ prompt peut être omis ou vide. |
| Format de sortie | png, jpg |
Tarifs et crédits
Les tarifs ci-dessous s'entendent par image générée. Une génération classique réserve le montant d'une image. La décomposition en calques réserve 17 images, régularise selon le nombre réellement renvoyé (image de base incluse) et recrédite les crédits non utilisés sur leur solde d’origine. Les tâches échouées sont intégralement remboursées.
| Résolution de sortie | Tarifs et crédits |
|---|---|
| auto | 2 crédits |
| 1K | 2 crédits |
| 1.5K | 2 crédits |
| 2K | 2 crédits |
À la résolution par défaut 2K, la décomposition en calques réserve 34 crédits. Si quatre images sont renvoyées, le coût final est de 8 crédits et 26 crédits vous sont restitués.
L'idempotence des requêtes n'est pas prise en charge. Chaque requête POST valide crée une nouvelle tâche facturable. Si le résultat d'une soumission est incertain, interrogez le taskId renvoyé ; renvoyer la requête POST risque de créer une autre tâche.
Authentification
Générez une clé API depuis votre tableau de bord. La clé complète ne s'affiche qu'une seule fois. Conservez-la en toute sécurité sur votre serveur et transmettez-la comme jeton Bearer lors de chaque requête.
URL de base
https://api.seevio.aiAuthorization: Bearer sk_live_your_api_key
Content-Type: application/jsonDéfinissez la variable d'environnement SEEVIO_API_KEY avant d'exécuter ces exemples. Les exemples en JavaScript s'exécutent sur votre serveur avec Node.js ; les exemples en Python utilisent la bibliothèque requests.
Corps de la requête
| Champ | Type | Requis | Description et contraintes |
|---|---|---|---|
model | string | Oui | Identifiant du modèle. Pour utiliser Seedream 5.0 Flash, définissez ce champ sur seedream-5-0-flash. |
callback_url | string | Non | Point de terminaison HTTPS public pour recevoir les appels POST en cas de succès ou d'échec. Les réseaux privés et localhost ne sont pas autorisés. Exemple: https://example.com/webhooks/seevio |
input | object | Oui | Paramètres de génération. Un prompt est requis pour les modes texte-vers-image et image-vers-image ; il est optionnel pour la décomposition en calques. |
Paramètres d'entrée
| Champ | Type | Requis | Par défaut | Description et contraintes |
|---|---|---|---|---|
input.prompt | string | Sous conditions | — | Le prompt doit contenir entre 4 et 5 000 caractères après suppression des espaces au début et à la fin. En mode layer-decomposition uniquement, le champ prompt peut être omis ou vide. Exemple: A minimalist ceramic teapot on a stone pedestal, soft studio lighting |
input.generation_type | string | Non | text-to-image | Utilisez text-to-image pour créer une image, image-to-image pour modifier des images de référence ou layer-decomposition pour séparer une image en éléments réutilisables. Valeurs acceptées text-to-image | image-to-image | layer-decomposition |
input.image_urls | string[] | Sous conditions | [] | URL HTTPS publiques d'images PNG / JPEG / WebP, jusqu'à 30 Mo chacune. N'incluez aucune image pour le mode texte-vers-image, 1 à 10 pour le mode image-vers-image, et exactement une pour la décomposition en calques. Exemple: ["https://example.com/teapot.png"] |
input.aspect_ratio | string | Non | 1:1 | Format d'image Valeurs acceptées 1:1 | 4:3 | 3:4 | 16:9 | 9:16 | 2:3 | 3:2 | 21:9Exemple: 1:1 |
input.resolution | string | Non | 2K | Les modes texte-vers-image et image-vers-image prennent en charge le 1K, 1.5K et 2K. La décomposition en calques accepte également le mode auto. Valeur par défaut : 2K. Valeurs acceptées auto | 1K | 1.5K | 2KExemple: 2K |
input.output_format | string | Non | png | Format de sortie demandé. Pour la décomposition en calques, png renvoie une image de base en PNG et jpg renvoie une image de base en JPEG. Tous les calques séparés sont renvoyés au format PNG avec conservation de la transparence. Valeurs acceptées png | jpgExemple: png |
Chaque requête crée une tâche. Les modes texte-en-image et image-en-image renvoient une seule image. Le mode décomposition en calques (layer-decomposition) renvoie entre 1 et 17 images, y compris l'image de base. Ne spécifiez pas aspect_ratio pour le mode layer-decomposition.
Démarrage rapide
Envoyez cette requête minimale, enregistrez le taskId renvoyé, puis utilisez l'exemple d'interrogation de tâche ci-dessous. Le montant des crédits affiché dans la réponse de création correspond à la provision réservée.
curl --fail-with-body https://api.seevio.ai/v1/images/generations \
-H "Authorization: Bearer $SEEVIO_API_KEY" \
-H "Content-Type: application/json" \
--data '{
"model": "seedream-5-0-flash",
"input": {
"prompt": "A minimalist ceramic teapot on a stone pedestal, soft studio lighting",
"aspect_ratio": "1:1",
"resolution": "2K",
"output_format": "png",
"generation_type": "text-to-image"
}
}'Exemple de réponse à la création de tâche
{
"taskId": "3f2aK9mR7xQp4TnZ8bLc6YwH",
"credits": 2
}Texte vers image
Générez des images, éditez des références ou décomposez une image en calques avec votre clé API Seevio. Les tâches s'exécutent de façon asynchrone ; enregistrez taskId et interrogez le point de terminaison de la tâche ou recevez un callback.
curl --fail-with-body https://api.seevio.ai/v1/images/generations \
-H "Authorization: Bearer $SEEVIO_API_KEY" \
-H "Content-Type: application/json" \
--data '{
"model": "seedream-5-0-flash",
"input": {
"prompt": "A minimalist ceramic teapot on a stone pedestal, soft studio lighting",
"aspect_ratio": "1:1",
"resolution": "2K",
"output_format": "png",
"generation_type": "text-to-image"
}
}'Image vers image
Pour la retouche d'image, définissez generation_type sur image-to-image et renseignez image_urls. Tous les autres paramètres utilisent le même contrat d'interface.
Remplacez les URL d'exemple d'example.com par vos propres fichiers accessibles via HTTPS public. Les URL d'illustration servent uniquement à montrer la structure de la requête et ne pointent pas vers des ressources téléchargeables.
curl --fail-with-body https://api.seevio.ai/v1/images/generations \
-H "Authorization: Bearer $SEEVIO_API_KEY" \
-H "Content-Type: application/json" \
--data '{
"model": "seedream-5-0-flash",
"input": {
"prompt": "Change the teapot to matte sage green. Preserve its shape and the studio lighting.",
"aspect_ratio": "1:1",
"resolution": "2K",
"output_format": "png",
"generation_type": "image-to-image",
"image_urls": [
"https://example.com/teapot.png"
]
}
}'Décomposition en calques
Définissez generation_type sur layer-decomposition et fournissez exactement une URL d'image. Omettez le paramètre aspect_ratio. Le paramètre output_format contrôle uniquement le format de l'image de base. Les calques séparés sont toujours renvoyés au format PNG avec conservation de la transparence. Enregistrez chaque URL renvoyée dans data.results.
curl --fail-with-body https://api.seevio.ai/v1/images/generations \
-H "Authorization: Bearer $SEEVIO_API_KEY" \
-H "Content-Type: application/json" \
--data '{
"model": "seedream-5-0-flash",
"input": {
"generation_type": "layer-decomposition",
"image_urls": [
"https://example.com/teapot.png"
],
"resolution": "2K",
"output_format": "png"
}
}'La décomposition en calques peut renvoyer plusieurs URL d'images dans data.results : l'image de base et les calques séparés. Chaque URL pointe vers une image distincte. Le nombre de résultats varie selon la tâche (1 à 17 images au total) ; traitez l'ensemble du tableau et ne vous limitez pas à data.results[0]. La réponse à la requête de suivi d’une tâche terminée et le webhook de finalisation contiennent ce tableau. La réponse initiale à la création contient le taskId et les crédits réservés, mais pas les URL des images.
Exemple de réponse à la création de tâche
{
"taskId": "3f2aK9mR7xQp4TnZ8bLc6YwH",
"credits": 34
}Décomposition en calques terminée : plusieurs URL d'images
Exemple de réponse illustrant quatre images générées : une image de base et trois calques. Votre tâche peut renvoyer un nombre différent d'éléments. À la résolution demandée de 2K, le champ credits indique le coût final pour l'ensemble des quatre images ; la partie non utilisée de la réservation initiale de 17 images a été restituée.
{
"id": "3f2aK9mR7xQp4TnZ8bLc6YwH",
"created_at": 1789171200,
"model": "seedream-5-0-flash",
"credits": 8,
"failed_code": null,
"status": "completed",
"billing_status": "charged",
"failed_reason": null,
"data": {
"results": [
"https://cdn.seevio.ai/api/images/example/base.png",
"https://cdn.seevio.ai/api/images/example/layer-1.png",
"https://cdn.seevio.ai/api/images/example/layer-2.png",
"https://cdn.seevio.ai/api/images/example/layer-3.png"
],
"image_expires_at": "2026-10-12T00:00:00.000Z",
"processing_time": 12
}
}Traiter chaque image renvoyée
const response = await fetch(
"https://api.seevio.ai/v1/tasks/TASK_ID",
{ headers: { Authorization: `Bearer ${process.env.SEEVIO_API_KEY}` } }
);
if (!response.ok) throw new Error(await response.text());
const task = await response.json();
if (task.status === "completed") {
// Process every returned image, including the base image.
// The number of URLs varies; do not read only results[0].
for (const [index, imageUrl] of task.data.results.entries()) {
console.log({ taskId: task.id, index, imageUrl });
// Download or store this image in your application.
}
} else if (task.status === "failed") {
throw new Error(task.failed_reason || "Image generation failed.");
}
// If queued or generating, poll again after at least 5 seconds.Interroger une tâche
GET https://api.seevio.ai/v1/tasks/{taskId}Remplacez l'ID d'exemple par le taskId obtenu lors de la création. Les requêtes renvoient uniquement les tâches créées par l'utilisateur de la clé API ; les identifiants inconnus ou inaccessibles renvoient une erreur HTTP 404.
Nous vous suggérons d'interroger l'API toutes les 10 à 20 secondes au début, d'espacer les requêtes en cas d'erreur HTTP 429 et d'arrêter dès que le statut est completed ou failed. Privilégiez les webhooks pour la production. Chaque exemple de code ci-dessous effectue une seule interrogation.
curl --fail-with-body https://api.seevio.ai/v1/tasks/3f2aK9mR7xQp4TnZ8bLc6YwH \
-H "Authorization: Bearer $SEEVIO_API_KEY"| Statut | Valeurs autorisées et critères requis |
|---|---|
| queued | Acceptée et en attente de traitement. |
| generating | Génération en cours. |
| completed | Succès. Téléchargez le contenu de data.results avant son expiration. |
| failed | Échec définitif. Examinez failed_reason et billing_status. |
| Champ | Type | Valeurs autorisées et critères requis |
|---|---|---|
| id | string | Identifiant de la tâche. Il s'agit du taskId obtenu lors de la création. |
| created_at | number | Date de création de la tâche au format horodatage Unix (en secondes). |
| model | string | ID public du modèle utilisé pour cette tâche. |
| billing_status | string | Statut de facturation : reserved, charged, refunded ou refund_failed. |
| credits | number | La réponse à la création et les tâches en cours indiquent les crédits réservés. Une fois la tâche terminée, le champ credits indique le montant réellement facturé ; les crédits réservés non utilisés ont déjà été recrédités. Pour les tâches échouées, ce champ continue d’afficher le montant initialement réservé. |
| failed_reason | string | null | Raison de l'échec pour les tâches ayant échoué ; null dans les autres cas. Les réponses d'interrogation en échec n'incluent pas l'objet data. |
| failed_code | string | null | Code d’erreur. Consultez failed_reason pour plus de détails. |
| data | object | Présent pour les requêtes de tâches qui n'ont pas échoué. Contient les fichiers de sortie et les détails du traitement. |
| data.results | string[] | Toutes les URL des images générées, y compris l'image de base pour la décomposition en calques. Ce champ reste vide avant la finalisation de la tâche ou après son expiration. |
| data.image_expires_at | string | null | Expiration des images au format ISO 8601, ou null si indisponible. |
| data.processing_time | number | null | Durée de traitement de la tâche en secondes si elle est disponible, sinon null. |
En file d’attente
{
"id": "3f2aK9mR7xQp4TnZ8bLc6YwH",
"created_at": 1789171200,
"model": "seedream-5-0-flash",
"credits": 2,
"failed_code": null,
"status": "queued",
"billing_status": "reserved",
"failed_reason": null,
"data": {
"results": [],
"image_expires_at": null,
"processing_time": null
}
}Terminée
{
"id": "3f2aK9mR7xQp4TnZ8bLc6YwH",
"created_at": 1789171200,
"model": "seedream-5-0-flash",
"credits": 2,
"failed_code": null,
"status": "completed",
"billing_status": "charged",
"failed_reason": null,
"data": {
"results": [
"https://cdn.seevio.ai/api/images/example.png"
],
"image_expires_at": "2026-10-12T00:00:00.000Z",
"processing_time": 12
}
}Échouée
Lorsque la requête renvoie status=failed, la génération a échoué. Consultez le champ failed_reason pour en connaître la cause et billing_status pour le statut du remboursement. Dans cet exemple, refunded signifie que les crédits ont été restitués. Le champ credits conserve le montant initialement réservé, et la réponse ne contient pas de nœud data.
{
"id": "3f2aK9mR7xQp4TnZ8bLc6YwH",
"created_at": 1789171200,
"model": "seedream-5-0-flash",
"credits": 2,
"failed_code": "400",
"status": "failed",
"billing_status": "refunded",
"failed_reason": "The input or output was flagged as sensitive. Please try again with different inputs."
}Les liens des résultats restent disponibles pendant 30 jours après leur stockage. Une fois ce délai dépassé, le champ results est vide.
Webhooks
Configurez le champ callback_url dans votre requête de création pour recevoir un POST JSON lorsque la tâche se termine ou échoue. Renvoyez une réponse HTTP 2xx sous 15 secondes. En cas d'échec de distribution, de nouvelles tentatives seront effectuées ; gérez les doublons de manière idempotente grâce à l'identifiant de la tâche.
Votre point de terminaison de rappel (callback) doit accepter les requêtes POST contenant un corps de requête JSON (Content-Type : application/json).
Créer une tâche avec un webhook de callback
curl --fail-with-body https://api.seevio.ai/v1/images/generations \
-H "Authorization: Bearer $SEEVIO_API_KEY" \
-H "Content-Type: application/json" \
--data '{
"model": "seedream-5-0-flash",
"input": {
"prompt": "A minimalist ceramic teapot on a stone pedestal, soft studio lighting",
"aspect_ratio": "1:1",
"resolution": "2K",
"output_format": "png",
"generation_type": "text-to-image"
},
"callback_url": "https://example.com/webhooks/seevio"
}'Les rappels (callbacks) utilisent la structure de réponse de requête de tâche ; les notifications d'échec remboursées incluent également credits_refunded au niveau supérieur. Utilisez id pour identifier la tâche et status pour distinguer les tâches terminées de celles ayant échoué. Les notifications pouvant être envoyées plusieurs fois, traitez-les de manière idempotente par id et status. Les rappels ne sont pas signés ; vérifiez la tâche à l'aide du point de terminaison de requête authentifié. Un échec de livraison du rappel ne donne pas lieu au remboursement d'une tâche réussie.
Tâche terminée : charge utile du callback réussi
created_at indique la création de l’événement ; task_created_at indique celle de la tâche, en secondes Unix. Les exemples présentent les champs recommandés ; les réponses peuvent contenir des champs supplémentaires.
{
"id": "3f2aK9mR7xQp4TnZ8bLc6YwH",
"created_at": 1789171212,
"model": "seedream-5-0-flash",
"credits": 2,
"failed_code": null,
"status": "completed",
"billing_status": "charged",
"failed_reason": null,
"data": {
"results": [
"https://cdn.seevio.ai/api/images/example.png"
],
"image_expires_at": "2026-10-12T00:00:00.000Z",
"processing_time": 12
},
"task_created_at": 1789171200
}Échec de la tâche : charge utile du callback d'échec
{
"id": "3f2aK9mR7xQp4TnZ8bLc6YwH",
"created_at": 1789171212,
"model": "seedream-5-0-flash",
"credits": 2,
"failed_code": "400",
"status": "failed",
"billing_status": "refunded",
"failed_reason": "The input or output was flagged as sensitive. Please try again with different inputs.",
"task_created_at": 1789171200,
"credits_refunded": 2
}Exemple de réception de webhook
export async function POST(request: Request) {
const callbackData = await request.json();
if (callbackData.status === "completed") {
const imageUrls = callbackData.data.results;
// Save the image URLs and mark this task as completed in your application.
console.log(callbackData.id, imageUrls);
}
if (callbackData.status === "failed") {
const { failed_reason, credits_refunded } = callbackData;
// Record the failure reason and refunded credits for this task.
console.error(callbackData.id, failed_reason, credits_refunded);
}
return new Response(null, { status: 200 });
}Cet exemple Next.js lit le corps JSON du callback et traite directement les tâches réussies et échouées. Pour votre application de production, pensez à ajouter une couche de persistance, à dédoublonner les identifiants de tâche (task-ID) et à placer les tâches lourdes en file d'attente avant d'accuser réception du callback.
Erreurs
Les erreurs HTTP contiennent un objet error avec un code (code) et un message (message). Une tâche acceptée avec succès peut toujours échouer ultérieurement ; interrogez régulièrement la tâche ou configurez un webhook pour suivre son statut.
{
"error": {
"code": "invalid_request",
"message": "input.prompt is required."
}
}| HTTP | Champ | Action recommandée |
|---|---|---|
| 400 | invalid_request | Corrigez le JSON, le prompt manquant, la plage des paramètres ou l'URL du média avant de soumettre à nouveau. |
| 401 | invalid_api_key | Vérifiez votre jeton Bearer ainsi que l'état d'activation de votre clé API. |
| 402 | insufficient_credits | Ajoutez des crédits ou réduisez le coût estimé de la tâche. La réponse peut indiquer le solde requis et votre solde disponible. |
| 403 | forbidden | Veuillez vérifier la restriction au niveau du compte décrite dans le message d'erreur. |
| 404 | not_found | Vérifiez l'identifiant de la tâche et assurez-vous que la clé API utilisée appartient bien au propriétaire de la tâche. |
| 429 | rate_limited | Patientez durant l'intervalle indiqué par l'en-tête Retry-After avant de soumettre une nouvelle requête. |
| 500 | internal_error | Examinez le message d'erreur et les journaux de l'API. Réessayez avec modération ; le renvoi d'une requête de création peut générer une nouvelle tâche facturable. |
Les erreurs utilisent error.code et error.message : 400 invalid_request, 401 invalid_api_key, 402 insufficient_credits, 403 forbidden, 404 not_found, 429 rate_limited, 500 internal_error. L'erreur 402 insufficient_credits signifie que votre solde de crédits est insuffisant pour traiter cette requête.
Limites de requêtes
Création de tâches : chaque clé API permet par défaut jusqu'à 100 requêtes par minute. Il n'est actuellement pas possible de personnaliser ces limites de débit.
Consultation de tâches : chaque clé API permet par défaut jusqu'à 120 requêtes par minute. Les requêtes de consultation et de création de tâches sont comptabilisées séparément.
Les requêtes de création d'images et de vidéos partagent la même limite de débit liée à la clé API.
L'erreur HTTP 429 renvoie l'en-tête Retry-After: 60 pour la création et Retry-After: 5 pour les requêtes d'interrogation. Utilisez une stratégie d'attente progressive (backoff) et évitez d'interroger l'API plus souvent que nécessaire.
HTTP/1.1 429 Too Many Requests
Content-Type: application/json
Retry-After: 60{
"error": {
"code": "rate_limited",
"message": "Rate limit exceeded."
}
}