<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Roobia</title>
    <description>The latest articles on DEV Community by Roobia (@roobia).</description>
    <link>https://dev.to/roobia</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F2197084%2F1d72640c-64d4-4f30-a828-302a9e3360b0.jpg</url>
      <title>DEV Community: Roobia</title>
      <link>https://dev.to/roobia</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/roobia"/>
    <language>en</language>
    <item>
      <title>Gemini 3.7 Flash Precios Explicados: Asegura tus Tarifas Antes de que se Dupliquen</title>
      <dc:creator>Roobia</dc:creator>
      <pubDate>Fri, 14 Aug 2026 07:58:21 +0000</pubDate>
      <link>https://dev.to/roobia/gemini-37-flash-precios-explicados-asegura-tus-tarifas-antes-de-que-se-dupliquen-26ko</link>
      <guid>https://dev.to/roobia/gemini-37-flash-precios-explicados-asegura-tus-tarifas-antes-de-que-se-dupliquen-26ko</guid>
      <description>&lt;p&gt;Google lanzó Gemini 3.7 Flash el 13 de agosto de 2026, tres semanas después de 3.6 Flash, y lo presenta como &lt;a href="https://blog.google/innovation-and-ai/models-and-research/gemini-models/introducing-gemini-3-7-flash/" rel="noopener noreferrer"&gt;“nuestro modelo de caballo de batalla más inteligente”&lt;/a&gt;. Para presupuestar una API, el dato clave no está en los benchmarks: la tarifa introductoria de $0.75 por millón de tokens de entrada y $3.75 por millón de tokens de salida vence el 31 de diciembre de 2026. Desde el 1 de enero de 2027, ambas tarifas se duplican.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://apidog.com/?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation" class="crayons-btn crayons-btn--primary"&gt;Prueba Apidog hoy&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;Esto duplica el coste de cualquier carga de trabajo que permanezca en el modelo. Un chatbot que cuesta $790 al mes hoy costará $1,575 en enero, aunque no cambien su código, tráfico ni prompts. Planifique los dos niveles de precio desde el inicio.&lt;/p&gt;

&lt;p&gt;Esta guía muestra cómo calcular costes para cargas reales, controlar tokens por endpoint y reducir gasto antes del cambio de tarifa. Si todavía no ha enviado su primera solicitud, consulte la &lt;a href="https://apidog.com/es/blog/how-to-use-gemini-3-7-flash-api?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;guía de inicio rápido de la API de Gemini 3.7 Flash&lt;/a&gt;. Una vez que haga llamadas, &lt;a href="https://apidog.com?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Apidog&lt;/a&gt; permite inspeccionar los recuentos de &lt;code&gt;usageMetadata&lt;/code&gt; en cada respuesta para validar las estimaciones con tráfico real.&lt;/p&gt;

&lt;h2&gt;
  
  
  En resumen
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Tarifa introductoria:&lt;/strong&gt; $0.75 por 1M de tokens de entrada y $3.75 por 1M de tokens de salida, hasta el 31 de diciembre de 2026.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tarifa estándar:&lt;/strong&gt; desde el 1 de enero de 2027, $1.50 de entrada y $7.50 de salida. Exactamente el doble.&lt;/li&gt;
&lt;li&gt;El precio introductorio es la mitad de lo que costó Gemini 3.6 Flash en su lanzamiento.&lt;/li&gt;
&lt;li&gt;El modelo acepta texto, imagen, vídeo, audio y PDF, con contexto de 1M de tokens y un máximo de salida de 64k tokens.&lt;/li&gt;
&lt;li&gt;Un chatbot con 10,000 solicitudes diarias cuesta aproximadamente $26.25/día con tarifa introductoria y $52.50/día con tarifa estándar.&lt;/li&gt;
&lt;li&gt;Las principales palancas de ahorro son: limitar salida, caché de contexto, lotes y enrutamiento a modelos más pequeños.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Los dos niveles de precios
&lt;/h2&gt;

&lt;p&gt;Gemini 3.7 Flash se lanzó con un descuento temporal, no con un precio permanente.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Nivel&lt;/th&gt;
&lt;th&gt;Ventana&lt;/th&gt;
&lt;th&gt;Entrada por 1M de tokens&lt;/th&gt;
&lt;th&gt;Salida por 1M de tokens&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Introductorio&lt;/td&gt;
&lt;td&gt;13 de agosto de 2026 al 31 de diciembre de 2026&lt;/td&gt;
&lt;td&gt;$0.75&lt;/td&gt;
&lt;td&gt;$3.75&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Estándar&lt;/td&gt;
&lt;td&gt;Desde el 1 de enero de 2027&lt;/td&gt;
&lt;td&gt;$1.50&lt;/td&gt;
&lt;td&gt;$7.50&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Hay dos implicaciones prácticas:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;La tarifa introductoria es la mitad del precio de lanzamiento de Gemini 3.6 Flash. Si evalúa actualizar desde 3.6, use la &lt;a href="https://apidog.com/es/blog/gemini-3-6-to-3-7-flash-migration-guide?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;guía de migración de 3.6 a 3.7 Flash&lt;/a&gt; para planificar pruebas de regresión.&lt;/li&gt;
&lt;li&gt;Los tokens de salida cuestan &lt;strong&gt;5 veces más&lt;/strong&gt; que los tokens de entrada. Reducir una respuesta demasiado larga suele generar más ahorro que recortar un prompt de sistema.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Estas tarifas corresponden a la API de Gemini facturada mediante una clave de AI Studio. Vertex AI usa la facturación de Google Cloud y sus propias SKU. Además, el caché de contexto y el procesamiento por lotes tienen cargos específicos. Confirme los importes vigentes en la &lt;a href="https://ai.google.dev/gemini-api/docs/pricing" rel="noopener noreferrer"&gt;página oficial de precios&lt;/a&gt; antes de cerrar un presupuesto.&lt;/p&gt;

&lt;h2&gt;
  
  
  Cómo calcular el coste de una carga real
&lt;/h2&gt;

&lt;p&gt;Use esta fórmula para cada endpoint:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;coste_diario =
  (tokens_entrada_diarios / 1_000_000 × precio_entrada)
  +
  (tokens_salida_diarios / 1_000_000 × precio_salida)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Después, multiplique el resultado por los días de operación del mes.&lt;/p&gt;

&lt;h3&gt;
  
  
  Carga de trabajo 1: chatbot de soporte
&lt;/h3&gt;

&lt;p&gt;Suposiciones:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;10,000 solicitudes al día.&lt;/li&gt;
&lt;li&gt;2,000 tokens de entrada por solicitud.&lt;/li&gt;
&lt;li&gt;300 tokens de salida por solicitud.&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Elemento&lt;/th&gt;
&lt;th&gt;Tokens diarios&lt;/th&gt;
&lt;th&gt;Coste introductorio/día&lt;/th&gt;
&lt;th&gt;Coste estándar/día&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Entrada&lt;/td&gt;
&lt;td&gt;20M&lt;/td&gt;
&lt;td&gt;$15.00&lt;/td&gt;
&lt;td&gt;$30.00&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Salida&lt;/td&gt;
&lt;td&gt;3M&lt;/td&gt;
&lt;td&gt;$11.25&lt;/td&gt;
&lt;td&gt;$22.50&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Total&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;23M&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;$26.25&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;$52.50&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;En un mes de 30 días:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Tarifa introductoria: aproximadamente &lt;strong&gt;$788/mes&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Tarifa estándar: aproximadamente &lt;strong&gt;$1,575/mes&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;La implementación más útil aquí es definir un límite de salida específico para el endpoint de soporte:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"generationConfig"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"maxOutputTokens"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;500&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Una respuesta de soporte rara vez requiere decenas de miles de tokens. Dejar el máximo en 64k aumenta innecesariamente el riesgo de una generación costosa.&lt;/p&gt;

&lt;h3&gt;
  
  
  Carga de trabajo 2: pipeline de documentos PDF
&lt;/h3&gt;

&lt;p&gt;Gemini 3.7 Flash procesa PDFs de forma nativa. Su benchmark GDP.pdf subió del 22.0% al 34.0% respecto a 3.6 Flash, por lo que la extracción documental es una carga prevista para este modelo.&lt;/p&gt;

&lt;p&gt;Suposiciones:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;500 documentos al día.&lt;/li&gt;
&lt;li&gt;40,000 tokens de entrada por documento.&lt;/li&gt;
&lt;li&gt;1,000 tokens de salida por resumen estructurado.&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Elemento&lt;/th&gt;
&lt;th&gt;Tokens diarios&lt;/th&gt;
&lt;th&gt;Coste introductorio/día&lt;/th&gt;
&lt;th&gt;Coste estándar/día&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Entrada&lt;/td&gt;
&lt;td&gt;20M&lt;/td&gt;
&lt;td&gt;$15.00&lt;/td&gt;
&lt;td&gt;$30.00&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Salida&lt;/td&gt;
&lt;td&gt;0.5M&lt;/td&gt;
&lt;td&gt;$1.88&lt;/td&gt;
&lt;td&gt;$3.75&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Total&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;20.5M&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;$16.88&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;$33.75&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Resultado mensual aproximado:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Ahora: &lt;strong&gt;$506/mes&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Desde enero: &lt;strong&gt;$1,013/mes&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;En este perfil domina la entrada, porque los documentos son largos y los resúmenes son cortos. Priorice caché de contexto si reenvía instrucciones o documentos de referencia estáticos, y procese por lotes los trabajos no interactivos.&lt;/p&gt;

&lt;h3&gt;
  
  
  Carga de trabajo 3: bucle de agente
&lt;/h3&gt;

&lt;p&gt;Los agentes multiplican llamadas y contexto. Suposiciones:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;200 tareas al día.&lt;/li&gt;
&lt;li&gt;12 llamadas al modelo por tarea.&lt;/li&gt;
&lt;li&gt;8,000 tokens de entrada por llamada.&lt;/li&gt;
&lt;li&gt;400 tokens de salida por llamada.&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Elemento&lt;/th&gt;
&lt;th&gt;Tokens diarios&lt;/th&gt;
&lt;th&gt;Coste introductorio/día&lt;/th&gt;
&lt;th&gt;Coste estándar/día&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Entrada&lt;/td&gt;
&lt;td&gt;19.2M&lt;/td&gt;
&lt;td&gt;$14.40&lt;/td&gt;
&lt;td&gt;$28.80&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Salida&lt;/td&gt;
&lt;td&gt;0.96M&lt;/td&gt;
&lt;td&gt;$3.60&lt;/td&gt;
&lt;td&gt;$7.20&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Total&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;20.16M&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;$18.00&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;$36.00&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Resultado mensual aproximado:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Tarifa introductoria: &lt;strong&gt;$540/mes&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Tarifa estándar: &lt;strong&gt;$1,080/mes&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;En un agente, vigile dos métricas por separado:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;coste_por_tarea = llamadas_por_tarea × coste_medio_por_llamada
tokens_de_contexto = tokens_prompt + historial + resultados_de_herramientas
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Si una tarea pasa de 12 a 20 llamadas, su coste sube aproximadamente un 67%, incluso si el precio por token no cambia.&lt;/p&gt;

&lt;p&gt;El límite de salida de 64k fija un peor caso por llamada de aproximadamente $0.24 con tarifa introductoria y $0.48 con tarifa estándar. No es ilimitado, pero un bucle de reintentos que alcance ese máximo repetidamente puede encarecerse rápido.&lt;/p&gt;

&lt;h2&gt;
  
  
  Cómo se compara el precio de 3.7 Flash
&lt;/h2&gt;

&lt;p&gt;Las comparaciones entre proveedores cambian con frecuencia, así que use estos datos como posicionamiento, no como una tabla permanente de precios.&lt;/p&gt;

&lt;p&gt;Gemini 3.7 Flash ocupa el nivel de “caballo de batalla”: es más barato que modelos de vanguardia como Gemini Pro, los modelos grandes de Claude o el nivel insignia de OpenAI, mientras ofrece benchmarks como 65.3% en DeepSWE v1.1 y un Elo de 1588 en WebDev Arena.&lt;/p&gt;

&lt;p&gt;La tesis de Google es que gran parte del tráfico de producción no necesita un modelo de máxima capacidad. El descuento introductorio ofrece cuatro meses para validar esa hipótesis en sus propias rutas, prompts y cargas.&lt;/p&gt;

&lt;p&gt;El contexto competitivo también importa. Los proveedores económicos pueden cambiar sus tarifas; DeepSeek, por ejemplo, aumentó sus precios de API. Consulte la &lt;a href="https://apidog.com/es/blog/deepseek-api-price-increase-cost-optimization?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;guía de aumento de precios y optimización de costes de DeepSeek&lt;/a&gt; para un caso similar.&lt;/p&gt;

&lt;p&gt;La diferencia entre un prototipo y una carga sostenida es importante:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Un experimento que pasa de $3 a $6 apenas afecta al presupuesto.&lt;/li&gt;
&lt;li&gt;Una pipeline que pasa de $10,000 a $20,000 mensuales requiere planificación financiera antes del cambio.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Cinco formas de reducir el gasto en tokens
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Limite la salida por endpoint
&lt;/h3&gt;

&lt;p&gt;Configure &lt;code&gt;maxOutputTokens&lt;/code&gt; según el caso de uso:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"generationConfig"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"maxOutputTokens"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;500&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Ejemplos prácticos:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Chat de soporte: 300–500 tokens.&lt;/li&gt;
&lt;li&gt;Clasificación: 50–150 tokens.&lt;/li&gt;
&lt;li&gt;Resumen estructurado: defina un límite alineado con el esquema.&lt;/li&gt;
&lt;li&gt;Agentes: aplique límites por paso, no solo por tarea completa.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Este cambio tiene alto impacto porque los tokens de salida cuestan 5 veces más que los de entrada.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Almacene en caché el contexto estático
&lt;/h3&gt;

&lt;p&gt;Si cada solicitud incluye el mismo prompt de sistema, documentación de políticas o instrucciones de formato, no reenvíe ese contenido a precio completo miles de veces.&lt;/p&gt;

&lt;p&gt;Por ejemplo, si su chatbot tiene 1,500 tokens estáticos en cada petición:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;10,000 solicitudes/día × 1,500 tokens = 15M tokens estáticos/día
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;El caché de contexto puede reducir ese coste repetido. Revise la &lt;a href="https://ai.google.dev/gemini-api/docs" rel="noopener noreferrer"&gt;documentación de la API de Gemini&lt;/a&gt; para confirmar la configuración y tarifas actuales.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Use lotes para trabajo no interactivo
&lt;/h3&gt;

&lt;p&gt;La extracción de documentos, resúmenes nocturnos y enriquecimiento de datos no necesitan respuestas en tiempo real.&lt;/p&gt;

&lt;p&gt;Flujo recomendado:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Almacene los documentos pendientes.&lt;/li&gt;
&lt;li&gt;Agrúpelos en trabajos por lote.&lt;/li&gt;
&lt;li&gt;Ejecute el procesamiento fuera de horas pico.&lt;/li&gt;
&lt;li&gt;Registre tokens y resultados por documento.&lt;/li&gt;
&lt;li&gt;Reintente solo los elementos fallidos.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;El procesamiento por lotes intercambia latencia por una tarifa reducida cuando el caso de uso lo permite.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Enrute por complejidad
&lt;/h3&gt;

&lt;p&gt;No todas las solicitudes necesitan Gemini 3.7 Flash. Use modelos más ligeros para:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Clasificación.&lt;/li&gt;
&lt;li&gt;Enrutamiento.&lt;/li&gt;
&lt;li&gt;Extracción corta.&lt;/li&gt;
&lt;li&gt;Validación de formatos.&lt;/li&gt;
&lt;li&gt;Transformaciones simples.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Reserve 3.7 Flash para tareas que realmente usan su capacidad: planificación de varios pasos, depuración compleja y cadenas de llamadas a herramientas.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. Prototype con el nivel gratuito
&lt;/h3&gt;

&lt;p&gt;Use la cuota gratuita de AI Studio para fijar:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Prompts.&lt;/li&gt;
&lt;li&gt;Esquemas de respuesta.&lt;/li&gt;
&lt;li&gt;Límites de salida.&lt;/li&gt;
&lt;li&gt;Casos de error.&lt;/li&gt;
&lt;li&gt;Cargas representativas.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;La &lt;a href="https://apidog.com/es/blog/get-free-unlimited-gemini-api?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;guía de acceso gratuito e ilimitado a la API de Gemini&lt;/a&gt; explica el alcance de la ruta gratuita y sus límites.&lt;/p&gt;

&lt;h2&gt;
  
  
  Rastree el gasto por endpoint con Apidog
&lt;/h2&gt;

&lt;p&gt;Las estimaciones sirven para presupuestar; los datos por solicitud permiten mantener el gasto bajo control.&lt;/p&gt;

&lt;p&gt;Cada respuesta de Gemini incluye &lt;code&gt;usageMetadata&lt;/code&gt;, con recuentos de tokens de prompt y salida. Puede convertir esos valores en una señal de coste dentro de sus pruebas de API.&lt;/p&gt;

&lt;p&gt;En &lt;a href="https://apidog.com?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Apidog&lt;/a&gt;, implemente este flujo:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Guarde una solicitud por endpoint de producción: chat, resumen de documento y paso de agente.&lt;/li&gt;
&lt;li&gt;Vincule la clave a una variable de entorno llamada &lt;code&gt;GEMINI_API_KEY&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Cree escenarios con cargas útiles representativas.&lt;/li&gt;
&lt;li&gt;Extraiga &lt;code&gt;usageMetadata.promptTokenCount&lt;/code&gt; y &lt;code&gt;usageMetadata.candidatesTokenCount&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Añada aserciones de presupuesto de tokens.&lt;/li&gt;
&lt;li&gt;Ejecute esos escenarios en cada cambio de prompt, esquema o lógica de herramientas.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Ejemplo de umbrales que puede aplicar:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;chat:
  promptTokenCount &amp;lt;= 2500
  candidatesTokenCount &amp;lt;= 500

resumen_pdf:
  promptTokenCount &amp;lt;= 45000
  candidatesTokenCount &amp;lt;= 1200
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Si una modificación del prompt lleva el endpoint de chat de 2,000 a más de 2,500 tokens de entrada, el escenario puede fallar antes del despliegue. Así detecta una regresión de coste antes de que se convierta en una factura.&lt;/p&gt;

&lt;p&gt;Multiplique los tokens observados por la tarifa actual:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;coste_entrada = promptTokenCount / 1_000_000 × precio_entrada
coste_salida = candidatesTokenCount / 1_000_000 × precio_salida
coste_total = coste_entrada + coste_salida
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;La &lt;a href="https://apidog.com/es/blog/api-testing-tool-qa-engineers?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;guía de pruebas de API para ingenieros de QA&lt;/a&gt; muestra cómo estructurar escenarios con aserciones en un servicio completo.&lt;/p&gt;

&lt;h2&gt;
  
  
  Preguntas frecuentes
&lt;/h2&gt;

&lt;h3&gt;
  
  
  ¿Cuándo se duplica el precio de Gemini 3.7 Flash?
&lt;/h3&gt;

&lt;p&gt;El 1 de enero de 2027. La tarifa introductoria de $0.75 por 1M de tokens de entrada y $3.75 por 1M de tokens de salida estará vigente hasta el 31 de diciembre de 2026. Después pasará a $1.50 y $7.50.&lt;/p&gt;

&lt;h3&gt;
  
  
  ¿Es Gemini 3.7 Flash más barato que Gemini 3.6 Flash?
&lt;/h3&gt;

&lt;p&gt;En su lanzamiento, sí. El precio introductorio de 3.7 Flash es la mitad del precio de lanzamiento de 3.6 Flash, mientras que DeepSWE v1.1 pasó de 49.0% a 65.3%. Consulte la &lt;a href="https://apidog.com/es/blog/gemini-3-7-flash-specs-pricing-reference?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;referencia rápida de Gemini 3.7 Flash&lt;/a&gt; para comparar especificaciones y benchmarks.&lt;/p&gt;

&lt;h3&gt;
  
  
  ¿Se aplica el precio introductorio en Vertex AI?
&lt;/h3&gt;

&lt;p&gt;Las tarifas de esta guía corresponden a la API de Gemini facturada mediante una clave de AI Studio. Vertex AI usa la facturación de Google Cloud, sus propias SKU y términos empresariales. Verifique los precios en su consola de GCP y en la página oficial de precios.&lt;/p&gt;

&lt;h3&gt;
  
  
  ¿Qué cuenta como token de entrada?
&lt;/h3&gt;

&lt;p&gt;Todo lo que envía: texto, imágenes, vídeo, audio y páginas PDF se convierten en tokens y se facturan como entrada. Los documentos largos y las peticiones con mucho contenido multimedia suelen ser los principales generadores de costes inesperados.&lt;/p&gt;

&lt;p&gt;Después de cada llamada, revise &lt;code&gt;usageMetadata&lt;/code&gt; para obtener el recuento real.&lt;/p&gt;

&lt;h3&gt;
  
  
  ¿Cómo estimo tokens antes de enviar una solicitud?
&lt;/h3&gt;

&lt;p&gt;Use el endpoint &lt;code&gt;countTokens&lt;/code&gt; para medir una carga útil sin generar una respuesta, o envíe un conjunto de solicitudes representativas y lea &lt;code&gt;usageMetadata&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Mida siempre con contenido real. Las estimaciones basadas en tokenizadores de otros proveedores no se trasladan necesariamente entre familias de modelos.&lt;/p&gt;

&lt;h2&gt;
  
  
  Dónde encaja 3.7 Flash en su pila
&lt;/h2&gt;

&lt;p&gt;Gemini 3.7 Flash tiene un descuento introductorio con una fecha de finalización conocida. La estrategia práctica es:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Mueva al modelo el tráfico de “caballo de batalla” que sea adecuado.&lt;/li&gt;
&lt;li&gt;Mida tokens reales por endpoint.&lt;/li&gt;
&lt;li&gt;Añada límites de salida y presupuestos de tokens.&lt;/li&gt;
&lt;li&gt;Identifique rutas que pueden usar un modelo más ligero.&lt;/li&gt;
&lt;li&gt;Calcule la factura con tarifa estándar antes de enero de 2027.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;La medición necesita herramientas. &lt;a href="https://apidog.com/download?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Descargue Apidog&lt;/a&gt; para centralizar solicitudes de Gemini, entornos, aserciones de tokens y verificaciones de costes, y convertir la factura de enero en una cifra prevista.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>¿Qué hay de nuevo en Gemini 3.7 Flash? Características, Benchmarks y Acceso a la API</title>
      <dc:creator>Roobia</dc:creator>
      <pubDate>Fri, 14 Aug 2026 07:56:39 +0000</pubDate>
      <link>https://dev.to/roobia/que-hay-de-nuevo-en-gemini-37-flash-caracteristicas-benchmarks-y-acceso-a-la-api-2pk</link>
      <guid>https://dev.to/roobia/que-hay-de-nuevo-en-gemini-37-flash-caracteristicas-benchmarks-y-acceso-a-la-api-2pk</guid>
      <description>&lt;p&gt;Gemini 3.7 Flash es el modelo de IA de uso general más reciente de Google, lanzado el 13 de agosto de 2026, tres semanas después de Gemini 3.6 Flash. Mantiene una ventana de contexto de 1M de tokens y entrada multimodal, pero mejora de forma notable en benchmarks de codificación y agentes. Su precio introductorio para la API es de $0.75 por 1M de tokens de entrada.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://apidog.com/?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation" class="crayons-btn crayons-btn--primary"&gt;Prueba Apidog hoy&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;La cadencia de lanzamiento importa: mientras &lt;a href="https://www.axios.com/2026/08/13/google-gemini-37-flash" rel="noopener noreferrer"&gt;Gemini 3.5 Pro sigue retrasado&lt;/a&gt;, Google está entregando mejoras primero en Flash. DeepSWE sube 16.3 puntos, AutomationBench pasa de 17.0% a 30.4% y el precio inicial es la mitad del precio de lanzamiento de Gemini 3.6 Flash.&lt;/p&gt;

&lt;p&gt;En este artículo verás qué cambió, cómo estimar costos, dónde usar el modelo y cómo hacer una primera llamada con &lt;code&gt;curl&lt;/code&gt;. Para profundizar en el endpoint, consulta el &lt;a href="https://apidog.com/es/blog/how-to-use-gemini-3-7-flash-api?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;inicio rápido de la API de Gemini 3.7 Flash&lt;/a&gt;. También puedes usar &lt;a href="https://apidog.com?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Apidog&lt;/a&gt; para comparar respuestas con tus prompts actuales antes de migrar.&lt;/p&gt;

&lt;h2&gt;
  
  
  En resumen
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Gemini 3.7 Flash se lanzó el 13 de agosto de 2026. ID del modelo: &lt;code&gt;gemini-3.7-flash&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;DeepSWE v1.1 sube de 49.0% a 65.3%; AutomationBench, de 17.0% a 30.4%; WebDev Arena, de 1538 a 1588 Elo.&lt;/li&gt;
&lt;li&gt;El precio introductorio es de $0.75 por 1M de tokens de entrada y $3.75 por 1M de tokens de salida.&lt;/li&gt;
&lt;li&gt;Las tarifas estándar, $1.50 / $7.50, entran en vigor el 1 de enero de 2027.&lt;/li&gt;
&lt;li&gt;Conserva contexto de 1M de tokens, salida de hasta 64k tokens, entrada multimodal, llamada a funciones, búsqueda como herramienta y uso de computadora.&lt;/li&gt;
&lt;li&gt;Está disponible en la API de Gemini, AI Studio, Gemini, Gemini Spark, Google Antigravity, Android Studio y Gemini Enterprise, en más de 160 países.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Qué es Gemini 3.7 Flash
&lt;/h2&gt;

&lt;p&gt;Flash es el nivel medio de Gemini: más económico y rápido que Pro, y más capaz que Flash-Lite para cargas de trabajo de alto volumen. Gemini 3.7 Flash es el tercer lanzamiento Flash de la línea 3.x.&lt;/p&gt;

&lt;p&gt;El &lt;a href="https://blog.google/innovation-and-ai/models-and-research/gemini-models/introducing-gemini-3-7-flash/" rel="noopener noreferrer"&gt;anuncio oficial&lt;/a&gt; lo posiciona principalmente para codificación y agentes, no solo para chat.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fyz5bxakqovt9d06iter4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fyz5bxakqovt9d06iter4.png" alt="Gemini 3.7 Flash" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;La especificación base se mantiene respecto a Gemini 3.6 Flash:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Contexto:&lt;/strong&gt; 1M de tokens de entrada y hasta 64k tokens de salida.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Entrada multimodal:&lt;/strong&gt; texto, imagen, video, audio y PDF.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Salida:&lt;/strong&gt; texto.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Herramientas:&lt;/strong&gt; llamada a funciones, búsqueda como herramienta y uso de computadora.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Seguridad:&lt;/strong&gt; incluye salvaguardas CBRN y cibernéticas actualizadas.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;El cambio está en el comportamiento. Google afirma mejores resultados al depurar, generar código desplegable, adaptarse a fallos de herramientas, pedir aclaraciones y seguir restricciones de formato.&lt;/p&gt;

&lt;h2&gt;
  
  
  Mejoras en benchmarks: Gemini 3.6 vs. 3.7 Flash
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Benchmark&lt;/th&gt;
&lt;th&gt;Gemini 3.6 Flash&lt;/th&gt;
&lt;th&gt;Gemini 3.7 Flash&lt;/th&gt;
&lt;th&gt;Cambio&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;DeepSWE v1.1 (codificación agéntica)&lt;/td&gt;
&lt;td&gt;49.0%&lt;/td&gt;
&lt;td&gt;65.3%&lt;/td&gt;
&lt;td&gt;+16.3 pts&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;FrontierCode 1.1 Main&lt;/td&gt;
&lt;td&gt;34.4%&lt;/td&gt;
&lt;td&gt;43.6%&lt;/td&gt;
&lt;td&gt;+9.2 pts&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;WebDev Arena (Elo)&lt;/td&gt;
&lt;td&gt;1538&lt;/td&gt;
&lt;td&gt;1588&lt;/td&gt;
&lt;td&gt;+50 Elo&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GDP.pdf (razonamiento documental)&lt;/td&gt;
&lt;td&gt;22.0%&lt;/td&gt;
&lt;td&gt;34.0%&lt;/td&gt;
&lt;td&gt;+12.0 pts&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;AutomationBench (tareas de agente)&lt;/td&gt;
&lt;td&gt;17.0%&lt;/td&gt;
&lt;td&gt;30.4%&lt;/td&gt;
&lt;td&gt;+13.4 pts&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;También obtiene:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;90.7%&lt;/strong&gt; en Harvey LAB-AA, un benchmark de razonamiento legal.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;97.0%&lt;/strong&gt; en recuperación de contexto largo &lt;code&gt;128k-needle&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Los mayores incrementos aparecen en tareas de varios pasos. Esto es especialmente relevante si ejecutas agentes que deben inspeccionar archivos, usar herramientas, corregir errores o recuperar información desde documentos extensos.&lt;/p&gt;

&lt;p&gt;La &lt;a href="https://9to5google.com/2026/08/13/gemini-3-7-flash-launch/" rel="noopener noreferrer"&gt;cobertura del lanzamiento&lt;/a&gt; destaca DeepSWE como el salto principal. Para comparar cómo estas diferencias de benchmarks se trasladan a cargas de trabajo reales entre modelos, consulta esta &lt;a href="https://apidog.com/es/blog/grok-4-6-vs-gpt-5-6-vs-claude-fable-5?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;comparación de Grok 4.6 vs GPT 5.6 vs Claude&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Qué probar en codificación y agentes
&lt;/h2&gt;

&lt;p&gt;No migres solo por un benchmark. Ejecuta pruebas con tareas representativas de tu aplicación.&lt;/p&gt;

&lt;p&gt;Prioriza estos casos:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Depuración multiarchivo&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Pasa un error, el stack trace y los archivos implicados. Evalúa si el modelo identifica la causa raíz en vez de proponer un parche superficial.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Generación de código ejecutable&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Pide una función con tests, validación de entradas y manejo de errores. Verifica si pasa CI sin una segunda iteración.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Recuperación ante fallos de herramientas&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Simula respuestas fallidas de una función o una API. Comprueba si el agente reintenta con parámetros distintos, solicita contexto o entra en bucle.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Seguimiento de restricciones&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Añade límites explícitos: formato JSON, longitud máxima, dependencias permitidas y operaciones prohibidas.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Prompts ambiguos&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Evalúa si pregunta antes de asumir requisitos críticos.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Las capacidades de llamada a funciones, búsqueda como herramienta y uso de computadora se mantienen desde Gemini 3.6 Flash. Para flujos automatizados, prioriza APIs estructuradas cuando existan: son más rápidas y deterministas que controlar un navegador. El &lt;a href="https://apidog.com/es/blog/computer-use-vs-structured-apis?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;análisis de uso de computadora frente a APIs estructuradas&lt;/a&gt; explica cuándo usar cada enfoque.&lt;/p&gt;

&lt;h2&gt;
  
  
  Precios: tarifa introductoria hasta el 31 de diciembre de 2026
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Período&lt;/th&gt;
&lt;th&gt;Entrada por 1M de tokens&lt;/th&gt;
&lt;th&gt;Salida por 1M de tokens&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Hasta el 31 de diciembre de 2026&lt;/td&gt;
&lt;td&gt;$0.75&lt;/td&gt;
&lt;td&gt;$3.75&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Desde el 1 de enero de 2027&lt;/td&gt;
&lt;td&gt;$1.50&lt;/td&gt;
&lt;td&gt;$7.50&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;La tarifa introductoria reduce a la mitad el precio de lanzamiento de Gemini 3.6 Flash. Sin embargo, el costo se duplica el 1 de enero de 2027.&lt;/p&gt;

&lt;h3&gt;
  
  
  Recomendación para presupuestar
&lt;/h3&gt;

&lt;p&gt;Usa la tarifa estándar para proyectar costos a largo plazo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;costo_entrada = tokens_entrada / 1_000_000 * 1.50
costo_salida  = tokens_salida / 1_000_000 * 7.50
costo_total   = costo_entrada + costo_salida
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Verifica siempre las tarifas actuales en la &lt;a href="https://ai.google.dev/gemini-api/docs/pricing" rel="noopener noreferrer"&gt;página oficial de precios&lt;/a&gt; antes de desplegar. Para ejemplos de cálculo en chatbots, pipelines de documentos y agentes, consulta el &lt;a href="https://apidog.com/es/blog/gemini-3-7-flash-pricing-explained?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;análisis de precios de Gemini 3.7 Flash&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Dónde puedes usarlo hoy
&lt;/h2&gt;

&lt;p&gt;Gemini 3.7 Flash está disponible en más de 160 países mediante:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;API de Gemini:&lt;/strong&gt; usa una clave de AI Studio y el modelo &lt;code&gt;gemini-3.7-flash&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Google AI Studio:&lt;/strong&gt; prueba prompts desde el navegador.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Aplicación Gemini:&lt;/strong&gt; interfaz de chat para consumidores.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Gemini Spark:&lt;/strong&gt; para suscriptores de AI Pro y Ultra.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Google Antigravity:&lt;/strong&gt; entorno de desarrollo agéntico.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Android Studio:&lt;/strong&gt; asistencia de código integrada.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Gemini Enterprise:&lt;/strong&gt; opción gestionada para organizaciones.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Para cargas empresariales, Vertex AI usa &lt;code&gt;aiplatform.googleapis.com&lt;/code&gt; con OAuth, IAM y registro de auditoría. El modelo y el esquema de solicitud son los mismos; cambian la autenticación y las garantías operativas.&lt;/p&gt;

&lt;h2&gt;
  
  
  Por qué Google lanzó Flash antes que Gemini 3.5 Pro
&lt;/h2&gt;

&lt;p&gt;El orden es inusual: Gemini 3.6 Flash llegó a finales de julio, Gemini 3.7 Flash tres semanas después y Gemini 3.5 Pro sigue sin fecha.&lt;/p&gt;

&lt;p&gt;Según Axios, Google está lanzando deliberadamente actualizaciones de Flash antes de su próximo modelo insignia. Para equipos de producto, esto cambia la prioridad de evaluación: Flash ya no debe considerarse automáticamente la opción rezagada frente a Pro.&lt;/p&gt;

&lt;p&gt;Si actualmente usas Gemini 3.6 Flash, la migración normalmente comienza con un cambio de ID de modelo y una pasada de regresión:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight diff"&gt;&lt;code&gt;&lt;span class="gd"&gt;- gemini-3.6-flash
&lt;/span&gt;&lt;span class="gi"&gt;+ gemini-3.7-flash
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;La &lt;a href="https://apidog.com/es/blog/gemini-3-6-to-3-7-flash-migration-guide?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;guía de migración de Gemini 3.6 a 3.7 Flash&lt;/a&gt; detalla el proceso.&lt;/p&gt;

&lt;h2&gt;
  
  
  Cómo probar la API en cinco minutos
&lt;/h2&gt;

&lt;p&gt;Primero, crea una clave en &lt;a href="https://aistudio.google.com/apikey" rel="noopener noreferrer"&gt;Google AI Studio&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Después, expórtala como variable de entorno:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;GEMINI_API_KEY&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"AIza..."&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Envía una solicitud a &lt;code&gt;generateContent&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="s2"&gt;"https://generativelanguage.googleapis.com/v1beta/models/gemini-3.7-flash:generateContent"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"x-goog-api-key: &lt;/span&gt;&lt;span class="nv"&gt;$GEMINI_API_KEY&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Content-Type: application/json"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="s1"&gt;'{
    "contents": [{
      "parts": [{
        "text": "Review this function for bugs: def dedupe(items): return list(set(items))"
      }]
    }],
    "generationConfig": {
      "temperature": 0.4,
      "maxOutputTokens": 1024
    }
  }'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;La respuesta incluye:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;candidates&lt;/code&gt;: respuestas generadas.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;content.parts&lt;/code&gt;: texto de la respuesta.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;usageMetadata&lt;/code&gt;: número de tokens de entrada y salida.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Registra &lt;code&gt;usageMetadata&lt;/code&gt; desde el inicio. Es la fuente de datos para medir costos reales y detectar prompts que consumen más tokens de lo previsto.&lt;/p&gt;

&lt;p&gt;Para recibir resultados en streaming, reemplaza el endpoint:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;:generateContent
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;por:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;:streamGenerateContent?alt=sse
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;La API devolverá eventos SSE.&lt;/p&gt;

&lt;h3&gt;
  
  
  Comparar Gemini 3.6 Flash y 3.7 Flash
&lt;/h3&gt;

&lt;p&gt;Una forma práctica de validar la migración es ejecutar exactamente los mismos prompts contra ambos modelos.&lt;/p&gt;

&lt;p&gt;En &lt;a href="https://apidog.com?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Apidog&lt;/a&gt;:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Importa la especificación de la API de Gemini.&lt;/li&gt;
&lt;li&gt;Guarda &lt;code&gt;GEMINI_API_KEY&lt;/code&gt; como variable de entorno.&lt;/li&gt;
&lt;li&gt;Usa una variable para el ID del modelo.&lt;/li&gt;
&lt;li&gt;Ejecuta la misma colección con &lt;code&gt;gemini-3.6-flash&lt;/code&gt; y &lt;code&gt;gemini-3.7-flash&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Compara salida, latencia y &lt;code&gt;usageMetadata&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Guarda respuestas esperadas como ejemplos para futuras pruebas de regresión.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Esto permite validar el seguimiento de instrucciones con tus propios prompts, en lugar de depender únicamente de benchmarks públicos.&lt;/p&gt;

&lt;h2&gt;
  
  
  Preguntas frecuentes
&lt;/h2&gt;

&lt;h3&gt;
  
  
  ¿Es Gemini 3.7 Flash de uso gratuito?
&lt;/h3&gt;

&lt;p&gt;La API de Gemini incluye un nivel gratuito a través de AI Studio con cuota diaria para prototipos. El uso de pago parte de $0.75 por 1M de tokens de entrada hasta el 31 de diciembre de 2026.&lt;/p&gt;

&lt;p&gt;La guía de &lt;a href="https://apidog.com/es/blog/get-free-unlimited-gemini-api?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;acceso gratuito a la API de Gemini&lt;/a&gt; cubre los límites y cómo trabajar dentro de ellos.&lt;/p&gt;

&lt;h3&gt;
  
  
  ¿Cuál es la diferencia entre Gemini 3.6 Flash y 3.7 Flash?
&lt;/h3&gt;

&lt;p&gt;Las especificaciones principales no cambian: mismo contexto, límite de salida, modalidades y herramientas. La diferencia está en el rendimiento:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;DeepSWE: +16.3 puntos.&lt;/li&gt;
&lt;li&gt;AutomationBench: +13.4 puntos.&lt;/li&gt;
&lt;li&gt;WebDev Arena: +50 Elo.&lt;/li&gt;
&lt;li&gt;Mejor depuración, seguimiento de instrucciones y planificación de varios pasos, según Google.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  ¿Gemini 3.7 Flash reemplaza a Gemini 3.5 Pro?
&lt;/h3&gt;

&lt;p&gt;No. Pro sigue siendo el nivel insignia para las tareas de razonamiento más complejas. Gemini 3.7 Flash está orientado a producción de alto volumen, donde costo, latencia y calidad deben equilibrarse.&lt;/p&gt;

&lt;h3&gt;
  
  
  ¿Qué ocurre con los precios el 1 de enero de 2027?
&lt;/h3&gt;

&lt;p&gt;Finaliza la tarifa introductoria. Los precios pasan a $1.50 por 1M de tokens de entrada y $7.50 por 1M de tokens de salida.&lt;/p&gt;

&lt;h3&gt;
  
  
  ¿Puede Gemini 3.7 Flash procesar imágenes y PDFs?
&lt;/h3&gt;

&lt;p&gt;Sí. Admite texto, imágenes, video, audio y PDF en el array &lt;code&gt;contents&lt;/code&gt;. La salida es texto. Google reporta una mejora en GDP.pdf, de 22.0% a 34.0%, para razonamiento documental.&lt;/p&gt;

&lt;h2&gt;
  
  
  Dónde encaja Gemini 3.7 Flash en tu pila
&lt;/h2&gt;

&lt;p&gt;Gemini 3.7 Flash combina benchmarks de agentes más altos con compatibilidad práctica con Gemini 3.6 Flash y una tarifa introductoria reducida.&lt;/p&gt;

&lt;p&gt;La ruta recomendada es simple:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Ejecuta tu suite de prompts contra &lt;code&gt;gemini-3.7-flash&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Compara calidad, latencia y uso de tokens con tu modelo actual.&lt;/li&gt;
&lt;li&gt;Prueba flujos de herramientas, recuperación ante fallos y tareas multiarchivo.&lt;/li&gt;
&lt;li&gt;Proyecta costos usando la tarifa estándar de 2027.&lt;/li&gt;
&lt;li&gt;Migra solo los casos donde la mejora sea medible.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Puedes &lt;a href="https://apidog.com/download?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;descargar Apidog&lt;/a&gt; para centralizar esta comparación: guarda respuestas de Gemini 3.6 Flash como ejemplos, reproduce las mismas solicitudes con Gemini 3.7 Flash y valida los resultados con tu carga de trabajo real.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>¿Cómo usar la API de Gemini 3.7 Flash?</title>
      <dc:creator>Roobia</dc:creator>
      <pubDate>Fri, 14 Aug 2026 07:56:03 +0000</pubDate>
      <link>https://dev.to/roobia/como-usar-la-api-de-gemini-37-flash-2gcc</link>
      <guid>https://dev.to/roobia/como-usar-la-api-de-gemini-37-flash-2gcc</guid>
      <description>&lt;p&gt;Google lanzó Gemini 3.7 Flash el 13 de agosto de 2026, tres semanas después de 3.6 Flash, y lo presenta como “nuestro modelo de caballo de batalla más inteligente”. Para desarrolladores, los puntos clave son: las puntuaciones de codificación agéntica aumentaron notablemente —DeepSWE v1.1 pasó de 49.0% a 65.3%—, el precio de introducción es la mitad del precio de lanzamiento de 3.6 Flash y la superficie de la API no cambió. Si ya consume Gemini, solo debe cambiar el ID del modelo. Si aún no lo usa, este es un punto de entrada económico para un modelo de esta capacidad.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://apidog.com/?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation" class="crayons-btn crayons-btn--primary"&gt;Prueba Apidog hoy&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;Esta guía muestra cómo obtener una clave de API, hacer una primera llamada con cURL, migrarla a Python y Node.js, transmitir respuestas, ajustar &lt;code&gt;generationConfig&lt;/code&gt; y probar prompts en &lt;a href="https://apidog.com?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Apidog&lt;/a&gt; antes de integrarlos en su aplicación. Según el &lt;a href="https://blog.google/innovation-and-ai/models-and-research/gemini-models/introducing-gemini-3-7-flash/" rel="noopener noreferrer"&gt;anuncio oficial&lt;/a&gt;, el modelo ofrece 1 millón de tokens de contexto, 64k tokens de salida, entrada multimodal, llamada a funciones, búsqueda como herramienta y uso de computadora.&lt;/p&gt;

&lt;p&gt;Si construyó con la generación anterior, la forma de la solicitud se mantiene desde nuestra &lt;a href="https://apidog.com/es/blog/how-to-use-gemini-3-flash-preview-api?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;guía de la API de vista previa de Gemini 3 Flash&lt;/a&gt;. Este artículo se centra en el flujo de trabajo de 3.7.&lt;/p&gt;

&lt;h2&gt;
  
  
  En resumen
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;ID del modelo:&lt;/strong&gt; &lt;code&gt;gemini-3.7-flash&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Endpoint síncrono:&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  POST https://generativelanguage.googleapis.com/v1beta/models/gemini-3.7-flash:generateContent
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Autenticación:&lt;/strong&gt; encabezado &lt;code&gt;x-goog-api-key: &amp;lt;KEY&amp;gt;&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Precio de introducción:&lt;/strong&gt; $0.75 por 1 millón de tokens de entrada y $3.75 por 1 millón de tokens de salida hasta el 31 de diciembre de 2026. Desde el 1 de enero de 2027, las tarifas pasan a $1.50 y $7.50.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Límites:&lt;/strong&gt; 1 millón de tokens de entrada y 64k tokens de salida.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Entrada:&lt;/strong&gt; texto, imagen, video, audio y PDF.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Salida:&lt;/strong&gt; texto.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Streaming:&lt;/strong&gt; use &lt;code&gt;:streamGenerateContent?alt=sse&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pruebas:&lt;/strong&gt; valide las solicitudes en &lt;a href="https://apidog.com?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Apidog&lt;/a&gt; antes de escribir código de aplicación.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Para qué sirve Gemini 3.7 Flash
&lt;/h2&gt;

&lt;p&gt;Los modelos Flash equilibran capacidad, velocidad y precio. Gemini 3.7 Flash reduce ese compromiso respecto a 3.6 Flash:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;DeepSWE v1.1: &lt;strong&gt;49.0% → 65.3%&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;FrontierCode 1.1 Main: &lt;strong&gt;34.4% → 43.6%&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;AutomationBench: &lt;strong&gt;17.0% → 30.4%&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;WebDev Arena Elo: &lt;strong&gt;1538 → 1588&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Frew8dv6kb73tnkos70b1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Frew8dv6kb73tnkos70b1.png" alt="Gráfico mostrando las mejoras de Gemini 3.7 Flash sobre 3.6 Flash en varias métricas de rendimiento. DeepSWE V1.1 pasa de 49% a 65.3%, FrontierCode 1.1 Main de 34.4% a 43.6%, AutomationBench de 17% a 30.4%, y WebDev Arena Elo de 1538 a 1588." width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Use 3.7 Flash especialmente cuando:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Ejecute bucles de agentes:&lt;/strong&gt; AutomationBench casi duplicó su puntuación. Es adecuado para flujos de varios pasos y llamadas frecuentes a herramientas.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Genere o depure código:&lt;/strong&gt; las mejoras en DeepSWE y FrontierCode apuntan a mejores resultados en corrección de errores y generación de código desplegable.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Procese documentos:&lt;/strong&gt; GDP.pdf pasó de 22.0% a 34.0%, y PDF es un tipo de entrada de primera clase.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Necesite multimodalidad con presupuesto limitado:&lt;/strong&gt; texto, imágenes, video, audio y PDF usan el mismo array &lt;code&gt;contents&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Para más detalles sobre capacidades, puntuaciones y salvaguardas, consulte &lt;a href="https://apidog.com/es/blog/whats-new-in-gemini-3-7-flash?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;novedades de Gemini 3.7 Flash&lt;/a&gt;. Como contexto, Gemini 3.5 Pro sigue retrasado y &lt;a href="https://www.axios.com/2026/08/13/google-gemini-37-flash" rel="noopener noreferrer"&gt;Axios informa&lt;/a&gt; que Google está enviando actualizaciones de Flash antes de su próximo modelo insignia.&lt;/p&gt;

&lt;h2&gt;
  
  
  Obtener una clave de API
&lt;/h2&gt;

&lt;p&gt;Tiene dos rutas.&lt;/p&gt;

&lt;h3&gt;
  
  
  AI Studio: ruta rápida
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Abra &lt;a href="https://aistudio.google.com/apikey" rel="noopener noreferrer"&gt;aistudio.google.com/apikey&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Haga clic en &lt;strong&gt;Obtener clave de API&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Seleccione un proyecto de Google Cloud.&lt;/li&gt;
&lt;li&gt;Copie la clave generada.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;La clave funciona con &lt;code&gt;generativelanguage.googleapis.com&lt;/code&gt;. Gemini 3.7 Flash está disponible en más de 160 países.&lt;/p&gt;

&lt;h3&gt;
  
  
  Vertex AI: ruta de producción
&lt;/h3&gt;

&lt;p&gt;Si su infraestructura está en GCP, use Vertex AI:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Autenticación mediante OAuth, cuentas de servicio o tokens de corta duración.&lt;/li&gt;
&lt;li&gt;Endpoint bajo &lt;code&gt;aiplatform.googleapis.com&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;IAM, registros de auditoría y endpoints regionales.&lt;/li&gt;
&lt;li&gt;Mismo ID de modelo y mismo cuerpo de solicitud; cambian la URL y el mecanismo de autenticación.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Use AI Studio para prototipos y migre a Vertex antes de enviar tráfico de producción.&lt;/p&gt;

&lt;p&gt;Exporte la clave como variable de entorno:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;GEMINI_API_KEY&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"AIza..."&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;No codifique la clave en el repositorio ni la envíe como &lt;code&gt;?key=&lt;/code&gt; en producción. Las cadenas de consulta pueden quedar registradas en logs de servidores y proxies.&lt;/p&gt;

&lt;h2&gt;
  
  
  Endpoint y autenticación
&lt;/h2&gt;

&lt;p&gt;Para una solicitud síncrona:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;POST https://generativelanguage.googleapis.com/v1beta/models/gemini-3.7-flash:generateContent
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Para streaming mediante Server-Sent Events:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;POST https://generativelanguage.googleapis.com/v1beta/models/gemini-3.7-flash:streamGenerateContent?alt=sse
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Envíe la clave en el encabezado:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;x-goog-api-key: $GEMINI_API_KEY
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Primera solicitud con cURL
&lt;/h2&gt;

&lt;p&gt;Pruebe primero una solicitud simple antes de integrar un SDK:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="s2"&gt;"https://generativelanguage.googleapis.com/v1beta/models/gemini-3.7-flash:generateContent"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"x-goog-api-key: &lt;/span&gt;&lt;span class="nv"&gt;$GEMINI_API_KEY&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Content-Type: application/json"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="s1"&gt;'{
    "contents": [{
      "role": "user",
      "parts": [{
        "text": "Revisa este SQL en busca de riesgo de inyección: SELECT * FROM orders WHERE id = ${orderId}"
      }]
    }],
    "generationConfig": {
      "temperature": 0.3,
      "maxOutputTokens": 1024
    }
  }'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;La respuesta contiene:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;candidates&lt;/code&gt;: candidatos generados.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;candidates[].content.parts&lt;/code&gt;: texto o llamadas a funciones.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;candidates[].finishReason&lt;/code&gt;: motivo de finalización.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;usageMetadata&lt;/code&gt;: consumo de tokens.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Revise &lt;code&gt;usageMetadata&lt;/code&gt; en cada llamada. Los tokens de salida cuestan cinco veces más que los tokens de entrada durante la tarifa introductoria.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Gemini usa &lt;code&gt;contents&lt;/code&gt;, &lt;code&gt;role&lt;/code&gt; y &lt;code&gt;parts&lt;/code&gt;; no usa el formato &lt;code&gt;messages&lt;/code&gt; de OpenAI. Si migra desde otro proveedor, adapte ese esquema antes de depurar prompts.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Inicio rápido con Python
&lt;/h2&gt;

&lt;p&gt;Instale o actualice el SDK:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pip &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;--upgrade&lt;/span&gt; google-generativeai
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Cree una llamada con instrucción de sistema y configuración de generación:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;google.generativeai&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;genai&lt;/span&gt;

&lt;span class="n"&gt;genai&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;configure&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;api_key&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;environ&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;GEMINI_API_KEY&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;

&lt;span class="n"&gt;model&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;genai&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;GenerativeModel&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;model_name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;gemini-3.7-flash&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;system_instruction&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Eres un revisor de código. &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Marca los problemas como bloqueantes o no bloqueantes.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
    &lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="n"&gt;generation_config&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;temperature&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;0.3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;max_output_tokens&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;2048&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;generate_content&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Revisa esta ruta de Flask en busca de problemas de seguridad:&lt;/span&gt;&lt;span class="se"&gt;\n\n&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;@app.route(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;/user/&amp;lt;id&amp;gt;&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;)&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;def get_user(id):&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;    return db.execute(f&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;SELECT * FROM users WHERE id = {id}&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;)&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;tokens de entrada:&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;usage_metadata&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;prompt_token_count&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;tokens de salida:&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;usage_metadata&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;candidates_token_count&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Enviar un PDF
&lt;/h3&gt;

&lt;p&gt;La entrada multimodal usa el mismo array de contenido. Para enviar un PDF, súbalo mediante la API de Archivos y páselo como parte de la solicitud:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;invoice&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;genai&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;upload_file&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;q3-invoice.pdf&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;generate_content&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;
    &lt;span class="n"&gt;invoice&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Extrae el número de factura, el total y la fecha de vencimiento como JSON.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;])&lt;/span&gt;

&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Este patrón es útil para extracción estructurada de documentos complejos.&lt;/p&gt;

&lt;h2&gt;
  
  
  Inicio rápido con Node.js
&lt;/h2&gt;

&lt;p&gt;Instale el SDK:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt; @google/generative-ai
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Use un esquema de respuesta para obtener JSON analizable:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;GoogleGenerativeAI&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@google/generative-ai&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;genAI&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;GoogleGenerativeAI&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;GEMINI_API_KEY&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;model&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;genAI&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getGenerativeModel&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;model&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;gemini-3.7-flash&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;generationConfig&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;temperature&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;0.3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;maxOutputTokens&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;2048&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;responseMimeType&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;application/json&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;responseSchema&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;object&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;properties&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="na"&gt;severity&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
          &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;string&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
          &lt;span class="na"&gt;enum&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;blocking&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;non-blocking&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
        &lt;span class="p"&gt;},&lt;/span&gt;
        &lt;span class="na"&gt;issues&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
          &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;array&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
          &lt;span class="na"&gt;items&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;string&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
        &lt;span class="p"&gt;},&lt;/span&gt;
      &lt;span class="p"&gt;},&lt;/span&gt;
      &lt;span class="na"&gt;required&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;severity&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;issues&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;model&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;generateContent&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Revisa este manejador de Express: &lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;app.get('/search', (req, res) =&amp;gt; res.send(eval(req.query.q)))&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;JSON&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;parse&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;text&lt;/span&gt;&lt;span class="p"&gt;()));&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;responseSchema&lt;/code&gt; solo funciona junto con:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;responseMimeType&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;application/json&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Use ambos para evitar que el código posterior tenga que procesar texto libre.&lt;/p&gt;

&lt;h2&gt;
  
  
  Streaming
&lt;/h2&gt;

&lt;p&gt;Para interfaces de chat o respuestas visibles para el usuario, active streaming.&lt;/p&gt;

&lt;h3&gt;
  
  
  Python
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;stream&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;generate_content&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Explica el problema de consulta N+1 con un ejemplo ORM concreto.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;stream&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;chunk&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;stream&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;chunk&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;chunk&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;end&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;""&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;flush&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;flush=True&lt;/code&gt; permite imprimir cada fragmento inmediatamente.&lt;/p&gt;

&lt;h3&gt;
  
  
  HTTP con SSE
&lt;/h3&gt;

&lt;p&gt;Use:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;:streamGenerateContent?alt=sse
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Cada línea &lt;code&gt;data:&lt;/code&gt; contiene una carga parcial de &lt;code&gt;candidates&lt;/code&gt;. El fragmento final incluye &lt;code&gt;usageMetadata&lt;/code&gt;, por lo que el conteo de tokens solo es definitivo cuando termina la transmisión.&lt;/p&gt;

&lt;h2&gt;
  
  
  Ajustar &lt;code&gt;generationConfig&lt;/code&gt;
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Parámetro&lt;/th&gt;
&lt;th&gt;Tipo&lt;/th&gt;
&lt;th&gt;Uso práctico&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;maxOutputTokens&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;entero&lt;/td&gt;
&lt;td&gt;Limita la salida hasta el máximo de 64k. Es la principal palanca de coste.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;temperature&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;número&lt;/td&gt;
&lt;td&gt;De 0 a 2. Use &lt;code&gt;0.2&lt;/code&gt; a &lt;code&gt;0.4&lt;/code&gt; para código y extracción; &lt;code&gt;0.7+&lt;/code&gt; para contenido creativo.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;responseMimeType&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;cadena&lt;/td&gt;
&lt;td&gt;Use &lt;code&gt;application/json&lt;/code&gt; para solicitar JSON.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;responseSchema&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;objeto&lt;/td&gt;
&lt;td&gt;Impone una estructura de salida junto con MIME JSON.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;topP&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;número&lt;/td&gt;
&lt;td&gt;Corte de muestreo de núcleo. Mantenga el valor predeterminado salvo que ajuste deliberadamente el muestreo.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;stopSequences&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;array&lt;/td&gt;
&lt;td&gt;Detiene la generación al encontrar delimitadores definidos.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;No use 64k tokens de salida como valor predeterminado. Ajuste &lt;code&gt;maxOutputTokens&lt;/code&gt; al tamaño real que necesita su caso de uso.&lt;/p&gt;

&lt;p&gt;Para ejemplos de costes por carga de trabajo, consulte el &lt;a href="https://apidog.com/es/blog/gemini-3-7-flash-pricing-explained?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;desglose de precios de Gemini 3.7 Flash&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Además de &lt;code&gt;generationConfig&lt;/code&gt;, el cuerpo admite:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;tools&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Declaraciones de funciones&lt;/li&gt;
&lt;li&gt;Búsqueda como herramienta&lt;/li&gt;
&lt;li&gt;Uso de computadora&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;toolConfig&lt;/code&gt; para forzar llamadas a herramientas&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Para implementar estos flujos, consulte el &lt;a href="https://apidog.com/es/blog/gemini-3-7-flash-function-calling-tutorial?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;tutorial de llamada a funciones de Gemini 3.7 Flash&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Pruebe el endpoint en Apidog antes de escribir código de aplicación
&lt;/h2&gt;

&lt;p&gt;Iterar prompts dentro de un script suele ser lento: editar, ejecutar, revisar logs y repetir. Además, cada ejecución consume tokens. Un flujo más eficiente es validar primero la solicitud en un cliente API y portar al SDK solo cuando la respuesta sea correcta.&lt;/p&gt;

&lt;p&gt;Configure Gemini en &lt;a href="https://apidog.com?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Apidog&lt;/a&gt;:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Cree un proyecto&lt;/strong&gt; e importe la especificación OpenAPI desde la &lt;a href="https://ai.google.dev/gemini-api/docs" rel="noopener noreferrer"&gt;documentación de la API de Google&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Añada una variable de entorno&lt;/strong&gt; llamada &lt;code&gt;GEMINI_API_KEY&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Asigne la variable al encabezado&lt;/strong&gt; &lt;code&gt;x-goog-api-key&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Guarde el modelo en una variable&lt;/strong&gt;, por ejemplo:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;   GEMINI_MODEL=gemini-3.7-flash
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Construya &lt;code&gt;contents&lt;/code&gt; en el editor JSON&lt;/strong&gt; y valide el cuerpo antes de enviarlo.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pruebe el endpoint SSE&lt;/strong&gt; para ver los fragmentos de streaming en vivo.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Guarde respuestas correctas como ejemplos&lt;/strong&gt; para reutilizarlas en pruebas sin llamar continuamente a la API real.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;También puede crear escenarios de prueba con aserciones sobre:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;finishReason&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Esquema de respuesta&lt;/li&gt;
&lt;li&gt;&lt;code&gt;usageMetadata&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Conteos de tokens&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Este enfoque convierte una prueba manual en una suite de regresión para cambios de prompt. Consulte la &lt;a href="https://apidog.com/es/blog/api-testing-tool-qa-engineers?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;guía de pruebas de API para ingenieros de QA&lt;/a&gt; para aplicar el mismo patrón.&lt;/p&gt;

&lt;h2&gt;
  
  
  Manejo de errores y límites de velocidad
&lt;/h2&gt;

&lt;p&gt;La API devuelve un objeto &lt;code&gt;error&lt;/code&gt; de nivel superior con &lt;code&gt;code&lt;/code&gt;, &lt;code&gt;status&lt;/code&gt; y &lt;code&gt;message&lt;/code&gt;.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Código&lt;/th&gt;
&lt;th&gt;Estado&lt;/th&gt;
&lt;th&gt;Significado&lt;/th&gt;
&lt;th&gt;Acción recomendada&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;400&lt;/td&gt;
&lt;td&gt;&lt;code&gt;INVALID_ARGUMENT&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Cuerpo mal formado, rol incorrecto o &lt;code&gt;contents&lt;/code&gt; vacío.&lt;/td&gt;
&lt;td&gt;Valide el JSON antes de enviar la solicitud.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;401&lt;/td&gt;
&lt;td&gt;&lt;code&gt;UNAUTHENTICATED&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Clave faltante o revocada.&lt;/td&gt;
&lt;td&gt;Exporte de nuevo &lt;code&gt;GEMINI_API_KEY&lt;/code&gt; y confirme que sigue activa.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;403&lt;/td&gt;
&lt;td&gt;&lt;code&gt;PERMISSION_DENIED&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;El proyecto no tiene acceso o facturación.&lt;/td&gt;
&lt;td&gt;Revise permisos, proyecto y estado de facturación.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;429&lt;/td&gt;
&lt;td&gt;&lt;code&gt;RESOURCE_EXHAUSTED&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Se alcanzó un límite de velocidad o cuota.&lt;/td&gt;
&lt;td&gt;Reintente con espera aleatoria, agrupe solicitudes o actualice el nivel.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;500&lt;/td&gt;
&lt;td&gt;&lt;code&gt;INTERNAL&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Error transitorio del servidor.&lt;/td&gt;
&lt;td&gt;Reintente con retroceso exponencial.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;503&lt;/td&gt;
&lt;td&gt;&lt;code&gt;UNAVAILABLE&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Servicio sobrecargado.&lt;/td&gt;
&lt;td&gt;Reintente después de unos segundos; en Vertex, pruebe otra región.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Implemente reintentos para errores &lt;code&gt;429&lt;/code&gt; y &lt;code&gt;5xx&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;random&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;time&lt;/span&gt;

&lt;span class="n"&gt;RETRYABLE_STATUS_CODES&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="mi"&gt;429&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;500&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;503&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;retry_with_backoff&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;call&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;max_attempts&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;attempt&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nf"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;max_attempts&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="k"&gt;try&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;call&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
        &lt;span class="k"&gt;except&lt;/span&gt; &lt;span class="nb"&gt;Exception&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;error&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="n"&gt;status_code&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;getattr&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;error&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;status_code&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="bp"&gt;None&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

            &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;status_code&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;RETRYABLE_STATUS_CODES&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
                &lt;span class="k"&gt;raise&lt;/span&gt;

            &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;attempt&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="n"&gt;max_attempts&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
                &lt;span class="k"&gt;raise&lt;/span&gt;

            &lt;span class="n"&gt;delay&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;min&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt; &lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="n"&gt;attempt&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;30&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;random&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;uniform&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
            &lt;span class="n"&gt;time&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;sleep&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;delay&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Mantenga además estas prácticas:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Configure alertas al 80% de la cuota.&lt;/li&gt;
&lt;li&gt;Consulte los límites actuales en la &lt;a href="https://ai.google.dev/gemini-api/docs/pricing" rel="noopener noreferrer"&gt;página de precios y límites de la API de Gemini&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Guarde el ID del modelo en una variable de entorno para poder volver a &lt;code&gt;gemini-3.6-flash&lt;/code&gt; sin desplegar código.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Preguntas frecuentes
&lt;/h2&gt;

&lt;h3&gt;
  
  
  ¿Es Gemini 3.7 Flash de uso gratuito?
&lt;/h3&gt;

&lt;p&gt;AI Studio ofrece un nivel gratuito con cuota diaria para prototipos. La tarifa de introducción pagada es de $0.75 por 1 millón de tokens de entrada hasta el 31 de diciembre de 2026.&lt;/p&gt;

&lt;p&gt;Para conocer los niveles y sus límites, consulte la guía de &lt;a href="https://apidog.com/es/blog/get-free-unlimited-gemini-api?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;acceso gratuito a la API de Gemini&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  ¿Cuál es la diferencia entre AI Studio y Vertex AI?
&lt;/h3&gt;

&lt;p&gt;El modelo y el cuerpo de solicitud son los mismos.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;AI Studio:&lt;/strong&gt; clave de API y &lt;code&gt;generativelanguage.googleapis.com&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Vertex AI:&lt;/strong&gt; OAuth, &lt;code&gt;aiplatform.googleapis.com&lt;/code&gt;, IAM, auditoría y endpoints regionales.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Empiece en AI Studio y migre a Vertex cuando tenga tráfico de producción.&lt;/p&gt;

&lt;h3&gt;
  
  
  ¿Puedo enviar imágenes, audio y PDF?
&lt;/h3&gt;

&lt;p&gt;Sí. Puede enviar texto, imagen, video, audio y PDF como partes del array &lt;code&gt;contents&lt;/code&gt;, en línea como base64 o por referencia mediante la API de Archivos. La salida es texto.&lt;/p&gt;

&lt;h3&gt;
  
  
  ¿Cuál es el tamaño de contexto y el límite de salida?
&lt;/h3&gt;

&lt;p&gt;El modelo admite 1 millón de tokens de entrada y 64k de salida. Aunque la recuperación de contexto largo sea fiable, dividir entradas extensas puede reducir costes porque cada token de entrada se factura.&lt;/p&gt;

&lt;h3&gt;
  
  
  ¿Debo actualizar desde Gemini 3.6 Flash?
&lt;/h3&gt;

&lt;p&gt;Para agentes y cargas de trabajo de código, las mejoras de rendimiento justifican evaluar la actualización. El cambio básico es sustituir el ID del modelo.&lt;/p&gt;

&lt;p&gt;Antes de enviar tráfico de producción, ejecute pruebas de regresión sobre sus prompts. Consulte la &lt;a href="https://apidog.com/es/blog/gemini-3-6-to-3-7-flash-migration-guide?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;guía de migración de 3.6 a 3.7 Flash&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Dónde encaja 3.7 Flash en su pila
&lt;/h2&gt;

&lt;p&gt;Gemini 3.7 Flash combina un precio de introducción inferior con mejoras en agentes, código y procesamiento documental. Una estrategia práctica es:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Dirigir nuevas pruebas de agentes, código y extracción de documentos a &lt;code&gt;gemini-3.7-flash&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Limitar &lt;code&gt;maxOutputTokens&lt;/code&gt; para controlar costes.&lt;/li&gt;
&lt;li&gt;Validar prompts y respuestas en un cliente API.&lt;/li&gt;
&lt;li&gt;Crear pruebas de regresión para &lt;code&gt;finishReason&lt;/code&gt;, JSON estructurado y consumo de tokens.&lt;/li&gt;
&lt;li&gt;Mantener &lt;code&gt;gemini-3.6-flash&lt;/code&gt; como valor de reversión mediante una variable de entorno.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Empiece con la solicitud cURL, valide el contrato de respuesta y luego porte la integración a Python o Node.js. &lt;a href="https://apidog.com/download?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Descargue Apidog&lt;/a&gt; para importar la especificación de Gemini, configurar la clave una vez y probar solicitudes síncronas, streaming y llamadas a herramientas desde un mismo espacio de trabajo.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Grok 4.6 vs GPT-5.6 vs Claude Fable 5: ¿Qué modelo elegir para desarrolladores API?</title>
      <dc:creator>Roobia</dc:creator>
      <pubDate>Thu, 13 Aug 2026 08:30:28 +0000</pubDate>
      <link>https://dev.to/roobia/grok-46-vs-gpt-56-vs-claude-fable-5-que-modelo-elegir-para-desarrolladores-api-k92</link>
      <guid>https://dev.to/roobia/grok-46-vs-gpt-56-vs-claude-fable-5-que-modelo-elegir-para-desarrolladores-api-k92</guid>
      <description>&lt;p&gt;Grok 4.6 se lanzó el 12 de agosto con una propuesta que cambia la comparación entre modelos frontera: empata con GPT-5.6 Sol en el Índice de Análisis Artificial, pero cuesta $6 por millón de tokens de salida frente a los $30 de Sol. Muchas comparativas todavía usan Grok 4.5, que estaba más alejado de la frontera; para evaluar la decisión actual, hay que partir de los datos de Grok 4.6.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://apidog.com/?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation" class="crayons-btn crayons-btn--primary"&gt;Prueba Apidog hoy&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;La decisión rápida es esta: GPT-5.6 Sol sigue siendo la opción más segura para agentes de código que trabajan a escala de repositorio; Claude Fable 5 lidera por poco el trabajo autónomo de largo horizonte; y Grok 4.6 es la alternativa de valor cuando necesitas capacidad cercana a frontera con menor coste. La elección depende de tu carga de trabajo, por lo que conviene comparar benchmarks, coste por tarea, compatibilidad de API y resultados en tu propio stack. Si quieres ejecutar esa prueba, &lt;a href="https://apidog.com?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Apidog&lt;/a&gt; permite trabajar con las tres APIs desde un único espacio de trabajo.&lt;/p&gt;

&lt;h2&gt;
  
  
  En resumen
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Índice de inteligencia:&lt;/strong&gt; Claude Fable 5 lidera con 62; Grok 4.6 y GPT-5.6 Sol empatan con 61.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Precio de salida por 1M de tokens:&lt;/strong&gt; Grok 4.6 cuesta $6; Claude Opus 4.8, $25; GPT-5.6 Sol, $30.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Contexto:&lt;/strong&gt; GPT-5.6 Sol ofrece 1.05M tokens, Claude Fable 5 ofrece 1M y Grok 4.6 ofrece 500K.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Codificación:&lt;/strong&gt; Sol Max lidera DeepSWE (73.0% frente a 65.9% de Grok); Fable 5 Max lidera FrontierCode (63.6% frente a 61.3%).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Agentes:&lt;/strong&gt; Fable 5 Max lidera APEX-Agents con 59.2%; Grok 4.6 (57.5%) supera ligeramente a Sol Max (56.7%).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Coste por tarea completada:&lt;/strong&gt; Grok 4.6 registró $0.84 por tarea en Análisis Artificial.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Acción recomendada:&lt;/strong&gt; ejecuta una evaluación con al menos 20 prompts reales antes de cambiar el modelo de producción.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Especificaciones y precios uno al lado del otro
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;Grok 4.6&lt;/th&gt;
&lt;th&gt;GPT-5.6 Sol&lt;/th&gt;
&lt;th&gt;Claude Fable 5&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Desarrollador&lt;/td&gt;
&lt;td&gt;xAI&lt;/td&gt;
&lt;td&gt;OpenAI&lt;/td&gt;
&lt;td&gt;Anthropic&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Índice de Inteligencia&lt;/td&gt;
&lt;td&gt;61&lt;/td&gt;
&lt;td&gt;61&lt;/td&gt;
&lt;td&gt;62&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Ventana de contexto&lt;/td&gt;
&lt;td&gt;500K&lt;/td&gt;
&lt;td&gt;1.05M&lt;/td&gt;
&lt;td&gt;1M&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Precio de entrada / 1M&lt;/td&gt;
&lt;td&gt;$2&lt;/td&gt;
&lt;td&gt;$12&lt;/td&gt;
&lt;td&gt;$10&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Precio de salida / 1M&lt;/td&gt;
&lt;td&gt;$6&lt;/td&gt;
&lt;td&gt;$30&lt;/td&gt;
&lt;td&gt;$25*&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Variante rápida/premium&lt;/td&gt;
&lt;td&gt;2x precio&lt;/td&gt;
&lt;td&gt;Nivel Sol Max&lt;/td&gt;
&lt;td&gt;Nivel Fable 5 Max&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Estilo de API&lt;/td&gt;
&lt;td&gt;Compatible con OpenAI&lt;/td&gt;
&lt;td&gt;Nativa de OpenAI&lt;/td&gt;
&lt;td&gt;Anthropic Messages&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Fecha de corte de conocimiento&lt;/td&gt;
&lt;td&gt;Febrero 2026&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;*Precio de Claude mostrado para Opus 4.8; el precio del nivel Fable 5 varía según la configuración de esfuerzo. Consulta la &lt;a href="https://apidog.com/es/blog/gpt-5-6-pricing?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;guía de precios de GPT-5.6&lt;/a&gt; y el &lt;a href="https://apidog.com/es/blog/cut-claude-api-bill?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;desglose para reducir costes de Claude&lt;/a&gt; para ver las matrices completas.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Faplyoofjyfvpk8fq90u0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Faplyoofjyfvpk8fq90u0.png" alt="Gráfico comparativo de precios de modelos de IA" width="800" height="713"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;La diferencia de precio es relevante especialmente en agentes. En chat, pagar menos por token reduce el coste unitario. En un agente, donde una tarea puede generar decenas de llamadas al modelo, transcripciones extensas y uso de herramientas, esa diferencia puede separar un presupuesto diario de $50 de uno de $250.&lt;/p&gt;

&lt;h2&gt;
  
  
  Benchmarks de codificación: Sol para profundidad, Grok para valor
&lt;/h2&gt;

&lt;p&gt;Según los números de lanzamiento, cada modelo destaca en un tipo de tarea distinto:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Benchmark&lt;/th&gt;
&lt;th&gt;Grok 4.6&lt;/th&gt;
&lt;th&gt;GPT-5.6 Sol Max&lt;/th&gt;
&lt;th&gt;Claude Fable 5 Max&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;DeepSWE v1.1 (correcciones a escala de repositorio)&lt;/td&gt;
&lt;td&gt;65.9%&lt;/td&gt;
&lt;td&gt;73.0%&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;FrontierCode v1.1 Extendido&lt;/td&gt;
&lt;td&gt;61.3%&lt;/td&gt;
&lt;td&gt;60.6%&lt;/td&gt;
&lt;td&gt;63.6%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CursorBench v3.2&lt;/td&gt;
&lt;td&gt;69.9%&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;APEX-Agents&lt;/td&gt;
&lt;td&gt;57.5%&lt;/td&gt;
&lt;td&gt;56.7%&lt;/td&gt;
&lt;td&gt;59.2%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Terminal-Bench v2.1&lt;/td&gt;
&lt;td&gt;88.4%&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Interpreta estos resultados así:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;El margen de GPT-5.6 Sol Max en DeepSWE importa.&lt;/strong&gt; Sus 7 puntos de ventaja sobre Grok en correcciones a escala de repositorio son relevantes si tu agente modifica bases de código grandes y recibe poca supervisión. La &lt;a href="https://apidog.com/es/blog/gpt-5-6-vs-claude-fable-5?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;comparación entre GPT-5.6 Sol y Claude Fable 5&lt;/a&gt; cubre ese caso con más detalle.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Claude Fable 5 prioriza la consistencia.&lt;/strong&gt; Lidera el índice compuesto, FrontierCode y APEX-Agents. Es un perfil útil para tareas autónomas largas, donde un error temprano puede invalidar una sesión de trabajo completa.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Grok 4.6 ofrece una relación coste/capacidad competitiva.&lt;/strong&gt; Lidera CursorBench y Terminal-Bench, se mantiene cerca en otros benchmarks y tiene una tarifa mucho menor. Es un buen candidato para manejar el tráfico general y escalar las tareas complejas a Sol o Fable.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Los benchmarks de lanzamiento, especialmente los reportados por proveedores, deben leerse con precaución. Los benchmarks de Grok 4.5 ya &lt;a href="https://apidog.com/es/blog/grok-4-5-benchmarks?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;requerían una lectura cuidadosa&lt;/a&gt;, y la misma regla aplica a todos los modelos.&lt;/p&gt;

&lt;h2&gt;
  
  
  Coste por tarea, no solo coste por token
&lt;/h2&gt;

&lt;p&gt;El precio por token no captura toda la economía de un agente. Un modelo barato que falla una tarea puede generar costes adicionales de revisión, reintentos y reparación. Para tomar una decisión operativa, mide:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Tasa de éxito por tarea.&lt;/li&gt;
&lt;li&gt;Tokens de entrada y salida.&lt;/li&gt;
&lt;li&gt;Número de llamadas por tarea.&lt;/li&gt;
&lt;li&gt;Latencia total.&lt;/li&gt;
&lt;li&gt;Coste por tarea completada correctamente.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Análisis Artificial midió un promedio de &lt;strong&gt;$0.84 por tarea&lt;/strong&gt; para Grok 4.6 en sus evaluaciones de agentes. Ese resultado combina precios bajos con un uso de tokens relativamente contenido.&lt;/p&gt;

&lt;p&gt;Por ejemplo, supón que tu agente usa, por tarea completada, 500K tokens de entrada y 100K tokens de salida:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Modelo&lt;/th&gt;
&lt;th&gt;Coste de entrada&lt;/th&gt;
&lt;th&gt;Coste de salida&lt;/th&gt;
&lt;th&gt;Por tarea&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Grok 4.6&lt;/td&gt;
&lt;td&gt;$1.00&lt;/td&gt;
&lt;td&gt;$0.60&lt;/td&gt;
&lt;td&gt;$1.60&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Claude Opus 4.8&lt;/td&gt;
&lt;td&gt;$5.00&lt;/td&gt;
&lt;td&gt;$2.50&lt;/td&gt;
&lt;td&gt;$7.50&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GPT-5.6 Sol&lt;/td&gt;
&lt;td&gt;$6.00&lt;/td&gt;
&lt;td&gt;$3.00&lt;/td&gt;
&lt;td&gt;$9.00&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Con 1,000 tareas mensuales, Grok podría ahorrar aproximadamente entre $6,000 y $7,400 frente a las alternativas. Pero solo es un ahorro real si mantiene una tasa de éxito suficiente en tus tareas.&lt;/p&gt;

&lt;h2&gt;
  
  
  Ergonomía de la API: coste de integración
&lt;/h2&gt;

&lt;p&gt;La capacidad del modelo es solo una parte de la implementación. La otra parte es cuánto código necesitas cambiar para probarlo, operarlo y reemplazarlo.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Grok 4.6:&lt;/strong&gt; es compatible con el formato de OpenAI. Si ya usas un cliente estilo OpenAI, puedes cambiar el &lt;code&gt;base_url&lt;/code&gt; a &lt;code&gt;https://api.x.ai/v1&lt;/code&gt; y reutilizar gran parte de tu integración.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;GPT-5.6 Sol:&lt;/strong&gt; tiene el ecosistema de integración más amplio, incluyendo la API de Respuestas, llamadas programáticas a herramientas y SDK oficiales. Consulta &lt;a href="https://apidog.com/es/blog/how-to-use-gpt-5-6-api?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;cómo usar la API de GPT-5.6&lt;/a&gt; para revisar la estructura de niveles.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Claude Fable 5:&lt;/strong&gt; utiliza la API de Mensajes de Anthropic. Tiene una estructura de solicitud diferente y un parámetro de esfuerzo para intercambiar coste por capacidad.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;La migración suele ser más simple entre Grok y OpenAI porque comparten formato. Moverse hacia o desde Anthropic requiere una capa de adaptación adicional. Si planeas enrutar solicitudes entre modelos, considera esa diferencia desde el diseño de tu arquitectura.&lt;/p&gt;

&lt;p&gt;Por ejemplo, una abstracción mínima en TypeScript puede aislar la selección de proveedor:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;Provider&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;grok&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;openai&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;anthropic&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kr"&gt;interface&lt;/span&gt; &lt;span class="nx"&gt;ModelRequest&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;provider&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;Provider&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;model&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;prompt&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;runModel&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;request&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;ModelRequest&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;switch &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;request&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;provider&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;grok&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
      &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;callOpenAICompatibleAPI&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
        &lt;span class="na"&gt;baseURL&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;https://api.x.ai/v1&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;model&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;request&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;model&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;prompt&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;request&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;prompt&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="p"&gt;});&lt;/span&gt;

    &lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;openai&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
      &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;callOpenAICompatibleAPI&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
        &lt;span class="na"&gt;baseURL&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;https://api.openai.com/v1&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;model&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;request&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;model&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;prompt&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;request&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;prompt&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="p"&gt;});&lt;/span&gt;

    &lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;anthropic&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
      &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;callAnthropicMessagesAPI&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
        &lt;span class="na"&gt;model&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;request&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;model&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;prompt&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;request&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;prompt&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="p"&gt;});&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;La clave es normalizar tu entrada, salida, uso de tokens, llamadas a herramientas y errores antes de comparar resultados.&lt;/p&gt;

&lt;h2&gt;
  
  
  Ventanas de contexto: cuándo 500K es suficiente
&lt;/h2&gt;

&lt;p&gt;GPT-5.6 Sol ofrece una ventana de 1.05M tokens, Claude Fable 5 ofrece 1M y Grok 4.6 ofrece 500K. Sobre el papel, la diferencia es grande. En producción, la pregunta útil es: &lt;strong&gt;¿cuánto contexto necesita realmente cada tarea?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Una ventana de 500K tokens puede contener aproximadamente:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;La base de código de un servicio mediano.&lt;/li&gt;
&lt;li&gt;Un año de transcripciones de soporte.&lt;/li&gt;
&lt;li&gt;Cientos de páginas de documentación o documentos legales.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Muchas tareas de agentes no se acercan a ese límite. Las cargas de trabajo que sí necesitan una ventana de alrededor de un millón de tokens suelen ser más específicas:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Análisis de monorepositorios completos.&lt;/li&gt;
&lt;li&gt;Historiales muy largos de agentes sin resumir.&lt;/li&gt;
&lt;li&gt;Procesamiento de conjuntos documentales grandes en una sola llamada.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;No elijas solo por el tamaño de la ventana por dos motivos:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;La calidad se degrada al llenar el contexto.&lt;/strong&gt; Recuperar información con un contexto al 80% de capacidad suele rendir peor que hacerlo al 20%. La recuperación selectiva suele superar al relleno de contexto.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Los tokens de entrada afectan directamente al presupuesto.&lt;/strong&gt; Llenar la ventana completa de Sol cuesta alrededor de $12.60 por solicitud al precio de lista, mientras que llenar la de Grok cuesta aproximadamente $1.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Si tus prompts superan habitualmente los 400K tokens, probablemente necesitas una estrategia de recuperación, resumen y caché; no solo un modelo con una ventana mayor.&lt;/p&gt;

&lt;h2&gt;
  
  
  Fechas de corte de conocimiento y madurez del ecosistema
&lt;/h2&gt;

&lt;p&gt;Grok 4.6 tiene fecha de corte de conocimiento del 1 de febrero de 2026, la más reciente de las tres. Esto puede ayudar en agentes que trabajan con frameworks que cambian rápido, aunque una implementación sólida no debería depender exclusivamente del conocimiento paramétrico del modelo.&lt;/p&gt;

&lt;p&gt;Para tareas técnicas, incorpora recuperación documental y herramientas:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;1. Recupera documentación versionada desde tu fuente de verdad.
2. Selecciona solo los fragmentos relevantes.
3. Incluye versiones, enlaces y fechas en el contexto.
4. Pide al modelo que cite los fragmentos recuperados.
5. Valida la salida con pruebas, linters o esquemas.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;En cuanto al ecosistema:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;OpenAI tiene la superficie de integración de terceros más amplia.&lt;/li&gt;
&lt;li&gt;Anthropic tiene una presencia fuerte en frameworks de agentes.&lt;/li&gt;
&lt;li&gt;xAI aprovecha la compatibilidad con OpenAI para reducir la fricción de adopción.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Grok puede funcionar con clientes compatibles con completado de chat de OpenAI y está disponible a través de OpenRouter, Vercel y Cloudflare. A cambio, algunas capacidades de primera parte —como APIs por lotes, niveles de caché y controles detallados de uso— son menos maduras que las de proveedores establecidos.&lt;/p&gt;

&lt;h2&gt;
  
  
  Qué modelo usar según el trabajo
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Agente de codificación autónomo a escala de repositorio:&lt;/strong&gt; usa &lt;strong&gt;GPT-5.6 Sol&lt;/strong&gt; si la prioridad principal es la calidad. Su ventaja en DeepSWE apunta a menos ejecuciones fallidas en bases de código grandes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Trabajo de conocimiento de largo horizonte o sesiones de varias horas:&lt;/strong&gt; usa &lt;strong&gt;Claude Fable 5&lt;/strong&gt; si priorizas consistencia. Lidera el índice compuesto y APEX-Agents.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tráfico de agentes de alto volumen o producto sensible al coste:&lt;/strong&gt; usa &lt;strong&gt;Grok 4.6&lt;/strong&gt; como modelo predeterminado y escala los casos más complejos a Sol o Fable.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Codificación interactiva en un IDE:&lt;/strong&gt; Grok 4.6 es un candidato relevante por CursorBench y su variante rápida 2x. Fue entrenado tras &lt;a href="https://apidog.com/es/blog/grok-4-5-cursor-training-data?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;usar sesiones reales de Cursor como datos de entrenamiento&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Prueba los tres en tu stack en una tarde
&lt;/h2&gt;

&lt;p&gt;Los benchmarks miden promedios; no sustituyen una evaluación con tus prompts, herramientas y criterios de éxito. Puedes organizar una prueba reproducible con &lt;a href="https://apidog.com/download?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Apidog&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ft4nunh8k7j2cqe322c36.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ft4nunh8k7j2cqe322c36.png" alt="Captura de pantalla de la interfaz de Apidog mostrando una prueba de modelos de IA" width="799" height="530"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Crea un proyecto con tres entornos
&lt;/h3&gt;

&lt;p&gt;Configura un entorno por proveedor:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;xAI: &lt;code&gt;https://api.x.ai/v1&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;OpenAI&lt;/li&gt;
&lt;li&gt;Anthropic&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Guarda las credenciales de cada proveedor en su entorno correspondiente. Así puedes cambiar de backend sin modificar manualmente cada solicitud.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Reúne 20 prompts reales
&lt;/h3&gt;

&lt;p&gt;No evalúes con preguntas de demostración. Extrae tareas reales de tu producto:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Incidencias de soporte.&lt;/li&gt;
&lt;li&gt;Solicitudes de generación de código.&lt;/li&gt;
&lt;li&gt;Refactors representativos.&lt;/li&gt;
&lt;li&gt;Extracción de datos.&lt;/li&gt;
&lt;li&gt;Llamadas a herramientas.&lt;/li&gt;
&lt;li&gt;Casos que ya sabes que son difíciles.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Incluye siempre el mismo prompt de sistema, definiciones de herramientas y datos de entrada para que la comparación sea justa.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Define aserciones medibles
&lt;/h3&gt;

&lt;p&gt;Añade aserciones para comprobar lo que importa en producción:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;La respuesta no está vacía.&lt;/li&gt;
&lt;li&gt;El JSON generado es válido.&lt;/li&gt;
&lt;li&gt;La salida cumple el esquema esperado.&lt;/li&gt;
&lt;li&gt;La llamada a herramienta tiene los argumentos correctos.&lt;/li&gt;
&lt;li&gt;La latencia está por debajo de tu umbral.&lt;/li&gt;
&lt;li&gt;El objeto &lt;code&gt;usage&lt;/code&gt; contiene el uso de tokens.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Para herramientas, valida contra un esquema en lugar de evaluar solo la prosa:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"object"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"required"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"repository"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"branch"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"files"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"properties"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"repository"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"string"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"branch"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"string"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"files"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"array"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"items"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"string"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  4. Ejecuta cada caso tres veces por modelo
&lt;/h3&gt;

&lt;p&gt;Las salidas de los LLM varían. Una sola ejecución puede ocultar problemas de consistencia.&lt;/p&gt;

&lt;p&gt;Ejecuta:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;20 prompts × 3 ejecuciones × 3 modelos = 180 resultados
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Después, exporta los resultados y calcula:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;tasa_de_éxito = tareas_correctas / tareas_totales

coste_por_éxito = coste_total / tareas_correctas

latencia_p95 = percentil_95(latencias)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;No compares solo coste por token. Compara coste por tarea correcta.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. Conserva la suite de evaluación
&lt;/h3&gt;

&lt;p&gt;No conviertas la selección de modelo en una decisión basada en una única prueba. Guarda los prompts, las aserciones y los resultados como una suite de regresión.&lt;/p&gt;

&lt;p&gt;Cuando se publique una nueva versión de modelo:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Ejecuta de nuevo la misma suite.&lt;/li&gt;
&lt;li&gt;Compara tasa de éxito, coste por éxito y latencia.&lt;/li&gt;
&lt;li&gt;Revisa manualmente los casos con cambios significativos.&lt;/li&gt;
&lt;li&gt;Ajusta las reglas de enrutamiento si hay una mejora clara.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Los equipos que mantienen un arnés de evaluación pueden cambiar de modelo mucho más rápido que los que deciden de nuevo basándose en anécdotas.&lt;/p&gt;

&lt;h2&gt;
  
  
  Preguntas frecuentes
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;¿Es Grok 4.6 mejor que GPT-5.6 Sol?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Empatan en el índice compuesto con 61. Sol lidera la codificación a escala de repositorio en DeepSWE (73.0% frente a 65.9%), mientras que Grok lidera CursorBench y Terminal-Bench y cuesta cinco veces menos en salida. La respuesta depende de si tus tareas se parecen más a DeepSWE o a una sesión de IDE.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;¿Es Grok 4.6 mejor que Claude Fable 5?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Fable 5 lidera el índice (62 frente a 61), FrontierCode y APEX-Agents por márgenes reducidos. Grok destaca en precio. Para trabajo autónomo donde la precisión es crítica, Fable 5; para volumen sensible al coste, Grok.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;¿Qué modelo de IA es el más barato en la frontera en 2026?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Grok 4.6, con $2/$6 por millón de tokens y un coste medido independientemente de $0.84 por tarea de agente. Los tokens de salida del competidor frontera más cercano cuestan aproximadamente cuatro veces más.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;¿Debería cambiar mi agente de producción a Grok 4.6?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;No solo por benchmarks. Ejecuta primero una comparación con tu carga de trabajo real. La diferencia de precio solo importa si la tasa de éxito se mantiene en tus tareas.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;¿Puedo usar los tres modelos detrás de un único formato de API?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;En gran medida, sí. Grok 4.6 usa de forma nativa el formato de completado de chat de OpenAI, por lo que puede compartir código cliente con GPT-5.6. Claude requiere la API de Mensajes de Anthropic o una pasarela como OpenRouter que normalice los tres modelos con un pequeño recargo.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;¿Importa la ventana de contexto más pequeña de Grok 4.6?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Para la mayoría de las cargas de trabajo de agentes y chat, no. 500K tokens superan ampliamente el uso típico, y todos los modelos se degradan cerca de sus límites. Sí importa si procesas monorepositorios completos o conjuntos documentales masivos en una sola llamada, donde la ventana de 1.05M de Sol ofrece más margen.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>¿Cómo quitar la marca de agua de Claude?</title>
      <dc:creator>Roobia</dc:creator>
      <pubDate>Thu, 13 Aug 2026 06:28:52 +0000</pubDate>
      <link>https://dev.to/roobia/como-quitar-la-marca-de-agua-de-claude-4792</link>
      <guid>https://dev.to/roobia/como-quitar-la-marca-de-agua-de-claude-4792</guid>
      <description>&lt;p&gt;A partir de agosto de 2026, cada bloque de texto generado por Claude incorpora una marca de agua invisible. No aparece en el corrector ortográfico, no se ve al inspeccionar el documento y sobrevive al copiar y pegar el contenido desde Claude a otra aplicación. Anthropic la diseñó para asociar el texto con el modelo que lo generó mediante patrones distribuidos en las propias elecciones de palabras.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://apidog.com/?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation" class="crayons-btn crayons-btn--primary"&gt;Prueba Apidog hoy&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;Si eres propietario del contenido y necesitas limpiar caracteres ocultos o metadatos de archivos, el proyecto open source &lt;a href="https://github.com/guillaumemeyer/watermarks-remover" rel="noopener noreferrer"&gt;watermarks-remover&lt;/a&gt; ofrece scripts para inspeccionar y procesar texto, imágenes y documentos. Esta guía explica qué puede eliminar realmente, qué no puede garantizar y cómo ejecutar cada paso de forma verificable.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Este flujo está orientado a privacidad e higiene de archivos propios. Eliminar señales de procedencia para incumplir políticas académicas, contratos o requisitos de divulgación puede tener consecuencias legales, contractuales o disciplinarias.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  TL;DR
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Marca estadística de Claude:&lt;/strong&gt; no es un carácter oculto. Claude sesga algunas elecciones de tokens según una clave secreta, dejando una firma estadística detectable en textos suficientemente largos.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Qué sobrevive:&lt;/strong&gt; la señal estadística sobrevive al copiar y pegar, pero se degrada con edición intensa, parafraseo y traducción.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Texto corto y código:&lt;/strong&gt; suelen contener una señal débil o insuficiente. Los formateadores y linters reducen todavía más la señal en código.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;watermarks-remover:&lt;/strong&gt; toolkit MIT para Python 3.10+ que trabaja en dos capas:

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Capa A:&lt;/strong&gt; elimina Unicode invisible, espacios inusuales, controles bidireccionales y caracteres de etiqueta.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Capa B:&lt;/strong&gt; prepara una reescritura del texto para alterar la distribución de palabras. No es una garantía y puede degradar la prosa.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Archivos:&lt;/strong&gt; limpia C2PA, EXIF, XMP y propiedades de documentos en PNG, JPEG, SVG, PDF, DOCX, ODT, HTML y Markdown.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Regla práctica:&lt;/strong&gt; la limpieza determinista de caracteres y metadatos es comprobable. Eliminar una marca estadística implica modificar el texto visible.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fz59kotucpjhok8pqbxdq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fz59kotucpjhok8pqbxdq.png" alt="Diagrama de eliminación de marcas de agua" width="800" height="88"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Qué es realmente la marca de agua de Claude
&lt;/h2&gt;

&lt;p&gt;La marca de agua de texto de Claude no consiste en espacios de ancho cero, glifos invisibles ni caracteres ocultos entre palabras.&lt;/p&gt;

&lt;p&gt;En su lugar, la señal se distribuye en la selección de tokens. Durante la generación, el modelo puede elegir entre varias continuaciones estadísticamente similares. La marca de agua sesga algunas de esas elecciones usando una clave secreta. En un texto largo, el conjunto de elecciones forma una firma que un detector compatible puede identificar.&lt;/p&gt;

&lt;p&gt;Esto tiene dos implicaciones prácticas:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Copiar y pegar no la elimina.&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Como la señal está en las palabras elegidas y no en metadatos adjuntos, mover el texto entre aplicaciones conserva el patrón.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Editar el texto la degrada.&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Reescribir frases, traducir, resumir o combinar el resultado con redacción propia modifica las elecciones de tokens y reduce la señal estadística.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Anthropic implementó este mecanismo a nivel de modelo a partir del 2 de agosto de 2026. Esto incluye aplicaciones de Claude, API, Claude Code y accesos de terceros mediante AWS, Google Cloud y Microsoft Foundry. Anthropic también ha indicado que ofrecerá una API de detección.&lt;/p&gt;

&lt;p&gt;Para contexto sobre cambios en modelos y políticas de acceso de Anthropic, consulta &lt;a href="https://apidog.com/es/blog/fable-5-down-government-suspension?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Fable 5 Is Down for Everyone&lt;/a&gt;.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Una detección positiva indica que el texto &lt;em&gt;podría haber pasado por Claude&lt;/em&gt;; no demuestra por sí sola fraude, autoría exclusiva ni incumplimiento. Corrección, traducción y resumen también pueden dejar rastros similares.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Dos sistemas de marcado, dos tratamientos distintos
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;watermarks-remover&lt;/code&gt; separa el trabajo por capas porque los caracteres invisibles, los metadatos de archivo y las marcas estadísticas no son el mismo problema.&lt;/p&gt;

&lt;h3&gt;
  
  
  Capa A: limpieza determinista de caracteres
&lt;/h3&gt;

&lt;p&gt;Esta capa elimina contenido Unicode no visible o potencialmente problemático:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Espacios de ancho cero.&lt;/li&gt;
&lt;li&gt;Espacios en blanco no estándar.&lt;/li&gt;
&lt;li&gt;Controles de texto bidireccional.&lt;/li&gt;
&lt;li&gt;Caracteres de etiqueta Unicode.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;La limpieza se ejecuta sin modelos y no reescribe la prosa visible. Por eso es rápida, reproducible y fácil de verificar.&lt;/p&gt;

&lt;h3&gt;
  
  
  Capa B: reescritura estadística
&lt;/h3&gt;

&lt;p&gt;La marca estadística de Claude está vinculada a la elección de palabras. No existe un byte, carácter o campo de metadatos que puedas borrar sin cambiar el texto.&lt;/p&gt;

&lt;p&gt;Por ese motivo, la Capa B prepara una reescritura del contenido. El propio proyecto la presenta como un esfuerzo de buena fe, no como una garantía de eliminación. La reformulación puede:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Aplanar el estilo.&lt;/li&gt;
&lt;li&gt;Alterar matices técnicos.&lt;/li&gt;
&lt;li&gt;Introducir errores de precisión.&lt;/li&gt;
&lt;li&gt;Requerir revisión humana completa.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Metadatos de archivos
&lt;/h3&gt;

&lt;p&gt;El toolkit también elimina metadatos y propiedades incrustadas:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;C2PA.&lt;/li&gt;
&lt;li&gt;EXIF.&lt;/li&gt;
&lt;li&gt;XMP.&lt;/li&gt;
&lt;li&gt;Propiedades de documentos.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Los formatos compatibles incluyen PNG, JPEG, SVG, PDF, DOCX, ODT, HTML y Markdown.&lt;/p&gt;

&lt;p&gt;C2PA es un manifiesto firmado de procedencia de la Coalition for Content Provenance and Authenticity. A diferencia de una marca estadística de texto, es un dato a nivel de archivo y normalmente se puede inspeccionar y eliminar de forma determinista.&lt;/p&gt;

&lt;p&gt;El proyecto cubre mecanismos de Claude, Gemini/SynthID-Text, OpenAI y marcas de código abierto estilo Kirchenbauer con una arquitectura similar. Las marcas de agua en píxeles —por ejemplo, SynthID aplicado directamente a una imagen— no se eliminan con este flujo; el proyecto puede puntuarlas mediante una configuración externa de detección inversa.&lt;/p&gt;

&lt;h2&gt;
  
  
  Cuándo la señal ya suele ser débil
&lt;/h2&gt;

&lt;p&gt;Antes de procesar contenido, evalúa si realmente necesitas hacerlo.&lt;/p&gt;

&lt;h3&gt;
  
  
  Pasajes cortos
&lt;/h3&gt;

&lt;p&gt;Unas pocas oraciones suelen no aportar suficientes elecciones de tokens para que un detector alcance alta confianza estadística.&lt;/p&gt;

&lt;h3&gt;
  
  
  Código fuente
&lt;/h3&gt;

&lt;p&gt;El código tiene opciones de tokens mucho más restringidas que la prosa. Además, herramientas como formateadores, linters y refactorizadores cambian el resultado antes de que llegue a producción.&lt;/p&gt;

&lt;p&gt;Por eso, en código generado o asistido por Claude Code, la señal puede ser débil o irrelevante después de un flujo normal de desarrollo.&lt;/p&gt;

&lt;h3&gt;
  
  
  Texto ya editado
&lt;/h3&gt;

&lt;p&gt;Si el borrador fue revisado, reestructurado o combinado con escritura propia, es posible que el patrón original ya se haya degradado.&lt;/p&gt;

&lt;h3&gt;
  
  
  Archivos con C2PA
&lt;/h3&gt;

&lt;p&gt;Una conversión de formato, un guardado nuevo o una exportación pueden eliminar metadatos de procedencia. Aun así, conviene usar un proceso explícito e inspeccionable cuando necesitas consistencia.&lt;/p&gt;

&lt;h2&gt;
  
  
  Instalación de &lt;code&gt;watermarks-remover&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;El proyecto funciona como una skill de agente y como un conjunto de scripts Python independientes.&lt;/p&gt;

&lt;p&gt;Requisitos:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Python 3.10 o superior.&lt;/li&gt;
&lt;li&gt;Los scripts principales usan la biblioteca estándar.&lt;/li&gt;
&lt;li&gt;No necesitas instalar dependencias para la limpieza básica de texto y metadatos.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Clona el repositorio:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/guillaumemeyer/watermarks-remover.git
&lt;span class="nb"&gt;cd &lt;/span&gt;watermarks-remover
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Si usas un entorno compatible con skills tipo Grok, enlaza la skill:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;mkdir&lt;/span&gt; &lt;span class="nt"&gt;-p&lt;/span&gt; ~/.grok/skills
&lt;span class="nb"&gt;ln&lt;/span&gt; &lt;span class="nt"&gt;-sfn&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;pwd&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;&lt;span class="s2"&gt;/skills/remove-ai-marks"&lt;/span&gt; ~/.grok/skills/remove-ai-marks
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Para ejecutar los scripts directamente, define una variable con la ruta:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;SCRIPTS&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;pwd&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;&lt;span class="s2"&gt;/skills/remove-ai-marks/scripts"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Herramientas opcionales:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;c2patool&lt;/code&gt; para inspeccionar manifiestos C2PA.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;exiftool&lt;/code&gt; para limpiar metadatos de imagen residuales.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;No son necesarias para el flujo principal, pero pueden ayudar en tareas de auditoría.&lt;/p&gt;

&lt;h2&gt;
  
  
  Inspecciona antes de modificar
&lt;/h2&gt;

&lt;p&gt;No proceses archivos a ciegas. Primero identifica qué contiene el archivo.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;python3 &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$SCRIPTS&lt;/span&gt;&lt;span class="s2"&gt;/inspect_file.py"&lt;/span&gt; draft.md
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;El inspector informa sobre caracteres invisibles, bloques de metadatos y manifiestos de procedencia sin modificar el contenido.&lt;/p&gt;

&lt;p&gt;Úsalo como primer paso en cualquier flujo:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Inspecciona el archivo original.&lt;/li&gt;
&lt;li&gt;Guarda el informe.&lt;/li&gt;
&lt;li&gt;Limpia solo lo necesario.&lt;/li&gt;
&lt;li&gt;Inspecciona la salida.&lt;/li&gt;
&lt;li&gt;Conserva el original hasta completar la verificación.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Limpiar texto: Capa A
&lt;/h2&gt;

&lt;p&gt;Para eliminar caracteres invisibles y controles Unicode sin alterar la prosa visible, usa &lt;code&gt;clean_text.py&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;python3 &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$SCRIPTS&lt;/span&gt;&lt;span class="s2"&gt;/clean_text.py"&lt;/span&gt; draft.md &lt;span class="nt"&gt;-o&lt;/span&gt; draft.cleaned.md &lt;span class="nt"&gt;--stats&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;La opción &lt;code&gt;--stats&lt;/code&gt; muestra un resumen de los elementos encontrados y eliminados.&lt;/p&gt;

&lt;p&gt;Este comando puede eliminar:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Unicode invisible.&lt;/li&gt;
&lt;li&gt;Espacios exóticos.&lt;/li&gt;
&lt;li&gt;Controles bidireccionales.&lt;/li&gt;
&lt;li&gt;Caracteres de etiqueta.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;La opción &lt;code&gt;-o&lt;/code&gt; escribe la salida en un archivo nuevo. Evita sobrescribir el original hasta verificar el resultado.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;diff &lt;span class="nt"&gt;-u&lt;/span&gt; draft.md draft.cleaned.md
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Para archivos de texto, un &lt;code&gt;diff&lt;/code&gt; te ayuda a confirmar que los únicos cambios corresponden a caracteres no visibles o normalizaciones esperadas.&lt;/p&gt;

&lt;h2&gt;
  
  
  Limpiar metadatos de archivos
&lt;/h2&gt;

&lt;p&gt;Para imágenes y documentos, usa &lt;code&gt;clean_file.py&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;python3 &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$SCRIPTS&lt;/span&gt;&lt;span class="s2"&gt;/clean_file.py"&lt;/span&gt; photo.png &lt;span class="nt"&gt;-o&lt;/span&gt; photo.cleaned.png
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;El script admite PNG, JPEG, SVG, PDF, DOCX, ODT, HTML y Markdown, y procesa C2PA, EXIF, XMP y propiedades de documento.&lt;/p&gt;

&lt;p&gt;Si tienes &lt;code&gt;exiftool&lt;/code&gt;, puedes realizar una limpieza adicional de etiquetas de imagen:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;exiftool &lt;span class="nt"&gt;-all&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt; photo.cleaned.png
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Ten en cuenta que este comando modifica metadatos. Ejecuta primero una inspección y conserva una copia del archivo original.&lt;/p&gt;

&lt;h2&gt;
  
  
  Capa B: reescritura y compensaciones
&lt;/h2&gt;

&lt;p&gt;La marca estadística de texto no se elimina borrando caracteres. Requiere cambiar el contenido visible.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;rewrite_text.py&lt;/code&gt; prepara un pase de reformulación:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;python3 &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$SCRIPTS&lt;/span&gt;&lt;span class="s2"&gt;/rewrite_text.py"&lt;/span&gt; draft.md &lt;span class="nt"&gt;--backend&lt;/span&gt; print-prompt &lt;span class="nt"&gt;--strength&lt;/span&gt; paraphrase
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Con &lt;code&gt;--backend print-prompt&lt;/code&gt;, el script imprime una instrucción de reescritura en lugar de enviar el texto directamente a un modelo. Esto te permite revisar y controlar el paso posterior.&lt;/p&gt;

&lt;p&gt;La opción &lt;code&gt;--strength&lt;/code&gt; ajusta la intensidad de la reformulación.&lt;/p&gt;

&lt;p&gt;Antes de usar esta capa, considera sus costes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Estilo:&lt;/strong&gt; la redacción específica puede perder voz o intención.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Precisión:&lt;/strong&gt; una paráfrasis de contenido técnico puede cambiar el significado.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Revisión:&lt;/strong&gt; necesitas validar hechos, ejemplos, código, nombres de APIs y restricciones.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Coste:&lt;/strong&gt; usar otro modelo para reescribir texto puede añadir consumo y complejidad al flujo.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Para la mayoría de flujos legítimos, la opción más razonable es:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Ejecutar la Capa A para higiene de texto.&lt;/li&gt;
&lt;li&gt;Limpiar metadatos de archivo si es necesario.&lt;/li&gt;
&lt;li&gt;Usar reescritura solo cuando exista una necesidad concreta y puedas revisar el resultado.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Verifica la salida
&lt;/h2&gt;

&lt;p&gt;Después de limpiar un archivo, vuelve a inspeccionarlo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;python3 &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$SCRIPTS&lt;/span&gt;&lt;span class="s2"&gt;/inspect_file.py"&lt;/span&gt; draft.cleaned.md
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Para revisar específicamente C2PA:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;c2patool photo.cleaned.png
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;La verificación de caracteres invisibles y metadatos es directa porque puedes inspeccionar el archivo resultante.&lt;/p&gt;

&lt;p&gt;La verificación de una marca estadística de texto es diferente: no dispones de la clave privada de detección de Anthropic. Cuando la API de detección anunciada esté disponible, será la referencia para comprobar ese tipo de señal.&lt;/p&gt;

&lt;p&gt;Si automatizas inspecciones de contenido o validaciones relacionadas con modelos, puedes integrarlas en pruebas repetibles de API. Herramientas como &lt;a href="https://apidog.com?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Apidog&lt;/a&gt; permiten estandarizar solicitudes, aserciones y ejecuciones de verificación. Para un patrón de pruebas de endpoints de agentes, consulta &lt;a href="https://apidog.com/es/blog/how-to-test-ai-agents-api?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Cómo probar agentes de IA a través de una API&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Salvaguardias legales y éticas
&lt;/h2&gt;

&lt;p&gt;El uso apropiado de estas herramientas se centra en privacidad e higiene de contenido propio, por ejemplo:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Eliminar caracteres de seguimiento de borradores propios.&lt;/li&gt;
&lt;li&gt;Limpiar EXIF, XMP o propiedades de documentos antes de publicar.&lt;/li&gt;
&lt;li&gt;Quitar metadatos de procedencia de archivos que posees y gestionas.&lt;/li&gt;
&lt;li&gt;Normalizar texto antes de introducirlo en una canalización de publicación.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;No es un mecanismo para evitar obligaciones de divulgación.&lt;/p&gt;

&lt;p&gt;Evita usarlo para:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Deshonestidad académica:&lt;/strong&gt; si una institución exige declarar el uso de IA o prohíbe entregas generadas por IA, ocultarlo puede constituir mala conducta.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Incumplimientos contractuales:&lt;/strong&gt; clientes y plataformas pueden exigir transparencia sobre el uso de IA.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Falsa atribución:&lt;/strong&gt; presentar contenido de IA como trabajo humano cuando ello engaña materialmente a otra parte.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Además, la detección no determina por sí sola la autoría: una señal positiva no prueba fraude y una señal ausente no prueba origen humano.&lt;/p&gt;

&lt;p&gt;Si tu objetivo es controlar por completo la procedencia y las políticas de tus modelos, considera opciones autoalojadas. Consulta &lt;a href="https://apidog.com/es/blog/best-local-llms-2026?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Los mejores LLM locales para ejecutar en 2026&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Preguntas frecuentes
&lt;/h2&gt;

&lt;h3&gt;
  
  
  ¿Puedo buscar y eliminar caracteres ocultos de la marca de agua de Claude?
&lt;/h3&gt;

&lt;p&gt;No. La marca estadística de texto no está formada por caracteres ocultos. Se basa en patrones de elección de palabras. La Capa A puede eliminar caracteres invisibles introducidos por otras herramientas, pero es un mecanismo distinto.&lt;/p&gt;

&lt;h3&gt;
  
  
  ¿Copiar y pegar texto de Claude elimina la marca?
&lt;/h3&gt;

&lt;p&gt;No. La señal estadística viaja con las palabras, no con un campo de metadatos adjunto al documento.&lt;/p&gt;

&lt;h3&gt;
  
  
  ¿&lt;code&gt;watermarks-remover&lt;/code&gt; es gratuito?
&lt;/h3&gt;

&lt;p&gt;Sí. Es un proyecto open source con licencia MIT. Los scripts principales requieren Python 3.10+ y la biblioteca estándar.&lt;/p&gt;

&lt;h3&gt;
  
  
  ¿Funciona con salida de Claude Code?
&lt;/h3&gt;

&lt;p&gt;Los scripts pueden ejecutarse sobre archivos de código, pero la señal suele ser débil debido a las restricciones propias del lenguaje y a los cambios realizados por formateadores, linters y refactorizadores.&lt;/p&gt;

&lt;h3&gt;
  
  
  ¿Elimina marcas de agua de imágenes como SynthID?
&lt;/h3&gt;

&lt;p&gt;No elimina marcas aplicadas en el dominio de píxeles. Sí puede limpiar metadatos a nivel de archivo, incluidos C2PA, EXIF y XMP.&lt;/p&gt;

&lt;h3&gt;
  
  
  ¿Es legal eliminar una marca de procedencia?
&lt;/h3&gt;

&lt;p&gt;Depende del contexto. Limpiar metadatos o caracteres de contenido propio no es inherentemente ilegal, pero puede incumplir políticas académicas, contratos o términos de plataforma que exijan divulgar el uso de IA.&lt;/p&gt;

&lt;h3&gt;
  
  
  ¿Cómo verifico que una marca estadística ha desaparecido?
&lt;/h3&gt;

&lt;p&gt;No puedes confirmarlo de forma concluyente sin acceso a una clave o API de detección compatible. En cambio, la limpieza de Unicode, C2PA y otros metadatos sí puede verificarse con &lt;code&gt;inspect_file.py&lt;/code&gt;, &lt;code&gt;c2patool&lt;/code&gt; y herramientas de inspección de metadatos.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Cómo Probar y Depurar Peticiones API de Grok 4.6 (Streaming, Llamadas a Herramientas y Errores)</title>
      <dc:creator>Roobia</dc:creator>
      <pubDate>Thu, 13 Aug 2026 05:59:01 +0000</pubDate>
      <link>https://dev.to/roobia/como-probar-y-depurar-peticiones-api-de-grok-46-streaming-llamadas-a-herramientas-y-errores-5ehe</link>
      <guid>https://dev.to/roobia/como-probar-y-depurar-peticiones-api-de-grok-46-streaming-llamadas-a-herramientas-y-errores-5ehe</guid>
      <description>&lt;p&gt;Grok 4.6 está orientado a agentes de larga duración. Por eso, los fallos de integración suelen aparecer en los puntos más difíciles de depurar: una transmisión que se detiene a mitad de un token, una llamada a herramienta con argumentos JSON incompletos o límites de tasa que solo surgen bajo carga de producción. Esta guía muestra un flujo de trabajo práctico para validar solicitudes, inspeccionar SSE, depurar herramientas, aplicar reintentos y simular respuestas de Grok sin gastar tokens en CI.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://apidog.com/?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation" class="crayons-btn crayons-btn--primary"&gt;Prueba Apidog hoy&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;Todo el flujo usa &lt;a href="https://apidog.com?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Apidog&lt;/a&gt; como entorno de trabajo para centralizar la representación de SSE, secretos por entorno, aserciones de respuesta y servidores simulados. Los principios se aplican también si configura estas piezas manualmente.&lt;/p&gt;

&lt;h2&gt;
  
  
  En resumen
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Configure &lt;code&gt;https://api.x.ai/v1&lt;/code&gt; y &lt;code&gt;XAI_API_KEY&lt;/code&gt; como variables de entorno; nunca guarde claves en solicitudes versionadas.&lt;/li&gt;
&lt;li&gt;Inspeccione transmisiones SSE visualmente para distinguir bloqueos del servidor, proxy o cliente.&lt;/li&gt;
&lt;li&gt;Compruebe que &lt;code&gt;tool_calls[].function.arguments&lt;/code&gt; se pueda analizar como JSON y cumpla su esquema en cada ejecución.&lt;/li&gt;
&lt;li&gt;Reintente &lt;code&gt;429&lt;/code&gt; con retroceso exponencial y fluctuación; limite los reintentos de &lt;code&gt;5xx&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Registre &lt;code&gt;usage&lt;/code&gt; en todas las respuestas para detectar aumentos de coste.&lt;/li&gt;
&lt;li&gt;Simule el endpoint en CI y ejecute pruebas contra la API real en tareas programadas.&lt;/li&gt;
&lt;li&gt;Promueva solicitudes de depuración a escenarios automatizados antes de desplegar.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Primero: configure un espacio de trabajo adecuado
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;curl&lt;/code&gt; sirve para un primer &lt;em&gt;hola mundo&lt;/em&gt;, pero deja de ser útil cuando necesita comparar varias variantes de una solicitud fallida. Configure un proyecto reutilizable:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Cree un proyecto en Apidog, por ejemplo, &lt;code&gt;Integración Grok 4.6&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Cree un entorno llamado &lt;code&gt;xai-dev&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Añada estas variables:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;   base_url = https://api.x.ai/v1
   api_key = &amp;lt;su clave&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Marque &lt;code&gt;api_key&lt;/code&gt; como secreto.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Cree una solicitud:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight http"&gt;&lt;code&gt;&lt;span class="err"&gt;   POST {{base_url}}/chat/completions
   Authorization: Bearer {{api_key}}
   Content-Type: application/json
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Duplique el entorno como &lt;code&gt;xai-prod&lt;/code&gt; e introduzca la clave de producción.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Así puede reutilizar las mismas solicitudes sin arriesgar la cuota de producción durante las pruebas de desarrollo.&lt;/p&gt;

&lt;p&gt;Si todavía no ha generado una clave, la &lt;a href="https://apidog.com/es/blog/how-to-use-grok-4-6-api?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;guía de inicio rápido de la API de Grok 4.6&lt;/a&gt; cubre la configuración de &lt;a href="http://console.x.ai" rel="noopener noreferrer"&gt;console.x.ai&lt;/a&gt; y las primeras solicitudes con curl, Python y JavaScript.&lt;/p&gt;

&lt;h2&gt;
  
  
  Valide las solicitudes antes de culpar al modelo
&lt;/h2&gt;

&lt;p&gt;Cuando una solicitud falla o devuelve una salida inesperada, compruebe primero lo básico.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Verifique el ID del modelo
&lt;/h3&gt;

&lt;p&gt;Use el ID correcto para el proveedor que está llamando:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"model"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"grok-4-6"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;En la API nativa se usa &lt;code&gt;grok-4-6&lt;/code&gt;; los revendedores pueden usar otros identificadores, como &lt;code&gt;x-ai/grok-4.6&lt;/code&gt; en OpenRouter. Un &lt;code&gt;404&lt;/code&gt; normalmente indica un ID o endpoint incorrecto, no una interrupción del modelo.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Revise parámetros y presupuesto de contexto
&lt;/h3&gt;

&lt;p&gt;Errores como estos suelen devolver &lt;code&gt;400&lt;/code&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;temperature&lt;/code&gt; fuera de rango.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;max_tokens&lt;/code&gt; superior al espacio disponible.&lt;/li&gt;
&lt;li&gt;Campos obligatorios ausentes.&lt;/li&gt;
&lt;li&gt;Tipos incorrectos en el cuerpo JSON.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Revise el mensaje de error antes de modificar el &lt;code&gt;prompt&lt;/code&gt; o la lógica del agente.&lt;/p&gt;

&lt;p&gt;La ventana de contexto de Grok 4.6 es de 500K tokens. Aunque es amplia, una transcripción larga del agente combinada con una reserva grande de &lt;code&gt;max_tokens&lt;/code&gt; puede provocar truncación. Registre el uso por solicitud:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;usage&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;usage&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;promptTokens&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;usage&lt;/span&gt;&lt;span class="p"&gt;?.&lt;/span&gt;&lt;span class="nx"&gt;prompt_tokens&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;completionTokens&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;usage&lt;/span&gt;&lt;span class="p"&gt;?.&lt;/span&gt;&lt;span class="nx"&gt;completion_tokens&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;totalTokens&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;usage&lt;/span&gt;&lt;span class="p"&gt;?.&lt;/span&gt;&lt;span class="nx"&gt;total_tokens&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Alerte cuando el consumo de entrada se acerque al límite que haya definido para su tarea.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Compruebe la estructura de &lt;code&gt;messages&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;Mantenga una secuencia coherente de mensajes y evite contenido vacío o instrucciones duplicadas:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"model"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"grok-4-6"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"messages"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"role"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"system"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"content"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Responde de forma concisa y llama herramientas solo cuando sea necesario."&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"role"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"user"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"content"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Consulta el estado del pedido 1234."&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Un &lt;code&gt;system prompt&lt;/code&gt; duplicado o un mensaje vacío puede degradar la salida sin generar un error HTTP.&lt;/p&gt;

&lt;p&gt;La validación de solicitudes de Apidog ayuda a detectar tipos incorrectos y campos requeridos antes de enviar la solicitud, eliminando viajes de ida y vuelta innecesarios.&lt;/p&gt;

&lt;h2&gt;
  
  
  Depure la transmisión sin quedarse ciego
&lt;/h2&gt;

&lt;p&gt;Las respuestas de Grok 4.6 se transmiten mediante eventos enviados por el servidor (SSE). En agentes, las respuestas pueden contener miles de tokens, por lo que debe distinguir entre una generación lenta y una transmisión rota.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Identifique un atasco real
&lt;/h3&gt;

&lt;p&gt;Si los tokens dejan de llegar, en una terminal puede parecer que el modelo sigue procesando. En una vista SSE puede comprobar si:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;dejaron de llegar fragmentos desde el servidor o la red;&lt;/li&gt;
&lt;li&gt;los fragmentos siguen llegando, pero el cliente dejó de renderizarlos;&lt;/li&gt;
&lt;li&gt;el proxy está almacenando la respuesta en búfer.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Esta distinción separa rápidamente un problema de infraestructura de un error en su cliente.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Compruebe &lt;code&gt;finish_reason&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;Cuando la transmisión termina antes de lo esperado, inspeccione el último fragmento:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"choices"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"finish_reason"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"length"&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;length&lt;/code&gt;: se alcanzó &lt;code&gt;max_tokens&lt;/code&gt;. Auméntelo si la tarea requiere una respuesta más extensa.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;stop&lt;/code&gt;: el modelo terminó la respuesta de forma normal.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;No trate una salida corta como un error del modelo sin comprobar primero este campo.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Revise el proxy inverso
&lt;/h3&gt;

&lt;p&gt;Si funciona localmente pero se bloquea en pruebas o producción, revise la configuración del proxy. Por ejemplo, nginx suele necesitar desactivar el almacenamiento en búfer para rutas SSE:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight nginx"&gt;&lt;code&gt;&lt;span class="k"&gt;location&lt;/span&gt; &lt;span class="n"&gt;/chat/completions&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kn"&gt;proxy_buffering&lt;/span&gt; &lt;span class="no"&gt;off&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="kn"&gt;proxy_cache&lt;/span&gt; &lt;span class="no"&gt;off&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="kn"&gt;proxy_http_version&lt;/span&gt; &lt;span class="mf"&gt;1.1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Pruebe la misma solicitud desde Apidog contra el entorno local y contra el gateway. Si transmite desde su máquina pero no a través del gateway, el problema está en la infraestructura y no en xAI.&lt;/p&gt;

&lt;h2&gt;
  
  
  Llamadas a herramientas: donde las integraciones de agentes realmente fallan
&lt;/h2&gt;

&lt;p&gt;La llamada a funciones es una pieza crítica en agentes. Los errores más frecuentes no están en el texto generado, sino en cómo el cliente procesa &lt;code&gt;tool_calls&lt;/code&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Argumentos que no se pueden analizar
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;tool_calls[].function.arguments&lt;/code&gt; llega como una cadena JSON. Analícela de forma defensiva:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;parseToolArguments&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;rawArguments&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;try&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;JSON&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;parse&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;rawArguments&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;catch &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;error&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Argumentos de herramienta inválidos&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nx"&gt;rawArguments&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;error&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;message&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;});&lt;/span&gt;

    &lt;span class="k"&gt;throw&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Error&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;No se pudieron analizar los argumentos de la herramienta&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Cuente estas fallas. Un aumento sostenido puede indicar que cambió el &lt;code&gt;prompt&lt;/code&gt;, el esquema o el contexto de la conversación.&lt;/p&gt;

&lt;h3&gt;
  
  
  JSON válido con forma incorrecta
&lt;/h3&gt;

&lt;p&gt;Que el JSON sea válido no significa que sea seguro de ejecutar. Valide el objeto contra el esquema esperado en cada llamada:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;validateGetOrderArgs&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;args&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;typeof&lt;/span&gt; &lt;span class="nx"&gt;args&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;orderId&lt;/span&gt; &lt;span class="o"&gt;!==&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;string&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="nx"&gt;args&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;orderId&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;throw&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Error&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;orderId debe ser una cadena no vacía&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;args&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;En producción, use la misma validación que usa en desarrollo. No ejecute una herramienta solo porque el modelo devolvió JSON sintácticamente correcto.&lt;/p&gt;

&lt;h3&gt;
  
  
  Herramientas desconocidas
&lt;/h3&gt;

&lt;p&gt;Rechace explícitamente nombres que no estén permitidos:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;allowedTools&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Set&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;get_order&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;search_products&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]);&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;assertAllowedTool&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;allowedTools&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;has&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;throw&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Error&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`Herramienta no permitida: &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Esto evita que una función inexistente termine el bucle del agente con un &lt;code&gt;KeyError&lt;/code&gt; o una excepción inesperada.&lt;/p&gt;

&lt;h3&gt;
  
  
  Ensamble fragmentos antes de analizar
&lt;/h3&gt;

&lt;p&gt;En transmisiones SSE, los argumentos de una herramienta pueden llegar divididos en varios fragmentos. Acumúlelos por índice de llamada y analice solo al final:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;toolArgumentsByIndex&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Map&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="k"&gt;await &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;chunk&lt;/span&gt; &lt;span class="k"&gt;of&lt;/span&gt; &lt;span class="nx"&gt;stream&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;for &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;choice&lt;/span&gt; &lt;span class="k"&gt;of&lt;/span&gt; &lt;span class="nx"&gt;chunk&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;choices&lt;/span&gt; &lt;span class="o"&gt;??&lt;/span&gt; &lt;span class="p"&gt;[])&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;for &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;toolCall&lt;/span&gt; &lt;span class="k"&gt;of&lt;/span&gt; &lt;span class="nx"&gt;choice&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;delta&lt;/span&gt;&lt;span class="p"&gt;?.&lt;/span&gt;&lt;span class="nx"&gt;tool_calls&lt;/span&gt; &lt;span class="o"&gt;??&lt;/span&gt; &lt;span class="p"&gt;[])&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;index&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;toolCall&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;index&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;current&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;toolArgumentsByIndex&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;index&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;??&lt;/span&gt; &lt;span class="dl"&gt;""&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;next&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;current&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;toolCall&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;?.&lt;/span&gt;&lt;span class="nx"&gt;arguments&lt;/span&gt; &lt;span class="o"&gt;??&lt;/span&gt; &lt;span class="dl"&gt;""&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

      &lt;span class="nx"&gt;toolArgumentsByIndex&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;set&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;index&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;next&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;for &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;index&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;rawArguments&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="k"&gt;of&lt;/span&gt; &lt;span class="nx"&gt;toolArgumentsByIndex&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;args&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;parseToolArguments&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;rawArguments&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;index&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;args&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Analizar antes de completar el ensamblaje produce un falso diagnóstico: parece que el modelo emitió JSON roto, pero el error está en el consumidor de la transmisión.&lt;/p&gt;

&lt;p&gt;En Apidog, guarde una solicitud que devuelva llamadas a herramientas y añada aserciones para verificar que:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;el nombre de la herramienta pertenece al conjunto permitido;&lt;/li&gt;
&lt;li&gt;la cadena de argumentos se analiza correctamente;&lt;/li&gt;
&lt;li&gt;el objeto resultante cumple el esquema esperado.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Ejecute el escenario varias veces. La no determinación de un LLM puede ocultar una tasa de fallo del 10 % en una única ejecución. Si usa servidores MCP en vez de llamadas a funciones directas, aplique la misma disciplina; consulte la guía para &lt;a href="https://apidog.com/es/blog/mcp-server-testing-apidog?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;probar servidores MCP con Apidog&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Errores, reintentos y límites de tasa
&lt;/h2&gt;

&lt;p&gt;Defina una política explícita para cada clase de error:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Estado&lt;/th&gt;
&lt;th&gt;Significado&lt;/th&gt;
&lt;th&gt;Política&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;400&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Solicitud mal formada&lt;/td&gt;
&lt;td&gt;No reintentar. Registre el error y corrija la solicitud.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;401&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Clave incorrecta o ausente&lt;/td&gt;
&lt;td&gt;No reintentar. Verifique la variable de entorno y la clave en la consola.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;404&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Modelo o endpoint incorrecto&lt;/td&gt;
&lt;td&gt;No reintentar. Verifique el modelo contra &lt;code&gt;/v1/models&lt;/code&gt;.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;429&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Límite de tasa o cuota&lt;/td&gt;
&lt;td&gt;Reintente con retroceso exponencial y fluctuación. Respete &lt;code&gt;Retry-After&lt;/code&gt; si existe.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;5xx&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Error del servidor&lt;/td&gt;
&lt;td&gt;Reintente hasta tres veces con retroceso y falle la tarea de forma visible después.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Tiempo de espera&lt;/td&gt;
&lt;td&gt;Red lenta o generación extensa&lt;/td&gt;
&lt;td&gt;Prefiera streaming y configure tiempos de espera de minutos para tareas de agente.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Un ejemplo de reintento para &lt;code&gt;429&lt;/code&gt; y &lt;code&gt;5xx&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;sleep&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;ms&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Promise&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;resolve&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;setTimeout&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;resolve&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;ms&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;

&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;requestWithRetry&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;request&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;maxRetries&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;for &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;attempt&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;attempt&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;=&lt;/span&gt; &lt;span class="nx"&gt;maxRetries&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;attempt&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;request&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

    &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ok&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;retryable&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;status&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="mi"&gt;429&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;status&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;=&lt;/span&gt; &lt;span class="mi"&gt;500&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;retryable&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="nx"&gt;attempt&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="nx"&gt;maxRetries&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="k"&gt;throw&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Error&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`Solicitud fallida con estado &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;status&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;retryAfter&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Number&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;retry-after&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;baseDelay&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;Number&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;isFinite&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;retryAfter&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
      &lt;span class="p"&gt;?&lt;/span&gt; &lt;span class="nx"&gt;retryAfter&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;1000&lt;/span&gt;
      &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1000&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt; &lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="nx"&gt;attempt&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;jitter&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;Math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;floor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;Math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;random&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;250&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

    &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;sleep&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;baseDelay&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;jitter&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Registre siempre el objeto &lt;code&gt;usage&lt;/code&gt;. Con precios de $2/$6 por millón de tokens, el coste por solicitud puede ser bajo, pero los bucles de agentes multiplican llamadas y tokens. Una regresión introducida por un cambio de &lt;code&gt;prompt&lt;/code&gt; suele aparecer antes en los registros de uso que en la factura. El &lt;a href="https://apidog.com/es/blog/grok-4-5-pricing?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;análisis de precios de Grok&lt;/a&gt; explica el modelo de costes con más detalle.&lt;/p&gt;

&lt;h2&gt;
  
  
  Simule Grok en CI y pruebe la API real por separado
&lt;/h2&gt;

&lt;p&gt;No llame al modelo en vivo en cada &lt;code&gt;commit&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Una prueba de integración de agente con 30 llamadas reales cuesta dinero, tarda más de un minuto y puede fallar por una incidencia temporal del proveedor. Cuando eso ocurre con frecuencia, el equipo deja de confiar en la suite.&lt;/p&gt;

&lt;p&gt;Separe las responsabilidades.&lt;/p&gt;

&lt;h3&gt;
  
  
  Simulaciones para la lógica
&lt;/h3&gt;

&lt;p&gt;Use la simulación inteligente de Apidog para devolver respuestas con formato Grok que cubran casos como:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;una finalización normal;&lt;/li&gt;
&lt;li&gt;una llamada a herramienta válida;&lt;/li&gt;
&lt;li&gt;un &lt;code&gt;429&lt;/code&gt;;&lt;/li&gt;
&lt;li&gt;una respuesta &lt;code&gt;5xx&lt;/code&gt;;&lt;/li&gt;
&lt;li&gt;una transmisión truncada;&lt;/li&gt;
&lt;li&gt;argumentos JSON inválidos;&lt;/li&gt;
&lt;li&gt;una herramienta desconocida.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Así ejecuta en cada &lt;code&gt;commit&lt;/code&gt;, en segundos, la lógica de:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;reintentos;&lt;/li&gt;
&lt;li&gt;análisis JSON;&lt;/li&gt;
&lt;li&gt;validación de esquemas;&lt;/li&gt;
&lt;li&gt;manejo de &lt;code&gt;finish_reason&lt;/code&gt;;&lt;/li&gt;
&lt;li&gt;terminación del bucle del agente.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Simule especialmente las rutas de fallo. En muchos proyectos, el código de manejo de &lt;code&gt;429&lt;/code&gt; no se ejecuta hasta que aparece el primer límite de tasa en producción.&lt;/p&gt;

&lt;h3&gt;
  
  
  Pruebas en vivo programadas
&lt;/h3&gt;

&lt;p&gt;Ejecute las pruebas contra la API real:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;cada noche;&lt;/li&gt;
&lt;li&gt;antes de un lanzamiento;&lt;/li&gt;
&lt;li&gt;cuando actualice el modelo;&lt;/li&gt;
&lt;li&gt;cuando modifique herramientas o prompts críticos.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Estas pruebas detectan cambios reales del proveedor, como variaciones en el formato de llamadas a herramientas o nuevos límites de tasa, sin bloquear la cola de integración por la disponibilidad de xAI.&lt;/p&gt;

&lt;p&gt;Los escenarios de Apidog cubren ambos casos: apunte el escenario al entorno simulado en CI y a &lt;code&gt;xai-dev&lt;/code&gt; en la ejecución programada. Mantiene las mismas aserciones con dos destinos distintos.&lt;/p&gt;

&lt;p&gt;Si ejecuta pruebas desde una terminal o una tubería, la &lt;a href="https://apidog.com/es/blog/apidog-cli-in-claude-code?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;CLI de Apidog&lt;/a&gt; permite lanzar los mismos escenarios sin interfaz gráfica.&lt;/p&gt;

&lt;h2&gt;
  
  
  Lista de verificación previa a producción
&lt;/h2&gt;

&lt;p&gt;Antes de enviar tráfico real a Grok 4.6, confirme lo siguiente:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;[ ] Las claves de API están en variables de entorno; desarrollo y producción usan entornos separados.&lt;/li&gt;
&lt;li&gt;[ ] No hay claves en el control de versiones ni en solicitudes guardadas.&lt;/li&gt;
&lt;li&gt;[ ] La transmisión maneja &lt;code&gt;finish_reason: length&lt;/code&gt;, bloqueos y almacenamiento en búfer del proxy.&lt;/li&gt;
&lt;li&gt;[ ] Los argumentos de llamadas a herramientas se ensamblan antes de analizarlos.&lt;/li&gt;
&lt;li&gt;[ ] Los argumentos se analizan defensivamente y se validan contra un esquema en cada llamada.&lt;/li&gt;
&lt;li&gt;[ ] Los nombres de herramienta se validan contra una lista permitida.&lt;/li&gt;
&lt;li&gt;[ ] La política de reintentos para &lt;code&gt;429&lt;/code&gt; y &lt;code&gt;5xx&lt;/code&gt; está implementada y probada mediante simulación.&lt;/li&gt;
&lt;li&gt;[ ] El objeto &lt;code&gt;usage&lt;/code&gt; se registra por solicitud y genera alertas ante desviaciones de coste.&lt;/li&gt;
&lt;li&gt;[ ] CI usa simulaciones y la suite en vivo se ejecuta según un horario.&lt;/li&gt;
&lt;li&gt;[ ] Toda la suite se puede volver a ejecutar con un único comando al actualizar el modelo.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Preguntas frecuentes
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;¿Cómo depuro una respuesta de transmisión de Grok 4.6 que se cuelga?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Reprodúzcala en la vista SSE de Apidog. Si los fragmentos dejaron de llegar, revise servidor, red, proxy y tiempos de espera. Si los fragmentos siguen llegando pero su interfaz no cambia, revise el consumo de la transmisión, el almacenamiento en búfer y el código asíncrono del cliente.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;¿Por qué las llamadas a herramientas de Grok 4.6 a veces fallan al analizarse?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Los argumentos llegan como una cadena JSON y, en streaming, pueden estar distribuidos en varios fragmentos. Ensamble todos los fragmentos antes de ejecutar &lt;code&gt;JSON.parse&lt;/code&gt;, capture errores de análisis y valide el objeto resultante contra su esquema.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;¿Deberían mis pruebas llamar a la API real de Grok?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Sí, pero en un horario programado, por ejemplo cada noche o antes de un lanzamiento. Para cada &lt;code&gt;commit&lt;/code&gt;, simule el endpoint para mantener CI rápido, determinista y sin coste por tokens.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;¿Este flujo de trabajo funciona para otras API de LLM?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Sí. Como la API de Grok es compatible con OpenAI, puede reutilizar la estructura de proyecto y crear un entorno por proveedor. Esto permite probar &lt;a href="https://apidog.com/es/blog/how-to-use-gpt-5-6-api?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;GPT-5.6&lt;/a&gt;, Claude y Grok en paralelo con las mismas aserciones y escenarios.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>¿Cómo usar la API DeepSeek V4 Pro 0813?</title>
      <dc:creator>Roobia</dc:creator>
      <pubDate>Thu, 13 Aug 2026 04:26:58 +0000</pubDate>
      <link>https://dev.to/roobia/como-usar-la-api-deepseek-v4-pro-0813-4m1g</link>
      <guid>https://dev.to/roobia/como-usar-la-api-deepseek-v4-pro-0813-4m1g</guid>
      <description>&lt;p&gt;DeepSeek V4 Pro salió de la fase de previsualización el 12 de agosto de 2026. La versión de disponibilidad general (GA), identificada como &lt;code&gt;0813&lt;/code&gt;, sirve el endpoint &lt;code&gt;deepseek-v4-pro&lt;/code&gt; con una ventana de contexto de 1M de tokens, hasta 384K tokens de salida y un precio de entrada de $0.003625 por millón de tokens en aciertos de caché. Según &lt;a href="https://www.unite.ai/deepseek-ships-v4-pro-as-its-flagship-model-leaves-preview/" rel="noopener noreferrer"&gt;Unite.AI&lt;/a&gt;, el modelo pasó cuatro meses en previsualización antes de convertirse en el buque insignia de DeepSeek.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://apidog.com/?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation" class="crayons-btn crayons-btn--primary"&gt;Prueba Apidog hoy&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;Esta guía se centra en la implementación: configurar el SDK de OpenAI, elegir modos de pensamiento, procesar &lt;code&gt;reasoning_content&lt;/code&gt;, habilitar streaming SSE, ejecutar llamadas a herramientas y estructurar prompts para maximizar la caché. Para conocer primero la arquitectura, consulta &lt;a href="https://apidog.com/es/blog/what-is-deepseek-v4/?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Qué es DeepSeek V4&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  TL;DR
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;La instantánea GA &lt;code&gt;0813&lt;/code&gt; está detrás del endpoint &lt;code&gt;deepseek-v4-pro&lt;/code&gt; desde el 12 de agosto de 2026.&lt;/li&gt;
&lt;li&gt;La API es compatible con OpenAI: configura el SDK &lt;code&gt;openai&lt;/code&gt; con &lt;code&gt;https://api.deepseek.com&lt;/code&gt; y usa &lt;code&gt;model="deepseek-v4-pro"&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Ofrece 1M de tokens de contexto, hasta 384K de salida y tres modos: &lt;code&gt;non-think&lt;/code&gt;, &lt;code&gt;think high&lt;/code&gt; y &lt;code&gt;think max&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Los modos de pensamiento devuelven &lt;code&gt;reasoning_content&lt;/code&gt; además de la respuesta final.&lt;/li&gt;
&lt;li&gt;La entrada cuesta $0.435/M en fallo de caché y $0.003625/M en acierto de caché; la salida cuesta $0.87/M.&lt;/li&gt;
&lt;li&gt;DeepSeek indicó el 6 de agosto que habrá un aumento “significativo” de precio, pero sin cifras ni fecha.&lt;/li&gt;
&lt;li&gt;Prueba solicitudes, entornos y streaming SSE en &lt;a href="https://apidog.com/?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Apidog&lt;/a&gt; antes de integrar el modelo en producción.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Qué cambia con la compilación GA 0813
&lt;/h2&gt;

&lt;p&gt;La previsualización se abrió en abril de 2026. V4 Flash se lanzó en julio y V4 Pro alcanzó disponibilidad general el 12 de agosto como compilación &lt;code&gt;0813&lt;/code&gt;, siguiendo la convención de fechas de DeepSeek, como &lt;code&gt;v3-0324&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fizeehylzfargyf8vu4j0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fizeehylzfargyf8vu4j0.png" alt="DeepSeek V4 Pro GA 0813" width="800" height="356"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Para desarrollo y producción, la GA cambia tres aspectos importantes:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;La instantánea es estable.&lt;/strong&gt; Las versiones preview pueden cambiar sin aviso e invalidar evaluaciones o ajustes de prompts. &lt;code&gt;0813&lt;/code&gt; es un objetivo fijo hasta que DeepSeek publique otra instantánea.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;El alias de producción apunta a la GA.&lt;/strong&gt; En la API oficial usa &lt;code&gt;deepseek-v4-pro&lt;/code&gt;. Si necesitas fijar explícitamente la instantánea, &lt;a href="https://openrouter.ai/deepseek/deepseek-v4-pro-0813" rel="noopener noreferrer"&gt;OpenRouter lista &lt;code&gt;deepseek/deepseek-v4-pro-0813&lt;/code&gt;&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Todas las funciones están disponibles.&lt;/strong&gt; Incluye modos de pensamiento, llamadas a funciones, salidas estructuradas, caché de prompts y compatibilidad con formatos OpenAI, Anthropic y Responses.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Bajo el capó, V4 Pro es un modelo de mezcla de expertos con 1.6T de parámetros totales y 49B activos por token. Sus esquemas de Atención Dispersa Comprimida y Atención Fuertemente Comprimida reducen el cálculo de inferencia por token al 27% de V3.2 y la caché KV al 10%. Esa reducción es relevante para hacer viable una ventana de 1M de tokens.&lt;/p&gt;

&lt;h2&gt;
  
  
  DeepSeek V4 Pro 0813: especificaciones
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Especificación&lt;/th&gt;
&lt;th&gt;DeepSeek V4 Pro 0813&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Lanzamiento&lt;/td&gt;
&lt;td&gt;GA el 12 de agosto de 2026, instantánea &lt;code&gt;0813&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Arquitectura&lt;/td&gt;
&lt;td&gt;Mezcla de expertos, 1.6T parámetros totales, 49B activos por token&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Atención&lt;/td&gt;
&lt;td&gt;Atención Dispersa Comprimida + Atención Fuertemente Comprimida&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Costo de inferencia frente a V3.2&lt;/td&gt;
&lt;td&gt;27% del cálculo por token, 10% de la caché KV&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Ventana de contexto&lt;/td&gt;
&lt;td&gt;1.000.000 tokens&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Salida máxima&lt;/td&gt;
&lt;td&gt;384K tokens&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Modos de pensamiento&lt;/td&gt;
&lt;td&gt;sin pensamiento, pensamiento alto, pensamiento máximo&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Precio de entrada&lt;/td&gt;
&lt;td&gt;$0.435/M tokens en fallo de caché, $0.003625/M en acierto&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Precio de salida&lt;/td&gt;
&lt;td&gt;$0.87/M tokens&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Formatos de API&lt;/td&gt;
&lt;td&gt;Chat Completions de OpenAI, Messages de Anthropic, Responses de DeepSeek&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ID del modelo&lt;/td&gt;
&lt;td&gt;&lt;code&gt;deepseek-v4-pro&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Alternativa&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;deepseek-v4-flash&lt;/code&gt;: 284B total / 13B activos, $0.14/M de entrada y $0.28/M de salida&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;La ficha de DeepSeek informa resultados de SWE-bench Verified de 80.6%, Terminal Bench 2.0 de 67.9%, GPQA Diamond de 90.1% y LiveCodeBench de 93.5% para V4-Pro-Max. Son métricas auto-reportadas por el proveedor, así que ejecuta evaluaciones específicas de tu tarea antes de migrar una carga de trabajo importante.&lt;/p&gt;

&lt;h2&gt;
  
  
  Obtén una clave API y ejecuta tu primera solicitud
&lt;/h2&gt;

&lt;p&gt;Sigue estos pasos:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Crea una cuenta en &lt;a href="http://platform.deepseek.com" rel="noopener noreferrer"&gt;platform.deepseek.com&lt;/a&gt; y añade crédito. La API es prepago.&lt;/li&gt;
&lt;li&gt;Abre la sección de claves API, genera una clave y cópiala inmediatamente.&lt;/li&gt;
&lt;li&gt;Guarda la clave como variable de entorno:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;DEEPSEEK_API_KEY&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"sk-..."&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;La API es compatible con Chat Completions de OpenAI. Usa el paquete &lt;code&gt;openai&lt;/code&gt; y apunta el cliente a DeepSeek. Tanto &lt;code&gt;https://api.deepseek.com&lt;/code&gt; como &lt;code&gt;https://api.deepseek.com/v1&lt;/code&gt; funcionan como URL base; &lt;code&gt;/v1&lt;/code&gt; es una capa de compatibilidad de protocolo, no una versión del modelo.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;openai&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;OpenAI&lt;/span&gt;

&lt;span class="n"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;OpenAI&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;api_key&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;environ&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;DEEPSEEK_API_KEY&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="n"&gt;base_url&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://api.deepseek.com&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;chat&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;completions&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;deepseek-v4-pro&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;messages&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;role&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;system&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;content&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;You are a concise technical assistant.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;role&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;user&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;content&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Explain idempotency in REST APIs in two sentences.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="p"&gt;],&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;choices&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="n"&gt;message&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;content&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;usage&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Registra &lt;code&gt;response.usage&lt;/code&gt; desde la primera prueba. En este modelo, la diferencia entre un acierto y un fallo de caché puede cambiar significativamente el costo de una sesión larga.&lt;/p&gt;

&lt;p&gt;Para una prueba rápida por HTTP:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl https://api.deepseek.com/chat/completions &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Content-Type: application/json"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Authorization: Bearer &lt;/span&gt;&lt;span class="nv"&gt;$DEEPSEEK_API_KEY&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="s1"&gt;'{
    "model": "deepseek-v4-pro",
    "messages": [
      {"role": "user", "content": "List three ways to version a REST API."}
    ]
  }'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Consulta la &lt;a href="https://api-docs.deepseek.com" rel="noopener noreferrer"&gt;documentación oficial de DeepSeek&lt;/a&gt; para todos los parámetros, el endpoint compatible con Anthropic y la API Responses de DeepSeek.&lt;/p&gt;

&lt;h2&gt;
  
  
  Usa los tres modos de pensamiento
&lt;/h2&gt;

&lt;p&gt;V4 Pro expone el razonamiento mediante un selector. El endpoint es el mismo; cambia el presupuesto de razonamiento según la tarea:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Sin pensamiento (&lt;code&gt;non-think&lt;/code&gt;)&lt;/strong&gt;: respuesta directa. Úsalo para clasificación, extracción, formateo y resúmenes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pensamiento alto (&lt;code&gt;think high&lt;/code&gt;)&lt;/strong&gt;: devuelve razonamiento en &lt;code&gt;reasoning_content&lt;/code&gt; antes de la respuesta final. Es una opción práctica para programación, depuración y análisis de varios pasos.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pensamiento máximo (&lt;code&gt;think max&lt;/code&gt;)&lt;/strong&gt;: usa el mayor presupuesto de razonamiento. Resérvalo para problemas complejos donde la latencia y el costo adicional estén justificados.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Configura el modo con &lt;code&gt;reasoning_effort&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;chat&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;completions&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;deepseek-v4-pro&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;reasoning_effort&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;high&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;  &lt;span class="c1"&gt;# "none" | "high" | "max"
&lt;/span&gt;    &lt;span class="n"&gt;messages&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;role&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;user&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;content&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Our API returns 502s under load but only behind the CDN. Walk through likely causes in order of probability.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="p"&gt;],&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;message&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;choices&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="n"&gt;message&lt;/span&gt;

&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;--- Reasoning ---&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;message&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;reasoning_content&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;--- Answer ---&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;message&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;content&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Dos reglas prácticas:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;No reenvíes &lt;code&gt;reasoning_content&lt;/code&gt; como parte del historial de conversación. Conserva y reenvía solo &lt;code&gt;content&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Los tokens de razonamiento se facturan como salida, a $0.87/M. No establezcas &lt;code&gt;max&lt;/code&gt; como valor predeterminado sin medir costo y latencia.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Habilita respuestas en streaming
&lt;/h2&gt;

&lt;p&gt;Con salidas de hasta 384K tokens y razonamiento extenso, evita esperar a recibir la respuesta completa. Activa &lt;code&gt;stream=True&lt;/code&gt; y procesa tanto los deltas de razonamiento como los de contenido:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;stream&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;chat&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;completions&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;deepseek-v4-pro&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;reasoning_effort&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;high&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;stream&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;messages&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;role&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;user&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;content&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Design a rate limiter for a public API. Compare token bucket and sliding window.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="p"&gt;],&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;chunk&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;stream&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="n"&gt;chunk&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;choices&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="k"&gt;continue&lt;/span&gt;  &lt;span class="c1"&gt;# El chunk final puede incluir solo datos de usage.
&lt;/span&gt;
    &lt;span class="n"&gt;delta&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;chunk&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;choices&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="n"&gt;delta&lt;/span&gt;

    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="nf"&gt;getattr&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;delta&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;reasoning_content&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="bp"&gt;None&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;delta&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;reasoning_content&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;end&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;""&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;flush&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;elif&lt;/span&gt; &lt;span class="n"&gt;delta&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;content&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;delta&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;content&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;end&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;""&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;flush&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;En una interfaz, muestra la fase de razonamiento como un estado colapsado de “pensando” y cambia a la respuesta visible cuando empiecen a llegar deltas de &lt;code&gt;content&lt;/code&gt;. El transporte usa eventos enviados por el servidor; consulta esta guía de &lt;a href="https://apidog.com/es/blog/how-to-stream-api-responses-sse/?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;streaming de respuestas API con SSE&lt;/a&gt; para revisar la mecánica.&lt;/p&gt;

&lt;h2&gt;
  
  
  Implementa llamadas a herramientas y salidas estructuradas
&lt;/h2&gt;

&lt;p&gt;V4 Pro admite llamadas a funciones compatibles con OpenAI. Puedes reutilizar el patrón habitual de agentes:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Define herramientas.&lt;/li&gt;
&lt;li&gt;Lee &lt;code&gt;tool_calls&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Ejecuta la función en tu aplicación.&lt;/li&gt;
&lt;li&gt;Añade el resultado al historial.&lt;/li&gt;
&lt;li&gt;Repite hasta obtener una respuesta final.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Ejemplo de definición de herramienta:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;tools&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[{&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;type&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;function&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;function&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;name&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;get_endpoint_status&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;description&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Check the health of an internal API endpoint&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;parameters&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;type&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;object&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;properties&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
                &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;endpoint&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
                    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;type&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;string&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;description&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Path, e.g. /v1/orders&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                &lt;span class="p"&gt;},&lt;/span&gt;
            &lt;span class="p"&gt;},&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;required&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;endpoint&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
        &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
&lt;span class="p"&gt;}]&lt;/span&gt;

&lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;chat&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;completions&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;deepseek-v4-pro&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;messages&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;role&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;user&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;content&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Is /v1/orders healthy right now?&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="n"&gt;tools&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;tools&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;choices&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="n"&gt;message&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;tool_calls&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Cuando necesites JSON parseable, usa el parámetro estándar &lt;code&gt;response_format&lt;/code&gt;. Para la estructura completa de mensajes de herramientas y respuestas, revisa la &lt;a href="https://api-docs.deepseek.com" rel="noopener noreferrer"&gt;documentación oficial&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Diseña prompts para aprovechar la caché
&lt;/h2&gt;

&lt;p&gt;La caché de prompts es una de las características más importantes para la arquitectura. DeepSeek almacena automáticamente prefijos repetidos sin cabeceras especiales ni configuración de TTL:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Fallo de caché: &lt;strong&gt;$0.435/M tokens de entrada&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Acierto de caché: &lt;strong&gt;$0.003625/M tokens de entrada&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;El descuento es de 120 veces para prefijos que la API ya ha procesado.&lt;/p&gt;

&lt;p&gt;Supón un agente de código con 200K tokens de contexto de repositorio y 50 llamadas durante una sesión:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Sin caché:&lt;/strong&gt; &lt;code&gt;50 × 200K × $0.435/M ≈ $4.35&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Con caché automática:&lt;/strong&gt; un fallo inicial de &lt;code&gt;≈ $0.087&lt;/code&gt; más 49 aciertos de &lt;code&gt;≈ $0.0007&lt;/code&gt; cada uno, para un total aproximado de &lt;code&gt;≈ $0.12&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;La sesión es aproximadamente 35 veces más barata si mantienes estable el inicio del prompt.&lt;/p&gt;

&lt;p&gt;Estructura tus mensajes así:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;[Contenido estable]
- Prompt del sistema
- Documentación
- Contexto del repositorio
- Políticas y reglas

[Contenido variable]
- Último mensaje del usuario
- Estado actual de la tarea
- Marcas de tiempo
- IDs de solicitud
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Un cambio temprano invalida el prefijo de caché desde ese punto. Por ejemplo, añadir una marca de tiempo al prompt del sistema puede convertir cada llamada en un fallo de caché completo.&lt;/p&gt;

&lt;p&gt;Una ventana de contexto de 1M cuesta aproximadamente $0.435 en un fallo, pero si se reutiliza como prefijo estable puede leerse por cerca de un tercio de centavo por llamada. Para más contexto, consulta &lt;a href="https://apidog.com/es/blog/what-is-prompt-caching/?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Qué es el almacenamiento en caché de prompts&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Prueba &lt;code&gt;deepseek-v4-pro&lt;/code&gt; en Apidog
&lt;/h2&gt;

&lt;p&gt;Antes de integrar el modelo en producción, valida solicitudes, streaming y consumo con un cliente de API. Como DeepSeek es compatible con OpenAI, &lt;a href="https://apidog.com/?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Apidog&lt;/a&gt; puede trabajar con el endpoint sin una configuración especial.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F7nufaffvy0gqdi1gvdjc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F7nufaffvy0gqdi1gvdjc.png" alt="Prueba de DeepSeek V4 Pro en Apidog" width="799" height="530"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Importa la solicitud.&lt;/strong&gt; Pega el comando &lt;code&gt;curl&lt;/code&gt; anterior en Apidog para convertirlo en una solicitud editable con cabeceras, autenticación y cuerpo ya analizados.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Crea entornos para Pro y Flash.&lt;/strong&gt; Guarda &lt;code&gt;base_url&lt;/code&gt;, la clave API y el nombre del modelo como variables. Cambia entre &lt;code&gt;deepseek-v4-pro&lt;/code&gt; y &lt;code&gt;deepseek-v4-flash&lt;/code&gt; con un cambio de entorno.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Inspecciona SSE.&lt;/strong&gt; Envía una solicitud con &lt;code&gt;"stream": true&lt;/code&gt; para revisar cómo llegan primero los deltas de &lt;code&gt;reasoning_content&lt;/code&gt; y después los de contenido.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Guarda una colección de regresión.&lt;/strong&gt; Cuando DeepSeek publique otra instantánea, ejecuta las mismas solicitudes y compara respuestas, latencia y uso antes de actualizar.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;El visor de respuestas también muestra &lt;code&gt;usage&lt;/code&gt; en cada solicitud, útil para comprobar la proporción de aciertos de caché mientras ajustas prompts.&lt;/p&gt;

&lt;h2&gt;
  
  
  Precios actuales y aumento anunciado
&lt;/h2&gt;

&lt;p&gt;Precios de lista para los endpoints V4:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Modelo&lt;/th&gt;
&lt;th&gt;Entrada, fallo de caché&lt;/th&gt;
&lt;th&gt;Entrada, acierto de caché&lt;/th&gt;
&lt;th&gt;Salida&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;deepseek-v4-pro&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;$0.435/M&lt;/td&gt;
&lt;td&gt;$0.003625/M&lt;/td&gt;
&lt;td&gt;$0.87/M&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;deepseek-v4-flash&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;$0.14/M&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;$0.28/M&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;El 6 de agosto de 2026, DeepSeek avisó de un aumento “significativo” en el precio de la API. No publicó cifras ni fecha de aplicación.&lt;/p&gt;

&lt;p&gt;Mientras no haya más detalles:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Mide el costo por tarea con datos reales de &lt;code&gt;usage&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Maximiza los aciertos de caché manteniendo estables los prefijos.&lt;/li&gt;
&lt;li&gt;Mantén V4 Flash como opción de enrutamiento para tareas simples y de alto volumen.&lt;/li&gt;
&lt;li&gt;Reserva Pro para codificación agéntica, análisis de contexto largo y tareas que requieran razonamiento.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Consulta la &lt;a href="https://apidog.com/es/blog/deepseek-v4-api-pricing/?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;guía de precios de la API DeepSeek V4&lt;/a&gt; para un desglose más detallado.&lt;/p&gt;

&lt;h2&gt;
  
  
  Preguntas frecuentes
&lt;/h2&gt;

&lt;h3&gt;
  
  
  ¿Funcionará mi código existente del SDK de OpenAI sin cambios?
&lt;/h3&gt;

&lt;p&gt;Casi. Cambia &lt;code&gt;base_url&lt;/code&gt; a &lt;code&gt;https://api.deepseek.com&lt;/code&gt;, usa una clave de DeepSeek y establece &lt;code&gt;model="deepseek-v4-pro"&lt;/code&gt;. Chat Completions, streaming, herramientas y salidas estructuradas siguen formatos compatibles con OpenAI.&lt;/p&gt;

&lt;p&gt;Si tu equipo usa Anthropic, puede utilizar el endpoint Messages compatible de DeepSeek.&lt;/p&gt;

&lt;h3&gt;
  
  
  ¿Cuándo debería usar V4 Flash en lugar de V4 Pro?
&lt;/h3&gt;

&lt;p&gt;Usa Flash para clasificación, extracción, chat simple y cargas sensibles a la latencia que no necesiten razonamiento profundo. Usa Pro para programación agéntica, análisis de contexto largo y tareas que aprovechen los modos de pensamiento.&lt;/p&gt;

&lt;p&gt;Enruta por tipo de tarea y métricas reales, no por preferencia de modelo.&lt;/p&gt;

&lt;h3&gt;
  
  
  ¿Puedo usar V4 Pro 0813 en Cursor?
&lt;/h3&gt;

&lt;p&gt;Sí. Cursor acepta endpoints personalizados compatibles con OpenAI, por lo que puedes configurar la compilación GA como modelo personalizado. Consulta &lt;a href="https://apidog.com/es/blog/how-to-use-deepseek-v4-pro-with-cursor/?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Cómo usar DeepSeek V4 Pro con Cursor&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Para terminar
&lt;/h2&gt;

&lt;p&gt;Empieza con una clave API, una solicitud mínima, streaming y métricas de &lt;code&gt;usage&lt;/code&gt;. Después, selecciona el modo de pensamiento según la tarea y estructura los prompts para mantener los prefijos estables.&lt;/p&gt;

&lt;p&gt;El descuento de caché de 120 veces convierte el diseño del prompt en una decisión de arquitectura. Guarda una colección de pruebas en &lt;a href="https://apidog.com/?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Apidog&lt;/a&gt;, vuelve a ejecutarla cuando llegue una nueva instantánea y mide el impacto de cualquier cambio de precio.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>¿Cómo usar la API de Grok 4.6?</title>
      <dc:creator>Roobia</dc:creator>
      <pubDate>Thu, 13 Aug 2026 03:13:38 +0000</pubDate>
      <link>https://dev.to/roobia/como-usar-la-api-de-grok-46-1368</link>
      <guid>https://dev.to/roobia/como-usar-la-api-de-grok-46-1368</guid>
      <description>&lt;p&gt;xAI lanzó Grok 4.6 el 12 de agosto de 2026. Está orientado a desarrolladores que construyen agentes de larga duración y flujos de codificación de varios pasos. El modelo cuesta $2 por millón de tokens de entrada y $6 por millón de tokens de salida. Esta guía muestra cómo autenticarte, enviar solicitudes, consumir streaming y preparar pruebas antes de producción.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://apidog.com/?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation" class="crayons-btn crayons-btn--primary"&gt;Prueba Apidog hoy&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;Al terminar tendrás una clave de API configurada, solicitudes funcionales con &lt;code&gt;curl&lt;/code&gt;, Python y JavaScript, manejo de respuestas en streaming y una configuración repetible para validar los endpoints de Grok 4.6. Si prefieres construir y depurar solicitudes visualmente, &lt;a href="https://apidog.com?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Apidog&lt;/a&gt; permite gestionar el flujo completo.&lt;/p&gt;

&lt;h2&gt;
  
  
  TL;DR
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Crea una clave en &lt;a href="https://console.x.ai" rel="noopener noreferrer"&gt;console.x.ai&lt;/a&gt;, guárdala como &lt;code&gt;XAI_API_KEY&lt;/code&gt; y llama a &lt;code&gt;https://api.x.ai/v1/chat/completions&lt;/code&gt; con &lt;code&gt;grok-4-6&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;La API es compatible con OpenAI: puedes reutilizar los SDK oficiales cambiando la URL base.&lt;/li&gt;
&lt;li&gt;Grok 4.6 tiene una ventana de contexto de 500.000 tokens y fecha límite de conocimiento del 1 de febrero de 2026.&lt;/li&gt;
&lt;li&gt;El precio es de $2 por millón de tokens de entrada y $6 por millón de tokens de salida. La variante rápida cuesta el doble.&lt;/li&gt;
&lt;li&gt;También está disponible mediante OpenRouter, Vercel, Cloudflare, Cursor y Grok Build.&lt;/li&gt;
&lt;li&gt;Puedes probar solicitudes, revisar streams SSE y simular endpoints para CI con &lt;a href="https://apidog.com/download?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Apidog&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fp54pvrmzeuzc0jumb41s.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fp54pvrmzeuzc0jumb41s.png" alt="Grok 4.6 API" width="800" height="713"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Con qué estás trabajando
&lt;/h2&gt;

&lt;p&gt;Antes de integrar el modelo, revisa las especificaciones que afectan coste, arquitectura y estrategia de pruebas.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Especificación&lt;/th&gt;
&lt;th&gt;Grok 4.6&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Fecha de lanzamiento&lt;/td&gt;
&lt;td&gt;12 de agosto de 2026&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Ventana de contexto&lt;/td&gt;
&lt;td&gt;500.000 tokens&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Fecha límite de conocimiento&lt;/td&gt;
&lt;td&gt;1 de febrero de 2026&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Precio de entrada&lt;/td&gt;
&lt;td&gt;$2 / 1M de tokens&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Precio de salida&lt;/td&gt;
&lt;td&gt;$6 / 1M de tokens&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Variante rápida&lt;/td&gt;
&lt;td&gt;2x el precio&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Estilo de API&lt;/td&gt;
&lt;td&gt;REST compatible con OpenAI&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Disponibilidad&lt;/td&gt;
&lt;td&gt;API de xAI, OpenRouter, Vercel, Cloudflare, Cursor, Grok Build&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Frente a Grok 4.5, xAI informa mejoras para tareas de agente: el modelo revisa su trabajo con más frecuencia en trayectorias largas y ofrece mejores primeras pasadas en proyectos interactivos y visuales. En benchmarks, pasó del 54% al 65,9% en DeepSWE v1.1 y del 47,1% al 57,5% en APEX-Agents.&lt;/p&gt;

&lt;p&gt;Si ya integraste Grok 4.5, la superficie de integración no cambia. Consulta la &lt;a href="https://apidog.com/es/blog/grok-4-5-api?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;guía de la API de Grok 4.5&lt;/a&gt; y sustituye el nombre del modelo.&lt;/p&gt;

&lt;h2&gt;
  
  
  Paso 1: obtén tu clave de API
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Ve a &lt;a href="https://console.x.ai" rel="noopener noreferrer"&gt;console.x.ai&lt;/a&gt; e inicia sesión o crea una cuenta de xAI.&lt;/li&gt;
&lt;li&gt;Abre &lt;strong&gt;Claves de API&lt;/strong&gt; desde la barra lateral.&lt;/li&gt;
&lt;li&gt;Haz clic en &lt;strong&gt;Crear clave de API&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Usa un nombre por entorno, por ejemplo &lt;code&gt;grok-dev&lt;/code&gt; o &lt;code&gt;grok-prod&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Copia la clave inmediatamente: xAI la muestra una sola vez.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Guárdala en una variable de entorno, nunca directamente en el código:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;XAI_API_KEY&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"your-key-here"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Usa claves distintas para desarrollo y producción. Añade tus archivos de variables de entorno a &lt;code&gt;.gitignore&lt;/code&gt; y revoca la clave desde la consola si se filtra.&lt;/p&gt;

&lt;h2&gt;
  
  
  Paso 2: envía tu primera solicitud con curl
&lt;/h2&gt;

&lt;p&gt;La API de xAI utiliza el formato de completado de chat compatible con OpenAI.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl https://api.x.ai/v1/chat/completions &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Content-Type: application/json"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Authorization: Bearer &lt;/span&gt;&lt;span class="nv"&gt;$XAI_API_KEY&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="s1"&gt;'{
    "model": "grok-4-6",
    "messages": [
      {
        "role": "system",
        "content": "You are a concise technical assistant."
      },
      {
        "role": "user",
        "content": "Explain idempotency in REST APIs in two sentences."
      }
    ]
  }'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Una respuesta correcta incluye:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;choices&lt;/code&gt;: contiene la respuesta generada por el asistente.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;usage&lt;/code&gt;: indica los tokens consumidos en entrada y salida.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Registra &lt;code&gt;usage&lt;/code&gt; desde la primera integración. Es el dato que necesitarás para medir costes y detectar prompts que crecen sin control.&lt;/p&gt;

&lt;p&gt;Si recibes &lt;code&gt;model not found&lt;/code&gt;, comprueba qué modelos puede usar tu clave:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl https://api.x.ai/v1/models &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Authorization: Bearer &lt;/span&gt;&lt;span class="nv"&gt;$XAI_API_KEY&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Los IDs de modelo pueden variar entre proveedores. Por ejemplo, OpenRouter usa &lt;code&gt;x-ai/grok-4.6&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Paso 3: integra Grok 4.6 con Python y JavaScript
&lt;/h2&gt;

&lt;p&gt;Como la API es compatible con OpenAI, puedes reutilizar el SDK oficial. Solo debes cambiar la clave y &lt;code&gt;base_url&lt;/code&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Python
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;openai&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;OpenAI&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;

&lt;span class="n"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;OpenAI&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;api_key&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;environ&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;XAI_API_KEY&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="n"&gt;base_url&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://api.x.ai/v1&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;chat&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;completions&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;grok-4-6&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;messages&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;role&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;system&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;content&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;You are a concise technical assistant.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
        &lt;span class="p"&gt;},&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;role&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;user&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;content&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Write a Python function that validates an email address.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
        &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="p"&gt;],&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;choices&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="n"&gt;message&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;content&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;usage&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  JavaScript / TypeScript
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;OpenAI&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;openai&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;OpenAI&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;apiKey&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;XAI_API_KEY&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;baseURL&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;https://api.x.ai/v1&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;chat&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;completions&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;model&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;grok-4-6&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;messages&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;role&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;system&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;content&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;You are a concise technical assistant.&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;role&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;user&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;content&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Write a TypeScript type guard for a User object.&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;],&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;choices&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nx"&gt;message&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;content&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;usage&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Esta compatibilidad reduce el coste de migración entre proveedores. Si ya utilizas la &lt;a href="https://apidog.com/es/blog/how-to-use-gpt-5-6-api?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;API de GPT-5.6&lt;/a&gt;, puedes alternar entre ambos modelos con una única variable de configuración.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;model&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;LLM_PROVIDER&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;xai&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
  &lt;span class="p"&gt;?&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;grok-4-6&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
  &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;gpt-5.6&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Paso 4: usa respuestas en streaming
&lt;/h2&gt;

&lt;p&gt;Para interfaces orientadas al usuario, activa streaming. Esto permite renderizar la respuesta a medida que llega en lugar de esperar a que termine una salida larga.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;stream&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;chat&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;completions&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;grok-4-6&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;messages&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;role&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;user&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;content&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Refactor this function and explain each change: ...&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="n"&gt;stream&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;chunk&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;stream&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;delta&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;chunk&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;choices&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="n"&gt;delta&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;content&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;delta&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;delta&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;end&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;""&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;flush&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Las respuestas de streaming llegan mediante Server-Sent Events (SSE). Cada fragmento suele llegar como una línea &lt;code&gt;data:&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Durante la depuración, valida lo siguiente:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Envía &lt;code&gt;stream: true&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Comprueba que tu cliente procesa cada &lt;code&gt;delta&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Desactiva el buffering en proxies inversos si el stream se queda bloqueado.&lt;/li&gt;
&lt;li&gt;Prueba la respuesta SSE sin procesar antes de depurar la UI.&lt;/li&gt;
&lt;li&gt;Verifica que el frontend conserva el contenido ya recibido si la conexión se interrumpe.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Apidog puede mostrar los fragmentos SSE en tiempo real, lo que facilita distinguir entre una pausa del modelo y un problema de buffering en tu cliente.&lt;/p&gt;

&lt;h2&gt;
  
  
  Paso 5: usa el contexto de 500K con cuidado
&lt;/h2&gt;

&lt;p&gt;Una ventana de 500.000 tokens puede contener una base de código mediana o cientos de páginas de documentación. Sin embargo, no conviene enviar todo el contexto en cada solicitud.&lt;/p&gt;

&lt;p&gt;Ten en cuenta estas dos reglas:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;El coste escala con la entrada.&lt;/strong&gt; A $2 por millón de tokens de entrada, una solicitud de 500K tokens cuesta aproximadamente $1 antes de generar una respuesta.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;La posición del contexto importa.&lt;/strong&gt; Coloca las instrucciones al principio, la documentación o el código de referencia en el medio y la pregunta concreta al final.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Para consultas repetidas sobre el mismo corpus:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Recupera solo los archivos o fragmentos relevantes.&lt;/li&gt;
&lt;li&gt;Usa caché para resultados estables.&lt;/li&gt;
&lt;li&gt;Resume documentos grandes antes de incluirlos en el prompt.&lt;/li&gt;
&lt;li&gt;Mide los tokens enviados por endpoint y por tarea.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;La variante rápida, con un coste de 2x, puede ser útil en experiencias interactivas sensibles a la latencia, como asistentes de programación. Para procesos por lotes, análisis nocturno o clasificación masiva, el nivel estándar suele ser más adecuado.&lt;/p&gt;

&lt;p&gt;Consulta el &lt;a href="https://apidog.com/es/blog/grok-4-5-pricing?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;desglose de precios de Grok 4.5&lt;/a&gt; para cálculos y comparativas con GPT-5.6 y Claude; su estructura de precios sigue aplicando a 4.6.&lt;/p&gt;

&lt;h2&gt;
  
  
  Prueba la integración correctamente con Apidog
&lt;/h2&gt;

&lt;p&gt;Un &lt;code&gt;curl&lt;/code&gt; funcional no es una integración lista para producción. Necesitas solicitudes versionadas, variables por entorno y errores reproducibles.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://apidog.com?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Apidog&lt;/a&gt; puede ayudarte a estructurar ese flujo:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fjjiw99l8gnp0zx9t9clt.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fjjiw99l8gnp0zx9t9clt.png" alt="Pruebas de Grok con Apidog" width="799" height="530"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Crea un proyecto y define un entorno con estas variables:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;   base_url = https://api.x.ai/v1
   XAI_API_KEY = tu-clave
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Crea una solicitud &lt;code&gt;POST&lt;/code&gt; a:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;   {{base_url}}/chat/completions
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Añade los encabezados:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;   Content-Type: application/json
   Authorization: Bearer {{XAI_API_KEY}}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Guarda un cuerpo reutilizable:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
     &lt;/span&gt;&lt;span class="nl"&gt;"model"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"grok-4-6"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
     &lt;/span&gt;&lt;span class="nl"&gt;"messages"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
       &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
         &lt;/span&gt;&lt;span class="nl"&gt;"role"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"user"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
         &lt;/span&gt;&lt;span class="nl"&gt;"content"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Resume este documento en tres puntos."&lt;/span&gt;&lt;span class="w"&gt;
       &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
     &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
   &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Inspecciona visualmente las respuestas en streaming para detectar truncamientos, pausas o fragmentos perdidos.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Añade aserciones de prueba para validar:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Que &lt;code&gt;choices[0].message.content&lt;/code&gt; no esté vacío.&lt;/li&gt;
&lt;li&gt;Que &lt;code&gt;usage.total_tokens&lt;/code&gt; se mantenga dentro del presupuesto.&lt;/li&gt;
&lt;li&gt;Que la latencia cumpla con tu SLA.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Simula respuestas con forma de Grok para que frontend y agentes puedan desarrollarse contra un endpoint estable sin consumir tokens en cada ejecución de CI.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Esto es especialmente útil para agentes que realizan docenas de llamadas por tarea. Simula rutas felices y errores previsibles en CI; reserva las llamadas reales para pruebas de integración controladas.&lt;/p&gt;

&lt;h2&gt;
  
  
  Errores comunes y soluciones rápidas
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Error&lt;/th&gt;
&lt;th&gt;Causa probable&lt;/th&gt;
&lt;th&gt;Solución&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;401 No autorizado&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Encabezado &lt;code&gt;Authorization&lt;/code&gt; faltante o malformado&lt;/td&gt;
&lt;td&gt;Verifica el prefijo &lt;code&gt;Bearer&lt;/code&gt; y confirma que la variable de entorno existe en el shell actual.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;404 modelo no encontrado&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;ID de modelo incorrecto para el proveedor&lt;/td&gt;
&lt;td&gt;Consulta &lt;code&gt;/v1/models&lt;/code&gt;. Los revendedores usan IDs distintos, como &lt;code&gt;x-ai/grok-4.6&lt;/code&gt; en OpenRouter.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;429 Demasiadas solicitudes&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Límite de tasa o cuota agotada&lt;/td&gt;
&lt;td&gt;Implementa backoff exponencial y revisa el uso en &lt;a href="http://console.x.ai" rel="noopener noreferrer"&gt;console.x.ai&lt;/a&gt;.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Salida truncada&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;max_tokens&lt;/code&gt; es demasiado bajo para la tarea&lt;/td&gt;
&lt;td&gt;Aumenta el límite de salida para tareas largas de agente.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Stream bloqueado&lt;/td&gt;
&lt;td&gt;Buffering del cliente o un proxy elimina SSE&lt;/td&gt;
&lt;td&gt;Confirma &lt;code&gt;stream: true&lt;/code&gt;, desactiva buffering en el proxy y prueba el stream sin procesar en Apidog.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Preguntas frecuentes
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;¿La API de Grok 4.6 es compatible con OpenAI?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Sí. El endpoint de completado de chat acepta la misma forma de solicitud y los SDK oficiales de OpenAI funcionan apuntando &lt;code&gt;base_url&lt;/code&gt; a &lt;code&gt;https://api.x.ai/v1&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;¿Cuánto cuesta la API de Grok 4.6?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Cuesta $2 por millón de tokens de entrada y $6 por millón de tokens de salida. La variante rápida cuesta el doble. No existe un cargo independiente por la ventana de 500K: pagas por los tokens enviados.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;¿Necesito una integración nueva si uso Grok 4.5?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
No. Cambia el nombre del modelo. El formato de solicitud, la autenticación y los endpoints no han cambiado desde &lt;a href="https://apidog.com/es/blog/what-is-grok-4-5?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Grok 4.5&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;¿Puedo usar Grok 4.6 sin una cuenta de xAI?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Sí. Puedes acceder mediante OpenRouter, Vercel AI Gateway o Cloudflare, cada uno con su propio modelo de facturación. La API nativa suele ser la opción más económica a gran volumen.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>¿Qué es Grok 4.6? Características, Rendimiento, Precios y Acceso a la API Explicados</title>
      <dc:creator>Roobia</dc:creator>
      <pubDate>Thu, 13 Aug 2026 03:12:42 +0000</pubDate>
      <link>https://dev.to/roobia/que-es-grok-46-caracteristicas-rendimiento-precios-y-acceso-a-la-api-explicados-3in9</link>
      <guid>https://dev.to/roobia/que-es-grok-46-caracteristicas-rendimiento-precios-y-acceso-a-la-api-explicados-3in9</guid>
      <description>&lt;p&gt;Grok 4.6 es el modelo de lenguaje de frontera de xAI, lanzado el 12 de agosto de 2026. Se basa en Grok 4.5 con un enfoque en agentes de larga duración, codificación agéntica y trabajo interactivo o visual. Ofrece una ventana de contexto de 500,000 tokens, con un precio de $2 por millón de tokens de entrada y $6 por millón de salida. En el Índice de Inteligencia de Artificial Analysis obtiene una puntuación de 61, igualando a GPT-5.6 Sol de OpenAI y quedando un punto por debajo de Claude Fable 5 de Anthropic.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://apidog.com/?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation" class="crayons-btn crayons-btn--primary"&gt;Prueba Apidog hoy&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;En esta guía verás qué cambió respecto a Grok 4.5, cómo interpretar sus benchmarks, dónde usarlo y cómo evaluarlo si construyes integraciones con APIs de LLM. Si trabajas con esa última parte, &lt;a href="https://apidog.com?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Apidog&lt;/a&gt; ofrece un espacio de trabajo gratuito para diseñar, probar y simular llamadas a APIs de LLM antes de escribir un cliente.&lt;/p&gt;

&lt;h2&gt;
  
  
  En resumen
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Lanzamiento:&lt;/strong&gt; 12 de agosto de 2026, por xAI.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Enfoque:&lt;/strong&gt; agentes de largo horizonte, codificación multi-paso y trabajo interactivo o visual. xAI indica que el modelo se auto-prueba y verifica su trabajo con mayor frecuencia antes de continuar.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Especificaciones:&lt;/strong&gt; ventana de contexto de 500K y fecha límite de conocimiento del 1 de febrero de 2026.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Precios:&lt;/strong&gt; $2 / 1M de tokens de entrada y $6 / 1M de salida. La variante rápida cuesta el doble. La primera semana incluye el doble de uso en Grok Build y Cursor.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Benchmarks:&lt;/strong&gt; Índice de Inteligencia 61, empatado con GPT-5.6 Sol; mejoras frente a 4.5 en DeepSWE (54 → 65.9) y APEX-Agents (47.1 → 57.5).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Disponibilidad:&lt;/strong&gt; API de xAI, Grok Build, Cursor, OpenRouter, Vercel y Cloudflare.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Grok 4.6 de un vistazo
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Especificación&lt;/th&gt;
&lt;th&gt;Grok 4.6&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Desarrollador&lt;/td&gt;
&lt;td&gt;xAI&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Fecha de lanzamiento&lt;/td&gt;
&lt;td&gt;12 de agosto de 2026&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Ventana de contexto&lt;/td&gt;
&lt;td&gt;500,000 tokens&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Fecha límite de conocimiento&lt;/td&gt;
&lt;td&gt;1 de febrero de 2026&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Precio de entrada / salida&lt;/td&gt;
&lt;td&gt;$2 / $6 por 1M de tokens&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Variante rápida&lt;/td&gt;
&lt;td&gt;2x el precio&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Índice de Inteligencia&lt;/td&gt;
&lt;td&gt;61 (GPT-5.6 Sol: 61, Claude Fable 5: 62)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Disponibilidad&lt;/td&gt;
&lt;td&gt;API de xAI, Cursor, Grok Build, OpenRouter, Vercel, Cloudflare&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Qué hay de nuevo frente a Grok 4.5
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://x.ai/news/grok-4-6" rel="noopener noreferrer"&gt;Grok 4.6&lt;/a&gt; no representa una revelación arquitectónica: el cambio principal está en el entrenamiento. Según xAI, el modelo pasó por una fase de entrenamiento suplementario más larga que &lt;a href="https://apidog.com/es/blog/what-is-grok-4-5?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Grok 4.5&lt;/a&gt;, basada en tres componentes:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Datos curados y generados por modelos, orientados al razonamiento y a conceptos técnicos avanzados.&lt;/li&gt;
&lt;li&gt;Conjuntos de datos de ingeniería de alta calidad, continuando el enfoque intensivo en codificación iniciado con sesiones reales de desarrollo.&lt;/li&gt;
&lt;li&gt;Un optimizador y una receta de entrenamiento mejorados, con trayectorias de ajuste fino supervisado regeneradas para razonamiento y dominios específicos.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;El cambio más visible para desarrolladores es la &lt;strong&gt;auto-verificación&lt;/strong&gt;. Durante ejecuciones agénticas largas, Grok 4.6 puede comprobar su trabajo antes de continuar: ejecutar la prueba que acaba de escribir, releer el archivo que editó o validar una suposición antes de encadenar el siguiente paso.&lt;/p&gt;

&lt;p&gt;xAI también informa de mejores resultados iniciales en proyectos interactivos y visuales, como paneles, aplicaciones pequeñas y tareas de interfaz de usuario.&lt;/p&gt;

&lt;p&gt;Si te interesa el enfoque de entrenamiento de la versión anterior, consulta nuestro análisis sobre &lt;a href="https://apidog.com/es/blog/grok-4-5-cursor-training-data?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;lo que significó el entrenamiento con sesiones de Cursor para los desarrolladores&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Benchmarks: qué números importan
&lt;/h2&gt;

&lt;p&gt;Los benchmarks de lanzamiento reportados por proveedores requieren cautela, pero las mejoras entre Grok 4.5 y 4.6 son suficientemente grandes como para justificar una evaluación práctica.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fpc5i3qentcks08539vot.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fpc5i3qentcks08539vot.png" alt="Gráfico comparativo de benchmarks" width="800" height="713"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Estas son las tres conclusiones principales:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;La brecha en agentes se redujo.&lt;/strong&gt; El aumento de 10.4 puntos en APEX-Agents deja a Grok 4.6 a 1.7 puntos de Fable 5 Max y ligeramente por delante de GPT-5.6 Sol Max (56.7%).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;La codificación a escala de repositorio mejoró más.&lt;/strong&gt; El incremento de casi 12 puntos en DeepSWE indica una mejora importante en cambios que abarcan varios archivos, aunque Sol Max sigue liderando ese benchmark.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Las mediciones independientes apoyan la narrativa de coste.&lt;/strong&gt; Artificial Analysis registró un coste promedio de $0.84 por tarea en evaluaciones agénticas, el más bajo entre modelos de frontera, y un Elo de 1753 en GDPval-AA v2 para trabajo de conocimiento profesional.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Para interpretar los resultados de xAI con más contexto, consulta nuestro &lt;a href="https://apidog.com/es/blog/grok-4-5-benchmarks?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;análisis de benchmarks de Grok 4.5&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Precios: una propuesta de valor en la frontera
&lt;/h2&gt;

&lt;p&gt;Grok 4.6 mantiene el precio de Grok 4.5:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Entrada:&lt;/strong&gt; $2 por 1M de tokens.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Salida:&lt;/strong&gt; $6 por 1M de tokens.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Comparado con otros modelos de frontera:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Modelo&lt;/th&gt;
&lt;th&gt;Precio de salida / 1M de tokens&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Grok 4.6&lt;/td&gt;
&lt;td&gt;$6&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Claude Opus 4.8&lt;/td&gt;
&lt;td&gt;$25&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GPT-5.6 Sol&lt;/td&gt;
&lt;td&gt;$30&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Esto supone una diferencia de 5x en tokens de salida frente a GPT-5.6 Sol para un modelo que lo iguala en el índice compuesto de inteligencia.&lt;/p&gt;

&lt;p&gt;Sin embargo, tokens baratos no implican automáticamente tareas más baratas. Si un modelo requiere más revisiones, reintentos o reparaciones, el coste total puede crecer. Por eso debes medir el coste por tarea sobre tus propios flujos, no solo el precio por token.&lt;/p&gt;

&lt;p&gt;La variante rápida cuesta el doble, $4/$12 por 1M de tokens, y está orientada a casos interactivos sensibles a la latencia. Hasta el 19 de agosto, Grok Build y Cursor incluyen el doble de uso para probar el modelo.&lt;/p&gt;

&lt;h2&gt;
  
  
  Dónde puedes usar Grok 4.6 hoy
&lt;/h2&gt;

&lt;p&gt;Puedes evaluar Grok 4.6 desde estas plataformas:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;API de xAI&lt;/strong&gt;, a través de &lt;a href="https://console.x.ai" rel="noopener noreferrer"&gt;console.x.ai&lt;/a&gt;, con compatibilidad con OpenAI. La &lt;a href="https://apidog.com/es/blog/grok-4-5-api?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;guía de la API de Grok 4.5&lt;/a&gt; se aplica directamente; solo debes cambiar el nombre del modelo.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cursor&lt;/strong&gt;, como opción de modelo dentro del IDE.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Grok Build&lt;/strong&gt;, el espacio de trabajo agéntico de xAI, con el bono de uso doble durante la semana de lanzamiento.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;OpenRouter, Vercel y Cloudflare&lt;/strong&gt;, para equipos que enrutan varios modelos mediante una única puerta de enlace. En OpenRouter aparece como &lt;code&gt;x-ai/grok-4.6&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;No hay un lanzamiento de consumo separado que debas distinguir: esta versión está orientada principalmente a desarrolladores. La forma más rápida de evaluarla es mediante la API o desde un IDE que ya la integre.&lt;/p&gt;

&lt;h2&gt;
  
  
  Cómo probar Grok 4.6 con una API compatible con OpenAI
&lt;/h2&gt;

&lt;p&gt;La compatibilidad con OpenAI permite reutilizar gran parte de un cliente existente. Cambia el endpoint a:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;https://api.x.ai/v1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Después, ejecuta las mismas pruebas que ya usas con otros proveedores:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Envía una tarea representativa de producción.&lt;/li&gt;
&lt;li&gt;Registra latencia, tokens de entrada y salida, errores y reintentos.&lt;/li&gt;
&lt;li&gt;Evalúa la calidad de la respuesta con criterios verificables.&lt;/li&gt;
&lt;li&gt;Repite la prueba con GPT, Claude y Grok usando el mismo prompt y las mismas herramientas.&lt;/li&gt;
&lt;li&gt;Compara coste por tarea completada, no solo coste por token.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Para cargas de trabajo agénticas, incluye pruebas que cubran:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Edición de múltiples archivos.&lt;/li&gt;
&lt;li&gt;Ejecución y reparación de pruebas.&lt;/li&gt;
&lt;li&gt;Llamadas a herramientas o funciones.&lt;/li&gt;
&lt;li&gt;Manejo de errores de herramientas.&lt;/li&gt;
&lt;li&gt;Tareas largas con estado acumulado.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Limitaciones y preguntas abiertas
&lt;/h2&gt;

&lt;p&gt;Una evaluación de la semana de lanzamiento debe incluir las advertencias junto a los resultados principales:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;La mayoría de benchmarks son reportados por el proveedor.&lt;/strong&gt; Artificial Analysis publicó puntuaciones independientes que concuerdan en términos generales, pero los resultados específicos de codificación, como DeepSWE, FrontierCode y CursorBench, proceden de la tabla de lanzamiento de xAI.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;La ventana de contexto es menor que otras opciones de frontera.&lt;/strong&gt; Los 500K tokens cubren muchas cargas de trabajo reales, pero GPT-5.6 Sol ofrece 1.05M y Claude Fable 5 ofrece 1M. La diferencia importa si procesas monorepos completos o conjuntos documentales muy grandes en una llamada.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Sol sigue liderando en codificación autónoma de repositorios grandes.&lt;/strong&gt; La diferencia de 7 puntos en DeepSWE sugiere que GPT-5.6 Sol Max sigue siendo más fuerte para trabajo completamente autónomo sobre bases de código existentes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;El ecosistema de xAI es más joven.&lt;/strong&gt; El procesamiento por lotes, los niveles de caché de prompts y los controles de uso todavía tienen menos madurez que sus equivalentes en OpenAI y Anthropic. La compatibilidad con OpenAI cubre gran parte de los casos, pero no todos.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Estas limitaciones no descartan a Grok 4.6. Definen mejor su posición: una opción competitiva de precio-rendimiento que debes evaluar con tus tareas reales.&lt;/p&gt;

&lt;h2&gt;
  
  
  Qué significa para los desarrolladores de API
&lt;/h2&gt;

&lt;p&gt;La conclusión estratégica es clara: la frontera tiene ahora un competidor de precio real. Hasta este lanzamiento, igualar resultados de nivel GPT-5.6 Sol implicaba pagar entre $25 y $30 por millón de tokens de salida. Grok 4.6 anuncia ese precio en $6.&lt;/p&gt;

&lt;p&gt;La diferencia es especialmente relevante en bucles agénticos. Un agente que realiza 40 llamadas por tarea percibe de inmediato una diferencia de 5x en el coste de salida.&lt;/p&gt;

&lt;p&gt;En la práctica, la API compatible con OpenAI permite evaluarlo en una tarde:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Apunta tu cliente existente a &lt;code&gt;https://api.x.ai/v1&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Ejecuta una carga de trabajo real.&lt;/li&gt;
&lt;li&gt;Mide calidad, latencia, uso de tokens, errores y coste por tarea.&lt;/li&gt;
&lt;li&gt;Compara los resultados con tus modelos actuales.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Puedes configurar esta comparación en &lt;a href="https://apidog.com/download?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Apidog&lt;/a&gt; para mantener solicitudes de GPT-5.6, Claude y Grok 4.6 en un único proyecto. Usa entornos por proveedor y añade aserciones para validar calidad de salida, uso de tokens y latencia antes de mover una carga de trabajo a producción.&lt;/p&gt;

&lt;p&gt;El enfoque de Grok 4.6 en agentes también hace más importante validar las llamadas a herramientas. Si tu integración usa function calling, prueba las cargas útiles estructuradas que genera el modelo, no solo el texto de la respuesta.&lt;/p&gt;

&lt;h2&gt;
  
  
  Preguntas frecuentes
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;¿Qué es Grok 4.6 en una frase?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Es el modelo de frontera de xAI de agosto de 2026, optimizado para agentes de larga duración y codificación, con una ventana de contexto de 500K y benchmarks de nivel de frontera a aproximadamente una quinta parte del precio de salida de algunos competidores.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;¿Es Grok 4.6 mejor que GPT-5.6?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Empatan en el Índice de Inteligencia de Artificial Analysis con 61 puntos. GPT-5.6 Sol Max lidera en codificación a escala de repositorio mediante DeepSWE; Grok 4.6 supera ligeramente en APEX-Agents y cuesta aproximadamente 5 veces menos por token de salida.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;¿Cuál es la diferencia entre Grok 4.5 y Grok 4.6?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Mantienen el mismo precio y la misma API, pero Grok 4.6 obtiene mejoras de +11.9 puntos en DeepSWE y +10.4 en APEX-Agents, además de una mayor tendencia a auto-verificarse durante tareas largas.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;¿Puedo probar Grok 4.6 gratis?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Grok Build y Cursor incluyen el doble de uso durante la semana de lanzamiento. Los métodos de nuestra &lt;a href="https://apidog.com/es/blog/use-grok-4-5-free?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;guía para usar Grok 4.5 gratis&lt;/a&gt; se aplican en gran medida a Grok 4.6.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Tu API Elimina Metadatos C2PA: Cómo Detectarlo con una Prueba</title>
      <dc:creator>Roobia</dc:creator>
      <pubDate>Wed, 12 Aug 2026 06:59:26 +0000</pubDate>
      <link>https://dev.to/roobia/tu-api-elimina-metadatos-c2pa-como-detectarlo-con-una-prueba-5b32</link>
      <guid>https://dev.to/roobia/tu-api-elimina-metadatos-c2pa-como-detectarlo-con-una-prueba-5b32</guid>
      <description>&lt;p&gt;Claude ahora adjunta metadatos de procedencia C2PA firmados a los archivos que genera. También lo hacen los modelos de imagen de OpenAI, y &lt;a href="https://apidog.com/es/blog/claude-vs-chatgpt-vs-gemini-watermarking?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;también Gemini&lt;/a&gt;. Esto significa que una señal de procedencia real está llegando a su endpoint de carga por primera vez, y hay una buena probabilidad de que su pipeline la esté eliminando antes de que alguien la vea.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://apidog.com/?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation" class="crayons-btn crayons-btn--primary"&gt;Pruebe Apidog hoy&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;No de forma maliciosa: ocurre por defecto. &lt;code&gt;sharp().resize()&lt;/code&gt; genera un archivo limpio sin metadatos, salvo que indique lo contrario. Lo mismo sucede con ImageMagick, Pillow y la mayoría de los CDN de imágenes. El manifiesto entra, sale un JPEG más pequeño y sus registros no informan nada.&lt;/p&gt;

&lt;p&gt;Este es un fallo comprobable. En este artículo verá cómo identificar dónde se pierden los metadatos, cómo probar su pipeline de extremo a extremo y cómo añadir una verificación permanente en CI. Apidog orquesta el flujo HTTP; &lt;code&gt;c2patool&lt;/code&gt; verifica el archivo a nivel de bytes.&lt;/p&gt;

&lt;h2&gt;
  
  
  Qué se destruye realmente
&lt;/h2&gt;

&lt;p&gt;Un manifiesto &lt;a href="https://c2pa.org/" rel="noopener noreferrer"&gt;C2PA&lt;/a&gt; es un bloque firmado criptográficamente e incrustado en el contenedor del archivo. Registra quién firmó el activo y qué se afirmó sobre él. Como está firmado, cambiar los bytes sin volver a firmar invalida la firma de una forma detectable por cualquier verificador.&lt;/p&gt;

&lt;p&gt;La clave está en el contenedor: si lo reescribe, el manifiesto puede desaparecer.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Operación&lt;/th&gt;
&lt;th&gt;¿El manifiesto sobrevive por defecto?&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Copia o movimiento byte a byte&lt;/td&gt;
&lt;td&gt;Sí&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;sharp().resize().toBuffer()&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ImageMagick &lt;code&gt;convert&lt;/code&gt; / &lt;code&gt;magick&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Pillow &lt;code&gt;Image.save()&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PNG a WebP, JPEG a AVIF&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Autooptimización de CDN de imágenes&lt;/td&gt;
&lt;td&gt;Usualmente no&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Captura de pantalla&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Volver a guardar desde un editor de imágenes&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Subida a S3 sin transformación&lt;/td&gt;
&lt;td&gt;Sí&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Todo lo que aparece como “No” es habitual en una aplicación web: miniaturas, variantes responsivas, negociación de formato o limpieza de EXIF por privacidad. Cada operación es razonable de forma aislada, pero puede terminar silenciosamente la cadena de procedencia.&lt;/p&gt;

&lt;p&gt;También hay un conflicto práctico: &lt;code&gt;-strip&lt;/code&gt; suele utilizarse para eliminar coordenadas GPS y números de serie de cámaras presentes en EXIF. Sin embargo, eliminar todos los metadatos también elimina el manifiesto C2PA. La solución es eliminar de forma selectiva los bloques que no quiere conservar, en lugar de borrar todos los metadatos.&lt;/p&gt;

&lt;h2&gt;
  
  
  Pruébelo en dos minutos
&lt;/h2&gt;

&lt;p&gt;Antes de cambiar el pipeline, confirme el problema. Necesita un archivo con un manifiesto válido: puede usar una imagen generada por Claude o una muestra firmada de la Content Authenticity Initiative.&lt;/p&gt;

&lt;p&gt;Instale la CLI de referencia:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;cargo &lt;span class="nb"&gt;install &lt;/span&gt;c2patool
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Compruebe que el fixture está firmado:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;c2patool fixtures/signed-sample.png
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Debería recibir un informe JSON con el generador de la reclamación y el estado de validación de la firma.&lt;/p&gt;

&lt;p&gt;Ahora envíe el archivo por su pipeline real y recupérelo usando la misma URL que consume su frontend:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Subir a través de su endpoint real&lt;/span&gt;
curl &lt;span class="nt"&gt;-sS&lt;/span&gt; &lt;span class="nt"&gt;-X&lt;/span&gt; POST https://api.example.com/v1/assets &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Authorization: Bearer &lt;/span&gt;&lt;span class="nv"&gt;$API_TOKEN&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-F&lt;/span&gt; &lt;span class="s2"&gt;"file=@fixtures/signed-sample.png"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-o&lt;/span&gt; /tmp/upload.json

&lt;span class="c"&gt;# Recuperarlo a través de la URL que usaría su frontend&lt;/span&gt;
&lt;span class="nv"&gt;ASSET_URL&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;jq &lt;span class="nt"&gt;-r&lt;/span&gt; &lt;span class="s1"&gt;'.url'&lt;/span&gt; /tmp/upload.json&lt;span class="si"&gt;)&lt;/span&gt;
curl &lt;span class="nt"&gt;-sS&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$ASSET_URL&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="nt"&gt;-o&lt;/span&gt; /tmp/roundtrip.png

&lt;span class="c"&gt;# ¿Sobrevivió el manifiesto?&lt;/span&gt;
c2patool /tmp/roundtrip.png
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Interprete el resultado:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Informe válido:&lt;/strong&gt; el manifiesto sobrevivió.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Manifiesto no encontrado:&lt;/strong&gt; alguna etapa del pipeline lo eliminó.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Error de validación:&lt;/strong&gt; el manifiesto existe, pero la firma ya no coincide con los bytes.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;El tercer caso es especialmente importante. Normalmente indica que una biblioteca preservó el bloque de metadatos mientras modificaba los píxeles. Para cualquier verificador posterior, eso parece una alteración del archivo.&lt;/p&gt;

&lt;h2&gt;
  
  
  Encuentre la etapa que lo elimina
&lt;/h2&gt;

&lt;p&gt;Si la prueba de extremo a extremo falla, no adivine. Divida el pipeline y ejecute &lt;code&gt;c2patool&lt;/code&gt; inmediatamente después de cada etapa:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Después de recibir la carga.&lt;/li&gt;
&lt;li&gt;Después del redimensionamiento.&lt;/li&gt;
&lt;li&gt;Después de convertir el formato.&lt;/li&gt;
&lt;li&gt;Después de almacenar en el origen.&lt;/li&gt;
&lt;li&gt;Después de recuperar desde el CDN.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Los sospechosos habituales son los siguientes.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Redimensionamiento o generación de miniaturas
&lt;/h3&gt;

&lt;p&gt;Es el caso más probable. En &lt;code&gt;sharp&lt;/code&gt;, los metadatos se eliminan salvo que los conserve explícitamente:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Elimina el manifiesto C2PA&lt;/span&gt;
&lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;sharp&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;input&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;resize&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1200&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;toFile&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;output&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;// Conserva el bloque de metadatos&lt;/span&gt;
&lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;sharp&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;input&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;resize&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1200&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;keepMetadata&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;toFile&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;output&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Conservar el bloque es necesario, pero no suficiente. Los píxeles cambiaron, por lo que la firma original ya no será válida para los bytes nuevos.&lt;/p&gt;

&lt;p&gt;Para mantener una cadena de procedencia funcional:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Conserve los metadatos necesarios.&lt;/li&gt;
&lt;li&gt;Aplique la transformación.&lt;/li&gt;
&lt;li&gt;Vuelva a firmar la salida.&lt;/li&gt;
&lt;li&gt;Registre la transformación como una aserción de acción, normalmente &lt;code&gt;c2pa.resized&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Las bibliotecas &lt;code&gt;c2pa&lt;/code&gt; para Rust, Python, JavaScript y C permiten implementar este flujo.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Conversión de formato
&lt;/h3&gt;

&lt;p&gt;Servir AVIF o WebP crea un contenedor nuevo. La regla es la misma: preserve y vuelva a firmar, o acepte explícitamente que la cadena de procedencia termina en esa transformación.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. CDN de imágenes
&lt;/h3&gt;

&lt;p&gt;Muchos CDN reescriben imágenes en el momento de la entrega. Algunos preservan y vuelven a firmar Credenciales de Contenido de forma nativa; históricamente, la mayoría las eliminaban.&lt;/p&gt;

&lt;p&gt;Pruebe siempre la URL de entrega real que visitan sus usuarios, no solo el archivo de origen. Una prueba contra el origen puede pasar aunque el CDN elimine el manifiesto.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Normalización durante la carga
&lt;/h3&gt;

&lt;p&gt;Los servicios que recodifican archivos al recibirlos para estandarizar formatos suelen pasar desapercibidos. Con frecuencia, esta lógica vive en un repositorio de infraestructura separado del backend principal.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conviértalo en una prueba permanente
&lt;/h2&gt;

&lt;p&gt;Un único &lt;code&gt;curl&lt;/code&gt; valida el estado actual, pero no evita que alguien introduzca una transformación en el próximo sprint. La verificación debe formar parte de CI.&lt;/p&gt;

&lt;p&gt;Divida la prueba en dos capas:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Orquestación HTTP de ida y vuelta.&lt;/li&gt;
&lt;li&gt;Verificación criptográfica del archivo recuperado.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Capa uno: viaje de ida y vuelta en Apidog
&lt;/h3&gt;

&lt;p&gt;La orquestación es un escenario de API encadenado:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Subir un fixture firmado.&lt;/li&gt;
&lt;li&gt;Extraer la URL devuelta.&lt;/li&gt;
&lt;li&gt;Recuperar el activo por la ruta de entrega real.&lt;/li&gt;
&lt;li&gt;Comprobar estado, tipo de contenido y tamaño.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;En Apidog, cree un escenario con dos pasos.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Paso 1: &lt;code&gt;POST /v1/assets&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Cuerpo: &lt;code&gt;multipart/form-data&lt;/code&gt; con el fixture firmado.&lt;/li&gt;
&lt;li&gt;Aserciones: estado &lt;code&gt;201&lt;/code&gt; y respuesta válida según su esquema.&lt;/li&gt;
&lt;li&gt;Script posrespuesta para guardar la URL:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;body&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;pm&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

&lt;span class="nx"&gt;pm&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;environment&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;set&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;ASSET_URL&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;body&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;url&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="nx"&gt;pm&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;test&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;upload returns a delivery URL&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nf"&gt;function &lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;pm&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;expect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;body&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;url&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;to&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;be&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;a&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;string&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;and&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;to&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;include&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;https://&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;La mecánica de carga es la misma que en &lt;a href="https://apidog.com/es/blog/how-to-test-file-upload-apis-apidog?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;la prueba de APIs de carga de archivos&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Paso 2: &lt;code&gt;GET {{ASSET_URL}}&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Aserciones: estado &lt;code&gt;200&lt;/code&gt;, &lt;code&gt;Content-Type&lt;/code&gt; esperado y tamaño de respuesta cercano al archivo original.&lt;/li&gt;
&lt;li&gt;Una caída importante de tamaño es una señal útil de recodificación.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;uploadedBytes&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Number&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;pm&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;environment&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;FIXTURE_BYTES&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;returnedBytes&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;pm&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;responseSize&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="nx"&gt;pm&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;test&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;asset was not silently re-encoded&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nf"&gt;function &lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;pm&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;expect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;returnedBytes&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;to&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;be&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;above&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;uploadedBytes&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mf"&gt;0.9&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;El tamaño es una heurística, no una prueba criptográfica. Es útil para detectar fallos obvios de forma económica dentro de la misma suite HTTP. Consulte más patrones en &lt;a href="https://apidog.com/es/blog/api-assertions?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;aserción de APIs&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Capa dos: verificación a nivel de bytes en CI
&lt;/h3&gt;

&lt;p&gt;Validar una firma exige analizar el contenedor del archivo. Ese trabajo corresponde a &lt;code&gt;c2patool&lt;/code&gt;, no a un cliente HTTP.&lt;/p&gt;

&lt;p&gt;Ejecute &lt;code&gt;c2patool&lt;/code&gt; contra el archivo descargado por el escenario de ida y vuelta:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="c1"&gt;# .github/workflows/provenance.yml&lt;/span&gt;
&lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;provenance&lt;/span&gt;

&lt;span class="na"&gt;on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;pull_request&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;

&lt;span class="na"&gt;jobs&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;c2pa-round-trip&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;runs-on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;ubuntu-latest&lt;/span&gt;

    &lt;span class="na"&gt;steps&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;uses&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;actions/checkout@v4&lt;/span&gt;

      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Instalar c2patool&lt;/span&gt;
        &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;cargo install c2patool&lt;/span&gt;

      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Instalar Apidog CLI&lt;/span&gt;
        &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;npm install -g apidog-cli&lt;/span&gt;

      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Ejecutar el escenario de ida y vuelta&lt;/span&gt;
        &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;|&lt;/span&gt;
          &lt;span class="s"&gt;apidog run --access-token "$APIDOG_ACCESS_TOKEN" \&lt;/span&gt;
            &lt;span class="s"&gt;-t "$SCENARIO_ID" \&lt;/span&gt;
            &lt;span class="s"&gt;-e "$ENV_ID" \&lt;/span&gt;
            &lt;span class="s"&gt;-r cli,html \&lt;/span&gt;
            &lt;span class="s"&gt;--out-dir ./apidog-reports&lt;/span&gt;
        &lt;span class="na"&gt;env&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
          &lt;span class="na"&gt;APIDOG_ACCESS_TOKEN&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;${{ secrets.APIDOG_ACCESS_TOKEN }}&lt;/span&gt;
          &lt;span class="na"&gt;SCENARIO_ID&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;${{ vars.PROVENANCE_SCENARIO_ID }}&lt;/span&gt;
          &lt;span class="na"&gt;ENV_ID&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;${{ vars.APIDOG_ENV_ID }}&lt;/span&gt;

      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Verificar que el manifiesto sobrevivió&lt;/span&gt;
        &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;|&lt;/span&gt;
          &lt;span class="s"&gt;set -euo pipefail&lt;/span&gt;
          &lt;span class="s"&gt;curl -sS "$ASSET_URL" -o /tmp/roundtrip.png&lt;/span&gt;
          &lt;span class="s"&gt;c2patool /tmp/roundtrip.png &amp;gt; /tmp/report.json&lt;/span&gt;
          &lt;span class="s"&gt;jq -e '.validation_status == null or (.validation_status | length) == 0' /tmp/report.json&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;set -euo pipefail&lt;/code&gt; es importante. Sin esta instrucción, un fallo de &lt;code&gt;c2patool&lt;/code&gt; ante un archivo sin metadatos puede convertirse en una advertencia y dejar la compilación en verde: exactamente el fallo que esta prueba pretende evitar.&lt;/p&gt;

&lt;p&gt;Para configurar escenarios en un pipeline, consulte &lt;a href="https://apidog.com/es/blog/api-test-automation-github-actions?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;la automatización de pruebas de API en GitHub Actions&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Capa tres opcional: endpoint de verificación
&lt;/h3&gt;

&lt;p&gt;Si la procedencia es una característica de producto y no solo un control interno, añada un endpoint propio que ejecute una biblioteca &lt;code&gt;c2pa&lt;/code&gt; y devuelva un resultado estructurado.&lt;/p&gt;

&lt;p&gt;Así puede probarlo como JSON normal y el frontend recibe un estado explícito:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"asset_id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"img_9f2c41"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"provenance"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"status"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"verified"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"standard"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"c2pa"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"signer"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Anthropic"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"signature_valid"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"checked_at"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"2026-08-11T09:14:22Z"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"tool"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"c2patool/0.9"&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Mantenga al menos tres estados:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;verified&lt;/code&gt;: hay un manifiesto y la firma es válida.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;absent&lt;/code&gt;: no se encontró ningún manifiesto.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;invalid&lt;/code&gt;: existe un manifiesto, pero la firma no coincide con los bytes.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;No reduzca &lt;code&gt;absent&lt;/code&gt; e &lt;code&gt;invalid&lt;/code&gt; a un booleano. Representan situaciones distintas y &lt;code&gt;invalid&lt;/code&gt; es una señal mucho más relevante. Si el verificador puede no estar disponible, añada &lt;code&gt;unchecked&lt;/code&gt; para no confundir una interrupción con un resultado limpio.&lt;/p&gt;

&lt;p&gt;Documente esta respuesta en OpenAPI y valídela para evitar que los campos desaparezcan durante una refactorización. Consulte &lt;a href="https://apidog.com/es/blog/validate-openapi-specs?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Cómo validar especificaciones OpenAPI&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Los cuatro fixtures que debe conservar
&lt;/h2&gt;

&lt;p&gt;Una suite de procedencia necesita casos deliberadamente defectuosos, no solo un camino feliz.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Archivo firmado válido&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Resultado esperado: &lt;code&gt;verified&lt;/code&gt;. Detecta eliminación excesiva de metadatos.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Archivo sin metadatos&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Use la misma imagen, pero elimine el manifiesto con &lt;code&gt;exiftool -all=&lt;/code&gt;.&lt;br&gt;&lt;br&gt;
Resultado esperado: &lt;code&gt;absent&lt;/code&gt;, no un error y nunca &lt;code&gt;verified&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Archivo manipulado&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Use un archivo firmado y altere un byte después de la firma.&lt;br&gt;&lt;br&gt;
Resultado esperado: &lt;code&gt;invalid&lt;/code&gt;. Este caso demuestra que valida la firma y no solo la existencia de un bloque de metadatos.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Formato no compatible&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Use un formato sin soporte de manifiestos.&lt;br&gt;&lt;br&gt;
Resultado esperado: &lt;code&gt;absent&lt;/code&gt; de forma limpia, no un error &lt;code&gt;500&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Guarde los cuatro fixtures en el repositorio junto al escenario de prueba. Son pequeños, no deberían cambiar y convierten una prueba que “pasa” en una prueba que realmente valida el comportamiento esperado.&lt;/p&gt;

&lt;h2&gt;
  
  
  Por qué merece la pena
&lt;/h2&gt;

&lt;p&gt;Hay tres motivos principales.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;La afirmación de su producto.&lt;/strong&gt; Si su interfaz muestra un distintivo de procedencia, pero el pipeline elimina manifiestos durante el redimensionamiento, ese distintivo será incorrecto para todos los activos transformados.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Cumplimiento.&lt;/strong&gt; Si depende de C2PA para requisitos relacionados con el Artículo 50, un manifiesto eliminado significa que su control no funciona. La separación entre proveedor y desplegador se explica en &lt;a href="https://apidog.com/es/blog/eu-ai-act-article-50-api-developers?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;el Artículo 50 de la Ley de IA de la UE para desarrolladores de API&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;La señal de procedencia.&lt;/strong&gt; C2PA solo aporta valor cuando la cadena se mantiene de extremo a extremo. Cada pipeline que elimina manifiestos silenciosamente reduce la utilidad del ecosistema, incluso cuando necesita verificar un activo usted mismo.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://apidog.com/download?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Descargue Apidog&lt;/a&gt; para crear el escenario de ida y vuelta contra sus endpoints y añada después la verificación con &lt;code&gt;c2patool&lt;/code&gt; en CI.&lt;/p&gt;

&lt;h2&gt;
  
  
  Preguntas frecuentes
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;¿El redimensionamiento de una imagen elimina los metadatos C2PA?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Sí, por defecto en las bibliotecas más comunes. Conservar el bloque requiere una opción explícita y mantener una firma válida requiere volver a firmar la salida transformada.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;¿Cómo verifico si un archivo tiene metadatos C2PA?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Ejecute &lt;code&gt;c2patool &amp;lt;file&amp;gt;&lt;/code&gt; desde la línea de comandos o arrastre el archivo a la &lt;a href="https://contentcredentials.org/verify" rel="noopener noreferrer"&gt;página de verificación de Content Credentials&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;¿Puedo mantener los metadatos C2PA al redimensionar?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Sí, pero no basta con conservarlos. Debe preservar el bloque, volver a firmar la salida y registrar la transformación mediante una aserción de acción como &lt;code&gt;c2pa.resized&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;¿Los CDN eliminan las Credenciales de Contenido?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Muchos las eliminan cuando autooptimizan imágenes. Algunos las preservan y vuelven a firmar de forma nativa. Pruebe la URL de entrega real, no solo el origen.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;¿Cuál es la diferencia entre un manifiesto eliminado y uno inválido?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
&lt;code&gt;absent&lt;/code&gt; significa que no hay manifiesto. &lt;code&gt;invalid&lt;/code&gt; significa que existe, pero su firma no coincide con los bytes, lo que indica que el archivo cambió después de firmarse.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;¿Puede Apidog verificar directamente una firma C2PA?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Apidog orquesta el viaje de ida y vuelta y puede validar respuestas HTTP o JSON de un endpoint de verificación. El análisis criptográfico de la firma corresponde a &lt;code&gt;c2patool&lt;/code&gt;, ejecutado en CI o dentro de su propio servicio.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;¿Debo eliminar EXIF por privacidad y conservar C2PA?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Sí. El enfoque correcto es selectivo: elimine los bloques EXIF específicos que no desea conservar y mantenga el manifiesto C2PA. Un &lt;code&gt;-strip&lt;/code&gt; general elimina ambos.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  La conclusión
&lt;/h2&gt;

&lt;p&gt;Los metadatos de procedencia suelen llegar intactos a su API y perderse durante una transformación posterior sin que sus métricas lo detecten.&lt;/p&gt;

&lt;p&gt;La implementación mínima es clara:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Añada un fixture firmado.&lt;/li&gt;
&lt;li&gt;Súbalo por su endpoint real.&lt;/li&gt;
&lt;li&gt;Descárguelo desde la URL de entrega real.&lt;/li&gt;
&lt;li&gt;Verifíquelo con &lt;code&gt;c2patool&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Haga fallar CI cuando el manifiesto esté ausente o sea inválido.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Con una configuración breve, convierte un distintivo de procedencia en su interfaz en una garantía que su pipeline aplica de verdad.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Apidog CLI: El cliente API en tu terminal</title>
      <dc:creator>Roobia</dc:creator>
      <pubDate>Wed, 12 Aug 2026 06:41:15 +0000</pubDate>
      <link>https://dev.to/roobia/apidog-cli-el-cliente-api-en-tu-terminal-2d8f</link>
      <guid>https://dev.to/roobia/apidog-cli-el-cliente-api-en-tu-terminal-2d8f</guid>
      <description>&lt;p&gt;Tu espacio de trabajo API vive en una GUI, pero tu jornada laboral ocurre en una terminal. Cada cambio de contexto cuesta tiempo y concentración; en CI o durante una sesión con un agente de IA, la GUI ni siquiera es una opción. La CLI de Apidog lleva toda la plataforma &lt;a href="https://apidog.com/?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Apidog&lt;/a&gt;—pruebas, endpoints, esquemas, entornos, mocks y documentación—al prompt de shell que ya utilizas.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://apidog.com/?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation" class="crayons-btn crayons-btn--primary"&gt;Prueba Apidog hoy&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;La CLI de Apidog no es otro &lt;code&gt;curl&lt;/code&gt;. Para lanzar un GET puntual y revisar el JSON, &lt;code&gt;curl&lt;/code&gt; y HTTPie son suficientes; la recopilación de &lt;a href="https://apidog.com/es/blog/best-terminal-tui-rest-api-clients?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;clientes REST de terminal y TUI&lt;/a&gt; cubre ese caso. La CLI de Apidog está pensada para trabajar con tu espacio de trabajo API: ejecuta escenarios de prueba, lee y actualiza el contrato API y mueve especificaciones dentro y fuera del proyecto mediante comandos que puede invocar un script o un agente.&lt;/p&gt;

&lt;h2&gt;
  
  
  Qué significa “reside en tu terminal”
&lt;/h2&gt;

&lt;p&gt;Las herramientas HTTP de terminal gestionan una solicitud cada vez. La CLI de Apidog opera a nivel de proyecto y agrupa sus más de cuarenta comandos en cinco áreas:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Tarea&lt;/th&gt;
&lt;th&gt;Comandos&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Ejecutar pruebas&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;run&lt;/code&gt;, &lt;code&gt;test-scenario&lt;/code&gt;, &lt;code&gt;test-suite&lt;/code&gt;, &lt;code&gt;test-case&lt;/code&gt;, &lt;code&gt;test-data&lt;/code&gt;, &lt;code&gt;test-report&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Gestionar el contrato&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;endpoint&lt;/code&gt;, &lt;code&gt;schema&lt;/code&gt;, &lt;code&gt;folder&lt;/code&gt;, &lt;code&gt;common-parameter&lt;/code&gt;, &lt;code&gt;response-component&lt;/code&gt;, &lt;code&gt;security-scheme&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Publicar documentación y mocks&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;doc&lt;/code&gt;, &lt;code&gt;docs-site&lt;/code&gt;, &lt;code&gt;shared-doc&lt;/code&gt;, &lt;code&gt;mock&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Configurar e integrar&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;environment&lt;/code&gt;, &lt;code&gt;variables&lt;/code&gt;, &lt;code&gt;vault&lt;/code&gt;, &lt;code&gt;database-connection&lt;/code&gt;, &lt;code&gt;websocket&lt;/code&gt;, &lt;code&gt;socketio&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Operar en equipo&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;branch&lt;/code&gt;, &lt;code&gt;merge-request&lt;/code&gt;, &lt;code&gt;runner&lt;/code&gt;, &lt;code&gt;scheduled-task&lt;/code&gt;, &lt;code&gt;audit-log&lt;/code&gt;, &lt;code&gt;import&lt;/code&gt;, &lt;code&gt;export&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Todos los comandos admiten &lt;code&gt;--help&lt;/code&gt;, devuelven JSON estructurado y, en la mayoría de los casos, incluyen &lt;code&gt;agentHints.nextSteps&lt;/code&gt; con los siguientes pasos recomendados. Esto permite que una persona o un agente continúe el flujo sin tener que memorizar toda la CLI.&lt;/p&gt;

&lt;h2&gt;
  
  
  Instala la CLI
&lt;/h2&gt;

&lt;p&gt;La CLI se distribuye como el paquete npm &lt;a href="https://www.npmjs.com/package/apidog-cli" rel="noopener noreferrer"&gt;&lt;code&gt;apidog-cli&lt;/code&gt;&lt;/a&gt; y funciona en macOS, Linux y Windows. Requiere &lt;a href="https://nodejs.org/" rel="noopener noreferrer"&gt;Node.js&lt;/a&gt; 16 o posterior.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-g&lt;/span&gt; apidog-cli
apidog &lt;span class="nt"&gt;--version&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Inicia sesión con un token de acceso API. Puedes obtenerlo en la aplicación Apidog desde tu avatar → &lt;strong&gt;Configuración de la cuenta&lt;/strong&gt; → &lt;strong&gt;Token de Acceso API&lt;/strong&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;apidog login &lt;span class="nt"&gt;--with-token&lt;/span&gt; &amp;lt;YOUR_TOKEN&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;El token se guarda en &lt;code&gt;~/.apidog/config.toml&lt;/code&gt;. No lo incluyas en repositorios ni en los registros de CI. En una tubería, utiliza un secreto y pásalo mediante &lt;code&gt;--access-token&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;apidog run &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--access-token&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$APIDOG_TOKEN&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-t&lt;/span&gt; &amp;lt;scenario_id&amp;gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-e&lt;/span&gt; &amp;lt;env_id&amp;gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-r&lt;/span&gt; cli
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Estas banderas globales cubren la mayoría de los casos:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;--project&lt;/code&gt;: selecciona el proyecto.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;--branch&lt;/code&gt;: selecciona la rama.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;--access-token&lt;/code&gt;: sustituye la sesión guardada.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;--api-base-url&lt;/code&gt;: apunta a una implementación de Apidog autoalojada.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Consulta la &lt;a href="https://apidog.com/es/blog/apidog-cli-authentication?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;guía de autenticación de la CLI de Apidog&lt;/a&gt; para configurar tokens en CI.&lt;/p&gt;

&lt;h2&gt;
  
  
  Ejecuta las pruebas creadas visualmente
&lt;/h2&gt;

&lt;p&gt;El flujo principal es crear un escenario de prueba en el editor visual de Apidog y ejecutarlo desde cualquier entorno con shell. Un escenario puede incluir:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Solicitudes encadenadas.&lt;/li&gt;
&lt;li&gt;Variables extraídas de una respuesta y reutilizadas en la siguiente.&lt;/li&gt;
&lt;li&gt;Aserciones sobre el estado HTTP y el cuerpo.&lt;/li&gt;
&lt;li&gt;Datos de prueba desde archivos CSV o JSON.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;En la pestaña &lt;strong&gt;CI/CD&lt;/strong&gt; del escenario encontrarás el comando con los identificadores correspondientes:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;apidog run &lt;span class="nt"&gt;-t&lt;/span&gt; &amp;lt;scenario_id&amp;gt; &lt;span class="nt"&gt;-e&lt;/span&gt; &amp;lt;env_id&amp;gt; &lt;span class="nt"&gt;-r&lt;/span&gt; cli
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;El proceso termina con código &lt;code&gt;0&lt;/code&gt; cuando todas las aserciones pasan y con un código distinto de cero cuando alguna falla. Por eso puedes integrarlo directamente en CI sin añadir lógica adicional.&lt;/p&gt;

&lt;p&gt;Para ejecutar el mismo escenario en distintos entornos, cambia &lt;code&gt;-e&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;apidog run &lt;span class="nt"&gt;-t&lt;/span&gt; &amp;lt;scenario_id&amp;gt; &lt;span class="nt"&gt;-e&lt;/span&gt; &amp;lt;development_env_id&amp;gt; &lt;span class="nt"&gt;-r&lt;/span&gt; cli
apidog run &lt;span class="nt"&gt;-t&lt;/span&gt; &amp;lt;scenario_id&amp;gt; &lt;span class="nt"&gt;-e&lt;/span&gt; &amp;lt;staging_env_id&amp;gt; &lt;span class="nt"&gt;-r&lt;/span&gt; cli
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;También puedes proporcionar un archivo CSV o JSON para repetir el escenario con cada fila. Este es el flujo de &lt;a href="https://apidog.com/es/blog/apidog-cli-data-driven-testing?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;testing impulsado por datos&lt;/a&gt; sin duplicar pasos. Si partes desde cero, sigue el &lt;a href="https://apidog.com/es/blog/apidog-cli-test-rest-api-command-line?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;tutorial paso a paso de REST API&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Genera informes para CI
&lt;/h3&gt;

&lt;p&gt;La CLI admite cuatro formatos de informe:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;cli&lt;/code&gt;: muestra los resultados paso a paso en la terminal.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;html&lt;/code&gt;: genera un informe HTML.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;json&lt;/code&gt;: genera datos estructurados.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;junit&lt;/code&gt;: genera resultados compatibles con paneles de CI.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Los formatos de archivo se guardan en &lt;code&gt;apidog-reports/&lt;/code&gt;. Puedes combinarlos:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;apidog run &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-t&lt;/span&gt; &amp;lt;scenario_id&amp;gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-e&lt;/span&gt; &amp;lt;env_id&amp;gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-r&lt;/span&gt; cli,junit
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;La &lt;a href="https://apidog.com/es/blog/apidog-cli-test-reports?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;guía de informes de prueba&lt;/a&gt; muestra el contenido de cada formato.&lt;/p&gt;

&lt;p&gt;Si las pruebas no deben depender de un portátil, los comandos &lt;code&gt;runner&lt;/code&gt; y &lt;code&gt;scheduled-task&lt;/code&gt; permiten gestionar runners autoalojados y ejecuciones programadas, la misma maquinaria utilizada por las &lt;a href="https://apidog.com/es/blog/how-to-schedule-api-tests-apidog?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;pruebas API programadas en Apidog&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Gestiona el contrato API desde la terminal
&lt;/h2&gt;

&lt;p&gt;La CLI que ejecuta tus pruebas también puede consultar y modificar la definición de tu API:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;apidog endpoint list &lt;span class="nt"&gt;--project&lt;/span&gt; &amp;lt;project_id&amp;gt;
apidog schema get &amp;lt;schema_id&amp;gt;
apidog environment list
apidog mock list
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Puedes consultar y editar endpoints, esquemas de datos, carpetas, entornos, variables, esquemas de seguridad y componentes reutilizables.&lt;/p&gt;

&lt;p&gt;El comando &lt;code&gt;mock&lt;/code&gt; gestiona las expectativas de simulación y los pares fijos de solicitud y respuesta que devuelve el servidor mock. Los comandos &lt;code&gt;doc&lt;/code&gt; y &lt;code&gt;docs-site&lt;/code&gt; gestionan la documentación publicada. Los endpoints de WebSocket y &lt;a href="http://Socket.IO" rel="noopener noreferrer"&gt;Socket.IO&lt;/a&gt; tienen sus propios grupos, mientras que &lt;code&gt;database-connection&lt;/code&gt; cubre las configuraciones de base de datos utilizadas por los escenarios de prueba.&lt;/p&gt;

&lt;h3&gt;
  
  
  Importa y exporta especificaciones
&lt;/h3&gt;

&lt;p&gt;La CLI admite OpenAPI 3.x, Swagger 2.0 y colecciones de Postman. Esto permite automatizar migraciones y sincronizaciones desde scripts:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;apidog import openapi.json &lt;span class="nt"&gt;--project&lt;/span&gt; &amp;lt;project_id&amp;gt;
apidog &lt;span class="nb"&gt;export&lt;/span&gt; &lt;span class="nt"&gt;--format&lt;/span&gt; openapi
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Puedes extraer una especificación de otro sistema, importarla en Apidog y versionar el intercambio junto con el resto del proyecto. Consulta la &lt;a href="https://swagger.io/specification/" rel="noopener noreferrer"&gt;especificación de OpenAPI&lt;/a&gt; para conocer el estándar utilizado por gran parte del ecosistema.&lt;/p&gt;

&lt;h2&gt;
  
  
  Usa la CLI con agentes de IA
&lt;/h2&gt;

&lt;p&gt;Las versiones de 2026 de la CLI están orientadas a que un agente de codificación pueda operar un espacio de trabajo API de forma controlada. Cuatro capacidades son especialmente útiles.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Salida estructurada
&lt;/h3&gt;

&lt;p&gt;Cada comando devuelve JSON que un agente puede analizar. Además, &lt;code&gt;agentHints.nextSteps&lt;/code&gt; sugiere qué ejecutar después, incluso cuando se produce un error.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Esquemas de entrada y validación
&lt;/h3&gt;

&lt;p&gt;Los comandos &lt;code&gt;cli-schema&lt;/code&gt; exponen la estructura JSON que esperan las operaciones de escritura:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;apidog cli-schema list
apidog cli-schema get &amp;lt;&lt;span class="nb"&gt;command&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
apidog cli-schema validate &amp;lt;payload.json&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;El flujo recomendado para escribir de forma segura es:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Obtener el esquema del comando.&lt;/li&gt;
&lt;li&gt;Generar el JSON.&lt;/li&gt;
&lt;li&gt;Validar la carga útil.&lt;/li&gt;
&lt;li&gt;Ejecutar &lt;code&gt;create&lt;/code&gt; o &lt;code&gt;update&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  3. Habilidad empaquetada
&lt;/h3&gt;

&lt;p&gt;El comando &lt;code&gt;skill&lt;/code&gt; proporciona el conocimiento operativo de la CLI en un formato que los agentes pueden cargar directamente. Esta es la razón detrás de &lt;a href="https://apidog.com/es/blog/brand-new-apidog-cli-skill?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;la habilidad de la CLI de Apidog&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Según las mediciones descritas por Apidog, los agentes que trabajan mediante el esquema de la CLI utilizaron aproximadamente un 30 % menos de llamadas a herramientas y un 25 % menos de tokens que los agentes que generaban cargas útiles por inferencia. Los datos están detallados en &lt;a href="https://apidog.com/es/blog/apidog-cli-tool-calls-tokens?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;este análisis&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Puertas de permiso y ramas de IA
&lt;/h3&gt;

&lt;p&gt;De forma predeterminada, las escrituras en una rama iniciadas por IA están bloqueadas hasta que un humano habilita los &lt;strong&gt;Permisos de Edición de IA Externa&lt;/strong&gt;. Esta opción está disponible en el cliente Apidog 2.8.32 o posterior, dentro de &lt;strong&gt;Configuración del Proyecto → Configuración de Funciones → Configuración de Funciones de IA&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Otra opción es utilizar una rama de IA. El agente puede importar los recursos necesarios, realizar cambios aislados y devolverlos como una solicitud de fusión para revisión humana. Las ramas de IA sin cambios se autoarchivan después de 24 horas. Así, el contrato API sigue siendo revisable aunque el primer borrador lo genere un agente.&lt;/p&gt;

&lt;h2&gt;
  
  
  Límites de la CLI de Apidog
&lt;/h2&gt;

&lt;p&gt;Elegir una herramienta resulta más sencillo cuando sus límites están claros.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.apidog.com%2Fblog-next%2F2026%2F08%2Fimg_v3_0214f_45e24c78-f46a-4b37-8b96-ce78a3c6b00g-1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.apidog.com%2Fblog-next%2F2026%2F08%2Fimg_v3_0214f_45e24c78-f46a-4b37-8b96-ce78a3c6b00g-1.png" alt="" width="800" height="835"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  No es un cliente HTTP interactivo
&lt;/h3&gt;

&lt;p&gt;No está diseñada para escribir un POST ad hoc y mostrar una respuesta con formato. Para ese trabajo, utiliza &lt;code&gt;curl&lt;/code&gt;, HTTPie o un cliente TUI.&lt;/p&gt;

&lt;h3&gt;
  
  
  No es de código abierto
&lt;/h3&gt;

&lt;p&gt;El paquete es propietario, npm es el único canal de instalación y cualquier operación más allá de &lt;code&gt;--help&lt;/code&gt; requiere una cuenta de Apidog. El nivel gratuito cubre el flujo de trabajo descrito aquí. Si necesitas una licencia auditable, un runner de código abierto puede ser una opción más adecuada.&lt;/p&gt;

&lt;h3&gt;
  
  
  No es independiente de Apidog
&lt;/h3&gt;

&lt;p&gt;La CLI es la interfaz de terminal de la plataforma. Los escenarios, endpoints y entornos viven en tu proyecto de Apidog, no en archivos locales. Esa dependencia proporciona una fuente única de verdad para el diseño, las pruebas, los mocks y la documentación.&lt;/p&gt;

&lt;h2&gt;
  
  
  Dónde encaja frente a otras herramientas
&lt;/h2&gt;

&lt;p&gt;La principal diferencia está en dónde se crean las pruebas:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Newman y la CLI de Postman ejecutan colecciones creadas en Postman.&lt;/li&gt;
&lt;li&gt;Hurl y Bruno ejecutan pruebas definidas como archivos de texto.&lt;/li&gt;
&lt;li&gt;La CLI de Apidog ejecuta escenarios creados en un editor visual que también contiene el contrato, los mocks y la documentación.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;La comparación entre &lt;a href="https://apidog.com/es/blog/apidog-cli-vs-newman?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Apidog CLI y Newman&lt;/a&gt; profundiza en esas diferencias. También puedes consultar la recopilación de &lt;a href="https://apidog.com/es/blog/top-terminal-api-testing-tools?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;herramientas de prueba de API basadas en terminal&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Una configuración práctica para muchos equipos es:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Utilizar &lt;code&gt;curl&lt;/code&gt; o &lt;code&gt;xh&lt;/code&gt; para comprobaciones rápidas.&lt;/li&gt;
&lt;li&gt;Crear escenarios reutilizables en Apidog.&lt;/li&gt;
&lt;li&gt;Ejecutarlos en CI con &lt;code&gt;apidog run&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Publicar informes JUnit como artefactos de la tubería.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;El &lt;a href="https://apidog.com/es/blog/apidog-cli-github-actions?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;tutorial de GitHub Actions&lt;/a&gt; incluye una tubería lista para adaptar.&lt;/p&gt;

&lt;h2&gt;
  
  
  Preguntas frecuentes
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;¿Es gratuita la CLI de Apidog?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Sí. El paquete se instala gratuitamente desde npm y el nivel gratuito de Apidog cubre la creación y ejecución de escenarios mediante la CLI. Los planes de pago añaden características para equipos, no el acceso básico a la CLI.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;¿Sustituye a &lt;code&gt;curl&lt;/code&gt; o HTTPie?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
No. Esas herramientas envían solicitudes ad hoc; la CLI de Apidog ejecuta escenarios guardados y gestiona recursos del proyecto. Puedes utilizar ambas categorías según el caso.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;¿Puede ejecutarse sin interfaz gráfica en CI?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Sí. Utiliza &lt;code&gt;--access-token&lt;/code&gt; con un secreto de CI, ejecuta &lt;code&gt;apidog run&lt;/code&gt; con el ID del escenario y condiciona la construcción al código de salida. El runner no necesita la aplicación de escritorio.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;¿Qué formatos puede importar y exportar?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
OpenAPI 3.x, Swagger 2.0 y colecciones de Postman, en ambas direcciones.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;¿Cómo utilizan los agentes de IA la CLI de forma segura?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Mediante el flujo esquema-validación-escritura y las puertas de permiso. &lt;code&gt;cli-schema validate&lt;/code&gt; detecta cargas útiles mal formadas antes de aplicarlas, mientras que las ramas de IA mantienen los cambios aislados hasta que una persona los fusiona. Consulta &lt;a href="https://apidog.com/es/blog/apidog-cli-in-claude-code?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;cómo usar la CLI de Apidog en Claude Code&lt;/a&gt; para ver un ejemplo.&lt;/p&gt;

&lt;p&gt;La terminal es donde ya ejecutas tus pruebas y donde trabajan tus agentes. Instala la CLI desde npm y ejecuta un escenario de principio a fin. Puedes &lt;a href="https://apidog.com/download?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;descargar Apidog&lt;/a&gt; y consultar la &lt;a href="https://apidog.com/apidog-cli/?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;referencia completa de la CLI de Apidog&lt;/a&gt; cuando necesites ir más allá de &lt;code&gt;run&lt;/code&gt;.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Mejores Herramientas de Testing de API desde la Terminal en 2026</title>
      <dc:creator>Roobia</dc:creator>
      <pubDate>Wed, 12 Aug 2026 04:26:04 +0000</pubDate>
      <link>https://dev.to/roobia/mejores-herramientas-de-testing-de-api-desde-la-terminal-en-2026-37nf</link>
      <guid>https://dev.to/roobia/mejores-herramientas-de-testing-de-api-desde-la-terminal-en-2026-37nf</guid>
      <description>&lt;p&gt;Las pruebas de API ya no dependen de una interfaz gráfica. Hoy se ejecutan en contenedores de CI sin pantalla, entornos de staging accesibles solo por SSH y agentes de IA que operan mediante shell. En todos esos casos, una prueba debe poder instalarse, ejecutarse y devolver un código de salida desde la terminal.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://apidog.com/?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation" class="crayons-btn crayons-btn--primary"&gt;Prueba Apidog hoy&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;Esta guía reúne herramientas que realizan pruebas reales desde la línea de comandos. Una herramienta «basada en terminal» debe permitir completar el ciclo desde un shell:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Instalarla con un gestor de paquetes.&lt;/li&gt;
&lt;li&gt;Ejecutar pruebas con un comando.&lt;/li&gt;
&lt;li&gt;Evaluar el resultado mediante el código de salida.&lt;/li&gt;
&lt;li&gt;Generar resultados útiles para CI.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;La clasificación prioriza aserciones integradas, flujos de varios pasos, informes para CI y estado de mantenimiento. Clientes manuales como &lt;code&gt;curl&lt;/code&gt; también aparecen porque siguen siendo esenciales entre ejecuciones de pruebas. Para una comparación más amplia, incluidas herramientas GUI y alojadas, consulta las &lt;a href="https://apidog.com/es/blog/best-free-api-testing-tools?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;mejores herramientas gratuitas para pruebas de API&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Qué diferencia a una herramienta de prueba de un cliente
&lt;/h2&gt;

&lt;p&gt;Un cliente de terminal envía una solicitud y muestra la respuesta. Una herramienta de pruebas evalúa esa respuesta y devuelve un veredicto que tu pipeline puede usar como compuerta de despliegue.&lt;/p&gt;

&lt;p&gt;Busca estas cuatro capacidades:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Aserciones integradas:&lt;/strong&gt; valida estados HTTP, encabezados y cuerpos sin depender de scripts improvisados con &lt;code&gt;jq&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Códigos de salida útiles:&lt;/strong&gt; &lt;code&gt;0&lt;/code&gt; para éxito y un valor distinto de cero para fallo.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Repetibilidad:&lt;/strong&gt; pruebas guardadas en archivos o proyectos versionables, no en el historial del shell.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Informes:&lt;/strong&gt; salida legible en consola y formatos como JSON, JUnit o HTML para CI.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Con esos criterios, estas son diez herramientas prácticas para pruebas de API desde terminal.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Apidog CLI: crea visualmente y ejecuta sin interfaz gráfica
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://apidog.com?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Apidog&lt;/a&gt; es una plataforma API que cubre diseño, pruebas, mocking y documentación. Su CLI, &lt;code&gt;apidog-cli&lt;/code&gt;, permite ejecutar desde terminal los escenarios que creas en el editor visual.&lt;/p&gt;

&lt;p&gt;El flujo de trabajo es:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Crea un escenario con solicitudes encadenadas, variables y aserciones.&lt;/li&gt;
&lt;li&gt;Abre la pestaña &lt;strong&gt;CI/CD&lt;/strong&gt; del escenario.&lt;/li&gt;
&lt;li&gt;Copia el comando generado.&lt;/li&gt;
&lt;li&gt;Ejecútalo localmente, en CI o desde un agente.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.apidog.com%2Fblog-next%2F2026%2F08%2Fimg_v3_0214f_45e24c78-f46a-4b37-8b96-ce78a3c6b00g.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.apidog.com%2Fblog-next%2F2026%2F08%2Fimg_v3_0214f_45e24c78-f46a-4b37-8b96-ce78a3c6b00g.png" alt="" width="800" height="835"&gt;&lt;/a&gt;&lt;/p&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-g&lt;/span&gt; apidog-cli
apidog login &lt;span class="nt"&gt;--with-token&lt;/span&gt; &amp;lt;YOUR_TOKEN&amp;gt;

&lt;span class="c"&gt;# Copia el comando exacto desde la pestaña CI/CD del escenario&lt;/span&gt;
apidog run &lt;span class="nt"&gt;-t&lt;/span&gt; &amp;lt;scenario_id&amp;gt; &lt;span class="nt"&gt;-e&lt;/span&gt; &amp;lt;env_id&amp;gt; &lt;span class="nt"&gt;-r&lt;/span&gt; cli
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;No necesitas adivinar IDs: Apidog genera el comando desde el escenario. Puedes usar los reporteros &lt;code&gt;cli&lt;/code&gt;, &lt;code&gt;html&lt;/code&gt;, &lt;code&gt;json&lt;/code&gt; y &lt;code&gt;junit&lt;/code&gt;; los archivos se escriben en &lt;code&gt;apidog-reports/&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Para pruebas controladas por datos, usa archivos CSV o JSON como fuente de iteraciones. La salida JSON estructurada incluye &lt;code&gt;agentHints.nextSteps&lt;/code&gt;, útil para agentes de IA que deben decidir el siguiente paso sin interpretar capturas de pantalla.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ideal para:&lt;/strong&gt; equipos que diseñan escenarios complejos visualmente y necesitan ejecutarlos de forma idéntica en local, CI y entornos automatizados.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Límite honesto:&lt;/strong&gt; no es de código abierto ni está pensado como cliente HTTP ad hoc. Los escenarios viven en proyectos de Apidog.&lt;/p&gt;

&lt;p&gt;Consulta la &lt;a href="https://apidog.com/es/blog/apidog-cli-complete-guide?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;guía completa de Apidog CLI&lt;/a&gt; para ver todos los comandos.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Hurl: pruebas HTTP de texto plano
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/Orange-OpenSource/hurl" rel="noopener noreferrer"&gt;Hurl&lt;/a&gt; ejecuta solicitudes HTTP definidas en archivos de texto y evalúa aserciones sobre las respuestas. Está construido en Rust sobre libcurl y se distribuye como binario único.&lt;/p&gt;

&lt;p&gt;Crea un archivo &lt;code&gt;.hurl&lt;/code&gt; versionable:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;brew &lt;span class="nb"&gt;install &lt;/span&gt;hurl
&lt;span class="c"&gt;# Alternativa: cargo install --locked hurl&lt;/span&gt;

&lt;span class="nb"&gt;cat&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; login.hurl &lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="no"&gt;EOF&lt;/span&gt;&lt;span class="sh"&gt;'
POST https://api.example.com/login
{ "user": "acme", "pass": "s3cret" }

HTTP 200
[Asserts]
jsonpath "&lt;/span&gt;&lt;span class="nv"&gt;$.&lt;/span&gt;&lt;span class="sh"&gt;token" exists
&lt;/span&gt;&lt;span class="no"&gt;EOF

&lt;/span&gt;hurl &lt;span class="nt"&gt;--test&lt;/span&gt; login.hurl
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Usa &lt;code&gt;--test&lt;/code&gt; en CI: Hurl devuelve un código distinto de cero si falla una aserción.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ideal para:&lt;/strong&gt; pruebas de humo y verificaciones de contrato que quieres revisar como texto en una pull request.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Límite honesto:&lt;/strong&gt; se centra en HTTP. No cubre gRPC ni generación de carga, y la lógica compleja suele dividirse en más archivos &lt;code&gt;.hurl&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Newman: ejecuta colecciones de Postman sin GUI
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/postmanlabs/newman" rel="noopener noreferrer"&gt;Newman&lt;/a&gt; es el ejecutor de línea de comandos de código abierto para colecciones de Postman. Si ya tienes solicitudes y pruebas definidas en Postman, exporta la colección y el entorno como JSON para ejecutarlos desde CI.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-g&lt;/span&gt; newman

newman run collection.json &lt;span class="nt"&gt;-e&lt;/span&gt; staging.json
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Newman falla con código distinto de cero cuando una prueba no pasa, por lo que funciona directamente como compuerta de CI.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ideal para:&lt;/strong&gt; equipos que ya trabajan con colecciones de Postman y quieren automatizarlas sin añadir una interfaz gráfica al pipeline.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Límite honesto:&lt;/strong&gt; ejecuta exclusivamente colecciones con formato Postman. La creación de pruebas sigue ocurriendo en la GUI de Postman.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Postman CLI: ejecución vinculada a la nube de Postman
&lt;/h2&gt;

&lt;p&gt;La &lt;a href="https://learning.postman.com/docs/postman-cli/postman-cli-overview/" rel="noopener noreferrer"&gt;CLI de Postman&lt;/a&gt; es el ejecutor oficial de código cerrado de Postman. A diferencia de Newman, inicia sesión en una cuenta y puede ejecutar colecciones por ID directamente desde un espacio de trabajo.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;postman login &lt;span class="nt"&gt;--with-api-key&lt;/span&gt; &amp;lt;YOUR_API_KEY&amp;gt;

postman collection run &amp;lt;collection_id&amp;gt; &lt;span class="nt"&gt;-e&lt;/span&gt; &amp;lt;environment_id&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Los resultados se reportan a la nube de Postman.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ideal para:&lt;/strong&gt; equipos que quieren ejecutar colecciones vinculadas a su espacio de trabajo sin exportar JSON.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Límite honesto:&lt;/strong&gt; requiere una cuenta de Postman, es de código cerrado y coexistir con Newman puede generar dudas sobre cuál adoptar.&lt;/p&gt;

&lt;p&gt;La comparación &lt;a href="https://apidog.com/es/blog/postman-cli-vs-newman?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Postman CLI vs Newman&lt;/a&gt; explica cuándo conviene cada opción.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Bruno CLI: colecciones nativas de Git con &lt;code&gt;bru&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/usebruno/bruno" rel="noopener noreferrer"&gt;Bruno&lt;/a&gt; guarda colecciones como archivos &lt;code&gt;.bru&lt;/code&gt; de texto plano en carpetas normales. Esto permite revisar solicitudes y pruebas en pull requests como cualquier otro archivo del repositorio.&lt;/p&gt;

&lt;p&gt;Instala y ejecuta una colección:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-g&lt;/span&gt; @usebruno/cli

&lt;span class="c"&gt;# Ejecuta las solicitudes de la colección actual&lt;/span&gt;
bru run &lt;span class="nt"&gt;--env&lt;/span&gt; staging
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Bruno CLI puede generar informes JSON, JUnit y HTML para CI.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ideal para:&lt;/strong&gt; equipos que quieren colecciones locales, revisables en Git y ejecutables sin una cuenta en la nube.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Límite honesto:&lt;/strong&gt; el enfoque basado en archivos favorece a desarrolladores; el ecosistema es más joven que el de Postman.&lt;/p&gt;

&lt;p&gt;Consulta &lt;a href="https://apidog.com/es/blog/bruno-cli-vs-apidog-cli?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Bruno CLI vs Apidog CLI&lt;/a&gt; para comparar ambos enfoques.&lt;/p&gt;

&lt;h2&gt;
  
  
  6. Schemathesis: genera pruebas desde tu esquema
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/schemathesis/schemathesis" rel="noopener noreferrer"&gt;Schemathesis&lt;/a&gt; lee un esquema OpenAPI o GraphQL y genera casos de prueba usando pruebas basadas en propiedades sobre Hypothesis para Python.&lt;/p&gt;

&lt;p&gt;En lugar de definir cada entrada manualmente, ejecuta pruebas para descubrir:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;errores &lt;code&gt;500&lt;/code&gt;;&lt;/li&gt;
&lt;li&gt;respuestas que incumplen el esquema;&lt;/li&gt;
&lt;li&gt;casos límite no cubiertos por pruebas manuales;&lt;/li&gt;
&lt;li&gt;violaciones del contrato documentado.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pip &lt;span class="nb"&gt;install &lt;/span&gt;schemathesis

schemathesis run https://api.example.com/openapi.json
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Ideal para:&lt;/strong&gt; APIs con una especificación sólida donde quieres encontrar errores inesperados antes de una versión.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Límite honesto:&lt;/strong&gt; necesita un esquema real y preciso. En APIs grandes, puede producir resultados que tendrás que ajustar mediante opciones y hooks.&lt;/p&gt;

&lt;h2&gt;
  
  
  7. Step CI: flujos de varios pasos en YAML
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/stepci/stepci" rel="noopener noreferrer"&gt;Step CI&lt;/a&gt; permite describir un flujo de API en un archivo YAML. Puedes definir pasos, capturar valores y verificar respuestas sin escribir un script completo.&lt;/p&gt;

&lt;p&gt;También cubre REST, GraphQL, gRPC, tRPC y SOAP, y puede validar contra esquemas OpenAPI.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-g&lt;/span&gt; stepci

stepci run workflow.yml
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Un caso típico es un flujo de autenticación:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Iniciar sesión.&lt;/li&gt;
&lt;li&gt;Extraer el token.&lt;/li&gt;
&lt;li&gt;Usarlo en una solicitud posterior.&lt;/li&gt;
&lt;li&gt;Validar la respuesta final.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Ideal para:&lt;/strong&gt; flujos declarativos de varios pasos sin scripting personalizado.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Límite honesto:&lt;/strong&gt; requiere un entorno Node y su cadencia de lanzamientos se ha ralentizado. Revisa la actividad reciente del repositorio antes de basar un pipeline crítico en esta herramienta.&lt;/p&gt;

&lt;h2&gt;
  
  
  8. curl: la base que probablemente ya tienes
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://curl.se/" rel="noopener noreferrer"&gt;curl&lt;/a&gt; viene preinstalado en macOS, la mayoría de distribuciones Linux y versiones actuales de Windows. Es el cliente de referencia para solicitudes HTTP desde shell.&lt;/p&gt;

&lt;p&gt;Puedes usarlo para una comprobación mínima de estado:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Envía JSON e imprime solo el estado HTTP&lt;/span&gt;
curl &lt;span class="nt"&gt;-s&lt;/span&gt; &lt;span class="nt"&gt;-o&lt;/span&gt; /dev/null &lt;span class="nt"&gt;-w&lt;/span&gt; &lt;span class="s2"&gt;"%{http_code}&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-X&lt;/span&gt; POST https://api.example.com/orders &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Content-Type: application/json"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="s1"&gt;'{"sku":"A-102","qty":2}'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Para convertirlo en una prueba, debes añadir la lógica tú mismo: capturar el código, compararlo y devolver un fallo cuando sea necesario.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ideal para:&lt;/strong&gt; solicitudes puntuales, scripts pequeños y entornos donde no puedes instalar herramientas adicionales.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Límite honesto:&lt;/strong&gt; no incluye aserciones integradas. Necesitarás combinarlo con shell, &lt;code&gt;jq&lt;/code&gt; y control manual de códigos de salida.&lt;/p&gt;

&lt;p&gt;Cuando &lt;code&gt;curl&lt;/code&gt; deja de ser suficiente, consulta estas &lt;a href="https://apidog.com/es/blog/curl-alternatives-rest-api-testing?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;alternativas a curl para pruebas de API REST&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  9. HTTPie y xh: solicitudes manuales legibles
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://httpie.io/cli" rel="noopener noreferrer"&gt;HTTPie&lt;/a&gt; simplifica las solicitudes manuales desde terminal. Usa &lt;code&gt;http&lt;/code&gt; como comando y permite enviar campos JSON como pares &lt;code&gt;clave=valor&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/ducaale/xh" rel="noopener noreferrer"&gt;xh&lt;/a&gt; implementa una sintaxis similar en Rust como binario estático, con inicio rápido y una opción &lt;code&gt;--curl&lt;/code&gt; para imprimir la solicitud equivalente de curl.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;http POST api.example.com/users &lt;span class="nv"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;acme &lt;span class="nv"&gt;plan&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;pro
xh   POST api.example.com/users &lt;span class="nv"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;acme &lt;span class="nv"&gt;plan&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;pro
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Ideal para:&lt;/strong&gt; explorar endpoints manualmente mientras construyes las pruebas automatizadas en otra herramienta.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Límite honesto:&lt;/strong&gt; ambos son clientes, no ejecutores de pruebas. No realizan aserciones sobre la respuesta. HTTPie requiere Python; xh prioriza velocidad con un conjunto de características más reducido.&lt;/p&gt;

&lt;h2&gt;
  
  
  10. k6: cuando necesitas medir carga
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/grafana/k6" rel="noopener noreferrer"&gt;k6&lt;/a&gt; responde otra pregunta: no solo si una respuesta es correcta, sino si la API soporta tráfico bajo condiciones definidas.&lt;/p&gt;

&lt;p&gt;Es un binario de Go programado con JavaScript. Puedes definir umbrales que convierten una prueba de carga en una compuerta de CI: si se supera un umbral, k6 devuelve un código distinto de cero.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;brew &lt;span class="nb"&gt;install &lt;/span&gt;k6

k6 run load.js
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Define VUs, duración y umbrales dentro del script &lt;code&gt;load.js&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ideal para:&lt;/strong&gt; verificaciones de rendimiento versionadas junto con tus pruebas funcionales.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Límite honesto:&lt;/strong&gt; es una herramienta de carga bajo AGPL-3.0, no un cliente de pruebas funcionales. Los escenarios significativos requieren aprender su API de JavaScript.&lt;/p&gt;

&lt;h2&gt;
  
  
  ¿Prefieres algo interactivo?
&lt;/h2&gt;

&lt;p&gt;Si quieres una interfaz tipo Postman dentro del shell, busca clientes TUI como atac y posting. Estos dibujan editores completos de solicitudes en la terminal, pero su objetivo es explorar APIs, no gestionar pipelines.&lt;/p&gt;

&lt;p&gt;Consulta la guía de los &lt;a href="https://apidog.com/es/blog/best-terminal-tui-rest-api-clients?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;mejores clientes API REST de terminal y TUI&lt;/a&gt; para profundizar en esa categoría.&lt;/p&gt;

&lt;h2&gt;
  
  
  Tabla comparativa
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Herramienta&lt;/th&gt;
&lt;th&gt;Tarea&lt;/th&gt;
&lt;th&gt;Aserciones integradas&lt;/th&gt;
&lt;th&gt;Instalación&lt;/th&gt;
&lt;th&gt;Código abierto&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Apidog CLI&lt;/td&gt;
&lt;td&gt;Ejecutar escenarios creados visualmente en CI&lt;/td&gt;
&lt;td&gt;Sí&lt;/td&gt;
&lt;td&gt;&lt;code&gt;npm i -g apidog-cli&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;No (capa gratuita)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Hurl&lt;/td&gt;
&lt;td&gt;Pruebas HTTP de texto plano&lt;/td&gt;
&lt;td&gt;Sí&lt;/td&gt;
&lt;td&gt;&lt;code&gt;brew install hurl&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Apache-2.0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Newman&lt;/td&gt;
&lt;td&gt;Colecciones de Postman sin interfaz gráfica&lt;/td&gt;
&lt;td&gt;Sí&lt;/td&gt;
&lt;td&gt;&lt;code&gt;npm i -g newman&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Apache-2.0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Postman CLI&lt;/td&gt;
&lt;td&gt;Ejecuciones de Postman vinculadas a la nube&lt;/td&gt;
&lt;td&gt;Sí&lt;/td&gt;
&lt;td&gt;Instalador de Postman&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Bruno CLI&lt;/td&gt;
&lt;td&gt;Colecciones &lt;code&gt;.bru&lt;/code&gt; nativas de Git&lt;/td&gt;
&lt;td&gt;Sí&lt;/td&gt;
&lt;td&gt;&lt;code&gt;npm i -g @usebruno/cli&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;MIT&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Schemathesis&lt;/td&gt;
&lt;td&gt;Fuzzing a partir de un esquema&lt;/td&gt;
&lt;td&gt;Generadas&lt;/td&gt;
&lt;td&gt;&lt;code&gt;pip install schemathesis&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;MIT&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Step CI&lt;/td&gt;
&lt;td&gt;Flujos YAML de varios pasos&lt;/td&gt;
&lt;td&gt;Sí&lt;/td&gt;
&lt;td&gt;&lt;code&gt;npm i -g stepci&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;MPL-2.0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;curl&lt;/td&gt;
&lt;td&gt;Solicitudes brutas y scripting&lt;/td&gt;
&lt;td&gt;DIY&lt;/td&gt;
&lt;td&gt;Preinstalado&lt;/td&gt;
&lt;td&gt;Sí&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;HTTPie / xh&lt;/td&gt;
&lt;td&gt;Solicitudes manuales legibles&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;brew install httpie&lt;/code&gt; / &lt;code&gt;xh&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;Sí&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;k6&lt;/td&gt;
&lt;td&gt;Carga con umbrales de éxito/fallo&lt;/td&gt;
&lt;td&gt;Umbrales&lt;/td&gt;
&lt;td&gt;&lt;code&gt;brew install k6&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;AGPL-3.0&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Cómo elegir
&lt;/h2&gt;

&lt;p&gt;Empieza por el tipo de trabajo que necesitas automatizar:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Ya tienes colecciones de Postman:&lt;/strong&gt; usa Newman o Postman CLI.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Quieres archivos de prueba legibles y revisables en Git:&lt;/strong&gt; usa Hurl o Bruno CLI.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tienes una especificación OpenAPI precisa:&lt;/strong&gt; añade Schemathesis para descubrir casos límite.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Necesitas flujos declarativos de varios pasos:&lt;/strong&gt; prueba Step CI.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Solo necesitas una solicitud rápida o estás en un entorno restringido:&lt;/strong&gt; usa curl.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Quieres explorar manualmente una API:&lt;/strong&gt; usa HTTPie o xh.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Necesitas validar capacidad y rendimiento:&lt;/strong&gt; usa k6.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Quieres diseñar escenarios visualmente y ejecutarlos en CI:&lt;/strong&gt; usa Apidog CLI.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;La CLI de Apidog es útil cuando quieres mantener diseño de API, datos simulados, documentación y escenarios de prueba en una sola plataforma. Consulta &lt;a href="https://apidog.com/es/blog/apidog-cli-terminal-api-client?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Apidog CLI: el cliente API que vive en tu terminal&lt;/a&gt; para ver ese flujo de trabajo.&lt;/p&gt;

&lt;p&gt;Para entender cómo encajan estas herramientas en una estrategia mayor, revisa la guía de &lt;a href="https://apidog.com/es/blog/api-testing-strategies?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;estrategias de pruebas de API&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Preguntas frecuentes
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;¿Puedo probar APIs completamente desde la terminal?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Sí. Puedes crear pruebas como archivos con Hurl, Bruno o Step CI, o definirlas en un editor visual con Apidog o Postman. Después, ejecútalas sin interfaz gráfica con su CLI. Los ejecutores devuelven códigos de salida que CI puede interpretar.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;¿Cuál es la diferencia entre un cliente API de terminal y una herramienta de prueba?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Un cliente como curl, HTTPie o xh envía solicitudes y muestra respuestas. Una herramienta de pruebas como Apidog CLI, Hurl o Newman aplica aserciones y devuelve un código distinto de cero cuando algo falla. Los clientes sirven para explorar; las herramientas de prueba actúan como compuertas.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;¿Cuáles se ejecutan en pipelines de CI?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Todos los ejecutores de esta lista:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;apidog run
hurl &lt;span class="nt"&gt;--test&lt;/span&gt;
newman run
postman collection run
bru run
schemathesis run
stepci run
k6 run
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Todos pueden devolver un código distinto de cero en caso de fallo. Para un ejemplo práctico, consulta cómo &lt;a href="https://apidog.com/es/blog/apidog-cli-github-actions?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;ejecutar pruebas de Apidog CLI en GitHub Actions&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;¿Alguna de estas herramientas maneja pruebas de carga?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Sí: k6 es la herramienta especializada en carga de esta lista. Sus umbrales permiten fallar una ejecución cuando se supera una latencia, tasa de errores u otra métrica definida. Las demás herramientas se centran principalmente en corrección funcional.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;¿Necesito una especificación OpenAPI?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Solo Schemathesis la necesita para generar pruebas. En las demás herramientas, una especificación ayuda pero no es obligatoria. Apidog puede importar OpenAPI 3.x, Swagger 2.0 y colecciones de Postman; Step CI puede validar respuestas contra un esquema.&lt;/p&gt;

&lt;p&gt;El patrón es simple: crea pruebas donde te resulte más cómodo, pero ejecuta esas pruebas desde un shell con un código de salida fiable. Si buscas diseño visual y ejecución automatizada en una sola plataforma, &lt;a href="https://apidog.com/download?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;descarga Apidog&lt;/a&gt;, crea un escenario y añade &lt;code&gt;apidog run&lt;/code&gt; a tu pipeline de CI.&lt;/p&gt;

</description>
    </item>
  </channel>
</rss>
