Duiding5 minGevorderd

Exa zoek-API koppelen aan je agent: Python in 4 stappen

Wat is Exa en hoe koppel je het? Een zoek-API die per resultaat leesbare paginatekst teruggeeft. Van API-sleutel naar werkende Python-call in vier stappen.

Conceptueel stilleven bij artikel 'Exa zoek-API koppelen aan je agent: Python in 4 stappen'AI-beeld

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 types instant, fast en deep-reasoning heten 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 .env in je projectmap en zet die .env in 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:

TypeSnelheidWaarvoorPrijs per 1.000 verzoeken
lite~450 msRealtime chat en spraak, alleen gecachte inhoud, maximaal 10 resultaten$4
auto~1 secondeStandaard, als je twijfelt$7
deep-lite~4 secondenLichte synthese over meerdere bronnen$12
deep4 tot 15 secondenMeerstaps 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, voor deep-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_KEY staat in je omgeving, niet in je code
  • SDK geïnstalleerd (exa-py of exa-js)
  • Eerste search-call geeft resultaten terug
  • contents={"highlights": True} staat aan in plaats van volledige tekst
  • type bewust 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?.

Lees verder

Veelgestelde vragen

Wat is Exa en waarin verschilt het van een gewone zoek-API?

Exa is een zoekmachine die voor AI is gebouwd in plaats van voor mensen. Het zoekt semantisch: je beschrijft in gewone taal wat je zoekt en het systeem matcht op betekenis in plaats van op trefwoorden. Daarnaast levert het in hetzelfde antwoord de opgeschoonde tekst van de gevonden pagina's, als volledige tekst of als highlights met alleen de relevante passages. Een eigen scraper en opschoonstap heb je dan niet nodig.

Wat kost Exa en kan ik gratis beginnen?

Ja, het gratis niveau vraagt geen betaalmethode. Je krijgt 10 dollar aan credits (goed voor maximaal 2.500 lite-zoekopdrachten) en dat saldo wordt elke eerste van de maand weer op 10 dollar gezet. Wie de onboarding in het dashboard afrondt, krijgt eenmalig 10 dollar extra. Daarboven betaal je per verzoek. De prijzen per 1.000 verzoeken staan in de tabel in dit artikel.

Welk search type moet ik kiezen bij Exa?

Begin met auto, het standaardtype dat ongeveer een seconde duurt. Heb je een realtime toepassing zoals chat of spraak, dan is lite met ongeveer 450 milliseconden de snelste en goedkoopste keuze. Wil je dat Exa zelf meerdere stappen doorloopt en bronnen combineert, dan pak je deep-lite (ongeveer 4 seconden) of deep (4 tot 15 seconden). De oudere types instant, fast en deep-reasoning werken nog, maar Exa raadt voor nieuwe code lite en deep aan.

Hoe beperk ik Exa-zoekresultaten tot bepaalde sites?

Met include_domains en exclude_domains (in de Python-SDK in snake_case). Beide accepteren kale domeinen, padvoorvoegsels zoals anthropic.com/news en subdomein-jokers zoals *.substack.com. Zet het pad in het filter en gebruik geen site:-operator in je zoekopdracht.

Kan ik Exa gebruiken zonder te programmeren?

Ja, via de Exa MCP-server op mcp.exa.ai/mcp. Voor Claude Code installeer je de plugin, voor Claude Desktop voeg je de Exa-connector toe en voor ChatGPT is er een plugin. Basiszoeken en pagina's ophalen werkt zonder API-sleutel met een lage rate limit. Bouw je Exa in een eigen toepassing in, dan wil je de API met de Python- of JavaScript-SDK, omdat je daar zelf search type, contentvorm en filters bepaalt.

Bronnen

Waar deze informatie vandaan komt.