{"id":20031,"date":"2026-09-28T00:19:15","date_gmt":"2026-09-28T04:19:15","guid":{"rendered":"https:\/\/wp.glbgpt.com\/?p=20031"},"modified":"2026-09-28T00:19:17","modified_gmt":"2026-09-28T04:19:17","slug":"perplexity-api-tutorial","status":"publish","type":"post","link":"https:\/\/wp.glbgpt.com\/nl\/hub\/perplexity-api-tutorial","title":{"rendered":"Perplexity API-handleiding: stap voor stap een \u2018source-grounded\u2019 antwoord bouwen"},"content":{"rendered":"<style>\n[class*=\"pat-\"]{box-sizing:border-box}\np.pat-p,ul.pat-list{font:17px\/1.8 system-ui,-apple-system,\"Segoe UI\",sans-serif;color:#243F46;margin:0 0 22px}\np.pat-eyebrow{font:750 12px\/1.5 system-ui,sans-serif;letter-spacing:.12em;color:#35756f;margin:0 0 22px}\nh2.pat-h2{font:750 30px\/1.28 system-ui,sans-serif;color:#173E48;border-top:1px solid #D5E1DB;padding-top:23px;margin:58px 0 22px;scroll-margin-top:24px}\nh3.pat-h3{font:700 22px\/1.4 system-ui,sans-serif;color:#245D56;margin:30px 0 14px}\n.pat-p a,.pat-list a,.pat-table a{color:#146B61;text-decoration:underline;text-underline-offset:3px}\n.pat-p code,.pat-list code,.pat-table code{font:.88em Consolas,monospace;overflow-wrap:anywhere;background:#EEF3EF;padding:2px 4px;border-radius:3px}\np.pat-quick{background:#F5EDDA;border-left:4px solid #B99749;padding:23px 26px}\np.pat-note{background:#EEF4EF;border-radius:10px;padding:20px 24px}\nul.pat-toc{background:#EEF4EF;padding:24px 24px 24px 46px;border-radius:10px;columns:2;column-gap:32px;font-size:15px}\n.pat-list li{margin:8px 0;break-inside:avoid}\nul.pat-checklist{background:#F7F2E8;border:1px solid #DFD1B2;border-radius:10px;padding:20px 24px 20px 46px}\nfigure.pat-table{display:block;max-width:100%;overflow-x:auto;border:1px solid #CEDDD5;border-radius:10px;margin:26px 0}\n.pat-table table{border-collapse:collapse;width:100%;min-width:610px;font:14px\/1.65 system-ui,sans-serif}\n.pat-table th{background:#215957;color:white;text-align:left;padding:14px 16px;font-weight:650}\n.pat-table td{padding:13px 16px;vertical-align:top;border-bottom:1px solid #DFE7DF}\n.pat-table tbody tr:nth-child(even){background:#F2F6F0}\n.pat-table td:first-child{font-weight:600}\npre.pat-code{max-width:100%;overflow-x:auto;white-space:pre;padding:24px;border-radius:10px;background:#142F3C;color:#ECF7EF;font:14px\/1.7 Consolas,monospace;margin:24px 0}\n.pat-code code{font:inherit;white-space:pre;overflow-wrap:normal}\nfigure.pat-image{margin:30px 0}.pat-image img{display:block;width:100%;height:auto;border-radius:12px}\n.pat-image figcaption{font:14px\/1.6 system-ui,sans-serif;color:#627773;margin-top:10px}\n@media(max-width:650px){p.pat-p,ul.pat-list{font-size:16px}h2.pat-h2{font-size:26px;margin-top:44px}h3.pat-h3{font-size:20px}ul.pat-toc{columns:1}pre.pat-code{padding:18px;font-size:13px}p.pat-quick{padding:18px}.pat-table th,.pat-table td{padding:11px 12px}}\n\n\/* Native image blocks: same presentation as the approved preview. *\/\nfigure.wp-block-image.pat-image{display:block;max-width:100%;margin:30px 0}\nfigure.wp-block-image.pat-official{width:100%;max-width:848px;margin:30px auto}\nfigure.pat-image>a{display:block}figure.pat-image img{display:block;width:100%;max-width:100%;height:auto;border-radius:12px}\nfigure.pat-image figcaption.wp-element-caption{font:14px\/1.6 system-ui,sans-serif;color:#627773;margin:10px 0 0;text-align:left}\n.pat-image figcaption a{color:#146B61;text-decoration:underline;text-underline-offset:3px}\n<\/style>\n\n\n\n<p class=\"pat-p pat-eyebrow wp-block-paragraph\">PERPLEXITY API \u00b7 PYTHON-HANDLEIDING \u00b7 2026<\/p>\n\n\n\n<p class=\"pat-p wp-block-paragraph\">In deze tutorial over de Perplexity API leer je hoe je een Python-script kunt maken dat een antwoord retourneert met aanklikbare webbronnen. Gebruik de Agent API om een vraag te versturen, het antwoord te lezen, de bronvermeldingen te koppelen aan bron-ID\u2019s en een Markdown-bestand te exporteren dat je kunt bekijken.<\/p>\n\n\n\n<p class=\"pat-p wp-block-paragraph\">We zullen \u00e9\u00e9n vraag steeds weer gebruiken: <em>Hoe moet een klein Python-project gebruikmaken van virtuele omgevingen en afhankelijkheden beheren?<\/em> Begin met een eenvoudig verzoek en voeg vervolgens bronanalyse en domeinfilters toe. Je hebt basiskennis van Python nodig en een Perplexity-ontwikkelaarsaccount waarbij API-facturering is ingesteld.<\/p>\n\n\n\n<p class=\"pat-p wp-block-paragraph\">Als je AI ook gebruikt voor je dagelijkse onderzoek en schrijfwerk, <a href=\"https:\/\/www.glbgpt.com\/perplexity?inviter=hub_content_perplexity&amp;login=1\">Perplexity op GlobalGPT<\/a> biedt toegang binnen \u00e9\u00e9n alles-in-\u00e9\u00e9n AI-werkruimte, waardoor je minder vaak tussen afzonderlijke tools hoeft te schakelen. Die workflow voor consumenten staat los van de ontwikkelaarsleutel en de API-facturering die hier worden gebruikt.<\/p>\n\n\n\n<p class=\"pat-p pat-quick wp-block-paragraph\"><strong>Snel antwoord:<\/strong> Gebruik de <code>snel<\/code> Voorinstelling van de agent voor een eerste, op het web gebaseerd antwoord, lees <code>response.output_text<\/code> voor het antwoord, en lees de <code>zoekresultaten<\/code> item in <code>response.output<\/code> voor bronnen. Koppel elke inline-markering aan een bron op basis van de geretourneerde waarde <code>id<\/code>. Een bronvermelding betekent dat \u201chet antwoord naar dit resultaat verwijst\u201d; het garandeert niet dat de pagina elke bewering bewijst.<\/p>\n\n\n\n<p class=\"pat-p wp-block-paragraph\"><strong>Voorbeeldstatus:<\/strong> De syntaxis van het verzoek is in overeenstemming met de offici\u00eble documentatie, gecontroleerd op 28 september 2026. De citatiehulp is getest met offline voorbeeldgegevens; voor deze tutorial is geen betaald API-verzoek uitgevoerd. De bronrecords in de afbeelding dienen ter verduidelijking.<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><a href=\"https:\/\/www.glbgpt.com\/perplexity?inviter=hub_content_perplexity&amp;login=1\"><img alt=\"\" decoding=\"async\" src=\"https:\/\/wp.glbgpt.com\/wp-content\/uploads\/2025\/10\/image-33.png\" class=\"wp-image-2306\"\/><\/a><\/figure>\n\n\n\n<div class=\"wp-block-buttons is-content-justification-center is-layout-flex wp-container-core-buttons-is-layout-3e41869c wp-block-buttons-is-layout-flex\">\n<div class=\"wp-block-button\"><a class=\"wp-block-button__link has-black-color has-text-color has-background has-link-color has-medium-font-size has-custom-font-size wp-element-button\" href=\"https:\/\/www.glbgpt.com\/perplexity?inviter=hub_content_perplexity&amp;login=1\" style=\"background-color:#fec33a;line-height:1\"><strong>Probeer nu Perplexity &gt;<\/strong><\/a><\/div>\n<\/div>\n\n\n\n<ul class=\"wp-block-list pat-list pat-toc\">\n<li><a href=\"#api-choice\">Welke Perplexity-API moet je gebruiken?<\/a><\/li>\n\n\n\n<li><a href=\"#setup\">Stap 1: Vraag een API-sleutel aan en installeer Python<\/a><\/li>\n\n\n\n<li><a href=\"#first-request\">Stap 2: Dien je eerste verzoek met bron-aarding in<\/a><\/li>\n\n\n\n<li><a href=\"#sources\">Stap 3: Haal het antwoord eruit en koppel het aan de bronnen<\/a><\/li>\n\n\n\n<li><a href=\"#filters\">Stap 4: Verfijn het antwoord met zoekfilters<\/a><\/li>\n\n\n\n<li><a href=\"#export\">Stap 5: Sla een volledig antwoord op met aanklikbare bronnen<\/a><\/li>\n\n\n\n<li><a href=\"#advanced\">Streaming en gestructureerde uitvoer<\/a><\/li>\n\n\n\n<li><a href=\"#cost-errors\">Kosten en veelvoorkomende fouten<\/a><\/li>\n\n\n\n<li><a href=\"#migration\">Doorgaan vanaf een oudere Sonar-handleiding<\/a><\/li>\n\n\n\n<li><a href=\"#faq\">Veelgestelde vragen<\/a><\/li>\n<\/ul>\n\n\n\n<h2 id=\"api-choice\" class=\"wp-block-heading pat-h2\">Perplexity API-handleiding: kies de juiste API<\/h2>\n\n\n\n<p class=\"pat-p wp-block-paragraph\">Dit zijn interfaces voor ontwikkelaars. Het chatproduct kan soortgelijke functies op een andere manier aanbieden; ons overzicht van <a href=\"https:\/\/www.glbgpt.com\/hub\/what-are-the-main-features-of-perplexity-ai\/\">Functies van Perplexity<\/a> beschrijft de ervaring van de gebruiker.<\/p>\n\n\n\n<p class=\"pat-p wp-block-paragraph\">De verwarring van <a href=\"https:\/\/docs.perplexity.ai\/docs\/getting-started\/quickstart\">offici\u00eble API-snelstartgids<\/a> groepeert zijn ontwikkelaarsproducten op basis van de taak die je moet uitvoeren. Kies het kleinste oppervlak dat de gegevens oplevert die je applicatie daadwerkelijk nodig heeft.<\/p>\n\n\n\n<figure class=\"wp-block-table pat-table\"><table><thead><tr><th>API<\/th><th>Beste pasvorm<\/th><th>Wat je code ontvangt<\/th><\/tr><\/thead><tbody><tr><td><strong>Agent<\/strong><\/td><td>Een volledig antwoord op basis van zoekresultaten op het internet of andere hulpmiddelen<\/td><td>Getypte uitvoeritems, antwoordteksten en zoekresultaten<\/td><\/tr><tr><td><strong>Zoek op<\/strong><\/td><td>Uw applicatie zal de resultaten zelf rangschikken, filteren of samenvatten<\/td><td>Zoekresultaten zonder Perplexity te vragen het definitieve antwoord te geven<\/td><\/tr><tr><td><strong>Router<\/strong><\/td><td>Verzoeken doorsturen naar een geschikt model<\/td><td>Een modelantwoord dat via de router is geselecteerd<\/td><\/tr><tr><td><strong>Inbeddingen<\/strong><\/td><td>Semantisch zoeken en een RAG-index<\/td><td>Vectoren voor je eigen zoeklaag<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"pat-p wp-block-paragraph\">In deze tutorial wordt voor \u2018Agent\u2019 gekozen, omdat het gewenste resultaat een volledig antwoord plus de bronnen daarvan is. Voor de bredere onderzoeksworkflow kun je onze handleiding raadplegen over <a href=\"https:\/\/www.glbgpt.com\/hub\/how-to-use-perplexity-for-research\/\">het gebruik van Perplexity voor onderzoek<\/a>.<\/p>\n\n\n\n<p class=\"pat-p wp-block-paragraph\"><strong>Over Sonar:<\/strong> De huidige <a href=\"https:\/\/docs.perplexity.ai\/docs\/agent-api\/migrate-from-sonar\/overview\">overzicht van migratie<\/a> vermeldt dat Sonar Chat Completions nog steeds wordt ondersteund en raadt Agent aan voor alle nieuwe projecten. In deze handleiding wordt daarom gebruikgemaakt van Agent. Trek uit een in een oudere handleiding genoemde deadline niet de conclusie dat een oude integratie niet meer werkt.<\/p>\n\n\n\n<h2 id=\"setup\" class=\"wp-block-heading pat-h2\">Stap 1: Vraag een API-sleutel aan en installeer Python<\/h2>\n\n\n\n<h3 class=\"wp-block-heading pat-h3\">Maak de sleutel aan en regel de facturering<\/h3>\n\n\n\n<p class=\"pat-p wp-block-paragraph\"><a href=\"https:\/\/console.perplexity.ai\/\">Open de Perplexity API-console<\/a>, kies of maak het project aan dat je gaat gebruiken, stel de API-facturering in en maak een sleutel aan. Bewaar deze op de server. De ontwikkelaars-API\u2019s worden apart gefactureerd, los van de consumentenabonnementen; controleer het saldo van je project voordat je verzoeken indient.<\/p>\n\n\n\n<h3 class=\"wp-block-heading pat-h3\">Installeer de offici\u00eble SDK<\/h3>\n\n\n\n<pre class=\"wp-block-code pat-code\"><code>python -m venv .venv\n\n# macOS\/Linux: kies deze activeringsopdracht\nsource .venv\/bin\/activate\n\n# Windows PowerShell: gebruik in plaats daarvan deze opdracht\n.venv\\Scripts\\Activate.ps1\n\npython -m pip install --upgrade perplexityai<\/code><\/pre>\n\n\n\n<p class=\"pat-p wp-block-paragraph\">Gebruik Python 3.10 of nieuwer voor de onderstaande code. Activeer de omgeving met de opdracht die bij jouw besturingssysteem hoort en installeer vervolgens de SDK. Als PowerShell de activering blokkeert, gebruik dan <code>.venv\\Scripts\\python.exe<\/code> in plaats van <code>python<\/code> voor de installatie en het uitvoeren van scripts.<\/p>\n\n\n\n<p class=\"pat-p wp-block-paragraph\">De naam van het pakket is <code>perplexityai<\/code>, terwijl de Python-import als volgt luidt: <code>verbijstering<\/code>. Gebruik een virtuele omgeving, zodat de afhankelijkheden van deze tutorial geen invloed hebben op een ander project.<\/p>\n\n\n\n<p class=\"pat-p wp-block-paragraph\">In dit voorbeeld wordt een vraag over codering gebruikt, omdat de beweringen daarin kunnen worden getoetst aan de bijgewerkte documentatie. Onze gids voor <a href=\"https:\/\/www.glbgpt.com\/hub\/is-perplexity-good-for-coding\/\">Perplexity voor codering<\/a> legt uit hoe onderzoeksondersteuning zich verhoudt tot het zelf testen van code.<\/p>\n\n\n\n<h3 class=\"wp-block-heading pat-h3\">Stel de API-sleutel in als omgevingsvariabele<\/h3>\n\n\n\n<pre class=\"wp-block-code pat-code\"><code># macOS\/Linux\nexport PERPLEXITY_API_KEY=\"je-sleutel-hier\"\n\n# Windows PowerShell\n$env:PERPLEXITY_API_KEY = \"je-sleutel-hier\"<\/code><\/pre>\n\n\n\n<p class=\"pat-p wp-block-paragraph\">De SDK leest <code>PERPLEXITEIT_API_SLEUTEL<\/code> wanneer je de client aanmaakt. Plak de sleutel niet in een notitieboekje, voeg hem niet toe aan Git en stuur hem niet naar een browser. Als je lokaal een .env-bestand gebruikt, houd dat bestand dan buiten de versiebeheeromgeving en laad het met de door jou gekozen bibliotheek voor omgevingsvariabelen.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img fetchpriority=\"high\" decoding=\"async\" width=\"848\" height=\"632\" src=\"https:\/\/wp.glbgpt.com\/wp-content\/uploads\/2026\/09\/perplexity-api-official-sdk-authentication.webp\" alt=\"Offici\u00eble Perplexity-documentatie met uitleg over de installatie van de Python SDK en de omgevingsvariabele PERPLEXITY_API_KEY.\" class=\"wp-image-20033\" srcset=\"https:\/\/wp.glbgpt.com\/wp-content\/uploads\/2026\/09\/perplexity-api-official-sdk-authentication.webp 848w, https:\/\/wp.glbgpt.com\/wp-content\/uploads\/2026\/09\/perplexity-api-official-sdk-authentication-300x224.webp 300w, https:\/\/wp.glbgpt.com\/wp-content\/uploads\/2026\/09\/perplexity-api-official-sdk-authentication-16x12.webp 16w, https:\/\/wp.glbgpt.com\/wp-content\/uploads\/2026\/09\/perplexity-api-official-sdk-authentication-767x572.webp 767w\" sizes=\"(max-width: 848px) 100vw, 848px\" \/><\/figure>\n\n\n\n<h2 id=\"first-request\" class=\"wp-block-heading pat-h2\">Stap 2: Dien je eerste verzoek met bron-aarding in<\/h2>\n\n\n\n<p class=\"pat-p wp-block-paragraph\"><a href=\"https:\/\/docs.perplexity.ai\/docs\/agent-api\/quickstart\">De snelstartgids voor de Agent API<\/a> documenten <code>POST-https:\/\/api.perplexity.ai\/v1\/agent<\/code>. De Python-client verpakt het verzoek met <code>client.responses.create()<\/code>. De <code>snel<\/code> De standaardinstelling schakelt het zoeken op internet standaard in, waardoor het eerste voorbeeld kort blijft.<\/p>\n\n\n\n<pre class=\"wp-block-code pat-code\"><code>from perplexity import Perplexity\n\nclient = Perplexity()\n\nquestion = (\n    \"Hoe moet een klein Python-project gebruikmaken van virtuele omgevingen \"\n    \"en afhankelijkheden beheren?\"\n)\n\nresponse = client.responses.create(\n    preset=\"fast\",\n    input=question,\n)\n\nprint(response.output_text)<\/code><\/pre>\n\n\n\n<p class=\"pat-p wp-block-paragraph\">Sla het fragment op als <code>first_request.py<\/code>, voer vervolgens het volgende uit <code>python first_request.py<\/code> in dezelfde terminal waarin je de sleutel hebt ingesteld. Bij een geslaagde oproep zou er een niet-lege antwoordtekst moeten verschijnen. Als je bewijs nodig hebt voor het resultaat, ga dan verder met de stap voor het extraheren van de brontekst; tekst alleen is geen volledige controle.<\/p>\n\n\n\n<p class=\"pat-p wp-block-paragraph\">De eigenschap \u2018gemak\u2019 <code>uitvootekst<\/code> geeft je de definitieve tekst van het antwoord. Bewaar ook het volledige antwoordobject: de bronrecords en gebruiksgegevens staan in de getypte uitvoer, niet alleen in de afgedrukte alinea.<\/p>\n\n\n\n<h3 class=\"wp-block-heading pat-h3\">Hetzelfde verzoek met cURL<\/h3>\n\n\n\n<pre class=\"wp-block-code pat-code\"><code>curl https:\/\/api.perplexity.ai\/v1\/agent \\\n  -H \"Authorization: Bearer $PERPLEXITY_API_KEY\" \\\n  -H \"Content-Type: application\/json\" \\\n  -d '{\n    \"preset\": \"fast\",\n    \"input\": \"Hoe moet een klein Python-project virtuele omgevingen gebruiken en afhankelijkheden beheren?\"\n  }'<\/code><\/pre>\n\n\n\n<p class=\"pat-p wp-block-paragraph\">In dit cURL-voorbeeld wordt de Bash-syntaxis gebruikt voor macOS\/Linux of een Bash-compatibele shell. Bij elke uitvoering wordt er een nieuw factureerbaar verzoek verzonden. Gebruik dit alleen als je een probleem met een eindpunt wilt onderscheiden van een Python-probleem; voer niet elke versie uit alleen maar om het voorbeeld te volgen.<\/p>\n\n\n\n<h3 class=\"wp-block-heading pat-h3\">Equivalent in server-side JavaScript<\/h3>\n\n\n\n<p class=\"pat-p wp-block-paragraph\">Node.js 18+ bevat <code>ophalen<\/code>, dus voor een smoke-test aan de serverzijde is geen extra bibliotheek nodig. Lees de ruwe <code>uitvoer<\/code> items in het JSON-antwoord; de Python SDK biedt de handige <code>uitvootekst<\/code> accessoire.<\/p>\n\n\n\n<pre class=\"wp-block-code pat-code\"><code>const res = await fetch(\"https:\/\/api.perplexity.ai\/v1\/agent\", {\n  method: \"POST\",\n  headers: {\n    Authorization: `Bearer ${process.env.PERPLEXITY_API_KEY}`,\n    \"Content-Type\": \"application\/json\"\n  },\n  body: JSON.stringify({\n    preset: \"fast\",\n    input: \"Hoe moet een klein Python-project virtuele omgevingen gebruiken en afhankelijkheden beheren?\"\n  })\n});\nif (!res.ok) throw new Error(`Perplexity HTTP ${res.status}`);\nconsole.log(await res.json());<\/code><\/pre>\n\n\n\n<h2 id=\"sources\" class=\"wp-block-heading pat-h2\">Stap 3: Haal het antwoord eruit en koppel het aan de bronnen<\/h2>\n\n\n\n<p class=\"pat-p wp-block-paragraph\"><a href=\"https:\/\/docs.perplexity.ai\/docs\/agent-api\/migrate-from-sonar\/how-to#inline-citations\">De offici\u00eble richtlijnen voor het vermelden van bronnen<\/a> maakt een onderscheid tussen de proza-tekst en de bewijsstukken. Bronnen komen binnen in een <code>uitvoer<\/code> item met type <code>zoekresultaten<\/code>. Lees het artikel over <code>resultaten<\/code> en koppel elke bronvermelding aan het resultaat van de <code>id<\/code>. Een resultaat heeft een titel en een URL; zorg ervoor dat ontbrekende waarden worden verwerkt voordat het wordt weergegeven.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" width=\"848\" height=\"880\" src=\"https:\/\/wp.glbgpt.com\/wp-content\/uploads\/2026\/09\/perplexity-api-official-inline-citations.webp\" alt=\"Offici\u00eble Perplexity-documentatie waarin uitleg wordt gegeven over genummerde bronvermeldingen, bronvermeldingen op basis van brontype en koppelingen tussen markeringen en ID\u2019s van zoekresultaten.\" class=\"wp-image-20034\" srcset=\"https:\/\/wp.glbgpt.com\/wp-content\/uploads\/2026\/09\/perplexity-api-official-inline-citations.webp 848w, https:\/\/wp.glbgpt.com\/wp-content\/uploads\/2026\/09\/perplexity-api-official-inline-citations-289x300.webp 289w, https:\/\/wp.glbgpt.com\/wp-content\/uploads\/2026\/09\/perplexity-api-official-inline-citations-12x12.webp 12w, https:\/\/wp.glbgpt.com\/wp-content\/uploads\/2026\/09\/perplexity-api-official-inline-citations-767x796.webp 767w\" sizes=\"(max-width: 848px) 100vw, 848px\" \/><\/figure>\n\n\n\n<p class=\"pat-p wp-block-paragraph\">Dat laatste detail is belangrijk. Ga er niet zomaar vanuit dat \u201ccitation 1\u201d altijd het eerste element in een array is nadat een andere tool een item heeft toegevoegd. Stel een opzoeklijst op basis van ID samen en bepaal vervolgens welke markeringen daadwerkelijk in het antwoord voorkomen.<\/p>\n\n\n\n<pre class=\"wp-block-code pat-code\"><code>def field(obj, name, default=None):\n    return obj.get(name, default) if isinstance(obj, dict) else getattr(obj, name, default)\n\ndef source_index(output):\n    sources = {}\n    for item in output or []:\n    if field(item, \"type\") != \"search_results\":\n        continue\n    for result in field(item, \"results\", []) or []:\n            sid, url = field(result, \"id\"), field(result, \"url\")\n als sid None is:\n ga verder\n key = str(sid)\n als key in sources zit en field(sources[key], \"url\") != url:\n                raise ValueError(f\"Conflicterende URL\u2019s voor bron-ID {key}\")\n sources[key] = result\n    return sources\n\nsources = source_index(response.output)\nprint(sources.get(\"7\"))  # Een bron-ID, geen arraypositie 7<\/code><\/pre>\n\n\n\n<p class=\"pat-p wp-block-paragraph\">Het onderstaande volledige script herkent <code>[1]<\/code> en <code>[web:1]<\/code>, de gedocumenteerde citatieformulieren voor de gangbare voorinstellingen. De bovenstaande hulpfunctie verwerkt zowel SDK-objecten als woordenboeken en weigert conflicterende URL\u2019s die aan dezelfde ID zijn toegewezen. De functie hernummert de resultaten niet en raadt ook geen ontbrekende bron aan.<\/p>\n\n\n\n<p class=\"pat-p wp-block-paragraph\">Voor een uitgebreidere bespreking van de kwaliteit van bronvermeldingen, zie onze <a href=\"https:\/\/www.glbgpt.com\/hub\/perplexity-citation-accuracy\/\">Perplexity-handleiding voor nauwkeurigheid bij het citeren<\/a>. Een bronvermelding is een controlespoor; je applicatie heeft nog steeds een beleid nodig voor verouderde pagina\u2019s, dubbele URL\u2019s en niet-onderbouwde beweringen.<\/p>\n\n\n\n<p class=\"pat-p wp-block-paragraph\">Als de geretourneerde array bijvoorbeeld ID 2 gevolgd door ID 7 bevat, dan is de markering <code>[7]<\/code> moet naar ID 7 verwijzen. Als dezelfde URL onder ID\u2019s 7 en 9 voorkomt, kun je die URL \u00e9\u00e9n keer weergeven met behoud van beide ID\u2019s. Als ID 8 nooit verschijnt, behoud dan <code>[8]<\/code> zichtbaar maken en markeren als \u2018niet-overeenkomend\u2019.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" width=\"1024\" height=\"597\" src=\"https:\/\/wp.glbgpt.com\/wp-content\/uploads\/2026\/09\/perplexity-api-citation-id-workflow-1024x597.webp\" alt=\"Referentie 7 wordt gekoppeld aan het zoekresultaat met ID 7, zelfs als een ander resultaat als eerste wordt weergegeven.\" class=\"wp-image-20035\" srcset=\"https:\/\/wp.glbgpt.com\/wp-content\/uploads\/2026\/09\/perplexity-api-citation-id-workflow-1024x597.webp 1024w, https:\/\/wp.glbgpt.com\/wp-content\/uploads\/2026\/09\/perplexity-api-citation-id-workflow-300x175.webp 300w, https:\/\/wp.glbgpt.com\/wp-content\/uploads\/2026\/09\/perplexity-api-citation-id-workflow-768x448.webp 768w, https:\/\/wp.glbgpt.com\/wp-content\/uploads\/2026\/09\/perplexity-api-citation-id-workflow-18x10.webp 18w, https:\/\/wp.glbgpt.com\/wp-content\/uploads\/2026\/09\/perplexity-api-citation-id-workflow.webp 1440w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<h2 id=\"filters\" class=\"wp-block-heading pat-h2\">Stap 4: Verfijn het antwoord met zoekfilters<\/h2>\n\n\n\n<p class=\"pat-p wp-block-paragraph\">Zodra de basiszoekopdracht werkt, kun je de zoekopdracht verfijnen als je vraag een duidelijke afbakening heeft. Voor het maken van Python-pakketten zijn de taaldocumentatie en de handleiding voor het maken van pakketten betere uitgangspunten dan een willekeurige tutorial.<\/p>\n\n\n\n<pre class=\"wp-block-code pat-code\"><code>response = client.responses.create(\n    preset=\"fast\",\n    input=(\n \"Hoe moet een klein Python-project gebruikmaken van virtuele omgevingen \"\n \"en afhankelijkheden beheren? Verwijs naar de richtlijnen die je gebruikt.\"\n    ),\n    tools=[\n {\n \"type\": \"web_search\",\n \"filters\": {\n \"search_domain_filter\": [\n \"docs.python.org\",\n                    \"packaging.python.org\",\n ]\n },\n }\n    ],\n)<\/code><\/pre>\n\n\n\n<p class=\"pat-p wp-block-paragraph\">Het filter hoort thuis in de configuratie van de zoekfunctie op het web. In de documentatie over de migratie wordt ook beschreven <code>zoekfilter_op_recente_resultaten<\/code> voor vragen waarbij de actualiteit van belang is. Gebruik \u2018recency\u2019 wanneer de vraag afhankelijk is van recente publicaties of nieuws; bij een zeer beperkte combinatie van vakgebied en datum kan het zijn dat je te weinig bewijsmateriaal hebt.<\/p>\n\n\n\n<p class=\"pat-p wp-block-paragraph\">Als je een vraag hebt over releases van de afgelopen maand, voeg dan toe: <code>\"search_recency_filter\": \"maand\"<\/code> naast <code>zoekfilter_domein<\/code>. Laat dit weg uit het voorbeeld met de virtuele omgeving: stabiele documentatie kan een oudere publicatiedatum hebben. Als je overschakelt van een vooraf ingesteld model naar een rechtstreeks geselecteerd model, neem dan expliciet de tool voor het zoeken op internet op.<\/p>\n\n\n\n<p class=\"pat-p wp-block-paragraph\">Vergelijk tijdens de ontwikkeling de gefilterde en ongefilterde resultaten. Als het antwoord verandert, noteer dan waarom: een filter kan nuttige context verwijderen, of het kan pagina\u2019s met een lage autoriteit verwijderen die het model afleidden. Dit is een kwaliteitsbeslissing, geen garantie dat elke overgebleven pagina correct is.<\/p>\n\n\n\n<p class=\"pat-p wp-block-paragraph\">Als je applicatie alleen gerangschikte links en fragmenten nodig heeft, roep dan de <a href=\"https:\/\/docs.perplexity.ai\/docs\/getting-started\/quickstart\">Zoek-API<\/a> en voer de synthese zelf uit. Die scheiding kan het controleren en in de cache opslaan vergemakkelijken. Zie voor een uitgebreidere vergelijking met Google <a href=\"https:\/\/www.glbgpt.com\/hub\/how-is-perplexity-different-than-google\/\">waarin Perplexity verschilt van Google<\/a>.<\/p>\n\n\n\n<h2 id=\"export\" class=\"wp-block-heading pat-h2\">Stap 5: Sla een volledig antwoord op met aanklikbare bronnen<\/h2>\n\n\n\n<p class=\"pat-p wp-block-paragraph\">Sla het volgende op als <code>perplexity_tutorial.py<\/code>. Het is een op zichzelf staand programma: het bevat de bronhelper, past het Python-documentatiedomeinfilter toe, zet overeenkomende citatiemarkeringen om in links, groepeert dubbele URL\u2019s zonder ID\u2019s te verliezen en slaat het volledige SDK-antwoord samen met de Markdown op.<\/p>\n\n\n\n<pre class=\"wp-block-code pat-code\"><code>from pathlib import Path\nfrom collections import defaultdict\nfrom urllib.parse import urlsplit\nimport json\nimport re\n\nQUESTION = (\n    \"How should a small Python project use virtual environments \"\n    \"and manage dependencies?\"\n)\n# Supports the documented &#91;1] and &#91;web:1] forms in prose answers.\nCITATION_RE = re.compile(r\"(?&lt;!!)\\&#91;(?:web:)?(\\d+)\\](?!\\()\")\n\ndef field(obj, name, default=None):\n    return obj.get(name, default) if isinstance(obj, dict) else getattr(obj, name, default)\n\ndef source_index(output):\n    sources = {}\n    for item in output or &#91;]:\n        if field(item, \"type\") != \"search_results\":\n            continue\n        for result in field(item, \"results\", &#91;]) or &#91;]:\n            sid, url = field(result, \"id\"), field(result, \"url\")\n            if sid is None:\n                continue\n            key = str(sid)\n            if key in sources and field(sources&#91;key], \"url\") != url:\n                raise ValueError(f\"Conflicting URLs for source ID {key}\")\n            sources&#91;key] = result\n    return sources\n\ndef safe_url(value):\n    if not isinstance(value, str):\n        return None\n    parsed = urlsplit(value)\n    if parsed.scheme not in (\"http\", \"https\") or not parsed.netloc:\n        return None\n    # Protect a Markdown angle-bracket destination.\n    return value.replace(\"&lt;\", \"%3C\").replace(\"&gt;\", \"%3E\").replace(\" \", \"%20\")\n\ndef md_label(value):\n    return re.sub(r\"(&#91;\\\\\\&#91;\\]&lt;&gt;])\", r\"\\\\\\1\", str(value).replace(\"\\n\", \" \"))\n\ndef export_markdown(answer, output, question=QUESTION):\n    sources = source_index(output)\n    cited = list(dict.fromkeys(CITATION_RE.findall(answer)))\n    missing = &#91;\n        sid for sid in cited\n        if sid not in sources or not safe_url(field(sources&#91;sid], \"url\"))\n    ]\n    def link(match):\n        sid = match.group(1)\n        url = safe_url(field(sources.get(sid, {}), \"url\"))\n        return f\"&#91;{match.group(0)&#91;1:-1]}](&lt;{url}&gt;)\" if url else match.group(0)\n\n    # Keep every ID when the same URL appears under different IDs.\n    grouped = defaultdict(list)\n    titles = {}\n    for sid in cited:\n        source = sources.get(sid, {})\n        url = safe_url(field(source, \"url\"))\n        if url:\n            grouped&#91;url].append(sid)\n            titles.setdefault(url, field(source, \"title\") or url)\n\n    lines = &#91;\"# Source-grounded answer\", \"\", question, \"\",\n             CITATION_RE.sub(link, answer), \"\", \"## Cited sources\", \"\"]\n    for url, ids in grouped.items():\n        lines.append(f\"- IDs {', '.join(ids)}: &#91;{md_label(titles&#91;url])}](&lt;{url}&gt;)\")\n    if missing:\n        lines.append(\"- Unmatched or unusable source IDs: \" + \", \".join(missing))\n    if not cited:\n        lines.append(\"- No recognized inline citations; evidence not verified.\")\n    lines.extend(&#91;\"\", \"Source links require review; matching IDs does not verify claims.\"])\n    return \"\\n\".join(lines) + \"\\n\"\n\ndef main():\n    from perplexity import Perplexity\n    response = Perplexity().responses.create(\n        preset=\"fast\",\n        input=QUESTION,\n        tools=&#91;{\"type\": \"web_search\", \"filters\": {\n            \"search_domain_filter\": &#91;\"docs.python.org\", \"packaging.python.org\"]\n        }}],\n    )\n    answer = response.output_text or \"\"\n    if not answer.strip():\n        raise RuntimeError(\"No answer text returned; inspect response status and errors.\")\n    Path(\"perplexity-response.json\").write_text(\n        response.model_dump_json(indent=2), encoding=\"utf-8\"\n    )\n    Path(\"perplexity-answer.md\").write_text(\n        export_markdown(answer, response.output), encoding=\"utf-8\"\n    )\n    print(\"Saved perplexity-answer.md and perplexity-response.json\")\n\nif __name__ == \"__main__\":\n    main()\n\n<\/code><\/pre>\n\n\n\n<p class=\"pat-p wp-block-paragraph\">Uitvoeren <code>python perplexity_tutorial.py<\/code> vanuit je projectmap. Het schrijft <code>perplexity-answer.md<\/code> en <code>perplexity-response.json<\/code> daar, waarbij eerdere bestanden met die namen worden vervangen. Het Markdown-bestand bevat de vraag, het gekoppelde antwoord, de aangehaalde bronnen en eventuele niet-overeenkomende ID\u2019s. Het JSON-bestand bewaart de geretourneerde uitvoer en het gebruik voor diagnostische doeleinden.<\/p>\n\n\n\n<p class=\"pat-p wp-block-paragraph\">De parser is gericht op de gedocumenteerde vormen met \u00e9\u00e9n markering in proza. Het is geen volledige Markdown-parser: als je applicatie vraagt om willekeurige Markdown, codevoorbeelden of citaten zoals <code>[1,2]<\/code>, voeg een syntaxisgevoelige renderer en tests voor dat formaat toe. Herinterpreteer onbekende markeringen niet zonder waarschuwing.<\/p>\n\n\n\n<h3 class=\"wp-block-heading pat-h3\">Controleer of de gelinkte pagina het antwoord ondersteunt<\/h3>\n\n\n\n<p class=\"pat-p wp-block-paragraph\">Controleer in dit voorbeeld of de aangehaalde documentatie daadwerkelijk uitleg geeft over het isoleren van de omgeving en het installeren van afhankelijkheden. Een link naar de Python-homepage is minder nuttig dan het relevante gedeelte van de documentatie. Als in een antwoord een specifieke opdracht wordt aanbevolen, controleer dan eerst het besturingssysteem en de Python-versie voordat je deze uitvoert. Mark beweert dat de aangehaalde tekst het probleem niet als \u2018onopgelost\u2019 bestempelt.<\/p>\n\n\n\n<h2 id=\"advanced\" class=\"wp-block-heading pat-h2\">Voeg indien nodig streaming- of gestructureerde uitvoer toe<\/h2>\n\n\n\n<h3 class=\"wp-block-heading pat-h3\">Streaming<\/h3>\n\n\n\n<p class=\"pat-p wp-block-paragraph\">Streaming vermindert de waargenomen vertraging bij een chatinterface. In de migratiehandleiding voor agenten worden tekstdelta-gebeurtenissen beschreven, zoals <code>response.output_text.delta<\/code>. Geef die delta's weer zodra ze binnenkomen, maar verzamel ook de definitieve antwoorditems, zodat je gebruikersinterface de bronnen kan weergeven zodra het antwoord compleet is. Een tekststroom op zich is nog geen bronnenlijst.<\/p>\n\n\n\n<p class=\"pat-p wp-block-paragraph\">Het volgende is uitsluitend een tekstweergave. Bewaar de niet-streaming-export voor je eerste volledige bronrecord; bij een productie-implementatie met streaming moeten ook de tool-\/uitvoergebeurtenissen worden verzameld en moet worden omgegaan met onderbroken of mislukte uitvoeringen.<\/p>\n\n\n\n<pre class=\"wp-block-code pat-code\"><code>stream = client.responses.create(\n    preset=\"fast\", input=question, stream=True\n)\nfor event in stream:\n    if event.type == \"response.output_text.delta\":\n print(event.delta, end=\"\", flush=True)<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading pat-h3\">Gestructureerde uitvoer<\/h3>\n\n\n\n<p class=\"pat-p wp-block-paragraph\">Gebruik een gestructureerde respons wanneer code verderop velden nodig heeft zoals <code>antwoord<\/code>, <code>confidence_note<\/code> en <code>vervolgvragen<\/code>. Bewaar bron-ID's als een apart veld of behoud de oorspronkelijke uitvoer van Agent, zodat je schema de bewijzen niet verbergt. Controleer het schema aan de hand van je eigen testcases voordat je er in een workflow op vertrouwt.<\/p>\n\n\n\n<p class=\"pat-p wp-block-paragraph\">De migratie-referentie blijft behouden <code>response_format<\/code> met <code>type: \"json_schema\"<\/code> voor gestructureerde uitvoer. Definieer verplichte velden en verbied waar nodig onverwachte eigenschappen. Schemavaliditeitscontroles hebben betrekking op de vorm, niet op de waarheid: bron-ID\u2019s moeten nog steeds verwijzen naar daadwerkelijk geretourneerde records, en een door het model gegenereerd betrouwbaarheidslabel is geen maatstaf voor nauwkeurigheid.<\/p>\n\n\n\n<h2 id=\"cost-errors\" class=\"wp-block-heading pat-h2\">Kosten en veelvoorkomende fouten bij de Perplexity API<\/h2>\n\n\n\n<p class=\"pat-p wp-block-paragraph\"><a href=\"https:\/\/docs.perplexity.ai\/docs\/getting-started\/pricing\">De offici\u00eble prijspagina van Perplexity<\/a>, geraadpleegd op 28 september 2026, maakt een onderscheid tussen tokens van het Agent-model en toolaanroepen. Hieronder volgen de USD-kosten voor tools en zoekopdrachten. De <code>snel<\/code> Vooraf ingestelde agent en <code>search_type: \"snel\"<\/code> dit zijn verschillende configuratieopties; leid de zoekfrequentie niet af uit de naam van de voorinstelling.<\/p>\n\n\n\n<figure class=\"wp-block-table pat-table\"><table><thead><tr><th>Factureerbare handeling<\/th><th>USD per aandeel<\/th><th>USD per 1.000<\/th><\/tr><\/thead><tbody><tr><td>Standaardwebzoekopdracht via Agent<\/td><td>$0.0025<\/td><td>$2.50<\/td><\/tr><tr><td>Het aanroepen van Agent Fast Search<\/td><td>$0.001<\/td><td>$1.00<\/td><\/tr><tr><td>URL ophalen door agent<\/td><td>$0.0005<\/td><td>$0.50<\/td><\/tr><tr><td>Zoek-API: verzoek geslaagd<\/td><td>$0.005<\/td><td>$5.00<\/td><\/tr><tr><td>Zoek-API met Fast Search<\/td><td>$0.001<\/td><td>$1.00<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"736\" height=\"1024\" src=\"https:\/\/wp.glbgpt.com\/wp-content\/uploads\/2026\/09\/perplexity-api-official-tool-search-pricing-736x1024.webp\" alt=\"Offici\u00eble Perplexity-prijstabellen met de prijzen voor het gebruik van de Agent-tool en de Search API per 1.000 verzoeken.\" class=\"wp-image-20036\" srcset=\"https:\/\/wp.glbgpt.com\/wp-content\/uploads\/2026\/09\/perplexity-api-official-tool-search-pricing-736x1024.webp 736w, https:\/\/wp.glbgpt.com\/wp-content\/uploads\/2026\/09\/perplexity-api-official-tool-search-pricing-216x300.webp 216w, https:\/\/wp.glbgpt.com\/wp-content\/uploads\/2026\/09\/perplexity-api-official-tool-search-pricing-9x12.webp 9w, https:\/\/wp.glbgpt.com\/wp-content\/uploads\/2026\/09\/perplexity-api-official-tool-search-pricing-768x1068.webp 768w, https:\/\/wp.glbgpt.com\/wp-content\/uploads\/2026\/09\/perplexity-api-official-tool-search-pricing.webp 848w\" sizes=\"(max-width: 736px) 100vw, 736px\" \/><\/figure>\n\n\n\n<p class=\"pat-p wp-block-paragraph\"><strong>Voorbeeld:<\/strong> 1.000 standaard webzoekopdrachten plus 1.000 URL-opvragingen kosten <strong>$3.00 aan gereedschapskosten<\/strong> ($2.50 + $0.50), exclusief modeltokens of andere kosten. Dit is een geschatte werklast, geen gemeten kostprijs voor de tutorial. E\u00e9n enkel verzoek van een agent kan meerdere tools activeren. Controleer, indien beschikbaar, <code>gebruik.kosten.totale_kosten<\/code> op het ingevulde antwoordformulier.<\/p>\n\n\n\n<figure class=\"wp-block-table pat-table\"><table><thead><tr><th>Symptoom<\/th><th>Wat moet je als eerste controleren?<\/th><\/tr><\/thead><tbody><tr><td>401 of 403<\/td><td>De naam van de omgevingsvariabele, de geldigheid van de sleutel, de toegang tot het account en of het verzoek het huidige eindpunt bereikt.<\/td><\/tr><tr><td>Fout in de facturering of het quotum<\/td><td>API-tegoed, betalingsinstellingen, kosten voor modellen\/tools en accountlimieten. Een Perplexity-abonnement voor consumenten houdt niet automatisch in dat er API-tegoed is.<\/td><\/tr><tr><td>429<\/td><td>Verzoeklimieten en herhalingsgedrag. Gebruik een begrensde exponenti\u00eble back-off en vermijd het blindelings herhalen van een verzoek waarvoor al is betaald.<\/td><\/tr><tr><td>Time-out<\/td><td>Instellingen voor netwerkpad, promptgrootte, aantal tools en time-out van de client. Registreer een verzoek-ID als de SDK er een verstrekt, maar registreer nooit de sleutel.<\/td><\/tr><tr><td>Het antwoord heeft geen overeenkomende bronnen<\/td><td>Controleer het ruwe materiaal <code>response.output<\/code>, de opmaak van bronvermeldingen en bron-ID\u2019s; markeer het antwoord als \u2018niet geverifieerd\u2019 in plaats van links te verzinnen.<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"pat-p wp-block-paragraph\">De Search API brengt succesvolle verzoeken in rekening, ook als er geen resultaten worden geretourneerd; voor de prijs van het verzoek worden geen extra tokenkosten in rekening gebracht. De kosten voor agents zijn afhankelijk van modeltokens en tools. Houd deze factureringseenheden gescheiden wanneer je een workflow met antwoorden vergelijkt met een workflow die uitsluitend uit zoekopdrachten bestaat.<\/p>\n\n\n\n<p class=\"pat-p wp-block-paragraph\">Voor een vergelijking van API-budgetten, onze <a href=\"https:\/\/www.glbgpt.com\/hub\/perplexity-api-cost-2025\/\">Kostenoverzicht voor de Perplexity API<\/a> geeft aanvullende informatie, terwijl de offici\u00eble prijspagina de maatstaf blijft voor de huidige tarieven.<\/p>\n\n\n\n<h2 id=\"migration\" class=\"wp-block-heading pat-h2\">Doorgaan vanaf een oudere Sonar-handleiding<\/h2>\n\n\n\n<p class=\"pat-p wp-block-paragraph\">Veel zoekresultaten tonen nog steeds de oudere weergave van \u2018Chat Completions\u2019. De migratiehandleiding voor agenten maakt gebruik van een directe conceptuele koppeling. Als je labels uit het consumentenmodel vergelijkt met API-voorinstellingen, kun je onze uitleg over <a href=\"https:\/\/www.glbgpt.com\/hub\/what-llm-does-perplexity-use\/\">wat LLM Perplexity gebruikt<\/a> biedt achtergrondinformatie, maar is geen vervanging voor de documentatie van de Agent API.<\/p>\n\n\n\n<figure class=\"wp-block-table pat-table\"><table><thead><tr><th>Ouder Sonar-patroon<\/th><th>Agent-API-patroon<\/th><\/tr><\/thead><tbody><tr><td><code>berichten<\/code><\/td><td><code>invoer<\/code><\/td><\/tr><tr><td><code>model<\/code><\/td><td><code>vooraf ingesteld<\/code><\/td><\/tr><tr><td><code>choices[0].message.content<\/code><\/td><td><code>uitvootekst<\/code><\/td><\/tr><tr><td>Oudere aannames met betrekking tot de citatenmatrix<\/td><td><code>zoekresultaten<\/code> uitvoeritem en op ID gebaseerde koppeling<\/td><\/tr><tr><td>Zoekparameters in het verzoek<\/td><td><code>tools=[{\"type\":\"web_search\",\"filters\":{...}}]<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"pat-p wp-block-paragraph\">Lees het liveverslag <a href=\"https:\/\/docs.perplexity.ai\/docs\/agent-api\/migrate-from-sonar\/overview\">overzicht van migratie<\/a> en <a href=\"https:\/\/docs.perplexity.ai\/docs\/agent-api\/migrate-from-sonar\/how-to\">migratiegegevens<\/a> voordat u de productiecode wijzigt. De vooraf ingestelde toewijzingen vormen een uitgangspunt, maar zijn geen garantie dat oude en nieuwe modellen dezelfde kwaliteit, latentie of kosten opleveren.<\/p>\n\n\n\n<h2 id=\"faq\" class=\"wp-block-heading pat-h2\">Veelgestelde vragen<\/h2>\n\n\n\n<h3 class=\"wp-block-heading pat-h3\">Is de Perplexity API gratis?<\/h3>\n\n\n\n<p class=\"pat-p wp-block-paragraph\">De API's worden per gebruik gefactureerd, conform de huidige quickstart- en prijsdocumentatie. Ga er niet vanuit dat een consumentenabonnement, een proefperiode of een promotietegoed ervoor zorgt dat elk API-verzoek gratis is.<\/p>\n\n\n\n<h3 class=\"wp-block-heading pat-h3\">Heb ik Perplexity Pro nodig om de API te gebruiken?<\/h3>\n\n\n\n<p class=\"pat-p wp-block-paragraph\">API-toegang en een Pro-abonnement voor consumenten zijn afzonderlijke producten. Maak API-inloggegevens aan en controleer de API-facturering voor het ontwikkelaarsaccount dat je van plan bent te gebruiken.<\/p>\n\n\n\n<h3 class=\"wp-block-heading pat-h3\">Moet ik de Agent API of de Search API gebruiken?<\/h3>\n\n\n\n<p class=\"pat-p wp-block-paragraph\">Kies \u2018Agent\u2019 als je een kant-en-klaar, onderbouwd antwoord met bronvermeldingen wilt. Kies \u2018Search\u2019 als je applicatie zelf moet zorgen voor rangschikking, filtering en synthese. Je kunt \u2018Search\u2019 combineren met je eigen model als je strikte controle wilt hebben over elke generatiestap.<\/p>\n\n\n\n<h3 class=\"wp-block-heading pat-h3\">Kan ik Perplexity vanuit JavaScript aanroepen?<\/h3>\n\n\n\n<p class=\"pat-p wp-block-paragraph\">Ja. Gebruik het bovenstaande Node.js-voorbeeld aan de serverzijde of de offici\u00eble JavaScript SDK. Bewaar de sleutel op de server. Controleer bij het inlezen van onbewerkte JSON de getypeerde uitvoeritems en pas dezelfde regels voor het toewijzen van bron-ID's toe.<\/p>\n\n\n\n<h3 class=\"wp-block-heading pat-h3\">Zijn Perplexity-verwijzingen gegarandeerd correct?<\/h3>\n\n\n\n<p class=\"pat-p wp-block-paragraph\">Nee. Een bronvermelding geeft aan op welk zoekresultaat het antwoord betrekking heeft. Je aanvraag of beoordelaar moet nog steeds controleren of de informatie actueel en betrouwbaar is en of de pagina de exacte bewering ondersteunt.<\/p>\n\n\n\n<h3 class=\"wp-block-heading pat-h3\">Waarom heeft mijn parser geen bronnen gevonden?<\/h3>\n\n\n\n<p class=\"pat-p wp-block-paragraph\">Controleer de typen van de ruwe uitvoer, ga na of de zoekopdracht op het web is uitgevoerd en kijk of je reguliere expressie overeenkomt met de citatievorm van de voorinstelling. Als er geen markering verschijnt, sla het antwoord dan op als \u2018niet geverifieerd\u2019 en onderzoek het verzoek in plaats van een link toe te voegen op basis van een gok.<\/p>\n\n\n\n<h3 class=\"wp-block-heading pat-h3\">Kan een GlobalGPT een Perplexity API-sleutel vervangen?<\/h3>\n\n\n\n<p class=\"pat-p wp-block-paragraph\">GlobalGPT is een alles-in-\u00e9\u00e9n AI-werkruimte voor dagelijks gebruik van AI. Het abonnement en de toegang tot modellen staan los van een Perplexity-ontwikkelaarsaccount, API-sleutel en API-tegoed; in deze Python-handleiding wordt gebruikgemaakt van het ontwikkelaarsaccount.<\/p>\n\n\n\n<h2 id=\"checklist\" class=\"wp-block-heading pat-h2\">Een praktische checklist voor de lancering<\/h2>\n\n\n\n<ul class=\"wp-block-list pat-list pat-checklist\">\n<li>Maak een sleutel aan aan de serverzijde en bevestig de API-facturering.<\/li>\n\n\n\n<li>Voer de minimale versie uit <code>snel<\/code> Vraag dit aan voordat je filters toevoegt of gaat streamen.<\/li>\n\n\n\n<li>Sla het volledige antwoord op, niet alleen de zichtbare tekst van het antwoord.<\/li>\n\n\n\n<li>Koppel de citatiemarkeringen aan de teruggevonden bron-ID\u2019s en markeer de markeringen die niet overeenkomen.<\/li>\n\n\n\n<li>Controleer de aangehaalde pagina\u2019s op onderbouwing van de beweringen, actualiteit en dubbele URL\u2019s.<\/li>\n\n\n\n<li>Controleer nogmaals de documentatie over Live Agent, de prijzen en de migratie voordat u de oplossing implementeert.<\/li>\n<\/ul>\n\n\n\n<p class=\"pat-p wp-block-paragraph\">Je beschikt nu over het basispatroon voor een betrouwbare Perplexity API-integratie: stel een gerichte vraag, laat de Agent API zoeken, houd het antwoord en het bewijsmateriaal bij elkaar en zorg ervoor dat elke bronvermelding controleerbaar is. Voeg hier vervolgens caching, herhalingspogingen en je eigen beoordelingsregels toe binnen dezelfde bron-ID-workflow.<\/p>\n\n\n\n<script type=\"application\/ld+json\">{\n    \"@context\": \"https:\\\/\\\/schema.org\",\n    \"@type\": \"FAQPage\",\n    \"mainEntity\": [\n        {\n            \"@type\": \"Question\",\n            \"name\": \"Is the Perplexity API free?\",\n            \"acceptedAnswer\": {\n                \"@type\": \"Answer\",\n                \"text\": \"The APIs are pay-as-you-go according to the current quickstart and pricing documentation. Do not assume that a consumer subscription, a trial or a promotional credit makes every API request free.\"\n            }\n        },\n        {\n            \"@type\": \"Question\",\n            \"name\": \"Do I need Perplexity Pro to use the API?\",\n            \"acceptedAnswer\": {\n                \"@type\": \"Answer\",\n                \"text\": \"API access and a consumer Pro plan are separate products. Create API credentials and check API billing for the developer account you plan to use.\"\n            }\n        },\n        {\n            \"@type\": \"Question\",\n            \"name\": \"Should I use Agent API or Search API?\",\n            \"acceptedAnswer\": {\n                \"@type\": \"Answer\",\n                \"text\": \"Choose Agent when you want a finished grounded answer with sources. Choose Search when your application should own ranking, filtering and synthesis. You can combine Search with your own model if you need strict control over every generation step.\"\n            }\n        },\n        {\n            \"@type\": \"Question\",\n            \"name\": \"Can I call Perplexity from JavaScript?\",\n            \"acceptedAnswer\": {\n                \"@type\": \"Answer\",\n                \"text\": \"Yes. Use the server-side Node.js example above or the official JavaScript SDK. Keep the key on the server. When reading raw JSON, inspect the typed output items and apply the same source-ID mapping rules.\"\n            }\n        },\n        {\n            \"@type\": \"Question\",\n            \"name\": \"Are Perplexity citations guaranteed to be correct?\",\n            \"acceptedAnswer\": {\n                \"@type\": \"Answer\",\n                \"text\": \"No. A citation tells you which returned result the answer points to. Your application or reviewer must still check freshness, authority and whether the page supports the exact claim.\"\n            }\n        },\n        {\n            \"@type\": \"Question\",\n            \"name\": \"Why did my parser find no sources?\",\n            \"acceptedAnswer\": {\n                \"@type\": \"Answer\",\n                \"text\": \"Inspect the raw output item types, confirm that web search ran, and check whether your regular expression matches the preset's citation form. If no marker appears, save the answer as unverified and investigate the request rather than adding a guessed link.\"\n            }\n        },\n        {\n            \"@type\": \"Question\",\n            \"name\": \"Can GlobalGPT replace a Perplexity API key?\",\n            \"acceptedAnswer\": {\n                \"@type\": \"Answer\",\n                \"text\": \"GlobalGPT is an all-in-one AI workspace for everyday AI use. Its subscription and model access are separate from a Perplexity developer account, API key and API credits; this Python tutorial uses the developer account.\"\n            }\n        }\n    ]\n}<\/script>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>","protected":false},"excerpt":{"rendered":"<p>PERPLEXITY API \u00b7 PYTHON-HANDLEIDING \u00b7 2026 In deze handleiding voor de Perplexity API leer je hoe je een Python-script kunt maken dat een antwoord retourneert met aanklikbare webbronnen. Gebruik de Agent API om een vraag te verzenden, het antwoord te lezen, de bronvermeldingen te koppelen aan bron-ID\u2019s en een Markdown-bestand te exporteren dat je kunt bekijken. We zullen [\u2026]<\/p>","protected":false},"author":17,"featured_media":20032,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"_seopress_robots_primary_cat":"","_seopress_titles_title":"Perplexity API Tutorial: Build Answers with Sources","_seopress_titles_desc":"Perplexity API tutorial for Python: get a key, build answers with clickable sources, and match citation IDs correctly. Follow the complete script step by step.","_seopress_robots_index":"","footnotes":""},"categories":[7],"tags":[],"class_list":["post-20031","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-ai-chat"],"acf":[],"_links":{"self":[{"href":"https:\/\/wp.glbgpt.com\/nl\/wp-json\/wp\/v2\/posts\/20031","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wp.glbgpt.com\/nl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wp.glbgpt.com\/nl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wp.glbgpt.com\/nl\/wp-json\/wp\/v2\/users\/17"}],"replies":[{"embeddable":true,"href":"https:\/\/wp.glbgpt.com\/nl\/wp-json\/wp\/v2\/comments?post=20031"}],"version-history":[{"count":2,"href":"https:\/\/wp.glbgpt.com\/nl\/wp-json\/wp\/v2\/posts\/20031\/revisions"}],"predecessor-version":[{"id":20038,"href":"https:\/\/wp.glbgpt.com\/nl\/wp-json\/wp\/v2\/posts\/20031\/revisions\/20038"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wp.glbgpt.com\/nl\/wp-json\/wp\/v2\/media\/20032"}],"wp:attachment":[{"href":"https:\/\/wp.glbgpt.com\/nl\/wp-json\/wp\/v2\/media?parent=20031"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wp.glbgpt.com\/nl\/wp-json\/wp\/v2\/categories?post=20031"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wp.glbgpt.com\/nl\/wp-json\/wp\/v2\/tags?post=20031"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}