<?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.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>Fable 5 está caído para todos: La suspensión gubernamental de Anthropic</title>
      <dc:creator>Roobia</dc:creator>
      <pubDate>Sat, 13 Jun 2026 04:25:08 +0000</pubDate>
      <link>https://dev.to/roobia/fable-5-esta-caido-para-todos-la-suspension-gubernamental-de-anthropic-13a0</link>
      <guid>https://dev.to/roobia/fable-5-esta-caido-para-todos-la-suspension-gubernamental-de-anthropic-13a0</guid>
      <description>&lt;p&gt;El 12 de junio de 2026, el modelo más capaz con el que la mayoría de los desarrolladores habían trabajado simplemente dejó de responder. No fue un límite de tasa. No fue una interrupción regional. Fue un cierre total y global. A las 5:21 PM ET, Anthropic recibió una directiva de control de exportaciones del gobierno de EE. UU. ordenándole suspender el acceso a Claude Fable 5 y Claude Mythos 5. Para todos.&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 tu aplicación, agente o pipeline de CI llama a &lt;code&gt;claude-fable-5&lt;/code&gt;, esas llamadas ahora están fallando. Esto es lo que sucedió, por qué sucedió y cómo preparar tu stack para que la próxima caída de un modelo no se convierta en un incidente de producción.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Qué:&lt;/strong&gt; Anthropic suspendió todo acceso a &lt;strong&gt;Fable 5&lt;/strong&gt; y &lt;strong&gt;Mythos 5&lt;/strong&gt; el 12 de junio de 2026, cumpliendo con una directiva de control de exportaciones del gobierno de EE. UU.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Quiénes están afectados:&lt;/strong&gt; Todos. La orden se dirige a "cualquier ciudadano extranjero, ya sea dentro o fuera de los Estados Unidos". Los proveedores no pueden separar de manera confiable a los ciudadanos extranjeros del resto en tiempo real, por lo que el resultado práctico es un cierre mundial.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Por qué:&lt;/strong&gt; El gobierno citó la seguridad nacional después de que otra empresa afirmara haber encontrado un "jailbreak". Anthropic dice que solo ha visto un "potencial jailbreak estrecho" utilizando técnicas de análisis de código que están "ampliamente disponibles en otros modelos".&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Qué sigue funcionando:&lt;/strong&gt; Opus, Sonnet y Haiku no se vieron afectados. Solo los dos modelos de clase Mythos están inoperativos.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Qué sigue:&lt;/strong&gt; Anthropic disputa la justificación, está cumpliendo de todos modos y dice que está trabajando para restaurar el acceso. Prometió más detalles en 24 horas.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;La lección para los desarrolladores:&lt;/strong&gt; Un modelo puede desaparecer por razones que no tienen nada que ver con tu código. Trata la disponibilidad del modelo como una dependencia externa y diseña fallback desde el inicio.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Qué sucedió
&lt;/h2&gt;

&lt;p&gt;Anthropic publicó un &lt;a href="https://www.anthropic.com/news/fable-mythos-access" rel="noopener noreferrer"&gt;comunicado&lt;/a&gt; confirmando que recibió una directiva del gobierno de EE. UU. el 12 de junio de 2026, a las 5:21 PM ET. La directiva, emitida bajo autoridades de control de exportaciones, exigía a la compañía suspender el acceso a Fable 5 y Mythos 5 de inmediato.&lt;/p&gt;

&lt;p&gt;La redacción de la orden explica por qué el evento terminó siendo global. Se aplica a "cualquier ciudadano extranjero, ya sea dentro o fuera de los Estados Unidos, incluidos los empleados de Anthropic de nacionalidad extranjera". Ningún proveedor cloud puede verificar perfectamente la nacionalidad de cada usuario detrás de cada clave API en tiempo real.&lt;/p&gt;

&lt;p&gt;Ante eso, la única forma de cumplir con certeza fue desactivar los modelos para todos.&lt;/p&gt;

&lt;p&gt;El alcance sí fue limitado en un punto importante: &lt;strong&gt;solo Fable 5 y Mythos 5 están afectados&lt;/strong&gt;. Anthropic afirmó explícitamente que "el acceso a todos los demás modelos de Anthropic no se verá afectado". Opus, Sonnet y Haiku permanecieron en línea durante todo el período.&lt;/p&gt;

&lt;h2&gt;
  
  
  Qué son realmente Fable 5 y Mythos 5
&lt;/h2&gt;

&lt;p&gt;Ambos modelos se lanzaron solo días antes de la suspensión, así que muchos equipos acababan de terminar sus migraciones.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Claude Fable 5&lt;/strong&gt; es el modelo de disponibilidad general de clase Mythos: capacidad frontera con salvaguardias integradas, lanzado el 9 de junio de 2026. Es el que la mayoría de los desarrolladores estaban llamando mediante la API de Claude con el identificador &lt;code&gt;claude-fable-5&lt;/code&gt;, a &lt;strong&gt;$10 por millón de tokens de entrada y $50 por millón de tokens de salida&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Claude Mythos 5&lt;/strong&gt; es el mismo modelo subyacente con salvaguardias levantadas para usuarios verificados, como profesionales de ciberseguridad e investigadores autorizados que trabajan a través de programas de acceso de confianza.&lt;/p&gt;

&lt;p&gt;Lo que hizo atractiva la migración:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Ingeniería de software:&lt;/strong&gt; Anthropic dice que Fable 5 "comprimió meses de ingeniería en días", citando una migración de Stripe de una base de código Ruby de 50 millones de líneas completada en un solo día.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Razonamiento de contexto largo:&lt;/strong&gt; ambos modelos "mantienen el enfoque a través de millones de tokens" en tareas autónomas y de larga duración.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Visión:&lt;/strong&gt; de vanguardia, incluyendo la reconstrucción de la fuente de aplicaciones web a partir de capturas de pantalla y la extracción de números precisos de figuras científicas.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Ciencias de la vida:&lt;/strong&gt; se informa que Mythos 5 aceleró el diseño de fármacos aproximadamente 10 veces.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Las salvaguardias de Fable son parte central de la controversia. Fable 5 enruta consultas arriesgadas —ciberseguridad ofensiva, ciertas áreas de biología y química, intentos de destilación— a través de clasificadores de IA que recurren a Claude Opus 4.8. Anthropic señala que "más del 95% de las sesiones de Fable no implican ningún fallback".&lt;/p&gt;

&lt;p&gt;Si quieres el contexto más amplio sobre cómo Anthropic y OpenAI se diferencian en modelos cibernéticos bloqueados versus abiertos, lo cubrimos en &lt;a href="https://apidog.com/es/blog/openai-daybreak-vs-claude-mythos?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;OpenAI Daybreak vs Claude Mythos&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Por qué el gobierno los retiró
&lt;/h2&gt;

&lt;p&gt;Según informes de &lt;a href="https://www.cnbc.com/2026/06/12/anthropic-disables-access-to-fable-5-and-mythos-5-to-comply-with-government-directive.html" rel="noopener noreferrer"&gt;CNBC&lt;/a&gt; y &lt;a href="https://www.bloomberg.com/news/articles/2026/06/13/anthropic-says-us-limits-foreign-access-to-fable-5-mythos-5" rel="noopener noreferrer"&gt;Bloomberg&lt;/a&gt;, el Departamento de Comercio actuó después de que otra empresa afirmara haber realizado un "jailbreak" a Mythos.&lt;/p&gt;

&lt;p&gt;La preocupación declarada era la seguridad nacional: que existía un método para eludir las salvaguardias de Fable y desbloquear capacidades peligrosas para ciudadanos extranjeros.&lt;/p&gt;

&lt;p&gt;El relato de Anthropic es más limitado. La compañía dice que revisó la demostración y encontró "un potencial jailbreak estrecho" basado en técnicas de análisis de código, capacidades que, según argumenta, están "ampliamente disponibles en otros modelos". También afirma que hasta ahora solo ha visto evidencia verbal del exploit, no una ruptura reproducible y universal.&lt;/p&gt;

&lt;p&gt;Ese es el desacuerdo principal: si un "jailbreak" estrecho, posiblemente no reproducible, justifica retirar un modelo desplegado para cientos de millones de personas.&lt;/p&gt;

&lt;h2&gt;
  
  
  Respuesta de Anthropic
&lt;/h2&gt;

&lt;p&gt;Anthropic está haciendo dos cosas a la vez: cumplir y resistir.&lt;/p&gt;

&lt;p&gt;Cumplió de inmediato, y los modelos se desactivaron esa misma noche. Pero también disputa públicamente la justificación, argumentando que:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;La resistencia perfecta al "jailbreak" no es posible para nadie.&lt;/strong&gt; Ningún proveedor de modelos, incluido Anthropic, puede garantizar que un modelo sea irrompible. Señala sus propias salvaguardias de defensa en profundidad como líderes en la industria, aunque concede que no son perfectas.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;La capacidad no es única.&lt;/strong&gt; Si el "jailbreak" se basa en habilidades generales de análisis de código, ya existe una capacidad comparable en otros modelos frontera, por lo que eliminar el modelo de un proveedor no cierra la brecha.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;El costo es desproporcionado.&lt;/strong&gt; Un exploit estrecho, argumenta la compañía, no justifica cortar el acceso a un modelo en el que confían "cientos de millones de personas".&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Anthropic dijo que compartiría más información en un plazo de 24 horas y que está trabajando para restaurar el acceso.&lt;/p&gt;

&lt;h2&gt;
  
  
  Qué significa esto si desarrollas sobre la API
&lt;/h2&gt;

&lt;p&gt;Si distribuyes software que depende de un modelo, este es el escenario para el que muchos equipos no planifican.&lt;/p&gt;

&lt;p&gt;El modelo no fue desaprobado según un cronograma publicado. No se degradó gradualmente. No falló por precio, cuota o límites de tasa. Un tercero lo desactivó por razones fuera de tu control y casi sin aviso.&lt;/p&gt;

&lt;p&gt;Si dependías de &lt;code&gt;claude-fable-5&lt;/code&gt;, el impacto práctico fue:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Llamadas de producción fallidas.&lt;/strong&gt; Cada solicitud a los modelos suspendidos empezó a devolver errores. Cualquier flujo en la ruta crítica —chat, agentes, jobs en segundo plano— queda interrumpido hasta que rediriges tráfico.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Sin ventana de migración.&lt;/strong&gt; No hubo aviso de descontinuación de 6 meses. Fue el mismo día.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cambio de capacidad, no solo downtime.&lt;/strong&gt; Volver a un modelo más pequeño no es transparente si dependías de razonamiento de contexto largo o visión de Fable 5. Cambian resultados, costos y latencia.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Agentes que pueden fallar de forma silenciosa.&lt;/strong&gt; Los flujos de varios pasos que asumían un modelo específico pueden bloquearse, entrar en bucle o producir salidas degradadas en lugar de fallar explícitamente.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;La conclusión es incómoda: la disponibilidad del modelo es una dependencia que no controlas. Puede estar gobernada por regulación, leyes de exportación o incidentes de seguridad. No puedes evitarlo, pero sí puedes convertirlo en una conmutación por error controlada.&lt;/p&gt;

&lt;h2&gt;
  
  
  Cómo hacer que tu stack sobreviva a la desactivación de un modelo
&lt;/h2&gt;

&lt;p&gt;Este es un problema de ingeniería 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; ayudan a diseñar, simular, probar y monitorear endpoints de IA para que un evento del proveedor sea un cambio de configuración, no un incidente.&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.amazonaws.com%2Fuploads%2Farticles%2Flmvde24ao8ovcol5fop4.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.amazonaws.com%2Fuploads%2Farticles%2Flmvde24ao8ovcol5fop4.png" alt="Apidog" width="799" height="530"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Abstrae el modelo detrás de tu propio endpoint
&lt;/h3&gt;

&lt;p&gt;No dejes que tu aplicación llame directamente a una ID de modelo del proveedor desde todos los servicios.&lt;/p&gt;

&lt;p&gt;En lugar de esto:&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;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;messages&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;claude-fable-5&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="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="nx"&gt;prompt&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;usa una capa interna:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight http"&gt;&lt;code&gt;&lt;span class="err"&gt;POST /v1/complete
Content-Type: application/json

{
  "task": "code_review",
  "input": "..."
}
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Y resuelve el modelo en el servidor:&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;modelMap&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;code_review&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;CODE_REVIEW_MODEL&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;chat&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;CHAT_MODEL&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;vision&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;VISION_MODEL&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;complete&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;task&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="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;modelMap&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;task&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;provider&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;messages&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="nx"&gt;model&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="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="nx"&gt;input&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;Así, cambiar &lt;code&gt;claude-fable-5&lt;/code&gt; por un modelo de respaldo se vuelve un cambio de configuración, no un redeploy en cada servicio.&lt;/p&gt;

&lt;p&gt;Esta es la misma disciplina de &lt;a href="https://apidog.com/es/blog/api-tool-contract-first-development?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;desarrollo contract-first&lt;/a&gt; que protege a tu aplicación de cambios disruptivos aguas arriba.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Define una cadena de fallback antes del incidente
&lt;/h3&gt;

&lt;p&gt;Decide de antemano qué debe pasar si el modelo primario no está disponible.&lt;/p&gt;

&lt;p&gt;Ejemplo:&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;fallbackChain&lt;/span&gt; &lt;span class="o"&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;claude-fable-5&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;claude-opus-4-8&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;claude-sonnet&lt;/span&gt;&lt;span class="dl"&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;callWithFallback&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;payload&lt;/span&gt;&lt;span class="p"&gt;)&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;lastError&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;model&lt;/span&gt; &lt;span class="k"&gt;of&lt;/span&gt; &lt;span class="nx"&gt;fallbackChain&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="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;provider&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;messages&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="nx"&gt;model&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="nx"&gt;payload&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;messages&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;err&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nx"&gt;lastError&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;err&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="nf"&gt;isAvailabilityError&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;err&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="nx"&gt;err&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;throw&lt;/span&gt; &lt;span class="nx"&gt;lastError&lt;/span&gt;&lt;span class="p"&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;isAvailabilityError&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;err&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="p"&gt;[&lt;/span&gt;
    &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;model_not_found&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;model_unavailable&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;service_unavailable&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
  &lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nf"&gt;includes&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;code&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;Luego pruébalo de verdad. Usa &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;Apidog para simular el modo de falla&lt;/a&gt;, devolviendo la forma de error del proveedor desde un servidor mock, y verifica que tu gateway conmuta por error correctamente.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Prueba agentes contra modelos degradados
&lt;/h3&gt;

&lt;p&gt;Los agentes son especialmente frágiles ante cambios de modelo porque encadenan supuestos entre pasos.&lt;/p&gt;

&lt;p&gt;No pruebes solo el "happy path" con el modelo principal. Ejecuta la misma suite contra varios backends:&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="na"&gt;test_matrix&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;model&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;claude-fable-5&lt;/span&gt;
    &lt;span class="na"&gt;expected&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;full_capability&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;model&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;claude-opus-4-8&lt;/span&gt;
    &lt;span class="na"&gt;expected&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;acceptable&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;model&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;claude-sonnet&lt;/span&gt;
    &lt;span class="na"&gt;expected&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;degraded_but_safe&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Valida al menos:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;que el agente termina la tarea;&lt;/li&gt;
&lt;li&gt;que no entra en bucles;&lt;/li&gt;
&lt;li&gt;que no ignora herramientas obligatorias;&lt;/li&gt;
&lt;li&gt;que reporta degradación cuando no puede completar una acción;&lt;/li&gt;
&lt;li&gt;que no produce una respuesta inventada para ocultar el fallo.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Nuestra guía sobre &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 sus APIs&lt;/a&gt; explica cómo ejecutar la misma suite contra múltiples backends para detectar fallos antes que tus usuarios.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Monitorea la salud del proveedor como señal de primera clase
&lt;/h3&gt;

&lt;p&gt;No esperes a que un cliente abra un ticket.&lt;/p&gt;

&lt;p&gt;Crea una verificación programada para cada modelo crítico:&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;async&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;checkModelHealth&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="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;start&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;Date&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;now&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;await&lt;/span&gt; &lt;span class="nx"&gt;provider&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;messages&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="nx"&gt;model&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;max_tokens&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;10&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="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;ping&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="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;status&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;ok&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;latencyMs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;Date&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;now&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="nx"&gt;start&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;err&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="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;status&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;error&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;code&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;code&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;latencyMs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;Date&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;now&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="nx"&gt;start&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;Alerta cuando:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;el modelo devuelve errores de disponibilidad;&lt;/li&gt;
&lt;li&gt;aumenta la latencia;&lt;/li&gt;
&lt;li&gt;cambia la forma del error;&lt;/li&gt;
&lt;li&gt;el fallback se activa más de lo normal.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Un modelo caído debe aparecer en tus dashboards antes de aparecer en soporte.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. Mantén un proveedor secundario listo
&lt;/h3&gt;

&lt;p&gt;Si la continuidad es crítica para tu negocio, tener una clave API de respaldo no basta. El proveedor secundario debe estar:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;conectado a tu capa de abstracción;&lt;/li&gt;
&lt;li&gt;cubierto por pruebas;&lt;/li&gt;
&lt;li&gt;incluido en tus monitoreos;&lt;/li&gt;
&lt;li&gt;validado con tus prompts reales;&lt;/li&gt;
&lt;li&gt;documentado como ruta de fallback.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Si quieres una forma sin costo de seguir experimentando y validando con Claude mientras construyes esa resiliencia, consulta &lt;a href="https://apidog.com/es/blog/get-free-unlimited-claude-api?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;cómo obtener acceso ilimitado y gratuito a la API de Claude&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Cierre
&lt;/h2&gt;

&lt;p&gt;Nada de esto es nuevo en ingeniería de software. Es resiliencia estándar de API: abstracción, disyuntores, pruebas de contrato, mocks, monitoreo y fallback.&lt;/p&gt;

&lt;p&gt;La diferencia es que muchos equipos trataron los modelos frontera como si fueran infraestructura estable y controlada. No lo son.&lt;/p&gt;

&lt;p&gt;Si tu producto depende de un modelo específico, diseña desde hoy para el día en que ese modelo no responda.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Cómo extender el uso de Claude Fable 5 con el prompt perfecto</title>
      <dc:creator>Roobia</dc:creator>
      <pubDate>Fri, 12 Jun 2026 07:22:15 +0000</pubDate>
      <link>https://dev.to/roobia/como-extender-el-uso-de-claude-fable-5-con-el-prompt-perfecto-12i6</link>
      <guid>https://dev.to/roobia/como-extender-el-uso-de-claude-fable-5-con-el-prompt-perfecto-12i6</guid>
      <description>&lt;p&gt;Claude Fable 5 es más capaz que los modelos anteriores, pero esa capacidad tiene coste: si no delimitas la tarea, puede recopilar contexto innecesario, deliberar demasiado y modificar código que no pediste tocar. La forma práctica de extender tu uso no es “forzar” límites, sino escribir instrucciones que ajusten esfuerzo, alcance y verbosidad a cada solicitud.&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 convierte la &lt;a href="https://platform.claude.com/docs/en/build-with-claude/prompt-engineering/prompting-claude-fable-5" rel="noopener noreferrer"&gt;guía oficial de instrucciones de Fable 5&lt;/a&gt; de Anthropic en pasos aplicables. Después verás cómo probar esas instrucciones con &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 medir tokens, latencia y comportamiento en lugar de ajustar por intuición.&lt;/p&gt;

&lt;h2&gt;
  
  
  Qué significa realmente “extender tu uso”
&lt;/h2&gt;

&lt;p&gt;En Fable 5, tres controles influyen directamente en coste, latencia y utilidad de cada llamada:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Esfuerzo.&lt;/strong&gt; Es el principal equilibrio entre capacidad, tiempo de respuesta y coste. Anthropic recomienda &lt;code&gt;high&lt;/code&gt; como valor general, &lt;code&gt;xhigh&lt;/code&gt; para tareas especialmente difíciles, y &lt;code&gt;medium&lt;/code&gt; o &lt;code&gt;low&lt;/code&gt; para trabajo rutinario.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tokens de salida.&lt;/strong&gt; Sin una instrucción clara, el modelo puede explicar de más, narrar opciones descartadas o añadir comentarios innecesarios. Una instrucción de concisión reduce salida sin perder contenido útil.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Duración de ejecución.&lt;/strong&gt; Fable 5 puede sostener ejecuciones largas en tareas complejas. Eso es útil cuando el problema lo justifica, pero caro si la tarea era simple.&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.amazonaws.com%2Fuploads%2Farticles%2Ft1of5tqiri2gzfzq9jk2.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.amazonaws.com%2Fuploads%2Farticles%2Ft1of5tqiri2gzfzq9jk2.png" alt="Imagen" width="800" height="883"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;El objetivo es simple: usa menos deliberación en tareas fáciles y reserva la capacidad alta para problemas donde realmente aporte valor.&lt;/p&gt;

&lt;h2&gt;
  
  
  Patrones de instrucciones para optimizar cada llamada
&lt;/h2&gt;

&lt;p&gt;Estos patrones vienen de la guía de Anthropic y funcionan bien como fragmentos de &lt;code&gt;system prompt&lt;/code&gt;. Úsalos como bloques reutilizables según el tipo de tarea.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Ajusta el esfuerzo a la tarea
&lt;/h3&gt;

&lt;p&gt;No uses siempre el mismo nivel de esfuerzo.&lt;/p&gt;

&lt;p&gt;Guía práctica:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Usa &lt;code&gt;low&lt;/code&gt; o &lt;code&gt;medium&lt;/code&gt; para:

&lt;ul&gt;
&lt;li&gt;reformatear texto;&lt;/li&gt;
&lt;li&gt;clasificar entradas simples;&lt;/li&gt;
&lt;li&gt;generar respuestas cortas;&lt;/li&gt;
&lt;li&gt;aplicar cambios mecánicos.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Usa &lt;code&gt;high&lt;/code&gt; para:

&lt;ul&gt;
&lt;li&gt;análisis técnico;&lt;/li&gt;
&lt;li&gt;debugging;&lt;/li&gt;
&lt;li&gt;generación de código con contexto;&lt;/li&gt;
&lt;li&gt;decisiones con varias restricciones.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Usa &lt;code&gt;xhigh&lt;/code&gt; solo para:

&lt;ul&gt;
&lt;li&gt;problemas ambiguos;&lt;/li&gt;
&lt;li&gt;arquitectura;&lt;/li&gt;
&lt;li&gt;razonamiento extenso;&lt;/li&gt;
&lt;li&gt;tareas críticas donde la calidad pesa más que la latencia.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Si una tarea se completa bien pero tarda demasiado, baja el esfuerzo y vuelve a medir. Para entender el impacto en volumen, revisa el desglose del &lt;a href="https://apidog.com/es/blog/claude-api-cost?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;costo de la API de Claude&lt;/a&gt; y los &lt;a href="https://apidog.com/es/blog/claude-api-rate-limits?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;límites de velocidad de la API de Claude&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Dile que actúe cuando tenga suficiente información
&lt;/h3&gt;

&lt;p&gt;Usa esta instrucción cuando veas respuestas largas que vuelven a justificar decisiones ya tomadas:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Cuando tengas suficiente información para actuar, actúa. No vuelvas a derivar hechos ya establecidos
en la conversación, no vuelvas a debatir una decisión que el usuario ya ha tomado, ni narres
opciones que no vas a seguir. Si estás sopesando una elección, da una recomendación, no un
estudio exhaustivo. Esto no se aplica a los bloques de pensamiento.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Cuándo usarlo:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;agentes que trabajan con herramientas;&lt;/li&gt;
&lt;li&gt;tareas de edición de código;&lt;/li&gt;
&lt;li&gt;análisis donde ya diste restricciones claras;&lt;/li&gt;
&lt;li&gt;flujos multi-turno con mucho contexto acumulado.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  3. Empieza con el resultado
&lt;/h3&gt;

&lt;p&gt;Este patrón reduce preámbulos y hace que la respuesta sea más útil para humanos y sistemas que consumen el output:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Comienza con el resultado. Tu primera frase después de terminar debe responder a "qué pasó"
o "qué encontraste": lo que el usuario pediría si dijera "solo dame el
resumen". Los detalles de apoyo y el razonamiento vienen después. Ser legible y ser conciso son
cosas diferentes, y la legibilidad importa más.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Ejemplo de uso:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Sistema:
Comienza con el resultado. Da primero la conclusión y luego los detalles técnicos.

Usuario:
Revisa este diff y dime si introduce riesgos de seguridad.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  4. Restringe el alcance
&lt;/h3&gt;

&lt;p&gt;Fable 5 puede “ayudar demasiado”: refactorizar, limpiar o añadir validaciones fuera del alcance. Para tareas de código, delimita explícitamente:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;No añadas características, refactorices ni introduzcas abstracciones más allá de lo que la tarea requiere. Una
corrección de errores no necesita limpieza adicional. No añadas manejo de errores, fallbacks, ni
validación para escenarios que no pueden ocurrir. Solo valida en los límites del sistema (entrada del
usuario, APIs externas). Haz lo más simple que funcione bien.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Úsalo especialmente en:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;bug fixes;&lt;/li&gt;
&lt;li&gt;pull requests pequeños;&lt;/li&gt;
&lt;li&gt;migraciones mecánicas;&lt;/li&gt;
&lt;li&gt;cambios en archivos sensibles;&lt;/li&gt;
&lt;li&gt;tareas donde el diff debe ser mínimo.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  5. Basa el progreso en resultados reales de herramientas
&lt;/h3&gt;

&lt;p&gt;En ejecuciones largas, evita reportes de progreso no verificados. Añade esta instrucción:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Antes de informar el progreso, audita cada afirmación contra un resultado de herramienta de esta sesión.
Solo informa el trabajo para el que puedas señalar evidencia; si algo aún no está verificado, dilo
explícitamente.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Esto es útil para agentes que:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;ejecutan tests;&lt;/li&gt;
&lt;li&gt;modifican repositorios;&lt;/li&gt;
&lt;li&gt;llaman APIs;&lt;/li&gt;
&lt;li&gt;inspeccionan logs;&lt;/li&gt;
&lt;li&gt;generan reportes de estado.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  6. Explica la intención, no solo la tarea
&lt;/h3&gt;

&lt;p&gt;Fable 5 responde mejor cuando entiende para qué se usará la salida:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Estoy trabajando en [la tarea más grande] para [quién es]. Necesitan [lo que la salida
permite]. Con eso en mente: [solicitud].
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Estoy preparando una guía interna para desarrolladores backend que migran de REST a GraphQL.
Necesitan ejemplos concretos y advertencias de implementación. Con eso en mente:
resume los riesgos principales de esta migración y propón un checklist técnico.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  7. Mantén un archivo de memoria para trabajo repetido
&lt;/h3&gt;

&lt;p&gt;Para tareas recurrentes, crea un archivo Markdown de aprendizaje:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="gh"&gt;# Memoria del flujo de revisión&lt;/span&gt;

Resumen: evitar refactors no solicitados y priorizar diffs pequeños.

&lt;span class="gu"&gt;## Lecciones&lt;/span&gt;
&lt;span class="p"&gt;
-&lt;/span&gt; 2026-06-12: En correcciones de bugs, no modificar nombres públicos salvo que el usuario lo pida.
&lt;span class="p"&gt;-&lt;/span&gt; 2026-06-12: Antes de sugerir cambios de API, verificar compatibilidad con clientes existentes.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Reglas prácticas:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;una lección por entrada;&lt;/li&gt;
&lt;li&gt;resumen corto al inicio;&lt;/li&gt;
&lt;li&gt;actualiza entradas existentes en vez de duplicarlas;&lt;/li&gt;
&lt;li&gt;carga esta memoria en tareas futuras relacionadas.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Prueba y ajusta tus instrucciones en Apidog
&lt;/h2&gt;

&lt;p&gt;La guía oficial te da patrones, pero tú necesitas verificar si realmente funcionan en tu caso. Una instrucción que parece más corta puede no reducir tokens. Una instrucción de brevedad puede empeorar la calidad. La única forma fiable es comparar variantes.&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; te permite guardar solicitudes, parametrizar variables, comparar respuestas, añadir aserciones y simular la API para iterar sin gastar tokens. Si ya haces &lt;a href="https://apidog.com/es/blog/api-testing-without-postman-2026?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;pruebas de API sin Postman&lt;/a&gt;, el flujo es el mismo: solo apuntas al endpoint de Mensajes.&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.amazonaws.com%2Fuploads%2Farticles%2F7410k3sre9knat037ywe.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.amazonaws.com%2Fuploads%2Farticles%2F7410k3sre9knat037ywe.png" alt="Imagen" width="799" height="530"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Parametriza la instrucción y la tarea
&lt;/h3&gt;

&lt;p&gt;Crea una solicitud a la API de Mensajes y mueve los valores cambiantes a variables de entorno:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;ANTHROPIC_API_KEY&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;SYSTEM_PROMPT&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;TASK&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight http"&gt;&lt;code&gt;&lt;span class="err"&gt;POST https://api.anthropic.com/v1/messages
x-api-key: {{ANTHROPIC_API_KEY}}
anthropic-version: 2023-06-01
content-type: application/json

{
  "model": "claude-fable-5",
  "max_tokens": 2048,
  "system": "{{SYSTEM_PROMPT}}",
  "messages": [
    { "role": "user", "content": "{{TASK}}" }
  ]
}
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Con esto puedes cambiar una instrucción completa sin editar el cuerpo de la request.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Crea dos variantes A/B
&lt;/h3&gt;

&lt;p&gt;Guarda dos versiones de la misma solicitud:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Variante A:&lt;/strong&gt; prompt base.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Variante B:&lt;/strong&gt; prompt con instrucciones de concisión, alcance o progreso verificado.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Ejemplo de &lt;code&gt;SYSTEM_PROMPT&lt;/code&gt; para la variante B:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Comienza con el resultado. No añadas características, refactorices ni introduzcas abstracciones
más allá de lo que la tarea requiere. Cuando tengas suficiente información para actuar, actúa.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Ejecuta ambas contra la misma &lt;code&gt;TASK&lt;/code&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Compara tokens, latencia y calidad
&lt;/h3&gt;

&lt;p&gt;Después de ejecutar ambas variantes, revisa:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Tokens de salida:&lt;/strong&gt; &lt;code&gt;usage.output_tokens&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Latencia:&lt;/strong&gt; tiempo de respuesta mostrado por Apidog.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Calidad:&lt;/strong&gt; si la respuesta cumple la tarea sin omitir información necesaria.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Alcance:&lt;/strong&gt; si cambió solo lo pedido.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Formato:&lt;/strong&gt; si la salida es estable para tu integración.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Una mejora real debería mantener la calidad y reducir coste, latencia o ruido.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Añade una aserción sobre &lt;code&gt;stop_reason&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;Fable 5 puede devolver:&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;"stop_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;"refusal"&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;Si tu sistema hace fallback silencioso a otro modelo, esto puede cambiar costes y comportamiento. Añade una aserción en Apidog para esperar:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;stop_reason == "end_turn"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Así detectas rechazos como fallos de prueba, no como sorpresas en producción. Trata esta comprobación como parte del &lt;a href="https://apidog.com/es/blog/api-contract-testing?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;contrato&lt;/a&gt; de tu prompt.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. Configura timeouts realistas
&lt;/h3&gt;

&lt;p&gt;Fable 5 puede tardar más en tareas difíciles. Antes de llevarlo a producción:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;define un timeout adecuado en tu cliente;&lt;/li&gt;
&lt;li&gt;prueba respuestas lentas;&lt;/li&gt;
&lt;li&gt;valida que tu UI o servicio no se quede bloqueado;&lt;/li&gt;
&lt;li&gt;considera streaming si tu caso lo requiere;&lt;/li&gt;
&lt;li&gt;baja el esfuerzo si la tarea termina bien pero demasiado tarde.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Si aparecen problemas, la ruta para &lt;a href="https://apidog.com/es/blog/fix-upstream-request-timeout?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;solucionar tiempos de espera de solicitudes upstream&lt;/a&gt; aplica directamente.&lt;/p&gt;

&lt;h3&gt;
  
  
  6. Simula la API para iterar sin coste
&lt;/h3&gt;

&lt;p&gt;Durante el ajuste de prompts, no necesitas llamar siempre a la API real. Usa el servidor de simulación de Apidog para devolver respuestas guardadas con la misma forma:&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;"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;"msg_123"&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;"message"&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;"assistant"&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="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;"text"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"text"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Resultado de prueba"&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;"stop_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;"end_turn"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"usage"&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;"input_tokens"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;300&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"output_tokens"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;120&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;Simula también errores y rechazos:&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;"stop_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;"refusal"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"usage"&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;"input_tokens"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;280&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"output_tokens"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;40&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;Esto te permite probar:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;manejo de errores;&lt;/li&gt;
&lt;li&gt;lógica de retry;&lt;/li&gt;
&lt;li&gt;aserciones;&lt;/li&gt;
&lt;li&gt;timeouts;&lt;/li&gt;
&lt;li&gt;parsing de respuesta;&lt;/li&gt;
&lt;li&gt;comportamiento del cliente.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Cuando quieras medir tokens y latencia reales, vuelve a la API en vivo. Si lo integras en CI, la &lt;a href="https://apidog.com/es/blog/apidog-cli-claude-skills-api-test-automation-guide?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;guía de Apidog CLI y habilidades de Claude&lt;/a&gt; muestra cómo automatizar estas comprobaciones.&lt;/p&gt;

&lt;h2&gt;
  
  
  Checklist de implementación
&lt;/h2&gt;

&lt;p&gt;Antes de desplegar un prompt para Fable 5, valida esto:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;[ ] ¿La tarea necesita &lt;code&gt;high&lt;/code&gt; o puede ejecutarse con &lt;code&gt;medium&lt;/code&gt;/&lt;code&gt;low&lt;/code&gt;?&lt;/li&gt;
&lt;li&gt;[ ] ¿El prompt empieza pidiendo el resultado primero?&lt;/li&gt;
&lt;li&gt;[ ] ¿El alcance está limitado?&lt;/li&gt;
&lt;li&gt;[ ] ¿El modelo tiene suficiente contexto sobre la intención?&lt;/li&gt;
&lt;li&gt;[ ] ¿Hay una aserción para &lt;code&gt;stop_reason&lt;/code&gt;?&lt;/li&gt;
&lt;li&gt;[ ] ¿Mediste &lt;code&gt;usage.output_tokens&lt;/code&gt;?&lt;/li&gt;
&lt;li&gt;[ ] ¿Comparaste latencia entre variantes?&lt;/li&gt;
&lt;li&gt;[ ] ¿Probaste timeouts?&lt;/li&gt;
&lt;li&gt;[ ] ¿Simulaste errores y rechazos?&lt;/li&gt;
&lt;li&gt;[ ] ¿Guardaste la variante ganadora?&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;&lt;strong&gt;¿Una mejor instrucción significa menos tokens en Fable 5?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
A menudo, sí. Una instrucción que pide empezar con el resultado y evitar narración innecesaria puede reducir &lt;code&gt;output_tokens&lt;/code&gt;. Mídelo en Apidog en lugar de asumirlo.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;¿Cuál es la forma más rápida de reducir el coste de Fable 5?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Bajar el nivel de esfuerzo en tareas rutinarias. Reserva &lt;code&gt;high&lt;/code&gt; y &lt;code&gt;xhigh&lt;/code&gt; para problemas donde la capacidad adicional realmente cambie el resultado.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;¿Por qué mi solicitud tarda más que con modelos anteriores?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Fable 5 puede ejecutar tareas difíciles durante más tiempo. Ajusta timeouts, usa streaming si aplica o reduce el esfuerzo si la calidad sigue siendo suficiente.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;¿Por qué recibo respuestas de fallback cuando pedí Fable 5?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Puede haberse producido &lt;code&gt;stop_reason: "refusal"&lt;/code&gt;. Añade una aserción sobre &lt;code&gt;stop_reason&lt;/code&gt; para detectarlo durante las pruebas.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;¿Puedo probar cambios de prompt sin gastar tokens?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Sí. Simula el endpoint de Mensajes en Apidog para probar tu cliente y ejecuta la API real solo cuando necesites medir tokens y latencia reales.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusión
&lt;/h2&gt;

&lt;p&gt;Extender tu uso de Fable 5 consiste en hacer que cada llamada trabaje en el nivel correcto: menos esfuerzo para tareas simples, más capacidad para problemas difíciles, menos verbosidad y alcance bien definido. Usa los patrones de Anthropic como bloques de prompt y valida el resultado con Apidog: parametriza la solicitud, compara variantes A/B, mide tokens y latencia, y añade aserciones contra rechazos. Así conviertes “este prompt parece mejor” en una decisión medible.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Cómo Probar las Llamadas a Herramientas de un Agente de IA con Apidog (Antes de que Fallen en Producción)</title>
      <dc:creator>Roobia</dc:creator>
      <pubDate>Fri, 12 Jun 2026 06:15:31 +0000</pubDate>
      <link>https://dev.to/roobia/como-probar-las-llamadas-a-herramientas-de-un-agente-de-ia-con-apidog-antes-de-que-fallen-en-7ea</link>
      <guid>https://dev.to/roobia/como-probar-las-llamadas-a-herramientas-de-un-agente-de-ia-con-apidog-antes-de-que-fallen-en-7ea</guid>
      <description>&lt;p&gt;Un agente de IA es tan fiable como las API a las que llama. El modelo elige una herramienta, completa argumentos y envía una solicitud; si esa solicitud falla, devuelve una forma inesperada o se queda colgada, el agente tomará decisiones con datos incorrectos. En producción, la capa de API no es un detalle: es el punto donde el agente se vuelve confiable o frágil.&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 construir un agente que llama herramientas reales y cómo 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; como capa de API y arnés de pruebas. Vas a definir endpoints para las herramientas, simularlos para desarrollar offline y escribir aserciones que detecten llamadas rotas antes de que lleguen a usuarios.&lt;/p&gt;

&lt;h2&gt;
  
  
  Qué hace realmente un agente en la capa de API
&lt;/h2&gt;

&lt;p&gt;Un ciclo de agente suele ser este:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;El modelo recibe un objetivo del usuario y una lista de herramientas.&lt;/li&gt;
&lt;li&gt;Devuelve una llamada a herramienta: nombre de herramienta + argumentos JSON.&lt;/li&gt;
&lt;li&gt;Tu código ejecuta esa llamada, normalmente como una solicitud HTTP.&lt;/li&gt;
&lt;li&gt;El resultado vuelve al modelo.&lt;/li&gt;
&lt;li&gt;El modelo llama otra herramienta o responde al usuario.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Los fallos importantes aparecen en los pasos 3 y 4:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;El modelo alucina un argumento.&lt;/li&gt;
&lt;li&gt;La API devuelve &lt;code&gt;422&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;El esquema de respuesta cambió.&lt;/li&gt;
&lt;li&gt;La llamada expira.&lt;/li&gt;
&lt;li&gt;Un límite de velocidad aparece a mitad del ciclo.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Si ya has leído sobre los &lt;a href="https://apidog.com/es/blog/ai-agents-new-api-consumers?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;agentes de IA como los nuevos consumidores de API&lt;/a&gt;, esta es la aplicación práctica: tu agente es un cliente de API y debe probarse con el mismo rigor que cualquier otro consumidor.&lt;/p&gt;

&lt;p&gt;El trabajo se divide en dos partes:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Definir herramientas como operaciones de API reales.&lt;/li&gt;
&lt;li&gt;Verificar que el agente las llama correctamente en condiciones buenas y malas.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Paso 1: Diseñar las herramientas como operaciones de API reales
&lt;/h2&gt;

&lt;p&gt;Antes de escribir código del agente, define cada herramienta como un endpoint en Apidog.&lt;/p&gt;

&lt;p&gt;Por ejemplo:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Herramienta del agente&lt;/th&gt;
&lt;th&gt;Endpoint&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;get_weather&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;GET /weather&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;search_orders&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;GET /orders&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;create_ticket&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;POST /tickets&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Una herramienta &lt;code&gt;get_weather&lt;/code&gt; y el endpoint &lt;code&gt;GET /weather&lt;/code&gt; comparten el mismo contrato:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Parámetros&lt;/li&gt;
&lt;li&gt;Tipos&lt;/li&gt;
&lt;li&gt;Campos requeridos&lt;/li&gt;
&lt;li&gt;Forma de respuesta&lt;/li&gt;
&lt;li&gt;Errores esperados&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;En Apidog, crea un endpoint por herramienta con su esquema OpenAPI:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Parámetros de ruta&lt;/li&gt;
&lt;li&gt;Parámetros de consulta&lt;/li&gt;
&lt;li&gt;Cuerpo de solicitud&lt;/li&gt;
&lt;li&gt;Respuestas tipadas&lt;/li&gt;
&lt;li&gt;Códigos de error esperados&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Esto te da tres ventajas prácticas:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Una única fuente de verdad para el contrato de la herramienta.&lt;/li&gt;
&lt;li&gt;Documentación autogenerada que puedes usar como definición de herramienta.&lt;/li&gt;
&lt;li&gt;Validación de respuesta para detectar desviaciones del esquema.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Este enfoque schema-first es el mismo que se usa en un buen proceso de &lt;a href="https://apidog.com/es/blog/api-design-tools?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;diseño de API&lt;/a&gt;. Para agentes, la ventaja es directa: si la herramienta y el endpoint salen del mismo contrato, el modelo no debería llamar algo que la API no soporta.&lt;/p&gt;

&lt;h2&gt;
  
  
  Paso 2: Simular las herramientas para construir offline
&lt;/h2&gt;

&lt;p&gt;No conviene que cada ejecución local llame APIs reales que:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Cuestan dinero.&lt;/li&gt;
&lt;li&gt;Tienen límites de velocidad.&lt;/li&gt;
&lt;li&gt;Todavía no existen.&lt;/li&gt;
&lt;li&gt;Cambian durante el desarrollo.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Apidog puede generar un servidor mock desde el esquema definido. Cada endpoint de herramienta devuelve datos de ejemplo válidos sin necesitar backend.&lt;/p&gt;

&lt;p&gt;Con esto puedes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Construir el ciclo completo del agente antes de tener la API real.&lt;/li&gt;
&lt;li&gt;Ejecutar pruebas de integración en CI sin tocar endpoints de pago.&lt;/li&gt;
&lt;li&gt;Forzar respuestas específicas para probar errores:

&lt;ul&gt;
&lt;li&gt;Resultado vacío&lt;/li&gt;
&lt;li&gt;&lt;code&gt;500&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Campo malformado&lt;/li&gt;
&lt;li&gt;Timeout&lt;/li&gt;
&lt;li&gt;&lt;code&gt;429&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Durante desarrollo, apunta el ejecutor de herramientas del agente a la URL base del mock:&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="nv"&gt;TOOL_BASE_URL&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;https://mock-api.example.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;En producción, cambia la URL base:&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="nv"&gt;TOOL_BASE_URL&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;https://api.example.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;El modelo llama &lt;code&gt;get_weather&lt;/code&gt;, tu código llama al mock de Apidog y recibe una respuesta válida. Cuando pases a producción, solo cambias la variable de entorno.&lt;/p&gt;

&lt;p&gt;Este patrón hace que el desarrollo de agentes sea rápido y determinista. Es la misma lógica detrás de un flujo serio de &lt;a href="https://apidog.com/es/blog/ai-agents-api-testing?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;pruebas de agentes de IA&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Paso 3: Conectar el agente para que llame a las herramientas
&lt;/h2&gt;

&lt;p&gt;Con los endpoints y mocks listos, el código del agente debe mantenerse simple.&lt;/p&gt;

&lt;p&gt;Ejemplo de bucle de llamada a herramientas usando la API de Mensajes de Claude. Las definiciones de herramientas reflejan los esquemas creados en Apidog:&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;anthropic&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;requests&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="n"&gt;anthropic&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Anthropic&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="c1"&gt;# Mock de Apidog en desarrollo, API real en producción
&lt;/span&gt;&lt;span class="n"&gt;TOOL_BASE&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;TOOL_BASE_URL&lt;/span&gt;&lt;span class="sh"&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="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_weather&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;Get current weather for a city&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;input_schema&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;city&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="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;city&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;def&lt;/span&gt; &lt;span class="nf"&gt;run_tool&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;args&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;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;get_weather&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;requests&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="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;TOOL_BASE&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;/weather&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="n"&gt;params&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;city&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;city&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]},&lt;/span&gt;
            &lt;span class="n"&gt;timeout&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;10&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="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;raise_for_status&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&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="k"&gt;raise&lt;/span&gt; &lt;span class="nc"&gt;ValueError&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Unknown tool: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="si"&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;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;What should I wear in Tokyo today?&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="k"&gt;while&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;resp&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;messages&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;claude-fable-5&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;max_tokens&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;1024&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="n"&gt;messages&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;messages&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="n"&gt;resp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;stop_reason&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;tool_use&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;block&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;next&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;b&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;resp&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;b&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nb"&gt;type&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;tool_use&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

        &lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;run_tool&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;block&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;block&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nb"&gt;input&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

        &lt;span class="n"&gt;messages&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;append&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;assistant&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="n"&gt;resp&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="p"&gt;})&lt;/span&gt;

        &lt;span class="n"&gt;messages&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;append&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="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;tool_result&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;tool_use_id&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;block&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nb"&gt;id&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="nf"&gt;str&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;result&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;else&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;resp&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="mi"&gt;0&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="k"&gt;break&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Las líneas más importantes no son las del modelo, sino estas:&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;timeout&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;
&lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;raise_for_status&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Sin &lt;code&gt;timeout&lt;/code&gt;, una llamada colgada puede bloquear el ciclo.&lt;br&gt;&lt;br&gt;
Sin &lt;code&gt;raise_for_status()&lt;/code&gt;, un &lt;code&gt;500&lt;/code&gt;, &lt;code&gt;422&lt;/code&gt; o &lt;code&gt;429&lt;/code&gt; puede volver al modelo como si fuera un resultado válido.&lt;/p&gt;

&lt;p&gt;Para ver más patrones de agentes en flujos de trabajo de API, revisa &lt;a href="https://apidog.com/es/blog/5-ai-agents-api-workflow?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;5 agentes de IA para su flujo de trabajo de API&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;
  
  
  Paso 4: Probar las llamadas a herramientas, no solo las “vibes”
&lt;/h2&gt;

&lt;p&gt;Muchos equipos prueban el agente completo y asumen que si respondió bien una vez, está listo. Eso no alcanza.&lt;/p&gt;

&lt;p&gt;Primero prueba cada endpoint de herramienta de forma aislada en Apidog.&lt;/p&gt;

&lt;p&gt;Para cada herramienta, crea una solicitud guardada y añade aserciones como:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;El estado es &lt;code&gt;200&lt;/code&gt; para una entrada válida.&lt;/li&gt;
&lt;li&gt;La respuesta coincide con el esquema OpenAPI.&lt;/li&gt;
&lt;li&gt;Los campos que leerá el modelo existen.&lt;/li&gt;
&lt;li&gt;Los tipos son correctos.&lt;/li&gt;
&lt;li&gt;El tiempo de respuesta está dentro del timeout del agente.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Ejemplo de contrato esperado para &lt;code&gt;GET /weather&lt;/code&gt;:&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;"city"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Tokyo"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"temperature"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;24&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"condition"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"cloudy"&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;Aserciones mínimas:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;city&lt;/code&gt; existe y es &lt;code&gt;string&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;temperature&lt;/code&gt; existe y es &lt;code&gt;number&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;condition&lt;/code&gt; existe y es &lt;code&gt;string&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;La respuesta cumple el esquema.&lt;/li&gt;
&lt;li&gt;La latencia es menor que el timeout configurado.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Después prueba caminos infelices.&lt;/p&gt;

&lt;h3&gt;
  
  
  Casos que deberías cubrir
&lt;/h3&gt;

&lt;p&gt;Argumentos malformados:&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;"city"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&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;Resultado esperado:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight http"&gt;&lt;code&gt;&lt;span class="err"&gt;422 Unprocessable Entity
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Tipo incorrecto:&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;"city"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;123&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;Resultado esperado:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight http"&gt;&lt;code&gt;&lt;span class="err"&gt;400 Bad Request
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Respuesta vacía:&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;"results"&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;Resultado esperado: el agente debe reconocer “sin datos” y no inventar una respuesta.&lt;/p&gt;

&lt;p&gt;Error interno simulado:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight http"&gt;&lt;code&gt;&lt;span class="err"&gt;500 Internal Server Error
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Resultado esperado: &lt;code&gt;run_tool&lt;/code&gt; debe lanzar una excepción o devolver un error controlado, no alimentar basura al modelo.&lt;/p&gt;

&lt;p&gt;Esto es prueba de contrato aplicada a herramientas de agente. Es la misma disciplina descrita en &lt;a href="https://apidog.com/es/blog/api-contract-testing?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;pruebas de contrato de API&lt;/a&gt;, pero enfocada en los endpoints que el modelo llama.&lt;/p&gt;

&lt;p&gt;Si la forma de respuesta cambia, la aserción falla en CI antes de que el agente razone sobre una carga útil rota.&lt;/p&gt;

&lt;h2&gt;
  
  
  Paso 5: Gestionar reintentos, tiempos de espera y límites de velocidad
&lt;/h2&gt;

&lt;p&gt;Los agentes amplifican las API inestables. Una app tradicional puede hacer un reintento. Un agente puede volver a llamar la misma herramienta varias veces dentro del mismo ciclo y agotar rápido tus límites.&lt;/p&gt;

&lt;p&gt;Implementa controles explícitos y pruébalos.&lt;/p&gt;

&lt;h3&gt;
  
  
  Tiempos de espera
&lt;/h3&gt;

&lt;p&gt;Cada solicitud de herramienta debe tener timeout:&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;requests&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="n"&gt;url&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;timeout&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Luego simula en Apidog un endpoint lento y valida que el cliente falla de forma controlada.&lt;/p&gt;

&lt;h3&gt;
  
  
  Reintentos con retroceso exponencial
&lt;/h3&gt;

&lt;p&gt;Reintenta solo errores transitorios y limita los intentos.&lt;/p&gt;

&lt;p&gt;Ejemplo básico:&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;time&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;get_with_retry&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;url&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;params&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;3&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="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;requests&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="n"&gt;url&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;params&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;params&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;timeout&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;10&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="nf"&gt;raise_for_status&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
            &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&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="k"&gt;except&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;RequestException&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;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;sleep_seconds&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="n"&gt;attempt&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;sleep_seconds&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Prueba este comportamiento con un mock que:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Falla.&lt;/li&gt;
&lt;li&gt;Falla.&lt;/li&gt;
&lt;li&gt;Responde correctamente.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;El agente debe recuperarse, no entrar en bucle infinito.&lt;/p&gt;

&lt;h3&gt;
  
  
  Límites de velocidad
&lt;/h3&gt;

&lt;p&gt;Espera respuestas &lt;code&gt;429&lt;/code&gt; bajo carga. Simula una respuesta con límite de velocidad y verifica que el agente espera o aborta de forma controlada.&lt;/p&gt;

&lt;p&gt;Si ya has trabajado con límites en APIs de modelos, el problema es similar al de los &lt;a href="https://apidog.com/es/blog/gpt-api-rate-limits?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;límites de velocidad de la API de GPT&lt;/a&gt;. En agentes, el riesgo es mayor porque el ciclo puede multiplicar llamadas.&lt;/p&gt;

&lt;h3&gt;
  
  
  Corte de circuito
&lt;/h3&gt;

&lt;p&gt;Después de N fallos consecutivos, deja de llamar la herramienta y permite que el agente informe el problema.&lt;/p&gt;

&lt;p&gt;Ejemplo simplificado:&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="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;CircuitBreaker&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;__init__&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;max_failures&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="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;max_failures&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;max_failures&lt;/span&gt;
        &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;failures&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;
        &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nb"&gt;open&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="bp"&gt;False&lt;/span&gt;

    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;record_success&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;failures&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;
        &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nb"&gt;open&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="bp"&gt;False&lt;/span&gt;

    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;record_failure&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;failures&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;failures&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;=&lt;/span&gt; &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;max_failures&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nb"&gt;open&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="bp"&gt;True&lt;/span&gt;

    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;allow_request&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nb"&gt;open&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Úsalo antes de ejecutar la 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;breaker&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;CircuitBreaker&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;max_failures&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="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;safe_run_tool&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;args&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;breaker&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;allow_request&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
        &lt;span class="k"&gt;raise&lt;/span&gt; &lt;span class="nc"&gt;RuntimeError&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Tool temporarily disabled after repeated failures&lt;/span&gt;&lt;span class="sh"&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="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;run_tool&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="n"&gt;breaker&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;record_success&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt;
    &lt;span class="k"&gt;except&lt;/span&gt; &lt;span class="nb"&gt;Exception&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;breaker&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;record_failure&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
        &lt;span class="k"&gt;raise&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Estos escenarios deben ejecutarse de forma repetible en Apidog para que una regresión aparezca como prueba fallida, no como incidente de producción.&lt;/p&gt;

&lt;h2&gt;
  
  
  Paso 6: Ejecutar pruebas end-to-end contra mocks en CI
&lt;/h2&gt;

&lt;p&gt;Conecta todo en CI:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Configura &lt;code&gt;TOOL_BASE_URL&lt;/code&gt; apuntando al mock de Apidog.&lt;/li&gt;
&lt;li&gt;Ejecuta el agente con objetivos de usuario fijos.&lt;/li&gt;
&lt;li&gt;Verifica la respuesta final.&lt;/li&gt;
&lt;li&gt;Verifica la secuencia de llamadas a herramientas.&lt;/li&gt;
&lt;li&gt;Falla el pipeline si cambia el contrato o aparece un error inesperado.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Ejemplo de variables:&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;TOOL_BASE_URL&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"https://mock-api.example.com"&lt;/span&gt;
&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;ANTHROPIC_API_KEY&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"..."&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Ejemplo de prueba de alto nivel:&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="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;test_agent_uses_weather_tool&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
    &lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;run_agent&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;What should I wear in Tokyo today?&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="k"&gt;assert&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Tokyo&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt;
    &lt;span class="k"&gt;assert&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;wear&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;lower&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="ow"&gt;or&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;clothing&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;lower&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Como los mocks son deterministas, la misma entrada produce respuestas estables. Esto reduce la inestabilidad típica de las pruebas con agentes.&lt;/p&gt;

&lt;p&gt;Cuando el flujo esté cubierto con mocks, añade una prueba de humo pequeña contra APIs reales. La división recomendada es:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Muchas pruebas contra mocks deterministas.&lt;/li&gt;
&lt;li&gt;Pocas pruebas en vivo contra APIs reales.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Este enfoque hace que las &lt;a href="https://apidog.com/es/blog/agentic-ai-testing?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;pruebas de IA agéntica&lt;/a&gt; sean prácticas.&lt;/p&gt;

&lt;h2&gt;
  
  
  Lista de verificación para un agente confiable
&lt;/h2&gt;

&lt;p&gt;Usa esta checklist antes de mover un agente a producción:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;[ ] Cada herramienta está definida como una operación de API real con esquema OpenAPI.&lt;/li&gt;
&lt;li&gt;[ ] Hay mocks para cada herramienta.&lt;/li&gt;
&lt;li&gt;[ ] El agente puede ejecutarse contra mocks usando una variable de entorno.&lt;/li&gt;
&lt;li&gt;[ ] Cada endpoint de herramienta tiene aserciones de estado, esquema y tiempo.&lt;/li&gt;
&lt;li&gt;[ ] Los argumentos inválidos se prueban explícitamente.&lt;/li&gt;
&lt;li&gt;[ ] Los errores &lt;code&gt;400&lt;/code&gt;, &lt;code&gt;422&lt;/code&gt;, &lt;code&gt;429&lt;/code&gt; y &lt;code&gt;500&lt;/code&gt; tienen comportamiento definido.&lt;/li&gt;
&lt;li&gt;[ ] Los resultados vacíos no hacen que el agente invente datos.&lt;/li&gt;
&lt;li&gt;[ ] Cada llamada HTTP tiene timeout.&lt;/li&gt;
&lt;li&gt;[ ] Los reintentos tienen límite y retroceso exponencial.&lt;/li&gt;
&lt;li&gt;[ ] Hay corte de circuito después de fallos repetidos.&lt;/li&gt;
&lt;li&gt;[ ] CI ejecuta el ciclo completo contra mocks deterministas.&lt;/li&gt;
&lt;li&gt;[ ] Existe una prueba de humo pequeña contra APIs reales.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Si cumples estos puntos, puedes describir la fiabilidad del agente con pruebas, no con esperanza.&lt;/p&gt;

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

&lt;h3&gt;
  
  
  ¿Por qué usar un cliente de API para probar un agente en lugar de simplemente ejecutar el agente?
&lt;/h3&gt;

&lt;p&gt;Porque ejecutar el agente completo mezcla dos fuentes de fallo:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Razonamiento del modelo.&lt;/li&gt;
&lt;li&gt;Capa de herramientas/API.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Si una prueba falla, no sabes cuál de las dos falló. Probar cada endpoint en Apidog aísla la capa de API y facilita el diagnóstico.&lt;/p&gt;

&lt;h3&gt;
  
  
  ¿Tengo que construir las APIs reales antes de construir el agente?
&lt;/h3&gt;

&lt;p&gt;No. Define los contratos de herramientas como esquemas en Apidog, genera mocks y construye el ciclo completo contra esos mocks. Más tarde, cambia a endpoints reales mediante una variable de entorno.&lt;/p&gt;

&lt;h3&gt;
  
  
  ¿Cómo evito que mi agente entre en un bucle infinito con una herramienta que falla?
&lt;/h3&gt;

&lt;p&gt;Implementa tres controles:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Límite de reintentos.&lt;/li&gt;
&lt;li&gt;Retroceso exponencial.&lt;/li&gt;
&lt;li&gt;Corte de circuito después de fallos repetidos.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Después prueba cada caso contra un mock que devuelva errores.&lt;/p&gt;

&lt;h3&gt;
  
  
  ¿Puedo probar el agente sin gastar dinero en llamadas al modelo y a la API?
&lt;/h3&gt;

&lt;p&gt;En gran parte, sí. Simula las APIs de herramientas en Apidog para pruebas de integración deterministas. Mantén las llamadas reales al modelo y a APIs de pago solo para un conjunto pequeño de pruebas de humo.&lt;/p&gt;

&lt;h3&gt;
  
  
  ¿Funciona con frameworks como LangChain o el SDK de Agente de Claude?
&lt;/h3&gt;

&lt;p&gt;Sí. La capa de herramientas normalmente termina siendo HTTP. El framework puede manejar el bucle, pero tus llamadas a herramientas pueden apuntar a mocks de Apidog en pruebas y a endpoints reales en producción.&lt;/p&gt;

&lt;p&gt;Para un ejemplo de este tipo de bucles, revisa la &lt;a href="https://apidog.com/es/blog/a-comprehensive-guide-to-the-claude-code-sdk?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;guía del SDK de Código de Claude&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusión
&lt;/h2&gt;

&lt;p&gt;Un agente fiable no depende solo de un prompt mejor. Depende de una capa de herramientas probada.&lt;/p&gt;

&lt;p&gt;Define tus herramientas como operaciones de API reales, simúlalas para desarrollar rápido, valida cada respuesta y prueba los fallos a propósito. Apidog te da un lugar para diseñar esos endpoints, simularlos y ejecutarlos como arnés de pruebas, de modo que el comportamiento del agente sea verificable antes de llegar a producción.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Claude Fable 5 y Cambios en la API de Mythos: Qué Sigue Funcionando y Cómo Probarlo</title>
      <dc:creator>Roobia</dc:creator>
      <pubDate>Fri, 12 Jun 2026 05:47:15 +0000</pubDate>
      <link>https://dev.to/roobia/claude-fable-5-y-cambios-en-la-api-de-mythos-que-sigue-funcionando-y-como-probarlo-2pg4</link>
      <guid>https://dev.to/roobia/claude-fable-5-y-cambios-en-la-api-de-mythos-que-sigue-funcionando-y-como-probarlo-2pg4</guid>
      <description>&lt;p&gt;Anthropic lanzó sus modelos Fable y Mythos con cambios que afectan directamente a las integraciones en producción: una retención de datos de 30 días para tráfico de esos modelos y ajustes en las barreras de seguridad que pueden modificar respuestas, rechazos y streaming sin romper necesariamente el contrato de la API.&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 usas la API de Claude, no asumas que tu integración se comporta igual que antes. En esta guía verás qué sigue estable, qué debes validar y cómo montar pruebas reproducibles con &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 detectar cambios antes de que lleguen a tus usuarios.&lt;/p&gt;

&lt;h2&gt;
  
  
  Qué cambió realmente
&lt;/h2&gt;

&lt;p&gt;Hay tres cambios o áreas de riesgo que conviene separar.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Retención de datos
&lt;/h3&gt;

&lt;p&gt;El cambio principal es una ventana de retención de 30 días aplicada a solicitudes de Fable y Mythos.&lt;/p&gt;

&lt;p&gt;En la práctica, esto significa que los datos de solicitud y respuesta vinculados a esos modelos pueden conservarse durante un periodo fijo. Si tu producto promete a sus usuarios que no retiene prompts, o que minimiza datos enviados a proveedores externos, debes revisar esa promesa teniendo en cuenta el comportamiento del proveedor upstream.&lt;/p&gt;

&lt;p&gt;Acción recomendada:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Audita qué datos envías en cada prompt.&lt;/li&gt;
&lt;li&gt;Elimina campos que no sean necesarios.&lt;/li&gt;
&lt;li&gt;Documenta internamente qué modelos usan retención de 30 días.&lt;/li&gt;
&lt;li&gt;Revisa la documentación oficial vigente de Anthropic antes de actualizar políticas públicas.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  2. Barreras de seguridad
&lt;/h3&gt;

&lt;p&gt;También se discutieron cambios en las barreras de seguridad de Fable. El problema práctico para desarrolladores no es que existan guardrails, sino que el comportamiento puede cambiar.&lt;/p&gt;

&lt;p&gt;Un prompt que ayer devolvía una respuesta válida puede hoy:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;ser rechazado;&lt;/li&gt;
&lt;li&gt;ser reformulado;&lt;/li&gt;
&lt;li&gt;devolver una respuesta parcial;&lt;/li&gt;
&lt;li&gt;activar una intervención durante streaming.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Si tu aplicación depende de una salida estable, esto puede romper parsers, flujos de agentes o lógica downstream.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Acceso programático
&lt;/h3&gt;

&lt;p&gt;La superficie principal de la API no se reemplazó.&lt;/p&gt;

&lt;p&gt;Siguen funcionando:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;claves existentes;&lt;/li&gt;
&lt;li&gt;encabezado &lt;code&gt;x-api-key&lt;/code&gt;;&lt;/li&gt;
&lt;li&gt;llamadas a &lt;code&gt;messages&lt;/code&gt;;&lt;/li&gt;
&lt;li&gt;prompts &lt;code&gt;system&lt;/code&gt;;&lt;/li&gt;
&lt;li&gt;array &lt;code&gt;messages&lt;/code&gt;;&lt;/li&gt;
&lt;li&gt;uso de herramientas;&lt;/li&gt;
&lt;li&gt;streaming.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;El riesgo no está en que el endpoint deje de responder. El riesgo está en que el comportamiento cambie debajo del mismo contrato.&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.amazonaws.com%2Fuploads%2Farticles%2F5vsodbjhz8o70hbtpz86.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.amazonaws.com%2Fuploads%2Farticles%2F5vsodbjhz8o70hbtpz86.png" alt="Captura de referencia sobre los cambios de Fable y Mythos" width="800" height="883"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Qué sigue funcionando
&lt;/h2&gt;

&lt;p&gt;Antes de reescribir código, confirma qué partes permanecen estables.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Autenticación:&lt;/strong&gt; las claves de API y el encabezado &lt;code&gt;x-api-key&lt;/code&gt; siguen funcionando. No necesitas rotar claves por este cambio, aunque la rotación periódica sigue siendo una buena práctica. Revisa la &lt;a href="https://docs.anthropic.com/en/api/getting-started" rel="noopener noreferrer"&gt;referencia de la API&lt;/a&gt; para el contrato actual de encabezados.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;API de Messages:&lt;/strong&gt; el cuerpo de solicitud, &lt;code&gt;model&lt;/code&gt;, &lt;code&gt;max_tokens&lt;/code&gt;, prompts &lt;code&gt;system&lt;/code&gt; y &lt;code&gt;messages&lt;/code&gt; mantienen la misma estructura.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Uso de herramientas:&lt;/strong&gt; las definiciones de herramientas y el ciclo &lt;code&gt;tool_use&lt;/code&gt; / &lt;code&gt;tool_result&lt;/code&gt; siguen usando el mismo patrón.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Streaming:&lt;/strong&gt; los eventos enviados por servidor siguen transmitiendo tokens, aunque el contenido puede cambiar si una barrera de seguridad interviene.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;IDs de modelos:&lt;/strong&gt; si fijas un modelo por ID completo en lugar de usar un alias flotante, reduces el riesgo de deriva silenciosa.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;No necesitas una reescritura de emergencia. Necesitas pruebas que demuestren que los supuestos de tu aplicación siguen siendo válidos.&lt;/p&gt;

&lt;h2&gt;
  
  
  Cómo probar tu integración con Apidog
&lt;/h2&gt;

&lt;p&gt;Puedes leer changelogs, pero la única forma de saber cómo responde tu integración es ejecutar solicitudes reales, guardar respuestas y automatizar verificaciones.&lt;/p&gt;

&lt;p&gt;Con &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; puedes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;definir solicitudes contra la API de Claude;&lt;/li&gt;
&lt;li&gt;guardar respuestas de referencia;&lt;/li&gt;
&lt;li&gt;crear aserciones;&lt;/li&gt;
&lt;li&gt;simular respuestas del upstream;&lt;/li&gt;
&lt;li&gt;ejecutar pruebas automatizadas;&lt;/li&gt;
&lt;li&gt;compartir casos con tu equipo.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Si vienes de Postman o quieres estandarizar pruebas, también puedes revisar esta guía sobre &lt;a href="https://apidog.com/es/blog/api-testing-without-postman-2026?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;pruebas de API sin Postman&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.amazonaws.com%2Fuploads%2Farticles%2Fyphyeg1yxpntym6y6zdz.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.amazonaws.com%2Fuploads%2Farticles%2Fyphyeg1yxpntym6y6zdz.png" alt="Flujo de pruebas de API en Apidog" width="799" height="530"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Captura una línea base conocida
&lt;/h2&gt;

&lt;p&gt;Crea una solicitud en Apidog contra la API de Messages usando un prompt representativo de producción.&lt;/p&gt;

&lt;p&gt;Evita prompts de juguete. Usa entradas que se parezcan a las que realmente procesa tu aplicación.&lt;/p&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight http"&gt;&lt;code&gt;&lt;span class="err"&gt;POST https://api.anthropic.com/v1/messages
x-api-key: {{ANTHROPIC_API_KEY}}
anthropic-version: 2023-06-01
content-type: application/json

{
  "model": "claude-fable-5",
  "max_tokens": 1024,
  "messages": [
    {
      "role": "user",
      "content": "Summarize this support ticket and label its priority: ..."
    }
  ]
}
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Buenas prácticas:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Guarda &lt;code&gt;ANTHROPIC_API_KEY&lt;/code&gt; como variable de entorno en Apidog.&lt;/li&gt;
&lt;li&gt;No codifiques claves en solicitudes guardadas.&lt;/li&gt;
&lt;li&gt;Usa un ID de modelo fijo cuando pruebes rutas críticas.&lt;/li&gt;
&lt;li&gt;Guarda la respuesta como línea base.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Este patrón también aplica si estás probando Claude, &lt;a href="https://apidog.com/es/blog/a-comprehensive-guide-to-the-claude-code-sdk?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;el SDK de Claude Code&lt;/a&gt; u otro componente que dependa de la misma API.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Añade aserciones sobre la respuesta
&lt;/h2&gt;

&lt;p&gt;No basta con mirar manualmente la respuesta. Convierte la línea base en una prueba automatizada.&lt;/p&gt;

&lt;p&gt;Aserciones útiles:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;El código HTTP es &lt;code&gt;200&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;stop_reason&lt;/code&gt; es &lt;code&gt;end_turn&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;La respuesta incluye el campo que tu aplicación parsea.&lt;/li&gt;
&lt;li&gt;El formato sigue siendo válido.&lt;/li&gt;
&lt;li&gt;La latencia está por debajo de tu timeout.&lt;/li&gt;
&lt;li&gt;No aparece una forma de rechazo inesperada.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Ejemplo conceptual de validación:&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;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;status is 200&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="nx"&gt;response&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;have&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;status&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;200&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;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;stop_reason is end_turn&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="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;json&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="nf"&gt;expect&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="nx"&gt;stop_reason&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;eql&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;end_turn&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;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;response contains priority label&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="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;json&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="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;text&lt;/span&gt; &lt;span class="o"&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;stringify&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="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;text&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;priority&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 sintaxis exacta dependerá del entorno de scripting que uses, pero el objetivo es el mismo: probar el contrato real que tu aplicación asume.&lt;/p&gt;

&lt;p&gt;Este enfoque es similar a las &lt;a href="https://apidog.com/es/blog/api-contract-testing?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;pruebas de contrato de API&lt;/a&gt;: defines qué comportamiento es aceptable y fallas rápido cuando cambia.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Prueba rechazos y guardrails de forma explícita
&lt;/h2&gt;

&lt;p&gt;Los rechazos son fáciles de ignorar hasta que rompen un flujo de producción.&lt;/p&gt;

&lt;p&gt;Crea una colección pequeña con prompts cercanos a tus límites de contenido:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;entradas que suelen activar filtros;&lt;/li&gt;
&lt;li&gt;prompts ambiguos;&lt;/li&gt;
&lt;li&gt;prompts que antes eran aceptados;&lt;/li&gt;
&lt;li&gt;prompts que tu aplicación reformula automáticamente;&lt;/li&gt;
&lt;li&gt;casos donde esperas una negativa segura.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Guarda las respuestas esperadas y añade aserciones.&lt;/p&gt;

&lt;p&gt;Por ejemplo:&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;"expected_behavior"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"safe_refusal"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"must_not_include"&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;"internal stack trace"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"raw policy text"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"must_include"&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;"no puedo ayudar"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"alternativa segura"&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;La idea no es evitar los guardrails. Es detectar cuándo cambian de forma que rompe tu producto.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Simula Anthropic para que CI no dependa de la API en vivo
&lt;/h2&gt;

&lt;p&gt;No conviene que tu suite de CI llame siempre a una API externa de pago, con límites de velocidad y comportamiento variable.&lt;/p&gt;

&lt;p&gt;Usa el servidor de mocks de Apidog para crear un endpoint falso de Messages con respuestas predefinidas.&lt;/p&gt;

&lt;p&gt;Casos que deberías simular:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;respuesta correcta;&lt;/li&gt;
&lt;li&gt;rechazo por barrera de seguridad;&lt;/li&gt;
&lt;li&gt;error HTTP;&lt;/li&gt;
&lt;li&gt;timeout;&lt;/li&gt;
&lt;li&gt;respuesta truncada;&lt;/li&gt;
&lt;li&gt;streaming parcial;&lt;/li&gt;
&lt;li&gt;payload con estructura inesperada.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Ejemplo de respuesta mock:&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;"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;"msg_mock_123"&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;"message"&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;"assistant"&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;"claude-fable-5"&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="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;"text"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"text"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"{&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;priority&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;:&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;high&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;,&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;summary&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;:&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;El cliente no puede acceder a su cuenta.&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&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;"stop_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;"end_turn"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"stop_sequence"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"usage"&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;"input_tokens"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;120&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"output_tokens"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;32&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;Luego cambia la URL base de tu aplicación:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# Producción
ANTHROPIC_BASE_URL=https://api.anthropic.com

# Desarrollo / CI
ANTHROPIC_BASE_URL=https://mock.example.apidog
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Así pruebas tu código sin gastar tokens ni depender del comportamiento vivo del modelo.&lt;/p&gt;

&lt;p&gt;Si estás construyendo agentes, este mismo patrón es útil para una &lt;a href="https://apidog.com/es/blog/ai-agents-api-testing?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;configuración de pruebas de agentes de IA&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Audita datos sensibles por la retención de 30 días
&lt;/h2&gt;

&lt;p&gt;Si la retención de 30 días afecta tu cumplimiento, no lo trates como una nota legal aislada. Llévalo a tus pruebas y revisiones técnicas.&lt;/p&gt;

&lt;p&gt;Checklist de auditoría:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;¿Qué endpoints llaman a Fable o Mythos?&lt;/li&gt;
&lt;li&gt;¿Qué campos del usuario salen en cada prompt?&lt;/li&gt;
&lt;li&gt;¿Estás enviando datos personales innecesarios?&lt;/li&gt;
&lt;li&gt;¿Puedes resumir, anonimizar o truncar antes de enviar?&lt;/li&gt;
&lt;li&gt;¿Tus logs internos guardan el mismo prompt?&lt;/li&gt;
&lt;li&gt;¿Tu política de privacidad depende de la retención del proveedor?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Ejemplo de reducción de payload antes de enviar al modelo:&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;buildSupportPrompt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;ticket&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="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;customer_tier&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;ticket&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;customer_tier&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;issue_type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;ticket&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;issue_type&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;message&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;ticket&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="c1"&gt;// Evita enviar campos que no sean necesarios:&lt;/span&gt;
    &lt;span class="c1"&gt;// email: ticket.email,&lt;/span&gt;
    &lt;span class="c1"&gt;// phone: ticket.phone,&lt;/span&gt;
    &lt;span class="c1"&gt;// billing_address: ticket.billing_address&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;No puedes cambiar la política de retención del proveedor, pero sí puedes controlar qué datos le entregas.&lt;/p&gt;

&lt;h2&gt;
  
  
  6. Prueba timeouts, latencia y reintentos
&lt;/h2&gt;

&lt;p&gt;Los cambios silenciosos suelen aparecer bajo carga.&lt;/p&gt;

&lt;p&gt;Ejecuta la misma solicitud repetidamente y observa:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;latencia media;&lt;/li&gt;
&lt;li&gt;p95 / p99;&lt;/li&gt;
&lt;li&gt;errores intermitentes;&lt;/li&gt;
&lt;li&gt;respuestas parciales;&lt;/li&gt;
&lt;li&gt;activaciones inesperadas de guardrails;&lt;/li&gt;
&lt;li&gt;comportamiento de streaming.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Define un timeout realista en tu cliente:&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;controller&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;AbortController&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;timeout&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;setTimeout&lt;/span&gt;&lt;span class="p"&gt;(()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;controller&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;abort&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt; &lt;span class="mi"&gt;30000&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="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;fetch&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.anthropic.com/v1/messages&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;method&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;POST&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;headers&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;x-api-key&lt;/span&gt;&lt;span class="dl"&gt;"&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;ANTHROPIC_API_KEY&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;anthropic-version&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;2023-06-01&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;content-type&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;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;body&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;stringify&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;payload&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="na"&gt;signal&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;controller&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;signal&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;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;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;`Anthropic API error: &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="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;await&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="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;finally&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nf"&gt;clearTimeout&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;timeout&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;Añade reintentos con cuidado. No reintentes indefinidamente ni dupliques operaciones no idempotentes.&lt;/p&gt;

&lt;p&gt;Ejemplo simple:&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;async&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;callWithRetry&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;fn&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;retries&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;)&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;lastError&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;retries&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="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="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;fn&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;lastError&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;error&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;attempt&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="nx"&gt;retries&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;break&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;delay&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;500&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;pow&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;attempt&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
      &lt;span class="k"&gt;await&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="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;delay&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;throw&lt;/span&gt; &lt;span class="nx"&gt;lastError&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;Si estás investigando lentitud upstream, este enfoque complementa la guía para &lt;a href="https://apidog.com/es/blog/fix-upstream-request-timeout?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;solucionar tiempos de espera de solicitudes upstream&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Lista de verificación práctica
&lt;/h2&gt;

&lt;p&gt;Antes de dar por segura tu integración, revisa esto:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;[ ] Fija IDs completos de modelos en rutas de producción.&lt;/li&gt;
&lt;li&gt;[ ] Evita alias flotantes si necesitas comportamiento estable.&lt;/li&gt;
&lt;li&gt;[ ] Guarda una respuesta base para cada prompt crítico.&lt;/li&gt;
&lt;li&gt;[ ] Añade aserciones sobre estado HTTP, &lt;code&gt;stop_reason&lt;/code&gt; y campos parseados.&lt;/li&gt;
&lt;li&gt;[ ] Prueba rechazos y guardrails explícitamente.&lt;/li&gt;
&lt;li&gt;[ ] Captura respuestas de error y streaming parcial.&lt;/li&gt;
&lt;li&gt;[ ] Simula la API de Messages para desarrollo y CI.&lt;/li&gt;
&lt;li&gt;[ ] Audita prompts con la retención de 30 días en mente.&lt;/li&gt;
&lt;li&gt;[ ] Elimina datos sensibles que no sean necesarios.&lt;/li&gt;
&lt;li&gt;[ ] Prueba timeouts, reintentos y latencia bajo carga.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;h3&gt;
  
  
  ¿Necesito cambiar mis claves de API?
&lt;/h3&gt;

&lt;p&gt;No. La autenticación no ha cambiado. Puedes seguir usando tus claves actuales. Rotarlas periódicamente sigue siendo buena práctica, pero estos cambios no obligan a hacerlo.&lt;/p&gt;

&lt;h3&gt;
  
  
  ¿Mi código actual de Messages dejará de funcionar?
&lt;/h3&gt;

&lt;p&gt;El contrato de solicitud y respuesta sigue estable. Tu código debería seguir funcionando si usa la API de Messages correctamente.&lt;/p&gt;

&lt;p&gt;Lo que puede cambiar es el comportamiento: rechazos, latencia, contenido de respuestas y streaming bajo guardrails.&lt;/p&gt;

&lt;h3&gt;
  
  
  ¿Qué implica la retención de 30 días?
&lt;/h3&gt;

&lt;p&gt;Los informes describen una ventana de retención de 30 días para tráfico de Fable y Mythos. Si tus compromisos de privacidad dependen de cómo el proveedor maneja los datos, revisa qué envías y consulta la documentación oficial actual de Anthropic.&lt;/p&gt;

&lt;h3&gt;
  
  
  ¿Cómo detecto cambios en guardrails antes que mis usuarios?
&lt;/h3&gt;

&lt;p&gt;Guarda respuestas de referencia para prompts sensibles, añade aserciones y ejecútalas periódicamente en Apidog. Si una respuesta cambia, la prueba falla antes de que el problema llegue a producción.&lt;/p&gt;

&lt;h3&gt;
  
  
  ¿Puedo probar sin gastar tokens?
&lt;/h3&gt;

&lt;p&gt;Sí. Usa mocks en Apidog para reproducir respuestas capturadas, incluyendo rechazos, errores y casos de timeout. Así tus pruebas de desarrollo y CI no dependen de la API en vivo.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusión
&lt;/h2&gt;

&lt;p&gt;Los cambios de Fable y Mythos no significan necesariamente una API rota. Tus claves, llamadas a Messages, herramientas y streaming siguen funcionando. El riesgo está en el comportamiento: rechazos, latencia, streaming parcial y retención de datos.&lt;/p&gt;

&lt;p&gt;La respuesta práctica es simple: fija modelos, captura líneas base, automatiza aserciones, simula el upstream y audita los datos que envías. &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; y reemplaza “creo que sigue funcionando” por “lo probé y tengo evidencia”.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Plataforma API nativa de Git: Cómo los equipos escalan el desarrollo de APIs</title>
      <dc:creator>Roobia</dc:creator>
      <pubDate>Fri, 12 Jun 2026 02:49:26 +0000</pubDate>
      <link>https://dev.to/roobia/plataforma-api-nativa-de-git-como-los-equipos-escalan-el-desarrollo-de-apis-2eln</link>
      <guid>https://dev.to/roobia/plataforma-api-nativa-de-git-como-los-equipos-escalan-el-desarrollo-de-apis-2eln</guid>
      <description>&lt;p&gt;&lt;strong&gt;TL;DR&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Un entorno de trabajo de API nativo de Git usa tu repositorio como fuente de verdad para las especificaciones OpenAPI. Eso permite versionado real, ramas, revisiones mediante solicitudes de fusión y sincronización con GitHub, GitLab, Azure DevOps o Bitbucket. El &lt;a href="https://apidog.com/spec-first-mode/?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Modo Spec-first de Apidog&lt;/a&gt; aplica este flujo directamente dentro de una &lt;a href="https://apidog.com/es/blog/apidog-comprehensive-api-development-platform/?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;plataforma de desarrollo de API&lt;/a&gt;, con edición YAML/JSON, validación en tiempo real y operaciones Git integradas.&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;h2&gt;
  
  
  Por qué los equipos de API necesitan flujos de trabajo nativos de Git
&lt;/h2&gt;

&lt;p&gt;Si tu equipo diseña APIs en una herramienta separada de Git, probablemente ya has visto estos problemas:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;“¿Qué versión de la especificación es la actual?”&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Varias personas editan la misma colección o definición sin una fuente de verdad clara.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;“¿Por qué cambió este endpoint?”&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
No hay historial útil para saber quién cambió un parámetro, cuándo y por qué.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;“¿Puedo trabajar en una nueva función sin romper la especificación principal?”&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Sin ramas, todo el mundo edita la versión “viva” o duplica archivos manualmente.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;“¿Cómo revisamos este cambio de API?”&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Las revisiones terminan en Slack, Jira o capturas de pantalla, sin diffs estructurados.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;El problema no es solo la herramienta. Es el flujo de trabajo.&lt;/p&gt;

&lt;p&gt;Tus equipos de backend, frontend y DevOps ya trabajan con Git. El &lt;a href="https://apidog.com/api-design/?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;diseño de API&lt;/a&gt; debería seguir el mismo modelo: ramas, commits, revisión, fusión y trazabilidad.&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.amazonaws.com%2Fuploads%2Farticles%2Fj6b4uoqag1vhe5h7gxsb.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.amazonaws.com%2Fuploads%2Farticles%2Fj6b4uoqag1vhe5h7gxsb.png" alt="Creación del modo Spec-first" width="800" height="478"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Qué significa realmente “nativo de Git” para APIs
&lt;/h2&gt;

&lt;p&gt;Guardar un archivo &lt;code&gt;openapi.yaml&lt;/code&gt; en un repositorio no basta. Eso solo resuelve el almacenamiento, no la colaboración.&lt;/p&gt;

&lt;p&gt;Un flujo nativo de Git implica que Git es la fuente primaria y que la plataforma de API opera sobre esa fuente.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Almacenamiento Git tradicional&lt;/th&gt;
&lt;th&gt;Entorno de trabajo Git nativo&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Las especificaciones residen en Git, pero se editan en herramientas externas&lt;/td&gt;
&lt;td&gt;Editas especificaciones dentro de la plataforma con Git como fuente de verdad&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Commits manuales después de editar en otro lugar&lt;/td&gt;
&lt;td&gt;Commit y push directamente desde el espacio de trabajo de API&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Sin concepto claro de ramas de API&lt;/td&gt;
&lt;td&gt;Ramas de sprint para desarrollo aislado&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Revisión de YAML con herramientas poco adaptadas al dominio API&lt;/td&gt;
&lt;td&gt;Solicitudes de fusión diseñadas para cambios de API&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;La sincronización se rompe si alguien edita la copia interna de la herramienta&lt;/td&gt;
&lt;td&gt;Sincronización bidireccional respetando Git como primario&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Un entorno de trabajo de API nativo de Git debe incluir:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Modo Spec-first&lt;/strong&gt;: los archivos OpenAPI YAML/JSON son el artefacto principal.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Ramas de sprint&lt;/strong&gt;: ramas de trabajo para cambios de API.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Rama principal protegida&lt;/strong&gt;: estabilidad mediante revisión obligatoria.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Solicitudes de fusión&lt;/strong&gt;: revisión estructurada de cambios antes de fusionar.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Sincronización con webhook&lt;/strong&gt;: actualización automática cuando hay pushes en Git.&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  El problema con las herramientas de API tradicionales
&lt;/h2&gt;

&lt;p&gt;Muchas plataformas de API funcionan con un modelo de base de datos interna:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Creas endpoints mediante formularios visuales.&lt;/li&gt;
&lt;li&gt;La plataforma guarda el estado en su propia base de datos.&lt;/li&gt;
&lt;li&gt;Exportas OpenAPI cuando lo necesitas.&lt;/li&gt;
&lt;li&gt;Si quieres historial en Git, haces commit manualmente.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Este modelo puede servir para trabajo individual, pero genera fricción en equipos.&lt;/p&gt;

&lt;h3&gt;
  
  
  Sin historial de versiones real
&lt;/h3&gt;

&lt;p&gt;Un historial interno no reemplaza Git. Normalmente no puedes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Ver todos los cambios en un log unificado.&lt;/li&gt;
&lt;li&gt;Crear ramas y fusionarlas limpiamente.&lt;/li&gt;
&lt;li&gt;Volver a un estado conocido con comandos estándar.&lt;/li&gt;
&lt;li&gt;Integrar fácilmente pipelines CI/CD basados en Git.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Conflictos de colaboración
&lt;/h3&gt;

&lt;p&gt;Cuando varios desarrolladores editan el mismo proyecto:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Los cambios pueden sobrescribirse.&lt;/li&gt;
&lt;li&gt;No hay resolución de conflictos clara.&lt;/li&gt;
&lt;li&gt;Las funciones incompletas quedan visibles para todos.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Revisiones poco estructuradas
&lt;/h3&gt;

&lt;p&gt;Sin un flujo de merge request, la revisión suele hacerse con:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Capturas de pantalla.&lt;/li&gt;
&lt;li&gt;Fragmentos JSON pegados en documentos.&lt;/li&gt;
&lt;li&gt;Comentarios en Slack.&lt;/li&gt;
&lt;li&gt;Sin diff claro entre versiones.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;La especificación OpenAPI es el contrato entre sistemas. Debe tratarse con el mismo rigor que el código de aplicación.&lt;/p&gt;




&lt;h2&gt;
  
  
  El enfoque nativo de Git de Apidog: Modo Spec-first
&lt;/h2&gt;

&lt;p&gt;El &lt;a href="https://docs.apidog.com/spec-first-mode-beta-2058268m0?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Modo Spec-first&lt;/a&gt; de Apidog invierte el modelo tradicional: Git es la fuente de verdad y Apidog actúa como interfaz de edición, revisión, prueba y sincronización.&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.amazonaws.com%2Fuploads%2Farticles%2F1f5901k9r7352tvb9byc.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.amazonaws.com%2Fuploads%2Farticles%2F1f5901k9r7352tvb9byc.png" alt="Espacio de trabajo de especificaciones" width="800" height="459"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Cómo configurarlo
&lt;/h3&gt;

&lt;p&gt;Para crear un proyecto en Modo Spec-first:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Conecta tu proveedor Git&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
GitHub, GitLab, Azure DevOps o Bitbucket.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Selecciona el repositorio y la rama principal&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Puedes usar especificaciones existentes o empezar desde cero.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Edita en el espacio de trabajo de especificaciones&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Usa vista de código o vista de formulario.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Haz commit y push desde Apidog&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Los cambios se envían directamente al repositorio.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Activa sincronización con webhook&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Los pushes externos al repositorio se sincronizan automáticamente con Apidog.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  Trabajar con especificaciones OpenAPI en Apidog
&lt;/h2&gt;

&lt;p&gt;En lugar de editar una base de datos interna, trabajas directamente con archivos de especificación.&lt;/p&gt;

&lt;p&gt;El espacio de trabajo incluye:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Explorador de archivos&lt;/strong&gt;: navega por la estructura del repositorio.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Árbol de API&lt;/strong&gt;: endpoints, esquemas y definiciones parseadas desde OpenAPI.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Editor de código&lt;/strong&gt;: edición YAML/JSON con validación y resaltado.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Editor de formularios&lt;/strong&gt;: edición estructurada para nodos compatibles.&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.amazonaws.com%2Fuploads%2Farticles%2F0dtaud03nthkrxmhe957.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.amazonaws.com%2Fuploads%2Farticles%2F0dtaud03nthkrxmhe957.png" alt="Edición en vista de código" width="800" height="464"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Ejemplo básico de una operación OpenAPI que puedes editar en YAML:&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="na"&gt;paths&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="s"&gt;/users/{id}&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;get&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;summary&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Obtener usuario por ID&lt;/span&gt;
      &lt;span class="na"&gt;parameters&lt;/span&gt;&lt;span class="pi"&gt;:&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;id&lt;/span&gt;
          &lt;span class="na"&gt;in&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;path&lt;/span&gt;
          &lt;span class="na"&gt;required&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
          &lt;span class="na"&gt;schema&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
            &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;string&lt;/span&gt;
      &lt;span class="na"&gt;responses&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;200"&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;
          &lt;span class="na"&gt;description&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Usuario encontrado&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Puedes editar directamente el YAML/JSON o usar la vista de formulario para trabajar con endpoints y esquemas de forma más guiada. En ambos casos, el archivo en Git sigue siendo la fuente de verdad.&lt;/p&gt;

&lt;h3&gt;
  
  
  Validación y vista previa en tiempo real
&lt;/h3&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.amazonaws.com%2Fuploads%2Farticles%2Fpx3xo29hyr32uyzdxqwa.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.amazonaws.com%2Fuploads%2Farticles%2Fpx3xo29hyr32uyzdxqwa.png" alt="Panel de validación" width="800" height="464"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;El editor ayuda a detectar problemas antes de hacer commit:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Errores de sintaxis YAML/JSON.&lt;/li&gt;
&lt;li&gt;Campos obligatorios faltantes.&lt;/li&gt;
&lt;li&gt;Violaciones de reglas OpenAPI.&lt;/li&gt;
&lt;li&gt;Vista previa de documentación generada.&lt;/li&gt;
&lt;li&gt;Pruebas directas desde la definición.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Esto reduce el riesgo de subir especificaciones rotas y descubrir el fallo recién en CI.&lt;/p&gt;




&lt;h2&gt;
  
  
  Ramas de sprint: ramas de características para APIs
&lt;/h2&gt;

&lt;p&gt;En código, no editas producción directamente. Con APIs debería pasar lo mismo.&lt;/p&gt;

&lt;p&gt;Las &lt;a href="https://docs.apidog.com/branches-in-apidog-616421m0?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;ramas de sprint&lt;/a&gt; permiten trabajar en cambios de API de forma aislada antes de fusionarlos a la rama principal.&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.amazonaws.com%2Fuploads%2Farticles%2F9u67fs5hxidmp0ja8nd5.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.amazonaws.com%2Fuploads%2Farticles%2F9u67fs5hxidmp0ja8nd5.png" alt="Cambio de rama de sprint" width="800" height="466"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Casos que resuelven
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Escenario&lt;/th&gt;
&lt;th&gt;Sin ramas de sprint&lt;/th&gt;
&lt;th&gt;Con ramas de sprint&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Nuevo endpoint&lt;/td&gt;
&lt;td&gt;Editas la especificación principal y puedes romper documentación o pruebas&lt;/td&gt;
&lt;td&gt;Trabajas aislado y fusionas cuando esté estable&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Pruebas de cambios&lt;/td&gt;
&lt;td&gt;Los testers ven trabajo incompleto&lt;/td&gt;
&lt;td&gt;Los testers cambian a la rama de sprint&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Desarrollo paralelo&lt;/td&gt;
&lt;td&gt;Varias funciones chocan en una especificación&lt;/td&gt;
&lt;td&gt;Cada función tiene su propia rama&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Reversión&lt;/td&gt;
&lt;td&gt;No hay rollback limpio&lt;/td&gt;
&lt;td&gt;Puedes descartar o fusionar selectivamente&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  Crear una rama de sprint
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Haz clic en el selector de ramas junto a &lt;strong&gt;APIs&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Selecciona &lt;strong&gt;Nueva Rama de Sprint&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Usa un nombre descriptivo, 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;user-authentication-v2
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Trabaja sobre esa rama sin afectar la principal.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Poblar una rama de sprint
&lt;/h3&gt;

&lt;p&gt;Apidog admite dos enfoques.&lt;/p&gt;

&lt;h4&gt;
  
  
  Enfoque manual API-first
&lt;/h4&gt;

&lt;p&gt;Usa &lt;strong&gt;Fork desde principal&lt;/strong&gt; para copiar endpoints, esquemas o componentes que necesitas modificar.&lt;/p&gt;

&lt;p&gt;Apidog mantiene la asociación con el recurso original, por lo que al fusionar puede identificar qué cambió.&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.amazonaws.com%2Fuploads%2Farticles%2Fu4lk976d8jxixnv3wv46.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.amazonaws.com%2Fuploads%2Farticles%2Fu4lk976d8jxixnv3wv46.png" alt="Bifurcando recursos" width="800" height="466"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Enfoque code-first con importación OAS
&lt;/h4&gt;

&lt;p&gt;Si el backend genera una especificación OpenAPI actualizada, puedes importarla.&lt;/p&gt;

&lt;p&gt;Apidog la compara con la rama principal y extrae solo los recursos modificados. Esto mantiene la rama enfocada en las diferencias reales.&lt;/p&gt;




&lt;h2&gt;
  
  
  Alinear pruebas con cambios de API
&lt;/h2&gt;

&lt;p&gt;Un error común es modificar un endpoint en una rama, pero dejar las pruebas apuntando a la versión principal.&lt;/p&gt;

&lt;p&gt;Apidog ayuda a evitarlo mediante:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Marcado de endpoints modificados en escenarios de prueba.&lt;/li&gt;
&lt;li&gt;Duplicación y ajuste de pruebas para la rama de sprint.&lt;/li&gt;
&lt;li&gt;Asociación de pruebas con la rama correcta.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Esto evita fusionar endpoints nuevos sin actualizar pruebas y encontrar fallos de CI más tarde.&lt;/p&gt;




&lt;h2&gt;
  
  
  Ramas protegidas y solicitudes de fusión
&lt;/h2&gt;

&lt;p&gt;Las ramas protegidas ayudan a mantener estable la especificación principal.&lt;/p&gt;

&lt;p&gt;En Apidog, una rama principal protegida implica:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Sin ediciones directas&lt;/strong&gt;: los cambios pasan por solicitud de fusión.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Revisión obligatoria&lt;/strong&gt;: los administradores aprueban antes de fusionar.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Rastro de auditoría&lt;/strong&gt;: cada cambio queda asociado a una revisión.&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.amazonaws.com%2Fuploads%2Farticles%2F8uoyt6pcmnwsw9rcsxuu.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.amazonaws.com%2Fuploads%2Farticles%2F8uoyt6pcmnwsw9rcsxuu.png" alt="Creación de solicitud de fusión" width="800" height="841"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Flujo de solicitud de fusión
&lt;/h3&gt;

&lt;p&gt;Cuando una rama de sprint está lista:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Haz clic en &lt;strong&gt;Fusionar&lt;/strong&gt; desde el selector de ramas.&lt;/li&gt;
&lt;li&gt;Revisa los cambios por estado:

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Gris&lt;/strong&gt;: sin cambios.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Naranja&lt;/strong&gt;: modificado.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Verde&lt;/strong&gt;: nuevo.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Consulta el diff para cada recurso modificado.&lt;/li&gt;
&lt;li&gt;Selecciona qué recursos fusionar.&lt;/li&gt;
&lt;li&gt;Crea una &lt;strong&gt;Solicitud de Fusión&lt;/strong&gt; si la rama está protegida, o fusiona directamente si no lo está.&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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fubfjcxcgabbtsvs7hx3g.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.amazonaws.com%2Fuploads%2Farticles%2Fubfjcxcgabbtsvs7hx3g.png" alt="Vista general de fusión" width="800" height="466"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Revisión de cambios
&lt;/h3&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.amazonaws.com%2Fuploads%2Farticles%2Fcae5y9t2kbp451xhciaf.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.amazonaws.com%2Fuploads%2Farticles%2Fcae5y9t2kbp451xhciaf.png" alt="Revisión de solicitud de fusión" width="800" height="423"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Los revisores pueden ver:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Lista completa de cambios.&lt;/li&gt;
&lt;li&gt;Comparaciones antes/después.&lt;/li&gt;
&lt;li&gt;Contexto de la rama de sprint.&lt;/li&gt;
&lt;li&gt;Recursos nuevos, modificados o sin cambios.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Pueden aprobar, rechazar o solicitar ajustes. Si el desarrollador actualiza la rama, la solicitud de fusión refleja los cambios sin crear una nueva.&lt;/p&gt;




&lt;h2&gt;
  
  
  Operaciones Git desde Apidog: commit, push y pull
&lt;/h2&gt;

&lt;p&gt;Apidog permite ejecutar operaciones Git dentro del espacio de trabajo, sin cliente Git externo.&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.amazonaws.com%2Fuploads%2Farticles%2F8kcwduyhbl4pj7grw41e.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.amazonaws.com%2Fuploads%2Farticles%2F8kcwduyhbl4pj7grw41e.png" alt="Commit y push" width="800" height="465"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Commit y push
&lt;/h3&gt;

&lt;p&gt;Después de editar una especificación:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Abre &lt;strong&gt;Cambios&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Revisa archivos modificados, añadidos o eliminados.&lt;/li&gt;
&lt;li&gt;Selecciona qué archivos incluir.&lt;/li&gt;
&lt;li&gt;Escribe un mensaje de commit.&lt;/li&gt;
&lt;li&gt;Haz clic en &lt;strong&gt;Push&lt;/strong&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Ejemplo de mensaje de commit:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;feat: add user authentication endpoints
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Git Pull
&lt;/h3&gt;

&lt;p&gt;Cuando otro miembro del equipo sube cambios al repositorio:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Haz clic en el nombre de la rama en la barra lateral.&lt;/li&gt;
&lt;li&gt;Selecciona &lt;strong&gt;Git Pull&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Apidog sincroniza los archivos más recientes.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Sincronización con webhook
&lt;/h3&gt;

&lt;p&gt;Si tienes permisos de administrador en el repositorio, puedes configurar un webhook.&lt;/p&gt;

&lt;p&gt;Con webhook:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Los pushes a Git sincronizan Apidog automáticamente.&lt;/li&gt;
&lt;li&gt;No necesitas hacer pull manual.&lt;/li&gt;
&lt;li&gt;El equipo trabaja sobre la versión más reciente.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Sin webhook, el pull manual sigue disponible.&lt;/p&gt;




&lt;h2&gt;
  
  
  Flujo recomendado para equipos
&lt;/h2&gt;

&lt;p&gt;Un flujo práctico para trabajar API-first o spec-first sería:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Mantén &lt;code&gt;main&lt;/code&gt; como rama protegida.&lt;/li&gt;
&lt;li&gt;Crea una rama de sprint por feature.&lt;/li&gt;
&lt;li&gt;Edita la especificación OpenAPI en YAML/JSON o formulario.&lt;/li&gt;
&lt;li&gt;Valida la especificación antes del commit.&lt;/li&gt;
&lt;li&gt;Actualiza pruebas relacionadas.&lt;/li&gt;
&lt;li&gt;Haz commit y push.&lt;/li&gt;
&lt;li&gt;Abre una solicitud de fusión.&lt;/li&gt;
&lt;li&gt;Revisa diffs de endpoints, esquemas y pruebas.&lt;/li&gt;
&lt;li&gt;Fusiona solo cuando el contrato esté aprobado.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Comparado con el flujo tradicional:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Antes&lt;/th&gt;
&lt;th&gt;Después&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Edición directa sobre la especificación principal&lt;/td&gt;
&lt;td&gt;Rama de sprint aislada&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Testers sin entorno claro para cambios incompletos&lt;/td&gt;
&lt;td&gt;Rama dedicada para pruebas&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Revisión con capturas e hilos de Slack&lt;/td&gt;
&lt;td&gt;Solicitud de fusión con diffs&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Trabajo paralelo sin visibilidad&lt;/td&gt;
&lt;td&gt;Selector de ramas con trabajo activo&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Fusión propensa a sobrescritura&lt;/td&gt;
&lt;td&gt;Fusión selectiva con vista previa&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




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

&lt;h3&gt;
  
  
  ¿Cuál es la diferencia entre el Modo Spec-first y los proyectos regulares de Apidog?
&lt;/h3&gt;

&lt;p&gt;El Modo Spec-first usa tu repositorio Git como fuente de verdad. Los proyectos regulares de Apidog usan la base de datos interna de Apidog como primaria, con exportación Git como secundaria.&lt;/p&gt;

&lt;p&gt;En Modo Spec-first editas archivos directamente, haces commit a Git desde Apidog y sincronizas automáticamente.&lt;/p&gt;

&lt;h3&gt;
  
  
  ¿Puedo cambiar un proyecto Apidog existente al Modo Spec-first?
&lt;/h3&gt;

&lt;p&gt;Actualmente, el Modo Spec-first requiere crear un nuevo proyecto conectado a un repositorio Git.&lt;/p&gt;

&lt;p&gt;Puedes importar la especificación OpenAPI de tu proyecto existente al nuevo proyecto para migrar contenido.&lt;/p&gt;

&lt;h3&gt;
  
  
  ¿Qué proveedores Git son compatibles?
&lt;/h3&gt;

&lt;p&gt;Apidog es compatible con:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;GitHub&lt;/li&gt;
&lt;li&gt;GitLab&lt;/li&gt;
&lt;li&gt;Azure DevOps&lt;/li&gt;
&lt;li&gt;Bitbucket&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Puedes conectar repositorios de estos proveedores al crear un proyecto en Modo Spec-first.&lt;/p&gt;

&lt;h3&gt;
  
  
  ¿Necesito permisos de administrador en el repositorio?
&lt;/h3&gt;

&lt;p&gt;Solo para instalar el webhook de sincronización automática.&lt;/p&gt;

&lt;p&gt;Sin webhook, puedes usar &lt;strong&gt;Git Pull&lt;/strong&gt; manual. Para enviar cambios desde Apidog, basta con permiso de escritura.&lt;/p&gt;

&lt;h3&gt;
  
  
  ¿Puedo usar el Modo Spec-first con un repositorio vacío?
&lt;/h3&gt;

&lt;p&gt;Sí. Si el repositorio no tiene archivos OpenAPI, Apidog permite empezar desde cero.&lt;/p&gt;

&lt;p&gt;Creas las especificaciones en el espacio de trabajo y las subes con el primer commit.&lt;/p&gt;

&lt;h3&gt;
  
  
  ¿En qué se diferencian las ramas de sprint de las ramas de Git?
&lt;/h3&gt;

&lt;p&gt;Las ramas de sprint en Apidog corresponden a ramas Git en tu repositorio.&lt;/p&gt;

&lt;p&gt;Cuando creas una rama de sprint, se crea una rama Git correspondiente. Los cambios se sincronizan con esa rama y la fusión aplica sobre la rama Git asociada.&lt;/p&gt;

&lt;h3&gt;
  
  
  ¿Qué sucede si alguien edita el repositorio Git directamente?
&lt;/h3&gt;

&lt;p&gt;Si el webhook está instalado, los pushes a Git sincronizan Apidog automáticamente.&lt;/p&gt;

&lt;p&gt;Si no, puedes usar &lt;strong&gt;Git Pull&lt;/strong&gt; para traer esos cambios al espacio de trabajo.&lt;/p&gt;

&lt;h3&gt;
  
  
  ¿Puedo editar especificaciones en vista de código y vista de formulario?
&lt;/h3&gt;

&lt;p&gt;Sí. Puedes alternar entre:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Editor de código YAML/JSON.&lt;/li&gt;
&lt;li&gt;Vista de formulario para nodos OpenAPI compatibles.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Ambas vistas actualizan el archivo subyacente en Git.&lt;/p&gt;

&lt;h3&gt;
  
  
  ¿Cómo funcionan las solicitudes de fusión para escenarios de prueba?
&lt;/h3&gt;

&lt;p&gt;Los escenarios de prueba se fusionan por separado de endpoints y esquemas.&lt;/p&gt;

&lt;p&gt;Después de fusionar recursos de API en la rama principal, puedes pasar el cursor sobre un escenario de prueba en la rama de sprint y seleccionar &lt;strong&gt;Fusionar a Principal&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Actualmente, solo los administradores del proyecto pueden fusionar escenarios de prueba en ramas principales protegidas.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>¿Qué es 'Mythos-Class'? La clasificación de modelos de Anthropic explicada.</title>
      <dc:creator>Roobia</dc:creator>
      <pubDate>Thu, 11 Jun 2026 04:55:14 +0000</pubDate>
      <link>https://dev.to/roobia/que-es-mythos-class-la-clasificacion-de-modelos-de-anthropic-explicada-116l</link>
      <guid>https://dev.to/roobia/que-es-mythos-class-la-clasificacion-de-modelos-de-anthropic-explicada-116l</guid>
      <description>&lt;p&gt;Si leyó el anuncio de Anthropic del 9 de junio de 2026 y se detuvo en la frase “un modelo de clase Mythos que hemos hecho seguro para uso general”, la traducción práctica es esta: “Clase Mythos” no es una ID de modelo ni un producto que se compra directamente. Es el nivel de capacidad del modelo de frontera que Anthropic usa detrás de dos productos: Claude Fable 5, la versión pública con salvaguardas activadas, y Claude Mythos 5, una versión restringida con algunas salvaguardas levantadas para socios verificados. Un motor, dos posturas de seguridad. Si busca el modelo que puede integrar hoy, consulte la &lt;a href="https://apidog.com/es/blog/what-is-claude-fable-5?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;descripción general de Claude Fable 5&lt;/a&gt;.&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 términos de implementación, esa distinción importa porque no debería intentar llamar a “Clase Mythos” desde la API. Lo que realmente usaría en una integración pública es &lt;code&gt;claude-fable-5&lt;/code&gt;. A continuación se explica qué significa el nivel, cómo se compara con Opus, Sonnet y Haiku, y cómo probarlo de forma segura antes de llevarlo a producción.&lt;/p&gt;

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

&lt;p&gt;Clase Mythos es el nivel de capacidad del modelo de frontera que Anthropic puso detrás de dos productos lanzados el 9 de junio de 2026:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Claude Fable 5&lt;/strong&gt;: versión pública, con salvaguardas activadas.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Claude Mythos 5&lt;/strong&gt;: mismo modelo subyacente, con algunas salvaguardas levantadas, restringido a socios verificados.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ID pública práctica&lt;/strong&gt;: &lt;code&gt;claude-fable-5&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Idea clave&lt;/strong&gt;: no invoque “Clase Mythos”; invoque el modelo publicado que pertenece a ese nivel.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Qué significa realmente “Clase Mythos”
&lt;/h2&gt;

&lt;p&gt;Anthropic describió a Claude Fable 5 como “un modelo de clase Mythos que hemos hecho seguro para uso general”. La frase indica dos cosas:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Fable 5 pertenece a una clase de capacidad llamada Mythos.&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Esa capacidad fue empaquetada con salvaguardas para uso general.&lt;/strong&gt;&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%2F06%2Fimage-201.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%2F06%2Fimage-201.png" alt="" width="800" height="883"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;La forma correcta de pensarlo es esta:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Modelo subyacente de frontera
└── Nivel: Clase Mythos
    ├── Producto público: Claude Fable 5
    └── Producto restringido: Claude Mythos 5
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Clase Mythos describe el nivel del motor. Fable 5 y Mythos 5 describen cómo se entrega ese motor según el perfil de seguridad y acceso.&lt;/p&gt;

&lt;p&gt;Por eso, en código, no usaría algo como esto:&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;"mythos-class"&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;Usaría el modelo público:&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;"claude-fable-5"&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;La vista previa anterior de este nivel se llamó “Claude Mythos Preview”. Fable 5 y Mythos 5 son los sucesores comercializados de esa vista previa, con precios más bajos que la versión previa.&lt;/p&gt;

&lt;h2&gt;
  
  
  Clase Mythos vs. Opus, Sonnet y Haiku
&lt;/h2&gt;

&lt;p&gt;La línea estándar de Anthropic usa nombres conocidos:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Opus&lt;/strong&gt;: mayor capacidad dentro de la línea estándar.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Sonnet&lt;/strong&gt;: equilibrio entre costo, velocidad y calidad.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Haiku&lt;/strong&gt;: opción más rápida y económica.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Clase Mythos se sitúa por encima de esa línea estándar como un nivel de capacidad de frontera. La comparación útil no es “Clase Mythos vs. Opus” como si ambos fueran IDs de API, sino:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Claude Fable 5 vs. Claude Opus 4.8
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Fable 5 es la cara pública de Clase Mythos. Opus 4.8 es la parte superior de la línea estándar. Para más contexto, vea la &lt;a href="https://apidog.com/es/blog/what-is-claude-opus-4-8?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;explicación de Opus 4.8&lt;/a&gt; y la &lt;a href="https://apidog.com/es/blog/claude-opus-4-8-pricing?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;guía de precios de Opus 4.8&lt;/a&gt;.&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;Nivel&lt;/th&gt;
&lt;th&gt;Disponibilidad&lt;/th&gt;
&lt;th&gt;Precio entrada / salida&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Claude Fable 5&lt;/td&gt;
&lt;td&gt;Clase Mythos&lt;/td&gt;
&lt;td&gt;Disponibilidad general&lt;/td&gt;
&lt;td&gt;$10 / $50 por M de tokens&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Claude Mythos 5&lt;/td&gt;
&lt;td&gt;Clase Mythos&lt;/td&gt;
&lt;td&gt;Restringido, Proyecto Glasswing&lt;/td&gt;
&lt;td&gt;$10 / $50 por M de tokens&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Claude Mythos Preview&lt;/td&gt;
&lt;td&gt;Clase Mythos, vista previa&lt;/td&gt;
&lt;td&gt;Vista previa retirada&lt;/td&gt;
&lt;td&gt;Más del doble que Fable 5&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Claude Opus 4.8&lt;/td&gt;
&lt;td&gt;Línea estándar, Opus&lt;/td&gt;
&lt;td&gt;Disponibilidad general&lt;/td&gt;
&lt;td&gt;$5 / $25 por M de tokens&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Claude Sonnet&lt;/td&gt;
&lt;td&gt;Línea estándar, Sonnet&lt;/td&gt;
&lt;td&gt;Disponibilidad general&lt;/td&gt;
&lt;td&gt;Inferior a Opus&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Claude Haiku&lt;/td&gt;
&lt;td&gt;Línea estándar, Haiku&lt;/td&gt;
&lt;td&gt;Disponibilidad general&lt;/td&gt;
&lt;td&gt;El más bajo&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;La lectura práctica:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Use &lt;strong&gt;Opus, Sonnet o Haiku&lt;/strong&gt; para rutas de alto volumen, bajo costo o baja latencia.&lt;/li&gt;
&lt;li&gt;Use &lt;strong&gt;Fable 5&lt;/strong&gt; cuando necesite capacidad de frontera, razonamiento prolongado o trabajo autónomo de largo horizonte.&lt;/li&gt;
&lt;li&gt;Revise siempre la &lt;a href="https://platform.claude.com/docs/en/about-claude/models/overview" rel="noopener noreferrer"&gt;descripción general de modelos&lt;/a&gt; de Anthropic antes de fijar IDs o precios en una integración.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Fable 5 y Mythos 5 funcionan a $10 por millón de tokens de entrada y $50 por millón de tokens de salida. Eso es menos de la mitad de lo que costó Mythos Preview, según el anuncio original.&lt;/p&gt;

&lt;h2&gt;
  
  
  Las dos caras del modelo de clase Mythos
&lt;/h2&gt;

&lt;p&gt;Anthropic entrega el mismo nivel de capacidad con dos posturas de seguridad.&lt;/p&gt;

&lt;h3&gt;
  
  
  Claude Fable 5: versión pública con salvaguardas
&lt;/h3&gt;

&lt;p&gt;Claude Fable 5 es la versión hecha segura para uso general. Es el modelo que los desarrolladores pueden llamar públicamente mediante:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;claude-fable-5
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Fable 5 incluye salvaguardas activas. Según Anthropic, ciertas consultas de alto riesgo se redirigen a otro modelo, como Opus 4.8, en lugar de usar el motor completo de clase Mythos. Las áreas mencionadas incluyen:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Ciberataques.&lt;/li&gt;
&lt;li&gt;Armas bioquímicas.&lt;/li&gt;
&lt;li&gt;Destilación de modelos, es decir, intentos de extraer pesos o comportamiento para clonar el modelo.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Anthropic indica que esto afecta a menos del 5% de las sesiones. Para tareas normales de desarrollo, análisis de documentos, agentes, generación de código o refactorización, debería recibir el comportamiento completo de Fable 5 sin que el enrutamiento interfiera. El &lt;a href="https://apidog.com/es/blog/claude-fable-5-safety-safeguards?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;desglose de seguridad y salvaguardas de Fable 5&lt;/a&gt; explica ese comportamiento con más detalle.&lt;/p&gt;

&lt;h3&gt;
  
  
  Claude Mythos 5: versión restringida
&lt;/h3&gt;

&lt;p&gt;Claude Mythos 5 usa el mismo modelo subyacente, pero con algunas salvaguardas levantadas en áreas específicas. No está disponible públicamente.&lt;/p&gt;

&lt;p&gt;El acceso se realiza mediante un programa llamado Proyecto Glasswing y está limitado a usuarios verificados, como:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Ciberdefensores.&lt;/li&gt;
&lt;li&gt;Proveedores de infraestructura.&lt;/li&gt;
&lt;li&gt;Investigadores de biología seleccionados.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;La lógica es que ciertos defensores e investigadores necesitan razonar sobre amenazas reales para proteger sistemas. Para esos casos, rechazos demasiado amplios podrían reducir la utilidad del modelo. Mythos 5 existe para esos perfiles autorizados, no para uso general.&lt;/p&gt;

&lt;p&gt;Si necesita una comparación directa, la &lt;a href="https://apidog.com/es/blog/fable-5-vs-mythos-5?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;comparación de Fable 5 vs. Mythos 5&lt;/a&gt; resume las diferencias.&lt;/p&gt;

&lt;h2&gt;
  
  
  Por qué existe este nivel
&lt;/h2&gt;

&lt;p&gt;Clase Mythos existe porque Anthropic separa dos dimensiones:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Capacidad del modelo&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Postura de seguridad del producto.&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;El modelo subyacente está diseñado para trabajo autónomo de largo horizonte, incluyendo tareas que pueden consumir millones de tokens. Eso es útil para flujos como:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Refactorización de bases de código grandes.&lt;/li&gt;
&lt;li&gt;Revisión de arquitecturas complejas.&lt;/li&gt;
&lt;li&gt;Agentes que ejecutan tareas durante horas.&lt;/li&gt;
&lt;li&gt;Investigación con mucho contexto.&lt;/li&gt;
&lt;li&gt;Análisis de repositorios o documentación extensa.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Pero esa misma capacidad también eleva el riesgo en dominios sensibles. La solución descrita por Anthropic no fue lanzar un único modelo con la misma configuración para todos, sino entregar dos variantes:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Clase Mythos
├── Fable 5: público, con salvaguardas
└── Mythos 5: restringido, con algunas salvaguardas levantadas
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;El objetivo del Proyecto Glasswing es permitir que perfiles defensivos verificados trabajen con menos restricciones en dominios donde necesitan evaluar amenazas. La estructura está descrita en el &lt;a href="https://www.anthropic.com/news/claude-fable-5-mythos-5" rel="noopener noreferrer"&gt;anuncio de Anthropic&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Qué significa para usted como desarrollador
&lt;/h2&gt;

&lt;p&gt;Para la mayoría de los desarrolladores, “usar un modelo de clase Mythos” significa:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Llamar a Claude Fable 5 con model = claude-fable-5
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;No hay un endpoint público para Mythos 5. No hay acceso de autoservicio. No hay una clave de API estándar que lo desbloquee. Si no pertenece a uno de los grupos autorizados por Proyecto Glasswing, desarrolle con Fable 5.&lt;/p&gt;

&lt;h3&gt;
  
  
  Ejemplo mínimo de llamada a la API
&lt;/h3&gt;

&lt;p&gt;Un flujo típico con la API de Mensajes tendría esta forma:&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.anthropic.com/v1/messages &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"x-api-key: &lt;/span&gt;&lt;span class="nv"&gt;$ANTHROPIC_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;"anthropic-version: 2023-06-01"&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;'{
    "model": "claude-fable-5",
    "max_tokens": 1024,
    "messages": [
      {
        "role": "user",
        "content": "Analiza este módulo y propón una refactorización segura."
      }
    ]
  }'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Antes de conectarlo a producción, valide al menos:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Código HTTP esperado.&lt;/li&gt;
&lt;li&gt;Forma del JSON de respuesta.&lt;/li&gt;
&lt;li&gt;Campos de uso de tokens.&lt;/li&gt;
&lt;li&gt;Comportamiento de streaming, si lo usa.&lt;/li&gt;
&lt;li&gt;Formato de llamadas a herramientas, si su aplicación depende de tools.&lt;/li&gt;
&lt;li&gt;Costos estimados para prompts reales.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Cómo decidir cuándo usar Fable 5
&lt;/h2&gt;

&lt;p&gt;Use Fable 5 cuando el beneficio de mayor capacidad compense el costo. Algunos casos razonables:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Agentes que necesitan mantener mucho contexto durante varias iteraciones.&lt;/li&gt;
&lt;li&gt;Refactorizaciones grandes donde un error puede ser caro.&lt;/li&gt;
&lt;li&gt;Revisión profunda de código, arquitectura o documentación.&lt;/li&gt;
&lt;li&gt;Tareas con alto impacto donde la calidad pesa más que el costo por token.&lt;/li&gt;
&lt;li&gt;Flujos donde Opus, Sonnet o Haiku no mantienen suficiente contexto o precisión.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Evite usarlo por defecto en cada request. Para rutas repetitivas, simples o de alto volumen, una estrategia más eficiente es enrutar por complejidad:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Solicitud simple        → Haiku o Sonnet
Solicitud intermedia    → Sonnet u Opus
Solicitud crítica/larga → Fable 5
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;También puede implementar fallback o escalado progresivo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;if task.complexity == "low":
    model = "claude-haiku"
elif task.complexity == "medium":
    model = "claude-sonnet"
elif task.requires_long_horizon_reasoning:
    model = "claude-fable-5"
else:
    model = "claude-opus-4.8"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Checklist antes de implementar Fable 5
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Presupueste por tokens reales
&lt;/h3&gt;

&lt;p&gt;Fable 5 cuesta $10 por millón de tokens de entrada y $50 por millón de tokens de salida. Es más caro que Opus 4.8, así que mida con prompts representativos.&lt;/p&gt;

&lt;p&gt;Revise la &lt;a href="https://apidog.com/es/blog/claude-fable-5-pricing?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;guía de precios de Fable 5&lt;/a&gt; para hacer estimaciones antes de mover tráfico real.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. No codifique precios como constantes permanentes
&lt;/h3&gt;

&lt;p&gt;Las cadenas de modelos y precios pueden cambiar. Consulte la documentación de Anthropic y las &lt;a href="https://www.anthropic.com/news" rel="noopener noreferrer"&gt;noticias de Anthropic&lt;/a&gt; antes de fijar valores en código.&lt;/p&gt;

&lt;p&gt;Una opción más mantenible:&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;"models"&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;"frontier"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"claude-fable-5"&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_high"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"claude-opus-4.8"&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;Así puede cambiar el modelo desde configuración sin redeploy completo.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Pruebe el contrato de API
&lt;/h3&gt;

&lt;p&gt;No pruebe solo que “responde bien”. Pruebe el contrato:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Headers requeridos.&lt;/li&gt;
&lt;li&gt;Status codes.&lt;/li&gt;
&lt;li&gt;Estructura de respuesta.&lt;/li&gt;
&lt;li&gt;Campos obligatorios.&lt;/li&gt;
&lt;li&gt;Uso de tokens.&lt;/li&gt;
&lt;li&gt;Errores esperados.&lt;/li&gt;
&lt;li&gt;Timeouts.&lt;/li&gt;
&lt;li&gt;Streaming.&lt;/li&gt;
&lt;li&gt;Tool calls.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Con &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 crear una colección de requests para &lt;code&gt;claude-fable-5&lt;/code&gt;, guardar variables de entorno, validar respuestas y ejecutar regresiones cuando cambie el modelo o su prompt.&lt;/p&gt;

&lt;p&gt;Un entorno mínimo podría incluir:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ANTHROPIC_BASE_URL=https://api.anthropic.com
ANTHROPIC_API_KEY=sk-ant-...
ANTHROPIC_VERSION=2023-06-01
MODEL=claude-fable-5
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Luego cree una request reutilizable:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight http"&gt;&lt;code&gt;&lt;span class="err"&gt;POST {{ANTHROPIC_BASE_URL}}/v1/messages
x-api-key: {{ANTHROPIC_API_KEY}}
anthropic-version: {{ANTHROPIC_VERSION}}
content-type: application/json
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Body:&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;"{{MODEL}}"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"max_tokens"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1024&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 los riesgos técnicos de este cambio de API y propone pruebas de regresión."&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;Agregue assertions para verificar que la respuesta tenga la forma esperada, por ejemplo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;status == 200
response.content exists
response.usage.input_tokens exists
response.usage.output_tokens exists
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Si está configurando ese arnés de pruebas, &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;, cree un entorno Claude con la URL base y la clave, y guarde las llamadas a Fable 5 como requests reutilizables. También puede mantener el mismo workspace de &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; apuntando a Opus 4.8 para comparar costo y calidad de salida en la misma tarea.&lt;/p&gt;

&lt;h2&gt;
  
  
  Siguiente paso
&lt;/h2&gt;

&lt;p&gt;Clase Mythos es el nivel de capacidad. Fable 5 es el modelo público que puede integrar. Mythos 5 es una variante restringida para socios verificados.&lt;/p&gt;

&lt;p&gt;Si está desarrollando una aplicación real, el flujo recomendado es:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Configure &lt;code&gt;claude-fable-5&lt;/code&gt; en un entorno de pruebas.&lt;/li&gt;
&lt;li&gt;Ejecute prompts representativos contra el endpoint de Mensajes.&lt;/li&gt;
&lt;li&gt;Valide forma de respuesta, uso de tokens y latencia.&lt;/li&gt;
&lt;li&gt;Compare contra Opus 4.8, Sonnet o Haiku para decidir si el costo adicional se justifica.&lt;/li&gt;
&lt;li&gt;Solo después conecte Fable 5 a rutas de producción donde su capacidad de largo horizonte aporte valor claro.&lt;/li&gt;
&lt;/ol&gt;

</description>
    </item>
    <item>
      <title>Claude Fable 5 Límites de Tasa Explicados</title>
      <dc:creator>Roobia</dc:creator>
      <pubDate>Thu, 11 Jun 2026 02:56:14 +0000</pubDate>
      <link>https://dev.to/roobia/claude-fable-5-limites-de-tasa-explicados-4n0b</link>
      <guid>https://dev.to/roobia/claude-fable-5-limites-de-tasa-explicados-4n0b</guid>
      <description>&lt;p&gt;Si está desarrollando con Claude Fable 5 y necesita planificar capacidad, la idea clave es esta: Anthropic no publicó límites de velocidad exclusivos para Fable 5. El modelo &lt;code&gt;claude-fable-5&lt;/code&gt; usa la misma &lt;a href="https://platform.claude.com/docs/en/api/rate-limits" rel="noopener noreferrer"&gt;API de Mensajes&lt;/a&gt; y los límites estándar por niveles de su organización. Esos límites se aplican por organización y por clase de modelo, y dependen del nivel de uso de su cuenta. Si todavía está evaluando el modelo, esta &lt;a href="https://apidog.com/es/blog/what-is-claude-fable-5?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;descripción general de Claude Fable 5&lt;/a&gt; puede servir como contexto.&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;h2&gt;
  
  
  TL;DR
&lt;/h2&gt;

&lt;p&gt;Claude Fable 5 usa los límites de velocidad estándar de Anthropic:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;RPM&lt;/strong&gt;: solicitudes por minuto.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ITPM&lt;/strong&gt;: tokens de entrada por minuto.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;OTPM&lt;/strong&gt;: tokens de salida por minuto.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Los límites se aplican por organización y por clase de modelo. Aumentan a medida que su cuenta avanza por los niveles de uso. Para valores reales, revise siempre la &lt;a href="https://console.anthropic.com" rel="noopener noreferrer"&gt;Consola de Anthropic&lt;/a&gt;. Si recibe un &lt;code&gt;429&lt;/code&gt;, respete el encabezado &lt;code&gt;retry-after&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Cómo funcionan los límites de velocidad de Anthropic
&lt;/h2&gt;

&lt;p&gt;Anthropic no usa un único límite global para toda la API. El rendimiento depende del &lt;strong&gt;nivel de uso&lt;/strong&gt; de su organización.&lt;/p&gt;

&lt;p&gt;Hay dos conceptos relacionados:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Límites de gasto&lt;/strong&gt;: cuánto puede facturarse por mes calendario.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Límites de velocidad&lt;/strong&gt;: qué tan rápido puede llamar a la API.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Este artículo se centra en los límites de velocidad, pero ambos están conectados porque el nivel de uso afecta a los dos.&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.amazonaws.com%2Fuploads%2Farticles%2Fhwdtetd58ermhvhyagc8.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.amazonaws.com%2Fuploads%2Farticles%2Fhwdtetd58ermhvhyagc8.png" alt="Límites de velocidad de Anthropic" width="799" height="530"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Tipos de límites
&lt;/h2&gt;

&lt;p&gt;Para la API de Mensajes, Anthropic mide el uso en tres dimensiones.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Solicitudes por minuto: RPM
&lt;/h3&gt;

&lt;p&gt;Cantidad de llamadas separadas que puede iniciar por minuto.&lt;/p&gt;

&lt;p&gt;Ejemplo práctico:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;50 RPM ≈ hasta 50 solicitudes por minuto
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Pero no significa que pueda enviar las 50 al mismo tiempo. Anthropic usa un algoritmo de &lt;strong&gt;cubo de tokens&lt;/strong&gt;, por lo que las ráfagas pueden activar límites aunque el promedio parezca correcto.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Tokens de entrada por minuto: ITPM
&lt;/h3&gt;

&lt;p&gt;Cantidad de tokens que puede enviar como entrada por minuto.&lt;/p&gt;

&lt;p&gt;En muchos modelos actuales, los tokens leídos desde una caché de prompt no cuentan contra ITPM. Por eso el almacenamiento en caché puede aumentar mucho el rendimiento efectivo cuando reutiliza:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;prompts de sistema largos,&lt;/li&gt;
&lt;li&gt;definiciones de herramientas,&lt;/li&gt;
&lt;li&gt;documentos de referencia,&lt;/li&gt;
&lt;li&gt;instrucciones compartidas entre solicitudes.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  3. Tokens de salida por minuto: OTPM
&lt;/h3&gt;

&lt;p&gt;Cantidad de tokens que el modelo puede generar por minuto.&lt;/p&gt;

&lt;p&gt;Este límite se consume mientras el modelo produce texto. El valor de &lt;code&gt;max_tokens&lt;/code&gt; no se cobra por adelantado contra OTPM. Solo cuentan los tokens generados realmente.&lt;/p&gt;

&lt;p&gt;Por ejemplo, esta llamada permite hasta &lt;code&gt;4096&lt;/code&gt; tokens, pero OTPM solo se consume según la salida real:&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;message&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;messages&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;claude-fable-5&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;max_tokens&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;4096&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;Resume este documento técnico.&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;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Límites por organización y por clase de modelo
&lt;/h2&gt;

&lt;p&gt;Los límites se aplican a nivel de &lt;strong&gt;organización&lt;/strong&gt;, no por clave de API.&lt;/p&gt;

&lt;p&gt;Eso significa que si tiene varias claves dentro de la misma organización, todas consumen del mismo grupo de límites.&lt;/p&gt;

&lt;p&gt;También se aplican por &lt;strong&gt;clase de modelo&lt;/strong&gt;. El tráfico de Fable 5 se mide en su propio grupo, separado de otras clases como Opus. Puede ejecutar varias clases de modelo en paralelo, cada una contra sus propios límites.&lt;/p&gt;

&lt;h2&gt;
  
  
  Cómo avanzan los niveles
&lt;/h2&gt;

&lt;p&gt;Anthropic avanza su organización automáticamente cuando sus compras acumuladas de crédito cruzan ciertos umbrales.&lt;/p&gt;

&lt;p&gt;Según los niveles publicados:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Nivel 1&lt;/strong&gt;: se desbloquea con una compra de crédito de &lt;code&gt;$5&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Nivel 2&lt;/strong&gt;: con &lt;code&gt;$40&lt;/code&gt; acumulados.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Nivel 3&lt;/strong&gt;: con &lt;code&gt;$200&lt;/code&gt; acumulados.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Nivel 4&lt;/strong&gt;: con &lt;code&gt;$400&lt;/code&gt; acumulados.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Por encima del Nivel 4, los límites más altos suelen gestionarse mediante ventas o facturación mensual.&lt;/p&gt;

&lt;p&gt;Para entender cómo estos niveles se relacionan con el costo del modelo, consulte el desglose de &lt;a href="https://apidog.com/es/blog/claude-fable-5-pricing?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;precios de Claude Fable 5&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Qué significa esto para Claude Fable 5
&lt;/h2&gt;

&lt;p&gt;Fable 5 no tiene un sistema especial de límites. Se integra en la tabla estándar de Anthropic como una clase de modelo.&lt;/p&gt;

&lt;p&gt;La pregunta correcta no es:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;¿Cuál es el límite universal de Fable 5?
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;¿En qué nivel está mi organización y cuáles son los límites de Fable 5 para ese nivel?
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Según las tablas publicadas por Anthropic, la fila de Fable 5 escala aproximadamente así:&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;RPM&lt;/th&gt;
&lt;th&gt;ITPM&lt;/th&gt;
&lt;th&gt;OTPM&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Nivel 1&lt;/td&gt;
&lt;td&gt;50&lt;/td&gt;
&lt;td&gt;100,000&lt;/td&gt;
&lt;td&gt;20,000&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Nivel 2&lt;/td&gt;
&lt;td&gt;1,000&lt;/td&gt;
&lt;td&gt;500,000&lt;/td&gt;
&lt;td&gt;100,000&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Nivel 3&lt;/td&gt;
&lt;td&gt;2,000&lt;/td&gt;
&lt;td&gt;1,500,000&lt;/td&gt;
&lt;td&gt;300,000&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Nivel 4&lt;/td&gt;
&lt;td&gt;4,000&lt;/td&gt;
&lt;td&gt;4,000,000&lt;/td&gt;
&lt;td&gt;800,000&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Use estos valores como referencia, no como contrato. La fuente de verdad es siempre su cuenta en la &lt;a href="https://console.anthropic.com" rel="noopener noreferrer"&gt;Consola de Anthropic&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  El límite que más suele importar: OTPM
&lt;/h2&gt;

&lt;p&gt;En cargas largas con Fable 5, el límite más importante suele ser &lt;strong&gt;OTPM&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Esto ocurre porque Fable 5 está orientado a tareas de gran alcance, como:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;agentes que ejecutan pasos largos,&lt;/li&gt;
&lt;li&gt;análisis de documentos extensos,&lt;/li&gt;
&lt;li&gt;generación de reportes grandes,&lt;/li&gt;
&lt;li&gt;flujos con mucha salida intermedia.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Una generación larga no consume todo el OTPM al inicio. Lo consume de forma sostenida mientras transmite tokens. Si ejecuta varias tareas largas en paralelo, puede alcanzar OTPM antes que RPM.&lt;/p&gt;

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

&lt;ol&gt;
&lt;li&gt;Ajuste &lt;code&gt;max_tokens&lt;/code&gt; al tamaño real esperado.&lt;/li&gt;
&lt;li&gt;Use streaming para salidas largas.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Ejemplo base con streaming conceptual:&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;anthropic&lt;/span&gt;

&lt;span class="n"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;anthropic&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Anthropic&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="k"&gt;with&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;messages&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;stream&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;claude-fable-5&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;max_tokens&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;4096&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;Genera un informe técnico detallado.&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="k"&gt;as&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;for&lt;/span&gt; &lt;span class="n"&gt;text&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;text_stream&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;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;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Si está configurando el modelo por primera vez, esta &lt;a href="https://apidog.com/es/blog/how-to-use-claude-fable-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 Claude Fable 5&lt;/a&gt; explica la forma de la solicitud.&lt;/p&gt;

&lt;h2&gt;
  
  
  Cómo comprobar sus límites reales
&lt;/h2&gt;

&lt;p&gt;No base su implementación únicamente en una tabla publicada. Compruebe sus límites en dos lugares.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Consola de Anthropic
&lt;/h2&gt;

&lt;p&gt;En la &lt;a href="https://console.anthropic.com" rel="noopener noreferrer"&gt;Consola de Anthropic&lt;/a&gt;, revise:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;el nivel actual de su organización,&lt;/li&gt;
&lt;li&gt;los límites por modelo,&lt;/li&gt;
&lt;li&gt;el uso de tokens de entrada y salida,&lt;/li&gt;
&lt;li&gt;la tasa de aciertos de caché,&lt;/li&gt;
&lt;li&gt;la proximidad a sus límites.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Esto le permite responder antes de escalar tráfico:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;¿Tengo margen suficiente o estoy cerca del límite?
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  2. Encabezados de respuesta de la API
&lt;/h2&gt;

&lt;p&gt;Cada respuesta incluye encabezados &lt;code&gt;anthropic-ratelimit-*&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Los más útiles son:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;anthropic-ratelimit-requests-limit
anthropic-ratelimit-requests-remaining

anthropic-ratelimit-input-tokens-limit
anthropic-ratelimit-input-tokens-remaining

anthropic-ratelimit-output-tokens-limit
anthropic-ratelimit-output-tokens-remaining
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;También hay encabezados &lt;code&gt;*-reset&lt;/code&gt; en formato RFC 3339 que indican cuándo se recarga completamente cada cubo.&lt;/p&gt;

&lt;p&gt;Puede usarlos para aplicar regulación antes de recibir errores &lt;code&gt;429&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Ejemplo de lectura de encabezados con una respuesta HTTP directa:&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;requests&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;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;post&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://api.anthropic.com/v1/messages&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;headers&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;x-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;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;ANTHROPIC_API_KEY&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;anthropic-version&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;2023-06-01&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-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;application/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="n"&gt;json&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;model&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;claude-fable-5&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;max_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;1024&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;messages&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;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;Resume este texto en viñetas.&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="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;RPM restante:&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;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="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;anthropic-ratelimit-requests-remaining&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="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;ITPM restante:&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;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="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;anthropic-ratelimit-input-tokens-remaining&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="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;OTPM restante:&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;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="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;anthropic-ratelimit-output-tokens-remaining&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Cómo manejar errores 429
&lt;/h2&gt;

&lt;p&gt;Un &lt;code&gt;429&lt;/code&gt; significa que alcanzó uno de los límites.&lt;/p&gt;

&lt;p&gt;La respuesta incluye un encabezado importante:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;retry-after
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Ese valor indica cuántos segundos debe esperar antes de intentar de nuevo. Reintentar antes de ese tiempo normalmente solo genera otro &lt;code&gt;429&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Usar los reintentos del SDK
&lt;/h2&gt;

&lt;p&gt;El SDK oficial de Anthropic ya reintenta errores &lt;code&gt;429&lt;/code&gt; y &lt;code&gt;5xx&lt;/code&gt; con retroceso exponencial. Por defecto usa dos reintentos.&lt;/p&gt;

&lt;p&gt;Puede aumentar &lt;code&gt;max_retries&lt;/code&gt; si tiene una carga por lotes propensa a límites:&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;anthropic&lt;/span&gt;

&lt;span class="n"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;anthropic&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Anthropic&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="n"&gt;resilient&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="nf"&gt;with_options&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;max_retries&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="n"&gt;message&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;resilient&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;messages&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;claude-fable-5&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;max_tokens&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;4096&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;Redacta un resumen de lanzamiento para el changelog de junio.&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;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="mi"&gt;0&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;h2&gt;
  
  
  Capturar RateLimitError manualmente
&lt;/h2&gt;

&lt;p&gt;Si necesita mostrar estado en su interfaz o coordinar una cola, capture la excepción y lea &lt;code&gt;retry-after&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;anthropic&lt;/span&gt;

&lt;span class="n"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;anthropic&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Anthropic&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="n"&gt;message&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;messages&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;claude-fable-5&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;max_tokens&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;4096&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;Resume este informe de incidente.&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="k"&gt;except&lt;/span&gt; &lt;span class="n"&gt;anthropic&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;RateLimitError&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;exc&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;wait_seconds&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;int&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;exc&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;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="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;retry-after&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;60&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="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Límite alcanzado. Reintentando después de &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;wait_seconds&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;s.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Use una cola para tráfico irregular
&lt;/h2&gt;

&lt;p&gt;Los reintentos ayudan, pero no sustituyen una buena arquitectura.&lt;/p&gt;

&lt;p&gt;Si su tráfico llega en ráfagas, coloque las solicitudes en una cola y procéselas a una velocidad que su nivel pueda absorber.&lt;/p&gt;

&lt;p&gt;Un patrón simple:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Productores -&amp;gt; Cola -&amp;gt; Workers con control de tasa -&amp;gt; API de Anthropic
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Los workers pueden ajustar su velocidad leyendo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;anthropic-ratelimit-requests-remaining
anthropic-ratelimit-input-tokens-remaining
anthropic-ratelimit-output-tokens-remaining
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Esto convierte una pared de errores &lt;code&gt;429&lt;/code&gt; en una tubería más estable.&lt;/p&gt;

&lt;p&gt;Los mismos patrones de prueba y regulación aparecen al trabajar con cualquier API con límites. La guía sobre cómo &lt;a href="https://apidog.com/es/blog/how-to-test-chatgpt-api-with-apidog?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;probar la API de ChatGPT con Apidog&lt;/a&gt; aplica ideas similares.&lt;/p&gt;

&lt;h2&gt;
  
  
  Cómo aumentar sus límites o reducir presión
&lt;/h2&gt;

&lt;p&gt;Cuando alcanza límites de forma constante, tiene dos opciones:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Conseguir más margen.&lt;/li&gt;
&lt;li&gt;Consumir menos margen.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Opción 1: avanzar de nivel
&lt;/h2&gt;

&lt;p&gt;A medida que compra más créditos y aumenta el uso acumulado, su organización sube de nivel automáticamente.&lt;/p&gt;

&lt;p&gt;Cada nivel aumenta:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;RPM,&lt;/li&gt;
&lt;li&gt;ITPM,&lt;/li&gt;
&lt;li&gt;OTPM,&lt;/li&gt;
&lt;li&gt;límites de gasto.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Si necesita límites personalizados, use la página de límites en la Consola para contactar con ventas. El Nivel Prioritario y la facturación mensual están pensados para cargas comprometidas o de alto volumen.&lt;/p&gt;

&lt;h2&gt;
  
  
  Opción 2: reducir consumo de tokens
&lt;/h2&gt;

&lt;p&gt;Estas optimizaciones suelen tener impacto inmediato.&lt;/p&gt;

&lt;h3&gt;
  
  
  Use la API de Batches
&lt;/h3&gt;

&lt;p&gt;Para trabajos que no son sensibles a la latencia, use la API de Batches.&lt;/p&gt;

&lt;p&gt;Ventajas:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;procesamiento asíncrono,&lt;/li&gt;
&lt;li&gt;costo aproximado del 50% del estándar,&lt;/li&gt;
&lt;li&gt;grupo de límites separado,&lt;/li&gt;
&lt;li&gt;evita que trabajos masivos compitan con tráfico interactivo.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Active caché de prompts
&lt;/h3&gt;

&lt;p&gt;Si reutiliza contexto, active caching.&lt;/p&gt;

&lt;p&gt;Casos típicos:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;prompt de sistema grande,&lt;/li&gt;
&lt;li&gt;instrucciones fijas,&lt;/li&gt;
&lt;li&gt;documentos de referencia,&lt;/li&gt;
&lt;li&gt;definiciones de herramientas.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Luego confirme en la página de uso que la tasa de aciertos de caché aumenta.&lt;/p&gt;

&lt;h3&gt;
  
  
  Ajuste &lt;code&gt;max_tokens&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;No hay penalización directa por establecer un &lt;code&gt;max_tokens&lt;/code&gt; alto, pero permite que una respuesta se extienda más y consuma OTPM durante más tiempo.&lt;/p&gt;

&lt;p&gt;Use un límite razonable para cada tipo de tarea:&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="c1"&gt;# Resumen corto
&lt;/span&gt;&lt;span class="n"&gt;max_tokens&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;512&lt;/span&gt;

&lt;span class="c1"&gt;# Informe técnico
&lt;/span&gt;&lt;span class="n"&gt;max_tokens&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;4096&lt;/span&gt;

&lt;span class="c1"&gt;# Generación larga controlada
&lt;/span&gt;&lt;span class="n"&gt;max_tokens&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;8192&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Transmita salidas largas
&lt;/h3&gt;

&lt;p&gt;El streaming ayuda a:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;evitar timeouts,&lt;/li&gt;
&lt;li&gt;mostrar progreso al usuario,&lt;/li&gt;
&lt;li&gt;observar la generación en tiempo real,&lt;/li&gt;
&lt;li&gt;controlar mejor tareas largas.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Para agentes y cargas de larga duración, este recorrido sobre el &lt;a href="https://apidog.com/es/blog/claude-fable-5-agent?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;agente Claude Fable 5&lt;/a&gt; muestra cómo encajan estas prácticas.&lt;/p&gt;

&lt;p&gt;Si está comparando clases de modelos, consulte también la &lt;a href="https://apidog.com/es/blog/how-to-use-claude-opus-4-8-api?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;guía de la API de Claude Opus 4.8&lt;/a&gt; y las notas de &lt;a href="https://apidog.com/es/blog/claude-opus-4-8-pricing?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;precios de Opus 4.8&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Supervise su uso de Fable 5 con Apidog
&lt;/h2&gt;

&lt;p&gt;La forma más directa de entender sus límites es observar solicitudes reales.&lt;/p&gt;

&lt;p&gt;Con &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 crear una solicitud contra la API de Mensajes, enviarla e inspeccionar:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;encabezados &lt;code&gt;anthropic-ratelimit-*&lt;/code&gt;,&lt;/li&gt;
&lt;li&gt;objeto &lt;code&gt;usage&lt;/code&gt;,&lt;/li&gt;
&lt;li&gt;tokens de entrada,&lt;/li&gt;
&lt;li&gt;tokens de salida,&lt;/li&gt;
&lt;li&gt;tokens leídos desde caché.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Esto le permite ver cuánto margen queda antes de alcanzar ITPM u OTPM.&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.amazonaws.com%2Fuploads%2Farticles%2Fhwdtetd58ermhvhyagc8.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.amazonaws.com%2Fuploads%2Farticles%2Fhwdtetd58ermhvhyagc8.png" alt="Supervisión de límites en Apidog" width="799" height="530"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Un flujo práctico:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Cree una solicitud Fable 5 en Apidog.&lt;/li&gt;
&lt;li&gt;Envíe un prompt representativo.&lt;/li&gt;
&lt;li&gt;Lea &lt;code&gt;anthropic-ratelimit-output-tokens-remaining&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Revise &lt;code&gt;usage.output_tokens&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Active caché de prompt.&lt;/li&gt;
&lt;li&gt;Envíe la misma solicitud de nuevo.&lt;/li&gt;
&lt;li&gt;Confirme que &lt;code&gt;usage.cache_read_input_tokens&lt;/code&gt; aumenta.&lt;/li&gt;
&lt;li&gt;Verifique que el consumo de ITPM se reduce.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;También puede guardar la solicitud, variar &lt;code&gt;max_tokens&lt;/code&gt; y comprobar que OTPM sigue la salida real, no el límite configurado.&lt;/p&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; si quiere ejecutar el experimento con su propia clave. Si su equipo ya 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; para diseño y pruebas de API, puede integrar esta supervisión en el mismo espacio de trabajo.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Cómo usar Claude Fable 5 en Cursor</title>
      <dc:creator>Roobia</dc:creator>
      <pubDate>Wed, 10 Jun 2026 10:30:35 +0000</pubDate>
      <link>https://dev.to/roobia/como-usar-claude-fable-5-en-cursor-40p3</link>
      <guid>https://dev.to/roobia/como-usar-claude-fable-5-en-cursor-40p3</guid>
      <description>&lt;p&gt;Ejecutar Claude Fable 5 en Cursor convierte el editor en un entorno donde puedes delegar refactorizaciones de múltiples archivos, migraciones amplias y cambios de arquitectura con menos supervisión manual. Fable 5 es el modelo de codificación de largo alcance de Anthropic, diseñado para mantener una tarea cohesionada a través de millones de tokens. Cursor ya puede conectarse a modelos de Anthropic, así que la configuración consiste en añadir tu clave API, habilitar &lt;code&gt;claude-fable-5&lt;/code&gt; y confirmar que el modelo responde antes de lanzar una ejecución costosa.&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 ya has configurado otros modelos en Cursor, como en el proceso para &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;ejecutar DeepSeek V4 Pro dentro de Cursor&lt;/a&gt;, el flujo te resultará familiar. La diferencia principal está en la facturación: con tu propia clave, Anthropic te cobra directamente por uso.&lt;/p&gt;

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

&lt;ol&gt;
&lt;li&gt;Abre &lt;strong&gt;Cursor Settings&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Ve a &lt;strong&gt;Models&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Pega tu clave API de Anthropic.&lt;/li&gt;
&lt;li&gt;Haz clic en &lt;strong&gt;Verify&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Añade el modelo &lt;code&gt;claude-fable-5&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Actívalo en la lista de modelos.&lt;/li&gt;
&lt;li&gt;Selecciónalo desde el selector antes de iniciar un chat o una ejecución de agente.&lt;/li&gt;
&lt;li&gt;Controla el uso en la consola de Anthropic.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Coste con clave propia:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Entrada: $10 por millón de tokens
Salida:  $50 por millón de tokens
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Úsalo para trabajos largos: migraciones, refactorizaciones grandes, cambios de API o sesiones de agente prolongadas. Para ediciones pequeñas, cambia a un modelo más barato.&lt;/p&gt;

&lt;h2&gt;
  
  
  ¿Por qué usar Fable 5 en Cursor?
&lt;/h2&gt;

&lt;p&gt;La mayoría de los modelos de codificación funcionan bien con tareas pequeñas:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;“Crea esta función”.&lt;/li&gt;
&lt;li&gt;“Corrige este test”.&lt;/li&gt;
&lt;li&gt;“Refactoriza este componente”.&lt;/li&gt;
&lt;li&gt;“Explícame este archivo”.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;El problema aparece cuando la tarea cubre muchos archivos, requiere decenas o cientos de pasos y necesita mantener decisiones previas durante una sesión larga. Ahí el contexto se degrada, el agente repite trabajo o introduce cambios inconsistentes.&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%2F06%2Fimage-202.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%2F06%2Fimage-202.png" alt="" width="800" height="883"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Claude Fable 5 fue diseñado para ese caso: mantener foco durante ejecuciones largas. Dentro de Cursor, eso importa especialmente en el modo agente, donde el modelo puede:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;leer varios archivos,&lt;/li&gt;
&lt;li&gt;proponer un plan,&lt;/li&gt;
&lt;li&gt;editar código,&lt;/li&gt;
&lt;li&gt;ejecutar comandos,&lt;/li&gt;
&lt;li&gt;revisar errores,&lt;/li&gt;
&lt;li&gt;corregir cambios,&lt;/li&gt;
&lt;li&gt;continuar con la siguiente parte de la tarea.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Según el &lt;a href="https://www.anthropic.com/news/claude-fable-5-mythos-5" rel="noopener noreferrer"&gt;anuncio de Fable 5&lt;/a&gt; de Anthropic, el modelo realizó una migración de una base de código Ruby de 50 millones de líneas en un solo día, un trabajo que habría requerido más de dos meses de trabajo manual para un equipo. Ese tipo de tarea es precisamente donde un modelo de largo alcance tiene sentido.&lt;/p&gt;

&lt;p&gt;Usa Fable 5 en Cursor cuando:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;estés migrando una versión de framework, ORM o formato de serialización;&lt;/li&gt;
&lt;li&gt;necesites cambiar una API pública en muchos archivos;&lt;/li&gt;
&lt;li&gt;quieras que el agente planifique, ejecute y se autocorrija durante más tiempo;&lt;/li&gt;
&lt;li&gt;estés trabajando con módulos heredados con mucho contexto interdependiente;&lt;/li&gt;
&lt;li&gt;necesites consistencia entre cambios distribuidos por todo el repositorio.&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%2Fassets.apidog.com%2Fblog-next%2F2026%2F06%2Fimage-218.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%2F06%2Fimage-218.png" alt="" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;No lo uses para todo. Para una corrección de una línea, una prueba rápida o un componente pequeño, el modelo predeterminado de Cursor suele ser suficiente y más barato. La clave es elegir el modelo según el tamaño del trabajo, igual que harías al comparar &lt;a href="https://apidog.com/es/blog/cursor-vs-claude-code-comparison-2026?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Cursor frente a Claude Code para un flujo de trabajo determinado&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Requisitos previos
&lt;/h2&gt;

&lt;p&gt;Antes de configurar Fable 5 en Cursor, confirma lo siguiente.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Cursor instalado y actualizado
&lt;/h3&gt;

&lt;p&gt;Necesitas una versión reciente de Cursor para usar modelos personalizados y claves propias de proveedores. Si no has actualizado Cursor en un tiempo, hazlo antes de configurar el modelo.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Un plan de Cursor compatible con modelos personalizados
&lt;/h3&gt;

&lt;p&gt;La opción de traer tu propia clave API y fijar modelos concretos requiere un nivel de pago de Cursor. El modo gratuito automático no te permite seleccionar cualquier modelo manualmente.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Una clave API de Anthropic con acceso a Fable 5
&lt;/h3&gt;

&lt;p&gt;Crea una clave desde la consola de desarrolladores de Anthropic y asegúrate de que tu cuenta tenga facturación activa. No basta con tener una cuenta: la clave debe pertenecer a un espacio de trabajo que pueda usar la API.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Presupuesto para el coste por tokens
&lt;/h3&gt;

&lt;p&gt;Fable 5 cuesta:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$10 / millón de tokens de entrada
$50 / millón de tokens de salida
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Antes de lanzar una ejecución de agente larga, estima si la tarea justifica ese coste.&lt;/p&gt;

&lt;p&gt;Si quieres revisar la línea general de Claude, la &lt;a href="https://platform.claude.com/docs/en/about-claude/models/overview" rel="noopener noreferrer"&gt;descripción general de los modelos Claude&lt;/a&gt; lista los IDs y precios actuales. También puedes leer esta explicación sobre &lt;a href="https://apidog.com/es/blog/what-is-claude-fable-5?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;qué es Claude Fable 5&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Añadir Claude Fable 5 a Cursor
&lt;/h2&gt;

&lt;p&gt;La configuración tiene dos partes:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;conectar Cursor con tu clave API de Anthropic;&lt;/li&gt;
&lt;li&gt;añadir &lt;code&gt;claude-fable-5&lt;/code&gt; al selector de modelos.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;La &lt;a href="https://cursor.com/help/models-and-usage/api-keys" rel="noopener noreferrer"&gt;documentación de claves API&lt;/a&gt; de Cursor es la referencia principal si la interfaz cambia. El flujo actual es el siguiente.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Abre la configuración de Cursor
&lt;/h3&gt;

&lt;p&gt;Abre Cursor y entra en:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Settings → Models
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;También puedes abrir la configuración desde la paleta de comandos o desde el icono de engranaje.&lt;/p&gt;

&lt;p&gt;En esta sección verás:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;modelos disponibles,&lt;/li&gt;
&lt;li&gt;interruptores para activar o desactivar modelos,&lt;/li&gt;
&lt;li&gt;campos para claves API de proveedores,&lt;/li&gt;
&lt;li&gt;opciones para añadir modelos personalizados.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  2. Localiza el campo de Anthropic
&lt;/h3&gt;

&lt;p&gt;Dentro de &lt;strong&gt;Models&lt;/strong&gt;, busca el campo para la clave API de Anthropic. Es independiente de los campos de OpenAI, Google u otros proveedores.&lt;/p&gt;

&lt;p&gt;Ahí debes pegar tu clave para que las solicitudes a Claude se facturen directamente en tu cuenta de Anthropic.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Pega la clave y verifica
&lt;/h3&gt;

&lt;p&gt;Pega tu clave API de Anthropic y haz clic en:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;Cursor enviará una solicitud de prueba para confirmar que:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;la clave existe,&lt;/li&gt;
&lt;li&gt;la clave es válida,&lt;/li&gt;
&lt;li&gt;tu cuenta puede acceder a la API de Anthropic,&lt;/li&gt;
&lt;li&gt;la facturación está activa.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Si la verificación falla, revisa:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;errores al copiar la clave,&lt;/li&gt;
&lt;li&gt;clave perteneciente a otro workspace,&lt;/li&gt;
&lt;li&gt;cuenta de Anthropic sin facturación configurada,&lt;/li&gt;
&lt;li&gt;falta de acceso al modelo.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  4. Habilita la clave
&lt;/h3&gt;

&lt;p&gt;Después de verificarla, asegúrate de que la clave esté habilitada. Algunas versiones de Cursor muestran un interruptor o una opción similar a:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Enable Anthropic API Key
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Si no la activas, Cursor puede seguir usando su enrutamiento predeterminado en lugar de tu clave.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. Añade &lt;code&gt;claude-fable-5&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;En la lista de modelos, usa el campo de búsqueda o de añadir modelo y escribe exactamente:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;claude-fable-5
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Cuando aparezca, selecciona la opción para añadirlo como modelo personalizado.&lt;/p&gt;

&lt;h3&gt;
  
  
  6. Activa el modelo
&lt;/h3&gt;

&lt;p&gt;Después de añadirlo, confirma que el interruptor junto a &lt;code&gt;claude-fable-5&lt;/code&gt; esté encendido.&lt;/p&gt;

&lt;p&gt;Si el modelo está desactivado, no aparecerá en el selector de modelos del chat o del agente.&lt;/p&gt;

&lt;h3&gt;
  
  
  Nota sobre URL base personalizadas
&lt;/h3&gt;

&lt;p&gt;Si usas directamente la API estándar de Anthropic, no necesitas configurar ninguna URL base personalizada.&lt;/p&gt;

&lt;p&gt;No actives anulaciones de URL base salvo que uses un proxy o gateway específico. Una configuración incorrecta, especialmente una anulación pensada para OpenAI, puede romper el enrutamiento hacia Claude.&lt;/p&gt;

&lt;h2&gt;
  
  
  Seleccionar Fable 5 y verificar que está activo
&lt;/h2&gt;

&lt;p&gt;Añadir el modelo no significa que Cursor lo use automáticamente. Debes seleccionarlo en cada conversación o ejecución donde lo necesites.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Abre un chat o el panel del agente
&lt;/h3&gt;

&lt;p&gt;Abre el chat de Cursor o el panel del agente.&lt;/p&gt;

&lt;p&gt;Busca el selector de modelos, normalmente ubicado cerca del cuadro de entrada o en la cabecera del chat.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Selecciona &lt;code&gt;claude-fable-5&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;Haz clic en el selector y elige:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;claude-fable-5
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;La selección suele mantenerse para esa conversación. Puedes tener un hilo usando Fable 5 y otro usando un modelo más barato.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Comprueba la etiqueta antes de enviar tareas grandes
&lt;/h3&gt;

&lt;p&gt;Antes de iniciar una tarea larga, revisa que el selector muestre:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;claude-fable-5
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;No omitas este paso. Si trabajas con varios modelos, es fácil ejecutar una tarea costosa con el modelo equivocado o lanzar una migración larga con un modelo que no querías usar.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Envía una prueba pequeña
&lt;/h3&gt;

&lt;p&gt;Antes de una ejecución grande, prueba con algo simple:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Resume el archivo actual y lista los puntos de entrada principales.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Después, abre la consola de Anthropic y revisa el panel de uso. Si ves actividad asociada a &lt;code&gt;claude-fable-5&lt;/code&gt;, la configuración está funcionando y Cursor está usando tu clave.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. Ten en cuenta la reserva de seguridad
&lt;/h3&gt;

&lt;p&gt;Anthropic enruta automáticamente una pequeña parte de las solicitudes relacionadas con ciberseguridad, biología, química o destilación de modelos hacia Claude Opus 4.8. Según Anthropic, más del 95% de las sesiones de Fable no implican esa reserva.&lt;/p&gt;

&lt;p&gt;En tareas normales de desarrollo probablemente no lo notarás. Si trabajas en uno de esos temas y la respuesta parece diferente, puede deberse a ese enrutamiento. Para más contexto, consulta este análisis de &lt;a href="https://apidog.com/es/blog/what-is-claude-opus-4-8?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Claude Opus 4.8&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Ejemplo de uso recomendado en Cursor
&lt;/h2&gt;

&lt;p&gt;Para aprovechar Fable 5, no le pidas solo “refactoriza esto”. Dale un plan operativo claro.&lt;/p&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Quiero migrar este módulo de Express a Fastify.

Objetivos:
1. Mantener los mismos endpoints públicos.
2. Preservar los códigos de estado actuales.
3. No cambiar el contrato JSON de las respuestas.
4. Actualizar los tests relacionados.
5. Ejecutar la suite de tests afectada.
6. Mostrar un resumen de archivos modificados.

Antes de editar:
- inspecciona la estructura del proyecto,
- identifica los archivos afectados,
- propón un plan,
- espera mi confirmación.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Este tipo de prompt reduce cambios accidentales y obliga al agente a separar análisis, planificación y ejecución.&lt;/p&gt;

&lt;p&gt;Para una refactorización grande, puedes usar una estructura parecida:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Necesito reemplazar el cliente HTTP interno antiguo por el nuevo wrapper `apiClient`.

Reglas:
- No cambies la firma pública de los servicios.
- Mantén el manejo actual de errores.
- Actualiza imports.
- Elimina código muerto solo si ya no tiene referencias.
- Ejecuta tests por módulo después de cada grupo de cambios.
- Si un test falla, analiza la causa antes de modificar más archivos.

Primero genera un inventario de archivos afectados y un plan por fases.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Notas sobre costes y facturación
&lt;/h2&gt;

&lt;p&gt;Esta parte es importante porque con clave propia no dependes del límite incluido en Cursor: Anthropic mide y factura el uso directamente.&lt;/p&gt;

&lt;h3&gt;
  
  
  Precios con clave propia
&lt;/h3&gt;

&lt;p&gt;Cuando usas tu clave API de Anthropic, Cursor no subvenciona ni empaqueta el coste.&lt;/p&gt;

&lt;p&gt;Anthropic cobra:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Entrada: $10 por millón de tokens
Salida:  $50 por millón de tokens
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Cada solicitud se registra en tu factura de Anthropic.&lt;/p&gt;

&lt;h3&gt;
  
  
  Fable 5 cuesta el doble que Opus 4.8
&lt;/h3&gt;

&lt;p&gt;Opus 4.8 cuesta:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Entrada: $5 por millón de tokens
Salida:  $25 por millón de tokens
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Fable 5 duplica ese precio en ambos lados. Por eso conviene preguntarse:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;¿la tarea necesita contexto largo?&lt;/li&gt;
&lt;li&gt;¿el agente trabajará durante mucho tiempo?&lt;/li&gt;
&lt;li&gt;¿la consistencia entre muchos archivos es crítica?&lt;/li&gt;
&lt;li&gt;¿un modelo más barato podría resolverlo igual?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Para comparar ambos modelos, consulta esta &lt;a href="https://apidog.com/es/blog/claude-fable-5-vs-opus-4-8?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;comparación de Fable 5 frente a Opus 4.8&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  El coste suele concentrarse en la salida
&lt;/h3&gt;

&lt;p&gt;En flujos de agente, los tokens de salida pueden crecer rápido porque el modelo:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;explica planes,&lt;/li&gt;
&lt;li&gt;escribe código,&lt;/li&gt;
&lt;li&gt;genera diffs,&lt;/li&gt;
&lt;li&gt;interpreta errores,&lt;/li&gt;
&lt;li&gt;vuelve a escribir código,&lt;/li&gt;
&lt;li&gt;resume resultados.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Una ejecución autónoma prolongada puede producir mucha salida. Esa es la situación donde Fable 5 puede justificarse, pero también donde la factura puede subir.&lt;/p&gt;

&lt;p&gt;Mientras se ejecuta, revisa el panel de uso de Anthropic.&lt;/p&gt;

&lt;h3&gt;
  
  
  Cuándo volver a un modelo más barato
&lt;/h3&gt;

&lt;p&gt;Cambia a un modelo más económico para:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;correcciones pequeñas,&lt;/li&gt;
&lt;li&gt;preguntas rápidas,&lt;/li&gt;
&lt;li&gt;generación de tests simples,&lt;/li&gt;
&lt;li&gt;cambios de una o dos líneas,&lt;/li&gt;
&lt;li&gt;explicación de código local,&lt;/li&gt;
&lt;li&gt;scaffolding básico.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Un patrón práctico:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Modelo barato → trabajo diario
Fable 5       → migraciones, refactorizaciones amplias y sesiones largas
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Cursor vs Claude Code para Fable 5
&lt;/h2&gt;

&lt;p&gt;Cursor y Claude Code son entornos válidos para Fable 5.&lt;/p&gt;

&lt;p&gt;Cursor encaja mejor si quieres:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;ver diffs en el editor,&lt;/li&gt;
&lt;li&gt;revisar el árbol de archivos,&lt;/li&gt;
&lt;li&gt;dirigir cambios desde un panel de chat,&lt;/li&gt;
&lt;li&gt;combinar edición manual con ejecución de agente.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Claude Code encaja mejor si prefieres:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;trabajar desde la terminal,&lt;/li&gt;
&lt;li&gt;automatizar flujos con scripts,&lt;/li&gt;
&lt;li&gt;integrar el agente en procesos CLI,&lt;/li&gt;
&lt;li&gt;operar sobre repositorios desde la shell.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;La ventaja de largo alcance de Fable 5 aplica en ambos. La elección depende de tu forma de trabajar. Si estás comparando opciones, puedes leer esta &lt;a href="https://apidog.com/es/blog/claude-code-vs-cursor-2026?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;comparación de Cursor y Claude Code para 2026&lt;/a&gt; o la guía sobre &lt;a href="https://apidog.com/es/blog/claude-fable-5-claude-code?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;ejecutar Fable 5 en Claude Code&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Prueba las API que Cursor construye con Apidog
&lt;/h2&gt;

&lt;p&gt;Cuando usas Fable 5 en tareas backend, el agente puede generar rutas, controladores, validadores y esquemas de solicitud. Pero los endpoints generados no deberían aceptarse sin verificació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"&gt;Apidog&lt;/a&gt; es una herramienta para diseñar y probar APIs. Puedes usarla para llamar a los endpoints generados, inspeccionar respuestas reales y comprobar si coinciden con el contrato esperado.&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%2F06%2Fimage-203.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%2F06%2Fimage-203.png" alt="" width="799" height="530"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Un flujo práctico después de que Fable 5 genere endpoints:&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Importa la definición de la API
&lt;/h3&gt;

&lt;p&gt;Si el agente generó un archivo OpenAPI o Swagger, impórtalo en Apidog.&lt;/p&gt;

&lt;p&gt;Apidog crea los endpoints con:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;rutas,&lt;/li&gt;
&lt;li&gt;métodos HTTP,&lt;/li&gt;
&lt;li&gt;parámetros,&lt;/li&gt;
&lt;li&gt;cuerpos de solicitud,&lt;/li&gt;
&lt;li&gt;esquemas de respuesta.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Así evitas reconstruir todo manualmente.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Envía una solicitud real
&lt;/h3&gt;

&lt;p&gt;Selecciona un endpoint, completa los parámetros o el body y envía la solicitud contra tu servidor local.&lt;/p&gt;

&lt;p&gt;Verifica:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;código de estado,&lt;/li&gt;
&lt;li&gt;headers,&lt;/li&gt;
&lt;li&gt;payload JSON,&lt;/li&gt;
&lt;li&gt;tiempos de respuesta,&lt;/li&gt;
&lt;li&gt;errores inesperados.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  3. Compara la respuesta con el esquema
&lt;/h3&gt;

&lt;p&gt;Revisa si la respuesta real coincide con el contrato que Fable 5 generó.&lt;/p&gt;

&lt;p&gt;Busca problemas como:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;campos faltantes,&lt;/li&gt;
&lt;li&gt;tipos incorrectos,&lt;/li&gt;
&lt;li&gt;valores &lt;code&gt;null&lt;/code&gt; no esperados,&lt;/li&gt;
&lt;li&gt;nombres mal escritos,&lt;/li&gt;
&lt;li&gt;diferencias entre el schema y la implementación.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  4. Guarda las solicitudes
&lt;/h3&gt;

&lt;p&gt;Agrupa las llamadas en una colección. Así puedes volver a ejecutarlas después de otra refactorización o migración.&lt;/p&gt;

&lt;p&gt;Este bucle es simple:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Generar en Cursor → Probar en Apidog → Corregir → Repetir
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Ese flujo mantiene la velocidad del agente sin asumir que todo lo generado funciona. Verificar 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; te permite detectar regresiones antes de que lleguen a otro entorno.&lt;/p&gt;

&lt;h2&gt;
  
  
  Cierre
&lt;/h2&gt;

&lt;p&gt;Ya tienes el flujo completo:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;conectar tu clave de Anthropic en Cursor;&lt;/li&gt;
&lt;li&gt;añadir &lt;code&gt;claude-fable-5&lt;/code&gt;;&lt;/li&gt;
&lt;li&gt;seleccionarlo manualmente cuando lo necesites;&lt;/li&gt;
&lt;li&gt;verificar que el uso aparece en Anthropic;&lt;/li&gt;
&lt;li&gt;controlar costes;&lt;/li&gt;
&lt;li&gt;validar cualquier API generada con &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;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Usa Fable 5 para trabajos que realmente necesitan contexto largo: migraciones, refactorizaciones amplias y sesiones de agente prolongadas. Para tareas pequeñas, cambia a un modelo más barato. Si quieres comparar esta configuración con el uso directo desde API, la &lt;a href="https://apidog.com/es/blog/how-to-use-claude-fable-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 Claude Fable 5&lt;/a&gt; es el siguiente paso.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Colaboración Git para Testing y Desarrollo de APIs</title>
      <dc:creator>Roobia</dc:creator>
      <pubDate>Wed, 10 Jun 2026 10:27:38 +0000</pubDate>
      <link>https://dev.to/roobia/colaboracion-git-para-testing-y-desarrollo-de-apis-1n3k</link>
      <guid>https://dev.to/roobia/colaboracion-git-para-testing-y-desarrollo-de-apis-1n3k</guid>
      <description>&lt;p&gt;Tu especificación OpenAPI es el contrato entre tu API y sus consumidores. Para que ese contrato sea útil, debe vivir donde el equipo ya revisa, versiona y despliega cambios: en Git.&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;Cuando la especificación vive en una herramienta aislada, es fácil que se desincronice: la documentación queda obsoleta, las colecciones de pruebas divergen y los reviewers aprueban código sin validar el cambio correspondiente en el contrato de API.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://docs.apidog.com/spec-first-mode-beta-2058268m0?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;&lt;strong&gt;El Modo Spec-first&lt;/strong&gt;&lt;/a&gt; cambia ese flujo: tus archivos OpenAPI o Swagger se almacenan en el repositorio junto al código. Cada cambio pasa por ramas, commits, pull requests y revisiones. El &lt;a href="https://apidog.com/api-design/?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;diseño de API&lt;/a&gt;, las &lt;a href="https://apidog.com/api-testing/?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;pruebas&lt;/a&gt; y la &lt;a href="https://apidog.com/api-doc/?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;documentación&lt;/a&gt; se mantienen sincronizados con la especificación.&lt;/p&gt;

&lt;p&gt;En esta guía verás cómo crear un proyecto Spec-first en Apidog, editar archivos OpenAPI, validar cambios, sincronizar con Git y trabajar con ramas.&lt;/p&gt;




&lt;h2&gt;
  
  
  ¿Qué es el Modo Spec-first?
&lt;/h2&gt;

&lt;p&gt;En un proyecto de API tradicional, defines endpoints desde formularios visuales o importas una especificación inicial. La herramienta guarda la definición internamente y, si existe integración con Git, normalmente funciona como exportación.&lt;/p&gt;

&lt;p&gt;En &lt;strong&gt;Modo Spec-first&lt;/strong&gt;, el flujo está basado en archivos:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;openapi.yaml&lt;/code&gt; u &lt;code&gt;openapi.json&lt;/code&gt; viven en tu repositorio.&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://apidog.com/?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Apidog&lt;/a&gt; analiza esos archivos y genera una estructura navegable.&lt;/li&gt;
&lt;li&gt;Editas el archivo directamente o mediante formularios compatibles.&lt;/li&gt;
&lt;li&gt;Los cambios se sincronizan con Git.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;El archivo de especificación sigue siendo la fuente de verdad. Apidog lo lee, lo escribe y lo mantiene alineado con el repositorio.&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.amazonaws.com%2Fuploads%2Farticles%2Ff60mgtay9zmpp939u92x.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.amazonaws.com%2Fuploads%2Farticles%2Ff60mgtay9zmpp939u92x.png" alt="Crear proyecto Specfirst" width="800" height="576"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Requisitos previos
&lt;/h2&gt;

&lt;p&gt;Antes de empezar, asegúrate de tener:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Una &lt;a href="https://app.apidog.com/user/login?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;&lt;strong&gt;cuenta de Apidog&lt;/strong&gt;&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Un &lt;strong&gt;repositorio Git&lt;/strong&gt; con un archivo OpenAPI/Swagger, o un repositorio vacío.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Permisos de escritura&lt;/strong&gt; sobre el repositorio.&lt;/li&gt;
&lt;li&gt;Conocimiento básico de &lt;strong&gt;OpenAPI o Swagger&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Paso 1: Crear un proyecto Spec-first
&lt;/h2&gt;

&lt;p&gt;En Apidog:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Haz clic en &lt;strong&gt;+ Nuevo Proyecto&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Selecciona &lt;strong&gt;Modo Spec-first&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Conecta tu proveedor Git:

&lt;ul&gt;
&lt;li&gt;GitHub&lt;/li&gt;
&lt;li&gt;GitLab&lt;/li&gt;
&lt;li&gt;Azure DevOps&lt;/li&gt;
&lt;li&gt;Bitbucket&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Elige la organización o workspace.&lt;/li&gt;
&lt;li&gt;Selecciona un repositorio existente o crea uno nuevo.&lt;/li&gt;
&lt;li&gt;Selecciona la rama principal para sincronizar.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Apidog sincroniza con la rama predeterminada del repositorio. Si no se llama &lt;code&gt;main&lt;/code&gt;, la detecta automáticamente.&lt;/p&gt;




&lt;h2&gt;
  
  
  Paso 2: Configurar la sincronización con webhook
&lt;/h2&gt;

&lt;p&gt;Durante la configuración puedes instalar un webhook. Esto permite que Apidog sincronice automáticamente cuando alguien hace push al repositorio.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Nota:&lt;/strong&gt; instalar el webhook normalmente requiere &lt;strong&gt;permisos de administrador&lt;/strong&gt; en el repositorio. Si no los tienes, puedes omitir este paso y usar &lt;strong&gt;Git Pull&lt;/strong&gt; manualmente.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Con webhook activo:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;El equipo hace push de cambios.&lt;/li&gt;
&lt;li&gt;Apidog recibe el evento.&lt;/li&gt;
&lt;li&gt;La especificación se actualiza automáticamente.&lt;/li&gt;
&lt;li&gt;Todos ven la versión más reciente.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Si omitiste este paso, puedes configurarlo después desde:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Configuración del proyecto &amp;gt; Git y Ramas&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Paso 3: Explorar el workspace de Especificaciones
&lt;/h2&gt;

&lt;p&gt;Después de crear el proyecto, Apidog abre el workspace de &lt;strong&gt;Especificaciones&lt;/strong&gt;. Aquí editas archivos, navegas la estructura OpenAPI y ejecutas operaciones Git.&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.amazonaws.com%2Fuploads%2Farticles%2F1f5901k9r7352tvb9byc.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.amazonaws.com%2Fuploads%2Farticles%2F1f5901k9r7352tvb9byc.png" alt="Espacio de trabajo de especificaciones" width="800" height="459"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;El workspace se divide en tres paneles:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Panel&lt;/th&gt;
&lt;th&gt;Qué muestra&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Explorador de Archivos&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Archivos y carpetas del repositorio sincronizado&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Árbol de Estructura API&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Endpoints, esquemas, definiciones y vista general extraídos desde OpenAPI&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Editor&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Edición en vista de código o vista de formulario&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

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

&lt;ol&gt;
&lt;li&gt;Selecciona un archivo OpenAPI en el explorador.&lt;/li&gt;
&lt;li&gt;Usa el árbol para ubicar un endpoint o schema.&lt;/li&gt;
&lt;li&gt;Haz clic en el nodo.&lt;/li&gt;
&lt;li&gt;Apidog resalta la sección correspondiente del YAML o JSON.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Esto te permite moverte entre una vista de alto nivel de la API y el archivo fuente sin cambiar de herramienta.&lt;/p&gt;




&lt;h2&gt;
  
  
  Paso 4: Editar archivos de especificación
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Vista de Código: edición directa
&lt;/h3&gt;

&lt;p&gt;Para YAML, JSON o Markdown, usa la &lt;strong&gt;Vista de código&lt;/strong&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.amazonaws.com%2Fuploads%2Farticles%2F0dtaud03nthkrxmhe957.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.amazonaws.com%2Fuploads%2Farticles%2F0dtaud03nthkrxmhe957.png" alt="Edición en vista de código" width="800" height="464"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Ejemplo de endpoint OpenAPI:&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="na"&gt;paths&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="s"&gt;/users/{id}&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;get&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;summary&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Obtener usuario por ID&lt;/span&gt;
      &lt;span class="na"&gt;parameters&lt;/span&gt;&lt;span class="pi"&gt;:&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;id&lt;/span&gt;
          &lt;span class="na"&gt;in&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;path&lt;/span&gt;
          &lt;span class="na"&gt;required&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
          &lt;span class="na"&gt;schema&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
            &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;string&lt;/span&gt;
      &lt;span class="na"&gt;responses&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;200"&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;
          &lt;span class="na"&gt;description&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Usuario encontrado&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Las ediciones se guardan en el archivo. Apidog no crea una copia paralela ni reemplaza el contrato por un formato interno.&lt;/p&gt;

&lt;h3&gt;
  
  
  Vista de Formulario: edición estructurada
&lt;/h3&gt;

&lt;p&gt;Para nodos compatibles — endpoints, schemas, definiciones y vista general — puedes usar la &lt;strong&gt;Vista de formulario&lt;/strong&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.amazonaws.com%2Fuploads%2Farticles%2Ft19ejha9q7kvw819yykl.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.amazonaws.com%2Fuploads%2Farticles%2Ft19ejha9q7kvw819yykl.png" alt="Edición en vista de formulario" width="800" height="464"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Úsala cuando quieras:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Añadir endpoints sin memorizar toda la estructura YAML.&lt;/li&gt;
&lt;li&gt;Editar schemas visualmente.&lt;/li&gt;
&lt;li&gt;Actualizar metadatos de API.&lt;/li&gt;
&lt;li&gt;Configurar definiciones de seguridad.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Si un nodo no admite formulario, Apidog mantiene la edición en vista de código.&lt;/p&gt;




&lt;h2&gt;
  
  
  Paso 5: Validar y previsualizar cambios
&lt;/h2&gt;

&lt;p&gt;El Modo Spec-first incluye validación y previsualización de documentación sin salir del editor.&lt;/p&gt;

&lt;h3&gt;
  
  
  Validar la especificación
&lt;/h3&gt;

&lt;p&gt;Haz clic en &lt;strong&gt;Validación&lt;/strong&gt; en el encabezado del editor.&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.amazonaws.com%2Fuploads%2Farticles%2Fpx3xo29hyr32uyzdxqwa.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.amazonaws.com%2Fuploads%2Farticles%2Fpx3xo29hyr32uyzdxqwa.png" alt="Panel de validación" width="800" height="464"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;El panel muestra advertencias y errores, por ejemplo:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Errores de sintaxis.&lt;/li&gt;
&lt;li&gt;Campos obligatorios faltantes.&lt;/li&gt;
&lt;li&gt;Violaciones de schema.&lt;/li&gt;
&lt;li&gt;Problemas de convenciones de nombres.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Antes de hacer commit, revisa y corrige los errores. Así reduces el trabajo manual durante la revisión del pull request.&lt;/p&gt;

&lt;h3&gt;
  
  
  Previsualizar documentación
&lt;/h3&gt;

&lt;p&gt;Haz clic en &lt;strong&gt;Previsualizar&lt;/strong&gt; para ver cómo se renderiza la especificación como documentación de API.&lt;/p&gt;

&lt;p&gt;Para &lt;strong&gt;endpoints&lt;/strong&gt;, la vista previa incluye:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Pestaña&lt;/th&gt;
&lt;th&gt;Contenido&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Docs&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Documentación generada del endpoint&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Pruébalo&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Panel de solicitud en vivo basado en la definición del endpoint&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&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.amazonaws.com%2Fuploads%2Farticles%2Fn7y60x75vghxfary46gk.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.amazonaws.com%2Fuploads%2Farticles%2Fn7y60x75vghxfary46gk.png" alt="Previsualización de endpoint con 'Pruébalo'" width="800" height="464"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Para &lt;strong&gt;schemas y definiciones&lt;/strong&gt;, la vista previa muestra la documentación renderizada.&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.amazonaws.com%2Fuploads%2Farticles%2Fll1itaqq2drmytvj1xcs.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.amazonaws.com%2Fuploads%2Farticles%2Fll1itaqq2drmytvj1xcs.png" alt="Previsualización de esquema" width="800" height="464"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;La validación y la previsualización comparten el mismo panel lateral. Abrir uno cierra el otro.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Paso 6: Obtener cambios del equipo
&lt;/h2&gt;

&lt;p&gt;Cuando otros colaboradores suben cambios al repositorio, sincronízalos en Apidog:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Abre el workspace de &lt;strong&gt;Especificaciones&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Haz clic en el nombre de la rama actual.&lt;/li&gt;
&lt;li&gt;Selecciona &lt;strong&gt;Git Pull&lt;/strong&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Si el webhook está activo, Apidog hace pull automáticamente cuando detecta eventos de push.&lt;/p&gt;




&lt;h2&gt;
  
  
  Paso 7: Hacer commit y push de tus cambios
&lt;/h2&gt;

&lt;p&gt;Después de editar la especificación:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Abre &lt;strong&gt;Cambios&lt;/strong&gt; en la barra lateral.&lt;/li&gt;
&lt;li&gt;Revisa archivos modificados, añadidos, renombrados o eliminados.&lt;/li&gt;
&lt;li&gt;Haz clic en &lt;strong&gt;Commit &amp;amp; Push&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Selecciona los archivos que quieres incluir.&lt;/li&gt;
&lt;li&gt;Escribe un mensaje de commit.&lt;/li&gt;
&lt;li&gt;Haz clic en &lt;strong&gt;Push&lt;/strong&gt;.&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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8kcwduyhbl4pj7grw41e.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.amazonaws.com%2Fuploads%2Farticles%2F8kcwduyhbl4pj7grw41e.png" alt="Flujo de trabajo de commit y push" width="800" height="465"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Ejemplo de mensaje de commit:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;docs: update user endpoints OpenAPI spec
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Tus cambios de especificación pasan al mismo flujo de pull request que el código. El equipo puede revisar implementación y contrato de API en un solo lugar.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Consejo:&lt;/strong&gt; usa &lt;strong&gt;Descartar todos los cambios&lt;/strong&gt; si quieres abandonar ediciones locales antes de hacer push.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Paso 8: Trabajar con ramas
&lt;/h2&gt;

&lt;p&gt;El Modo Spec-first soporta colaboración basada en ramas. Apidog mapea ramas de Git a ramas del proyecto, lo que permite trabajar con múltiples versiones de la especificación.&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.amazonaws.com%2Fuploads%2Farticles%2Fgs2cr0zuqin15c4ylqvr.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.amazonaws.com%2Fuploads%2Farticles%2Fgs2cr0zuqin15c4ylqvr.png" alt="Gestión de ramas" width="800" height="464"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Operaciones comunes:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Acción&lt;/th&gt;
&lt;th&gt;Cómo hacerlo&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Cambiar de rama&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Haz clic en el nombre de la rama y selecciona otra&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Importar rama Git existente&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Haz clic en &lt;strong&gt;Importar Nueva Rama&lt;/strong&gt;, selecciona la rama e impórtala&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Crear nueva rama&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Ve a &lt;strong&gt;Configuración del Proyecto &amp;gt; Git y Ramas &amp;gt; Nueva Rama&lt;/strong&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Corregir problemas de sincronización&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Usa &lt;strong&gt;Resincronizar&lt;/strong&gt; en la configuración de la rama&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Ver registros de sincronización&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Acciones de rama &amp;gt; &lt;strong&gt;Ver Registros&lt;/strong&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Puedes usar el mismo flujo que en Git:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Ramas de feature.&lt;/li&gt;
&lt;li&gt;Ramas de release.&lt;/li&gt;
&lt;li&gt;Desarrollo paralelo.&lt;/li&gt;
&lt;li&gt;Revisión por pull request.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Paso 9: Integrar con CI/CD
&lt;/h2&gt;

&lt;p&gt;Como la especificación vive en Git, puedes incluirla en tus pipelines.&lt;/p&gt;

&lt;p&gt;Casos comunes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Ejecutar lint de OpenAPI en cada pull request.&lt;/li&gt;
&lt;li&gt;Generar documentación al fusionar en &lt;code&gt;main&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Ejecutar pruebas de API cuando cambia la especificación.&lt;/li&gt;
&lt;li&gt;Sincronizar con gateways, mock servers o generadores de SDK.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Ejemplo con GitHub Actions:&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="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Validate and Test API Spec&lt;/span&gt;

&lt;span class="na"&gt;on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;push&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;branches&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;main&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;
  &lt;span class="na"&gt;pull_request&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;branches&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;main&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;validate&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;Lint OpenAPI Spec&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;npx spectral lint openapi.yaml&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;Run API Tests&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;apidog run tests --spec openapi.yaml&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Con este flujo, la especificación pasa por las mismas puertas de calidad que el código de aplicación.&lt;/p&gt;




&lt;h2&gt;
  
  
  Alternativa: proyectos con respaldo de almacenamiento
&lt;/h2&gt;

&lt;p&gt;Si todavía no quieres conectar un repositorio Git externo, Apidog también permite proyectos &lt;strong&gt;Spec-first con respaldo de almacenamiento&lt;/strong&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.amazonaws.com%2Fuploads%2Farticles%2Fqb77zam9p7yhg6knm679.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.amazonaws.com%2Fuploads%2Farticles%2Fqb77zam9p7yhg6knm679.png" alt="Proyecto con respaldo de almacenamiento" width="800" height="507"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Estos proyectos usan el almacenamiento interno de Apidog, pero mantienen capacidades como:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Edición basada en archivos.&lt;/li&gt;
&lt;li&gt;Validación.&lt;/li&gt;
&lt;li&gt;Previsualización.&lt;/li&gt;
&lt;li&gt;Gestión de ramas.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;La interfaz cambia ligeramente:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Git Pull&lt;/strong&gt; pasa a ser &lt;strong&gt;Sincronizar&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Commit &amp;amp; Push&lt;/strong&gt; pasa a ser &lt;strong&gt;Guardar&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Puedes empezar así y migrar a Git externo cuando tu equipo esté listo.&lt;/p&gt;




&lt;h2&gt;
  
  
  Resumen
&lt;/h2&gt;

&lt;p&gt;Con el Modo Spec-first, tu flujo de trabajo cambia así:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Antes de Spec-first&lt;/th&gt;
&lt;th&gt;Después de Spec-first&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Las especificaciones viven en una herramienta separada&lt;/td&gt;
&lt;td&gt;Las especificaciones viven en tu repositorio Git&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Exportas e importas para sincronizar&lt;/td&gt;
&lt;td&gt;Sincronizas automáticamente en cada push&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Las revisiones ocurren fuera del flujo de código&lt;/td&gt;
&lt;td&gt;Las revisiones ocurren en pull requests&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;La documentación se genera por separado&lt;/td&gt;
&lt;td&gt;La previsualizas mientras editas&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Las pruebas están desconectadas de la especificación&lt;/td&gt;
&lt;td&gt;Las pruebas pueden activarse por cambios en la especificación&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;El Modo Spec-first&lt;/strong&gt; convierte tus archivos OpenAPI en el contrato que deberían ser: versionados, revisados y alineados con el código.&lt;/p&gt;

&lt;p&gt;Para empezar, crea un proyecto Spec-first en Apidog, conecta tu repositorio y convierte la especificación en parte real de tu flujo de desarrollo.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Las 7 mejores alternativas a Scalar para documentación de API en 2026</title>
      <dc:creator>Roobia</dc:creator>
      <pubDate>Wed, 10 Jun 2026 07:00:33 +0000</pubDate>
      <link>https://dev.to/roobia/las-7-mejores-alternativas-a-scalar-para-documentacion-de-api-en-2026-dd2</link>
      <guid>https://dev.to/roobia/las-7-mejores-alternativas-a-scalar-para-documentacion-de-api-en-2026-dd2</guid>
      <description>&lt;p&gt;Scalar se ganó su popularidad por una razón clara: convierte una especificación OpenAPI en una referencia rápida, limpia y con consola de pruebas, y se integra en Fastify, Hono, Express o .NET con muy poco código. Si solo necesitas publicar una referencia atractiva para una API, Scalar cumple muy bien.&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;Pero “buena documentación de referencia” no siempre cubre todo el ciclo de vida de una API. Si tu equipo ya superó lo que Scalar ofrece, normalmente es por alguno de estos motivos:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Necesitas algo más que referencia.&lt;/strong&gt; Scalar renderiza muy bien una especificación, pero las guías largas, tutoriales, navegación estructurada y contenido conceptual suelen requerir una plataforma más orientada a documentación completa.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Quieres conectar diseño, pruebas, mocks y documentación.&lt;/strong&gt; Scalar muestra la especificación, pero no diseña APIs, no ejecuta suites automatizadas ni mantiene mocks de producción.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Necesitas controles de equipo o empresa.&lt;/strong&gt; Permisos granulares, SSO, auditoría y flujos de gobernanza todavía están madurando en la &lt;a href="https://scalar.com/pricing" rel="noopener noreferrer"&gt;plataforma alojada de Scalar&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Scalar no es una mala herramienta; de hecho, publicamos una &lt;a href="https://apidog.com/es/blog/how-to-use-scalar?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;guía completa para principiantes de Scalar&lt;/a&gt; porque es útil. Pero si necesitas migrar, estas son siete alternativas prácticas.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Apidog
&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 alternativa natural si quieres mantener el flujo OpenAPI, la documentación alojada y la consola de pruebas, pero añadir diseño, depuración, pruebas automatizadas, mocks y publicación desde una misma fuente de verdad.&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.amazonaws.com%2Fuploads%2Farticles%2F5kqcc2ru5ypr1t6plhha.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.amazonaws.com%2Fuploads%2Farticles%2F5kqcc2ru5ypr1t6plhha.png" alt="Apidog" width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Con Apidog puedes trabajar así:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Importa tu archivo OpenAPI actual.&lt;/li&gt;
&lt;li&gt;Revisa o edita endpoints desde el editor visual.&lt;/li&gt;
&lt;li&gt;Genera documentación pública desde la misma especificación.&lt;/li&gt;
&lt;li&gt;Crea casos de prueba sobre esos endpoints.&lt;/li&gt;
&lt;li&gt;Levanta mocks basados en los esquemas.&lt;/li&gt;
&lt;li&gt;Mantén documentación, pruebas y mocks sincronizados cuando cambie la API.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;La ventaja práctica es que la documentación deja de ser un artefacto separado. Si cambia un endpoint, el contrato, los mocks y las pruebas se actualizan desde el mismo lugar.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Por qué cambiar desde Scalar:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Pruebas automatizadas e integración CI/CD.&lt;/li&gt;
&lt;li&gt;Mock servers que generan respuestas desde los esquemas.&lt;/li&gt;
&lt;li&gt;Espacios de trabajo con roles, ramas y sincronización en tiempo real.&lt;/li&gt;
&lt;li&gt;Plan gratuito con documentación alojada, diseño personalizado y flujo diseño-prueba-mock.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Cuándo quedarse con Scalar:&lt;/strong&gt; si solo necesitas renderizar una referencia dentro de una app backend existente, Scalar sigue siendo más ligero. Puedes revisar la &lt;a href="https://apidog.com/es/blog/apidog-vs-scalar?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;comparación Apidog vs Scalar&lt;/a&gt; para decidir.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Precios:&lt;/strong&gt; gratis para la mayoría de los equipos; los planes de pago añaden SSO y controles empresariales.&lt;/p&gt;

&lt;p&gt;Para probarlo, &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;, importa el mismo OpenAPI que usas con Scalar y valida si tu documentación puede pasar a ser testeable y simulable sin reescribir la API.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Redocly
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://redocly.com" rel="noopener noreferrer"&gt;Redocly&lt;/a&gt; viene del ecosistema de Redoc, uno de los renderizadores OpenAPI de código abierto más conocidos. Su plataforma de pago se centra en gobernanza: linting de especificaciones con la &lt;a href="https://apidog.com/es/blog/redocly-cli?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;CLI de Redocly&lt;/a&gt;, portales multi-API y controles de acceso.&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.amazonaws.com%2Fuploads%2Farticles%2Fl7u6gu7xhadiw9lcqzxf.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.amazonaws.com%2Fuploads%2Farticles%2Fl7u6gu7xhadiw9lcqzxf.png" alt="Redocly" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Flujo típico de implementación:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Define reglas de estilo para tus especificaciones.&lt;/li&gt;
&lt;li&gt;Ejecuta linting en local o CI.&lt;/li&gt;
&lt;li&gt;Publica varias APIs en un portal centralizado.&lt;/li&gt;
&lt;li&gt;Aplica roles y permisos por proyecto o documentación.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Por qué cambiar desde Scalar:&lt;/strong&gt; si tu problema principal es la gobernanza de muchas APIs. Redocly ayuda a imponer calidad de especificación antes de publicar.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cuidado con:&lt;/strong&gt; el precio. El plan Pro cuesta $50 al mes por un proyecto y 100 páginas, con cargos adicionales por páginas y proyectos. Si solo necesitas renderizado, Scalar puede salir más barato.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Mintlify
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://www.mintlify.com" rel="noopener noreferrer"&gt;Mintlify&lt;/a&gt; prioriza contenido escrito: guías, tutoriales, onboarding, changelogs y documentación conceptual. La referencia OpenAPI queda integrada como una parte más del sitio.&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.amazonaws.com%2Fuploads%2Farticles%2Fnly4b21ch71tgb4chwmv.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.amazonaws.com%2Fuploads%2Farticles%2Fnly4b21ch71tgb4chwmv.png" alt="Mintlify" width="616" height="426"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Flujo típico de implementación:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Guarda la documentación como MDX en tu repositorio Git.&lt;/li&gt;
&lt;li&gt;Define navegación, secciones y componentes.&lt;/li&gt;
&lt;li&gt;Importa tu OpenAPI para generar la referencia.&lt;/li&gt;
&lt;li&gt;Publica documentación con guías y referencia en un mismo portal.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Por qué cambiar desde Scalar:&lt;/strong&gt; si tu documentación no es solo una lista de endpoints. Mintlify funciona bien cuando las guías y tutoriales son el centro de la experiencia.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cuidado con:&lt;/strong&gt; el coste crece rápido. El plan Hobby sirve para proyectos pequeños, pero Pro supera los $250 al mes. Puedes ver una comparación más amplia en &lt;a href="https://apidog.com/es/blog/mintlify-vs-scalar-vs-bump-vs-readme-vs-redocly?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Mintlify vs Scalar vs Bump vs ReadMe vs Redocly&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. ReadMe
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://readme.com" rel="noopener noreferrer"&gt;ReadMe&lt;/a&gt; trata la documentación como un developer hub. Su punto fuerte es la personalización: los usuarios autenticados pueden ver ejemplos con sus propias claves de API y revisar llamadas recientes, incluidas las fallidas.&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.amazonaws.com%2Fuploads%2Farticles%2Fjlc9sph4olen6l6us5do.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.amazonaws.com%2Fuploads%2Farticles%2Fjlc9sph4olen6l6us5do.png" alt="ReadMe" width="799" height="413"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Flujo típico de implementación:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Importa tu OpenAPI.&lt;/li&gt;
&lt;li&gt;Publica referencia y guías.&lt;/li&gt;
&lt;li&gt;Conecta autenticación o datos de usuario.&lt;/li&gt;
&lt;li&gt;Muestra ejemplos personalizados y actividad reciente de API.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Por qué cambiar desde Scalar:&lt;/strong&gt; si quieres que la documentación también sirva como superficie de soporte y depuración. Ver qué endpoints fallan para cada usuario puede reducir tickets y acelerar troubleshooting.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cuidado con:&lt;/strong&gt; el flujo es más “editor web primero”, lo que puede ser incómodo si tu equipo prefiere documentación como código. La personalización avanzada requiere el plan Business de $399 al mes; el precio inicial comienza en $99 al mes.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. SwaggerHub
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://swagger.io/tools/swaggerhub/" rel="noopener noreferrer"&gt;SwaggerHub&lt;/a&gt; es una opción empresarial consolidada para centralizar muchas especificaciones OpenAPI con versionado, dominios reutilizables y reglas de estandarización. También lo comparamos en &lt;a href="https://apidog.com/es/blog/scalar-vs-swaggerhub-vs-apidog-api-docs-2?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Scalar vs SwaggerHub vs 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.amazonaws.com%2Fuploads%2Farticles%2Frf2zkw7o0ttququ1ydql.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.amazonaws.com%2Fuploads%2Farticles%2Frf2zkw7o0ttququ1ydql.png" alt="SwaggerHub" width="799" height="392"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Flujo típico de implementación:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Centraliza las especificaciones OpenAPI en un catálogo.&lt;/li&gt;
&lt;li&gt;Define dominios y componentes reutilizables.&lt;/li&gt;
&lt;li&gt;Establece reglas de estandarización.&lt;/li&gt;
&lt;li&gt;Versiona APIs y gestiona revisiones por equipo.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Por qué cambiar desde Scalar:&lt;/strong&gt; si necesitas un catálogo gobernado para muchas APIs y un proveedor aprobado por entornos empresariales.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cuidado con:&lt;/strong&gt; la salida visual puede sentirse menos moderna que Scalar. Aquí normalmente se prioriza gobernanza sobre experiencia visual.&lt;/p&gt;

&lt;h2&gt;
  
  
  6. Stoplight
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://stoplight.io" rel="noopener noreferrer"&gt;Stoplight&lt;/a&gt; combina documentación alojada, diseñador visual de OpenAPI y Prism, su servidor mock de código abierto. Es útil para equipos que quieren diseñar la API antes de implementar el backend.&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.amazonaws.com%2Fuploads%2Farticles%2F2tr0n2hakiqh352do4sv.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.amazonaws.com%2Fuploads%2Farticles%2F2tr0n2hakiqh352do4sv.png" alt="Stoplight" width="800" height="457"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Flujo típico de implementación:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Modela endpoints y esquemas en el editor visual.&lt;/li&gt;
&lt;li&gt;Genera o edita la especificación OpenAPI.&lt;/li&gt;
&lt;li&gt;Usa Prism para simular respuestas.&lt;/li&gt;
&lt;li&gt;Publica la documentación alojada.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Por qué cambiar desde Scalar:&lt;/strong&gt; Scalar asume que ya tienes una especificación terminada. Stoplight ayuda a crearla y simularla antes de escribir código.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cuidado con:&lt;/strong&gt; SmartBear adquirió Stoplight y sus capacidades se están integrando gradualmente en SwaggerHub. Tenlo en cuenta si buscas una apuesta de largo plazo.&lt;/p&gt;

&lt;h2&gt;
  
  
  7. Bump.sh
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://bump.sh" rel="noopener noreferrer"&gt;Bump.sh&lt;/a&gt; se especializa en seguimiento de cambios. Compara cada versión de la especificación, detecta breaking changes y notifica a consumidores de la API. Soporta OpenAPI y AsyncAPI.&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.amazonaws.com%2Fuploads%2Farticles%2F3g1ottevj05h2wmwdnjm.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.amazonaws.com%2Fuploads%2Farticles%2F3g1ottevj05h2wmwdnjm.png" alt="Bump.sh" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Flujo típico de implementación:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Conecta tu repositorio o pipeline de CI.&lt;/li&gt;
&lt;li&gt;Sube cada nueva versión de la especificación.&lt;/li&gt;
&lt;li&gt;Detecta cambios compatibles y breaking changes.&lt;/li&gt;
&lt;li&gt;Publica changelogs para consumidores.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Por qué cambiar desde Scalar:&lt;/strong&gt; si tu problema no es mostrar el estado actual de la API, sino comunicar qué cambió y a quién afecta.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cuidado con:&lt;/strong&gt; su alcance es especializado. Puede que termines usando Bump.sh junto con otra herramienta de documentación o una plataforma más completa.&lt;/p&gt;

&lt;h2&gt;
  
  
  Cómo elegir el reemplazo adecuado
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Tu razón para dejar Scalar&lt;/th&gt;
&lt;th&gt;Mejor opción&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Necesitas pruebas, mocks y documentación desde una sola especificación&lt;/td&gt;
&lt;td&gt;Apidog&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Necesitas linting y gobernanza multi-API&lt;/td&gt;
&lt;td&gt;Redocly&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Tu documentación son principalmente guías y tutoriales&lt;/td&gt;
&lt;td&gt;Mintlify&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Quieres registros de API por usuario dentro de la documentación&lt;/td&gt;
&lt;td&gt;ReadMe&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Necesitas un catálogo empresarial para cientos de especificaciones&lt;/td&gt;
&lt;td&gt;SwaggerHub&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Quieres diseño visual de especificaciones y simulación&lt;/td&gt;
&lt;td&gt;Stoplight&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Necesitas changelogs automáticos para consumidores&lt;/td&gt;
&lt;td&gt;&lt;a href="http://Bump.sh" rel="noopener noreferrer"&gt;Bump.sh&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Si quieres mantener todo en tu propia infraestructura, revisa también esta lista de &lt;a href="https://apidog.com/es/blog/self-hosted-api-documentation-tools?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;herramientas de documentación de API autoalojadas&lt;/a&gt;. Scalar open source sigue siendo una opción válida en ese escenario, pero las compensaciones cambian.&lt;/p&gt;

&lt;h2&gt;
  
  
  Qué implica migrar desde Scalar
&lt;/h2&gt;

&lt;p&gt;Migrar desde Scalar suele ser más simple que migrar desde plataformas cerradas porque la base es OpenAPI. Divide el trabajo en tres partes.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Migrar la referencia
&lt;/h3&gt;

&lt;p&gt;Tu archivo OpenAPI es la referencia completa.&lt;/p&gt;

&lt;p&gt;Pasos recomendados:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Exporta o localiza el archivo OpenAPI usado por Scalar.&lt;/li&gt;
&lt;li&gt;Impórtalo en la nueva herramienta.&lt;/li&gt;
&lt;li&gt;Valida endpoints, esquemas, autenticación y ejemplos.&lt;/li&gt;
&lt;li&gt;Publica una versión privada o de staging antes de cambiar la URL pública.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Si integraste Scalar en tu backend con algo como &lt;code&gt;app.use()&lt;/code&gt;, retirar esa ruta suele ser un cambio pequeño. También puedes dejarla activa internamente mientras publicas la nueva documentación.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Migrar las guías
&lt;/h3&gt;

&lt;p&gt;La referencia se mueve rápido; las guías son el trabajo real.&lt;/p&gt;

&lt;p&gt;Antes de elegir plataforma:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Cuenta cuántas páginas de guía tienes.&lt;/li&gt;
&lt;li&gt;Identifica si usan Markdown, MDX o componentes propios de Scalar.&lt;/li&gt;
&lt;li&gt;Separa contenido conceptual, tutoriales y changelogs.&lt;/li&gt;
&lt;li&gt;Estima correcciones manuales de formato.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Markdown suele moverse bien a Mintlify o Apidog, pero los componentes específicos pueden requerir adaptación.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Preservar URLs y SEO
&lt;/h3&gt;

&lt;p&gt;No ignores las URLs si tu documentación ya está indexada.&lt;/p&gt;

&lt;p&gt;Checklist mínimo:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Mantén el mismo dominio personalizado si es posible.&lt;/li&gt;
&lt;li&gt;Replica slugs importantes.&lt;/li&gt;
&lt;li&gt;Configura redirecciones 301 desde rutas antiguas.&lt;/li&gt;
&lt;li&gt;Revisa enlaces internos después de publicar.&lt;/li&gt;
&lt;li&gt;Verifica páginas indexadas y errores 404.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Omitir esto puede reiniciar la visibilidad de búsqueda de tu documentación.&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;¿La versión open source de Scalar es suficiente para producción?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Sí, si solo necesitas una referencia pública con consola de prueba. Las limitaciones aparecen en flujos de equipo: permisos, revisiones, analíticas, pruebas, mocks y gobernanza.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;¿Cuál es la salida más económica desde Scalar alojado?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;El plan gratuito de Apidog cubre documentación alojada con consola de prueba, marca personalizada y proyectos ilimitados, por lo que muchos equipos pequeños pueden empezar sin coste. También puedes revisar este resumen de las &lt;a href="https://apidog.com/es/blog/api-documentation-tool?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;8 mejores herramientas de documentación de API&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;¿Puedo migrar sin reescribir toda la documentación?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Sí, si tu documentación está basada en OpenAPI. Todas las herramientas de esta lista importan OpenAPI 3.x. Lo que puede requerir trabajo manual son las guías escritas fuera de la especificación.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;¿Qué alternativa soporta REST y APIs orientadas a eventos?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://Bump.sh" rel="noopener noreferrer"&gt;Bump.sh&lt;/a&gt; soporta AsyncAPI junto con OpenAPI. Apidog cubre depuración de REST, GraphQL, WebSocket, gRPC y SSE en un solo espacio de trabajo.&lt;/p&gt;

&lt;h2&gt;
  
  
  Prueba práctica
&lt;/h2&gt;

&lt;p&gt;La forma más rápida de decidir es usar tu propia API:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Toma el archivo OpenAPI que hoy renderizas con Scalar.&lt;/li&gt;
&lt;li&gt;Impórtalo 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; o en la herramienta que encaje con tu caso.&lt;/li&gt;
&lt;li&gt;Publica una versión de prueba.&lt;/li&gt;
&lt;li&gt;Valida consola, ejemplos, autenticación, mocks y flujo de actualización.&lt;/li&gt;
&lt;li&gt;Decide con base en el trabajo real, no solo en capturas o tablas comparativas.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Treinta minutos con tu propia especificación suelen aclarar más que cualquier comparativa.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Claude Fable 5 vs Opus 4.8: ¿Cuándo vale la pena el doble de precio?</title>
      <dc:creator>Roobia</dc:creator>
      <pubDate>Wed, 10 Jun 2026 03:40:31 +0000</pubDate>
      <link>https://dev.to/roobia/claude-fable-5-vs-opus-48-cuando-vale-la-pena-el-doble-de-precio-13</link>
      <guid>https://dev.to/roobia/claude-fable-5-vs-opus-48-cuando-vale-la-pena-el-doble-de-precio-13</guid>
      <description>&lt;p&gt;Anthropic lanzó Claude Fable 5 el 9 de junio de 2026 con una decisión de arquitectura bastante clara: &lt;strong&gt;Claude Fable 5 vs Opus 4.8 es, ante todo, una decisión de costo&lt;/strong&gt;. Fable 5 cuesta exactamente el doble por token que Opus 4.8: entrada a 10 $ por millón de tokens frente a 5 $, y salida a 50 $ por millón frente a 25 $. Antes de mirar benchmarks, la matemática ya está definida: mismo proveedor, misma API de Mensajes y un sobreprecio del 2x para el modelo más nuevo. La pregunta práctica es cuándo ese sobreprecio se amortiza y cuándo solo duplica tu factura. Si necesitas contexto sobre el modelo anterior, esta &lt;a href="https://apidog.com/es/blog/what-is-claude-opus-4-8?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;guía de Claude Opus 4.8&lt;/a&gt; explica qué es y dónde encaja en la línea de productos.&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;h2&gt;
  
  
  TL;DR
&lt;/h2&gt;

&lt;p&gt;Claude Fable 5 y Opus 4.8 pertenecen a la misma familia. Fable 5 cuesta exactamente el doble que Opus 4.8 por token: 10 $/50 $ frente a 5 $/25 $. Para la mayoría de tareas de chat, generación de código y RAG, Opus 4.8 es la opción más eficiente. Usa Fable 5 cuando necesites trabajo autónomo de muy largo alcance que mantenga coherencia durante millones de tokens. En el resto de casos, empieza con Opus 4.8 y escala solo si tus pruebas lo justifican.&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.amazonaws.com%2Fuploads%2Farticles%2F7b1v88flgn6694zoz1av.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.amazonaws.com%2Fuploads%2Farticles%2F7b1v88flgn6694zoz1av.png" alt="Claude Fable 5 vs Opus 4.8" width="800" height="883"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Claude Fable 5 vs Opus 4.8 de un vistazo
&lt;/h2&gt;

&lt;p&gt;Usa esta tabla como punto de partida para decidir qué modelo probar primero.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Dimensión&lt;/th&gt;
&lt;th&gt;Claude Fable 5&lt;/th&gt;
&lt;th&gt;Claude Opus 4.8&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;ID de modelo de API&lt;/td&gt;
&lt;td&gt;&lt;code&gt;claude-fable-5&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;claude-opus-4-8&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Precio de entrada por 1M de tokens&lt;/td&gt;
&lt;td&gt;10,00 $&lt;/td&gt;
&lt;td&gt;5,00 $&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Precio de salida por 1M de tokens&lt;/td&gt;
&lt;td&gt;50,00 $&lt;/td&gt;
&lt;td&gt;25,00 $&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Costo relativo&lt;/td&gt;
&lt;td&gt;2x Opus 4.8&lt;/td&gt;
&lt;td&gt;Base&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Contexto&lt;/td&gt;
&lt;td&gt;Opera con millones de tokens; sin número fijo publicado&lt;/td&gt;
&lt;td&gt;Ventana de contexto de 1M de tokens&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Pensamiento y esfuerzo&lt;/td&gt;
&lt;td&gt;Pensamiento adaptativo&lt;/td&gt;
&lt;td&gt;Pensamiento adaptativo + esfuerzo bajo/medio/alto/muy alto/máx.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Posicionamiento&lt;/td&gt;
&lt;td&gt;Modelo de clase Mythos hecho seguro para uso general; el más capaz que Anthropic ha puesto a disposición general&lt;/td&gt;
&lt;td&gt;Muy capaz; fue el modelo más capaz de Anthropic disponible generalmente antes de Fable 5&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Mejor para&lt;/td&gt;
&lt;td&gt;Trabajo autónomo de muy largo alcance, migraciones enormes, agentes de varias horas&lt;/td&gt;
&lt;td&gt;La mayoría de chats, generación de código, RAG y cargas interactivas&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Una nota importante sobre contexto: Anthropic no ha publicado un número exacto para la ventana de contexto de Fable 5. Lo describe como un modelo capaz de mantenerse enfocado a lo largo de millones de tokens, así que conviene tratar esa ventaja como una fortaleza cualitativa, no como una especificación cerrada. Opus 4.8 sí tiene una ventana documentada de 1 millón de tokens. Si tu documento de diseño necesita una cifra precisa, Opus 4.8 es el que puedes citar. La &lt;a href="https://platform.claude.com/docs/en/about-claude/models/overview" rel="noopener noreferrer"&gt;documentación general de modelos&lt;/a&gt; de Anthropic lista las especificaciones publicadas. Para una introducción al nuevo modelo, consulta este &lt;a href="https://apidog.com/es/blog/what-is-claude-fable-5?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;explicador sobre Claude Fable 5&lt;/a&gt;, y para costos del modelo anterior, este &lt;a href="https://apidog.com/es/blog/claude-opus-4-8-pricing?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;análisis de precios de Opus 4.8&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Precio: Fable 5 cuesta exactamente el doble
&lt;/h2&gt;

&lt;p&gt;Empieza por el dato más fácil de validar.&lt;/p&gt;

&lt;p&gt;Fable 5 cobra:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;10 $ por millón de tokens de entrada&lt;/li&gt;
&lt;li&gt;50 $ por millón de tokens de salida&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Opus 4.8 cobra:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;5 $ por millón de tokens de entrada&lt;/li&gt;
&lt;li&gt;25 $ por millón de tokens de salida&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Es decir:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Fable 5 = 2 x Opus 4.8
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;No hay cambio de API ni de flujo de autenticación que compense esa diferencia. Si duplicas el precio por token, tienes que demostrar que la mejora de calidad o autonomía también aporta valor suficiente. Puedes verificar las tarifas actuales en la &lt;a href="https://www.anthropic.com/pricing" rel="noopener noreferrer"&gt;página de precios&lt;/a&gt; de Anthropic.&lt;/p&gt;

&lt;p&gt;Por cada 1.000 tokens, el costo aproximado queda así:&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 por 1.000 tokens&lt;/th&gt;
&lt;th&gt;Salida por 1.000 tokens&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Fable 5&lt;/td&gt;
&lt;td&gt;0,010 $&lt;/td&gt;
&lt;td&gt;0,050 $&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Opus 4.8&lt;/td&gt;
&lt;td&gt;0,005 $&lt;/td&gt;
&lt;td&gt;0,025 $&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Estos importes parecen pequeños por llamada, pero el volumen cambia la lectura. Supongamos una carga mensual con:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;200 millones de tokens de entrada&lt;/li&gt;
&lt;li&gt;40 millones de tokens de salida&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;El cálculo sería:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Opus 4.8
Entrada: 200 x 5 $  = 1.000 $
Salida:   40 x 25 $ = 1.000 $
Total:              = 2.000 $

Fable 5
Entrada: 200 x 10 $ = 2.000 $
Salida:   40 x 50 $ = 2.000 $
Total:              = 4.000 $
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Mismos tokens, mismo flujo, factura duplicada.&lt;/p&gt;

&lt;p&gt;Por eso la pregunta correcta no es “¿Fable 5 es mejor?”. En muchos escenarios lo será. La pregunta útil para producción es:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;¿Fable 5 es lo bastante mejor en esta carga específica como para duplicar este costo?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Para una herramienta interna de bajo volumen, 2.000 $ adicionales al mes quizá no importen. Para un endpoint de alto tráfico orientado a clientes, puede cambiar el margen. Calcula por carga de trabajo, no por reputación del modelo. Si quieres profundizar en la opción más económica, revisa el &lt;a href="https://apidog.com/es/blog/claude-opus-4-8-pricing?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;análisis de precios de Opus 4.8&lt;/a&gt;. Para el nuevo modelo, la &lt;a href="https://apidog.com/es/blog/claude-fable-5-pricing?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;guía de precios de Claude Fable 5&lt;/a&gt; resume sus tarifas.&lt;/p&gt;

&lt;h2&gt;
  
  
  Capacidad: dónde Fable 5 toma la delantera
&lt;/h2&gt;

&lt;p&gt;Fable 5 no es solo un cambio de nombre sobre Opus 4.8. Es un modelo más capaz, especialmente cuando la tarea es larga, autónoma y requiere coherencia sostenida.&lt;/p&gt;

&lt;p&gt;En el &lt;a href="https://www.anthropic.com/news/claude-fable-5-mythos-5" rel="noopener noreferrer"&gt;anuncio de Claude Fable 5&lt;/a&gt;, Anthropic lo describe como un modelo de clase Mythos hecho seguro para uso general y como el modelo más capaz que la compañía ha puesto a disposición general. Su diferencial está en trabajos autónomos de muy largo alcance, con foco a lo largo de millones de tokens.&lt;/p&gt;

&lt;p&gt;Ese punto importa porque muchas aplicaciones no fallan por una mala respuesta aislada. Fallan cuando el modelo:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;pierde el plan después de muchos pasos,&lt;/li&gt;
&lt;li&gt;deja de respetar decisiones anteriores,&lt;/li&gt;
&lt;li&gt;no mantiene un estado de trabajo coherente,&lt;/li&gt;
&lt;li&gt;o toma buenas decisiones al principio pero malas al final de una ejecución larga.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;El ejemplo más claro citado es Stripe: Fable 5 realizó una migración de una base de código Ruby de 50 millones de líneas en un solo día, un trabajo que el equipo estimó que habría llevado dos meses o más. No es una tarea típica de “escribe una función”. Es una migración a escala donde el cuello de botella es la coherencia sostenida sobre una enorme base de código.&lt;/p&gt;

&lt;p&gt;Ese es el tipo de trabajo donde Fable 5 puede justificar su precio.&lt;/p&gt;

&lt;p&gt;También hay una señal importante en tareas con memoria. En una prueba de Slay the Spire, darle a Fable 5 memoria de archivo persistente produjo una mejora de 3x sobre Opus 4.8. La lección práctica es más amplia que el juego: si tu agente escribe notas, mantiene un plan, consulta memoria persistente y ejecuta durante muchas iteraciones, Fable 5 puede convertir esa memoria en mejores resultados.&lt;/p&gt;

&lt;p&gt;En benchmarks, Fable 5 alcanzó posiciones de vanguardia en evaluaciones como FrontierCode y FrontierBench de Cognition, CursorBench y Hebbia’s Finance Benchmark. Anthropic no ha publicado puntuaciones públicas para todos esos casos, así que conviene tratarlos como señales direccionales, no como números para presupuestos o SLAs. El patrón general es claro: Fable 5 apunta a tareas difíciles, agentic, financieras y de codificación de varios pasos.&lt;/p&gt;

&lt;p&gt;También hay una diferencia de comportamiento que debes considerar. Fable 5 incluye salvaguardas que redirigen ciertas consultas sensibles —ciberseguridad, biología, química y solicitudes de destilación de modelos— hacia Opus 4.8 en lugar de responder directamente. Anthropic indica que esto ocurre en menos del 5% de las sesiones. Para la mayoría de aplicaciones no aparecerá, pero si trabajas en dominios sensibles, debes probarlo explícitamente. Para comparaciones con otros proveedores, puedes revisar la &lt;a href="https://apidog.com/es/blog/claude-opus-4-8-vs-gpt-5-5-vs-gemini-3-5?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;comparación de Opus 4.8 frente a GPT-5.5 y Gemini 3.5&lt;/a&gt; y la &lt;a href="https://apidog.com/es/blog/claude-fable-5-vs-gpt-5-5-vs-gemini-3-5?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;comparación de Fable 5 frente a GPT-5.5 y Gemini 3.5&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Dónde Opus 4.8 es la compra más inteligente
&lt;/h2&gt;

&lt;p&gt;Para muchas cargas de producción, Opus 4.8 es la opción correcta.&lt;/p&gt;

&lt;p&gt;Opus 4.8 era el modelo más capaz de Anthropic disponible generalmente antes de Fable 5. No dejó de ser útil cuando apareció el modelo nuevo. Sigue ofreciendo:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;ventana de contexto documentada de 1 millón de tokens,&lt;/li&gt;
&lt;li&gt;pensamiento adaptativo,&lt;/li&gt;
&lt;li&gt;configuración de esfuerzo desde bajo hasta máximo,&lt;/li&gt;
&lt;li&gt;resultados sólidos en chat, código y RAG,&lt;/li&gt;
&lt;li&gt;y un costo por token 50% menor que Fable 5.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Si tu tarea cabe cómodamente en 1 millón de tokens y se resuelve en una ronda o en un bucle corto, pagar Fable 5 puede ser innecesario.&lt;/p&gt;

&lt;p&gt;Opus 4.8 suele ser la mejor primera opción para:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Chats interactivos y asistentes&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Cada turno es corto, la latencia importa y el modelo no necesita mantener un plan durante horas.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Generación o revisión de código acotada&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Por ejemplo, una función, un archivo, un diff o un pull request. El contexto está delimitado y la tarea termina rápido.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;RAG y preguntas sobre documentos&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Si recuperas el contexto relevante y lo insertas dentro de una ventana de 1M de tokens, Opus 4.8 ya tiene la capacidad documentada que necesitas.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Workloads de alto volumen&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Si la diferencia de calidad no cambia el resultado del producto, el 2x de Fable 5 se convierte directamente en costo adicional.&lt;/p&gt;

&lt;p&gt;Hay otro dato interesante: cuando Fable 5 activa sus salvaguardas para ciertas categorías sensibles, recurre a Opus 4.8. Eso sugiere que Opus 4.8 sigue siendo lo bastante robusto para manejar tráfico real en situaciones donde Anthropic no quiere que Fable 5 responda directamente.&lt;/p&gt;

&lt;p&gt;La estrategia recomendada es simple:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Empieza con Opus 4.8.
Mide calidad, latencia y costo.
Escala a Fable 5 solo las cargas que necesiten autonomía de largo alcance.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Si incluso Opus 4.8 es excesivo para una carga simple de alto volumen, Claude Sonnet 4.6 se sitúa por debajo con 3 $ de entrada y 15 $ de salida. Para detalles de configuración sobre modelos Claude más económicos, esta &lt;a href="https://apidog.com/es/blog/how-to-use-claude-opus-4-8-api?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;guía de API de Opus 4.8&lt;/a&gt; cubre las llamadas básicas.&lt;/p&gt;

&lt;h2&gt;
  
  
  Marco de decisión: cuál deberías elegir
&lt;/h2&gt;

&lt;p&gt;Decide por carga de trabajo, no por marketing. Estas reglas cubren la mayoría de casos prácticos.&lt;/p&gt;

&lt;h3&gt;
  
  
  Usa Opus 4.8 si...
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;La tarea es corta o de un solo turno.&lt;/li&gt;
&lt;li&gt;Estás haciendo chat, clasificación, extracción o resumen.&lt;/li&gt;
&lt;li&gt;Generas código a nivel de función, archivo o PR.&lt;/li&gt;
&lt;li&gt;Usas RAG con contexto dentro de 1 millón de tokens.&lt;/li&gt;
&lt;li&gt;El costo es una restricción importante.&lt;/li&gt;
&lt;li&gt;No necesitas que el modelo opere de forma autónoma durante horas.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Usa Fable 5 si...
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;El agente debe trabajar durante mucho tiempo sin perder coherencia.&lt;/li&gt;
&lt;li&gt;La tarea abarca una base de código enorme.&lt;/li&gt;
&lt;li&gt;Estás ejecutando migraciones o refactorizaciones masivas.&lt;/li&gt;
&lt;li&gt;El modelo necesita mantener planes, notas o memoria persistente.&lt;/li&gt;
&lt;li&gt;El costo de un fallo o desviación es mayor que el sobreprecio del modelo.&lt;/li&gt;
&lt;li&gt;Tus pruebas A/B muestran una mejora material frente a Opus 4.8.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;La regla práctica:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Opus 4.8 por defecto. Fable 5 solo para cargas que demuestren necesitar autonomía de largo alcance.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Duplicar el costo global porque una tarea concreta se beneficia de Fable 5 es una forma común de gastar de más.&lt;/p&gt;

&lt;h2&gt;
  
  
  Cómo alternar entre ellos en el código
&lt;/h2&gt;

&lt;p&gt;La migración técnica es mínima. Ambos modelos usan la misma API de Mensajes. No necesitas cambiar SDK, autenticación ni estructura principal de la solicitud. Cambias el ID del modelo:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;claude-opus-4-8&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;claude-fable-5&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Ejemplo en Python:&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;anthropic&lt;/span&gt;

&lt;span class="n"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;anthropic&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Anthropic&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;messages&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;claude-opus-4-8&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;  &lt;span class="c1"&gt;# cambia a "claude-fable-5" cuando lo necesites
&lt;/span&gt;    &lt;span class="n"&gt;max_tokens&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;16000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;thinking&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;adaptive&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;Summarize this design doc and list open questions.&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="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;block&lt;/span&gt; &lt;span class="ow"&gt;in&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;content&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;block&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nb"&gt;type&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;text&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;block&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;Para producción, lo más útil es enrutar por solicitud. Por ejemplo:&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="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;select_model&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;task_type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;long_running&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;bool&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;cost_sensitive&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;bool&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;str&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;long_running&lt;/span&gt; &lt;span class="ow"&gt;and&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="n"&gt;cost_sensitive&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;claude-fable-5&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;

    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;task_type&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;large_migration&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;multi_hour_agent&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;}:&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;claude-fable-5&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;

    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;claude-opus-4-8&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;


&lt;span class="n"&gt;model&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;select_model&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;task_type&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;code_review&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;long_running&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;False&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;cost_sensitive&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="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;messages&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="n"&gt;model&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;max_tokens&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;8000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;thinking&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;adaptive&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;Review this pull request and identify correctness risks.&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;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;También puedes mover esa decisión a configuración:&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="nv"&gt;DEFAULT_CLAUDE_MODEL&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;claude-opus-4-8
&lt;span class="nv"&gt;LONG_RUNNING_CLAUDE_MODEL&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;claude-fable-5
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Y usarla en tu servicio:&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="n"&gt;DEFAULT_MODEL&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="nf"&gt;getenv&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;DEFAULT_CLAUDE_MODEL&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;claude-opus-4-8&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;LONG_RUNNING_MODEL&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="nf"&gt;getenv&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;LONG_RUNNING_CLAUDE_MODEL&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;claude-fable-5&lt;/span&gt;&lt;span class="sh"&gt;"&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;model_for_request&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&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="n"&gt;request&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="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;requires_long_horizon_reasoning&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;LONG_RUNNING_MODEL&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;DEFAULT_MODEL&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;La clave es evitar un cambio global innecesario. Mantén Opus 4.8 como ruta por defecto y usa Fable 5 solo cuando la solicitud lo justifique. Para más detalles de la superficie de solicitud del modelo anterior, consulta el &lt;a href="https://apidog.com/es/blog/how-to-use-claude-opus-4-8-api?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;tutorial de la API de Opus 4.8&lt;/a&gt;. La &lt;a href="https://apidog.com/es/blog/how-to-use-claude-fable-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 Fable 5&lt;/a&gt; cubre el nuevo modelo.&lt;/p&gt;

&lt;h2&gt;
  
  
  Cómo compararlos con tus propios prompts
&lt;/h2&gt;

&lt;p&gt;Las tablas de precios y las afirmaciones de benchmarks ayudan, pero la decisión real depende de tus prompts, tus datos y tus criterios de calidad.&lt;/p&gt;

&lt;p&gt;Un experimento mínimo debería comparar:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;misma instrucción,&lt;/li&gt;
&lt;li&gt;mismo contexto,&lt;/li&gt;
&lt;li&gt;mismos límites de salida,&lt;/li&gt;
&lt;li&gt;mismo formato esperado,&lt;/li&gt;
&lt;li&gt;distinto &lt;code&gt;model&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Ejemplo de matriz simple:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Prueba&lt;/th&gt;
&lt;th&gt;Modelo&lt;/th&gt;
&lt;th&gt;Calidad&lt;/th&gt;
&lt;th&gt;Latencia&lt;/th&gt;
&lt;th&gt;Tokens entrada&lt;/th&gt;
&lt;th&gt;Tokens salida&lt;/th&gt;
&lt;th&gt;Costo estimado&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Prompt A&lt;/td&gt;
&lt;td&gt;&lt;code&gt;claude-opus-4-8&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Prompt A&lt;/td&gt;
&lt;td&gt;&lt;code&gt;claude-fable-5&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Prompt B&lt;/td&gt;
&lt;td&gt;&lt;code&gt;claude-opus-4-8&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Prompt B&lt;/td&gt;
&lt;td&gt;&lt;code&gt;claude-fable-5&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&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;Evalúa cada respuesta con criterios concretos:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;¿resuelve la tarea?&lt;/li&gt;
&lt;li&gt;¿respeta el formato?&lt;/li&gt;
&lt;li&gt;¿omite información crítica?&lt;/li&gt;
&lt;li&gt;¿mantiene coherencia con instrucciones anteriores?&lt;/li&gt;
&lt;li&gt;¿requiere reintentos?&lt;/li&gt;
&lt;li&gt;¿la mejora de Fable 5 cambia el resultado del usuario?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Luego calcula costo usando los tokens reales de entrada y salida. Si Fable 5 es mejor pero no cambia la experiencia ni reduce trabajo posterior, probablemente no justifique el 2x.&lt;/p&gt;

&lt;h2&gt;
  
  
  Compáralos tú mismo con Apidog
&lt;/h2&gt;

&lt;p&gt;La forma más directa de resolver Claude Fable 5 vs Opus 4.8 para tu caso es enviar la misma solicitud a ambos IDs de modelo y comparar resultados. &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; facilita ese flujo.&lt;/p&gt;

&lt;p&gt;Configura una solicitud contra la API de Mensajes de Anthropic, duplícala y cambia solo el campo del modelo:&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;"claude-opus-4-8"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"max_tokens"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;16000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"thinking"&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;"adaptive"&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;"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;"Analiza este documento de diseño y enumera riesgos, preguntas abiertas y próximos pasos."&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;Luego prueba la misma solicitud con:&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;"claude-fable-5"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"max_tokens"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;16000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"thinking"&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;"adaptive"&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;"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;"Analiza este documento de diseño y enumera riesgos, preguntas abiertas y próximos pasos."&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;Usa prompts que se parezcan a tu tráfico real, no preguntas triviales. Después compara:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;corrección,&lt;/li&gt;
&lt;li&gt;completitud,&lt;/li&gt;
&lt;li&gt;consistencia,&lt;/li&gt;
&lt;li&gt;latencia,&lt;/li&gt;
&lt;li&gt;tokens de entrada,&lt;/li&gt;
&lt;li&gt;tokens de salida,&lt;/li&gt;
&lt;li&gt;costo estimado por llamada.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Apidog te permite guardar ambas solicitudes como una pequeña colección A/B y repetir la comparación cuando cambien tus prompts o aparezca un nuevo modelo. Si quieres probarlo, &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; y construye las dos solicitudes en unos minutos. Es una forma más fiable de decidir que leer otra hoja de especificaciones, y &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; mantiene toda la comparación en un solo lugar.&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.amazonaws.com%2Fuploads%2Farticles%2Fssqvvnnok52719fga2z9.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.amazonaws.com%2Fuploads%2Farticles%2Fssqvvnnok52719fga2z9.png" alt="Comparación en Apidog" width="799" height="530"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Cómo usar la API de Claude Fable 5</title>
      <dc:creator>Roobia</dc:creator>
      <pubDate>Wed, 10 Jun 2026 03:13:00 +0000</pubDate>
      <link>https://dev.to/roobia/como-usar-la-api-de-claude-fable-5-4lak</link>
      <guid>https://dev.to/roobia/como-usar-la-api-de-claude-fable-5-4lak</guid>
      <description>&lt;p&gt;Anthropic lanzó Claude Fable 5 el 9 de junio de 2026. Si construyes integraciones o herramientas para desarrolladores, lo importante es que se usa con la misma API de Mensajes de Claude: solo cambias el modelo a &lt;code&gt;claude-fable-5&lt;/code&gt;. En esta guía verás cómo hacer la primera llamada, usar Python y TypeScript, activar streaming, trabajar con herramientas, manejar errores y calcular costos por solicitud.&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;h2&gt;
  
  
  TL;DR
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Crea una clave en la &lt;a href="https://console.anthropic.com" rel="noopener noreferrer"&gt;Consola de Anthropic&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Expórtala 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;ANTHROPIC_API_KEY&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"sk-ant-..."&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Envía un &lt;code&gt;POST&lt;/code&gt; a &lt;code&gt;https://api.anthropic.com/v1/messages&lt;/code&gt; con:
&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="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;"claude-fable-5"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"max_tokens"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1024&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;"Summarize what makes a good REST API in 3 bullet points."&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;Puedes usar &lt;code&gt;curl&lt;/code&gt;, HTTP puro o los SDK oficiales de Anthropic para Python y TypeScript. Para respuestas largas, usa streaming. El precio indicado es de &lt;strong&gt;$10 por millón de tokens de entrada&lt;/strong&gt; y &lt;strong&gt;$50 por millón de tokens de salida&lt;/strong&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.amazonaws.com%2Fuploads%2Farticles%2F93itj9jefb2ocjj9jpw9.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.amazonaws.com%2Fuploads%2Farticles%2F93itj9jefb2ocjj9jpw9.png" alt="Claude Fable 5 API" width="800" height="883"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Antes de empezar
&lt;/h2&gt;

&lt;p&gt;Necesitas cuatro cosas:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Una cuenta de Anthropic.&lt;/strong&gt; Regístrate en &lt;a href="https://console.anthropic.com" rel="noopener noreferrer"&gt;console.anthropic.com&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Una clave API.&lt;/strong&gt; Créala desde la sección de claves API de la consola. Cópiala una sola vez y trátala como una contraseña.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Facturación activa o plan Enterprise.&lt;/strong&gt; Fable 5 está disponible en la API estándar de Claude y en planes Enterprise basados en consumo. Si todavía estás evaluando el modelo, revisa la guía sobre &lt;a href="https://apidog.com/es/blog/what-is-claude-fable-5?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;qué es Claude Fable 5&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Un SDK opcional.&lt;/strong&gt; Puedes usar el SDK oficial de Anthropic o hacer llamadas HTTP directamente.&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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frdgmjtfmi7k9m7vs00xa.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.amazonaws.com%2Fuploads%2Farticles%2Frdgmjtfmi7k9m7vs00xa.png" alt="Consola de Anthropic" width="799" height="457"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Configura la clave fuera del código fuente:&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;ANTHROPIC_API_KEY&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"sk-ant-..."&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Los SDK oficiales leen &lt;code&gt;ANTHROPIC_API_KEY&lt;/code&gt; automáticamente desde el entorno. No guardes claves en Git. Si una clave se filtra, rótala inmediatamente desde la consola.&lt;/p&gt;

&lt;p&gt;Un detalle importante: Fable 5 puede redirigir un pequeño segmento de consultas sensibles —por ejemplo, ciberseguridad, biología, química o intentos de destilación de modelos— a Claude Opus 4.8. Esto ocurre en menos del 5% de las sesiones. No necesitas configurarlo, pero puede explicar por qué &lt;code&gt;response.model&lt;/code&gt; a veces devuelve un modelo distinto.&lt;/p&gt;

&lt;h2&gt;
  
  
  Primera llamada a la API de Claude Fable 5
&lt;/h2&gt;

&lt;p&gt;Empieza con &lt;code&gt;curl&lt;/code&gt; para validar la solicitud sin SDKs:&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.anthropic.com/v1/messages &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"x-api-key: &lt;/span&gt;&lt;span class="nv"&gt;$ANTHROPIC_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;"anthropic-version: 2023-06-01"&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;'{"model":"claude-fable-5","max_tokens":1024,"messages":[{"role":"user","content":"Summarize what makes a good REST API in 3 bullet points."}]}'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;El endpoint es:&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://api.anthropic.com/v1/messages
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;La solicitud requiere estos encabezados:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Encabezado&lt;/th&gt;
&lt;th&gt;Uso&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;x-api-key&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Tu clave API&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;anthropic-version&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Versión de API, por ejemplo &lt;code&gt;2023-06-01&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;content-type&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Debe ser &lt;code&gt;application/json&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;El cuerpo mínimo necesita:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Campo&lt;/th&gt;
&lt;th&gt;Descripción&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;model&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Usa &lt;code&gt;claude-fable-5&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;max_tokens&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Máximo de tokens de salida&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;messages&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Lista de mensajes de la conversación&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Ejemplo de respuesta:&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;"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;"msg_01ABC..."&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;"message"&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;"assistant"&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;"claude-fable-5"&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="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;"text"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"text"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"- Predictable, resource-oriented URLs..."&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;"stop_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;"end_turn"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"usage"&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;"input_tokens"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;18&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"output_tokens"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;96&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;No trates &lt;code&gt;content&lt;/code&gt; como una cadena. Es una lista de bloques. Una respuesta puede incluir texto, llamadas a herramientas u otros bloques. Recorre la lista y valida &lt;code&gt;type&lt;/code&gt; antes de leer &lt;code&gt;text&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="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;block&lt;/span&gt; &lt;span class="ow"&gt;in&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;content&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;block&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nb"&gt;type&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;text&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;block&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;&lt;code&gt;stop_reason&lt;/code&gt; indica por qué terminó la generación. &lt;code&gt;usage&lt;/code&gt; contiene los tokens de entrada y salida, útiles para calcular costos.&lt;/p&gt;

&lt;h2&gt;
  
  
  Usar Claude Fable 5 desde Python
&lt;/h2&gt;

&lt;p&gt;Instala el SDK oficial:&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;anthropic
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Ejemplo básico:&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;anthropic&lt;/span&gt;

&lt;span class="n"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;anthropic&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Anthropic&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;  &lt;span class="c1"&gt;# lee ANTHROPIC_API_KEY del entorno
&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;messages&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;claude-fable-5&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;max_tokens&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;1024&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;Summarize what makes a good REST API.&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="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;block&lt;/span&gt; &lt;span class="ow"&gt;in&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;content&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;block&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nb"&gt;type&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;text&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;block&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;La estructura es la misma que en &lt;code&gt;curl&lt;/code&gt;: defines &lt;code&gt;model&lt;/code&gt;, &lt;code&gt;max_tokens&lt;/code&gt; y &lt;code&gt;messages&lt;/code&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Añadir un mensaje de sistema
&lt;/h3&gt;

&lt;p&gt;Usa &lt;code&gt;system&lt;/code&gt; para definir el rol, formato y restricciones globales 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="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;messages&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;claude-fable-5&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;max_tokens&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;2048&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;system&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;You are a senior backend engineer. Be concise and use code examples.&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;Write a Flask route that validates a JSON body.&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="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;block&lt;/span&gt; &lt;span class="ow"&gt;in&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;content&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;block&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nb"&gt;type&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;text&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;block&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;Usa el mensaje de sistema para reglas persistentes, por ejemplo:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;tono de respuesta;&lt;/li&gt;
&lt;li&gt;idioma;&lt;/li&gt;
&lt;li&gt;formato esperado;&lt;/li&gt;
&lt;li&gt;nivel de detalle;&lt;/li&gt;
&lt;li&gt;restricciones técnicas.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Mantén este mensaje estable si luego quieres aprovechar caché de prompts.&lt;/p&gt;

&lt;h3&gt;
  
  
  Streaming en Python
&lt;/h3&gt;

&lt;p&gt;Para respuestas largas, usa streaming. Así puedes mostrar tokens conforme llegan y evitar timeouts en respuestas grandes:&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="k"&gt;with&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;messages&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;stream&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;claude-fable-5&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;max_tokens&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;4096&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;Explain idempotency keys for payment APIs.&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="k"&gt;as&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;for&lt;/span&gt; &lt;span class="n"&gt;text&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;text_stream&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;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;span class="n"&gt;final&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;stream&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get_final_message&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="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="se"&gt;\n\n&lt;/span&gt;&lt;span class="s"&gt;Tokens: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;final&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;span class="n"&gt;output_tokens&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&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;stream.text_stream&lt;/code&gt; produce fragmentos de texto. Al final, &lt;code&gt;stream.get_final_message()&lt;/code&gt; devuelve el mensaje completo con &lt;code&gt;usage&lt;/code&gt;, sin hacer una segunda solicitud.&lt;/p&gt;

&lt;h2&gt;
  
  
  Usar Claude Fable 5 desde TypeScript / Node
&lt;/h2&gt;

&lt;p&gt;Instala 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; @anthropic-ai/sdk
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Ejemplo básico:&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="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;Anthropic&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;@anthropic-ai/sdk&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;Anthropic&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt; &lt;span class="c1"&gt;// lee ANTHROPIC_API_KEY&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;msg&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;messages&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;claude-fable-5&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;max_tokens&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1024&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;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;List 3 common API security mistakes.&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;msg&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;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Para extraer solo texto:&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;text&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;msg&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="nf"&gt;filter&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;block&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;block&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;text&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="nf"&gt;map&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;block&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;block&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;text&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;join&lt;/span&gt;&lt;span class="p"&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;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;text&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Si vas a conectar esto a una interfaz de chat, transmite desde una ruta de servidor y reenvía los fragmentos al navegador. Antes de escribir el cliente, puedes validar el contrato con Apidog siguiendo un flujo similar al de &lt;a href="https://apidog.com/es/blog/how-to-test-chatgpt-api-with-apidog?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;probar la API de ChatGPT con Apidog&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Uso de herramientas con Fable 5
&lt;/h2&gt;

&lt;p&gt;El uso de herramientas permite que el modelo solicite la ejecución de funciones que tú defines. El flujo es:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Defines una herramienta con esquema JSON.&lt;/li&gt;
&lt;li&gt;Envías la herramienta junto con el prompt.&lt;/li&gt;
&lt;li&gt;El modelo devuelve un bloque &lt;code&gt;tool_use&lt;/code&gt; si quiere llamarla.&lt;/li&gt;
&lt;li&gt;Tu aplicación ejecuta la función real.&lt;/li&gt;
&lt;li&gt;Devuelves el resultado como &lt;code&gt;tool_result&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;El modelo responde usando ese resultado.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Define una 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="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_order_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;Look up the status of a customer order by ID.&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;input_schema&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;order_id&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="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;order_id&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;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Pásala en 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;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;What&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;s the status of order A1855?&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;messages&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;claude-fable-5&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;max_tokens&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;1024&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="n"&gt;messages&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;messages&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;Procesa la llamada a 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="k"&gt;if&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;stop_reason&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;tool_use&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;tool_use&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;next&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="n"&gt;block&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;block&lt;/span&gt; &lt;span class="ow"&gt;in&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;content&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;block&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nb"&gt;type&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;tool_use&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
    &lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="c1"&gt;# Ejecuta tu función real con el input elegido por el modelo
&lt;/span&gt;    &lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;lookup_order&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;tool_use&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nb"&gt;input&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;order_id&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="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;append&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;assistant&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="n"&gt;response&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;messages&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;append&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="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;tool_result&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;tool_use_id&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;tool_use&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nb"&gt;id&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="n"&gt;result&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;followup&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;messages&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;claude-fable-5&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;max_tokens&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;1024&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="n"&gt;messages&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;messages&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 campo crítico es &lt;code&gt;tool_use_id&lt;/code&gt;. Debe coincidir con el &lt;code&gt;id&lt;/code&gt; del bloque &lt;code&gt;tool_use&lt;/code&gt;. Para agentes de varios pasos, envuelve este patrón en un bucle hasta que &lt;code&gt;stop_reason&lt;/code&gt; sea &lt;code&gt;end_turn&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Pensamiento adaptativo y esfuerzo
&lt;/h2&gt;

&lt;p&gt;Fable 5 admite pensamiento adaptativo. Esto permite que el modelo decida cuándo razonar más profundamente antes de responder.&lt;/p&gt;

&lt;p&gt;Actívalo así:&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;messages&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;claude-fable-5&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;max_tokens&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;4096&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;thinking&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;adaptive&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="n"&gt;output_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;effort&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;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;# low | medium | high
&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 retry strategy for a flaky webhook receiver.&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;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Usa &lt;code&gt;effort&lt;/code&gt; según el tipo de tarea:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Valor&lt;/th&gt;
&lt;th&gt;Cuándo usarlo&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;low&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Respuestas cortas, transformaciones simples, clasificación&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;medium&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Diseño técnico moderado, explicaciones con pasos&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;high&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Problemas complejos, planificación, debugging avanzado&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;No lo actives por defecto en todas las rutas. Para búsquedas simples o respuestas breves, el razonamiento adicional puede aumentar el costo sin aportar valor.&lt;/p&gt;

&lt;h2&gt;
  
  
  Manejo de errores
&lt;/h2&gt;

&lt;p&gt;En producción, captura excepciones tipadas. No compares strings de error.&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;anthropic&lt;/span&gt;

&lt;span class="n"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;anthropic&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Anthropic&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="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;messages&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;claude-fable-5&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;max_tokens&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;1024&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;Explain CORS preflight requests.&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="k"&gt;except&lt;/span&gt; &lt;span class="n"&gt;anthropic&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;AuthenticationError&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="c1"&gt;# 401: clave inválida o ausente
&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;Invalid API key. Rotate it in the Console and re-export.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;except&lt;/span&gt; &lt;span class="n"&gt;anthropic&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;RateLimitError&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="c1"&gt;# 429: demasiadas solicitudes
&lt;/span&gt;    &lt;span class="n"&gt;retry_after&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;e&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;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="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;retry-after&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;60&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="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Rate limited. Retry after &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;retry_after&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;s.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;except&lt;/span&gt; &lt;span class="n"&gt;anthropic&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;BadRequestError&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="c1"&gt;# 400: solicitud mal formada
&lt;/span&gt;    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Bad request: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;message&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Errores comunes:&lt;/p&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 AuthenticationError&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Clave ausente, inválida o revocada&lt;/td&gt;
&lt;td&gt;Revisa &lt;code&gt;ANTHROPIC_API_KEY&lt;/code&gt; y la consola&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;429 RateLimitError&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Límite de RPM o TPM superado&lt;/td&gt;
&lt;td&gt;Aplica backoff y respeta &lt;code&gt;retry-after&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;400 BadRequestError&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;JSON inválido, &lt;code&gt;messages&lt;/code&gt; vacío, falta &lt;code&gt;max_tokens&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;Valida el payload antes de enviar&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;El SDK reintenta errores &lt;code&gt;429&lt;/code&gt; y &lt;code&gt;5xx&lt;/code&gt; con retroceso exponencial, con dos reintentos por defecto.&lt;/p&gt;

&lt;h3&gt;
  
  
  Manejar el fallback de salvaguardia
&lt;/h3&gt;

&lt;p&gt;Fable 5 puede redirigir algunas consultas sensibles a Claude Opus 4.8. No es un error: la solicitud puede completarse correctamente, pero &lt;code&gt;response.model&lt;/code&gt; puede no ser &lt;code&gt;claude-fable-5&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;No hagas esto:&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="k"&gt;assert&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;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;claude-fable-5&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Haz esto:&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;actual_model&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;model&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Respuesta generada por: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;actual_model&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Si tu sistema necesita auditoría estricta del modelo que respondió, guarda &lt;code&gt;response.model&lt;/code&gt; desde el objeto devuelto.&lt;/p&gt;

&lt;h2&gt;
  
  
  Calcular costo por solicitud
&lt;/h2&gt;

&lt;p&gt;El precio indicado es:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Entrada:&lt;/strong&gt; $10 por millón de tokens&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Salida:&lt;/strong&gt; $50 por millón de tokens&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Cada respuesta incluye &lt;code&gt;usage&lt;/code&gt;, así que calcula el costo con datos reales:&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;messages&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;claude-fable-5&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;max_tokens&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;1024&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;Write a SQL query to find duplicate emails.&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="n"&gt;input_tokens&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;usage&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;input_tokens&lt;/span&gt;
&lt;span class="n"&gt;output_tokens&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;usage&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;output_tokens&lt;/span&gt;

&lt;span class="n"&gt;input_cost&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;input_tokens&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="mi"&gt;1_000_000&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;
&lt;span class="n"&gt;output_cost&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;output_tokens&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="mi"&gt;1_000_000&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;50&lt;/span&gt;
&lt;span class="n"&gt;total&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;input_cost&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;output_cost&lt;/span&gt;

&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Input:  &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;input_tokens&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt; tokens  = $&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;input_cost&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="si"&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="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Output: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;output_tokens&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt; tokens = $&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;output_cost&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="si"&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="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Total:  $&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;total&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;2,000 tokens de entrada * $10 / 1,000,000 = $0.020
500 tokens de salida * $50 / 1,000,000 = $0.025

Total = $0.045
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Los tokens de salida cuestan más, así que optimiza primero la longitud de las respuestas:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;limita &lt;code&gt;max_tokens&lt;/code&gt;;&lt;/li&gt;
&lt;li&gt;pide respuestas concisas en &lt;code&gt;system&lt;/code&gt;;&lt;/li&gt;
&lt;li&gt;evita prompts que pidan explicaciones innecesariamente largas;&lt;/li&gt;
&lt;li&gt;usa streaming para respuestas extensas, pero recuerda que streaming no reduce el costo por sí mismo.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;El cálculo es el mismo tipo de estimación que usarías al revisar los &lt;a href="https://apidog.com/es/blog/claude-opus-4-8-pricing?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;precios de Claude Opus 4.8&lt;/a&gt;, cambiando los valores por los de Fable 5.&lt;/p&gt;

&lt;h2&gt;
  
  
  Probar y depurar la API de Claude Fable 5 con Apidog
&lt;/h2&gt;

&lt;p&gt;Antes de integrar el SDK en tu aplicación, prueba la llamada manualmente. &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; te permite enviar solicitudes reales a &lt;code&gt;https://api.anthropic.com/v1/messages&lt;/code&gt;, inspeccionar respuestas y guardar la configuración para tu equipo.&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.amazonaws.com%2Fuploads%2Farticles%2Faj57bwif4wuc95zn5eme.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.amazonaws.com%2Fuploads%2Farticles%2Faj57bwif4wuc95zn5eme.png" alt="Probar Claude Fable 5 con Apidog" width="799" height="530"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Crea una solicitud HTTP
&lt;/h3&gt;

&lt;p&gt;En Apidog, crea una nueva solicitud:&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://api.anthropic.com/v1/messages
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  2. Guarda la clave como variable
&lt;/h3&gt;

&lt;p&gt;Crea una variable de entorno, por ejemplo:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;Guárdala como valor secreto. Así no queda expuesta en la solicitud ni en exportaciones compartidas.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Configura los encabezados
&lt;/h3&gt;

&lt;p&gt;Añade:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;x-api-key: {{anthropic_api_key}}
anthropic-version: 2023-06-01
content-type: application/json
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  4. Añade el cuerpo JSON mínimo
&lt;/h3&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;"claude-fable-5"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"max_tokens"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1024&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;"Explain idempotency keys for payment APIs."&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;Envía la solicitud y revisa:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;content&lt;/code&gt;;&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;stop_reason&lt;/code&gt;;&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;usage&lt;/code&gt;;&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;model&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  5. Prueba streaming
&lt;/h3&gt;

&lt;p&gt;Agrega &lt;code&gt;stream: true&lt;/code&gt;:&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;"claude-fable-5"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"max_tokens"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1024&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"stream"&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;"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;"Explain idempotency keys for payment APIs."&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;Esto te permite validar cómo llegan los eventos antes de implementar streaming en tu backend.&lt;/p&gt;

&lt;h3&gt;
  
  
  6. Guarda la solicitud y genera código
&lt;/h3&gt;

&lt;p&gt;Guarda la solicitud en una colección. Luego puedes generar snippets en Python, JavaScript, &lt;code&gt;curl&lt;/code&gt; u otros lenguajes desde una solicitud ya verificada.&lt;/p&gt;

&lt;p&gt;Cuando estés listo para configurarlo, &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; y empieza con el cuerpo mínimo anterior.&lt;/p&gt;

</description>
    </item>
  </channel>
</rss>
