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/generationsFunzionalità
| Funzionalità | Valori supportati |
|---|---|
| Modalità di generazione | text-to-image, image-to-image |
| Risoluzione video | input.resolution — Not accepted for this model. |
| Proporzioni | auto, 1:1, 9:16, 16:9, 3:4, 4:3, 3:2, 2:3, 5:4, 4:5, 21:9 |
| Immagini di riferimento | 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. |
| Formato di output | png, jpg |
Prezzi e crediti
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.
Autenticazione
Crea una chiave API nella dashboard. La chiave completa viene mostrata una sola volta. Conservala sul tuo server e inviala come token Bearer in ogni richiesta.
URL di base
https://api.seevio.aiAuthorization: Bearer sk_live_your_api_key
Content-Type: application/jsonImposta la variabile d'ambiente SEEVIO_API_KEY prima di eseguire questi esempi. Gli esempi in JavaScript vengono eseguiti sul server con Node.js; gli esempi in Python utilizzano la libreria requests.
Corpo della richiesta
| Campo | Tipo | Obbligatorio | Descrizione e vincoli |
|---|---|---|---|
model | string | Sì | ID modello. Per utilizzare Nano Banana, imposta questo campo su nano-banana. |
callback_url | string | No | Endpoint HTTPS pubblico per le chiamate POST di callback in caso di completamento o errore. Non sono consentiti host locali o reti private. Esempio: https://example.com/webhooks/seevio |
input | object | Sì | Impostazioni di generazione. Deve contenere un prompt non vuoto. |
Parametri di input
| Campo | Tipo | Obbligatorio | Predefinito | Descrizione e vincoli |
|---|---|---|---|---|
input.prompt | string | Sì | — | Required non-empty prompt, up to 5000 characters. Esempio: A minimalist ceramic teapot on a stone pedestal, soft studio lighting |
input.generation_type | string | No | text-to-image | For image editing, set generation_type to image-to-image and provide image_urls. All other parameters use the same contract. Valori supportati text-to-image | image-to-image |
input.image_urls | string[] | Condizionale | [] | 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. Esempio: ["https://example.com/teapot.png"] |
input.aspect_ratio | string | No | auto | Proporzioni Valori supportati auto | 1:1 | 9:16 | 16:9 | 3:4 | 4:3 | 3:2 | 2:3 | 5:4 | 4:5 | 21:9Esempio: 1:1 |
input.resolution | string | Non supportato | — | Not accepted for this model. |
input.output_format | string | No | png | Valori supportati png | jpgEsempio: png |
Aspect ratio defaults to auto. Unknown fields, including output quantity, are rejected. Each request generates exactly one image.
Avvio rapido
Invia questa richiesta minima, salva il taskId restituito e usa l'esempio di query del task riportato di seguito. Il valore dei crediti nella risposta di creazione corrisponde all'importo prenotato.
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"
}
}'Esempio di risposta alla creazione del task
{
"taskId": "3f2aK9mR7xQp4TnZ8bLc6YwH",
"credits": 2
}Da testo a immagine
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"
}
}'Da immagine a immagine
For image editing, set generation_type to image-to-image and provide image_urls. All other parameters use the same contract.
Sostituisci gli URL di esempio con i tuoi file HTTPS accessibili pubblicamente. Gli URL di esempio servono solo a illustrare la struttura della richiesta e non sono risorse scaricabili.
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"
]
}
}'Interroga un task
GET https://api.seevio.ai/v1/tasks/{taskId}Sostituisci l'ID di esempio con il taskId restituito alla creazione. Le query restituiscono solo i task associati all'utente della chiave API; ID non accessibili o inesistenti restituiscono HTTP 404.
Come punto di partenza, effettua un polling ogni 10–20 secondi, rallenta le richieste in caso di HTTP 429 e interrompi quando lo stato diventa completed o failed. Per gli ambienti di produzione, consigliamo l'uso dei webhook. Ogni esempio di codice seguente esegue una singola query.
curl --fail-with-body https://api.seevio.ai/v1/tasks/3f2aK9mR7xQp4TnZ8bLc6YwH \
-H "Authorization: Bearer $SEEVIO_API_KEY"| Stato | Allowed values and requirements |
|---|---|
| queued | Accettato e in attesa di elaborazione. |
| generating | Generazione in corso. |
| completed | Completato con successo. Scarica il file da data.results prima della scadenza. |
| failed | Errore definitivo. Verifica failed_reason e billing_status. |
| Field | Tipo | Allowed values and requirements |
|---|---|---|
| id | string | Identificatore del task. Corrisponde al taskId della risposta di creazione. |
| created_at | number | Data e ora di creazione del task in formato Unix timestamp (secondi). |
| model | string | L'ID pubblico del modello utilizzato per questo task. |
| billing_status | string | Stato di fatturazione: reserved, charged, refunded o refund_failed. |
| credits | number | Crediti prenotati per questo task. Questo valore viene conservato anche dopo un rimborso; verifica billing_status per determinare l'esito finanziario. |
| failed_reason | string | null | Causa del problema per i task falliti; null in caso contrario. Le query fallite omettono la sezione data. |
| data | object | Presente nelle query dei task non falliti. Contiene i dettagli di output ed elaborazione. |
| data.results | string[] | Array di URL delle immagini; vuoto prima del completamento e dopo la scadenza. |
| data.image_expires_at | string | null | Scadenza delle immagini in formato ISO 8601, oppure null se non disponibile. |
| data.processing_time | number | null | Durata dell'elaborazione da parte del provider in secondi, se disponibile, altrimenti null. |
In coda
{
"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
}
}Completato
{
"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
}
}Fallito
Se la query restituisce status=failed, significa che la generazione non è andata a buon fine. Consulta failed_reason per conoscerne il motivo e billing_status per l'esito del rimborso. In questo esempio, lo stato refunded indica che i crediti sono stati riaccreditati. La voce credits mostra la quota inizialmente prenotata e la risposta non include la chiave 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.
Webhook
Imposta callback_url nella richiesta di creazione per ricevere una richiesta POST JSON al completamento o al fallimento del task. Restituisci una risposta 2xx entro 15 secondi. Gli invii non riusciti verranno riprovati; gestisci le notifiche duplicate in modo idempotente tramite l'ID del task.
L'endpoint di callback deve accettare richieste POST con un corpo in formato JSON (Content-Type: application/json).
Crea un task con 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": "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.
Attività completata: payload di callback riuscito
created_at indica la creazione dell’evento; task_created_at quella del task, in secondi Unix. Gli esempi mostrano i campi consigliati; le risposte possono contenere campi aggiuntivi.
{
"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
}Attività non riuscita: payload di callback fallito
{
"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
}Esempio di ricevitore
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 });
}Questo esempio in Next.js legge il corpo JSON della callback e gestisce direttamente le attività completate e fallite. Ti consigliamo di aggiungere logiche di persistenza e deduplicazione dei task-ID per la tua applicazione, e di accodare i processi più lenti prima di confermare la callback.
Errori
Gli errori HTTP contengono un oggetto error con code e message. Un task accettato correttamente può comunque fallire in una fase successiva; interroga lo stato del task o gestisci la chiamata di callback per l'errore.
{
"error": {
"code": "invalid_request",
"message": "input.prompt is required."
}
}| HTTP | Campo | Cosa fare |
|---|---|---|
| 400 | invalid_request | Correggi il formato JSON, il prompt mancante, l'intervallo dei parametri o l'URL del file multimediale prima di riprovare. |
| 401 | invalid_api_key | Controlla il token Bearer e verifica che la chiave API sia attiva. |
| 402 | insufficient_credits | Aggiungi crediti o riduci il costo del task. La risposta potrebbe indicare i crediti richiesti e quelli effettivamente disponibili. |
| 403 | forbidden | Verifica le limitazioni a livello di account descritte nel messaggio di errore. |
| 404 | not_found | Verifica l'ID del task e accertati che la chiave appartenga all'utente che ha avviato il task. |
| 429 | rate_limited | Attendi l'intervallo indicato in Retry-After prima di effettuare un nuovo tentativo. |
| 500 | internal_error | Verifica il messaggio d'errore e i log delle API. Riprova con attenzione: l'invio ripetuto di una richiesta di creazione può generare un nuovo task addebitabile. |
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.
Limiti di frequenza
Creazione task: per impostazione predefinita, ciascuna chiave API consente fino a 100 richieste al minuto. Al momento non sono disponibili limiti di frequenza personalizzati.
Interrogazione task: per impostazione predefinita, ciascuna chiave API consente fino a 120 richieste al minuto. Le richieste di interrogazione e quelle di creazione dei task vengono conteggiate separatamente.
Image and video creation requests share the same API key rate limit.
La risposta HTTP 429 include Retry-After: 60 per la creazione e Retry-After: 5 per le query. Applica un backoff ed evita di interrogare lo stato con una frequenza eccessiva.
HTTP/1.1 429 Too Many Requests
Content-Type: application/json
Retry-After: 60{
"error": {
"code": "rate_limited",
"message": "Rate limit exceeded."
}
}