Seedream 5.0 Pro API
Generează imagini, editează referințe sau descompune o imagine în straturi folosind cheia ta API Seevio. Taskurile rulează asincron; salvează taskId și interoghează endpoint-ul taskului sau configurează un callback.
POST https://api.seevio.ai/v1/images/generationsFuncționalități
| Funcție | Valori acceptate |
|---|---|
| Moduri de generare | text-to-image, image-to-image, layer-decomposition |
| Rezoluție de ieșire | 1K, 1.5K, 2K |
| Raport de aspect | 1:1, 4:3, 3:4, 16:9, 9:16, 2:3, 3:2, 21:9 |
| Imagini de referință | URL-uri publice HTTPS pentru imagini PNG / JPEG / WebP, fiecare de maximum 30 MB. Nu folosi imagini pentru text-to-image, folosește între 1 și 10 pentru image-to-image și exact o imagine pentru layer-decomposition. |
| Prompt | Promptul trebuie să conțină între 4 și 5000 de caractere după eliminarea spațiilor de la început și de la sfârșit. Doar în modul layer-decomposition, câmpul prompt poate fi omis sau lăsat gol. |
| Format de ieșire | png, jpg |
Tarife și credite
Tarifele de mai jos sunt per imagine returnată. Generarea obișnuită rezervă credite pentru o imagine, iar descompunerea în straturi pentru 17 imagini. Costul final se calculează după numărul efectiv de imagini returnate, inclusiv imaginea de bază, iar creditele neutilizate revin în soldul inițial. Costul taskurilor eșuate este rambursat integral.
| Rezoluție de ieșire | Tarife și credite |
|---|---|
| 1K | 4 credite |
| 1.5K | 4 credite |
| 2K | 8 credite |
La rezoluția implicită 2K, numărul de credite rezervate pentru descompunerea în straturi este 136. Dacă sunt returnate patru imagini, costul final exprimat în credite este 32, iar suma restituită este 104.
Idempotența solicitărilor nu este acceptată. Fiecare cerere POST validă creează un nou task facturabil. Dacă rezultatul trimiterii este incert, verifică taskul folosind taskId returnat; repetarea cererii POST poate crea un alt task.
Autentificare
Creează o cheie API în panoul de control. Cheia completă este afișată o singură dată. Păstreaz-o în siguranță pe serverul tău și trimite-o ca token Bearer la fiecare solicitare.
URL de bază
https://api.seevio.aiAuthorization: Bearer sk_live_your_api_key
Content-Type: application/jsonSetează variabila de mediu SEEVIO_API_KEY înainte de a rula aceste exemple. Exemplele în JavaScript rulează pe serverul tău cu Node.js; exemplele în Python utilizează pachetul requests.
Corp solicitare
| Câmp | Tip | Obligatoriu | Descriere și constrângeri |
|---|---|---|---|
model | string | Da | ID model. Pentru a utiliza Seedream 5.0 Pro, setează acest câmp la seedream-5-0-pro. |
callback_url | string | Nu | Endpoint HTTPS public pentru callback-urile de tip POST în caz de finalizare sau eșec. Rețelele private și localhost nu sunt permise. Exemplu: https://example.com/webhooks/seevio |
input | object | Da | Setările generării. Un prompt este obligatoriu pentru modurile text-to-image și image-to-image; este opțional pentru descompunerea în straturi (layer-decomposition). |
Parametri de intrare
| Câmp | Tip | Obligatoriu | Valoare implicită | Descriere și constrângeri |
|---|---|---|---|---|
input.prompt | string | Condiționat | — | Promptul trebuie să conțină între 4 și 5000 de caractere după eliminarea spațiilor de la început și de la sfârșit. Doar în modul layer-decomposition, câmpul prompt poate fi omis sau lăsat gol. Exemplu: A minimalist ceramic teapot on a stone pedestal, soft studio lighting |
input.generation_type | string | Nu | text-to-image | Folosește text-to-image pentru o imagine nouă, image-to-image pentru a edita referințe sau layer-decomposition pentru a separa o singură imagine în elemente reutilizabile. Valori acceptate text-to-image | image-to-image | layer-decomposition |
input.image_urls | string[] | Condiționat | [] | URL-uri publice HTTPS pentru imagini PNG / JPEG / WebP, fiecare de maximum 30 MB. Nu folosi imagini pentru text-to-image, folosește între 1 și 10 pentru image-to-image și exact o imagine pentru layer-decomposition. Exemplu: ["https://example.com/teapot.png"] |
input.aspect_ratio | string | Nu | 1:1 | Raport de aspect Valori acceptate 1:1 | 4:3 | 3:4 | 16:9 | 9:16 | 2:3 | 3:2 | 21:9Exemplu: 1:1 |
input.resolution | string | Nu | 2K | Modurile text-to-image și image-to-image acceptă rezoluțiile 1K (calitate de bază) și 2K (calitate înaltă). Modul layer-decomposition acceptă rezoluțiile 1K, 1.5K și 2K. Valoare implicită: 2K. Valori acceptate 1K | 1.5K | 2KExemplu: 2K |
input.output_format | string | Nu | png | Formatul de ieșire solicitat. Pentru descompunerea pe straturi, valoarea png returnează o imagine de bază PNG, iar jpg returnează o imagine de bază JPEG. Toate straturile separate sunt returnate ca PNG, păstrând transparența. Valori acceptate png | jpgExemplu: png |
Fiecare solicitare creează o singură sarcină. Generarea text-to-image și image-to-image returnează o singură imagine; generarea layer-decomposition returnează între 1 și 17 imagini, inclusiv imaginea de bază. Nu trimite parametrul aspect_ratio pentru layer-decomposition.
Ghid rapid
Trimite această solicitare minimă, salvează valoarea taskId returnată, apoi folosește exemplul de interogare a sarcinii de mai jos. Valoarea creditelor din răspunsul de creare reprezintă suma rezervată.
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-pro",
"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"
}
}'Exemplu de răspuns pentru crearea sarcinii
{
"taskId": "3f2aK9mR7xQp4TnZ8bLc6YwH",
"credits": 8
}Text în imagine
Generează imagini, editează referințe sau descompune o imagine în straturi folosind cheia ta API Seevio. Taskurile rulează asincron; salvează taskId și interoghează endpoint-ul taskului sau configurează 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-pro",
"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"
}
}'Imagine în imagine
Pentru editarea imaginilor, setează generation_type la image-to-image și furnizează image_urls. Toți ceilalți parametri respectă aceleași specificații.
Înlocuiește URL-urile media de tip example.com cu propriile tale fișiere accesibile public prin HTTPS. URL-urile din exemplu au scop demonstrativ pentru structura solicitării și nu reprezintă resurse descărcabile.
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-pro",
"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"
]
}
}'Descompunere în straturi
Setează generation_type pe layer-decomposition și furnizează exact un URL de imagine. Omite aspect_ratio. Parametrul output_format controlează doar formatul imaginii de bază. Straturile separate sunt returnate întotdeauna ca PNG, păstrând transparența. Salvează fiecare URL returnat în 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-pro",
"input": {
"generation_type": "layer-decomposition",
"image_urls": [
"https://example.com/teapot.png"
],
"resolution": "2K",
"output_format": "png"
}
}'Descompunerea în straturi poate returna mai multe URL-uri de imagini în data.results: imaginea de bază și straturile separate. Fiecare URL indică o imagine separată. Numărul de rezultate variază în funcție de task (între 1 și 17 imagini în total); procesează întregul tablou, nu doar data.results[0]. Atât interogarea taskului finalizat, cât și webhook-ul de finalizare conțin acest tablou. Răspunsul inițial de creare conține doar taskId și creditele rezervate, nu și URL-urile imaginilor.
Exemplu de răspuns pentru crearea sarcinii
{
"taskId": "3f2aK9mR7xQp4TnZ8bLc6YwH",
"credits": 136
}Descompunere în straturi finalizată: URL-uri multiple de imagini
Acest răspuns demonstrativ prezintă patru imagini generate: o imagine de bază și trei straturi. Taskul tău poate returna un număr diferit. La rezoluția solicitată de 2K, parametrul credits reprezintă taxa finală pentru toate cele patru imagini; partea neutilizată din rezervarea inițială de 17 imagini a fost returnată.
{
"id": "3f2aK9mR7xQp4TnZ8bLc6YwH",
"created_at": 1789171200,
"model": "seedream-5-0-pro",
"credits": 32,
"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
}
}Procesează fiecare imagine returnată
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.Interoghează o sarcină
GET https://api.seevio.ai/v1/tasks/{taskId}Înlocuiește ID-ul din exemplu cu valoarea taskId returnată la crearea sarcinii. Interogările returnează doar sarcinile asociate utilizatorului cheii API; ID-urile inaccesibile sau necunoscute returnează HTTP 404.
Ca punct de pornire, interoghează la fiecare 10–20 secunde, redu frecvența în caz de HTTP 429 și oprește interogarea când statusul devine completed sau failed. Pentru mediile de producție, recomandăm utilizarea webhookurilor. Fiecare exemplu de cod de mai jos efectuează o singură interogare.
curl --fail-with-body https://api.seevio.ai/v1/tasks/3f2aK9mR7xQp4TnZ8bLc6YwH \
-H "Authorization: Bearer $SEEVIO_API_KEY"| Status | Valori permise și cerințe |
|---|---|
| queued | Acceptat și în așteptare pentru procesare. |
| generating | Generarea este în curs de desfășurare. |
| completed | Succes. Descarcă elementele din data.results înainte de expirare. |
| failed | Eșec definitiv. Inspectează failed_reason și billing_status. |
| Câmp | Tip | Valori permise și cerințe |
|---|---|---|
| id | string | Identificatorul sarcinii. Acesta reprezintă valoarea taskId din răspunsul de creare. |
| created_at | number | Data creării sarcinii, exprimată în secunde Unix. |
| model | string | ID-ul public al modelului utilizat pentru această sarcină. |
| billing_status | string | statusul facturării: reserved, charged, refunded sau refund_failed. |
| credits | number | Răspunsul la crearea taskului și taskurile în curs de procesare arată creditele rezervate. La finalizare, credits indică taxa reală; creditele rezervate neutilizate au fost deja returnate. Pentru taskurile eșuate, câmpul continuă să afișeze suma rezervată inițial. |
| failed_reason | string | null | Motivul eșecului pentru sarcinile eșuate; în caz contrar, are valoarea null. Răspunsurile de interogare eșuate nu conțin obiectul data. |
| failed_code | string | null | Cod de eroare. Consultați failed_reason pentru detalii despre eroare. |
| data | object | Prezent în interogările sarcinilor care nu au eșuat. Conține detalii despre rezultat și procesare. |
| data.results | string[] | Toate URL-urile imaginilor generate, inclusiv imaginea de bază pentru descompunerea pe straturi. Acest câmp este gol înainte de finalizare și după expirare. |
| data.image_expires_at | string | null | Expirarea imaginilor în format ISO 8601 sau null dacă nu este disponibilă. |
| data.processing_time | number | null | Durata de procesare a sarcinii în secunde, dacă este disponibilă; în caz contrar, null. |
În așteptare
{
"id": "3f2aK9mR7xQp4TnZ8bLc6YwH",
"created_at": 1789171200,
"model": "seedream-5-0-pro",
"credits": 8,
"failed_code": null,
"status": "queued",
"billing_status": "reserved",
"failed_reason": null,
"data": {
"results": [],
"image_expires_at": null,
"processing_time": null
}
}Finalizat
{
"id": "3f2aK9mR7xQp4TnZ8bLc6YwH",
"created_at": 1789171200,
"model": "seedream-5-0-pro",
"credits": 8,
"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
}
}Eșuat
Atunci când interogarea returnează status=failed, procesul de generare s-a încheiat fără succes. Consultați failed_reason pentru a afla cauza și billing_status pentru rezultatul rambursării. În acest exemplu, refunded înseamnă că toate creditele au fost returnate. Parametrul credits păstrează valoarea inițială rezervată, iar răspunsul nu include obiectul data.
{
"id": "3f2aK9mR7xQp4TnZ8bLc6YwH",
"created_at": 1789171200,
"model": "seedream-5-0-pro",
"credits": 8,
"failed_code": "400",
"status": "failed",
"billing_status": "refunded",
"failed_reason": "The input or output was flagged as sensitive. Please try again with different inputs."
}Linkurile către rezultate sunt disponibile timp de 30 de zile de la stocare. După expirare, câmpul results va fi gol.
Webhookuri
Setează parametrul callback_url în solicitarea de creare pentru a primi un POST JSON atunci când sarcina se finalizează sau eșuează. Returnează un răspuns de tip 2xx în decurs de 15 secunde. Livrările eșuate vor fi reîncercate; procesează livrările repetate în mod idempotent pe baza ID-ului sarcinii.
Endpoint-ul dumneavoastră de callback trebuie să accepte solicitări de tip POST cu un corp de solicitare JSON (Content-Type: application/json).
Creează o sarcină cu 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-pro",
"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"
}'Callback-urile folosesc structura răspunsului la interogarea unui task; notificările de eșec cu rambursare includ și credits_refunded la nivelul superior. Folosește id pentru a identifica taskul și status pentru a distinge finalizarea cu succes de eșec. Notificările se pot repeta: procesează-le idempotent pe baza id și status. Callback-urile nu sunt semnate; verifică taskul prin endpoint-ul de interogare care necesită autentificare. Eșecul livrării notificării nu duce la rambursarea unui task finalizat cu succes.
Sarcină finalizată: payload de callback reușit
created_at este momentul creării evenimentului; task_created_at este momentul creării sarcinii, în secunde Unix. Exemplele arată câmpurile recomandate; răspunsurile pot conține câmpuri suplimentare.
{
"id": "3f2aK9mR7xQp4TnZ8bLc6YwH",
"created_at": 1789171212,
"model": "seedream-5-0-pro",
"credits": 8,
"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
}Sarcină eșuată: payload de callback eșuat
{
"id": "3f2aK9mR7xQp4TnZ8bLc6YwH",
"created_at": 1789171212,
"model": "seedream-5-0-pro",
"credits": 8,
"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": 8
}Exemplu de receptor
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 });
}Acest exemplu de Next.js citește corpul JSON al callback-ului și gestionează direct sarcinile finalizate și cele eșuate. Adăugați persistență și deduplicare a ID-urilor de sarcini pentru aplicația dumneavoastră; puneți în coadă procesele lente înainte de a confirma callback-ul.
Erori
Erorile HTTP conțin un obiect error cu proprietățile code și message. O sarcină acceptată cu succes poate eșua ulterior; interoghează sarcina sau gestionează callback-ul de eșec primit.
{
"error": {
"code": "invalid_request",
"message": "input.prompt is required."
}
}| HTTP | Câmp | Soluție recomandată |
|---|---|---|
| 400 | invalid_request | Corectează codul JSON, promptul lipsă, limitele parametrilor sau URL-ul media înainte de a reîncerca. |
| 401 | invalid_api_key | Verifică tokenul Bearer și dacă cheia API este activă. |
| 402 | insufficient_credits | Adaugă credite sau redu costul sarcinii. Răspunsul poate include sumele necesare și cele disponibile. |
| 403 | forbidden | Verificați restricția la nivel de cont descrisă în mesajul de eroare. |
| 404 | not_found | Verifică ID-ul sarcinii și asigură-te că cheia aparține utilizatorului care a creat sarcina. |
| 429 | rate_limited | Așteaptă intervalul indicat în antetul Retry-After înainte de a reîncerca. |
| 500 | internal_error | Inspectează mesajul de eroare și jurnalele API. Reîncearcă cu atenție; retrimiterea unei solicitări de creare poate genera o nouă sarcină facturabilă. |
Erorile folosesc structura error.code și error.message: 400 invalid_request, 401 invalid_api_key, 402 insufficient_credits, 403 forbidden, 404 not_found, 429 rate_limited, 500 internal_error. O eroare de tipul 402 insufficient_credits înseamnă că nu aveți suficiente credite disponibile pentru această solicitare.
Limite de rată
Crearea de sarcini: în mod implicit, fiecare cheie API permite maximum 100 de solicitări pe minut. Limitele personalizate de rată nu sunt disponibile în prezent.
Interogarea sarcinilor: în mod implicit, fiecare cheie API permite maximum 120 de solicitări pe minut. Solicitările de interogare și cele de creare a sarcinilor sunt contorizate separat.
Solicitările de creare a imaginilor și videoclipurilor folosesc aceeași limită de frecvență a cererilor pentru cheia API.
Codul HTTP 429 include Retry-After: 60 pentru creare și Retry-After: 5 pentru interogări. Folosește o strategie de backoff și evită interogările mai frecvente decât este necesar.
HTTP/1.1 429 Too Many Requests
Content-Type: application/json
Retry-After: 60{
"error": {
"code": "rate_limited",
"message": "Rate limit exceeded."
}
}