{"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\/fr\/hub\/perplexity-api-tutorial","title":{"rendered":"Tutoriel sur l'API Perplexity : cr\u00e9er pas \u00e0 pas un circuit de sortie mis \u00e0 la masse de la source"},"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\">API PERPLEXITY \u00b7 TUTORIEL PYTHON \u00b7 2026<\/p>\n\n\n\n<p class=\"pat-p wp-block-paragraph\">Ce tutoriel sur l'API Perplexity vous explique comment cr\u00e9er un script Python qui renvoie une r\u00e9ponse contenant des sources Web cliquables. Utilisez l'API Agent pour envoyer une question, lire la r\u00e9ponse, associer ses marqueurs de citation aux identifiants des sources, puis exporter un fichier Markdown que vous pourrez consulter.<\/p>\n\n\n\n<p class=\"pat-p wp-block-paragraph\">Nous nous appuierons sur une seule question tout au long de ce texte : <em>Comment un petit projet Python devrait-il utiliser les environnements virtuels et g\u00e9rer ses d\u00e9pendances ?<\/em> Commencez par une requ\u00eate simple, puis ajoutez l'analyse de la source et les filtres de domaine. Vous devez disposer de connaissances de base en Python et d'un compte d\u00e9veloppeur Perplexity avec la facturation API configur\u00e9e.<\/p>\n\n\n\n<p class=\"pat-p wp-block-paragraph\">Si vous utilisez vous aussi l'IA pour vos recherches et vos travaux d'\u00e9criture au quotidien, <a href=\"https:\/\/www.glbgpt.com\/perplexity?inviter=hub_content_perplexity&amp;login=1\">Perplexity sur GlobalGPT<\/a> permet d'acc\u00e9der \u00e0 un espace de travail IA tout-en-un, ce qui \u00e9vite d'avoir \u00e0 passer d'un outil \u00e0 l'autre. Ce flux de travail destin\u00e9 aux consommateurs est distinct de la cl\u00e9 d\u00e9veloppeur et de la facturation des API utilis\u00e9es ici.<\/p>\n\n\n\n<p class=\"pat-p pat-quick wp-block-paragraph\"><strong>R\u00e9ponse rapide :<\/strong> Utilisez le <code>rapidement<\/code> Pr\u00e9r\u00e9glage de l'agent pour une premi\u00e8re r\u00e9ponse bas\u00e9e sur le Web, lire <code>response.output_text<\/code> pour conna\u00eetre la r\u00e9ponse, et lisez le <code>r\u00e9sultats_de_recherche<\/code> \u00e9l\u00e9ment dans <code>response.output<\/code> pour les sources. Associez chaque marqueur int\u00e9gr\u00e9 \u00e0 une source en fonction de la valeur renvoy\u00e9e par celui-ci <code>id<\/code>. Une r\u00e9f\u00e9rence signifie que \u201c la r\u00e9ponse conduit \u00e0 ce r\u00e9sultat \u201d ; elle ne garantit pas que la page d\u00e9montre chacune des affirmations.<\/p>\n\n\n\n<p class=\"pat-p wp-block-paragraph\"><strong>Exemple de statut :<\/strong> La syntaxe de la requ\u00eate est conforme \u00e0 la documentation officielle consult\u00e9e le 28 septembre 2026. L'outil d'aide \u00e0 la citation a \u00e9t\u00e9 test\u00e9 \u00e0 l'aide d'\u00e9chantillons de donn\u00e9es hors ligne ; aucune requ\u00eate API payante n'a \u00e9t\u00e9 effectu\u00e9e dans le cadre de ce tutoriel. Les enregistrements sources pr\u00e9sent\u00e9s dans l'illustration sont des exemples \u00e0 titre explicatif.<\/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>Essayez Perplexit\u00e9 maintenant &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\">Quelle API Perplexity devez-vous utiliser ?<\/a><\/li>\n\n\n\n<li><a href=\"#setup\">\u00c9tape 1 : Obtenir une cl\u00e9 API et configurer Python<\/a><\/li>\n\n\n\n<li><a href=\"#first-request\">\u00c9tape 2 : Envoyez votre premi\u00e8re requ\u00eate avec mise \u00e0 la terre \u00e0 la source<\/a><\/li>\n\n\n\n<li><a href=\"#sources\">\u00c9tape 3 : Extraire la r\u00e9ponse et identifier ses sources<\/a><\/li>\n\n\n\n<li><a href=\"#filters\">\u00c9tape 4 : Affiner la r\u00e9ponse \u00e0 l'aide des filtres de recherche<\/a><\/li>\n\n\n\n<li><a href=\"#export\">\u00c9tape 5 : Enregistrer une r\u00e9ponse compl\u00e8te avec des sources cliquables<\/a><\/li>\n\n\n\n<li><a href=\"#advanced\">Diffusion en continu et sortie structur\u00e9e<\/a><\/li>\n\n\n\n<li><a href=\"#cost-errors\">Co\u00fbts et erreurs courantes<\/a><\/li>\n\n\n\n<li><a href=\"#migration\">\u00c0 partir d'un ancien tutoriel sur Sonar<\/a><\/li>\n\n\n\n<li><a href=\"#faq\">Foire aux questions<\/a><\/li>\n<\/ul>\n\n\n\n<h2 id=\"api-choice\" class=\"wp-block-heading pat-h2\">Tutoriel sur l'API Perplexity : choisir la bonne API<\/h2>\n\n\n\n<p class=\"pat-p wp-block-paragraph\">Il s'agit d'interfaces destin\u00e9es aux d\u00e9veloppeurs. Le produit de chat peut proposer des fonctionnalit\u00e9s similaires sous une forme diff\u00e9rente ; notre pr\u00e9sentation de <a href=\"https:\/\/www.glbgpt.com\/hub\/what-are-the-main-features-of-perplexity-ai\/\">Fonctionnalit\u00e9s de Perplexity<\/a> d\u00e9crit l'exp\u00e9rience utilisateur.<\/p>\n\n\n\n<p class=\"pat-p wp-block-paragraph\">Perplexity\u2019s <a href=\"https:\/\/docs.perplexity.ai\/docs\/getting-started\/quickstart\">Guide de d\u00e9marrage rapide de l'API officielle<\/a> regroupe ses produits destin\u00e9s aux d\u00e9veloppeurs en fonction des t\u00e2ches \u00e0 accomplir. Choisissez la surface la plus petite qui g\u00e9n\u00e8re les donn\u00e9es dont votre application a r\u00e9ellement besoin.<\/p>\n\n\n\n<figure class=\"wp-block-table pat-table\"><table><thead><tr><th>API<\/th><th>Meilleure ad\u00e9quation<\/th><th>Ce que votre code re\u00e7oit<\/th><\/tr><\/thead><tbody><tr><td><strong>Agent<\/strong><\/td><td>Une r\u00e9ponse compl\u00e8te s'appuyant sur des recherches sur Internet ou d'autres outils<\/td><td>\u00c9l\u00e9ments de sortie saisis, texte des r\u00e9ponses et enregistrements des r\u00e9sultats de recherche<\/td><\/tr><tr><td><strong>Recherche<\/strong><\/td><td>Votre application classera, filtrera ou r\u00e9sumera elle-m\u00eame les r\u00e9sultats<\/td><td>R\u00e9sultats de recherche sans demander \u00e0 Perplexity de fournir la r\u00e9ponse d\u00e9finitive<\/td><\/tr><tr><td><strong>Routeur<\/strong><\/td><td>Acheminer les requ\u00eates vers un mod\u00e8le adapt\u00e9<\/td><td>Une r\u00e9ponse type s\u00e9lectionn\u00e9e via le routeur<\/td><\/tr><tr><td><strong>Repr\u00e9sentations<\/strong><\/td><td>Recherche s\u00e9mantique et index RAG<\/td><td>Donn\u00e9es vectorielles pour votre propre couche de recherche<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"pat-p wp-block-paragraph\">Ce tutoriel utilise \u00ab Agent \u00bb car le r\u00e9sultat souhait\u00e9 est une r\u00e9ponse compl\u00e8te accompagn\u00e9e de ses sources. Pour en savoir plus sur le processus de recherche dans son ensemble, consultez notre guide consacr\u00e9 \u00e0 <a href=\"https:\/\/www.glbgpt.com\/hub\/how-to-use-perplexity-for-research\/\">Utilisation de Perplexity \u00e0 des fins de recherche<\/a>.<\/p>\n\n\n\n<p class=\"pat-p wp-block-paragraph\"><strong>\u00c0 propos de Sonar :<\/strong> Le courant <a href=\"https:\/\/docs.perplexity.ai\/docs\/agent-api\/migrate-from-sonar\/overview\">Aper\u00e7u de la migration<\/a> pr\u00e9cise que la fonctionnalit\u00e9 \u00ab Sonar Chat Completions \u00bb est toujours prise en charge et recommande l'utilisation d'Agent pour tous les nouveaux projets. Ce tutoriel utilise donc Agent. Il ne faut pas en d\u00e9duire qu'une ancienne int\u00e9gration a cess\u00e9 de fonctionner simplement parce qu'une date butoir est mentionn\u00e9e dans un tutoriel plus ancien.<\/p>\n\n\n\n<h2 id=\"setup\" class=\"wp-block-heading pat-h2\">\u00c9tape 1 : Obtenir une cl\u00e9 API et configurer Python<\/h2>\n\n\n\n<h3 class=\"wp-block-heading pat-h3\">Cr\u00e9er la cl\u00e9 et pr\u00e9parer la facturation<\/h3>\n\n\n\n<p class=\"pat-p wp-block-paragraph\"><a href=\"https:\/\/console.perplexity.ai\/\">Ouvrir la console de l'API Perplexity<\/a>, choisissez ou cr\u00e9ez le projet que vous allez utiliser, configurez la facturation de l'API et cr\u00e9ez une cl\u00e9. Conservez-la c\u00f4t\u00e9 serveur. Les API pour d\u00e9veloppeurs sont factur\u00e9es s\u00e9par\u00e9ment des abonnements grand public ; v\u00e9rifiez le solde de votre projet avant d'effectuer des requ\u00eates.<\/p>\n\n\n\n<h3 class=\"wp-block-heading pat-h3\">Installez le SDK officiel<\/h3>\n\n\n\n<pre class=\"wp-block-code pat-code\"><code>python -m venv .venv\n\n# macOS\/Linux : choisissez cette commande d'activation\nsource .venv\/bin\/activate\n\n# Windows PowerShell : utilisez plut\u00f4t cette commande\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\">Utilisez Python 3.10 ou une version plus r\u00e9cente pour le code ci-dessous. Activez l'environnement \u00e0 l'aide de la commande adapt\u00e9e \u00e0 votre syst\u00e8me d'exploitation, puis installez le SDK. Si PowerShell bloque l'activation, utilisez <code>.venv\\Scripts\\python.exe<\/code> \u00e0 la place de <code>python<\/code> pour l'installation et l'ex\u00e9cution du script.<\/p>\n\n\n\n<p class=\"pat-p wp-block-paragraph\">Le nom du paquet est <code>perplexityai<\/code>, tandis que l'importation en Python est <code>perplexit\u00e9<\/code>. Utilisez un environnement virtuel afin que les d\u00e9pendances de ce tutoriel n'affectent pas un autre projet.<\/p>\n\n\n\n<p class=\"pat-p wp-block-paragraph\">Cet exemple s'appuie sur une question relative au codage, car ses affirmations peuvent \u00eatre v\u00e9rifi\u00e9es \u00e0 l'aide d'une documentation mise \u00e0 jour. Notre guide sur <a href=\"https:\/\/www.glbgpt.com\/hub\/is-perplexity-good-for-coding\/\">Perplexity pour le codage<\/a> explique comment le soutien \u00e0 la recherche s'inscrit dans le cadre des tests de code que vous effectuez vous-m\u00eame.<\/p>\n\n\n\n<h3 class=\"wp-block-heading pat-h3\">D\u00e9finissez la cl\u00e9 API en tant que variable d'environnement<\/h3>\n\n\n\n<pre class=\"wp-block-code pat-code\"><code># macOS\/Linux\nexport PERPLEXITY_API_KEY=\"votre-cl\u00e9-ici\"\n\n# Windows PowerShell\n$env:PERPLEXITY_API_KEY = \"votre-cl\u00e9-ici\"<\/code><\/pre>\n\n\n\n<p class=\"pat-p wp-block-paragraph\">Le SDK indique <code>PERPLEXIT\u00c9_CL\u00c9_API<\/code> lorsque vous cr\u00e9ez le client. Ne collez pas la cl\u00e9 dans un bloc-notes, ne la soumettez pas \u00e0 Git et ne l'envoyez pas \u00e0 un navigateur. Si vous utilisez un fichier .env en local, veillez \u00e0 ce que ce fichier ne soit pas soumis au contr\u00f4le de version et chargez-le \u00e0 l'aide de la biblioth\u00e8que de variables d'environnement de votre choix.<\/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=\"Documentation officielle de Perplexity pr\u00e9sentant l&#039;installation du SDK Python et la variable d&#039;environnement 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\">\u00c9tape 2 : Envoyez votre premi\u00e8re requ\u00eate avec mise \u00e0 la terre \u00e0 la source<\/h2>\n\n\n\n<p class=\"pat-p wp-block-paragraph\"><a href=\"https:\/\/docs.perplexity.ai\/docs\/agent-api\/quickstart\">Guide de d\u00e9marrage rapide de l'API Agent<\/a> documents <code>ARTICLE https:\/\/api.perplexity.ai\/v1\/agent<\/code>. Son client Python encapsule la requ\u00eate avec <code>client.responses.create()<\/code>. Le <code>rapidement<\/code> Ce param\u00e8tre par d\u00e9faut active la recherche sur le Web, ce qui permet de limiter la taille du premier exemple.<\/p>\n\n\n\n<pre class=\"wp-block-code pat-code\"><code>from perplexity import Perplexity\n\nclient = Perplexity()\n\nquestion = (\n    \"Comment un petit projet Python devrait-il utiliser les environnements virtuels \"\n    \"et g\u00e9rer ses d\u00e9pendances ?\"\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\">Enregistrez cet extrait sous le nom de <code>first_request.py<\/code>, puis ex\u00e9cutez <code>python first_request.py<\/code> dans le m\u00eame terminal que celui o\u00f9 vous avez d\u00e9fini la cl\u00e9. Si l'appel aboutit, un texte de r\u00e9ponse non vide devrait s'afficher. Si vous avez besoin d'une confirmation du r\u00e9sultat, passez \u00e0 l'\u00e9tape d'extraction de la source ; le texte seul ne constitue pas une v\u00e9rification compl\u00e8te.<\/p>\n\n\n\n<p class=\"pat-p wp-block-paragraph\">La propri\u00e9t\u00e9 de commodit\u00e9 <code>texte_de_sortie<\/code> vous fournit le texte de la r\u00e9ponse finale. Conservez \u00e9galement l'objet de r\u00e9ponse dans son int\u00e9gralit\u00e9 : les enregistrements sources et les d\u00e9tails d'utilisation figurent dans la sortie saisie, et non pas uniquement dans le paragraphe imprim\u00e9.<\/p>\n\n\n\n<h3 class=\"wp-block-heading pat-h3\">La m\u00eame requ\u00eate avec 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\": \"Comment un petit projet Python devrait-il utiliser les environnements virtuels et g\u00e9rer ses d\u00e9pendances ?\"\n  }'<\/code><\/pre>\n\n\n\n<p class=\"pat-p wp-block-paragraph\">Cet exemple cURL utilise la syntaxe Bash pour macOS\/Linux ou un shell compatible avec Bash. Chaque ex\u00e9cution g\u00e9n\u00e8re une nouvelle requ\u00eate facturable. N'utilisez-le que lorsque vous avez besoin d'isoler un probl\u00e8me li\u00e9 \u00e0 un point de terminaison d'un probl\u00e8me li\u00e9 \u00e0 Python ; n'ex\u00e9cutez pas toutes les versions simplement pour suivre le guide.<\/p>\n\n\n\n<h3 class=\"wp-block-heading pat-h3\">\u00c9quivalent en JavaScript c\u00f4t\u00e9 serveur<\/h3>\n\n\n\n<p class=\"pat-p wp-block-paragraph\">Node.js 18+ inclut <code>r\u00e9cup\u00e9rer<\/code>, un test de fonctionnement c\u00f4t\u00e9 serveur ne n\u00e9cessite donc aucune biblioth\u00e8que suppl\u00e9mentaire. Lire le code brut <code>sortie<\/code> \u00e9l\u00e9ments de la r\u00e9ponse JSON ; le SDK Python propose la fonction pratique <code>texte_de_sortie<\/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: \"Comment un petit projet Python devrait-il utiliser les environnements virtuels et g\u00e9rer ses d\u00e9pendances ?\"\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\">\u00c9tape 3 : Extraire la r\u00e9ponse et identifier ses sources<\/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\">Les recommandations officielles en mati\u00e8re de citations<\/a> distingue le texte de ses pi\u00e8ces justificatives. Les sources arrivent dans un <code>sortie<\/code> \u00e9l\u00e9ment de type <code>r\u00e9sultats_de_recherche<\/code>. Lire l'article en question <code>r\u00e9sultats<\/code> et associer chaque rep\u00e8re de citation au r\u00e9sultat correspondant <code>id<\/code>. Un r\u00e9sultat comporte un titre et une URL ; il faut g\u00e9rer les valeurs manquantes avant de l'afficher.<\/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=\"Documentation officielle de Perplexity expliquant les r\u00e9f\u00e9rences num\u00e9rot\u00e9es, les r\u00e9f\u00e9rences par type de source et l&#039;association des marqueurs aux identifiants des r\u00e9sultats de recherche.\" 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\">Ce dernier d\u00e9tail est important. Ne partez pas du principe que la \u201c citation 1 \u201d est toujours le premier \u00e9l\u00e9ment d'un tableau apr\u00e8s qu'un autre outil y a ajout\u00e9 un \u00e9l\u00e9ment. Effectuez une recherche par identifiant, puis identifiez les marqueurs qui apparaissent effectivement dans la r\u00e9ponse.<\/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    si sid est None :\n        passe\n    key = str(sid)\n    si key est dans sources et si field(sources[key], \"url\") != url :\n                raise ValueError(f\"URL en conflit pour l'ID de source {key}\")\n sources[key] = result\n    return sources\n\nsources = source_index(response.output)\nprint(sources.get(\"7\"))  # Un ID de source, et non la position 7 du tableau<\/code><\/pre>\n\n\n\n<p class=\"pat-p wp-block-paragraph\">Le script complet ci-dessous reconna\u00eet <code>[1]<\/code> et <code>[web:1]<\/code>, les formats de citation document\u00e9s pour les pr\u00e9r\u00e9glages courants. L'utilitaire ci-dessus prend en charge \u00e0 la fois les objets SDK et les dictionnaires, et rejette les URL conflictuelles attribu\u00e9es au m\u00eame identifiant. Il ne renum\u00e9ro pas les r\u00e9sultats et ne devine pas une source manquante.<\/p>\n\n\n\n<p class=\"pat-p wp-block-paragraph\">Pour une analyse plus approfondie de la qualit\u00e9 des citations, consultez notre <a href=\"https:\/\/www.glbgpt.com\/hub\/perplexity-citation-accuracy\/\">Guide sur la pr\u00e9cision des citations Perplexity<\/a>. Une r\u00e9f\u00e9rence constitue une trace d'audit ; votre application doit tout de m\u00eame disposer d'une politique concernant les pages obsol\u00e8tes, les URL en double et les affirmations non \u00e9tay\u00e9es.<\/p>\n\n\n\n<p class=\"pat-p wp-block-paragraph\">Par exemple, si le tableau renvoy\u00e9 contient l'ID 2 suivi de l'ID 7, le marqueur <code>[7]<\/code> doit renvoyer vers l'ID 7. Si la m\u00eame URL appara\u00eet sous les ID 7 et 9, vous pouvez l'afficher une seule fois tout en conservant les deux ID. Si l'ID 8 n'appara\u00eet jamais, conservez <code>[8]<\/code> le rendre visible et le marquer comme \u00ab non appari\u00e9 \u00bb.<\/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=\"La r\u00e9f\u00e9rence n\u00b0 7 correspond au r\u00e9sultat de recherche portant l&#039;identifiant 7, m\u00eame si un autre r\u00e9sultat appara\u00eet en premier dans la liste.\" 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\">\u00c9tape 4 : Affiner la r\u00e9ponse \u00e0 l'aide des filtres de recherche<\/h2>\n\n\n\n<p class=\"pat-p wp-block-paragraph\">Une fois que la requ\u00eate de base fonctionne, affinez votre recherche lorsque votre question porte sur un domaine bien pr\u00e9cis. Pour la cr\u00e9ation de paquets Python, la documentation du langage et le guide de cr\u00e9ation de paquets constituent de meilleurs points de d\u00e9part qu'un tutoriel choisi au hasard.<\/p>\n\n\n\n<pre class=\"wp-block-code pat-code\"><code>response = client.responses.create(\n    preset=\"fast\",\n    input=(\n \"Comment un petit projet Python devrait-il utiliser les environnements virtuels \"\n \"et g\u00e9rer ses d\u00e9pendances ? Citez les recommandations que vous suivez.\"\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\">Le filtre doit \u00eatre d\u00e9fini dans la configuration de l'outil de recherche sur le Web. La documentation relative \u00e0 la migration d\u00e9crit \u00e9galement <code>filtre_par_date_de_publication<\/code> pour les questions li\u00e9es \u00e0 l'actualit\u00e9. Privil\u00e9giez la r\u00e9cence lorsque la question repose sur des publications ou des actualit\u00e9s r\u00e9centes ; une combinaison trop restrictive entre domaine et date peut vous laisser avec trop peu d'\u00e9l\u00e9ments.<\/p>\n\n\n\n<p class=\"pat-p wp-block-paragraph\">Pour une question concernant les sorties du mois dernier, ajoutez <code>\"search_recency_filter\" : \"mois\"<\/code> \u00e0 c\u00f4t\u00e9 de <code>filtre_de_recherche_par_domaine<\/code>. Ne l'incluez pas dans l'exemple de l'environnement virtuel : la documentation stable peut comporter une date de publication ant\u00e9rieure. Si vous passez d'un mod\u00e8le pr\u00e9d\u00e9fini \u00e0 un mod\u00e8le s\u00e9lectionn\u00e9 directement, veillez \u00e0 inclure explicitement l'outil de recherche sur le Web.<\/p>\n\n\n\n<p class=\"pat-p wp-block-paragraph\">Comparez les r\u00e9sultats filtr\u00e9s et non filtr\u00e9s au cours du d\u00e9veloppement. Si la r\u00e9ponse change, notez pourquoi : un filtre peut supprimer du contexte utile, ou \u00e9liminer des pages peu fiables qui perturbaient le mod\u00e8le. Il s'agit d'un choix li\u00e9 \u00e0 la qualit\u00e9, et non d'une garantie que toutes les pages restantes sont correctes.<\/p>\n\n\n\n<p class=\"pat-p wp-block-paragraph\">Si votre application n'a besoin que de liens class\u00e9s et d'extraits, appelez la fonction <a href=\"https:\/\/docs.perplexity.ai\/docs\/getting-started\/quickstart\">API de recherche<\/a> et de r\u00e9aliser la synth\u00e8se vous-m\u00eame. Cette distinction peut faciliter la r\u00e9vision et la mise en cache. Pour une comparaison plus approfondie avec Google, voir <a href=\"https:\/\/www.glbgpt.com\/hub\/how-is-perplexity-different-than-google\/\">En quoi Perplexity se distingue de Google<\/a>.<\/p>\n\n\n\n<h2 id=\"export\" class=\"wp-block-heading pat-h2\">\u00c9tape 5 : Enregistrer une r\u00e9ponse compl\u00e8te avec des sources cliquables<\/h2>\n\n\n\n<p class=\"pat-p wp-block-paragraph\">Enregistrez ce qui suit sous le nom de <code>perplexity_tutorial.py<\/code>. Il est autonome : il int\u00e8gre l'assistant de source, applique le filtre de domaine de la documentation Python, transforme les marqueurs de citation correspondants en liens, regroupe les URL en double sans perdre les identifiants, et enregistre la r\u00e9ponse SDK compl\u00e8te avec le code Markdown.<\/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\">Courir <code>python perplexity_tutorial.py<\/code> \u00e0 partir du r\u00e9pertoire de votre projet. Il \u00e9crit <code>perplexity-answer.md<\/code> et <code>perplexity-response.json<\/code> l\u00e0, en rempla\u00e7ant les fichiers ant\u00e9rieurs portant ces noms. Le fichier Markdown contient la question, la r\u00e9ponse associ\u00e9e, les sources cit\u00e9es et les identifiants non appari\u00e9s. Le fichier JSON conserve la sortie renvoy\u00e9e et les informations d'utilisation \u00e0 des fins de diagnostic.<\/p>\n\n\n\n<p class=\"pat-p wp-block-paragraph\">L'analyseur se concentre sur les formes \u00e0 marqueur unique r\u00e9pertori\u00e9es dans la prose. Il ne s'agit pas d'un analyseur Markdown complet : si votre application n\u00e9cessite du Markdown arbitraire, des exemples de code ou des citations telles que <code>[1,2]<\/code>, ajoutez un moteur de rendu prenant en charge la syntaxe ainsi que des tests pour ce format. Ne r\u00e9interpr\u00e9tez pas silencieusement les marqueurs inconnus.<\/p>\n\n\n\n<h3 class=\"wp-block-heading pat-h3\">V\u00e9rifiez si la page vers laquelle renvoie le lien corrobore la r\u00e9ponse<\/h3>\n\n\n\n<p class=\"pat-p wp-block-paragraph\">Dans cet exemple, v\u00e9rifiez si la documentation cit\u00e9e explique r\u00e9ellement l'isolation de l'environnement et l'installation des d\u00e9pendances. Un lien vers la page d'accueil de Python est moins utile que la section correspondante de la documentation. Si une r\u00e9ponse recommande une commande sp\u00e9cifique, v\u00e9rifiez le syst\u00e8me d'exploitation et la version de Python avant de l'ex\u00e9cuter. Mark affirme que le texte cit\u00e9 ne justifie pas le statut \u00ab non r\u00e9solu \u00bb.<\/p>\n\n\n\n<h2 id=\"advanced\" class=\"wp-block-heading pat-h2\">Ajouter une sortie en continu ou structur\u00e9e si n\u00e9cessaire<\/h2>\n\n\n\n<h3 class=\"wp-block-heading pat-h3\">Diffusion en continu<\/h3>\n\n\n\n<p class=\"pat-p wp-block-paragraph\">Le streaming am\u00e9liore la latence per\u00e7ue dans une interface de chat. Le guide de migration des agents d\u00e9crit les \u00e9v\u00e9nements \u00ab delta \u00bb de texte, tels que <code>response.output_text.delta<\/code>. Affichez ces mises \u00e0 jour au fur et \u00e0 mesure qu'elles arrivent, mais r\u00e9cup\u00e9rez \u00e9galement les \u00e9l\u00e9ments de la r\u00e9ponse finale afin que votre interface utilisateur puisse afficher les sources une fois la r\u00e9ponse termin\u00e9e. Un simple flux de texte ne constitue pas \u00e0 lui seul une liste de sources.<\/p>\n\n\n\n<p class=\"pat-p wp-block-paragraph\">Ce qui suit est uniquement un affichage de texte. Conservez l'exportation sans streaming pour votre premier enregistrement source complet ; une impl\u00e9mentation de streaming en production doit \u00e9galement collecter les \u00e9v\u00e9nements li\u00e9s aux outils et aux sorties, et g\u00e9rer les ex\u00e9cutions interrompues ou ayant \u00e9chou\u00e9.<\/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\">Sortie structur\u00e9e<\/h3>\n\n\n\n<p class=\"pat-p wp-block-paragraph\">Utilisez une r\u00e9ponse structur\u00e9e lorsque le code en aval a besoin de champs tels que <code>r\u00e9ponse<\/code>, <code>note_de_confiance<\/code> et <code>questions_de_suivi<\/code>. Conservez les identifiants source dans un champ distinct ou conservez la sortie d'origine d'Agent afin que votre sch\u00e9ma ne masque pas les informations pertinentes. Validez le sch\u00e9ma \u00e0 l'aide de vos propres cas de test avant de l'int\u00e9grer dans un workflow.<\/p>\n\n\n\n<p class=\"pat-p wp-block-paragraph\">La r\u00e9f\u00e9rence de migration conserve <code>format_de_r\u00e9ponse<\/code> avec <code>type : \" json_schema \"<\/code> pour un r\u00e9sultat structur\u00e9. D\u00e9finissez les champs obligatoires et interdisez les propri\u00e9t\u00e9s inattendues lorsque cela s'av\u00e8re n\u00e9cessaire. Les contr\u00f4les de validit\u00e9 du sch\u00e9ma portent sur la forme, et non sur la v\u00e9racit\u00e9 : les identifiants source doivent toujours correspondre aux enregistrements effectivement renvoy\u00e9s, et une \u00e9tiquette de confiance g\u00e9n\u00e9r\u00e9e par le mod\u00e8le ne constitue pas une mesure de pr\u00e9cision.<\/p>\n\n\n\n<h2 id=\"cost-errors\" class=\"wp-block-heading pat-h2\">Co\u00fbts de l'API Perplexity et erreurs courantes<\/h2>\n\n\n\n<p class=\"pat-p wp-block-paragraph\"><a href=\"https:\/\/docs.perplexity.ai\/docs\/getting-started\/pricing\">Page officielle des tarifs de Perplexity<\/a>, consult\u00e9 le 28 septembre 2026, distingue les jetons du mod\u00e8le d'agent des appels d'outils. Vous trouverez ci-dessous les frais li\u00e9s aux outils et aux recherches USD. Le <code>rapidement<\/code> Pr\u00e9r\u00e9glage de l'agent et <code>search_type : \" fast \"<\/code> Il s'agit de diff\u00e9rentes options de configuration ; ne d\u00e9duisez pas la fr\u00e9quence de recherche \u00e0 partir du nom du pr\u00e9r\u00e9glage.<\/p>\n\n\n\n<figure class=\"wp-block-table pat-table\"><table><thead><tr><th>Prestation facturable<\/th><th>USD par action<\/th><th>USD pour 1 000<\/th><\/tr><\/thead><tbody><tr><td>Recherche Web standard par l'agent<\/td><td>$0.0025<\/td><td>$2.50<\/td><\/tr><tr><td>Appel de la fonction \u00ab Recherche rapide \u00bb de l'agent<\/td><td>$0.001<\/td><td>$1.00<\/td><\/tr><tr><td>R\u00e9cup\u00e9ration de l'URL par l'agent<\/td><td>$0.0005<\/td><td>$0.50<\/td><\/tr><tr><td>Requ\u00eate r\u00e9ussie via l'API de recherche<\/td><td>$0.005<\/td><td>$5.00<\/td><\/tr><tr><td>API de recherche avec 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=\"Tableaux officiels des tarifs Perplexity indiquant les prix d&#039;appel de l&#039;outil Agent et les prix de l&#039;API de recherche par tranche de 1 000 requ\u00eates.\" 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>Exemple :<\/strong> Co\u00fbt de 1 000 requ\u00eates de recherche standard sur le Web plus 1 000 r\u00e9cup\u00e9rations d'URL <strong>$3.00 en frais d'outillage<\/strong> ($2.50 + $0.50), avant les jetons de mod\u00e8le ou autres frais. Il s'agit d'une charge de travail estim\u00e9e, et non d'un co\u00fbt mesur\u00e9 pour le tutoriel. Une seule requ\u00eate d'Agent peut faire appel \u00e0 plusieurs outils. Lorsque cela est possible, v\u00e9rifiez <code>utilisation.co\u00fbt.co\u00fbt_total<\/code> sur la r\u00e9ponse compl\u00e9t\u00e9e.<\/p>\n\n\n\n<figure class=\"wp-block-table pat-table\"><table><thead><tr><th>Sympt\u00f4me<\/th><th>Ce qu'il faut v\u00e9rifier en premier<\/th><\/tr><\/thead><tbody><tr><td>401 ou 403<\/td><td>Nom de la variable d'environnement, validit\u00e9 de la cl\u00e9, acc\u00e8s au compte et v\u00e9rification que la requ\u00eate parvient bien au point de terminaison actuel.<\/td><\/tr><tr><td>Erreur de facturation ou de quota<\/td><td>Cr\u00e9dits API, configuration des paiements, frais li\u00e9s aux mod\u00e8les\/outils et limites de compte. Un forfait grand public Perplexity ne donne pas automatiquement droit \u00e0 des cr\u00e9dits API.<\/td><\/tr><tr><td>429<\/td><td>Limites de d\u00e9bit et comportement en cas de nouvelle tentative. Utilisez un recul exponentiel limit\u00e9 et \u00e9vitez de r\u00e9envoyer aveugl\u00e9ment une requ\u00eate d\u00e9j\u00e0 trait\u00e9e.<\/td><\/tr><tr><td>D\u00e9lai d'attente<\/td><td>Param\u00e8tres relatifs au chemin r\u00e9seau, \u00e0 la taille de l'invite, au nombre d'outils et au d\u00e9lai d'expiration du client. Enregistrez l'identifiant de la requ\u00eate si le SDK en fournit un, mais n'enregistrez jamais la cl\u00e9.<\/td><\/tr><tr><td>La r\u00e9ponse ne correspond \u00e0 aucune source.<\/td><td>Examiner le produit brut <code>response.output<\/code>, la syntaxe des citations et les identifiants des sources ; indiquez que la r\u00e9ponse n'a pas \u00e9t\u00e9 v\u00e9rifi\u00e9e plut\u00f4t que d'inventer des liens.<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"pat-p wp-block-paragraph\">L'API de recherche facture les requ\u00eates abouties, y compris celles qui ne renvoient aucun r\u00e9sultat ; le prix de la requ\u00eate ne comprend pas de frais suppl\u00e9mentaires li\u00e9s aux jetons. Les co\u00fbts li\u00e9s aux agents d\u00e9pendent des jetons de mod\u00e8le et des outils. Veillez \u00e0 bien distinguer ces unit\u00e9s de facturation lorsque vous comparez un workflow de r\u00e9ponse \u00e0 un workflow de recherche seule.<\/p>\n\n\n\n<p class=\"pat-p wp-block-paragraph\">Pour comparer les tarifs des API, notre <a href=\"https:\/\/www.glbgpt.com\/hub\/perplexity-api-cost-2025\/\">Guide des tarifs de l'API Perplexity<\/a> apporte des informations compl\u00e9mentaires, tandis que la page officielle des tarifs reste la r\u00e9f\u00e9rence en mati\u00e8re de tarifs en vigueur.<\/p>\n\n\n\n<h2 id=\"migration\" class=\"wp-block-heading pat-h2\">\u00c0 partir d'un ancien tutoriel sur Sonar<\/h2>\n\n\n\n<p class=\"pat-p wp-block-paragraph\">De nombreux r\u00e9sultats de recherche affichent encore l'ancienne forme \u00ab Chat Completions \u00bb. Le guide de migration des agents utilise une correspondance conceptuelle directe. Si vous comparez les libell\u00e9s du mod\u00e8le grand public avec les pr\u00e9r\u00e9glages de l'API, consultez notre guide explicatif sur <a href=\"https:\/\/www.glbgpt.com\/hub\/what-llm-does-perplexity-use\/\">ce que LLM Perplexit\u00e9 utilise<\/a> Elle fournit des informations contextuelles, mais ne remplace pas la documentation relative \u00e0 l'API Agent.<\/p>\n\n\n\n<figure class=\"wp-block-table pat-table\"><table><thead><tr><th>Ancien mod\u00e8le Sonar<\/th><th>Mod\u00e8le d'API d'agent<\/th><\/tr><\/thead><tbody><tr><td><code>messages<\/code><\/td><td><code>entr\u00e9e<\/code><\/td><\/tr><tr><td><code>mod\u00e8le<\/code><\/td><td><code>pr\u00e9r\u00e9glage<\/code><\/td><\/tr><tr><td><code>choices[0].message.content<\/code><\/td><td><code>texte_de_sortie<\/code><\/td><\/tr><tr><td>Anciennes hypoth\u00e8ses relatives aux tableaux de citations<\/td><td><code>r\u00e9sultats_de_recherche<\/code> \u00e9l\u00e9ment de sortie et mise en correspondance bas\u00e9e sur l'ID<\/td><\/tr><tr><td>Param\u00e8tres de recherche dans la requ\u00eate<\/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\">Lire le direct <a href=\"https:\/\/docs.perplexity.ai\/docs\/agent-api\/migrate-from-sonar\/overview\">Aper\u00e7u de la migration<\/a> et <a href=\"https:\/\/docs.perplexity.ai\/docs\/agent-api\/migrate-from-sonar\/how-to\">d\u00e9tails de la migration<\/a> avant de modifier le code de production. Les correspondances pr\u00e9d\u00e9finies constituent un point de d\u00e9part, et non une garantie que les anciens et les nouveaux mod\u00e8les offriront une qualit\u00e9, une latence ou un co\u00fbt identiques.<\/p>\n\n\n\n<h2 id=\"faq\" class=\"wp-block-heading pat-h2\">Foire aux questions<\/h2>\n\n\n\n<h3 class=\"wp-block-heading pat-h3\">L'API Perplexity est-elle gratuite ?<\/h3>\n\n\n\n<p class=\"pat-p wp-block-paragraph\">Les API sont factur\u00e9es \u00e0 l'utilisation, conform\u00e9ment au guide de d\u00e9marrage rapide et \u00e0 la documentation sur les tarifs en vigueur. Ne partez pas du principe qu'un abonnement \u00ab Consumer \u00bb, une p\u00e9riode d'essai ou un cr\u00e9dit promotionnel rend chaque requ\u00eate API gratuite.<\/p>\n\n\n\n<h3 class=\"wp-block-heading pat-h3\">Ai-je besoin de Perplexity Pro pour utiliser l'API ?<\/h3>\n\n\n\n<p class=\"pat-p wp-block-paragraph\">L'acc\u00e8s \u00e0 l'API et l'abonnement Pro pour les particuliers sont deux produits distincts. Cr\u00e9ez des identifiants d'acc\u00e8s \u00e0 l'API et v\u00e9rifiez la facturation li\u00e9e \u00e0 l'API pour le compte d\u00e9veloppeur que vous comptez utiliser.<\/p>\n\n\n\n<h3 class=\"wp-block-heading pat-h3\">Dois-je utiliser l'API Agent ou l'API Search ?<\/h3>\n\n\n\n<p class=\"pat-p wp-block-paragraph\">Choisissez \u00ab Agent \u00bb lorsque vous souhaitez obtenir une r\u00e9ponse compl\u00e8te et \u00e9tay\u00e9e, accompagn\u00e9e de sources. Choisissez \u00ab Recherche \u00bb lorsque votre application doit prendre en charge le classement, le filtrage et la synth\u00e8se. Vous pouvez combiner la \u00ab Recherche \u00bb avec votre propre mod\u00e8le si vous avez besoin d'un contr\u00f4le strict sur chaque \u00e9tape de g\u00e9n\u00e9ration.<\/p>\n\n\n\n<h3 class=\"wp-block-heading pat-h3\">Puis-je appeler Perplexity depuis JavaScript ?<\/h3>\n\n\n\n<p class=\"pat-p wp-block-paragraph\">Oui. Utilisez l'exemple Node.js c\u00f4t\u00e9 serveur ci-dessus ou le SDK JavaScript officiel. Conservez la cl\u00e9 sur le serveur. Lors de la lecture du JSON brut, examinez les \u00e9l\u00e9ments de sortie typ\u00e9s et appliquez les m\u00eames r\u00e8gles de mappage des identifiants source.<\/p>\n\n\n\n<h3 class=\"wp-block-heading pat-h3\">La justesse des citations Perplexity est-elle garantie ?<\/h3>\n\n\n\n<p class=\"pat-p wp-block-paragraph\">Non. Une r\u00e9f\u00e9rence vous indique \u00e0 quel r\u00e9sultat la r\u00e9ponse renvoie. Votre demande ou votre \u00e9valuateur doit tout de m\u00eame v\u00e9rifier l'actualit\u00e9, la fiabilit\u00e9 de la source et si la page corrobore bien l'affirmation en question.<\/p>\n\n\n\n<h3 class=\"wp-block-heading pat-h3\">Pourquoi mon analyseur n'a-t-il trouv\u00e9 aucune source ?<\/h3>\n\n\n\n<p class=\"pat-p wp-block-paragraph\">Examinez les types d'\u00e9l\u00e9ments de sortie bruts, v\u00e9rifiez que la recherche sur le Web a bien \u00e9t\u00e9 effectu\u00e9e et v\u00e9rifiez si votre expression r\u00e9guli\u00e8re correspond au format de citation d\u00e9fini dans le pr\u00e9r\u00e9glage. Si aucun marqueur n'appara\u00eet, enregistrez la r\u00e9ponse comme \u00ab non v\u00e9rifi\u00e9e \u00bb et examinez la requ\u00eate plut\u00f4t que d'ajouter un lien au hasard.<\/p>\n\n\n\n<h3 class=\"wp-block-heading pat-h3\">La cl\u00e9 API GlobalGPT peut-elle remplacer une cl\u00e9 API Perplexity ?<\/h3>\n\n\n\n<p class=\"pat-p wp-block-paragraph\">GlobalGPT est un espace de travail IA tout-en-un destin\u00e9 \u00e0 une utilisation quotidienne de l'IA. Son abonnement et l'acc\u00e8s aux mod\u00e8les sont distincts du compte d\u00e9veloppeur Perplexity, de la cl\u00e9 API et des cr\u00e9dits API ; ce tutoriel Python utilise le compte d\u00e9veloppeur.<\/p>\n\n\n\n<h2 id=\"checklist\" class=\"wp-block-heading pat-h2\">Une liste de contr\u00f4le pratique pour le lancement<\/h2>\n\n\n\n<ul class=\"wp-block-list pat-list pat-checklist\">\n<li>Cr\u00e9er une cl\u00e9 c\u00f4t\u00e9 serveur et valider la facturation de l'API.<\/li>\n\n\n\n<li>Ex\u00e9cutez la version minimale <code>rapidement<\/code> demande avant d'ajouter des filtres ou de lancer la diffusion en continu.<\/li>\n\n\n\n<li>Enregistrez la r\u00e9ponse compl\u00e8te, et pas seulement le texte de la r\u00e9ponse visible.<\/li>\n\n\n\n<li>Associer les marqueurs de citation aux identifiants de source renvoy\u00e9s et signaler les marqueurs non associ\u00e9s.<\/li>\n\n\n\n<li>V\u00e9rifiez les pages cit\u00e9es pour vous assurer qu'elles \u00e9tayent les affirmations, qu'elles sont \u00e0 jour et qu'il n'y a pas d'URL en double.<\/li>\n\n\n\n<li>V\u00e9rifiez \u00e0 nouveau la documentation relative \u00e0 Live Agent, aux tarifs et \u00e0 la migration avant le d\u00e9ploiement.<\/li>\n<\/ul>\n\n\n\n<p class=\"pat-p wp-block-paragraph\">Vous disposez d\u00e9sormais du mod\u00e8le de base pour une int\u00e9gration fiable de l'API Perplexity : posez une question cibl\u00e9e, laissez l'API Agent effectuer la recherche, conservez la r\u00e9ponse et les sources ensemble, et veillez \u00e0 ce que chaque citation puisse \u00eatre v\u00e9rifi\u00e9e. \u00c0 partir de l\u00e0, ajoutez la mise en cache, les tentatives de r\u00e9essai et vos propres r\u00e8gles de v\u00e9rification dans le cadre du m\u00eame workflow bas\u00e9 sur l'identifiant de source.<\/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>API PERPLEXITY \u00b7 TUTORIEL PYTHON \u00b7 2026 Ce tutoriel sur l'API Perplexity vous montre comment cr\u00e9er un script Python qui renvoie une r\u00e9ponse accompagn\u00e9e de sources Web cliquables. Utilisez l\u2019API Agent pour envoyer une question, lire la r\u00e9ponse, associer ses marqueurs de citation aux identifiants des sources, puis exporter un fichier Markdown que vous pourrez consulter. Nous allons [\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\/fr\/wp-json\/wp\/v2\/posts\/20031","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wp.glbgpt.com\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wp.glbgpt.com\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wp.glbgpt.com\/fr\/wp-json\/wp\/v2\/users\/17"}],"replies":[{"embeddable":true,"href":"https:\/\/wp.glbgpt.com\/fr\/wp-json\/wp\/v2\/comments?post=20031"}],"version-history":[{"count":2,"href":"https:\/\/wp.glbgpt.com\/fr\/wp-json\/wp\/v2\/posts\/20031\/revisions"}],"predecessor-version":[{"id":20038,"href":"https:\/\/wp.glbgpt.com\/fr\/wp-json\/wp\/v2\/posts\/20031\/revisions\/20038"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wp.glbgpt.com\/fr\/wp-json\/wp\/v2\/media\/20032"}],"wp:attachment":[{"href":"https:\/\/wp.glbgpt.com\/fr\/wp-json\/wp\/v2\/media?parent=20031"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wp.glbgpt.com\/fr\/wp-json\/wp\/v2\/categories?post=20031"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wp.glbgpt.com\/fr\/wp-json\/wp\/v2\/tags?post=20031"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}