Source: https://ailoot.ai/models/it/google-gemini-2-5-flash-image/
Canonical: https://ailoot.ai/models/it/google-gemini-2-5-flash-image/
Language: it

# Google: Nano Banana (Gemini 2.5 Flash Image)

[Markdown](https://ailoot.ai/models/it/google-gemini-2-5-flash-image/index.md) · [JSON](https://ailoot.ai/models/it/google-gemini-2-5-flash-image/facts.json)

## [Google: Nano Banana (Gemini 2.5 Flash Image)](https://ailoot.ai/models/it/google-gemini-2-5-flash-image/)

Nano Banana (Gemini 2.5 Flash Image) genera e modifica immagini a partire da testo e immagini. Usa il suo flusso conversazionale per comporre una scena, cambiare un elemento selezionato, combinare riferimenti visivi o rifinire un'immagine di prodotto, specificando quali dettagli devono rimanere.

- [**Ailoot Ultra · OpenAI Chat** `POST /v1/chat/completions` `google/gemini-2.5-flash-image`](https://ailoot.ai/models/it/google-gemini-2-5-flash-image/#method-0)
- [**Ailoot Ultra · Immagini** `POST /v1/images/generations` `google/gemini-2.5-flash-image`](https://ailoot.ai/models/it/google-gemini-2-5-flash-image/#method-1)
- [**Ailoot Ultra · Anthropic Messages** `POST /v1/messages` `google/gemini-2.5-flash-image`](https://ailoot.ai/models/it/google-gemini-2-5-flash-image/#method-2)

Informazioni sul modello

Questa descrizione illustra le funzionalità del modello. Gli input, gli output e le opzioni disponibili in Ailoot per il metodo selezionato sono elencati di seguito.

Gemini 2.5 Flash Image, noto anche come Nano Banana, è il modello di Google basato su testo e immagini per creazione visiva e modifica conversazionale di immagini. Accetta un'istruzione con riferimenti di immagini facoltativi e può restituire immagini con testo associato. Questa esatta edizione 2.5 Flash Image è distinta da Nano Banana 2, Nano Banana Pro e dai modelli Lite per immagini successivi. Il suo risultato utile è una risorsa visiva generata o rivista, non la risposta del modello testuale generale Gemini 2.5.

La scheda dell'esatto modello elenca 65,536 token di input e 32,768 token di output. Immagini e istruzioni fanno parte dell'input, e l'immagine o il testo restituiti fanno parte del risultato. La tabella delle risoluzioni della guida indica output 1:1 a 1024×1024, 3:4 a 864×1184 e 16:9 a 1344×768, tra i rapporti d'aspetto supportati. Scegli il formato di visualizzazione previsto prima di progettare la scena. Le opzioni ad alta risoluzione di un'edizione Gemini per immagini successiva non devono essere considerate controlli documentati per questo esatto modello.

Per la creazione da testo a immagine, specifica soggetto, azione, ambiente, stile, illuminazione e punto di vista. Un'illustrazione di prodotto potrebbe usare un'identità visiva fornita e richiedere un dettaglio del materiale chiaramente visibile in un'ambientazione appropriata. Spiega lo scopo dell'immagine, affinché il modello possa assegnare spazio al soggetto e al testo eventuale. Descrizioni fotografiche come una vista ravvicinata, una composizione dall'alto o una prospettiva dal basso aiutano a definire l'inquadratura più chiaramente di un elenco di parole di stile non correlate.

Per la modifica, fornisci l'immagine originale e identifica la parte da cambiare. La guida del produttore descrive aggiunta o rimozione di elementi, mascheramento semantico, trasferimento di stile e composizione tramite riferimenti. Una richiesta utile indica sia la revisione sia le condizioni da conservare, per esempio cambiare lo sfondo mantenendo forma, superficie ed etichetta del prodotto. Etichetta il ruolo di ogni input quando combini riferimenti, come aspetto del soggetto, ambientazione o stile. La guida afferma che questa edizione funziona meglio con un massimo di tre immagini di input; è un'indicazione pratica, non un motivo per combinare un insieme illimitato di riferimenti in conflitto.

La rifinitura conversazionale può mantenere lo stesso soggetto cambiando una decisione visiva specifica. Chiedi una revisione correlata alla volta e conserva l'immagine sorgente e il risultato accettato usati per quel turno. Descrivi cosa debba restare coerente e cosa possa variare. Per una sequenza di risorse, identifica esplicitamente il soggetto condiviso, i colori e le regole visive, anziché presumere che un nuovo prompt isolato li recuperi. Confronta l'immagine rivista con il riferimento prima di considerare rispettata un'istruzione di conservazione.

Per il testo all'interno dell'immagine, definisci prima le diciture esatte e poi richiedi l'immagine che le contenga, come consigliato dalla guida. Specifica lingua, ordine di lettura, posizionamento ed enfasi relativa delle etichette. Una richiesta di infografica dovrebbe identificare la relazione spiegata da ciascuna etichetta e gli elementi visivi che la sostengono. Controlla ortografia, punteggiatura e associazione visiva alle dimensioni effettive di visualizzazione; un'etichetta generata dall'aspetto leggibile può comunque cambiare un nome, un numero o il significato previsto.

La scheda del modello non elenca thinking, grounding tramite ricerca, chiamate di funzione, esecuzione di codice o output strutturato vincolato per questa edizione. Non dichiara neppure generazione audio o Live API. Il suo input documentato è testo e immagini, quindi funzionalità audio, video ed elaborazione documentale di altri modelli Gemini non dovrebbero essere attribuite a questo profilo. Un'applicazione dovrebbe gestire esplicitamente le parti di contenuto restituite, anziché presumere che una normale risposta in prosa contenga la risorsa immagine completata.

La guida osserva che il numero richiesto di immagini potrebbe non essere sempre rispettato e che le immagini generate includono la marcatura SynthID. Esamina ogni immagine restituita per composizione, fedeltà al soggetto, numero di oggetti e diciture esatte. Se la scena ha diversi componenti, descrivine la disposizione prevista in un ordine chiaro ed esprimi positivamente l'aspetto desiderato. Conserva l'esatta identità del modello, il prompt e i riferimenti insieme al risultato. Questo rende verificabile il compito di generazione o modifica visiva e offre a una revisione successiva un punto di partenza concreto.

Caso pratico

### Caso pratico

Esempio tecnico in inglese

```
Change a product photo background

Using the supplied product photograph, preserve the ceramic mug's shape, handle, glaze and existing logo exactly. Replace only the background with a pale stone tabletop and soft morning side light. Keep the camera angle and mug position. Remove unrelated background clutter and add no new lettering, props or decorative marks.
```

#### Risultato atteso

```
An edited image retaining the reference mug while changing its setting and light as requested.
```

#### Verificare il risultato

```
Compare the result with the reference for mug geometry, logo fidelity, camera angle and removal of clutter.
```

**Ailoot Ultra · OpenAI Chat** `POST /v1/chat/completions` `google/gemini-2.5-flash-image`

[`google/gemini-2.5-flash-image`](https://ailoot.ai/models/it/#m=google%2Fgemini-2.5-flash-image&route=Ultra&caller=google%2Fgemini-2.5-flash-image&fmt=chat)

Google /`google/gemini-2.5-flash-image`

### Introduzione

Nano Banana (Gemini 2.5 Flash Image) genera e modifica immagini a partire da testo e immagini. Usa il suo flusso conversazionale per comporre una scena, cambiare un elemento selezionato, combinare riferimenti visivi o rifinire un'immagine di prodotto, specificando quali dettagli devono rimanere.

Input accettati

Testo

Risultati

Testo

### Disponibile in Ailoot · input e metodi

**Ailoot Ultra · OpenAI Chat** `POST /v1/chat/completions`

Tipi di input

`text`

Tipi di output

`text`

Formato di output

json o SSE

| Campo | Tipo | Requisito | Valori e limiti | Predefinito |
| --- | --- | --- | --- | --- |
| Campo`model` | Tipo`string` | RequisitoObbligatorio | Valori e limiti google/gemini-2.5-flash-image | Predefinito— |
| Campo`messages` | Tipo`message[]` | RequisitoObbligatorio | Valori e limiti Numero minimo di elementi: 1 | Predefinito— |
| Campo`messages[].role` | Tipo`string` | RequisitoObbligatorio | Valori e limiti Esempi: system, user, assistant, tool, function Condizioni: Questi ruoli sono rappresentati esplicitamente dai tipi di compatibilità del codice sorgente; l’insieme esatto dei ruoli rimane specifico del modello. Dipende dal modello | Predefinito— |
| Campo`messages[].content` | Tipo`string\|content_part[]\|null` | RequisitoFacoltativo | Valori e limiti | Predefinito— |
| Campo`messages[].tool_calls` | Tipo`tool_call[]` | RequisitoFacoltativo | Valori e limiti | Predefinito— |
| Campo`messages[].tool_call_id` | Tipo`string` | RequisitoFacoltativo | Valori e limiti Si applica quando: role=tool; usa l’ID effettivamente restituito | Predefinito— |
| Campo`messages[].name` | Tipo`string` | RequisitoFacoltativo | Valori e limiti | Predefinito— |
| Campo`messages[].reasoning_content` | Tipo`string` | RequisitoFacoltativo | Valori e limiti Si applica quando: Reinserisci il ragionamento effettivamente restituito quando il modello lo utilizza | Predefinito— |
| Campo`messages[].reasoning_details` | Tipo`object\|array` | RequisitoFacoltativo | Valori e limiti Dipende dal modello | Predefinito— |
| Campo`max_tokens` | Tipo`integer` | RequisitoFacoltativo | Valori e limiti Minimo: 1 Dipende dal modello | Predefinito— |
| Campo`max_completion_tokens` | Tipo`integer` | RequisitoFacoltativo | Valori e limiti Minimo: 1 Dipende dal modello | Predefinito— |
| Campo`stream` | Tipo`boolean` | RequisitoFacoltativo | Valori e limiti | Predefinitofalse |
| Campo`stream_options.include_usage` | Tipo`boolean` | RequisitoFacoltativo | Valori e limiti Dipende dal modello | Predefinito— |
| Campo`temperature` | Tipo`number` | RequisitoFacoltativo | Valori e limiti Dipende dal modello | Predefinito— |
| Campo`top_p` | Tipo`number` | RequisitoFacoltativo | Valori e limiti Dipende dal modello | Predefinito— |
| Campo`stop` | Tipo`string\|string[]` | RequisitoFacoltativo | Valori e limiti Dipende dal modello | Predefinito— |
| Campo`tools` | Tipo`function_tool[]` | RequisitoFacoltativo | Valori e limiti Dipende dal modello | Predefinito— |
| Campo`tools[].type` | Tipo`string` | RequisitoFacoltativo | Valori e limiti function Dipende dal modello | Predefinito— |
| Campo`tools[].function.name` | Tipo`string` | RequisitoObbligatorio | Valori e limiti Si applica quando: Funzione fornita come strumento | Predefinito— |
| Campo`tools[].function.description` | Tipo`string` | RequisitoFacoltativo | Valori e limiti | Predefinito— |
| Campo`tools[].function.parameters` | Tipo`JSON_schema` | RequisitoFacoltativo | Valori e limiti | Predefinito— |
| Campo`tool_choice` | Tipo`string\|object` | RequisitoFacoltativo | Valori e limiti Dipende dal modello | Predefinito— |
| Campo`parallel_tool_calls` | Tipo`boolean` | RequisitoFacoltativo | Valori e limiti Dipende dal modello | Predefinito— |
| Campo`response_format` | Tipo`object` | RequisitoFacoltativo | Valori e limiti Dipende dal modello | Predefinito— |
| Campo`reasoning_effort` | Tipo`string` | RequisitoFacoltativo | Valori e limiti Dipende dal modello | Predefinito— |
| Campo`reasoning` | Tipo`object` | RequisitoFacoltativo | Valori e limiti Dipende dal modello | Predefinito— |
| Campo`service_tier` | Tipo`string` | RequisitoFacoltativo | Valori e limiti Dipende dal modello | Predefinito— |
| Campo`instructions` | Tipo`string` | RequisitoFacoltativo | Valori e limiti Campo di compatibilità | Predefinito— |
| Campo`functions` | Tipo`function[]` | RequisitoFacoltativo | Valori e limiti Dipende dal modello | Predefinito— |
| Campo`function_call` | Tipo`string\|object` | RequisitoFacoltativo | Valori e limiti Dipende dal modello | Predefinito— |
| Campo`prompt_cache_options` | Tipo`object` | RequisitoFacoltativo | Valori e limiti Dipende dal modello | Predefinito— |
| Campo`modalities` | Tipo`string[]` | RequisitoFacoltativo | Valori e limiti text | Predefinito— |
| Campo`provider` | Tipo`object` | RequisitoFacoltativo | Valori e limiti Condizioni: provider.options viene rifiutato su questa rotta testuale Ultra | Predefinito— |
| Campo`cache_control.ttl` | Tipo`string` | RequisitoFacoltativo | Valori e limiti Condizioni: 1h viene rifiutato nelle posizioni effettive della cache dei prompt | Predefinito— |

Combinazioni di materiali in input

**Testo** · Testo UTF8

`messages[].content`

Parametri e ciclo di vita del metodo

| Parametro | Contratto |
| --- | --- |
| Parametro`content_type` | Contrattoapplication/json |
| Parametro`required` | Contrattomodel, messages |
| Parametro`material_types` | Contrattotext |
| Parametro`messages` | ContrattoArray di messaggi con struttura role/content |
| Parametro`file_material` | ContrattoDocumento UTF-8 effettivo inserito come testo letterale; nessun ID di file dedotto |
| Parametro`optional_controls` | Contrattostream, temperature, top\_p, stop, max\_tokens, max\_completion\_tokens, reasoning, response\_format, tools, tool\_choice |
| Parametro`control_scope` | ContrattoSpecifico del modello; gli strumenti di funzione dell’utente differiscono dagli strumenti ospitati |
| Parametro`output_modalities` | Contrattotext |
| Parametro`hosted_operations` | Contrattofalse |
| Parametro`multimodal_input_binding` | Contrattonull |

Ciclo di vita: `synchronous_or_streamed`

Invia l’ID esatto del modello con messages.

La lunghezza del contesto non è un limite di uscita.

Un file di testo può fornire testo letterale; gli ingressi immagine/audio/oggetto file richiedono un’associazione esatta.

### Tariffe

Le tariffe non aggiungono opzioni alla richiesta. I parametri supportati sono elencati nel metodo selezionato.

Modalità rapida

Tariffa standard Quando è selezionata la modalità rapida

Modalità flex

Tariffa standard Quando è selezionata la modalità flex

Sforzo massimo di ragionamento

Tariffa standard Quando lo sforzo massimo di ragionamento usa l'adeguamento predefinito (default)

Tariffe della cache esplicita

Non abilitato Quando viene richiesta una cache esplicita

#### Tariffe Ailoot

#### Prezzi per configurazione

Associa ogni costo alle condizioni indicate. Usa una sola tariffa per ogni insieme di configurazioni alternative.

| Configurazione | Listino delle tariffe | Token di contesto, più di | Token di contesto, fino al limite incluso | Costo |
| --- | --- | --- | --- | --- |
| ConfigurazioneTariffe di base dei token | Listino delle tariffeTariffa base | Token di contesto, più di— | Token di contesto, fino al limite inclusoNessun limite superiore | Costo Input · Token in input **$0.0006** / 1K token Output · Token in output **$0.005** / 1K token Input · Lettura dalla cache **$0.00006** / 1K token Input · Scrittura nella cache **$0.0001666666666666666** / 1K token Input · Scrittura nella cache, 1 ora **—** / 1K token Output · Token immagine in uscita **$0.06** / 1K token immagine |
| ConfigurazioneFascia 1 di lunghezza della richiesta | Listino delle tariffe— | Token di contesto, più di0 | Token di contesto, fino al limite inclusoNessun limite superiore | Costo Input · Token in input **$0.0006** / 1K token Output · Token in output **$0.005** / 1K token Input · Lettura dalla cache **$0.00006** / 1K token Input · Scrittura nella cache **$0.0001666666666666666** / 1K token Input · Scrittura nella cache, 1 ora **—** / 1K token |

#### Dettagli della tariffa di riferimento

I listini di riferimento del modello non modificano la selezione del metodo, i preventivi o gli addebiti. Gli addebiti attivi usano le tariffe del metodo Ailoot selezionato.

google/gemini-2.5-flash-image

#### Prezzi per configurazione

| Configurazione | Condizioni di fatturazione | Costo |
| --- | --- | --- |
| Configurazionegoogle/gemini-2.5-flash-image · Configurazione predefinita | Condizioni di fatturazioneConfigurazione predefinita | Costo Input · Input **0,0006 USD** / 1K token Output · Output **0,06 USD** / 1K token |

Google: Nano Banana (Gemini 2.5 Flash Image)

#### Prezzi per configurazione

| Configurazione | Condizioni di fatturazione | Costo |
| --- | --- | --- |
| ConfigurazioneGoogle: Nano Banana (Gemini 2.5 Flash Image) · Configurazione predefinita | Condizioni di fatturazioneConfigurazione predefinita | Costo Input · Token in input **0,0006 USD** / 1K token Output · Token in output **0,005 USD** / 1K token Input · Immagine in ingresso **0,0006 USD** / 1K token Output · Immagine in uscita **0,06 USD** / 1K token Input · Audio in ingresso **0,002 USD** / 1K token Input · Lettura dalla cache audio **0,0002 USD** / 1K token Output · Ricerca web **0,028 USD** per ricerca Output · Token di ragionamento **0,005 USD** / 1K token Input · Lettura dalla cache **0,00006 USD** / 1K token Input · Scrittura nella cache · 5 minuti **≈0,000167 USD** / 1K token |

Ailoot prenota un importo stimato prima di una richiesta. Dopo il risultato, addebita il costo finale in base all’utilizzo misurato. Per lo streaming, l’addebito usa il record finale di utilizzo. [Come funzionano la prenotazione e l’addebito finale →](https://ailoot.ai/docs/it/billing/reserve/)

### Esempi di richieste

#### Ailoot Ultra · OpenAI Chat

curlPython SDKStreaming Python

```bash
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"model": "google/gemini-2.5-flash-image", "messages": [{"role": "user", "content": "Explain the difference between an observation and a hypothesis in three sentences."}]}')

Path("request.json").write_text(json.dumps(p,ensure_ascii=False))
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/chat/completions \
  -H "Authorization: Bearer $AILOOT_API_KEY" -H 'Content-Type: application/json' \
  --data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import json
from pathlib import Path
r=json.loads(Path("result.json").read_text())
for x in r.get("choices",[]):
    if x.get("message",{}).get("content"): print(x["message"]["content"])
PY_RESULT
```

```python
from openai import OpenAI
import os

if not os.environ.get("AILOOT_API_KEY", "").strip(): raise SystemExit("Set AILOOT_API_KEY before making a request")
client=OpenAI(base_url="https://api.ailoot.ai/v1",api_key=os.environ["AILOOT_API_KEY"],max_retries=0)
result=client.chat.completions.create(model='google/gemini-2.5-flash-image',messages=[{"role":"user","content":"Explain observations and hypotheses in three sentences."}])
import base64, json
from pathlib import Path

def save_result(data, stem="result"):
    # Keep every field, including usage, IDs, reasoning and tool requests.
    Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
    print(json.dumps(data, ensure_ascii=False, indent=2))
    def save_blob(encoded, suffix, label):
        raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
        ext = "png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4] == b"RIFF" and raw[8:12] == b"WEBP" else suffix
        file = Path(stem + "-" + label + "." + ext)
        file.write_bytes(raw)
        print("Saved", file)
    for index, block in enumerate(data.get("content") or []):
        print("Content", index, json.dumps(block, ensure_ascii=False))
    for choice in data.get("choices") or []:
        print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
    for index, item in enumerate(data.get("output") or []):
        print("Output", index, json.dumps(item, ensure_ascii=False))
        if item.get("type") == "image_generation_call" and item.get("result"):
            save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
    for ci, candidate in enumerate(data.get("candidates") or []):
        for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
            print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
            blob = part.get("inlineData") or part.get("inline_data")
            if blob and blob.get("data"):
                mime = blob.get("mimeType") or blob.get("mime_type")
                suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
                save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))

save_result(result.to_dict(mode="json"))
```

```python
from openai import OpenAI
import os
from pathlib import Path

if not os.environ.get("AILOOT_API_KEY", "").strip(): raise SystemExit("Set AILOOT_API_KEY before making a request")
client=OpenAI(base_url="https://api.ailoot.ai/v1",api_key=os.environ["AILOOT_API_KEY"],max_retries=0)
import base64, json
from pathlib import Path

def save_result(data, stem="result"):
    # Keep every field, including usage, IDs, reasoning and tool requests.
    Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
    print(json.dumps(data, ensure_ascii=False, indent=2))
    def save_blob(encoded, suffix, label):
        raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
        ext = "png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4] == b"RIFF" and raw[8:12] == b"WEBP" else suffix
        file = Path(stem + "-" + label + "." + ext)
        file.write_bytes(raw)
        print("Saved", file)
    for index, block in enumerate(data.get("content") or []):
        print("Content", index, json.dumps(block, ensure_ascii=False))
    for choice in data.get("choices") or []:
        print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
    for index, item in enumerate(data.get("output") or []):
        print("Output", index, json.dumps(item, ensure_ascii=False))
        if item.get("type") == "image_generation_call" and item.get("result"):
            save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
    for ci, candidate in enumerate(data.get("candidates") or []):
        for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
            print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
            blob = part.get("inlineData") or part.get("inline_data")
            if blob and blob.get("data"):
                mime = blob.get("mimeType") or blob.get("mime_type")
                suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
                save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))

with client.chat.completions.stream(model='google/gemini-2.5-flash-image',messages=[{"role":"user","content":"Explain observations and hypotheses in three sentences."}]) as stream:
    with Path("stream-events.jsonl").open("w",encoding="utf-8") as log:
        for event in stream:
            payload=event.to_dict(mode="json")
            log.write(json.dumps(payload,ensure_ascii=False)+"\n"); log.flush()
            print(json.dumps(payload,ensure_ascii=False))
    final=stream.get_final_completion()
    save_result(final.to_dict(mode="json"),"stream-result")
```

### Ricevi e salva i risultati

#### Ailoot Ultra · OpenAI Chat

json o SSE

##### Conserva tutti i risultati completati

Conserva ogni risposta, file e parte di contenuto restituiti per intero.

Conserva ogni scelta con contenuto, chiamate agli strumenti e ragionamento. In SSE assembla i delta per indice di scelta e strumento e conserva il motivo finale di completamento e i dati di utilizzo.

##### Se occorre verificare la risposta originale

Conserva gli ID e le intestazioni di richiesta/risposta. Non viene fornito alcun URL generico per recuperare un’attività testuale.

Campi della risposta

| Campo | Tipo |
| --- | --- |
| Campo`choices[].index` | Tipointeger |
| Campo`choices[].message.content` | Tipostring\|null |
| Campo`choices[].message.tool_calls` | Tipotool\_call\[\] |
| Campo`choices[].message.reasoning_content` | Tipostring |
| Campo`choices[].message.reasoning_details` | Tipoobject\|array |
| Campo`choices[].finish_reason` | Tipostring\|null |
| Campo`usage` | Tipoobject |

Errori e passaggi successivi

| Risposta | Condizione | Passaggio successivo |
| --- | --- | --- |
| Risposta400 · `invalid_request_error` | CondizioneCampi obbligatori, rappresentazione del materiale o valore del parametro non validi | Passaggio successivoCorreggi i campi indicati prima di una nuova richiesta di creazione. |

### Alias

#### Alias del modello

**Ailoot Ultra** [`google/gemini-2.5-flash-image`](https://ailoot.ai/models/it/#m=google%2Fgemini-2.5-flash-image&route=Ultra&caller=google%2Fgemini-2.5-flash-image&fmt=chat)

#### Alias dei percorsi dei metodi

`/v1/images`

#### ID di chiamata correlati

[`google/gemini-2.5-flash-image`](https://ailoot.ai/models/it/#m=google%2Fgemini-2.5-flash-image&route=Ultra&caller=google%2Fgemini-2.5-flash-image&fmt=chat)

**Ailoot Ultra · Immagini** `POST /v1/images/generations` `google/gemini-2.5-flash-image`

[`google/gemini-2.5-flash-image`](https://ailoot.ai/models/it/#m=google%2Fgemini-2.5-flash-image&route=Ultra&caller=google%2Fgemini-2.5-flash-image&fmt=images)

Google /`google/gemini-2.5-flash-image`

### Introduzione

Nano Banana (Gemini 2.5 Flash Image) genera e modifica immagini a partire da testo e immagini. Usa il suo flusso conversazionale per comporre una scena, cambiare un elemento selezionato, combinare riferimenti visivi o rifinire un'immagine di prodotto, specificando quali dettagli devono rimanere.

Input accettati

Testo · Immagini

Risultati

Immagini

### Disponibile in Ailoot · input e metodi

**Ailoot Ultra · Immagini** `POST /v1/images/generations`

Tipi di input

`text`, `image`

Tipi di output

`image`

| Campo | Tipo | Requisito | Valori e limiti | Predefinito |
| --- | --- | --- | --- | --- |
| Campo`model` | Tipo`string` | RequisitoObbligatorio | Valori e limiti google/gemini-2.5-flash-image | Predefinito— |
| Campo`prompt` | Tipo`string` | RequisitoObbligatorio | Valori e limiti Lunghezza minima: 1 | Predefinito— |
| Campo`aspect_ratio` | Tipo`string` | RequisitoFacoltativo | Valori e limiti 1:1, 2:3, 3:2, 3:4, 4:3, 4:5, 5:4, 9:16, 16:9, 21:9 | Predefinito— |
| Campo`n` | Tipo`integer` | RequisitoFacoltativo | Valori e limiti Minimo: 1 Massimo: 1 | Predefinito— |
| Campo`input_references` | Tipo`array` | RequisitoFacoltativo | Valori e limiti Numero minimo di elementi: 0 Numero massimo di elementi: 3 | Predefinito— |
| Campo`provider` | Tipo`object` | RequisitoFacoltativo | Valori e limiti | Predefinito— |

Parametri e ciclo di vita del metodo

| Parametro | Contratto |
| --- | --- |
| Parametro`content_type` | Contrattoapplication/json |
| Parametro`required` | Contrattomodel, prompt |
| Parametro`material_types` | Contrattotext, image |

Ciclo di vita: `synchronous_result_then_owned_library`

`GET /v1/media/tasks/{task_id}` · task\_id effettivamente restituito o record della libreria multimediale

`GET /v1/media/assets/{asset_id}/content`

`GET /v1/media/assets`

`GET /v1/media/assets/{asset_id}`

### Tariffe

##### Calcolo del costo finale

Le tariffe visualizzate stimano il costo prima della generazione. L'addebito finale viene calcolato in base al costo registrato per la generazione originale. La durata misurata dell'output e le quantità previste non costituiscono la quantità finale fatturabile.

Le tariffe non aggiungono opzioni alla richiesta. I parametri supportati sono elencati nel metodo selezionato.

Modalità rapida

Non specificato Quando è selezionata la modalità rapida

Modalità flex

Non specificato Quando è selezionata la modalità flex

Sforzo massimo di ragionamento

Non specificato Quando lo sforzo massimo di ragionamento usa l'adeguamento predefinito (default)

#### Tariffe stimate per il confronto

#### Prezzi per configurazione

Associa ogni costo alle condizioni indicate. Usa una sola tariffa per ogni insieme di configurazioni alternative.

| Configurazione | Listino delle tariffe | Quantità prevista | Costo |
| --- | --- | --- | --- |
| ConfigurazioneTariffe base dei token | Listino delle tariffeTariffa base | Quantità prevista— | Costo Input · Token in input · Stima solo a fini di confronto **—** / 1K token Output · Token in output · Stima solo a fini di confronto **—** / 1K token Input · Lettura dalla cache · Stima solo a fini di confronto **—** / 1K token Input · Scrittura nella cache · Stima solo a fini di confronto **—** / 1K token Input · Scrittura nella cache, 1 ora · Stima solo a fini di confronto **—** / 1K token |
| ConfigurazioneCosto stimato della generazione | Listino delle tariffe— | Quantità previstastima per una generazione | Costo Output · Costo di generazione stimato · Stima solo a fini di confronto **$0.24576** stima prima della generazione Questa stima non è un addebito aggiuntivo né una tariffa fissa per la generazione completata. |

Ailoot prenota un importo stimato prima di una richiesta. Dopo il risultato, addebita il costo finale in base all’utilizzo misurato. Per lo streaming, l’addebito usa il record finale di utilizzo. [Come funzionano la prenotazione e l’addebito finale →](https://ailoot.ai/docs/it/billing/reserve/)

### Esempi di richieste

#### Ailoot Ultra · Immagini

curl

```bash
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
export AILOOT_API_KEY
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p={'model': 'google/gemini-2.5-flash-image', 'prompt': 'a red panda astronaut floating in space, studio lighting'}

Path("request.json").write_text(json.dumps(p,ensure_ascii=False))
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/images/generations \
  -H "Authorization: Bearer $AILOOT_API_KEY" -H 'Content-Type: application/json' \
  --data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import base64, json, os, subprocess
from pathlib import Path
from urllib.parse import urlsplit, urljoin

def save_images(items):
    if not items: raise SystemExit("No completed images; retain the full response")
    for index, item in enumerate(items):
        encoded=item.get("b64_json")
        uri=item.get("url", "")
        if not encoded and uri.startswith("data:image/"):
            header, separator, encoded=uri.partition(",")
            if not separator or ";base64" not in header: raise SystemExit("Unsupported image data URI")
        if encoded:
            raw=base64.b64decode(encoded,validate=True)
        elif uri:
            uri=urljoin("https://api.ailoot.ai",uri)
            parsed=urlsplit(uri)
            if parsed.scheme!="https" or not parsed.netloc or parsed.username or parsed.password:
                raise SystemExit("Invalid returned image URL")
            owned=parsed.netloc=="api.ailoot.ai" and parsed.path.startswith("/v1/media/assets/") and parsed.path.endswith("/content")
            args=["curl","--fail-with-body","--silent","--show-error",uri]
            if owned: args += ["-H","Authorization: Bearer "+os.environ["AILOOT_API_KEY"]]
            temporary=Path(f"image-{index}.bin")
            subprocess.run(args+["-o",str(temporary)],check=True)
            raw=temporary.read_bytes()
            temporary.unlink()
        else: raise SystemExit("Image has neither bytes nor URL")
        if not raw: raise SystemExit("Empty image result")
        ext="png" if raw.startswith(b"\x89PNG") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4]==b"RIFF" and raw[8:12]==b"WEBP" else "svg" if raw.lstrip().startswith((b"<svg",b"<?xml")) else "bin"
        Path(f"image-{index}.{ext}").write_bytes(raw)
    print("Every returned image saved; complete response metadata retained")
save_images(json.loads(Path("result.json").read_text())["data"])
PY_RESULT
```

### Ricevi e salva i risultati

#### Ailoot Ultra · Immagini

Scarica ogni immagine restituita o salvane il contenuto Base64

- `GET /v1/media/tasks/{task_id}`
- `GET /v1/media/assets/{asset_id}/content`
- `GET /v1/media/assets`
- `GET /v1/media/assets/{asset_id}`

Altre letture di contenuto

Leggi le risorse esistenti di tua proprietà

```bash
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/media/assets \
  -H "Authorization: Bearer $AILOOT_API_KEY" -o owned-assets.json
# Preserve every returned asset and follow its exact signed content URL. Do not construct a signed token.
```

##### Conserva tutti i risultati completati

Salva ogni immagine completata; recupera ogni URL restituito oppure decodificane il contenuto Base64.

Conserva la risposta completa e gli header, ogni output effettivo, gli identificatori originali restituiti e tutti i campi di utilizzo. Recupera l'operazione originale senza inviare nuovamente la richiesta di creazione.

##### Se occorre verificare la risposta originale

Conserva l'X-Client-Request-ID restituito per la riconciliazione. Leggi solo i valori task\_id/asset\_id effettivamente restituiti o la tua libreria multimediale; non costruire mai un URL del task a partire dall'ID dell'operazione e non reinviare mai la richiesta di creazione.

Campi della risposta

| Campo | Tipo |
| --- | --- |
| Campo`created` | Tipo |
| Campo`data[].url` | Tipo |
| Campo`data[].b64_json` | Tipo |
| Campo`usage` | Tipo |

### Alias

#### Alias del modello

**Ailoot Ultra** [`google/gemini-2.5-flash-image`](https://ailoot.ai/models/it/#m=google%2Fgemini-2.5-flash-image&route=Ultra&caller=google%2Fgemini-2.5-flash-image&fmt=images)

#### Alias dei percorsi dei metodi

`/v1/images`

#### ID di chiamata correlati

[`google/gemini-2.5-flash-image`](https://ailoot.ai/models/it/#m=google%2Fgemini-2.5-flash-image&route=Ultra&caller=google%2Fgemini-2.5-flash-image&fmt=images)

**Ailoot Ultra · Anthropic Messages** `POST /v1/messages` `google/gemini-2.5-flash-image`

[`google/gemini-2.5-flash-image`](https://ailoot.ai/models/it/#m=google%2Fgemini-2.5-flash-image&route=Ultra&caller=google%2Fgemini-2.5-flash-image&fmt=messages)

Google /`google/gemini-2.5-flash-image`

### Introduzione

Nano Banana (Gemini 2.5 Flash Image) genera e modifica immagini a partire da testo e immagini. Usa il suo flusso conversazionale per comporre una scena, cambiare un elemento selezionato, combinare riferimenti visivi o rifinire un'immagine di prodotto, specificando quali dettagli devono rimanere.

Input accettati

Testo

Risultati

json · sse

### Disponibile in Ailoot · input e metodi

**Ailoot Ultra · Anthropic Messages** `POST /v1/messages`

Tipi di input

`text`

Tipi di output

`json`, `sse`

Formato di output

JSON o SSE

| Campo | Tipo | Requisito | Valori e limiti | Predefinito |
| --- | --- | --- | --- | --- |
| Campo`model` | Tipo`string` | RequisitoObbligatorio | Valori e limiti google/gemini-2.5-flash-image | Predefinito— |
| Campo`messages` | Tipo`message[]` | RequisitoObbligatorio | Valori e limiti | Predefinito— |
| Campo`messages[].role` | Tipo`string` | RequisitoObbligatorio | Valori e limiti user, assistant | Predefinito— |
| Campo`messages[].content` | Tipo`string` | RequisitoObbligatorio | Valori e limiti | Predefinito— |
| Campo`max_tokens` | Tipo`integer` | RequisitoObbligatorio | Valori e limiti | Predefinito— |
| Campo`stream` | Tipo`boolean` | RequisitoFacoltativo | Valori e limiti | Predefinitofalse |

Combinazioni di materiali in input

**Testo** · Testo UTF-8

`Stringa messages[].content`

Parametri e ciclo di vita del metodo

| Parametro | Contratto |
| --- | --- |
| Parametro`content_type` | Contrattoapplication/json |
| Parametro`required` | Contrattomodel, messages, max\_tokens |
| Parametro`optional_controls` | Contrattostream |
| Parametro`material_types` | Contrattotext |
| Parametro`text_file_material` | ContrattoLeggi il documento UTF-8 effettivo e inserisci il testo nell’ingresso indicato o nella stringa del contenuto del messaggio. |

Ciclo di vita: `synchronous_or_streamed`

### Tariffe

Le tariffe non aggiungono opzioni alla richiesta. I parametri supportati sono elencati nel metodo selezionato.

Modalità rapida

Tariffa standard Quando è selezionata la modalità rapida

Modalità flex

Tariffa standard Quando è selezionata la modalità flex

Sforzo massimo di ragionamento

Tariffa standard Quando lo sforzo massimo di ragionamento usa l'adeguamento predefinito (default)

Tariffe della cache esplicita

Non abilitato Quando viene richiesta una cache esplicita

#### Tariffe Ailoot

#### Prezzi per configurazione

Associa ogni costo alle condizioni indicate. Usa una sola tariffa per ogni insieme di configurazioni alternative.

| Configurazione | Listino delle tariffe | Token di contesto, più di | Token di contesto, fino al limite incluso | Costo |
| --- | --- | --- | --- | --- |
| ConfigurazioneTariffe di base dei token | Listino delle tariffeTariffa base | Token di contesto, più di— | Token di contesto, fino al limite inclusoNessun limite superiore | Costo Input · Token in input **$0.0006** / 1K token Output · Token in output **$0.005** / 1K token Input · Lettura dalla cache **$0.00006** / 1K token Input · Scrittura nella cache **$0.0001666666666666666** / 1K token Input · Scrittura nella cache, 1 ora **—** / 1K token Output · Token immagine in uscita **$0.06** / 1K token immagine |
| ConfigurazioneFascia 1 di lunghezza della richiesta | Listino delle tariffe— | Token di contesto, più di0 | Token di contesto, fino al limite inclusoNessun limite superiore | Costo Input · Token in input **$0.0006** / 1K token Output · Token in output **$0.005** / 1K token Input · Lettura dalla cache **$0.00006** / 1K token Input · Scrittura nella cache **$0.0001666666666666666** / 1K token Input · Scrittura nella cache, 1 ora **—** / 1K token |

Ailoot prenota un importo stimato prima di una richiesta. Dopo il risultato, addebita il costo finale in base all’utilizzo misurato. Per lo streaming, l’addebito usa il record finale di utilizzo. [Come funzionano la prenotazione e l’addebito finale →](https://ailoot.ai/docs/it/billing/reserve/)

### Esempi di richieste

#### Ailoot Ultra · Anthropic Messages

Corpo JSON minimo completocurl · usa il tuo documento UTF-8Python · salva il risultato completo

```json
{
  "model": "google/gemini-2.5-flash-image",
  "max_tokens": 128,
  "messages": [
    {
      "role": "user",
      "content": "Summarize the incident report."
    }
  ],
  "stream": false
}
```

```bash
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_TEXT_FILE:?Set your actual UTF-8 document}"
export AILOOT_TEXT_FILE
python3 - <<'PY_REQUEST'
import json, os
from pathlib import Path

source_file = Path(os.environ['AILOOT_TEXT_FILE'])
if not source_file.is_file():
    raise SystemExit('Set AILOOT_TEXT_FILE to your actual UTF-8 document')
text = source_file.read_text(encoding='utf-8')
if not text.strip():
    raise SystemExit('Choose a document containing text')
payload = {'model': 'google/gemini-2.5-flash-image', 'max_tokens': 128, 'messages': [{'role': 'user', 'content': 'Summarize the incident report.'}]}
payload['messages'][0]['content'] = 'Summarize this material and quote supporting source passages.\n\n' + text
Path('request.json').write_text(json.dumps(payload, ensure_ascii=False), encoding='utf-8')
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/messages \
  -H "x-api-key: $AILOOT_API_KEY" -H 'anthropic-version: 2023-06-01' -H 'Content-Type: application/json' \
  --data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import json
from pathlib import Path

result = json.loads(Path('result.json').read_text(encoding='utf-8'))
print(json.dumps(result, ensure_ascii=False, indent=2))
PY_RESULT
```

```python
import json, os
from pathlib import Path

source_file = Path(os.environ['AILOOT_TEXT_FILE'])
if not source_file.is_file():
    raise SystemExit('Set AILOOT_TEXT_FILE to your actual UTF-8 document')
text = source_file.read_text(encoding='utf-8')
if not text.strip():
    raise SystemExit('Choose a document containing text')
payload = {'model': 'google/gemini-2.5-flash-image', 'max_tokens': 128, 'messages': [{'role': 'user', 'content': 'Summarize the incident report.'}]}
payload['messages'][0]['content'] = 'Summarize this material and quote supporting source passages.\n\n' + text
from urllib.request import Request, urlopen
from urllib.error import HTTPError

api_key = os.environ['AILOOT_API_KEY']
if not api_key.strip():
    raise SystemExit('Set AILOOT_API_KEY before making a request')
headers = {'x-api-key': 'PLACEHOLDER_KEY', 'anthropic-version': '2023-06-01', 'Content-Type': 'application/json'}
headers['x-api-key'] = api_key
request = Request('https://api.ailoot.ai/v1/messages', data=json.dumps(payload, ensure_ascii=False).encode('utf-8'), headers=headers, method='POST')
try:
    with urlopen(request, timeout=120) as response:
        raw = response.read()
        Path('response-headers.txt').write_text(str(response.headers), encoding='utf-8')
except HTTPError as error:
    Path('result.json').write_bytes(error.read())
    Path('response-headers.txt').write_text(str(error.headers), encoding='utf-8')
    raise
Path('result.json').write_bytes(raw)
import json
from pathlib import Path

result = json.loads(Path('result.json').read_text(encoding='utf-8'))
print(json.dumps(result, ensure_ascii=False, indent=2))
```

### Ricevi e salva i risultati

#### Ailoot Ultra · Anthropic Messages

JSON o SSE

##### Conserva tutti i risultati completati

Conserva ogni risposta, file e parte di contenuto restituiti per intero.

Conserva tutti i blocchi di contenuto, le firme di ragionamento e gli ID effettivi di utilizzo degli strumenti. Assembla tutti i delta dei blocchi SSE; il primo blocco di testo non è l’uscita completa.

##### Se occorre verificare la risposta originale

Conserva gli ID e le intestazioni di richiesta/risposta. Non viene fornito alcun URL generico per recuperare un’attività testuale.

Campi della risposta

| Campo | Tipo |
| --- | --- |
| Campo`id` | Tipostring |
| Campo`model` | Tipostring |
| Campo`content[]` | Tipotext\|thinking\|tool\_use\|other content block |
| Campo`stop_reason` | Tipostring\|null |
| Campo`usage` | Tipoobject |

Errori e passaggi successivi

| Risposta | Condizione | Passaggio successivo |
| --- | --- | --- |
| Risposta400 · `invalid_request_error` | CondizioneCampi obbligatori, rappresentazione del materiale o valore del parametro non validi | Passaggio successivoCorreggi i campi indicati prima di una nuova richiesta di creazione. |

### Alias

#### Alias del modello

**Ailoot Ultra** [`google/gemini-2.5-flash-image`](https://ailoot.ai/models/it/#m=google%2Fgemini-2.5-flash-image&route=Ultra&caller=google%2Fgemini-2.5-flash-image&fmt=messages)

#### Alias dei percorsi dei metodi

`/v1/images`

#### ID di chiamata correlati

[`google/gemini-2.5-flash-image`](https://ailoot.ai/models/it/#m=google%2Fgemini-2.5-flash-image&route=Ultra&caller=google%2Fgemini-2.5-flash-image&fmt=messages)

FAQ · Google: Nano Banana (Gemini 2.5 Flash Image)

Quali input e risultati sono disponibili?

`POST /v1/chat/completions` · `google/gemini-2.5-flash-image`: `text` → `text` `POST /v1/images/generations` · `google/gemini-2.5-flash-image`: `text`, `image` → `image` `POST /v1/messages` · `google/gemini-2.5-flash-image`: `text` → `json`, `sse`

Quali campi usa la richiesta?

`POST /v1/chat/completions` · `google/gemini-2.5-flash-image`: `model`, `messages`, `stream`, `modalities`, `provider` `POST /v1/images/generations` · `google/gemini-2.5-flash-image`: `model`, `prompt`, `aspect_ratio`, `n`, `input_references`, `provider` `POST /v1/messages` · `google/gemini-2.5-flash-image`: `model`, `messages`, `max_tokens`, `stream`

Quali limiti si applicano?

`POST /v1/chat/completions` · `google/gemini-2.5-flash-image`: `messages.min_items`: `1` `POST /v1/images/generations` · `google/gemini-2.5-flash-image`: `n.minimum`: `1`; `n.maximum`: `1`

Collega Ailoot a Claude Code, OpenCode, Hermes o alla tua applicazione.

## L’azienda e il suo portafoglio di progetti

L’azienda e il suo portafoglio di progetti: milioni di clienti; vendite nell’ordine dei miliardi ogni mese.

## Acquista token con uno sconto.

Sconto con abbonamento per lavoro regolare. Codici fino al 50% sull’acquisto di token.

Abbonamento

Scegli un piano scontato per richieste regolari.

Codice fino al 50%

Inserisci il codice all’acquisto. Il prezzo si aggiorna secondo la promozione.

Spese nella cronologia

Modello, token e importo sono salvati per ogni richiesta.

[Scegli abbonamento](https://ailoot.ai/docs/it/billing/subscriptions/) · [Consulta prezzi dei modelli](https://ailoot.ai/models/it/)

## Collega l’API al prodotto che vendi.

SaaS, app e bot secondo offerta e accordo di licenza Ailoot. Per rivendere, richiedi una licenza reseller.

Applicazione commerciale

Integra generazione di testo, immagini, video e suono nelle funzioni a pagamento.

Licenza reseller

Invia descrizione del progetto e schema di accesso. Richiedi condizioni scritte per uso e rivendita.

Documenti sul sito

Offerta, accordo di licenza e politica sui dati sono disponibili prima della connessione.

[Richiedi licenza reseller](mailto:support@ailoot.ai) · [Offerta e accordo di licenza](https://ailoot.ai/legal/offer?lang=it)

## Ailoot · L’azienda e il suo portafoglio di progetti





Ailoot si basa su un’esperienza operativa consolidata, un’ampia base di clienti, un servizio stabile e un controllo costante dei KPI.





L’azienda e il suo portafoglio di progetti: milioni di clienti; vendite nell’ordine dei miliardi ogni mese.





Ailoot mette questa esperienza operativa al servizio dell’accesso API alle funzioni AI nei prodotti dei clienti, negli agenti, nelle applicazioni e nelle automazioni.
