Je bouwt een agent die actuele informatie nodig heeft. De klassieke route: een zoek-API aanroepen, de links eruit vissen, elke pagina zelf ophalen, de HTML opschonen en pas dan iets aan je taalmodel voeren. Exa slaat die drie middelste stappen over, want je krijgt de gevonden pagina’s met bruikbare tekst in één antwoord terug. Hieronder zie je in vier stappen hoe je van aanmelden naar een werkende call komt.
Update 4 november 2026 Sinds het origineel van 5 september heeft Exa zijn aanbod omgebouwd. Er is een nieuw type
lite, de typesinstant,fastendeep-reasoningheten nu legacy, het gratis niveau is gewijzigd en de prijs van Monitors is lager. Alle voorbeelden en prijzen hieronder zijn gecontroleerd tegen de huidige documentatie.
Hoe maak je een Exa-account en haal je een API-sleutel op?
Maak een account aan via het Exa-dashboard en haal je sleutel op bij API keys. Het gratis niveau vraagt geen betaalmethode.
Zet de sleutel als omgevingsvariabele, niet in je code:
export EXA_API_KEY="jouw-sleutel"
Beginner-tip Een omgevingsvariabele is een waarde die buiten je bestand leeft, zodat je sleutel niet per ongeluk in Git belandt. Zet hem in je shell-profiel of in een
.envin je projectmap en zet die.envin je.gitignore.
Hoe installeer je de Exa-SDK voor Python of JavaScript?
Exa heeft SDK’s voor Python en JavaScript. Kies er één:
pip install exa-py # Python 3.9 of nieuwer
npm install exa-js # JavaScript
De Python-bibliotheek exa-py staat onder de MIT-licentie en zat op 4 november 2026 op versie 2.27.0 (1 november 2026) (Bron: PyPI).
Hoe doe je je eerste zoekopdracht met Exa?
Het minimale voorbeeld is een paar regels. De client leest EXA_API_KEY vanzelf uit je omgeving:
from exa_py import Exa
exa = Exa()
result = exa.search(
"blog post about artificial intelligence",
type="auto",
contents={"highlights": True},
)
for hit in result.results:
print(hit.title, hit.url)
print(hit.highlights)
Twee velden doen hier het werk. Met type="auto" kiest Exa zelf de zoekstrategie, wat ongeveer een seconde duurt. Met contents={"highlights": True} krijg je per resultaat korte fragmenten terug in plaats van de hele pagina. Zo houd je het aantal tokens laag dat je later aan je taalmodel voert: een volledige webpagina bestaat voor een groot deel uit navigatie en voettekst, highlights geven alleen de passages die bij je vraag horen. Exa adviseert om te beginnen met kale highlights: True en Exa de lengte te laten bepalen. Wil je de omvang begrenzen, dan geeft maxCharacters een plafond per URL. Met query stuur je welke passages worden gekozen. Wil je toch de hele tekst, dan vraag je text aan in plaats van highlights.
Liever eerst zonder SDK proberen? Dan werkt dit ook:
curl -s -X POST "https://api.exa.ai/search" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $EXA_API_KEY" \
-d '{"query": "blog post about artificial intelligence", "type": "auto", "contents": {"highlights": true}}'
In de Python-SDK schrijf je parameters in snake_case, in JavaScript en cURL in camelCase.
Welk search type past bij jouw toepassing?
Vanaf hier stel je af op wat je toepassing nodig heeft. De eerste knop is het veld type:
| Type | Snelheid | Waarvoor | Prijs per 1.000 verzoeken |
|---|---|---|---|
lite | ~450 ms | Realtime chat en spraak, alleen gecachte inhoud, maximaal 10 resultaten | $4 |
auto | ~1 seconde | Standaard, als je twijfelt | $7 |
deep-lite | ~4 seconden | Lichte synthese over meerdere bronnen | $12 |
deep | 4 tot 15 seconden | Meerstaps zoeken met sterkere synthese | $12 |
De types instant (vroeger de snelste), fast en deep-reasoning zijn legacy. Ze werken nog en kosten hetzelfde als eerder, maar voor nieuwe code raadt Exa lite en deep aan (of Exa Agent voor langdurig onderzoek). Let op: lite weigert parameters die het niet ondersteunt, zoals output_schema, system_prompt en contents.summary, met een 400-fout.
Het basistarief dekt tien resultaten per verzoek. Elk resultaat daarboven kost $1 extra per 1.000 verzoeken, AI-samenvattingen van pagina’s kosten $1 per 1.000 pagina’s. Gaat het om losse pagina’s die je al kent, dan haal je ze op via het endpoint voor inhoud (get_contents): $1 per 1.000 pagina’s per contenttype, dus tekst plus highlights van één pagina telt voor twee. Het Answer-endpoint kost $5 en Monitors $2 per 1.000 verzoeken (Bron: Exa pricing).
Bronnen inperken. include_domains en exclude_domains accepteren ook padvoorvoegsels en subdomein-jokers:
results = exa.search(
"latest product announcements",
include_domains=["anthropic.com/news"],
)
Zoeken in een categorie. Met category zoek je binnen een soort bron in plaats van op het hele web: company, people, publication, news, personal site en financial report. Let op de beperkingen: company en people ondersteunen geen publicatiedatum-filters en people geen exclude_domains. Niet-ondersteunde filters geven een 400-fout.
Gestructureerde output. Met output_schema geef je een schema mee en krijg je velden terug in plaats van losse tekst. Je kiest tussen type: "text" voor proza en type: "object" met properties en required voor JSON. Het schema mag maximaal 10 eigenschappen hebben (geneste meegeteld) en twee niveaus diep gaan. Het resultaat staat in output.content, bronnen en betrouwbaarheid in output.grounding. Voeg dus geen eigen bron- of zekerheidsvelden toe. Het is vooral nuttig bij deep en deep-lite, waar Exa daadwerkelijk over meerdere bronnen samenvat.
Gevorderden Reken je kosten door voordat je een agent loslaat. Eén
auto-zoekopdracht met tien resultaten kost $0,007. Zoekt je agent per gebruikersvraag drie keer met twintig resultaten, dan komt dat op 3 × (0,007 + 10 × 0,001) = $0,051: ruim zeven keer zoveel, niet drie keer. Ook de snelheidslimiet telt: de gratis laag staat op 10 verzoeken per seconde, voordeep-zoekopdrachten geldt 5 per seconde (Bron: Exa rate limits). Hoe je zo’n agent daarna test, lees je in AI-agents evalueren met een LLM-judge.
Kun je Exa ook zonder code aan Claude of ChatGPT hangen?
Ja, via de MCP-server van Exa op https://mcp.exa.ai/mcp. Die biedt de tools web_search_exa en web_fetch_exa standaard aan, web_search_advanced_exa (met domein-, datum- en geofilters) als optie en agent_run voor meerstaps onderzoek. Voor Claude Code installeer je de plugin met claude plugin install exa@claude-plugins-official. Claude Desktop krijgt de Exa-connector uit de connectorgids. ChatGPT en Codex gebruiken de Exa-plugin. Zoeken en pagina’s ophalen werkt zonder API-sleutel, tegen een lage rate limit. Krijg je een 429-fout, dan log je in of voeg je een sleutel toe. De route is prima om te proberen. In een eigen toepassing, bijvoorbeeld een RAG-pijplijn, heb je de SDK nodig omdat je daar zelf bepaalt hoe de resultaten worden opgehaald en gefilterd. Wat RAG precies is, staat in Wat is RAG?.
Checklist: ben je klaar?
- Account aangemaakt en API-sleutel opgehaald in het dashboard
-
EXA_API_KEYstaat in je omgeving, niet in je code - SDK geïnstalleerd (
exa-pyofexa-js) - Eerste
search-call geeft resultaten terug -
contents={"highlights": True}staat aan in plaats van volledige tekst -
typebewust gekozen op basis van je wachttijd-budget - Domeinfilters ingesteld als je agent maar een handvol bronnen mag raadplegen
- Kosten per gebruikersvraag doorgerekend voordat je opschaalt
Wil je eerst begrijpen wat zo’n agent eigenlijk is voordat je er een zoek-API aan hangt, begin dan met AI-agents in 2026: wat zijn ze en wat kun je er echt mee?.
