Source: https://ailoot.ai/models/fi/gemini-3-1-flash-lite-image/
Canonical: https://ailoot.ai/models/fi/gemini-3-1-flash-lite-image/
Language: fi

# Google: Nano Banana 2 Lite (Gemini 3.1 Flash Lite Image)

[Markdown](https://ailoot.ai/models/fi/gemini-3-1-flash-lite-image/index.md) · [JSON](https://ailoot.ai/models/fi/gemini-3-1-flash-lite-image/facts.json)

## [Google: Nano Banana 2 Lite (Gemini 3.1 Flash Lite Image)](https://ailoot.ai/models/fi/gemini-3-1-flash-lite-image/)

Nano Banana 2 Lite, josta käytetään myös nimeä Gemini 3.1 Flash Lite Image, on Googlen kuvamalli nopeaan visuaalisten vaihtoehtojen tutkimiseen. Sen julkaistun profiilin mukaan syötteenä voi käyttää tekstiä ja kuvia ja tuloksena saa kuvia tai tekstiä. Näin kuvien tuottamiseen tarkoitetuissa tehtävänannoissa voidaan hyödyntää visuaalista viiteaineistoa.

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

Tietoa mallista

Tämä kuvaus kattaa mallin ominaisuudet. Ailootissa saatavilla olevat syötteet, tulosteet ja asetukset luetellaan alla valitulle menetelmälle.

Nano Banana 2 Lite on Googlen Gemini 3.1 Flash Lite Image -malli. Se on tarkoitettu visuaalisten vaihtoehtojen nopeaan kokeiluun ja kuvien tuottamiseen tekstistä. Julkaistun profiilin mukaan malli hyväksyy syötteeksi tekstiä ja kuvia ja voi palauttaa kuvia ja tekstiä, joten kirjallinen tehtävänanto ja visuaalinen lähdeaineisto voivat olla osa samaa luovaa pyyntöä.

#### Selkeä tehtävänanto halutulle kuvalle

Kuvaa kuvan aihe, sommittelu, ilmaisumuoto ja käyttökohde. Tuotekuvituksen tehtävänannossa voi määrittää esineen, kuvakulman, taustan ja ympäröivää taittoa varten tarvittavan tilan. Kohtausta varten voi määrittää ympäristön, keskeisen toiminnan ja tunnelmaa luovat yksityiskohdat. Varmista ensin, että kuvan määrittävät muutamat keskeiset elementtien väliset suhteet ovat selkeitä, ja lisää koristeelliset yksityiskohdat vasta sitten.

Kun kuvassa näkyvien tekstien sanamuoto on tärkeä, anna täsmälliset sanamuodot ja määritä tekstien keskinäinen hierarkia. Kerro, mikä tekstirivi on ensisijainen ja miten se liittyy kuvan pääaiheeseen. Tarkista palautetusta kuvasta oikeinkirjoitus, merkinnät ja välistys siinä koossa, jossa kuvaa käytetään. Visuaalisesta konseptista on hyötyä, kun sen sisältö voidaan tarkistaa tehtävänantoa vasten.

#### Määritä kuvasyötteen tehtävä

Kerro mallille, mitä annettu kuva tuo pyyntöön. Se voi määrittää aiheen tai kuvassa näkyvän asettelun tai tarjota aineistoa, joka uuden kuvan on otettava huomioon. Nimeä olennaiset yksityiskohdat, jotta viitekuvan rooli tehtävänannossa ei jää epäselväksi. Säilytä lähdekuva palautetun tuloksen yhteydessä, kun vertaat pyydettyä muutosta tai visuaalista suuntaa.

#### Vie valittu kuva seuraavaan vaiheeseen

Tarkista varsinaisesta tuotoksesta, että aihe, rajaus, tärkeä teksti ja elementtien väliset suhteet vastaavat tavoitetta. Säilytä toimiva tehtävänanto, viiteaineisto ja valittu tulos yhdessä. Kun teet kuvasarjaa, säilytä toistuva aihe ja visuaaliset termit myös myöhemmissä pyynnöissä. Tarkista syntyneiden kuvien välinen jatkuvuus vertailemalla niitä ennen niiden yhdistämistä valmiiseen taittoon.

Hyödyllinen toimitettava tulos on juuri tämän Lite-profiilin palauttama kuva tai oheisteksti. Vietävän kuvan mitat, tiedostomuoto ja tuetut säätömahdollisuudet määräytyvät käytetyn kuvarajapinnan mukaan; säilytä tuotoksen todelliset ominaisuustiedot sen yhteydessä, kun valmistelet sen sijoittamista käyttökohteeseen tai jatkomuokkausta.

Käytännön tehtävä

### Käytännön tehtävä

Tekninen esimerkki englanniksi

```
Explore a product illustration

Create a clean editorial illustration of a reusable steel lunchbox, lid open at a three-quarter angle, with two compartments visible. Use soft daylight, a warm off-white background and restrained sage accents. Place the lunchbox in the lower-right area with generous empty space at upper left for a website heading. Include no lettering or logos.
```

#### Odotettu tulos

```
An image concept showing the open two-compartment lunchbox, warm background and clear upper-left layout space.
```

#### Tarkista tulos

```
Inspect the actual image for two visible compartments, the requested placement and absence of lettering or logos.
```

**Ailoot · Kuvat** `POST /v1/images/generations` `gemini-3.1-flash-lite-image`

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

Google /`gemini-3.1-flash-lite-image`

### Aloitus

Nano Banana 2 Lite, josta käytetään myös nimeä Gemini 3.1 Flash Lite Image, on Googlen kuvamalli nopeaan visuaalisten vaihtoehtojen tutkimiseen. Sen julkaistun profiilin mukaan syötteenä voi käyttää tekstiä ja kuvia ja tuloksena saa kuvia tai tekstiä. Näin kuvien tuottamiseen tarkoitetuissa tehtävänannoissa voidaan hyödyntää visuaalista viiteaineistoa.

Hyväksytyt syötteet

Teksti

Tulokset

Kuvat

### Saatavilla Ailootissa · syötteet & menetelmät

**Ailoot · Kuvat** `POST /v1/images/generations`

Syötetyypit

`text`

Tulostyypit

`image`

Konteksti

65 536 tokens

Enimmäistuloste

4 096 tokens

Tulosteen muoto

Kuvatiedosto

| Kenttä | Tyyppi | Vaatimus | Arvot & rajat | Oletus |
| --- | --- | --- | --- | --- |
| Kenttä`model` | Tyyppi`string` | VaatimusPakollinen | Arvot & rajat gemini-3.1-flash-lite-image | Oletus— |
| Kenttä`prompt` | Tyyppi`string` | VaatimusPakollinen | Arvot & rajat Vähimmäispituus: 1 | Oletus— |
| Kenttä`n` | Tyyppi`integer` | VaatimusValinnainen | Arvot & rajat Vähimmäismäärä: 1 | Oletus1 |
| Kenttä`response_format` | Tyyppi`string` | VaatimusValinnainen | Arvot & rajat url, b64\_json | Oletus— |
| Kenttä`stream` | Tyyppi`boolean` | VaatimusValinnainen | Arvot & rajat | Oletusfalse |
| Kenttä`size` | Tyyppi`string` | VaatimusValinnainen | Arvot & rajat Riippuu mallista | Oletus— |
| Kenttä`quality` | Tyyppi`string` | VaatimusValinnainen | Arvot & rajat Riippuu mallista | Oletus— |
| Kenttä`background` | Tyyppi`string` | VaatimusValinnainen | Arvot & rajat Riippuu mallista | Oletus— |
| Kenttä`output_format` | Tyyppi`string` | VaatimusValinnainen | Arvot & rajat Riippuu mallista | Oletus— |
| Kenttä`output_compression` | Tyyppi`integer` | VaatimusValinnainen | Arvot & rajat Riippuu mallista | Oletus— |
| Kenttä`moderation` | Tyyppi`string` | VaatimusValinnainen | Arvot & rajat Riippuu mallista | Oletus— |
| Kenttä`input_fidelity` | Tyyppi`string` | VaatimusValinnainen | Arvot & rajat Riippuu mallista | Oletus— |
| Kenttä`style` | Tyyppi`string` | VaatimusValinnainen | Arvot & rajat Riippuu mallista | Oletus— |
| Kenttä`partial_images` | Tyyppi`integer` | VaatimusValinnainen | Arvot & rajat Riippuu mallista | Oletus— |

Syöteaineistojen yhdistelmät

**Tekstistä kuvaksi** · Pakollinen: prompt

Menetelmän parametrit ja elinkaari

| Parametri | Sopimus |
| --- | --- |
| Parametri`material_types` | Sopimustext |
| Parametri`required` | Sopimusmodel, prompt |
| Parametri`optional_controls` | Sopimusnull |
| Parametri`content_type` | Sopimusapplication/json |

Elinkaari: `synchronous_result_then_owned_library`

`GET /v1/media/tasks/{task_id}` · todellisuudessa palautettu task\_id tai mediakirjaston tietue

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

`GET /v1/media/assets`

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

Menetelmien rakenteet ja ID:t ovat täsmällisiä; toimittajan kyvykkyys on erillinen pyynnön hyväksymisestä.

### Hinnoittelu

#### Ailoot-menetelmien hinnat

Syöte

0,00025 $ */ 1K kuvatokenia*

Tuloste

0,0336 $ *1K-kuvaa kohden*

Ailoot varaa arvioidun summan ennen pyyntöä. Tuloksen jälkeen lopullinen veloitus toteutetaan mitatun käytön perusteella. Suoratoiston veloituksessa käytetään lopullista käyttötietuetta. [Varauksen ja lopullisen veloituksen toiminta →](https://ailoot.ai/docs/fi/billing/reserve/)

#### Viitehinnaston tiedot

Mallitason viitehinnastot eivät muuta menetelmän valintaa, hinta-arvioita tai veloituksia. Käytössä olevat veloitukset käyttävät valitun Ailoot-menetelmän hintoja.

Mallin viitehinnastot

#### Hinnat asetusten mukaan

| Asetukset | Hinnasto | Veloitus |
| --- | --- | --- |
| AsetuksetUltra | HinnastoPerushinta | Veloitus Syöte · Syötetokenit **$0.00050000** / 1K tokenia Tuloste · Tulostokenit **$0.0030000** / 1K tokenia Tuloste · kuvatuloste **$0.06000** / 1K tokenia Tuloste · verkkohaku **$0.028** verkkohakua kohden |

### Esimerkkipyynnöt

#### Ailoot · Kuvat

curlPython SDKNode.js SDK

```bash
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
export AILOOT_API_KEY
export AILOOT_API_KEY
: "${AILOOT_PROMPT_FILE:?Set your actual UTF-8 image brief}"
export AILOOT_PROMPT_FILE
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"model": "gemini-3.1-flash-lite-image", "prompt": ""}')
f=Path(os.environ["AILOOT_PROMPT_FILE"])
if not f.is_file():raise SystemExit("Choose your actual UTF-8 brief")
p['prompt']=f.read_text(encoding="utf-8")
if not p['prompt'].strip():raise SystemExit("Brief must contain text")
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
```

```python
from openai import OpenAI
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")

f=Path(os.environ["AILOOT_PROMPT_FILE"])
if not f.is_file():raise SystemExit("Set your actual UTF-8 image brief file")
request={'model': 'gemini-3.1-flash-lite-image', 'prompt': ''}
request["prompt"]=f.read_text(encoding="utf-8")
client=OpenAI(base_url="https://api.ailoot.ai/v1",api_key=os.environ["AILOOT_API_KEY"],max_retries=0)
result=client.images.generate(**request)
Path("sdk-result.txt").write_text(str(result),encoding="utf-8")
save_images([{"b64_json":getattr(item,"b64_json",None),"url":getattr(item,"url",None)} for item in result.data])
```

```js
import OpenAI from "openai";
import { readFileSync, writeFileSync } from "node:fs";
const key=process.env.AILOOT_API_KEY;
if(!key) throw new Error("Set your actual Ailoot API key");
const client=new OpenAI({baseURL:"https://api.ailoot.ai/v1",apiKey:key,maxRetries:0});
const request={"model": "gemini-3.1-flash-lite-image", "prompt": ""};
if(!process.env.AILOOT_PROMPT_FILE)throw new Error("Set your actual UTF-8 image brief file");
request.prompt=readFileSync(process.env.AILOOT_PROMPT_FILE,"utf8");
const result=await client.images.generate(request);
writeFileSync("sdk-result.json",JSON.stringify(result,null,2));
if(!result.data?.length) throw new Error("No completed images");
for(let index=0;index<result.data.length;index++) {
  const item=result.data[index];let encoded=item.b64_json,uri=item.url||"",raw;
  if(!encoded && uri.startsWith("data:image/")) {
    const comma=uri.indexOf(",");if(comma<0 || !uri.slice(0,comma).includes(";base64")) throw new Error("Unsupported image data URI");
    encoded=uri.slice(comma+1);
  }
  if(encoded) {
    if(encoded.length%4!==0 || !/^[A-Za-z0-9+/]*={0,2}$/.test(encoded)) throw new Error("Invalid Base64");
    raw=Buffer.from(encoded,"base64");
  } else if(uri) {
    const u=new URL(uri,"https://api.ailoot.ai");
    if(u.protocol!=="https:" || u.username || u.password) throw new Error("Invalid returned URL");
    const owned=u.origin==="https://api.ailoot.ai" && u.pathname.startsWith("/v1/media/assets/") && u.pathname.endsWith("/content");
    const response=await fetch(u,{headers:owned?{Authorization:"Bearer "+key}:{},redirect:"manual"});
    if(!response.ok) throw new Error("Image content download failed: "+response.status);
    raw=Buffer.from(await response.arrayBuffer());
  } else throw new Error("Image has neither bytes nor URL");
  if(!raw.length) throw new Error("Empty image result");
  const ext=raw.subarray(0,4).equals(Buffer.from([137,80,78,71]))?"png":raw[0]===255&&raw[1]===216?"jpg":raw.toString("ascii",0,4)==="RIFF"&&raw.toString("ascii",8,12)==="WEBP"?"webp":raw.toString("utf8").trimStart().startsWith("<svg")||raw.toString("utf8").trimStart().startsWith("<?xml")?"svg":"bin";
  writeFileSync(`image-${index}.${ext}`,raw);
}
console.log("Every returned image saved; sdk-result.json retains complete metadata");
```

### Vastaanota ja tallenna tulokset

#### Ailoot · Kuvat

Lataa jokainen palautettu kuva tai tallenna sen Base64-sisältö

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

##### Säilytä kaikki valmistuneet tulokset

Tallenna jokainen valmistunut kuva; nouda jokainen palautettu URL tai pura sen Base64-sisältö.

Tallenna jokainen data-alkio. Pura jokainen b64\_json-arvo tai lataa jokaisen palautetun allekirjoitetun URL-osoitteen sisältö. Valitse tiedostopääte todellisen MIME-tyypin tai tavusisällön perusteella.

##### Jos alkuperäinen vastaus on tarkistettava

Jos kuvan generoinnin tai muokkauksen tulos edellyttää tarkistusta, säilytä alkuperäinen operation\_id/X-Client-Request-ID ja palautetut tulostiedot. Hae olemassa olevat omistamasi tulokset mediakirjastosta käyttämällä todellisia task\_id- tai asset\_id-arvoja. Älä lähetä generointi- tai muokkauspyyntöä uudelleen äläkä muodosta tilakyselyn URL-osoitetta operation\_id-arvosta.

Vastauksen kentät

| Kenttä | Tyyppi |
| --- | --- |
| Kenttä`created` | Tyyppiinteger |
| Kenttä`data[].url` | Tyyppistring |
| Kenttä`data[].b64_json` | Tyyppibase64 string |
| Kenttä`usage` | Tyyppiobject |

Virheet ja seuraavat vaiheet

| Vastaus | Ehto | Seuraava vaihe |
| --- | --- | --- |
| Vastaus400 · `invalid_request_error` | EhtoVirheelliset pakolliset kentät, aineiston esitysmuoto tai parametrin arvo | Seuraava vaiheKorjaa ilmoitetut kentät ennen uutta luontipyyntöä. |
| Vastaus`server_error` | EhtoPalautettu vastaus ilmoittaa, että operaatio tai tulos edellyttää tarkistusta | Seuraava vaiheSäilytä alkuperäinen palautettu operaation tai tehtävän ID, pyynnön otsakkeet ja vastaus; jatka kyseisen alkuperäisen operaation tuettuja lukutoimintoja. Älä lähetä luontipyyntöä uudelleen. |

### Aliakset

#### Mallin aliakset

<strong>Ailoot</strong> [`gemini-3.1-flash-lite-image`](https://ailoot.ai/models/fi/#m=google%2Fgemini-3.1-flash-lite-image&route=Core&caller=gemini-3.1-flash-lite-image&fmt=images)
**Ailoot Ultra** [`google/gemini-3.1-flash-lite-image`](https://ailoot.ai/models/fi/#m=google%2Fgemini-3.1-flash-lite-image&route=Ultra&caller=google%2Fgemini-3.1-flash-lite-image&fmt=images)

#### Menetelmäpolkujen aliakset

`/v1/images`

#### Liittyvät kutsujan ID:t

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

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

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

Google /`google/gemini-3.1-flash-lite-image`

### Aloitus

Nano Banana 2 Lite, josta käytetään myös nimeä Gemini 3.1 Flash Lite Image, on Googlen kuvamalli nopeaan visuaalisten vaihtoehtojen tutkimiseen. Sen julkaistun profiilin mukaan syötteenä voi käyttää tekstiä ja kuvia ja tuloksena saa kuvia tai tekstiä. Näin kuvien tuottamiseen tarkoitetuissa tehtävänannoissa voidaan hyödyntää visuaalista viiteaineistoa.

Hyväksytyt syötteet

Teksti

Tulokset

Teksti

### Saatavilla Ailootissa · syötteet & menetelmät

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

Syötetyypit

`text`

Tulostyypit

`text`

Tulosteen muoto

json tai SSE

| Kenttä | Tyyppi | Vaatimus | Arvot & rajat | Oletus |
| --- | --- | --- | --- | --- |
| Kenttä`model` | Tyyppi`string` | VaatimusPakollinen | Arvot & rajat google/gemini-3.1-flash-lite-image | Oletus— |
| Kenttä`messages` | Tyyppi`message[]` | VaatimusPakollinen | Arvot & rajat Kohteiden vähimmäismäärä: 1 | Oletus— |
| Kenttä`messages[].role` | Tyyppi`string` | VaatimusPakollinen | Arvot & rajat Esimerkit: system, user, assistant, tool, function Ehdot: Nämä roolit esitetään nimenomaisesti lähdekoodin yhteensopivuustyypeissä; mallin täsmällinen roolijoukko pysyy mallikohtaisena. Riippuu mallista | Oletus— |
| Kenttä`messages[].content` | Tyyppi`string\|content_part[]\|null` | VaatimusValinnainen | Arvot & rajat | Oletus— |
| Kenttä`messages[].tool_calls` | Tyyppi`tool_call[]` | VaatimusValinnainen | Arvot & rajat | Oletus— |
| Kenttä`messages[].tool_call_id` | Tyyppi`string` | VaatimusValinnainen | Arvot & rajat Sovelletaan, kun: role=tool; käytä todella palautettua ID:tä | Oletus— |
| Kenttä`messages[].name` | Tyyppi`string` | VaatimusValinnainen | Arvot & rajat | Oletus— |
| Kenttä`messages[].reasoning_content` | Tyyppi`string` | VaatimusValinnainen | Arvot & rajat Sovelletaan, kun: Palauta todella saatu päättely takaisin mallille, kun kyseinen malli käyttää sitä | Oletus— |
| Kenttä`messages[].reasoning_details` | Tyyppi`object\|array` | VaatimusValinnainen | Arvot & rajat Riippuu mallista | Oletus— |
| Kenttä`max_tokens` | Tyyppi`integer` | VaatimusValinnainen | Arvot & rajat Vähimmäismäärä: 1 Riippuu mallista | Oletus— |
| Kenttä`max_completion_tokens` | Tyyppi`integer` | VaatimusValinnainen | Arvot & rajat Vähimmäismäärä: 1 Riippuu mallista | Oletus— |
| Kenttä`stream` | Tyyppi`boolean` | VaatimusValinnainen | Arvot & rajat | Oletusfalse |
| Kenttä`stream_options.include_usage` | Tyyppi`boolean` | VaatimusValinnainen | Arvot & rajat Riippuu mallista | Oletus— |
| Kenttä`temperature` | Tyyppi`number` | VaatimusValinnainen | Arvot & rajat Riippuu mallista | Oletus— |
| Kenttä`top_p` | Tyyppi`number` | VaatimusValinnainen | Arvot & rajat Riippuu mallista | Oletus— |
| Kenttä`stop` | Tyyppi`string\|string[]` | VaatimusValinnainen | Arvot & rajat Riippuu mallista | Oletus— |
| Kenttä`tools` | Tyyppi`function_tool[]` | VaatimusValinnainen | Arvot & rajat Riippuu mallista | Oletus— |
| Kenttä`tools[].type` | Tyyppi`string` | VaatimusValinnainen | Arvot & rajat function Riippuu mallista | Oletus— |
| Kenttä`tools[].function.name` | Tyyppi`string` | VaatimusPakollinen | Arvot & rajat Sovelletaan, kun: funktiotyökalu annettu | Oletus— |
| Kenttä`tools[].function.description` | Tyyppi`string` | VaatimusValinnainen | Arvot & rajat | Oletus— |
| Kenttä`tools[].function.parameters` | Tyyppi`JSON_schema` | VaatimusValinnainen | Arvot & rajat | Oletus— |
| Kenttä`tool_choice` | Tyyppi`string\|object` | VaatimusValinnainen | Arvot & rajat Riippuu mallista | Oletus— |
| Kenttä`parallel_tool_calls` | Tyyppi`boolean` | VaatimusValinnainen | Arvot & rajat Riippuu mallista | Oletus— |
| Kenttä`response_format` | Tyyppi`object` | VaatimusValinnainen | Arvot & rajat Riippuu mallista | Oletus— |
| Kenttä`reasoning_effort` | Tyyppi`string` | VaatimusValinnainen | Arvot & rajat Riippuu mallista | Oletus— |
| Kenttä`reasoning` | Tyyppi`object` | VaatimusValinnainen | Arvot & rajat Riippuu mallista | Oletus— |
| Kenttä`service_tier` | Tyyppi`string` | VaatimusValinnainen | Arvot & rajat Riippuu mallista | Oletus— |
| Kenttä`instructions` | Tyyppi`string` | VaatimusValinnainen | Arvot & rajat Yhteensopivuuskenttä | Oletus— |
| Kenttä`functions` | Tyyppi`function[]` | VaatimusValinnainen | Arvot & rajat Riippuu mallista | Oletus— |
| Kenttä`function_call` | Tyyppi`string\|object` | VaatimusValinnainen | Arvot & rajat Riippuu mallista | Oletus— |
| Kenttä`prompt_cache_options` | Tyyppi`object` | VaatimusValinnainen | Arvot & rajat Riippuu mallista | Oletus— |
| Kenttä`modalities` | Tyyppi`string[]` | VaatimusValinnainen | Arvot & rajat text | Oletus— |
| Kenttä`provider` | Tyyppi`object` | VaatimusValinnainen | Arvot & rajat Ehdot: provider.options hylätään tällä Ultran tekstireitillä | Oletus— |
| Kenttä`cache_control.ttl` | Tyyppi`string` | VaatimusValinnainen | Arvot & rajat Ehdot: 1h hylätään varsinaisissa kehotevälimuistin kohdissa | Oletus— |

Syöteaineistojen yhdistelmät

**Teksti** · UTF8-teksti

`messages[].content`

Menetelmän parametrit ja elinkaari

| Parametri | Sopimus |
| --- | --- |
| Parametri`content_type` | Sopimusapplication/json |
| Parametri`required` | Sopimusmodel, messages |
| Parametri`material_types` | Sopimustext |
| Parametri`messages` | Sopimusviestitaulukko role/content-rakenteella |
| Parametri`file_material` | Sopimusvarsinainen UTF-8-asiakirja lisätään sellaisenaan tekstinä; tiedoston ID:tä ei päätellä |
| Parametri`optional_controls` | Sopimusstream, temperature, top\_p, stop, max\_tokens, max\_completion\_tokens, reasoning, response\_format, tools, tool\_choice |
| Parametri`control_scope` | Sopimusmallikohtainen; käyttäjän funktiotyökalut eroavat palvelun isännöimistä työkaluista |
| Parametri`output_modalities` | Sopimustext |
| Parametri`hosted_operations` | Sopimusfalse |
| Parametri`multimodal_input_binding` | Sopimusnull |

Elinkaari: `synchronous_or_streamed`

Lähetä mallin täsmällinen ID yhdessä messages-kentän kanssa.

Kontekstin pituus ei ole tuloksen yläraja.

Tekstitiedosto voi antaa tekstiä sellaisenaan; kuva-, ääni- ja tiedosto-objektisyötteet tarvitsevat täsmällisen sidonnan.

### Hinnoittelu

Hintatiedot eivät lisää pyyntövalintoja. Tuetut parametrit on lueteltu valitulle menetelmälle.

Nopea tila

Vakiohinta Kun nopea tila on valittu

Flex-tila

Vakiohinta Kun flex-tila on valittu

Päättelyn enimmäisteho

Vakiohinta Kun päättelyn enimmäistehoon sovelletaan default-oletussäätöä

Päättelyn teho · suuri

Vakiohinta Kun päättelyn teho on suuri

Päättelyn teho · vähimmäistaso

Vakiohinta Kun päättelyn teho on vähimmäistasolla

Eksplisiittisen välimuistin hinnoittelu

Ei käytössä Kun eksplisiittistä välimuistia pyydetään

#### Ailoot-hinnat

#### Hinnat asetusten mukaan

Kohdista kukin veloitus näytettyihin ehtoihin. Käytä yhtä hintaa kutakin vaihtoehtoisten asetusten ryhmää kohden.

| Asetukset | Hinnasto | Kontekstin tokenit, enemmän kuin | Kontekstin tokenit, enintään raja-arvo mukaan lukien | Veloitus |
| --- | --- | --- | --- | --- |
| AsetuksetTokenien perushinnat | HinnastoPerushinta | Kontekstin tokenit, enemmän kuin— | Kontekstin tokenit, enintään raja-arvo mukaan lukienEi ylärajaa | Veloitus Syöte · Syötetokenit **$0.0005** / 1K tokenia Tuloste · Tulostokenit **$0.003** / 1K tokenia Syöte · Välimuistin luku **—** / 1K tokenia Syöte · Välimuistiin kirjoitus **—** / 1K tokenia Syöte · Välimuistiin kirjoitus, 1 tunti **—** / 1K tokenia Tuloste · Kuvatulosteen tokenit **$0.06** / 1K kuvatokenia |
| AsetuksetPyynnön pituusluokka 1 | Hinnasto— | Kontekstin tokenit, enemmän kuin0 | Kontekstin tokenit, enintään raja-arvo mukaan lukienEi ylärajaa | Veloitus Syöte · Syötetokenit **$0.0005** / 1K tokenia Tuloste · Tulostokenit **$0.003** / 1K tokenia Syöte · Välimuistin luku **—** / 1K tokenia Syöte · Välimuistiin kirjoitus **—** / 1K tokenia Syöte · Välimuistiin kirjoitus, 1 tunti **—** / 1K tokenia |

#### Viitehinnaston tiedot

Mallitason viitehinnastot eivät muuta menetelmän valintaa, hinta-arvioita tai veloituksia. Käytössä olevat veloitukset käyttävät valitun Ailoot-menetelmän hintoja.

Google: Nano Banana 2 Lite (Gemini 3.1 Flash Lite Image)

#### Hinnat asetusten mukaan

| Asetukset | Laskutusehdot | Veloitus |
| --- | --- | --- |
| AsetuksetGoogle: Nano Banana 2 Lite (Gemini 3.1 Flash Lite Image) · Oletusasetukset | LaskutusehdotOletuskokoonpano | Veloitus Syöte · Syötetokenit **0,0005 $** / 1K tokenia Tuloste · Tulostokenit **0,003 $** / 1K tokenia Tuloste · Kuvatuloste **0,06 $** / 1K tokenia Tuloste · Verkkohaku **0,028 $** hakua kohden |

Ailoot varaa arvioidun summan ennen pyyntöä. Tuloksen jälkeen lopullinen veloitus toteutetaan mitatun käytön perusteella. Suoratoiston veloituksessa käytetään lopullista käyttötietuetta. [Varauksen ja lopullisen veloituksen toiminta →](https://ailoot.ai/docs/fi/billing/reserve/)

### Esimerkkipyynnöt

#### Ailoot Ultra · OpenAI Chat

curlPython SDKPython-suoratoisto

```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-3.1-flash-lite-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-3.1-flash-lite-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-3.1-flash-lite-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")
```

### Vastaanota ja tallenna tulokset

#### Ailoot Ultra · OpenAI Chat

json tai SSE

##### Säilytä kaikki valmistuneet tulokset

Säilytä jokainen kokonainen palautettu vastaus, tiedosto ja sisällön osa.

Säilytä jokainen vastausvaihtoehto sisältöineen, työkalukutsuineen ja päättelyineen. Kokoa SSE:ssä muutokset vastausvaihtoehdon ja työkalun indeksin mukaan ja säilytä lopullinen päättymissyy sekä käyttötiedot.

##### Jos alkuperäinen vastaus on tarkistettava

Säilytä pyyntöjen/vastausten ID:t ja otsakkeet. Yleistä tekstityön haku-URL:ää ei anneta.

Vastauksen kentät

| Kenttä | Tyyppi |
| --- | --- |
| Kenttä`choices[].index` | Tyyppiinteger |
| Kenttä`choices[].message.content` | Tyyppistring\|null |
| Kenttä`choices[].message.tool_calls` | Tyyppitool\_call\[\] |
| Kenttä`choices[].message.reasoning_content` | Tyyppistring |
| Kenttä`choices[].message.reasoning_details` | Tyyppiobject\|array |
| Kenttä`choices[].finish_reason` | Tyyppistring\|null |
| Kenttä`usage` | Tyyppiobject |

Virheet ja seuraavat vaiheet

| Vastaus | Ehto | Seuraava vaihe |
| --- | --- | --- |
| Vastaus400 · `invalid_request_error` | EhtoVirheelliset pakolliset kentät, aineiston esitysmuoto tai parametrin arvo | Seuraava vaiheKorjaa ilmoitetut kentät ennen uutta luontipyyntöä. |

### Aliakset

#### Mallin aliakset

<strong>Ailoot</strong> [`gemini-3.1-flash-lite-image`](https://ailoot.ai/models/fi/#m=google%2Fgemini-3.1-flash-lite-image&route=Core&caller=gemini-3.1-flash-lite-image)
**Ailoot Ultra** [`google/gemini-3.1-flash-lite-image`](https://ailoot.ai/models/fi/#m=google%2Fgemini-3.1-flash-lite-image&route=Ultra&caller=google%2Fgemini-3.1-flash-lite-image&fmt=chat)

#### Menetelmäpolkujen aliakset

`/v1/images`

#### Liittyvät kutsujan ID:t

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

**Ailoot Ultra · Kuvat** `POST /v1/images/generations` `google/gemini-3.1-flash-lite-image`

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

Google /`google/gemini-3.1-flash-lite-image`

### Aloitus

Nano Banana 2 Lite, josta käytetään myös nimeä Gemini 3.1 Flash Lite Image, on Googlen kuvamalli nopeaan visuaalisten vaihtoehtojen tutkimiseen. Sen julkaistun profiilin mukaan syötteenä voi käyttää tekstiä ja kuvia ja tuloksena saa kuvia tai tekstiä. Näin kuvien tuottamiseen tarkoitetuissa tehtävänannoissa voidaan hyödyntää visuaalista viiteaineistoa.

Hyväksytyt syötteet

Teksti · Kuvat

Tulokset

Kuvat

### Saatavilla Ailootissa · syötteet & menetelmät

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

Syötetyypit

`text`, `image`

Tulostyypit

`image`

| Kenttä | Tyyppi | Vaatimus | Arvot & rajat | Oletus |
| --- | --- | --- | --- | --- |
| Kenttä`model` | Tyyppi`string` | VaatimusPakollinen | Arvot & rajat google/gemini-3.1-flash-lite-image | Oletus— |
| Kenttä`prompt` | Tyyppi`string` | VaatimusPakollinen | Arvot & rajat Vähimmäispituus: 1 | Oletus— |
| Kenttä`resolution` | Tyyppi`string` | VaatimusValinnainen | Arvot & rajat 1K | Oletus— |
| Kenttä`aspect_ratio` | Tyyppi`string` | VaatimusValinnainen | Arvot & rajat 1:1, 1:4, 1:8, 2:3, 3:2, 3:4, 4:1, 4:3, 4:5, 5:4, 8:1, 9:16, 16:9, 21:9 | Oletus— |
| Kenttä`n` | Tyyppi`integer` | VaatimusValinnainen | Arvot & rajat Vähimmäismäärä: 1 Enimmäismäärä: 1 | Oletus— |
| Kenttä`input_references` | Tyyppi`array` | VaatimusValinnainen | Arvot & rajat Kohteiden vähimmäismäärä: 0 Kohteiden enimmäismäärä: 14 | Oletus— |
| Kenttä`provider` | Tyyppi`object` | VaatimusValinnainen | Arvot & rajat | Oletus— |

Menetelmän parametrit ja elinkaari

| Parametri | Sopimus |
| --- | --- |
| Parametri`content_type` | Sopimusapplication/json |
| Parametri`required` | Sopimusmodel, prompt |
| Parametri`material_types` | Sopimustext, image |

Elinkaari: `synchronous_result_then_owned_library`

`GET /v1/media/tasks/{task_id}` · todellisuudessa palautettu task\_id tai mediakirjaston tietue

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

`GET /v1/media/assets`

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

### Hinnoittelu

##### Lopullisen veloituksen laskenta

Näytettyjen hintojen avulla arvioidaan kustannukset ennen generointia. Lopullinen veloitus lasketaan alkuperäiselle generoinnille kirjatun kustannuksen perusteella. Lopullisena laskutettavana määränä ei käytetä tulosteen mitattua kestoa eikä ennustettuja määriä.

Hintatiedot eivät lisää pyyntövalintoja. Tuetut parametrit on lueteltu valitulle menetelmälle.

Nopea tila

Ei määritetty Kun nopea tila on valittu

Flex-tila

Ei määritetty Kun flex-tila on valittu

Päättelyn enimmäisteho

Ei määritetty Kun päättelyn enimmäistehoon sovelletaan default-oletussäätöä

#### Arvioidut vertailuhinnat

#### Hinnat asetusten mukaan

Kohdista kukin veloitus näytettyihin ehtoihin. Käytä yhtä hintaa kutakin vaihtoehtoisten asetusten ryhmää kohden.

| Asetukset | Hinnasto | Ennustettu määrä | Veloitus |
| --- | --- | --- | --- |
| AsetuksetTokenien perushinnat | HinnastoPerushinta | Ennustettu määrä— | Veloitus Syöte · Syötetokenit · Arvio vain vertailua varten **—** / 1K tokenia Tuloste · Tulostokenit · Arvio vain vertailua varten **—** / 1K tokenia Syöte · Välimuistin luku · Arvio vain vertailua varten **—** / 1K tokenia Syöte · Välimuistiin kirjoitus · Arvio vain vertailua varten **—** / 1K tokenia Syöte · Välimuistiin kirjoitus, 1 tunti · Arvio vain vertailua varten **—** / 1K tokenia |
| AsetuksetArvioitu luontikustannus | Hinnasto— | Ennustettu määräyhden generoinnin arvio | Veloitus Tuloste · Arvioidut generointikustannukset · Arvio vain vertailua varten **$0.24576** arvio ennen generointia Tämä arvio ei ole lisämaksu eikä valmistuneen generoinnin kiinteä hinta. |

Ailoot varaa arvioidun summan ennen pyyntöä. Tuloksen jälkeen lopullinen veloitus toteutetaan mitatun käytön perusteella. Suoratoiston veloituksessa käytetään lopullista käyttötietuetta. [Varauksen ja lopullisen veloituksen toiminta →](https://ailoot.ai/docs/fi/billing/reserve/)

### Esimerkkipyynnöt

#### Ailoot Ultra · Kuvat

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-3.1-flash-lite-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
```

### Vastaanota ja tallenna tulokset

#### Ailoot Ultra · Kuvat

Lataa jokainen palautettu kuva tai tallenna sen Base64-sisältö

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

Muut sisällön lukukerrat

Lue olemassa olevat omistamasi aineistot

```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.
```

##### Säilytä kaikki valmistuneet tulokset

Tallenna jokainen valmistunut kuva; nouda jokainen palautettu URL tai pura sen Base64-sisältö.

Säilytä koko vastaus ja otsakkeet, jokainen todellinen tuloste, alkuperäiset palautetut tunnisteet ja kaikki käyttötietokentät. Selvitä alkuperäisen operaation tila lähettämättä luontipyyntöä uudelleen.

##### Jos alkuperäinen vastaus on tarkistettava

Säilytä palautettu X-Client-Request-ID täsmäytystä varten. Tee lukukyselyt vain todellisuudessa palautetuilla task\_id/asset\_id-arvoilla tai käytä omistamaasi mediakirjastoa; älä koskaan rakenna tehtävän URL-osoitetta operaation ID:n perusteella äläkä lähetä luontipyyntöä uudelleen.

Vastauksen kentät

| Kenttä | Tyyppi |
| --- | --- |
| Kenttä`created` | Tyyppi |
| Kenttä`data[].url` | Tyyppi |
| Kenttä`data[].b64_json` | Tyyppi |
| Kenttä`usage` | Tyyppi |

### Aliakset

#### Mallin aliakset

<strong>Ailoot</strong> [`gemini-3.1-flash-lite-image`](https://ailoot.ai/models/fi/#m=google%2Fgemini-3.1-flash-lite-image&route=Core&caller=gemini-3.1-flash-lite-image&fmt=images)
**Ailoot Ultra** [`google/gemini-3.1-flash-lite-image`](https://ailoot.ai/models/fi/#m=google%2Fgemini-3.1-flash-lite-image&route=Ultra&caller=google%2Fgemini-3.1-flash-lite-image&fmt=images)

#### Menetelmäpolkujen aliakset

`/v1/images`

#### Liittyvät kutsujan ID:t

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

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

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

Google /`google/gemini-3.1-flash-lite-image`

### Aloitus

Nano Banana 2 Lite, josta käytetään myös nimeä Gemini 3.1 Flash Lite Image, on Googlen kuvamalli nopeaan visuaalisten vaihtoehtojen tutkimiseen. Sen julkaistun profiilin mukaan syötteenä voi käyttää tekstiä ja kuvia ja tuloksena saa kuvia tai tekstiä. Näin kuvien tuottamiseen tarkoitetuissa tehtävänannoissa voidaan hyödyntää visuaalista viiteaineistoa.

Hyväksytyt syötteet

Teksti

Tulokset

json · sse

### Saatavilla Ailootissa · syötteet & menetelmät

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

Syötetyypit

`text`

Tulostyypit

`json`, `sse`

Tulosteen muoto

JSON tai SSE

| Kenttä | Tyyppi | Vaatimus | Arvot & rajat | Oletus |
| --- | --- | --- | --- | --- |
| Kenttä`model` | Tyyppi`string` | VaatimusPakollinen | Arvot & rajat google/gemini-3.1-flash-lite-image | Oletus— |
| Kenttä`messages` | Tyyppi`message[]` | VaatimusPakollinen | Arvot & rajat | Oletus— |
| Kenttä`messages[].role` | Tyyppi`string` | VaatimusPakollinen | Arvot & rajat user, assistant | Oletus— |
| Kenttä`messages[].content` | Tyyppi`string` | VaatimusPakollinen | Arvot & rajat | Oletus— |
| Kenttä`max_tokens` | Tyyppi`integer` | VaatimusPakollinen | Arvot & rajat | Oletus— |
| Kenttä`stream` | Tyyppi`boolean` | VaatimusValinnainen | Arvot & rajat | Oletusfalse |

Syöteaineistojen yhdistelmät

**Teksti** · UTF-8-teksti

`messages[].content-merkkijono`

Menetelmän parametrit ja elinkaari

| Parametri | Sopimus |
| --- | --- |
| Parametri`content_type` | Sopimusapplication/json |
| Parametri`required` | Sopimusmodel, messages, max\_tokens |
| Parametri`optional_controls` | Sopimusstream |
| Parametri`material_types` | Sopimustext |
| Parametri`text_file_material` | SopimusLue varsinainen UTF-8-asiakirja ja sijoita sen teksti ilmoitettuun syöte- tai viestisisällön merkkijonoon. |

Elinkaari: `synchronous_or_streamed`

### Hinnoittelu

Hintatiedot eivät lisää pyyntövalintoja. Tuetut parametrit on lueteltu valitulle menetelmälle.

Nopea tila

Vakiohinta Kun nopea tila on valittu

Flex-tila

Vakiohinta Kun flex-tila on valittu

Päättelyn enimmäisteho

Vakiohinta Kun päättelyn enimmäistehoon sovelletaan default-oletussäätöä

Päättelyn teho · suuri

Vakiohinta Kun päättelyn teho on suuri

Päättelyn teho · vähimmäistaso

Vakiohinta Kun päättelyn teho on vähimmäistasolla

Eksplisiittisen välimuistin hinnoittelu

Ei käytössä Kun eksplisiittistä välimuistia pyydetään

#### Ailoot-hinnat

#### Hinnat asetusten mukaan

Kohdista kukin veloitus näytettyihin ehtoihin. Käytä yhtä hintaa kutakin vaihtoehtoisten asetusten ryhmää kohden.

| Asetukset | Hinnasto | Kontekstin tokenit, enemmän kuin | Kontekstin tokenit, enintään raja-arvo mukaan lukien | Veloitus |
| --- | --- | --- | --- | --- |
| AsetuksetTokenien perushinnat | HinnastoPerushinta | Kontekstin tokenit, enemmän kuin— | Kontekstin tokenit, enintään raja-arvo mukaan lukienEi ylärajaa | Veloitus Syöte · Syötetokenit **$0.0005** / 1K tokenia Tuloste · Tulostokenit **$0.003** / 1K tokenia Syöte · Välimuistin luku **—** / 1K tokenia Syöte · Välimuistiin kirjoitus **—** / 1K tokenia Syöte · Välimuistiin kirjoitus, 1 tunti **—** / 1K tokenia Tuloste · Kuvatulosteen tokenit **$0.06** / 1K kuvatokenia |
| AsetuksetPyynnön pituusluokka 1 | Hinnasto— | Kontekstin tokenit, enemmän kuin0 | Kontekstin tokenit, enintään raja-arvo mukaan lukienEi ylärajaa | Veloitus Syöte · Syötetokenit **$0.0005** / 1K tokenia Tuloste · Tulostokenit **$0.003** / 1K tokenia Syöte · Välimuistin luku **—** / 1K tokenia Syöte · Välimuistiin kirjoitus **—** / 1K tokenia Syöte · Välimuistiin kirjoitus, 1 tunti **—** / 1K tokenia |

Ailoot varaa arvioidun summan ennen pyyntöä. Tuloksen jälkeen lopullinen veloitus toteutetaan mitatun käytön perusteella. Suoratoiston veloituksessa käytetään lopullista käyttötietuetta. [Varauksen ja lopullisen veloituksen toiminta →](https://ailoot.ai/docs/fi/billing/reserve/)

### Esimerkkipyynnöt

#### Ailoot Ultra · Anthropic Messages

Täydellinen minimaalinen JSON-runkocurl · käytä omaa UTF-8-dokumenttiasiPython · tallenna koko tulos

```json
{
  "model": "google/gemini-3.1-flash-lite-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-3.1-flash-lite-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-3.1-flash-lite-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))
```

### Vastaanota ja tallenna tulokset

#### Ailoot Ultra · Anthropic Messages

JSON tai SSE

##### Säilytä kaikki valmistuneet tulokset

Säilytä jokainen kokonainen palautettu vastaus, tiedosto ja sisällön osa.

Säilytä kaikki sisältölohkot, päättelyallekirjoitukset ja todelliset työkalukäytön ID:t. Kokoa kaikki SSE-lohkomuutokset; ensimmäinen tekstilohko ei ole koko tulos.

##### Jos alkuperäinen vastaus on tarkistettava

Säilytä pyyntöjen/vastausten ID:t ja otsakkeet. Yleistä tekstityön haku-URL:ää ei anneta.

Vastauksen kentät

| Kenttä | Tyyppi |
| --- | --- |
| Kenttä`id` | Tyyppistring |
| Kenttä`model` | Tyyppistring |
| Kenttä`content[]` | Tyyppitext\|thinking\|tool\_use\|other content block |
| Kenttä`stop_reason` | Tyyppistring\|null |
| Kenttä`usage` | Tyyppiobject |

Virheet ja seuraavat vaiheet

| Vastaus | Ehto | Seuraava vaihe |
| --- | --- | --- |
| Vastaus400 · `invalid_request_error` | EhtoVirheelliset pakolliset kentät, aineiston esitysmuoto tai parametrin arvo | Seuraava vaiheKorjaa ilmoitetut kentät ennen uutta luontipyyntöä. |

### Aliakset

#### Mallin aliakset

<strong>Ailoot</strong> [`gemini-3.1-flash-lite-image`](https://ailoot.ai/models/fi/#m=google%2Fgemini-3.1-flash-lite-image&route=Core&caller=gemini-3.1-flash-lite-image)
**Ailoot Ultra** [`google/gemini-3.1-flash-lite-image`](https://ailoot.ai/models/fi/#m=google%2Fgemini-3.1-flash-lite-image&route=Ultra&caller=google%2Fgemini-3.1-flash-lite-image&fmt=messages)

#### Menetelmäpolkujen aliakset

`/v1/images`

#### Liittyvät kutsujan ID:t

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

FAQ · Google: Nano Banana 2 Lite (Gemini 3.1 Flash Lite Image)

Mitä syötteitä ja tuloksia on saatavilla?

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

Mitä kenttiä pyyntö käyttää?

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

Mitä rajoja sovelletaan?

`POST /v1/images/generations` · `gemini-3.1-flash-lite-image`: `ctx`: `65536`; `max_out`: `4096`; `n.minimum`: `1` `POST /v1/chat/completions` · `google/gemini-3.1-flash-lite-image`: `messages.min_items`: `1` `POST /v1/images/generations` · `google/gemini-3.1-flash-lite-image`: `n.minimum`: `1`; `n.maximum`: `1`

Yhdistä Ailoot Claude Codeen, OpenCodeen, Hermesiin tai omaan sovellukseesi.

## Yritys ja sen projektisalkku

Yritys ja sen projektisalkku: miljoonia asiakkaita; kuukausittainen myynti miljardiluokassa.

## Osta tokenit alennuksella.

Tilausalennus säännölliseen käyttöön. Kampanjakoodit — jopa 50% tokeniostoista.

Tilaus

Valitse alennushintainen paketti säännöllisiä pyyntöjäsi varten.

Kampanjakoodi jopa 50%

Syötä koodi oston yhteydessä. Hinta lasketaan uudelleen voimassa olevan kampanjan mukaan.

Kulut historiassa

Malli, tokenit ja summa tallennetaan jokaiselle pyynnölle.

[Valitse tilaus](https://ailoot.ai/docs/fi/billing/subscriptions/) · [Katso mallihinnat](https://ailoot.ai/models/fi/)

## Yhdistä API tuotteeseen, jonka myyt.

SaaS, sovellukset ja botit Ailootin palveluehtojen ja lisenssisopimuksen mukaisesti. Pyydä edelleenmyyntiin jälleenmyyjälisenssi.

Kaupallinen sovellus

Lisää tekstin, kuvien, videoiden ja äänen luonti palvelusi maksullisiin ominaisuuksiin.

Jälleenmyyjälisenssi

Lähetä projektikuvaus ja pääsyn toteutustapa. Pyydä kirjalliset käyttö- ja jälleenmyyntiehdot.

Asiakirjat verkkosivustolla

Palveluehdot, lisenssisopimus ja tietojenkäsittelykäytäntö ovat saatavilla ennen yhdistämistä.

[Pyydä jälleenmyyjälisenssi](mailto:support@ailoot.ai) · [Palveluehdot ja lisenssisopimus](https://ailoot.ai/legal/offer?lang=fi)

## Ailoot · Yritys ja sen projektisalkku





Ailoot perustuu kertyneeseen toimintakokemukseen, laajaan asiakaskuntaan, vakaaseen palveluun ja jatkuvaan KPI-seurantaan.





Yritys ja sen projektisalkku: miljoonia asiakkaita; kuukausittainen myynti miljardiluokassa.





Ailoot hyödyntää tätä toimintakokemusta tarjotessaan API-yhteyden tekoälytoimintoihin asiakkaiden tuotteissa, agenteissa, sovelluksissa ja automaatioissa.
