Source: https://ailoot.ai/models/nl/recraft-recraft-v4-1-flash/
Canonical: https://ailoot.ai/models/nl/recraft-recraft-v4-1-flash/
Language: nl

# Recraft: Recraft V4.1 Flash

[Markdown](https://ailoot.ai/models/nl/recraft-recraft-v4-1-flash/index.md) · [JSON](https://ailoot.ai/models/nl/recraft-recraft-v4-1-flash/facts.json)

## [Recraft: Recraft V4.1 Flash](https://ailoot.ai/models/nl/recraft-recraft-v4-1-flash/)

Recraft V4.1 Flash genereert 1K-rasterafbeeldingen vanuit tekst voor snelle visuele iteratie. Het ondersteunt fotografie, portretten, complexe scènes en logoconcepten, met PNG- of verliesloze WebP-uitvoer en expliciete kleurvoorkeuren.

- [**Ailoot Ultra · Afbeeldingen** `POST /v1/images/generations` `recraft/recraft-v4.1-flash`](https://ailoot.ai/models/nl/recraft-recraft-v4-1-flash/#method-0)

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.

Recraft V4.1 Flash is Recrafts tekst-naar-afbeeldingmodel voor snelle iteratie en visueel werk in grote volumes. De fabrikant noemt fotografie, portretten, sfeer, complexe scènes, gemengde media en logoconcepten als sterke toepassingen. Een geschreven briefing wordt een rasterafbeelding die met andere creatieve richtingen kan worden vergeleken voordat een definitief beeld wordt ontwikkeld. Flash is een specifiek lid van de V4.1-familie, met een eigen uitvoerformaat en ondersteunde instellingen.

De rechtstreeks gegenereerde uitvoer valt in Recrafts 1K-rasterafbeeldingsklasse. Kies het canvas rond de beoogde plaatsing: een horizontale illustratie voor een paginakop, een verticaal portret of een vierkant beeld voor een compacte kaart. De uitvoerformaten zijn verliesloos WebP en PNG.

Begin de briefing met het hoofdonderwerp en visuele doel en beschrijf daarna kadrering, omgeving, belichting en medium. Voor een productconcept is een bruikbare instructie: “Een compacte crèmekleurige radio op een walnotenhouten bureau, vooraanzicht vanuit een driekwarthoek, zacht raamlicht, rustige redactionele foto, royale lege ruimte links.” Benoem voor een illustratie de vormentaal, het palet en de relatie tussen elementen. Houd de bepalende details expliciet in plaats van ongerelateerde bijvoeglijke naamwoorden toe te voegen. De gedocumenteerde promptruimte van Flash is maximaal 10000 tekens, dus een gedetailleerde scène kan worden beschreven wanneer de taak dat nodig heeft.

De instellingen van de fabrikant omvatten voorkeurskleuren en een gewenste achtergrondkleur. Een seed kan voor reproduceerbare resultaten worden opgegeven en de generatie-interface documenteert één tot zes afbeeldingen per aanvraag. Die instellingen ondersteunen een nuttige vergelijkingstaak: houd onderwerp en compositie gelijk, varieer één visuele richting en beoordeel de resulterende afbeeldingen op de gewenste lay-out. Kleurvoorkeuren beschrijven het gevraagde resultaat; vergelijk belangrijke merkkleuren met het voltooide beeld voordat je dit met een bestaand ontwerpsysteem combineert.

Flash produceert rasterbeelden. Een logoconcept kan helpen een silhouet, sfeer of indeling te kiezen, terwijl bewerkbare paden bij de afzonderlijk benoemde Vector-modellen horen. Flash heeft ook geen Pro-variant. De volledige V4.1-lijn biedt die afzonderlijke keuzes wanneer vectorbewerking of detail met hogere resolutie centraal staat in het resultaat. De fabrikant beschrijft een latere verfijningsstap om een gekozen concept naar een gedetailleerdere afbeelding te brengen; die stap is een afzonderlijke operatie en geen ander rechtstreeks gegenereerd uitvoerformaat van Flash.

Deze editie ondersteunt geen afbeelding-naar-afbeeldinginvoer, aangepaste stijlen, stijl-ID's, stijlmatching of stijlreferentieafbeeldingen. De gedocumenteerde interface sluit ook negatieve prompts en expliciete tekstlay-outinstellingen uit. Zet gewenst uiterlijk en compositie in de positieve briefing. Citeer de gewenste tekst wanneer letters deel uitmaken van een concept en controleer de weergegeven letters; gebruik een afzonderlijke lay-outfase wanneer exacte typografie en plaatsing essentieel zijn.

Een praktisch Flash-resultaat is een gekozen visuele richting met een duidelijke briefing, passende beeldverhouding en bruikbaar rasterbestand. Vergelijk onderwerp, kadrering, achtergrond en belangrijke details op het formaat waarop de afbeelding verschijnt. Bewaar de geslaagde prompt en het gekozen bestand samen zodat de volgende creatieve stap de gekozen richting volgt. Snelle iteratie helpt het ontwerp te verkennen; rechtstreekse vectoruitvoer, referentiestijlmatching en de resolutie van een andere V4.1-editie blijven afzonderlijke modelkeuzes.

**Ailoot Ultra · Afbeeldingen** `POST /v1/images/generations` `recraft/recraft-v4.1-flash`

[`recraft/recraft-v4.1-flash`](https://ailoot.ai/models/nl/#m=recraft%2Frecraft-v4.1-flash&route=Ultra&caller=recraft%2Frecraft-v4.1-flash&fmt=images)

Recraft /`recraft/recraft-v4.1-flash`

### Aan de slag

Recraft V4.1 Flash genereert 1K-rasterafbeeldingen vanuit tekst voor snelle visuele iteratie. Het ondersteunt fotografie, portretten, complexe scènes en logoconcepten, met PNG- of verliesloze WebP-uitvoer en expliciete kleurvoorkeuren.

Toegestane invoer

Tekst

Resultaten

Afbeeldingen

### Beschikbaar in Ailoot · invoer en methoden

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

Invoertypen

`text`

Uitvoertypen

`image`

Uitvoerformaat

Afbeeldingsbestand

Aantal uitvoerresultaten

1 uitvoer

| Veld | Type | Vereiste | Waarden en limieten | Standaard |
| --- | --- | --- | --- | --- |
| Veld`model` | Type`string` | VereisteVereist | Waarden en limieten recraft/recraft-v4.1-flash | Standaard— |
| Veld`prompt` | Type`string` | VereisteVereist | Waarden en limieten Minimumlengte: 1 Voorwaarden: Niet-lege UTF8-prompt. Er wordt geen fabrikantbrede tekenlimiet verzonnen. | Standaard— |
| Veld`n` | Type`integer` | VereisteOptioneel | Waarden en limieten 1 | Standaard1 |
| Veld`response_format` | Type`string` | VereisteOptioneel | Waarden en limieten url, b64\_json | Standaard— |
| Veld`stream` | Type`boolean` | VereisteOptioneel | Waarden en limieten false | Standaardfalse |

Combinaties van invoermaterialen

**Tekst naar afbeelding** · Vereist: prompt

Methodeparameters en levenscyclus

| Parameter | Contract |
| --- | --- |
| Parameter`content_type` | Contractapplication/json |
| Parameter`required` | Contractmodel, prompt |
| Parameter`material_types` | Contracttext |
| Parameter`optional` | Contractn, response\_format, stream |
| Parameter`n` | Contract1 |
| Parameter`stream` | Contractfalse |
| Parameter`response_format` | Contracturl, b64\_json |
| Parameter`reference_images` | Contractfalse |
| Parameter`edit` | Contractfalse |
| Parameter`output_format_optional` | Contract |
| Parameter`resolution_control` | Contractnull |
| Parameter`aspect_ratio_control` | Contractnull |
| Parameter`other_fields` | Contractafgewezen behalve voor de exact vastgelegde interne providerroutering |

Levenscyclus: `synchronous_result_then_owned_library`

`GET /v1/media/tasks/{task_id}` · de daadwerkelijk geretourneerde task\_id of het record in de mediabibliotheek

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

`GET /v1/media/assets`

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

Genereer één afbeelding vanuit een prompt.

Sla elk data-item op; url/b64\_json zijn resultaatcoderingen.

### Tarieven

##### Zo worden de uiteindelijke kosten berekend

De weergegeven tarieven geven een schatting van de kosten vóór de generatie. Het definitieve bedrag wordt berekend op basis van de kosten die voor de oorspronkelijke generatie zijn geregistreerd. De gemeten duur van de uitvoer en de geschatte hoeveelheden zijn niet de definitieve factureerbare hoeveelheid.

Tariefverwijzingen voegen geen verzoekopties toe. Ondersteunde parameters staan bij de geselecteerde methode.

Snelle modus

Niet opgegeven Wanneer de snelle modus is geselecteerd

Flexmodus

Niet opgegeven Wanneer de modus flex is geselecteerd

Maximale redeneerinspanning

Niet opgegeven Wanneer bij maximale redeneerinspanning de default-aanpassing wordt gebruikt

#### Geschatte tarieven ter vergelijking

#### Prijzen per configuratie

Koppel elke kostenpost aan de getoonde voorwaarden. Gebruik één tarief voor elke groep alternatieve configuraties.

| Configuratie | Tariefstaffel | Verwachte hoeveelheid | Rekeneenheid | Kosten |
| --- | --- | --- | --- | --- |
| ConfiguratieBasistarieven voor tokens | TariefstaffelBasistarief | Verwachte hoeveelheid— | Rekeneenheid— | Kosten Invoer · Invoertokens · Schatting uitsluitend ter vergelijking **—** / 1K tokens Uitvoer · Uitvoertokens · Schatting uitsluitend ter vergelijking **—** / 1K tokens Invoer · Cache lezen · Schatting uitsluitend ter vergelijking **—** / 1K tokens Invoer · Cache schrijven · Schatting uitsluitend ter vergelijking **—** / 1K tokens Invoer · Cache schrijven, 1 uur · Schatting uitsluitend ter vergelijking **—** / 1K tokens |
| ConfiguratieUltra | Tariefstaffel— | Verwachte hoeveelheid— | Rekeneenheidper uitvoerafbeelding | Kosten Uitvoer · afbeeldingsuitvoer · Schatting uitsluitend ter vergelijking **$0.014** per uitvoerafbeelding |
| ConfiguratieGeschatte generatiekosten | Tariefstaffel— | Verwachte hoeveelheidschatting voor één generatie | Rekeneenheid— | Kosten Uitvoer · Geschatte generatiekosten · Schatting uitsluitend ter vergelijking **$0.014** schatting vóór generatie Deze schatting is geen extra bedrag of vast tarief voor de voltooide generatie. |

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/)

#### Details van het referentietarief

Referentiestaffels op modelniveau veranderen de methodeselectie, kostenramingen of afschrijvingen niet. Voor de actieve kostenberekening gelden de tarieven van de geselecteerde Ailoot-methode.

Prijsconfiguraties voor afbeeldingen

#### Prijzen per configuratie

| Configuratie | Factureringsvoorwaarden | Kosten |
| --- | --- | --- |
| ConfiguratieUitvoerafbeelding | FactureringsvoorwaardenEr is geen prijsvariant gedeclareerd. | Kosten Uitvoer · Uitvoerafbeelding **$0.014** per afbeelding Gelijkwaardige vermeldingen beschrijven dezelfde kosten; ze voegen geen tweede vergoeding toe. |

### Voorbeeldverzoeken

#### Ailoot Ultra · Afbeeldingen

curlPython SDKNode.js SDK

```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=json.loads('{"model": "recraft/recraft-v4.1-flash", "prompt": "A lighthouse on a cliff, watercolor", "n": 1, "response_format": "b64_json"}')

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")

request={'model': 'recraft/recraft-v4.1-flash', 'prompt': 'A lighthouse on a cliff, watercolor', 'n': 1, 'response_format': 'b64_json'}
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": "recraft/recraft-v4.1-flash", "prompt": "A lighthouse on a cliff, watercolor", "n": 1, "response_format": "b64_json"};
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");
```

### Resultaten ophalen en opslaan

#### Ailoot Ultra · Afbeeldingen

Download elke teruggegeven afbeelding of sla de Base64-inhoud ervan op

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

##### Alle voltooide resultaten bewaren

Sla elke voltooide afbeelding op; haal elke teruggegeven URL op of decodeer de bijbehorende Base64-inhoud.

Sla elk data-item op. Decodeer elke b64\_json of haal elk bestand op via elke geretourneerde ondertekende URL. Kies een bestandsextensie op basis van de daadwerkelijke MIME/bytes.

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

Als het resultaat van een afbeeldingsgeneratie of -bewerking moet worden gecontroleerd, bewaar dan de oorspronkelijke operation\_id/X-Client-Request-ID en de geretourneerde resultaatinformatie. Haal bestaande eigen resultaten terug via de mediabibliotheek met de daadwerkelijke task\_id- of asset\_id-waarden. Dien de generatie-/bewerkingsaanvraag niet opnieuw in en bouw geen polling-URL op basis van operation\_id.

Antwoordvelden

| Veld | Type |
| --- | --- |
| Veld`created` | Typeinteger |
| Veld`data[].url` | Typestring |
| Veld`data[].b64_json` | Typebase64 string |
| 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. |
| Antwoord`server_error` | VoorwaardeHet geretourneerde antwoord geeft aan dat de bewerking of het resultaat moet worden gecontroleerd | Volgende stapBewaar de oorspronkelijk geretourneerde bewerkings-/taak-ID, de aanvraagheaders en het antwoord; blijf de ondersteunde leesacties voor die oorspronkelijke bewerking uitvoeren. Dien de aanmaakaanvraag niet opnieuw in. |

### Aliasnamen

#### Modelaliasnamen

**Ailoot Ultra** [`recraft/recraft-v4.1-flash`](https://ailoot.ai/models/nl/#m=recraft%2Frecraft-v4.1-flash&route=Ultra&caller=recraft%2Frecraft-v4.1-flash&fmt=images)

#### Aliasnamen voor methodepaden

Gebruik de hierboven getoonde methodepaden.

#### Gerelateerde aanroeper-ID’s

[`recraft/recraft-v4.1-flash`](https://ailoot.ai/models/nl/#m=recraft%2Frecraft-v4.1-flash&route=Ultra&caller=recraft%2Frecraft-v4.1-flash&fmt=images)

FAQ · Recraft: Recraft V4.1 Flash

Welke invoer en resultaten zijn beschikbaar?

`POST /v1/images/generations` · `recraft/recraft-v4.1-flash`: `text` → `image`

Welke velden gebruikt het verzoek?

`POST /v1/images/generations` · `recraft/recraft-v4.1-flash`: `model`, `prompt`, `n`, `response_format`, `stream`

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.
