Nano Banana 2.1 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 | 1K, 2K, 4K |
| Proporzioni | auto, 1:1, 16:9, 9:16, 4:3, 3:4, 3:2, 2:3, 5:4, 4:5, 21:9, 4:1, 1:4, 8:1, 1:8 |
| Immagini di riferimento | Public HTTPS PNG / JPEG / WebP URLs. Image-to-image requires 1–10 images, each up to 30 MB. Text-to-image requires an empty array. |
| Prompt | Required non-empty prompt, up to 20000 characters. |
| Formato di output | png, jpg |
Prezzi e crediti
Ogni richiesta genera un’immagine. I crediti dipendono dalla risoluzione indicata sotto. Vengono riservati all’accettazione, addebitati in caso di successo e rimborsati in caso di errore.
| Risoluzione video | Prezzi e crediti |
|---|---|
| 1K | 2 crediti |
| 2K | 3 crediti |
| 4K | 4 crediti |
L'idempotenza delle richieste non è supportata. Ogni richiesta POST valida crea un nuovo task fatturabile. Se l'esito di un invio non è sicuro, interroga il taskId restituito; ripetere la POST potrebbe creare un altro 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 2.1, imposta questo campo su nano-banana-2-1. |
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 20000 characters. Esempio: A minimalist ceramic teapot on a stone pedestal, soft studio lighting |
input.generation_type | string | No | text-to-image | Per l'editing di immagini, imposta generation_type su image-to-image e fornisci gli image_urls. Tutti gli altri parametri utilizzano le stesse specifiche. 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 30 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 | 16:9 | 9:16 | 4:3 | 3:4 | 3:2 | 2:3 | 5:4 | 4:5 | 21:9 | 4:1 | 1:4 | 8:1 | 1:8Esempio: 1:1 |
input.resolution | string | No | 2K | Usa una delle risoluzioni supportate elencate qui. Valori supportati 1K | 2K | 4KEsempio: 2K |
input.output_format | string | No | png | Valori supportati png | jpgEsempio: png |
Il rapporto d'aspetto predefinito è auto. Ogni richiesta genera esattamente un'immagine.
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-2-1",
"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"
}
}'Esempio di risposta alla creazione del task
{
"taskId": "3f2aK9mR7xQp4TnZ8bLc6YwH",
"credits": 3
}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-2-1",
"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"
}
}'Da immagine a immagine
Per l'editing di immagini, imposta generation_type su image-to-image e fornisci gli image_urls. Tutti gli altri parametri utilizzano le stesse specifiche.
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-2-1",
"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"
]
}
}'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 | Valori consentiti e requisiti |
|---|---|
| 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. |
| Campo | Tipo | Valori consentiti e requisiti |
|---|---|---|
| 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. |
| failed_code | string | null | Codice di errore. Consulta failed_reason per i dettagli. |
| 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 di elaborazione del task in secondi, se disponibile; altrimenti null. |
In coda
{
"id": "3f2aK9mR7xQp4TnZ8bLc6YwH",
"created_at": 1789171200,
"model": "nano-banana-2-1",
"credits": 3,
"failed_code": null,
"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-2-1",
"credits": 3,
"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
}
}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-2-1",
"credits": 3,
"failed_code": "400",
"status": "failed",
"billing_status": "refunded",
"failed_reason": "The input or output was flagged as sensitive. Please try again with different inputs."
}I link dei risultati sono disponibili per 30 giorni dall'archiviazione. Dopo la scadenza, il campo results sarà vuoto.
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-2-1",
"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"
}'I callback utilizzano la struttura di risposta della query del task; le notifiche di errore con rimborso includono anche credits_refunded a livello principale. Usa id per identificare il task e status per distinguere tra completati e falliti. Le notifiche potrebbero essere ripetute: gestiscile in modo idempotente per id e status. I callback non sono firmati; verifica il task con l'endpoint di query autenticato. La mancata consegna non prevede il rimborso di un task completato con successo.
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-2-1",
"credits": 3,
"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
}Attività non riuscita: payload di callback fallito
{
"id": "3f2aK9mR7xQp4TnZ8bLc6YwH",
"created_at": 1789171212,
"model": "nano-banana-2-1",
"credits": 3,
"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": 3
}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. |
Gli errori utilizzano error.code ed error.message: 400 invalid_request, 401 invalid_api_key, 402 insufficient_credits, 403 forbidden, 404 not_found, 429 rate_limited, 500 internal_error. Un errore 402 insufficient_credits indica che i crediti disponibili non sono sufficienti per questa richiesta.
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.
Le richieste di creazione di immagini e video condividono lo stesso limite di frequenza (rate limit) della chiave API.
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."
}
}