Nano Banana Pro 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/generationsMożliwości
| Funkcja | Obsługiwane wartości |
|---|---|
| Tryby generowania | text-to-image, image-to-image |
| Rozdzielczość wyjściowa | 1K, 2K, 4K |
| Proporcje obrazu | auto, 1:1, 9:16, 16:9, 3:4, 4:3, 3:2, 2:3, 5:4, 4:5, 21:9 |
| Obrazy referencyjne | Public HTTPS PNG / JPEG / WebP URLs. Image-to-image requires 1–8 images, each up to 30 MB. Text-to-image requires an empty array. |
| Prompt | Required non-empty prompt, up to 10000 characters. |
| Format wyjściowy | png, jpg |
Cennik i kredyty
Each image costs 4 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.
Uwierzytelnianie
Utwórz klucz API w panelu użytkownika. Pełny klucz zostanie wyświetlony tylko raz. Przechowuj go bezpiecznie na swoim serwerze i przesyłaj w nagłówku jako token Bearer przy każdym żądaniu.
Bazowy adres URL
https://api.seevio.aiAuthorization: Bearer sk_live_your_api_key
Content-Type: application/jsonPrzed uruchomieniem poniższych przykładów ustaw zmienną środowiskową SEEVIO_API_KEY. Przykłady w JavaScript należy uruchamiać na serwerze przy użyciu Node.js; przykłady w Pythonie korzystają z pakietu requests.
Treść żądania
| Pole | Typ | Wymagane | Opis i ograniczenia |
|---|---|---|---|
model | string | Tak | Identyfikator modelu. Aby użyć modelu Nano Banana Pro, ustaw w tym polu wartość nano-banana-pro. |
callback_url | string | Nie | Publiczny punkt końcowy HTTPS dla wywołań zwrotnych POST po zakończeniu lub błędzie zadania. Sieci prywatne i localhost nie są obsługiwane. Przykład: https://example.com/webhooks/seevio |
input | object | Tak | Ustawienia generowania. Pole musi zawierać niepusty prompt. |
Parametry wejściowe
| Pole | Typ | Wymagane | Domyślnie | Opis i ograniczenia |
|---|---|---|---|---|
input.prompt | string | Tak | — | Required non-empty prompt, up to 10000 characters. Przykład: A minimalist ceramic teapot on a stone pedestal, soft studio lighting |
input.generation_type | string | Nie | text-to-image | For image editing, set generation_type to image-to-image and provide image_urls. All other parameters use the same contract. Obsługiwane wartości text-to-image | image-to-image |
input.image_urls | string[] | Warunkowo | [] | Public HTTPS PNG / JPEG / WebP URLs. Image-to-image requires 1–8 images, each up to 30 MB. Text-to-image requires an empty array. Przykład: ["https://example.com/teapot.png"] |
input.aspect_ratio | string | Nie | auto | Proporcje obrazu Obsługiwane wartości auto | 1:1 | 9:16 | 16:9 | 3:4 | 4:3 | 3:2 | 2:3 | 5:4 | 4:5 | 21:9Przykład: 1:1 |
input.resolution | string | Nie | 2K | Użyj jednej z obsługiwanych rozdzielczości wyjściowych wymienionych w tym miejscu. Obsługiwane wartości 1K | 2K | 4KPrzykład: 2K |
input.output_format | string | Nie | png | Obsługiwane wartości png | jpgPrzykład: png |
Aspect ratio defaults to auto. Unknown fields, including output quantity, are rejected. Each request generates exactly one image.
Szybki start
Wyślij to proste żądanie, zapisz zwrócony identyfikator taskId, a następnie użyj poniższego przykładu odpytywania o stan zadania. Liczba kredytów w odpowiedzi na utworzenie zadania to kwota zarezerwowana.
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-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"
}
}'Przykładowa odpowiedź na utworzenie zadania
{
"taskId": "3f2aK9mR7xQp4TnZ8bLc6YwH",
"credits": 4
}Tekst na obraz
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-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"
}
}'Obraz na obraz
For image editing, set generation_type to image-to-image and provide image_urls. All other parameters use the same contract.
Zastąp przykładowe adresy URL multimediów z domeny example.com własnymi, publicznie dostępnymi plikami HTTPS. Przykładowe adresy pokazują strukturę żądania i nie są plikami do pobrania.
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-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"
]
}
}'Sprawdź stan zadania
GET https://api.seevio.ai/v1/tasks/{taskId}Zastąp przykładowy identyfikator wartością taskId otrzymaną przy tworzeniu zadania. Zapytania zwracają wyłącznie zadania należące do użytkownika powiązanego z danym kluczem API; nieznane lub niedostępne identyfikatory zwracają HTTP 404.
Na początek odpytuj o stan co 10–20 sekund, wydłużaj odstępy w przypadku błędu HTTP 429 i przerwij, gdy status zmieni się na completed lub failed. W środowisku produkcyjnym zalecamy korzystanie z webhooków. Każdy poniższy przykład kodu wykonuje jedno zapytanie.
curl --fail-with-body https://api.seevio.ai/v1/tasks/3f2aK9mR7xQp4TnZ8bLc6YwH \
-H "Authorization: Bearer $SEEVIO_API_KEY"| Status | Allowed values and requirements |
|---|---|
| queued | Zaakceptowano i oczekuje na uruchomienie. |
| generating | Trwa generowanie obrazu. |
| completed | Zakończono sukcesem. Pobierz pliki z data.results przed upływem limitu czasu. |
| failed | Zakończono błędem. Sprawdź failed_reason oraz billing_status. |
| Field | Typ | Allowed values and requirements |
|---|---|---|
| id | string | Identyfikator zadania. Jest to wartość taskId z odpowiedzi na utworzenie. |
| created_at | number | Czas utworzenia zadania jako znacznik czasu Unix (w sekundach). |
| model | string | Publiczny identyfikator modelu użyty do tego zadania. |
| billing_status | string | Status rozliczenia: reserved (zarezerwowane), charged (pobrane), refunded (zwrócone) lub refund_failed (błąd zwrotu). |
| credits | number | Kredyty zarezerwowane dla tego zadania. Wartość ta jest widoczna również po zwrocie; sprawdź billing_status, aby poznać ostateczny wynik rozliczenia. |
| failed_reason | string | null | Powód błędu dla zadań zakończonych niepowodzeniem; w przeciwnym razie null. Odpowiedzi na zapytania o błędne zadania nie zawierają obiektu data. |
| data | object | Obecne w zapytaniach o zadania, które nie zakończyły się błędem. Zawiera szczegóły dotyczące wyniku i przetwarzania. |
| data.results | string[] | Tablica adresów URL obrazów; pusta przed ukończeniem i po wygaśnięciu. |
| data.image_expires_at | string | null | Termin ważności obrazów w formacie ISO 8601 lub null, jeśli niedostępny. |
| data.processing_time | number | null | Czas przetwarzania po stronie dostawcy w sekundach (jeśli jest dostępny); w przeciwnym razie null. |
W kolejce
{
"id": "3f2aK9mR7xQp4TnZ8bLc6YwH",
"created_at": 1789171200,
"model": "nano-banana-pro",
"credits": 4,
"status": "queued",
"billing_status": "reserved",
"failed_reason": null,
"data": {
"results": [],
"image_expires_at": null,
"processing_time": null
}
}Zakończone sukcesem
{
"id": "3f2aK9mR7xQp4TnZ8bLc6YwH",
"created_at": 1789171200,
"model": "nano-banana-pro",
"credits": 4,
"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
}
}Błąd
Gdy zapytanie zwróci status=failed, oznacza to, że generowanie zakończyło się niepowodzeniem. Przyczynę błędu znajdziesz w polu failed_reason, a wynik zwrotu środków w billing_status. W tym przykładzie status refunded oznacza, że kredyty zostały zwrócone. Pole credits zachowuje pierwotnie zarezerwowaną wartość, a odpowiedź nie zawiera obiektu data.
{
"id": "3f2aK9mR7xQp4TnZ8bLc6YwH",
"created_at": 1789171200,
"model": "nano-banana-pro",
"credits": 4,
"status": "failed",
"billing_status": "refunded",
"failed_reason": "Image generation failed."
}Result links are provided for 30 days after storage. After expiry, results is empty.
Webhooki
Ustaw parametr callback_url w żądaniu utworzenia, aby otrzymać żądanie POST z formatem JSON, gdy zadanie zostanie zakończone sukcesem lub błędem. Zwróć odpowiedź z kodem 2xx w ciągu 15 sekund. Nieudane doręczenia są ponawiane; powtarzające się wywołania należy przetwarzać idempotentnie na podstawie identyfikatora zadania.
Twój punkt końcowy (callback endpoint) musi akceptować żądania POST z treścią w formacie JSON (Content-Type: application/json).
Utwórz zadanie z wywołaniem zwrotnym (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-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"
}'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.
Zadanie zakończone: struktura danych pomyślnego wywołania zwrotnego
created_at oznacza czas utworzenia zdarzenia, a task_created_at zadania, w sekundach Unix. Przykłady pokazują zalecane pola; odpowiedzi mogą zawierać dodatkowe pola.
{
"id": "3f2aK9mR7xQp4TnZ8bLc6YwH",
"created_at": 1789171212,
"model": "nano-banana-pro",
"credits": 4,
"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
}Zadanie nie powiodło się: struktura danych błędu wywołania zwrotnego
{
"id": "3f2aK9mR7xQp4TnZ8bLc6YwH",
"created_at": 1789171212,
"model": "nano-banana-pro",
"credits": 4,
"status": "failed",
"billing_status": "refunded",
"failed_reason": "Image generation failed.",
"task_created_at": 1789171200,
"credits_refunded": 4
}Przykładowy odbiorca
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 });
}Ten przykład dla Next.js odczytuje treść wywołania zwrotnego JSON i bezpośrednio obsługuje zakończone oraz nieudane zadania. W swojej aplikacji dodaj mechanizm trwałości danych oraz deduplikację identyfikatorów zadań (task-ID). Przed potwierdzeniem odbioru wywołania zwrotnego dodaj czasochłonne operacje do kolejki.
Błędy
Błędy HTTP zawierają obiekt error z polami code i message. Pomyślnie przyjęte zadanie może nadal zakończyć się błędem na późniejszym etapie – sprawdzaj stan zadania lub obsłuż wywołanie zwrotne (callback) informujące o błędzie.
{
"error": {
"code": "invalid_request",
"message": "input.prompt is required."
}
}| HTTP | Pole | Co zrobić |
|---|---|---|
| 400 | invalid_request | Przed ponownym wysłaniem popraw strukturę JSON, brakujący prompt, zakresy parametrów lub adresy URL multimediów. |
| 401 | invalid_api_key | Sprawdź poprawność tokenu Bearer oraz czy klucz API jest aktywny. |
| 402 | insufficient_credits | Doładuj konto lub zmniejsz koszt zadania. Odpowiedź może zawierać informacje o wymaganej i dostępnej liczbie kredytów. |
| 403 | forbidden | Sprawdź ograniczenia na poziomie konta opisane w komunikacie o błędzie. |
| 404 | not_found | Sprawdź identyfikator zadania oraz czy klucz API należy do właściciela zadania. |
| 429 | rate_limited | Odczekaj czas wskazany w nagłówku Retry-After przed ponowną próbą. |
| 500 | internal_error | Sprawdź treść błędu oraz logi API. Ponawiaj próby ostrożnie – ponowne wysłanie żądania utworzenia może wygenerować kolejne płatne zadanie. |
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.
Limity żądań
Tworzenie zadań: każdy klucz API pozwala domyślnie na maksymalnie 100 żądań na minutę. Niestandardowe limity żądań nie są obecnie dostępne.
Zapytania o zadania: każdy klucz API pozwala domyślnie na maksymalnie 120 żądań na minutę. Zapytania i żądania utworzenia zadań są liczone oddzielnie.
Image and video creation requests share the same API key rate limit.
Błąd HTTP 429 zawiera nagłówek Retry-After: 60 dla tworzenia zadań oraz Retry-After: 5 dla zapytań o stan. Stosuj algorytm ponawiania z opóźnieniem (backoff) i unikaj zbyt częstego odpytywania.
HTTP/1.1 429 Too Many Requests
Content-Type: application/json
Retry-After: 60{
"error": {
"code": "rate_limited",
"message": "Rate limit exceeded."
}
}