Source: https://ailoot.ai/models/nl/gemini-3-8-flash-tiered/
Canonical: https://ailoot.ai/models/nl/gemini-3-8-flash-tiered/
Language: nl

# Gemini 3.8 Flash Tiered

[Markdown](https://ailoot.ai/models/nl/gemini-3-8-flash-tiered/index.md) · [JSON](https://ailoot.ai/models/nl/gemini-3-8-flash-tiered/facts.json)

## [Gemini 3.8 Flash Tiered](https://ailoot.ai/models/nl/gemini-3-8-flash-tiered/)

Een multimodaal model van Google voor langdurige software-engineering, autonome agents en complexe kennistaken.

- [**Ailoot · Anthropic Messages** `POST /v1/messages` `gemini-3.8-flash-tiered`](https://ailoot.ai/models/nl/gemini-3-8-flash-tiered/#method-0)
- [**Ailoot · Gemini generateContent** `POST /v1beta/models/{model}:generateContent` `gemini-3.8-flash-tiered`](https://ailoot.ai/models/nl/gemini-3-8-flash-tiered/#method-1)

Over het model

Deze beschrijving gaat over de mogelijkheden van het model. De via Ailoot beschikbare invoer, uitvoer en opties staan hieronder voor de geselecteerde methode.

Gemini 3.8 Flash is bedoeld voor lange software-engineeringtaken, agentprocessen en complexe kennistaken. Google beschrijft het als een ontwikkeling van Gemini 3.7 Flash, met de nadruk op processen waarin de oplossing niet bij één antwoord eindigt: het model keert terug naar het materiaal, gebruikt tools en zet de reeks stappen voort.

#### Materiaal dat kan worden geanalyseerd

Google noemt **tekst, afbeeldingen, video, audio en PDF** als invoer. In de huidige Ailoot API-catalogus vermelden de tekstmethoden **tekst en afbeeldingen** als invoer en tekst als uitvoer. Video, audio en PDF maken geen deel uit van deze invoer. De invoergrens is **1 048 576 tokens** en de uitvoergrens **65 536 tokens**. Het model maakt een tekstueel resultaat, waaronder programmacode en gestructureerde gegevens. Het maken van afbeeldingen en audio behoort niet tot de mogelijkheden van deze specifieke versie.

#### Redeneren en tools

De Thinking-niveaus **`low`, `medium` en `high`** worden ondersteund. In de door Google beschreven basismodelmodus is `medium` het standaardniveau. Deze waarden beschrijven het basismodel van Google; de modus en de beschikbaarheid van besturing via Ailoot API hangen af van de gekozen methode en modelvariant. `minimal` wordt niet ondersteund en veroorzaakt een fout. Instelbare inspanning helpt een modus te kiezen die past bij de complexiteit van een fase, maar bij hoge inspanning gebruikt het model soms meer tokens om de taak uit te voeren.

De mogelijkheden omvatten functieaanroepen, code-uitvoering, gestructureerde antwoorden en contextcaching. Zoeken in bestanden, onderbouwing via zoekresultaten, Google Maps en het lezen van de inhoud van webadressen zijn beschikbaar. Batchverwerking wordt ondersteund. Computerinterfacebesturing heeft een voorlopige status; die maakt niet van elke modelaanroep een volledige manier om een computer te besturen.

#### Doel en beperkingen

De fabrikant benadrukt software-engineering, agentopdrachten en complexe informatieprocessen. Een lange context maakt het mogelijk groot materiaal aan te leveren en toolmogelijkheden maken meerdere verbonden fasen mogelijk. Deze kenmerken beschrijven de modelmogelijkheden; specifieke opties en invoergegevens worden bepaald door de ondersteunde aanroepmethode.

De versie is in september 2026 als stabiel gepubliceerd. De aangekondigde kennisgrens is maart 2026, maar de informatie op bepaalde gebieden kan nog op het niveau van januari 2025 liggen. Verzonnen feiten, vertragingen en time-outs zijn mogelijk. Meer redeneren sluit fouten niet uit, en een laag inspanningsniveau is geen belofte van een bepaalde antwoordtijd.

Praktische taak

### Praktische taak

Technisch voorbeeld in het Engels

```
Refactor a shared discount rule

Three modules compute a discount independently. Cart uses subtotal >= 100; checkout uses subtotal > 100; invoice uses subtotal >= 100. The approved rule is 10% off at or above 100, with no stacking. Propose a shared implementation and rollout order, then specify tests for 99.99, 100 and repeated application. Preserve invoice history.
```

#### Verwacht resultaat

```
A refactoring proposal with one shared rule, per-module integration steps and boundary/idempotency test cases.
```

#### Resultaat controleren

```
Check that exactly 100 qualifies, the discount is applied once and historical invoices are not recalculated.
```

**Ailoot · Anthropic Messages** `POST /v1/messages` `gemini-3.8-flash-tiered`

[`gemini-3.8-flash-tiered`](https://ailoot.ai/models/nl/#m=gemini-3.8-flash-tiered&route=Core&caller=gemini-3.8-flash-tiered&fmt=messages)

Google /`gemini-3.8-flash-tiered`

### Aan de slag

Een multimodaal model van Google voor langdurige software-engineering, autonome agents en complexe kennistaken.

Toegestane invoer

Tekst · Afbeeldingen

Resultaten

Tekst

### Beschikbaar in Ailoot · invoer en methoden

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

Invoertypen

`text`, `image`

Uitvoertypen

`text`

Context

1.048.576 tokens

Maximale uitvoer

65.536 tokens

Uitvoerformaat

json of SSE

| Veld | Type | Vereiste | Waarden en limieten | Standaard |
| --- | --- | --- | --- | --- |
| Veld`model` | Type`string` | VereisteVereist | Waarden en limieten gemini-3.8-flash-tiered | Standaard— |
| Veld`messages` | Type`message[]` | VereisteVereist | Waarden en limieten Minimumaantal items: 1 | Standaard— |
| Veld`messages[].role` | Type`string` | VereisteVereist | Waarden en limieten user, assistant | Standaard— |
| Veld`messages[].content` | Type`string\|content_block[]` | VereisteVereist | Waarden en limieten | Standaard— |
| Veld`system` | Type`string\|content_block[]` | VereisteOptioneel | Waarden en limieten | Standaard— |
| Veld`max_tokens` | Type`integer` | VereisteVereist | Waarden en limieten Minimum: 1 Limiet geldt voor: exacte bovengrens van het gekozen model/de gekozen modelkaart | Standaard— |
| Veld`stream` | Type`boolean` | VereisteOptioneel | Waarden en limieten | Standaardfalse |
| Veld`temperature` | Type`number` | VereisteOptioneel | Waarden en limieten Afhankelijk van het model | Standaard— |
| Veld`top_p` | Type`number` | VereisteOptioneel | Waarden en limieten Afhankelijk van het model | Standaard— |
| Veld`stop_sequences` | Type`string[]` | VereisteOptioneel | Waarden en limieten Afhankelijk van het model | Standaard— |
| Veld`tools` | Type`tool[]` | VereisteOptioneel | Waarden en limieten Afhankelijk van het model | Standaard— |
| Veld`tools[].name` | Type`string` | VereisteOptioneel | Waarden en limieten Geldt wanneer: tool opgegeven | Standaard— |
| Veld`tools[].description` | Type`string` | VereisteOptioneel | Waarden en limieten | Standaard— |
| Veld`tools[].input_schema` | Type`JSON_schema` | VereisteOptioneel | Waarden en limieten | Standaard— |
| Veld`tool_choice` | Type`object` | VereisteOptioneel | Waarden en limieten Afhankelijk van het model | Standaard— |
| Veld`thinking.type` | Type`string` | VereisteOptioneel | Waarden en limieten Afhankelijk van het model | Standaard— |
| Veld`thinking.budget_tokens` | Type`integer` | VereisteOptioneel | Waarden en limieten Afhankelijk van het model | Standaard— |
| Veld`output_config.effort` | Type`string` | VereisteOptioneel | Waarden en limieten Afhankelijk van het model | Standaard— |
| Veld`metadata` | Type`object` | VereisteOptioneel | Waarden en limieten | Standaard— |
| Veld`cache_control` | Type`object` | VereisteOptioneel | Waarden en limieten Afhankelijk van het model | Standaard— |

Combinaties van invoermaterialen

**Tekst** · UTF8-tekst

`messages[].content of een blok met type=text`

**Tekst + afbeelding**

`{type:image,source:{type:base64,media_type,data}} of bron met type=url`

Methodeparameters en levenscyclus

| Parameter | Contract |
| --- | --- |
| Parameter`material_types` | Contracttext, image |
| Parameter`required` | Contractmodel, messages, max\_tokens |
| Parameter`optional_controls` | Contractnull |
| Parameter`content_type` | Contractapplication/json |
| Parameter`text_file_material` | Contractwerkelijke UTF-8-inhoud ingevoegd als tekst; bestands-ID’s/URLs vereisen afzonderlijke exacte ondersteuning |

Levenscyclus: `exact retained published method`

De methodestructuren en ID’s zijn exact; de mogelijkheden van de leverancier staan los van toelating.

### Tarieven

#### Ailoot-methodetarieven

Invoer

US$ 0,00075 */ 1K*

Uitvoer

US$ 0,00375 */ 1K*

Cache lezen

US$ 0,000075 */ 1K*

Ailoot reserveert vóór een verzoek een geschat bedrag. Na het resultaat worden de uiteindelijke kosten afgerekend op basis van het gemeten verbruik. Bij streaming gebeurt de afrekening op basis van de definitieve verbruiksregistratie. [Zo werken reservering en afrekening →](https://ailoot.ai/docs/nl/billing/reserve/)

### Voorbeeldverzoeken

#### Ailoot · Anthropic Messages

TekstvoorbeeldInvoer, afbeeldingPython SDKNode.js SDKPython-stream

```bash
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_TEXT_FILE:?Set your actual UTF-8 source-material file}"
export AILOOT_TEXT_FILE
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"model": "gemini-3.8-flash-tiered", "max_tokens": 1024, "messages": []}')
f=Path(os.environ["AILOOT_TEXT_FILE"])
if not f.is_file():raise SystemExit("Choose your actual UTF-8 source material")
text=f.read_text(encoding="utf-8")
if not text.strip():raise SystemExit("Source material must contain text")
p["messages"]=[{"role":"user","content":"Summarize this material and quote supporting source passages.\n\n"+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/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
print(json.dumps(json.loads(Path("result.json").read_text()),ensure_ascii=False,indent=2))
PY_RESULT
```

```bash
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_IMAGE_FILE:?Set your actual PNG JPEG or WebP image}"
export AILOOT_IMAGE_FILE
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"model": "gemini-3.8-flash-tiered", "max_tokens": 1024, "messages": [{"role": "user", "content": [{"type": "text", "text": "Read labels and numbers in this image; flag unreadable text."}]}]}')
import base64
f=Path(os.environ["AILOOT_IMAGE_FILE"])
if not f.is_file():raise SystemExit("Choose an actual PNG JPEG or WebP image")
raw=f.read_bytes()
mime="image/png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "image/jpeg" if raw.startswith(b"\xff\xd8") else "image/webp" if raw[:4]==b"RIFF" and raw[8:12]==b"WEBP" else None
if not mime:raise SystemExit("Use PNG JPEG or WebP")
b64=base64.b64encode(raw).decode()
p["messages"][0]["content"].append({"type":"image","source":{"type":"base64","media_type":mime,"data":b64}})
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/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
print(json.dumps(json.loads(Path("result.json").read_text()),ensure_ascii=False,indent=2))
PY_RESULT
```

```python
import anthropic
import os

if not os.environ.get("AILOOT_API_KEY", "").strip(): raise SystemExit("Set AILOOT_API_KEY before making a request")
client = anthropic.Anthropic(base_url="https://api.ailoot.ai", api_key=os.environ["AILOOT_API_KEY"], max_retries=0)
msg = client.messages.create(
    model="gemini-3.8-flash-tiered",
    max_tokens=1024,
    messages=[{"role": "user", "content": "Explain the difference between an observation and a hypothesis 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(msg.to_dict(mode="json"))
```

```js
import Anthropic from "@anthropic-ai/sdk";

if (!process.env.AILOOT_API_KEY?.trim()) throw new Error("Set AILOOT_API_KEY before making a request");
const client = new Anthropic({ baseURL: "https://api.ailoot.ai", apiKey: process.env.AILOOT_API_KEY, maxRetries: 0 });
const msg = await client.messages.create({
  model: "gemini-3.8-flash-tiered",
  max_tokens: 1024,
  messages: [{ role: "user", content: "Explain the difference between an observation and a hypothesis in three sentences." }],
});
import { writeFileSync } from "node:fs";

function saveResult(data, stem = "result") {
  writeFileSync(stem + ".json", JSON.stringify(data, null, 2));
  console.log(JSON.stringify(data, null, 2));
  const saveBlob = (encoded, suffix, label) => {
    const raw = Buffer.from(encoded, "base64");
    const ext = raw.subarray(0,8).equals(Buffer.from([137,80,78,71,13,10,26,10])) ? "png" : raw[0]===255 && raw[1]===216 ? "jpg" : raw.subarray(0,4).toString()==="RIFF" && raw.subarray(8,12).toString()==="WEBP" ? "webp" : suffix;
    const file = `${stem}-${label}.${ext}`;
    writeFileSync(file, raw); console.log("Saved", file);
  };
  for (const [i, block] of (data.content || []).entries()) console.log("Content", i, JSON.stringify(block));
  for (const choice of data.choices || []) console.log("Choice", choice.index, JSON.stringify(choice.message || choice.delta || {}));
  for (const [i, item] of (data.output || []).entries()) {
    console.log("Output", i, JSON.stringify(item));
    if (item.type === "image_generation_call" && item.result) saveBlob(item.result, item.output_format || "bin", `output-${i}`);
  }
  for (const [ci, candidate] of (data.candidates || []).entries()) {
    for (const [pi, part] of (candidate.content?.parts || []).entries()) {
      console.log("Candidate/part", ci, pi, JSON.stringify(part));
      const blob = part.inlineData || part.inline_data;
      if (blob?.data) {
        const mime = blob.mimeType || blob.mime_type;
        const suffix = ({"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"})[mime] || "bin";
        saveBlob(blob.data, suffix, `candidate-${ci}-part-${pi}`);
      }
    }
  }
}

saveResult(msg);
```

```python
import anthropic,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=anthropic.Anthropic(base_url="https://api.ailoot.ai",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.messages.stream(model='gemini-3.8-flash-tiered',max_tokens=1024,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_message()
    save_result(final.to_dict(mode="json"),"stream-result")
```

### Resultaten ophalen en opslaan

#### Ailoot · Anthropic Messages

json of SSE

##### Alle voltooide resultaten bewaren

Bewaar elk volledig teruggegeven antwoord, bestand en inhoudsonderdeel.

Bewaar alle inhoudsblokken, handtekeningen van redeneringen en werkelijke toolgebruik-ID’s. Voeg alle SSE-blokdelta’s samen; het eerste tekstblok is niet de volledige uitvoer.

##### Als het oorspronkelijke antwoord moet worden gecontroleerd

Bewaar aanvraag-/antwoord-ID’s en headers. Er wordt geen algemene URL meegeleverd om teksttaken op te halen.

Antwoordvelden

| Veld | Type |
| --- | --- |
| Veld`id` | Typestring |
| Veld`model` | Typestring |
| Veld`content[]` | Typetext\|thinking\|tool\_use\|other content block |
| Veld`stop_reason` | Typestring\|null |
| Veld`usage` | Typeobject |

Fouten en vervolgstappen

| Antwoord | Voorwaarde | Volgende stap |
| --- | --- | --- |
| Antwoord400 · `invalid_request_error` | VoorwaardeVerplichte velden, de materiaalrepresentatie of een parameterwaarde zijn ongeldig | Volgende stapCorrigeer de aangegeven velden vóór een nieuwe aanmaakaanvraag. |

### Aliasnamen

#### Modelaliasnamen

**Ailoot** [`gemini-3.8-flash-tiered`](https://ailoot.ai/models/nl/#m=gemini-3.8-flash-tiered&route=Core&caller=gemini-3.8-flash-tiered&fmt=messages)

#### Aliasnamen voor methodepaden

Gebruik de hierboven getoonde methodepaden.

#### Gerelateerde aanroeper-ID’s

[`gemini-3.8-flash-tiered`](https://ailoot.ai/models/nl/#m=gemini-3.8-flash-tiered&route=Core&caller=gemini-3.8-flash-tiered&fmt=messages)

**Ailoot · Gemini generateContent** `POST /v1beta/models/{model}:generateContent` `gemini-3.8-flash-tiered`

[`gemini-3.8-flash-tiered`](https://ailoot.ai/models/nl/#m=gemini-3.8-flash-tiered&route=Core&caller=gemini-3.8-flash-tiered&fmt=gemini)

Google /`gemini-3.8-flash-tiered`

### Aan de slag

Een multimodaal model van Google voor langdurige software-engineering, autonome agents en complexe kennistaken.

Toegestane invoer

Tekst · Afbeeldingen

Resultaten

Tekst

### Beschikbaar in Ailoot · invoer en methoden

**Ailoot · Gemini generateContent** `POST /v1beta/models/{model}:generateContent`

Invoertypen

`text`, `image`

Uitvoertypen

`text`

Context

1.048.576 tokens

Maximale uitvoer

65.536 tokens

Uitvoerformaat

json of ondersteunde streaming

| Veld | Type | Vereiste | Waarden en limieten | Standaard |
| --- | --- | --- | --- | --- |
| Veld`path.model` | Type`string` | VereisteVereist | Waarden en limieten gemini-3.8-flash-tiered | Standaard— |
| Veld`contents` | Type`content[]` | VereisteVereist | Waarden en limieten Minimumaantal items: 1 | Standaard— |
| Veld`contents[].role` | Type`string` | VereisteOptioneel | Waarden en limieten user, model | Standaard— |
| Veld`contents[].parts` | Type`part[]` | VereisteVereist | Waarden en limieten | Standaard— |
| Veld`systemInstruction` | Type`content` | VereisteOptioneel | Waarden en limieten | Standaard— |
| Veld`generationConfig.maxOutputTokens` | Type`integer` | VereisteOptioneel | Waarden en limieten Minimum: 1 Afhankelijk van het model | Standaard— |
| Veld`generationConfig.temperature` | Type`number` | VereisteOptioneel | Waarden en limieten Afhankelijk van het model | Standaard— |
| Veld`generationConfig.topP` | Type`number` | VereisteOptioneel | Waarden en limieten Afhankelijk van het model | Standaard— |
| Veld`generationConfig.topK` | Type`integer` | VereisteOptioneel | Waarden en limieten Afhankelijk van het model | Standaard— |
| Veld`generationConfig.stopSequences` | Type`string[]` | VereisteOptioneel | Waarden en limieten Afhankelijk van het model | Standaard— |
| Veld`generationConfig.thinkingConfig.includeThoughts` | Type`boolean` | VereisteOptioneel | Waarden en limieten Afhankelijk van het model | Standaard— |
| Veld`generationConfig.thinkingConfig.thinkingBudget` | Type`integer` | VereisteOptioneel | Waarden en limieten Afhankelijk van het model | Standaard— |
| Veld`tools[].functionDeclarations` | Type`function_declaration[]` | VereisteOptioneel | Waarden en limieten Afhankelijk van het model | Standaard— |
| Veld`toolConfig.functionCallingConfig.mode` | Type`string` | VereisteOptioneel | Waarden en limieten Afhankelijk van het model | Standaard— |
| Veld`safetySettings` | Type`object[]` | VereisteOptioneel | Waarden en limieten Afhankelijk van het model | Standaard— |
| Veld`sessionId` | Type`string` | VereisteOptioneel | Waarden en limieten | Standaard— |

Combinaties van invoermaterialen

**Tekst** · UTF8-tekst

`contents[].parts[].text`

**Tekst + afbeelding**

`parts[].inlineData={mimeType,data}`

Methodeparameters en levenscyclus

| Parameter | Contract |
| --- | --- |
| Parameter`material_types` | Contracttext, image |
| Parameter`required` | Contractcontents |
| Parameter`optional_controls` | Contractnull |
| Parameter`content_type` | Contractapplication/json |
| Parameter`text_file_material` | Contractwerkelijke UTF-8-inhoud ingevoegd als tekst; bestands-ID’s/URLs vereisen afzonderlijke exacte ondersteuning |

Levenscyclus: `exact retained published method`

De methodestructuren en ID’s zijn exact; de mogelijkheden van de leverancier staan los van toelating.

### Tarieven

#### Ailoot-methodetarieven

Invoer

US$ 0,00075 */ 1K*

Uitvoer

US$ 0,00375 */ 1K*

Cache lezen

US$ 0,000075 */ 1K*

Ailoot reserveert vóór een verzoek een geschat bedrag. Na het resultaat worden de uiteindelijke kosten afgerekend op basis van het gemeten verbruik. Bij streaming gebeurt de afrekening op basis van de definitieve verbruiksregistratie. [Zo werken reservering en afrekening →](https://ailoot.ai/docs/nl/billing/reserve/)

### Voorbeeldverzoeken

#### Ailoot · Gemini generateContent

TekstvoorbeeldInvoer, afbeeldingPython SDKNode.js SDKPython-stream

```bash
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_TEXT_FILE:?Set your actual UTF-8 source-material file}"
export AILOOT_TEXT_FILE
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"contents": []}')
f=Path(os.environ["AILOOT_TEXT_FILE"])
if not f.is_file():raise SystemExit("Choose your actual UTF-8 source material")
text=f.read_text(encoding="utf-8")
if not text.strip():raise SystemExit("Source material must contain text")
p["contents"]=[{"role":"user","parts":[{"text":"Summarize this material and quote supporting source passages.\n\n"+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/v1beta/models/gemini-3.8-flash-tiered:generateContent \
  -H "x-goog-api-key: $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
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(json.loads(Path("result.json").read_text(encoding="utf-8")))
PY_RESULT
```

```bash
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_IMAGE_FILE:?Set your actual PNG JPEG or WebP image}"
export AILOOT_IMAGE_FILE
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"contents": [{"role": "user", "parts": [{"text": "Read labels and numbers in this image; flag unreadable text."}]}]}')
import base64
f=Path(os.environ["AILOOT_IMAGE_FILE"])
if not f.is_file():raise SystemExit("Choose an actual PNG JPEG or WebP image")
raw=f.read_bytes()
mime="image/png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "image/jpeg" if raw.startswith(b"\xff\xd8") else "image/webp" if raw[:4]==b"RIFF" and raw[8:12]==b"WEBP" else None
if not mime:raise SystemExit("Use PNG JPEG or WebP")
b64=base64.b64encode(raw).decode()
p["contents"][0]["parts"].append({"inlineData":{"mimeType":mime,"data":b64}})
Path("request.json").write_text(json.dumps(p,ensure_ascii=False))
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1beta/models/gemini-3.8-flash-tiered:generateContent \
  -H "x-goog-api-key: $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
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(json.loads(Path("result.json").read_text(encoding="utf-8")))
PY_RESULT
```

```python
from google import genai
from google.genai import types
import os

if not os.environ.get("AILOOT_API_KEY", "").strip(): raise SystemExit("Set AILOOT_API_KEY before making a request")
client = genai.Client(
    api_key=os.environ["AILOOT_API_KEY"],
    http_options=types.HttpOptions(base_url="https://api.ailoot.ai"),
)
resp = client.models.generate_content(model="gemini-3.8-flash-tiered", contents="Explain the difference between an observation and a hypothesis 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(resp.to_json_dict())
```

```js
import { GoogleGenAI } from "@google/genai";

if (!process.env.AILOOT_API_KEY?.trim()) throw new Error("Set AILOOT_API_KEY before making a request");
const ai = new GoogleGenAI({ apiKey: process.env.AILOOT_API_KEY, httpOptions: { baseUrl: "https://api.ailoot.ai" } });
const resp = await ai.models.generateContent({ model: "gemini-3.8-flash-tiered", contents: "Explain the difference between an observation and a hypothesis in three sentences." });
import { writeFileSync } from "node:fs";

function saveResult(data, stem = "result") {
  writeFileSync(stem + ".json", JSON.stringify(data, null, 2));
  console.log(JSON.stringify(data, null, 2));
  const saveBlob = (encoded, suffix, label) => {
    const raw = Buffer.from(encoded, "base64");
    const ext = raw.subarray(0,8).equals(Buffer.from([137,80,78,71,13,10,26,10])) ? "png" : raw[0]===255 && raw[1]===216 ? "jpg" : raw.subarray(0,4).toString()==="RIFF" && raw.subarray(8,12).toString()==="WEBP" ? "webp" : suffix;
    const file = `${stem}-${label}.${ext}`;
    writeFileSync(file, raw); console.log("Saved", file);
  };
  for (const [i, block] of (data.content || []).entries()) console.log("Content", i, JSON.stringify(block));
  for (const choice of data.choices || []) console.log("Choice", choice.index, JSON.stringify(choice.message || choice.delta || {}));
  for (const [i, item] of (data.output || []).entries()) {
    console.log("Output", i, JSON.stringify(item));
    if (item.type === "image_generation_call" && item.result) saveBlob(item.result, item.output_format || "bin", `output-${i}`);
  }
  for (const [ci, candidate] of (data.candidates || []).entries()) {
    for (const [pi, part] of (candidate.content?.parts || []).entries()) {
      console.log("Candidate/part", ci, pi, JSON.stringify(part));
      const blob = part.inlineData || part.inline_data;
      if (blob?.data) {
        const mime = blob.mimeType || blob.mime_type;
        const suffix = ({"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"})[mime] || "bin";
        saveBlob(blob.data, suffix, `candidate-${ci}-part-${pi}`);
      }
    }
  }
}

saveResult(resp);
```

```python
from google import genai
from google.genai import types
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=genai.Client(api_key=os.environ["AILOOT_API_KEY"],http_options=types.HttpOptions(base_url="https://api.ailoot.ai"))
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))

count=0
with Path("stream-events.jsonl").open("w",encoding="utf-8") as log:
    for chunk in client.models.generate_content_stream(model='gemini-3.8-flash-tiered',contents="Explain observations and hypotheses in three sentences."):
        payload=chunk.to_json_dict()
        log.write(json.dumps(payload,ensure_ascii=False)+"\n"); log.flush()
        save_result(payload,"stream-chunk-"+str(count))
        count+=1
```

### Resultaten ophalen en opslaan

#### Ailoot · Gemini generateContent

json of ondersteunde streaming

##### Alle voltooide resultaten bewaren

Bewaar elk volledig teruggegeven antwoord, bestand en inhoudsonderdeel.

Bewaar alle kandidaten en onderdelen, inclusief functieaanroepen, handtekeningen van redeneringen en verbruiksgegevens; voeg streamingfragmenten in de juiste volgorde samen.

##### Als het oorspronkelijke antwoord moet worden gecontroleerd

Bewaar aanvraag-/antwoord-ID’s en headers. Er wordt geen algemene URL meegeleverd om teksttaken op te halen.

Antwoordvelden

| Veld | Type |
| --- | --- |
| Veld`responseId` | Typestring |
| Veld`modelVersion` | Typestring |
| Veld`candidates[].content.parts[]` | Typetext\|inlineData\|functionCall\|other part |
| Veld`candidates[].finishReason` | Typestring |
| Veld`usageMetadata` | Typeobject |

Fouten en vervolgstappen

| Antwoord | Voorwaarde | Volgende stap |
| --- | --- | --- |
| Antwoord400 · `invalid_request_error` | VoorwaardeVerplichte velden, de materiaalrepresentatie of een parameterwaarde zijn ongeldig | Volgende stapCorrigeer de aangegeven velden vóór een nieuwe aanmaakaanvraag. |

### Aliasnamen

#### Modelaliasnamen

**Ailoot** [`gemini-3.8-flash-tiered`](https://ailoot.ai/models/nl/#m=gemini-3.8-flash-tiered&route=Core&caller=gemini-3.8-flash-tiered&fmt=gemini)

#### Aliasnamen voor methodepaden

Gebruik de hierboven getoonde methodepaden.

#### Gerelateerde aanroeper-ID’s

[`gemini-3.8-flash-tiered`](https://ailoot.ai/models/nl/#m=gemini-3.8-flash-tiered&route=Core&caller=gemini-3.8-flash-tiered&fmt=gemini)

FAQ · Gemini 3.8 Flash Tiered

Welke invoer en resultaten zijn beschikbaar?

`POST /v1/messages` · `gemini-3.8-flash-tiered`: `text`, `image` → `text` `POST /v1beta/models/{model}:generateContent` · `gemini-3.8-flash-tiered`: `text`, `image` → `text`

Welke velden gebruikt het verzoek?

`POST /v1/messages` · `gemini-3.8-flash-tiered`: `model`, `messages`, `system`, `max_tokens`, `stream`, `metadata` `POST /v1beta/models/{model}:generateContent` · `gemini-3.8-flash-tiered`: `contents`, `systemInstruction`, `sessionId`

Welke limieten gelden?

`POST /v1/messages` · `gemini-3.8-flash-tiered`: `ctx`: `1048576`; `max_out`: `65536`; `messages.min_items`: `1`; `max_tokens.minimum`: `1` `POST /v1beta/models/{model}:generateContent` · `gemini-3.8-flash-tiered`: `ctx`: `1048576`; `max_out`: `65536`; `contents.min_items`: `1`

Verbind Ailoot met Claude Code, OpenCode, Hermes of je eigen applicatie.

## Het bedrijf en zijn projectenportefeuille

Het bedrijf en zijn projectenportefeuille: miljoenen klanten; maandelijkse verkopen in de miljarden.

## Koop tokens met korting.

Abonnementsvoordeel voor regelmatig gebruik. Promotiecodes geven tot 50% korting op tokens.

Abonnement

Kies een abonnement met korting voor je terugkerende verzoeken.

Promotiecode tot 50%

Vul de code bij aankoop in. De prijs wordt volgens de lopende actie herberekend.

Kosten in de geschiedenis

Model, tokens en bedrag worden per verzoek bewaard.

[Kies een abonnement](https://ailoot.ai/docs/nl/billing/subscriptions/) · [Bekijk modelprijzen](https://ailoot.ai/models/nl/)

## Verbind de API met het product dat je verkoopt.

SaaS, apps en bots volgens de openbare aanbodvoorwaarden en licentieovereenkomst van Ailoot. Vraag voor doorverkoop een resellerlicentie aan.

Commerciële applicatie

Voeg tekst-, beeld-, video- en geluidsgeneratie aan betaalde functies van je service toe.

Resellerlicentie

Stuur een projectbeschrijving en toegangsschema. Vraag schriftelijke voorwaarden voor gebruik en doorverkoop.

Documenten op de site

Aanbodvoorwaarden, licentieovereenkomst en gegevensbeleid zijn vóór het verbinden beschikbaar.

[Vraag een resellerlicentie aan](mailto:support@ailoot.ai) · [Aanbodvoorwaarden en licentieovereenkomst](https://ailoot.ai/legal/offer?lang=nl)

## Ailoot · Het bedrijf en zijn projectenportefeuille





Ailoot bouwt op opgebouwde operationele ervaring, een groot klantenbestand, een stabiele dienst en doorlopende KPI-controle.





Het bedrijf en zijn projectenportefeuille: miljoenen klanten; maandelijkse verkopen in de miljarden.





Ailoot gebruikt die operationele ervaring voor API-toegang tot AI-functies in klantproducten, agents, applicaties en automatiseringen.
