Nano Banana API
Generate one image asynchronously per request. Supports text-to-image and image-to-image generation with your Seevio API key.
POST https://api.seevio.ai/v1/images/generationsFunktionen
| Feature | Unterstützte Werte |
|---|---|
| Generierungsmodi | text-to-image, image-to-image |
| Ausgabeauflösung | input.resolution — Not accepted for this model. |
| Seitenverhältnis | auto, 1:1, 9:16, 16:9, 3:4, 4:3, 3:2, 2:3, 5:4, 4:5, 21:9 |
| Referenzbilder | Public HTTPS PNG / JPEG / WebP URLs. Image-to-image requires 1–10 images, each up to 10 MB. Text-to-image requires an empty array. |
| Prompt | Required non-empty prompt, up to 5000 characters. |
| Ausgabeformat | png, jpg |
Preise & Credits
Each image costs 2 credits, including all supported resolutions and formats. Credits are reserved on acceptance, settled on success and refunded on failure. Generation times out after 30 minutes; refund_failed means refund recovery is pending.
Request idempotency is not supported. Each valid POST creates a new billable task. If a submission outcome is uncertain, query the returned taskId; retrying POST can create another task.
Authentifizierung
Erstellen Sie einen API-Key im Dashboard. Der vollständige Key wird nur einmal angezeigt. Speichern Sie ihn auf Ihrem Server und senden Sie ihn bei jeder Anfrage als Bearer-Token mit.
Basis-URL
https://api.seevio.aiAuthorization: Bearer sk_live_your_api_key
Content-Type: application/jsonSetzen Sie die Umgebungsvariable SEEVIO_API_KEY, bevor Sie diese Beispiele ausführen. JavaScript-Beispiele laufen mit Node.js auf Ihrem Server; Python-Beispiele nutzen das requests-Paket.
Request-Body
| Feld | Typ | Erforderlich | Beschreibung & Einschränkungen |
|---|---|---|---|
model | string | Ja | Modell-ID. Um Nano Banana zu verwenden, setzen Sie dieses Feld auf nano-banana. |
callback_url | string | Nein | Öffentlicher HTTPS-Endpunkt für POST-Callbacks bei Fertigstellung oder Fehlern. Private Netzwerke und localhost sind nicht erlaubt. Beispiel: https://example.com/webhooks/seevio |
input | object | Ja | Generierungseinstellungen. Muss einen ausgefüllten Prompt enthalten. |
Eingabeparameter
| Feld | Typ | Erforderlich | Standard | Beschreibung & Einschränkungen |
|---|---|---|---|---|
input.prompt | string | Ja | — | Required non-empty prompt, up to 5000 characters. Beispiel: A minimalist ceramic teapot on a stone pedestal, soft studio lighting |
input.generation_type | string | Nein | text-to-image | For image editing, set generation_type to image-to-image and provide image_urls. All other parameters use the same contract. Unterstützte Werte text-to-image | image-to-image |
input.image_urls | string[] | Bedingt | [] | Public HTTPS PNG / JPEG / WebP URLs. Image-to-image requires 1–10 images, each up to 10 MB. Text-to-image requires an empty array. Beispiel: ["https://example.com/teapot.png"] |
input.aspect_ratio | string | Nein | auto | Seitenverhältnis Unterstützte Werte auto | 1:1 | 9:16 | 16:9 | 3:4 | 4:3 | 3:2 | 2:3 | 5:4 | 4:5 | 21:9Beispiel: 1:1 |
input.resolution | string | Nicht unterstützt | — | Not accepted for this model. |
input.output_format | string | Nein | png | Unterstützte Werte png | jpgBeispiel: png |
Aspect ratio defaults to auto. Unknown fields, including output quantity, are rejected. Each request generates exactly one image.
Schnellstart
Senden Sie diese minimale Anfrage, speichern Sie die zurückgegebene taskId und nutzen Sie das untenstehende Beispiel zur Task-Abfrage. Der Credits-Wert in der Erstellungsantwort entspricht dem reservierten Betrag.
curl --fail-with-body https://api.seevio.ai/v1/images/generations \
-H "Authorization: Bearer $SEEVIO_API_KEY" \
-H "Content-Type: application/json" \
--data '{
"model": "nano-banana",
"input": {
"prompt": "A minimalist ceramic teapot on a stone pedestal, soft studio lighting",
"aspect_ratio": "1:1",
"output_format": "png",
"generation_type": "text-to-image"
}
}'Beispiel für die Antwort beim Erstellen eines Tasks
{
"taskId": "3f2aK9mR7xQp4TnZ8bLc6YwH",
"credits": 2
}Text zu Bild
Generate one image asynchronously per request. Supports text-to-image and image-to-image generation with your Seevio API key.
curl --fail-with-body https://api.seevio.ai/v1/images/generations \
-H "Authorization: Bearer $SEEVIO_API_KEY" \
-H "Content-Type: application/json" \
--data '{
"model": "nano-banana",
"input": {
"prompt": "A minimalist ceramic teapot on a stone pedestal, soft studio lighting",
"aspect_ratio": "1:1",
"output_format": "png",
"generation_type": "text-to-image"
}
}'Bild zu Bild
For image editing, set generation_type to image-to-image and provide image_urls. All other parameters use the same contract.
Ersetzen Sie die Medien-URLs von example.com durch Ihre eigenen, öffentlich zugänglichen HTTPS-Dateien. Die Beispiel-URLs dienen nur zur Veranschaulichung der Request-Struktur und sind keine herunterladbaren Beispieldateien.
curl --fail-with-body https://api.seevio.ai/v1/images/generations \
-H "Authorization: Bearer $SEEVIO_API_KEY" \
-H "Content-Type: application/json" \
--data '{
"model": "nano-banana",
"input": {
"prompt": "Change the teapot to matte sage green. Preserve its shape and the studio lighting.",
"aspect_ratio": "1:1",
"output_format": "png",
"generation_type": "image-to-image",
"image_urls": [
"https://example.com/teapot.png"
]
}
}'Task abfragen
GET https://api.seevio.ai/v1/tasks/{taskId}Ersetzen Sie die Beispiel-ID durch die bei der Erstellung zurückgegebene taskId. Abfragen liefern nur Tasks zurück, die dem User des API-Keys gehören; bei unzugänglichen oder unbekannten IDs wird HTTP 404 zurückgegeben.
Fragen Sie anfangs alle 10–20 Sekunden ab, drosseln Sie die Frequenz bei HTTP 429 und stoppen Sie, sobald der Status completed oder failed lautet. Nutzen Sie für die Produktion bevorzugt Webhooks. Jedes Codebeispiel unten führt eine einzelne Abfrage aus.
curl --fail-with-body https://api.seevio.ai/v1/tasks/3f2aK9mR7xQp4TnZ8bLc6YwH \
-H "Authorization: Bearer $SEEVIO_API_KEY"| Status | Allowed values and requirements |
|---|---|
| queued | Akzeptiert und wartet auf die Verarbeitung. |
| generating | Generierung läuft. |
| completed | Erfolgreich abgeschlossen. Laden Sie data.results vor dem Ablaufdatum herunter. |
| failed | Fehlgeschlagen. Prüfen Sie failed_reason und billing_status. |
| Field | Typ | Allowed values and requirements |
|---|---|---|
| id | string | Task-ID. Entspricht der taskId aus der Erstellungsantwort. |
| created_at | number | Erstellungszeitpunkt des Tasks als Unix-Zeitstempel (Sekunden). |
| model | string | Die für diesen Task verwendete öffentliche Modell-ID. |
| billing_status | string | reserved, charged, refunded oder refund_failed. |
| credits | number | Für diesen Task reservierte Credits. Dieser Wert bleibt auch nach einer Rückerstattung erhalten; prüfen Sie billing_status, um das genaue Abrechnungsergebnis zu sehen. |
| failed_reason | string | null | Fehlerursache bei fehlgeschlagenen Tasks; andernfalls null. Fehlgeschlagene Abfrage-Antworten enthalten keine data. |
| data | object | Vorhanden bei erfolgreich abgeschlossenen oder laufenden Tasks. Enthält die Ausgabe und Verarbeitungsdetails. |
| data.results | string[] | Bild-URL-Array; vor Abschluss und nach Ablauf leer. |
| data.image_expires_at | string | null | Ablaufzeit der Bilder im ISO-8601-Format, sonst null. |
| data.processing_time | number | null | Verarbeitungsdauer des Anbieters in Sekunden, sofern verfügbar, andernfalls null. |
In der Warteschlange
{
"id": "3f2aK9mR7xQp4TnZ8bLc6YwH",
"created_at": 1789171200,
"model": "nano-banana",
"credits": 2,
"status": "queued",
"billing_status": "reserved",
"failed_reason": null,
"data": {
"results": [],
"image_expires_at": null,
"processing_time": null
}
}Abgeschlossen
{
"id": "3f2aK9mR7xQp4TnZ8bLc6YwH",
"created_at": 1789171200,
"model": "nano-banana",
"credits": 2,
"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
}
}Fehlgeschlagen
Wenn die Abfrage status=failed zurückgibt, wurde die Generierung erfolglos beendet. Unter failed_reason finden Sie die Ursache und unter billing_status das Erstattungsergebnis. In diesem Beispiel bedeutet refunded, dass die Credits zurückerstattet wurden. credits behält den ursprünglich reservierten Betrag bei, und die Antwort enthält keine data.
{
"id": "3f2aK9mR7xQp4TnZ8bLc6YwH",
"created_at": 1789171200,
"model": "nano-banana",
"credits": 2,
"status": "failed",
"billing_status": "refunded",
"failed_reason": "Image generation failed."
}Result links are provided for 30 days after storage. After expiry, results is empty.
Webhooks
Setzen Sie callback_url in der Erstellungsanfrage, um einen JSON-POST zu erhalten, sobald der Task abgeschlossen ist oder fehlschlägt. Antworten Sie innerhalb von 15 Sekunden mit einem 2xx-Statuscode. Fehlgeschlagene Zustellungen werden wiederholt; verarbeiten Sie doppelte Zustellungen idempotent anhand der Task-ID.
Ihr Callback-Endpunkt muss POST-Anfragen mit einem JSON-Body (Content-Type: application/json) akzeptieren.
Task mit Callback erstellen
curl --fail-with-body https://api.seevio.ai/v1/images/generations \
-H "Authorization: Bearer $SEEVIO_API_KEY" \
-H "Content-Type: application/json" \
--data '{
"model": "nano-banana",
"input": {
"prompt": "A minimalist ceramic teapot on a stone pedestal, soft studio lighting",
"aspect_ratio": "1:1",
"output_format": "png",
"generation_type": "text-to-image"
},
"callback_url": "https://example.com/webhooks/seevio"
}'Callbacks use the task query response structure; refunded failure notifications also include top-level credits_refunded. Use id to identify the task and status to distinguish completed from failed. Notifications may repeat: process them idempotently by id and status. Callbacks are unsigned; verify the task with the authenticated query endpoint. Delivery failure does not refund a successful task.
Task abgeschlossen: Payload für erfolgreichen Callback
created_at ist die Ereigniszeit, task_created_at die Erstellungszeit der Aufgabe, jeweils in Unix-Sekunden. Die Beispiele zeigen empfohlene Felder; Antworten können weitere Felder enthalten.
{
"id": "3f2aK9mR7xQp4TnZ8bLc6YwH",
"created_at": 1789171212,
"model": "nano-banana",
"credits": 2,
"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
}Task fehlgeschlagen: Payload für fehlgeschlagenen Callback
{
"id": "3f2aK9mR7xQp4TnZ8bLc6YwH",
"created_at": 1789171212,
"model": "nano-banana",
"credits": 2,
"status": "failed",
"billing_status": "refunded",
"failed_reason": "Image generation failed.",
"task_created_at": 1789171200,
"credits_refunded": 2
}Empfänger-Beispiel
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 });
}Dieses Next.js-Beispiel liest den JSON-Callback-Body aus und verarbeitet erfolgreiche sowie fehlgeschlagene Tasks direkt. Fügen Sie für Ihre eigene Anwendung Datenpersistenz und Task-ID-Deduplizierung hinzu. Stellen Sie zeitaufwendige Prozesse in eine Warteschlange, bevor Sie den Callback bestätigen.
Fehler
HTTP-Fehler enthalten ein error-Objekt mit code und message. Auch ein erfolgreich angenommener Task kann später noch fehlschlagen; fragen Sie den Task ab oder verarbeiten Sie den Callback für Fehler.
{
"error": {
"code": "invalid_request",
"message": "input.prompt is required."
}
}| HTTP | Feld | Vorgehensweise |
|---|---|---|
| 400 | invalid_request | Korrigieren Sie das JSON, den fehlenden Prompt, den Parameterbereich oder die Medien-URL, bevor Sie es erneut versuchen. |
| 401 | invalid_api_key | Überprüfen Sie das Bearer-Token und ob der API-Key aktiv ist. |
| 402 | insufficient_credits | Laden Sie Credits auf oder reduzieren Sie die Task-Kosten. Die Antwort kann den benötigten und den verfügbaren Betrag enthalten. |
| 403 | forbidden | Überprüfen Sie die in der Fehlermeldung beschriebene Einschränkung auf Kontoebene. |
| 404 | not_found | Überprüfen Sie die Task-ID und ob der Key dem Besitzer des Tasks gehört. |
| 429 | rate_limited | Warten Sie das Retry-After-Intervall ab, bevor Sie es erneut versuchen. |
| 500 | internal_error | Prüfen Sie die Fehlermeldung und die API-Protokolle. Gehen Sie bei erneuten Versuchen vorsichtig vor; das erneute Senden einer Erstellungsanfrage kann einen weiteren kostenpflichtigen Task auslösen. |
Errors use error.code and error.message: 400 invalid_request, 401 invalid_api_key, 402 insufficient_credits, 403 forbidden, 404 not_found, 429 rate_limited, 500 internal_error. Insufficient provider balance is not a customer 402 error.
Rate Limits
Tasks erstellen: Pro API-Schlüssel sind standardmäßig bis zu 100 Anfragen pro Minute zulässig. Individuelle Ratenbegrenzungen sind derzeit nicht verfügbar.
Tasks abfragen: Pro API-Schlüssel sind standardmäßig bis zu 120 Anfragen pro Minute zulässig. Abfragen und Erstellungsanfragen werden separat gezählt.
Image and video creation requests share the same API key rate limit.
HTTP 429 enthält Retry-After: 60 bei der Erstellung und Retry-After: 5 bei Abfragen. Nutzen Sie Backoff-Verfahren und vermeiden Sie unnötig häufiges Polling.
HTTP/1.1 429 Too Many Requests
Content-Type: application/json
Retry-After: 60{
"error": {
"code": "rate_limited",
"message": "Rate limit exceeded."
}
}