{"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\/es\/hub\/perplexity-api-tutorial","title":{"rendered":"Tutorial de la API Perplexity: C\u00f3mo construir paso a paso una respuesta con conexi\u00f3n a tierra en la fuente"},"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 DE PERPLEXITY \u00b7 TUTORIAL DE PYTHON \u00b7 2026<\/p>\n\n\n\n<p class=\"pat-p wp-block-paragraph\">Este tutorial sobre la API Perplexity te muestra c\u00f3mo crear un script en Python que devuelva una respuesta con fuentes web en las que se puede hacer clic. Utiliza la API de Agent para enviar una pregunta, leer la respuesta, asociar sus marcadores de citas a los ID de las fuentes y exportar un archivo Markdown que puedas revisar.<\/p>\n\n\n\n<p class=\"pat-p wp-block-paragraph\">A lo largo de todo el texto utilizaremos una pregunta: <em>\u00bfC\u00f3mo deber\u00eda un peque\u00f1o proyecto en Python utilizar entornos virtuales y gestionar las dependencias?<\/em> Empieza con una solicitud b\u00e1sica y, a continuaci\u00f3n, a\u00f1ade el an\u00e1lisis de la fuente y los filtros de dominio. Necesitas conocimientos b\u00e1sicos de Python y una cuenta de desarrollador Perplexity con la facturaci\u00f3n de la API configurada.<\/p>\n\n\n\n<p class=\"pat-p wp-block-paragraph\">Si t\u00fa tambi\u00e9n utilizas la IA para tus investigaciones y tus trabajos de redacci\u00f3n diarios, <a href=\"https:\/\/www.glbgpt.com\/perplexity?inviter=hub_content_perplexity&amp;login=1\">Perplexity sobre GlobalGPT<\/a> Ofrece acceso a trav\u00e9s de un espacio de trabajo de IA \u00abtodo en uno\u00bb, lo que reduce la necesidad de cambiar entre distintas herramientas. Ese flujo de trabajo para el usuario final es independiente de la clave de desarrollador y de la facturaci\u00f3n de la API que se utilizan aqu\u00ed.<\/p>\n\n\n\n<p class=\"pat-p pat-quick wp-block-paragraph\"><strong>Respuesta r\u00e1pida:<\/strong> Utilice el <code>r\u00e1pido<\/code> Configuraci\u00f3n predeterminada del agente para una primera respuesta basada en la web, leer <code>respuesta.texto_de_salida<\/code> para conocer la respuesta, y lee el <code>resultados_de_b\u00fasqueda<\/code> elemento en <code>respuesta.salida<\/code> para las fuentes. Asigna cada marcador en l\u00ednea a una fuente seg\u00fan el valor devuelto <code>id<\/code>. Una cita significa que \u201cla respuesta apunta a este resultado\u201d; no garantiza que la p\u00e1gina demuestre todas las afirmaciones.<\/p>\n\n\n\n<p class=\"pat-p wp-block-paragraph\"><strong>Ejemplo de estado:<\/strong> La sintaxis de la solicitud se ajusta a la documentaci\u00f3n oficial consultada el 28 de septiembre de 2026. La herramienta de citaci\u00f3n se ha comprobado con datos de muestra sin conexi\u00f3n; no se ha realizado ninguna solicitud de API de pago para este tutorial. Los registros originales que aparecen en la ilustraci\u00f3n son ejemplos ilustrativos.<\/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>Pruebe Perplexity Now &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\">\u00bfQu\u00e9 API Perplexity deber\u00edas utilizar?<\/a><\/li>\n\n\n\n<li><a href=\"#setup\">Paso 1: Consigue una clave API y configura Python<\/a><\/li>\n\n\n\n<li><a href=\"#first-request\">Paso 2: Env\u00eda tu primera solicitud con conexi\u00f3n a tierra en el lado de la fuente<\/a><\/li>\n\n\n\n<li><a href=\"#sources\">Paso 3: Extrae la respuesta y compara sus fuentes<\/a><\/li>\n\n\n\n<li><a href=\"#filters\">Paso 4: Mejora la respuesta con los filtros de b\u00fasqueda<\/a><\/li>\n\n\n\n<li><a href=\"#export\">Paso 5: Guarda una respuesta completa con fuentes en las que se pueda hacer clic<\/a><\/li>\n\n\n\n<li><a href=\"#advanced\">Transmisi\u00f3n y salida estructurada<\/a><\/li>\n\n\n\n<li><a href=\"#cost-errors\">Costes y errores habituales<\/a><\/li>\n\n\n\n<li><a href=\"#migration\">Pasando de un tutorial antiguo de Sonar<\/a><\/li>\n\n\n\n<li><a href=\"#faq\">Preguntas frecuentes<\/a><\/li>\n<\/ul>\n\n\n\n<h2 id=\"api-choice\" class=\"wp-block-heading pat-h2\">Tutorial de la API Perplexity: elige la API adecuada<\/h2>\n\n\n\n<p class=\"pat-p wp-block-paragraph\">Se trata de interfaces para desarrolladores. Es posible que el producto de chat ofrezca funciones similares de otra forma; nuestra descripci\u00f3n general de <a href=\"https:\/\/www.glbgpt.com\/hub\/what-are-the-main-features-of-perplexity-ai\/\">Caracter\u00edsticas de Perplexity<\/a> describe la experiencia del usuario.<\/p>\n\n\n\n<p class=\"pat-p wp-block-paragraph\">De \u00abPerplexity\u00bb <a href=\"https:\/\/docs.perplexity.ai\/docs\/getting-started\/quickstart\">Gu\u00eda r\u00e1pida de la API oficial<\/a> agrupa sus productos para desarrolladores en funci\u00f3n de la tarea que debas realizar. Elige la superficie m\u00e1s peque\u00f1a que genere los datos que tu aplicaci\u00f3n realmente necesita.<\/p>\n\n\n\n<figure class=\"wp-block-table pat-table\"><table><thead><tr><th>API<\/th><th>Mejor ajuste<\/th><th>Lo que recibe tu c\u00f3digo<\/th><\/tr><\/thead><tbody><tr><td><strong>Agente<\/strong><\/td><td>Una respuesta completa basada en b\u00fasquedas en Internet u otras herramientas<\/td><td>Elementos de salida tipificados, texto de respuesta y registros de resultados de b\u00fasqueda<\/td><\/tr><tr><td><strong>Buscar en<\/strong><\/td><td>Tu aplicaci\u00f3n clasificar\u00e1, filtrar\u00e1 o resumir\u00e1 los resultados por s\u00ed misma.<\/td><td>Resultados de la b\u00fasqueda sin pedirle a Perplexity que escriba la respuesta definitiva<\/td><\/tr><tr><td><strong>Enrutador<\/strong><\/td><td>Dirigir las solicitudes al modelo adecuado<\/td><td>Una respuesta modelo seleccionada a trav\u00e9s del router<\/td><\/tr><tr><td><strong>Representaciones<\/strong><\/td><td>B\u00fasqueda sem\u00e1ntica y un \u00edndice RAG<\/td><td>Vectores para tu propia capa de b\u00fasqueda<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"pat-p wp-block-paragraph\">En este tutorial se ha elegido \u00abAgent\u00bb porque el resultado que buscas es una respuesta completa junto con sus fuentes. Para conocer el flujo de trabajo de investigaci\u00f3n en general, consulta nuestra gu\u00eda sobre <a href=\"https:\/\/www.glbgpt.com\/hub\/how-to-use-perplexity-for-research\/\">el uso de Perplexity con fines de investigaci\u00f3n<\/a>.<\/p>\n\n\n\n<p class=\"pat-p wp-block-paragraph\"><strong>Acerca de Sonar:<\/strong> La corriente <a href=\"https:\/\/docs.perplexity.ai\/docs\/agent-api\/migrate-from-sonar\/overview\">Resumen sobre la migraci\u00f3n<\/a> indica que \u00abSonar Chat Completions\u00bb sigue siendo compatible y recomienda \u00abAgent\u00bb para todos los proyectos nuevos. Por lo tanto, este tutorial utiliza \u00abAgent\u00bb. No se debe deducir que una integraci\u00f3n antigua ha dejado de funcionar por el hecho de que en un tutorial anterior se mencione una fecha l\u00edmite.<\/p>\n\n\n\n<h2 id=\"setup\" class=\"wp-block-heading pat-h2\">Paso 1: Consigue una clave API y configura Python<\/h2>\n\n\n\n<h3 class=\"wp-block-heading pat-h3\">Crear la clave y preparar la facturaci\u00f3n<\/h3>\n\n\n\n<p class=\"pat-p wp-block-paragraph\"><a href=\"https:\/\/console.perplexity.ai\/\">Abre la consola de la API de Perplexity<\/a>, elige o crea el proyecto que vas a utilizar, configura la facturaci\u00f3n de la API y crea una clave. Gu\u00e1rdala en el servidor. Las API para desarrolladores se facturan por separado de las suscripciones de los usuarios; comprueba el saldo de tu proyecto antes de realizar solicitudes.<\/p>\n\n\n\n<h3 class=\"wp-block-heading pat-h3\">Instala el SDK oficial<\/h3>\n\n\n\n<pre class=\"wp-block-code pat-code\"><code>python -m venv .venv\n\n# macOS\/Linux: elige este comando de activaci\u00f3n\nsource .venv\/bin\/activate\n\n# Windows PowerShell: utiliza este comando en su lugar\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\">Utiliza Python 3.10 o una versi\u00f3n posterior para el c\u00f3digo que aparece a continuaci\u00f3n. Activa el entorno mediante el comando correspondiente a tu sistema operativo y, a continuaci\u00f3n, instala el SDK. Si PowerShell bloquea la activaci\u00f3n, utiliza <code>.venv\\Scripts\\python.exe<\/code> en lugar de <code>Python<\/code> para la instalaci\u00f3n y la ejecuci\u00f3n de scripts.<\/p>\n\n\n\n<p class=\"pat-p wp-block-paragraph\">El nombre del paquete es <code>perplexityai<\/code>, mientras que la importaci\u00f3n en Python es <code>perplejidad<\/code>. Utiliza un entorno virtual para que las dependencias de este tutorial no afecten a ning\u00fan otro proyecto.<\/p>\n\n\n\n<p class=\"pat-p wp-block-paragraph\">En el ejemplo se utiliza una pregunta sobre programaci\u00f3n porque sus afirmaciones pueden contrastarse con la documentaci\u00f3n actualizada. Nuestra gu\u00eda sobre <a href=\"https:\/\/www.glbgpt.com\/hub\/is-perplexity-good-for-coding\/\">Perplexity para codificaci\u00f3n<\/a> explica c\u00f3mo encaja el apoyo a la investigaci\u00f3n con el hecho de probar el c\u00f3digo por uno mismo.<\/p>\n\n\n\n<h3 class=\"wp-block-heading pat-h3\">Configura la clave de API como variable de entorno<\/h3>\n\n\n\n<pre class=\"wp-block-code pat-code\"><code># macOS\/Linux\nexport PERPLEXITY_API_KEY=\"tu-clave-aqu\u00ed\"\n\n# Windows PowerShell\n$env:PERPLEXITY_API_KEY = \"tu-clave-aqu\u00ed\"<\/code><\/pre>\n\n\n\n<p class=\"pat-p wp-block-paragraph\">El SDK lee <code>PERPLEXIDAD_CLAVE_API<\/code> cuando crees el cliente. No pegues la clave en un bloc de notas, no la subas a Git ni la env\u00edes a un navegador. Si utilizas un archivo .env a nivel local, mant\u00e9n ese archivo fuera del control de versiones y c\u00e1rgalo con la biblioteca de variables de entorno que hayas elegido.<\/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=\"Documentaci\u00f3n oficial de Perplexity en la que se explica la instalaci\u00f3n del SDK de Python y la variable de entorno 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\">Paso 2: Env\u00eda tu primera solicitud con conexi\u00f3n a tierra en el lado de la fuente<\/h2>\n\n\n\n<p class=\"pat-p wp-block-paragraph\"><a href=\"https:\/\/docs.perplexity.ai\/docs\/agent-api\/quickstart\">Gu\u00eda de inicio r\u00e1pido de la API de Agent<\/a> documentos <code>PUBLICACI\u00d3N https:\/\/api.perplexity.ai\/v1\/agent<\/code>. Su cliente de Python envuelve la solicitud con <code>client.responses.create()<\/code>. El <code>r\u00e1pido<\/code> La configuraci\u00f3n predeterminada habilita la b\u00fasqueda en la web de forma predeterminada, lo que permite que el primer ejemplo sea breve.<\/p>\n\n\n\n<pre class=\"wp-block-code pat-code\"><code>from perplexity import Perplexity\n\nclient = Perplexity()\n\nquestion = (\n    \"\u00bfC\u00f3mo deber\u00eda un peque\u00f1o proyecto en Python utilizar entornos virtuales\"\n    \"y gestionar las dependencias?\"\n)\n\nrespuesta = cliente.respuestas.crear(\n    preajuste=\"r\u00e1pido\",\n    entrada=pregunta,\n)\n\nimprimir(respuesta.texto_de_salida)<\/code><\/pre>\n\n\n\n<p class=\"pat-p wp-block-paragraph\">Guarda el fragmento de c\u00f3digo como <code>first_request.py<\/code>, y a continuaci\u00f3n ejecuta <code>python first_request.py<\/code> en el mismo terminal en el que has configurado la clave. Si la llamada se realiza correctamente, deber\u00eda aparecer un texto de respuesta que no est\u00e9 vac\u00edo. Si necesitas una confirmaci\u00f3n del resultado, pasa al paso de extracci\u00f3n de la fuente; el texto por s\u00ed solo no constituye una comprobaci\u00f3n completa.<\/p>\n\n\n\n<p class=\"pat-p wp-block-paragraph\">La propiedad de conveniencia <code>texto_de_salida<\/code> te ofrece el texto de la respuesta definitiva. Conserva tambi\u00e9n el objeto de respuesta completo: los registros de origen y los detalles de uso se encuentran en la salida mecanografiada, no solo en el p\u00e1rrafo impreso.<\/p>\n\n\n\n<h3 class=\"wp-block-heading pat-h3\">La misma solicitud con 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\": \"\u00bfC\u00f3mo deber\u00eda un peque\u00f1o proyecto en Python utilizar entornos virtuales y gestionar las dependencias?\"\n  }'<\/code><\/pre>\n\n\n\n<p class=\"pat-p wp-block-paragraph\">Este ejemplo de cURL utiliza la sintaxis de Bash para macOS\/Linux o un shell compatible con Bash. Cada ejecuci\u00f3n realiza otra solicitud facturable. \u00dasalo solo cuando necesites diferenciar un problema del punto final de un problema de Python; no ejecutes todas las versiones solo para seguir el ejemplo.<\/p>\n\n\n\n<h3 class=\"wp-block-heading pat-h3\">Equivalente en JavaScript del lado del servidor<\/h3>\n\n\n\n<p class=\"pat-p wp-block-paragraph\">Node.js 18+ incluye <code>recoger<\/code>, por lo que una prueba de funcionamiento del lado del servidor no necesita ninguna biblioteca adicional. Lee el c\u00f3digo sin procesar <code>salida<\/code> elementos de la respuesta JSON; el SDK de Python ofrece la c\u00f3moda <code>texto_de_salida<\/code> accesorio.<\/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: \"\u00bfC\u00f3mo deber\u00eda un peque\u00f1o proyecto en Python utilizar entornos virtuales y gestionar las dependencias?\"\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\">Paso 3: Extrae la respuesta y compara sus fuentes<\/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\">Gu\u00eda oficial sobre c\u00f3mo citar fuentes<\/a> distingue la prosa de sus registros probatorios. Las fuentes llegan en un <code>salida<\/code> elemento de tipo <code>resultados_de_b\u00fasqueda<\/code>. Lee ese art\u00edculo en <code>resultados<\/code> y hacer coincidir cada marcador de cita con el resultado correspondiente <code>id<\/code>. Un resultado tiene un t\u00edtulo y una URL; gestiona los valores que falten antes de mostrarlo.<\/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=\"Documentaci\u00f3n oficial de Perplexity en la que se explican las citas numeradas, las citas con indicaci\u00f3n de la fuente y los marcadores de coincidencia con los identificadores de los resultados de b\u00fasqueda.\" 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\">Ese \u00faltimo detalle es importante. No des por sentado que la \u201ccita 1\u201d sea siempre el primer elemento de una matriz despu\u00e9s de que otra herramienta a\u00f1ada un elemento. Realiza una b\u00fasqueda por ID y, a continuaci\u00f3n, identifica los marcadores que aparecen realmente en la respuesta.<\/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 &#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\nsources = source_index(response.output)\nprint(sources.get(\"7\"))  # A source ID, not array position 7<\/code><\/pre>\n\n\n\n<p class=\"pat-p wp-block-paragraph\">El script completo que aparece a continuaci\u00f3n reconoce <code>[1]<\/code> y <code>[web:1]<\/code>, los formatos de cita documentados para los ajustes preestablecidos habituales. La herramienta anterior gestiona tanto objetos del SDK como diccionarios, y rechaza las URL conflictivas asignadas al mismo ID. No renumera los resultados ni infiere una fuente que falte.<\/p>\n\n\n\n<p class=\"pat-p wp-block-paragraph\">Para un an\u00e1lisis m\u00e1s detallado sobre la calidad de las citas, consulta nuestro <a href=\"https:\/\/www.glbgpt.com\/hub\/perplexity-citation-accuracy\/\">Gu\u00eda de precisi\u00f3n en las citas de Perplexity<\/a>. Una referencia es un registro de seguimiento; tu aplicaci\u00f3n sigue necesitando una pol\u00edtica para las p\u00e1ginas obsoletas, las URL duplicadas y las afirmaciones sin fundamento.<\/p>\n\n\n\n<p class=\"pat-p wp-block-paragraph\">Por ejemplo, si la matriz devuelta contiene el ID 2 seguido del ID 7, el marcador <code>[7]<\/code> debe enlazar con el ID 7. Si la misma URL aparece en los ID 7 y 9, puedes mostrar esa URL una sola vez conservando ambos ID. Si el ID 8 nunca llega, mant\u00e9n <code>[8]<\/code> visible y marcarlo como sin coincidencia.<\/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 referencia 7 se corresponde con el resultado de b\u00fasqueda con el ID 7, incluso cuando aparece otro resultado en primer lugar.\" 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\">Paso 4: Mejora la respuesta con los filtros de b\u00fasqueda<\/h2>\n\n\n\n<p class=\"pat-p wp-block-paragraph\">Una vez que la consulta b\u00e1sica funcione, limita la b\u00fasqueda cuando tu pregunta tenga un \u00e1mbito de aplicaci\u00f3n bien definido. En el caso de los paquetes de Python, la documentaci\u00f3n del lenguaje y la gu\u00eda de creaci\u00f3n de paquetes son mejores puntos de partida que un tutorial cualquiera.<\/p>\n\n\n\n<pre class=\"wp-block-code pat-code\"><code>response = client.responses.create(\n    preset=\"fast\",\n    input=(\n        \"How should a small Python project use virtual environments \"\n        \"and manage dependencies? Cite the guidance you use.\"\n    ),\n    tools=&#91;\n        {\n            \"type\": \"web_search\",\n            \"filters\": {\n                \"search_domain_filter\": &#91;\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\">El filtro forma parte de la configuraci\u00f3n de la herramienta de b\u00fasqueda en la web. La documentaci\u00f3n sobre la migraci\u00f3n tambi\u00e9n describe <code>filtro_por_antig\u00fcedad_de_b\u00fasqueda<\/code> para preguntas en las que el factor tiempo es determinante. Recurre a la \u00abreciencia\u00bb cuando la pregunta dependa de publicaciones o noticias recientes; una combinaci\u00f3n muy limitada de \u00e1mbito y fecha puede dejarte con muy poca evidencia.<\/p>\n\n\n\n<p class=\"pat-p wp-block-paragraph\">Si tienes alguna pregunta sobre los lanzamientos del \u00faltimo mes, a\u00f1ade <code>\"search_recency_filter\": \"mes\"<\/code> al lado de <code>filtro_de_b\u00fasqueda_por_dominio<\/code>. No lo incluyas en el ejemplo del entorno virtual: la documentaci\u00f3n estable puede tener una fecha de publicaci\u00f3n anterior. Si pasas de un modelo preestablecido a uno seleccionado directamente, incluye expl\u00edcitamente la herramienta de b\u00fasqueda en la web.<\/p>\n\n\n\n<p class=\"pat-p wp-block-paragraph\">Compara los resultados filtrados con los no filtrados durante el desarrollo. Si la respuesta cambia, anota el motivo: es posible que un filtro elimine contexto \u00fatil o que elimine p\u00e1ginas con poca autoridad que distra\u00edan al modelo. Se trata de una decisi\u00f3n basada en la calidad, no de una garant\u00eda de que todas las p\u00e1ginas restantes sean correctas.<\/p>\n\n\n\n<p class=\"pat-p wp-block-paragraph\">Si tu aplicaci\u00f3n solo necesita enlaces ordenados por relevancia y fragmentos, llama a la funci\u00f3n <a href=\"https:\/\/docs.perplexity.ai\/docs\/getting-started\/quickstart\">API de b\u00fasqueda<\/a> y realiza t\u00fa mismo la s\u00edntesis. Esa separaci\u00f3n puede facilitar la revisi\u00f3n y el almacenamiento en cach\u00e9. Para una comparaci\u00f3n m\u00e1s amplia con Google, consulta <a href=\"https:\/\/www.glbgpt.com\/hub\/how-is-perplexity-different-than-google\/\">En qu\u00e9 se diferencia Perplexity de Google<\/a>.<\/p>\n\n\n\n<h2 id=\"export\" class=\"wp-block-heading pat-h2\">Paso 5: Guarda una respuesta completa con fuentes en las que se pueda hacer clic<\/h2>\n\n\n\n<p class=\"pat-p wp-block-paragraph\">Guarda lo siguiente como <code>perplexity_tutorial.py<\/code>. Es aut\u00f3nomo: incluye el ayudante de fuentes, aplica el filtro de dominio de la documentaci\u00f3n de Python, convierte los marcadores de citas que coinciden en enlaces, agrupa las URL duplicadas sin perder los ID y guarda la respuesta completa del SDK junto con el 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\">Correr <code>python perplexity_tutorial.py<\/code> desde el directorio de tu proyecto. Escribe <code>perplexity-answer.md<\/code> y <code>perplexity-response.json<\/code> all\u00ed, sustituyendo los archivos anteriores con esos nombres. El archivo Markdown contiene la pregunta, la respuesta enlazada, las fuentes citadas y cualquier ID sin asignar. El archivo JSON conserva el resultado devuelto y el uso para el diagn\u00f3stico.<\/p>\n\n\n\n<p class=\"pat-p wp-block-paragraph\">El analizador se centra en las formas documentadas de un solo marcador en prosa. No es un analizador completo de Markdown: si tu aplicaci\u00f3n requiere Markdown arbitrario, ejemplos de c\u00f3digo o citas como, por ejemplo, <code>[1,2]<\/code>, a\u00f1ade un renderizador que reconozca la sintaxis y pruebas para ese formato. No reinterpretes en silencio los marcadores desconocidos.<\/p>\n\n\n\n<h3 class=\"wp-block-heading pat-h3\">Comprueba si la p\u00e1gina enlazada respalda la respuesta<\/h3>\n\n\n\n<p class=\"pat-p wp-block-paragraph\">En este ejemplo, comprueba si la documentaci\u00f3n citada explica realmente el aislamiento del entorno y la instalaci\u00f3n de dependencias. Un enlace a la p\u00e1gina web de Python es menos \u00fatil que la secci\u00f3n correspondiente de la documentaci\u00f3n. Si una respuesta recomienda un comando concreto, comprueba el sistema operativo y la versi\u00f3n de Python antes de ejecutarlo. Mark afirma que el texto citado no justifica que la pregunta se mantenga como \u00absin resolver\u00bb.<\/p>\n\n\n\n<h2 id=\"advanced\" class=\"wp-block-heading pat-h2\">A\u00f1ade una salida en streaming o estructurada cuando sea necesario<\/h2>\n\n\n\n<h3 class=\"wp-block-heading pat-h3\">Transmisi\u00f3n<\/h3>\n\n\n\n<p class=\"pat-p wp-block-paragraph\">El streaming mejora la latencia percibida en una interfaz de chat. La gu\u00eda de migraci\u00f3n de Agent documenta eventos de cambio de texto como, por ejemplo: <code>response.output_text.delta<\/code>. Muestra esos cambios a medida que vayan llegando, pero recopila tambi\u00e9n los elementos de la respuesta final para que tu interfaz de usuario pueda mostrar las fuentes una vez que se haya completado la respuesta. Un simple flujo de texto no constituye por s\u00ed solo una lista de fuentes.<\/p>\n\n\n\n<p class=\"pat-p wp-block-paragraph\">Lo que sigue es solo una visualizaci\u00f3n de texto. Conserva la exportaci\u00f3n sin transmisi\u00f3n en tiempo real para tu primer registro de origen completo; una implementaci\u00f3n de transmisi\u00f3n en tiempo real en producci\u00f3n tambi\u00e9n debe recopilar los eventos de herramienta y de salida, y gestionar las ejecuciones interrumpidas o fallidas.<\/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\">Salida estructurada<\/h3>\n\n\n\n<p class=\"pat-p wp-block-paragraph\">Utiliza una respuesta estructurada cuando el c\u00f3digo posterior necesite campos como <code>respuesta<\/code>, <code>nota de confianza<\/code> y <code>preguntas_de_seguimiento<\/code>. Mant\u00e9n los ID de origen en un campo independiente o conserva la salida original de Agent para que tu esquema no oculte las pruebas. Valida el esquema con tus propios casos de prueba antes de utilizarlo en un flujo de trabajo.<\/p>\n\n\n\n<p class=\"pat-p wp-block-paragraph\">La referencia de migraci\u00f3n conserva <code>formato_de_respuesta<\/code> con <code>tipo: \"json_schema\"<\/code> para una salida estructurada. Define los campos obligatorios y no permitas propiedades inesperadas cuando sea necesario. Las comprobaciones de validez del esquema se centran en la forma, no en la veracidad: los identificadores de origen deben seguir correspondiendo a los registros reales devueltos, y una etiqueta de confianza generada por el modelo no es una medida de precisi\u00f3n.<\/p>\n\n\n\n<h2 id=\"cost-errors\" class=\"wp-block-heading pat-h2\">Costes y errores habituales de la API Perplexity<\/h2>\n\n\n\n<p class=\"pat-p wp-block-paragraph\"><a href=\"https:\/\/docs.perplexity.ai\/docs\/getting-started\/pricing\">P\u00e1gina oficial de precios de Perplexity<\/a>, consultado el 28 de septiembre de 2026, distingue entre los tokens del modelo \u00abAgent\u00bb y las invocaciones de herramientas. A continuaci\u00f3n se indican los cargos en USD por herramientas y b\u00fasquedas. El <code>r\u00e1pido<\/code> Configuraci\u00f3n predeterminada del agente y <code>search_type: \"r\u00e1pido\"<\/code> Existen diferentes opciones de configuraci\u00f3n; no deduzcas la velocidad de b\u00fasqueda a partir del nombre del ajuste preestablecido.<\/p>\n\n\n\n<figure class=\"wp-block-table pat-table\"><table><thead><tr><th>Actuaci\u00f3n facturable<\/th><th>USD por acci\u00f3n<\/th><th>USD por cada 1.000<\/th><\/tr><\/thead><tbody><tr><td>B\u00fasqueda web est\u00e1ndar del agente<\/td><td>$0.0025<\/td><td>$2.50<\/td><\/tr><tr><td>Activaci\u00f3n de la b\u00fasqueda r\u00e1pida de agentes<\/td><td>$0.001<\/td><td>$1.00<\/td><\/tr><tr><td>Recuperaci\u00f3n de la URL del agente<\/td><td>$0.0005<\/td><td>$0.50<\/td><\/tr><tr><td>Solicitud de la API de b\u00fasqueda realizada con \u00e9xito<\/td><td>$0.005<\/td><td>$5.00<\/td><\/tr><tr><td>API de b\u00fasqueda con 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=\"Tablas oficiales de precios de Perplexity en las que se indican los precios de las llamadas a la herramienta Agent y los precios de la API de b\u00fasqueda por cada 1.000 solicitudes.\" 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>Ejemplo:<\/strong> El coste de 1.000 consultas est\u00e1ndar de b\u00fasqueda en la web m\u00e1s 1.000 recuperaciones de URL <strong>$3.00 en gastos de herramientas<\/strong> ($2.50 + $0.50), antes de los tokens de modelo u otros cargos. Se trata de una carga de trabajo estimada, no de un coste medido para el tutorial. Una sola solicitud del agente puede activar varias herramientas. Cuando est\u00e9 disponible, comprueba <code>uso.coste.coste_total<\/code> en la respuesta completada.<\/p>\n\n\n\n<figure class=\"wp-block-table pat-table\"><table><thead><tr><th>S\u00edntoma<\/th><th>Qu\u00e9 hay que comprobar en primer lugar<\/th><\/tr><\/thead><tbody><tr><td>401 o 403<\/td><td>El nombre de la variable de entorno, la validez de la clave, el acceso a la cuenta y si la solicitud llega al punto final actual.<\/td><\/tr><tr><td>Error de facturaci\u00f3n o de cuota<\/td><td>Cr\u00e9ditos de API, configuraci\u00f3n de pagos, tarifas por modelos y herramientas, y l\u00edmites de cuenta. Un plan de consumidor Perplexity no implica autom\u00e1ticamente cr\u00e9ditos de API.<\/td><\/tr><tr><td>429<\/td><td>L\u00edmites de frecuencia y comportamiento de reintentos. Utiliza un retroceso exponencial limitado y evita repetir una solicitud ya procesada sin m\u00e1s.<\/td><\/tr><tr><td>Tiempo de espera<\/td><td>Configuraci\u00f3n de la ruta de red, el tama\u00f1o de la l\u00ednea de comandos, el n\u00famero de herramientas y el tiempo de espera del cliente. Registra el ID de la solicitud si el SDK lo facilita, pero nunca registres la clave.<\/td><\/tr><tr><td>La respuesta no tiene fuentes que coincidan<\/td><td>Revisa la materia prima <code>respuesta.salida<\/code>, la sintaxis de las citas y los identificadores de las fuentes; marca la respuesta como \u00absin verificar\u00bb en lugar de inventarte enlaces.<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"pat-p wp-block-paragraph\">La API de b\u00fasqueda factura las solicitudes que se completan con \u00e9xito, incluidas aquellas que no devuelven resultados; el precio de la solicitud no conlleva ning\u00fan coste adicional por tokens. Los costes de los agentes dependen de los tokens de los modelos y de las herramientas. Mant\u00e9n separadas estas unidades de facturaci\u00f3n al comparar un flujo de trabajo de respuesta con un flujo de trabajo de solo b\u00fasqueda.<\/p>\n\n\n\n<p class=\"pat-p wp-block-paragraph\">Para comparar presupuestos de API, nuestra <a href=\"https:\/\/www.glbgpt.com\/hub\/perplexity-api-cost-2025\/\">Gu\u00eda de precios de la API Perplexity<\/a> aporta informaci\u00f3n adicional, aunque la p\u00e1gina oficial de precios sigue siendo la fuente de referencia para conocer las tarifas actuales.<\/p>\n\n\n\n<h2 id=\"migration\" class=\"wp-block-heading pat-h2\">Pasando de un tutorial antiguo de Sonar<\/h2>\n\n\n\n<p class=\"pat-p wp-block-paragraph\">Muchos resultados de b\u00fasqueda siguen mostrando el dise\u00f1o anterior de \u00abChat Completions\u00bb. La gu\u00eda de migraci\u00f3n para agentes utiliza una correspondencia conceptual directa. Si est\u00e1s comparando las etiquetas del modelo para consumidores con los ajustes predefinidos de la API, consulta nuestra gu\u00eda explicativa sobre <a href=\"https:\/\/www.glbgpt.com\/hub\/what-llm-does-perplexity-use\/\">qu\u00e9 utiliza LLM Perplexity<\/a> ofrece informaci\u00f3n contextual, pero no sustituye a la documentaci\u00f3n de la API de Agent.<\/p>\n\n\n\n<figure class=\"wp-block-table pat-table\"><table><thead><tr><th>Modelo Sonar antiguo<\/th><th>Patr\u00f3n de la API del agente<\/th><\/tr><\/thead><tbody><tr><td><code>mensajes<\/code><\/td><td><code>entrada<\/code><\/td><\/tr><tr><td><code>modelo<\/code><\/td><td><code>preajuste<\/code><\/td><\/tr><tr><td><code>choices[0].message.content<\/code><\/td><td><code>texto_de_salida<\/code><\/td><\/tr><tr><td>Supuestos anteriores sobre las matrices de citas<\/td><td><code>resultados_de_b\u00fasqueda<\/code> elemento de salida y coincidencia basada en el ID<\/td><\/tr><tr><td>Par\u00e1metros de b\u00fasqueda en la solicitud<\/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\">Lee la retransmisi\u00f3n en directo <a href=\"https:\/\/docs.perplexity.ai\/docs\/agent-api\/migrate-from-sonar\/overview\">Resumen sobre la migraci\u00f3n<\/a> y <a href=\"https:\/\/docs.perplexity.ai\/docs\/agent-api\/migrate-from-sonar\/how-to\">datos sobre la migraci\u00f3n<\/a> antes de modificar el c\u00f3digo de producci\u00f3n. Las asignaciones predefinidas son un punto de partida, no una garant\u00eda de que los modelos antiguos y los nuevos ofrezcan una calidad, una latencia o un coste id\u00e9nticos.<\/p>\n\n\n\n<h2 id=\"faq\" class=\"wp-block-heading pat-h2\">Preguntas frecuentes<\/h2>\n\n\n\n<h3 class=\"wp-block-heading pat-h3\">\u00bfLa API Perplexity es gratuita?<\/h3>\n\n\n\n<p class=\"pat-p wp-block-paragraph\">Las API se facturan seg\u00fan el consumo, tal y como se indica en la documentaci\u00f3n actual de inicio r\u00e1pido y de precios. No des por sentado que una suscripci\u00f3n de consumidor, una prueba o un cr\u00e9dito promocional hacen que todas las solicitudes a la API sean gratuitas.<\/p>\n\n\n\n<h3 class=\"wp-block-heading pat-h3\">\u00bfNecesito Perplexity Pro para utilizar la API?<\/h3>\n\n\n\n<p class=\"pat-p wp-block-paragraph\">El acceso a la API y el plan Pro para consumidores son productos independientes. Crea credenciales de API y comprueba la facturaci\u00f3n de la API correspondiente a la cuenta de desarrollador que tengas previsto utilizar.<\/p>\n\n\n\n<h3 class=\"wp-block-heading pat-h3\">\u00bfDeber\u00eda utilizar la API de Agent o la API de Search?<\/h3>\n\n\n\n<p class=\"pat-p wp-block-paragraph\">Elige \u00abAgente\u00bb cuando desees una respuesta completa y fundamentada con fuentes. Elige \u00abB\u00fasqueda\u00bb cuando tu aplicaci\u00f3n deba encargarse de la clasificaci\u00f3n, el filtrado y la s\u00edntesis. Puedes combinar \u00abB\u00fasqueda\u00bb con tu propio modelo si necesitas un control estricto sobre cada paso de generaci\u00f3n.<\/p>\n\n\n\n<h3 class=\"wp-block-heading pat-h3\">\u00bfPuedo llamar a Perplexity desde JavaScript?<\/h3>\n\n\n\n<p class=\"pat-p wp-block-paragraph\">S\u00ed. Utiliza el ejemplo de Node.js del lado del servidor que se muestra m\u00e1s arriba o el SDK oficial de JavaScript. Guarda la clave en el servidor. Al leer JSON sin procesar, revisa los elementos de salida tipificados y aplica las mismas reglas de asignaci\u00f3n de ID de origen.<\/p>\n\n\n\n<h3 class=\"wp-block-heading pat-h3\">\u00bfSe garantiza que las citas de Perplexity sean correctas?<\/h3>\n\n\n\n<p class=\"pat-p wp-block-paragraph\">No. Una cita te indica a qu\u00e9 resultado de la b\u00fasqueda se refiere la respuesta. Tu solicitud o el revisor deben comprobar igualmente la actualidad, la fiabilidad y si la p\u00e1gina respalda exactamente esa afirmaci\u00f3n.<\/p>\n\n\n\n<h3 class=\"wp-block-heading pat-h3\">\u00bfPor qu\u00e9 mi analizador no ha encontrado ninguna fuente?<\/h3>\n\n\n\n<p class=\"pat-p wp-block-paragraph\">Revisa los tipos de resultados sin procesar, comprueba que se haya realizado la b\u00fasqueda en la web y verifica si tu expresi\u00f3n regular coincide con el formato de cita del ajuste preestablecido. Si no aparece ning\u00fan marcador, guarda la respuesta como \u00absin verificar\u00bb e investiga la solicitud en lugar de a\u00f1adir un enlace a ciegas.<\/p>\n\n\n\n<h3 class=\"wp-block-heading pat-h3\">\u00bfPuede una clave API GlobalGPT sustituir a una clave API Perplexity?<\/h3>\n\n\n\n<p class=\"pat-p wp-block-paragraph\">GlobalGPT es un espacio de trabajo de IA \u00abtodo en uno\u00bb para el uso diario de la IA. Su suscripci\u00f3n y el acceso a los modelos son independientes de la cuenta de desarrollador, la clave de API y los cr\u00e9ditos de API de Perplexity; este tutorial de Python utiliza la cuenta de desarrollador.<\/p>\n\n\n\n<h2 id=\"checklist\" class=\"wp-block-heading pat-h2\">Una lista de comprobaci\u00f3n pr\u00e1ctica para el lanzamiento<\/h2>\n\n\n\n<ul class=\"wp-block-list pat-list pat-checklist\">\n<li>Crea una clave del lado del servidor y confirma la facturaci\u00f3n de la API.<\/li>\n\n\n\n<li>Ejecuta la versi\u00f3n m\u00ednima <code>r\u00e1pido<\/code> solicitarlo antes de a\u00f1adir filtros o iniciar la reproducci\u00f3n en streaming.<\/li>\n\n\n\n<li>Guarda la respuesta completa, no solo el texto visible de la respuesta.<\/li>\n\n\n\n<li>Emparejar los marcadores de citas con los identificadores de fuente devueltos y se\u00f1alar los marcadores que no coincidan.<\/li>\n\n\n\n<li>Revisa las p\u00e1ginas citadas para comprobar que respalden las afirmaciones, que est\u00e9n actualizadas y que no haya URL duplicadas.<\/li>\n\n\n\n<li>Vuelve a consultar la documentaci\u00f3n sobre el agente en producci\u00f3n, los precios y la migraci\u00f3n antes de la implementaci\u00f3n.<\/li>\n<\/ul>\n\n\n\n<p class=\"pat-p wp-block-paragraph\">Ahora ya dispones del modelo b\u00e1sico para una integraci\u00f3n fiable de la API Perplexity: formula una pregunta concreta, deja que la API del agente realice la b\u00fasqueda, mant\u00e9n la respuesta y las pruebas juntas, y haz que cada cita sea auditable. A partir de aqu\u00ed, a\u00f1ade el almacenamiento en cach\u00e9, los reintentos y tus propias reglas de revisi\u00f3n en torno al mismo flujo de trabajo de ID de fuente.<\/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 TUTORIAL \u00b7 2026 This Perplexity API tutorial shows you how to build a Python script that returns an answer with clickable web sources. Use the Agent API to send a question, read the answer, match its citation markers to source IDs, and export a Markdown file you can review. We will [&hellip;]<\/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\/es\/wp-json\/wp\/v2\/posts\/20031","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wp.glbgpt.com\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wp.glbgpt.com\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wp.glbgpt.com\/es\/wp-json\/wp\/v2\/users\/17"}],"replies":[{"embeddable":true,"href":"https:\/\/wp.glbgpt.com\/es\/wp-json\/wp\/v2\/comments?post=20031"}],"version-history":[{"count":2,"href":"https:\/\/wp.glbgpt.com\/es\/wp-json\/wp\/v2\/posts\/20031\/revisions"}],"predecessor-version":[{"id":20038,"href":"https:\/\/wp.glbgpt.com\/es\/wp-json\/wp\/v2\/posts\/20031\/revisions\/20038"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wp.glbgpt.com\/es\/wp-json\/wp\/v2\/media\/20032"}],"wp:attachment":[{"href":"https:\/\/wp.glbgpt.com\/es\/wp-json\/wp\/v2\/media?parent=20031"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wp.glbgpt.com\/es\/wp-json\/wp\/v2\/categories?post=20031"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wp.glbgpt.com\/es\/wp-json\/wp\/v2\/tags?post=20031"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}