Nota del autor: analizamos el incidente del plugin malicioso de Claude Code en el mercado de extensiones de Cursor. Veremos cómo se activa el cargador de 66 líneas, cómo colaboran los dos pares de claves SSH y el túnel inverso, qué conclusiones están confirmadas y cuáles no, y cómo pueden investigar los desarrolladores si se han visto afectados.
El 29 de octubre de 2026 apareció una versión manipulada de la extensión anthropic.claude-code de VS Code en el mercado de extensiones de Cursor. Al principio de su archivo extension.js, los investigadores encontraron un cargador de JavaScript de unas 66 líneas. En cuanto el editor carga ese módulo, el código intenta implantar una puerta trasera SSH persistente en el equipo del desarrollador.
No es un rumor. El aviso oficial de seguridad de Cursor, Microsoft Security Research, Phorion, StepSecurity, OpenSourceMalware y Expel ya han publicado análisis. Expel, además, investigó 4 incidentes reales de clientes. Hasta el 1 de noviembre, StepSecurity había añadido una comparación precisa de las muestras, con lo que el panorama técnico quedó prácticamente aclarado.
Lo esencial: en 3 minutos entenderás qué hacían esas 66 líneas de código, por qué el usuario no tenía que ejecutar ningún comando peligroso y por qué desinstalar el plugin no basta para confirmar que el equipo está a salvo.

Resumen del incidente de la puerta trasera de 66 líneas de JavaScript
Primero, aclaremos el alcance del incidente. Se trató de un ataque a la cadena de suministro de software de herramientas para desarrolladores, originado en el canal de distribución de extensiones de Cursor. El modelo Claude no fue comprometido y no hay pruebas de que se haya accedido a los sistemas internos de Anthropic. Microsoft confirmó que ni Microsoft Visual Studio Marketplace ni el paquete oficial de npm @anthropic-ai/claude-code se vieron afectados.
| Dato | Detalle |
|---|---|
| Fecha del incidente | 29 de octubre de 2026 |
| Canal de distribución | Cursor VS Code Extension Marketplace |
| Identidad suplantada | anthropic.claude-code (Anthropic no compiló ni publicó estas versiones) |
| Versiones maliciosas | 2.1.312 y 2.1.313 |
| Plataformas de los paquetes maliciosos identificadas oficialmente | Windows x64 y macOS ARM64 |
| Tiempo de distribución pública | Aproximadamente 11 horas y 8 minutos |
| Límite máximo oficial de usuarios afectados | 5000 personas (es un máximo, no significa que se hayan comprometido 5000 equipos) |
| Código inyectado | Cargador inicial en las líneas 1–66 de extension.js |
| Versión correctiva posterior | Anthropic publicó la versión 2.1.314 |
Cronología del incidente de la puerta trasera de 66 líneas de JavaScript
Todas las horas siguientes están expresadas en hora de Pekín. Conviene distinguir dos momentos: el periodo durante el cual el paquete estuvo disponible para su descarga y el momento en que un paquete ya descargado se ejecutó, que pudo ser bastante posterior.
| Hora de Pekín | Evento |
|---|---|
| 29 de octubre, 17:27 | La extensión maliciosa comenzó a estar disponible para descarga en el mercado de Cursor |
| 30 de octubre, 04:35 | Cursor detuvo la distribución y cerró la ventana de exposición |
| 30 de octubre | Cursor publicó un aviso de seguridad; Phorion, OpenSourceMalware y Microsoft publicaron sus análisis posteriormente |
| 30 de octubre, 12:45 | Expel observó la primera ejecución del código malicioso en el Mac de un cliente, unas 8 horas después de su retirada |
| 31 de octubre, 02:30 | Cursor actualizó el aviso, añadió la versión 2.1.312 a las afectadas y revisó los indicadores de compromiso |
| 1 de noviembre | StepSecurity completó una comparación estática precisa a partir de muestras de MalwareBazaar |
Tras hacerse público el incidente, Cursor retiró las versiones maliciosas y cerró temporalmente todo el mercado de extensiones. Además, auditó los registros de acceso, rotó las claves, reconstruyó el mercado y coordinó con los proveedores de servicios en la nube el cierre de los servidores del atacante. La información pública aún no explica cómo obtuvo el atacante permiso para publicar compilaciones en el mercado de Cursor. Hasta que se conozcan las conclusiones de la investigación, no debe afirmarse que se robó una cuenta de Anthropic ni que Cursor tenía una vulnerabilidad concreta.
Cómo 66 líneas de JavaScript activaron una puerta trasera en la extensión de Claude Code
Es fácil interpretar que «66 líneas» significa que toda la extensión tenía esa longitud. En realidad, el archivo legítimo extension.js era un archivo comprimido de gran tamaño. El atacante insertó un cargador malicioso al principio: empezaba en la línea 1 y terminaba en la 66.
El código usa una expresión de función ejecutada inmediatamente (IIFE). No necesita esperar a que el usuario envíe un mensaje a Claude ni depende de ninguna otra condición. Cuando Cursor carga el archivo principal de la extensión en el entorno de ejecución de Node.js, esta lógica se ejecuta antes que el código legítimo.
Una modificación de 7.386 bytes: comparación precisa de la muestra
StepSecurity obtuvo la muestra de MalwareBazaar el 1 de noviembre y realizó una comparación estática tras verificar el SHA-256. Los resultados muestran que el atacante no necesitó reescribir la extensión.
| Elemento comparado | Valor |
|---|---|
extension.js legítimo |
3.685.536 bytes |
extension.js malicioso |
3.692.922 bytes |
| Cargador añadido | 7.386 bytes |
| Proporción del contenido añadido | Aproximadamente el 0,20 % |
| Versión del manifiesto externo | 2.1.313 |
| Versión identificada dentro del código legítimo | 2.1.312 |
Las dos últimas filas también merecen atención. El atacante volvió a empaquetar una compilación legítima de la versión 2.1.312 y solo modificó la información de versión externa. El número de versión mostrado no siempre coincide con el origen real del código, por lo que no es fiable juzgarlo solo por ese dato. En otra parte del artículo, StepSecurity ofrece una cifra de «bytes restantes» que presenta una inconsistencia aritmética; al citar los datos, conviene usar los tamaños totales y el incremento de la tabla.
Por qué el usuario no necesita ejecutar ningún comando peligroso
Este ataque no tiene relación con la inyección de indicaciones. Los investigadores confirmaron que el proceso tenía estas características:
- No requería que el usuario iniciara una conversación con Claude ni que el modelo aceptara ejecutar instrucciones de alto riesgo;
- No dependía de una indicación maliciosa ni de scripts del ciclo de vida de instalación de npm;
- El ataque inicial no necesitaba descargar ningún archivo ejecutable adicional.
El verdadero riesgo proviene de los permisos de ejecución que tiene una extensión del IDE en la computadora del desarrollador. Al ejecutarse en Node.js, la extensión puede acceder al sistema de archivos, leer información del sistema, crear subprocesos, ejecutar comandos del sistema, hacer solicitudes HTTP y utilizar las herramientas SSH locales.

El diseño de dos claves de la puerta trasera SSH en un plugin de Claude Code
Lo más ingenioso de estas 66 líneas de código es que la puerta trasera se basa por completo en el SSH incluido en el sistema. El atacante no necesita desarrollar un programa propio de control remoto: le basta con combinar dos identidades SSH con funciones distintas.
La primera es la clave autorizada en el equipo de la víctima. El programa malicioso añade la clave pública del atacante al archivo authorized_keys del usuario, con el identificador público svc-telemetry. Si el servicio SSH local está activo, quien tenga la clave privada correspondiente podría iniciar sesión como ese usuario.
La segunda es la clave de identidad para conectarse a un servidor externo. El programa malicioso guarda otra clave privada para que el dispositivo de la víctima pueda conectarse al servidor del atacante. Esta clave no es una de las claves privadas que el usuario ya tenía. En pocas palabras, la primera resuelve si el atacante puede autenticarse; la segunda, si el equipo de la víctima puede iniciar la conexión hacia el exterior.
Por qué conviene prestar atención a los túneles SSH inversos
Muchas redes empresariales y domésticas bloquean el acceso directo a los equipos desde internet, pero suelen permitir que esos equipos inicien conexiones hacia el exterior. Un túnel inverso aprovecha precisamente eso: el equipo de la víctima se conecta primero al servidor del atacante y después redirige las solicitudes que llegan al otro extremo hacia su puerto local 22.
Pero que exista una conexión no significa que se haya iniciado sesión. El acceso final depende de que SSH esté en funcionamiento en el equipo local, de que la configuración de autenticación esté activa y de la configuración de redirección del servidor del atacante. Si SSH no está iniciado localmente, el túnel aún podría establecerse, pero no permitiría completar el inicio de sesión remoto.
Cómo se ocultan las 66 líneas de código malicioso y qué fallos tienen
Para reducir las probabilidades de ser detectado, el cargador toma varias medidas:
- Las funciones normales de Claude Code siguen cargándose;
- cada paso del ataque captura sus propias excepciones y, si falla, continúa sin mostrar errores;
- las tareas de persistencia usan nombres como
SysMonycom.apple.sysmondpara hacerse pasar por componentes del sistema; - si falla la conexión, vuelve a intentarlo aproximadamente cada 60 segundos;
- intenta enviar información unos 1,5 segundos después del inicio.
Es posible que la interfaz de usuario no muestre ninguna anomalía.
El código malicioso también tiene defectos evidentes que, en la práctica, reducen las probabilidades de que el acceso remoto funcione:
| Plataforma | Fallo de implementación | Impacto real |
|---|---|---|
| macOS | Consulta el estado de Remote Login con permisos normales y recibe un error de permisos; el código solo intenta activarlo si detecta que está explícitamente «desactivado» | En muchos Mac que no tenían SSH activado, el acceso remoto no se activará automáticamente; si SSH ya estaba activado, el riesgo sigue presente |
| Windows | Instala OpenSSH Server con PowerShell, pero lo ejecuta mediante una función auxiliar que depende de /bin/sh |
Esa ruta no existe en una instalación estándar de Windows, por lo que la activación del servicio SSH puede fallar |
| Linux | Usa crontab @reboot para mantener la persistencia; Phorion detectó un fallo en la comprobación de crontab |
Al ejecutarse varias veces, puede afectar a las tareas programadas del usuario; no se ha confirmado el alcance real de la distribución en Linux |
Estos defectos no significan que el código sea totalmente inofensivo. Escribir en los archivos del propio usuario o crear elementos de inicio a nivel de usuario normalmente no requiere permisos de administrador. Por eso, puede darse una situación en la que el servicio de acceso remoto no haya logrado iniciarse, pero la clave autorizada ya se haya escrito, el script de inicio se haya generado, la información del equipo se haya enviado y el proceso en segundo plano siga intentando conectarse al exterior. La idea de que «sin permisos de administrador se está completamente a salvo» no es cierta.
Análisis del impacto de la puerta trasera del plugin Claude Code en los desarrolladores
Impacto en los desarrolladores
- Los nombres de las variables de entorno relacionadas con claves API podrían haber quedado expuestos: el cargador filtra hasta 40 variables de entorno cuyos nombres contienen
KEY,TOKEN,SECRET,PASS,AWSoGCP. El informe inicial incluye los nombres, no los valores, pero el atacante puede usarlos para identificar las API o plataformas en la nube que utilizas. Una vez activa la puerta trasera, las credenciales locales podrían leerse posteriormente. - Desinstalar el plugin no equivale a eliminar la puerta trasera: los archivos de persistencia, las entradas de inicio y las claves públicas SSH no desaparecen automáticamente al desinstalar la extensión. En un caso documentado por Expel, el usuario abrió Cursor después de que se retirara el plugin del marketplace; la actividad maliciosa comenzó de inmediato y se prolongó durante casi 10 horas.
- Un solo indicador puede dejar casos sin detectar: Expel encontró una máquina con un proceso de túnel malicioso, pero sin el marcador de clave pública
svc-telemetry. Durante la investigación hay que comprobar también las versiones, los hashes de archivos, los procesos, las conexiones de red y las entradas de inicio.
Impacto en el sector
- Las extensiones de IDE se convierten en una superficie de ataque de alto valor: con la popularización de las herramientas de programación con IA, los equipos de los desarrolladores almacenan al mismo tiempo código fuente, credenciales de nube y claves API de modelos. Insertar 7 KB de código al principio de un archivo comprimido de 3,6 MB basta para cambiar sus propiedades de seguridad.
- Hay que revisar la cadena de publicación de los marketplaces de extensiones de terceros: este incidente solo ocurrió en el marketplace de Cursor; la extensión del mismo nombre no presentaba problemas en otros canales. Esto demuestra que no basta con que «el nombre del editor parezca oficial» para confiar en una extensión.

El equipo técnico de APIYI apiyi.com elaboró el gráfico anterior a partir de investigaciones públicas. La siguiente tabla delimita los hechos por separado; ten en cuenta estas distinciones al citar o compartir la información:
| Conclusión | Estado | Detalles |
|---|---|---|
| El marketplace de Cursor distribuyó una extensión Claude Code manipulada | Confirmado | Confirmado por un anuncio oficial |
| El código malicioso puede recopilar información, implantar claves, crear túneles inversos y establecer persistencia | Confirmado | Los análisis de muestras de varias organizaciones coinciden |
| Se detectó actividad maliciosa en dispositivos reales de clientes | Confirmado | Expel gestionó 4 casos, todos en Mac |
| 5000 equipos fueron controlados por completo | No confirmado | 5000 es solo el límite máximo de equipos potencialmente afectados |
| Se robaron los valores reales de las claves API de los usuarios | No confirmado | El informe inicial solo incluía nombres de variables |
| Número de intrusiones exitosas y pérdidas económicas a escala mundial | No divulgado | No deben hacerse estimaciones |
Cómo detectar la puerta trasera SSH del complemento Claude Code
Si instalaste o actualizaste automáticamente la extensión Claude Code desde el marketplace de Cursor entre el 29 y el 30 de octubre, conviene hacer una comprobación rápida. El siguiente script de Node.js solo lee las rutas asociadas a los indicadores publicados y no modifica nada:
// 只读排查:检查公开披露的入侵痕迹(不能单独作为结论)
const fs = require("fs"), os = require("os"), path = require("path");
const home = os.homedir();
const checks = [
path.join(home, ".ssh", "authorized_keys"),
path.join(home, ".config", ".smt"),
path.join(home, ".config", ".smtk"),
path.join(home, "Library", "LaunchAgents", "com.apple.sysmond.plist"),
path.join(home, ".config", "smt.cmd"),
path.join(home, ".config", "smtk"),
];
for (const p of checks) {
if (!fs.existsSync(p)) continue;
const hit = p.endsWith("authorized_keys")
? fs.readFileSync(p, "utf8").includes("svc-telemetry")
: true;
if (hit) console.log("⚠️ 发现可疑痕迹:", p);
}
Si el script detecta alguno de estos indicadores, conviene revisar también los hashes de los archivos, la tarea programada SysMon, los procesos y los registros de red. Por ejemplo, comprueba si hubo conexiones a los puertos 22 u 8099 de 134.209.82[.]225. El aviso oficial de Cursor también ofrece scripts de comprobación y reparación para macOS y Windows; antes de ejecutarlos, asegúrate de entender qué permisos requieren.
Si tienes a mano un archivo de extensión sospechoso, también puedes recurrir a un Modelo de Lenguaje Grande para una revisión de código asistida. Presta especial atención a si al principio del archivo hay una IIFE que invoque child_process, escriba en authorized_keys o establezca conexiones SSH. Este es un ejemplo mínimo de invocación:
import openai
client = openai.OpenAI(
api_key="YOUR_API_KEY",
base_url="https://api.apiyi.com/v1" # APIYI OpenAI 兼容接口
)
head = open("extension.js", encoding="utf-8", errors="ignore").read(10000)
resp = client.chat.completions.create(
model="gpt-4o-mini",
messages=[{"role": "user", "content": "请审查这段 JS 开头是否存在可疑的子进程、SSH、持久化或外连行为:\n" + head}]
)
print(resp.choices[0].message.content)
Ver el script de revisión completo (incluida la comparación de hashes)
import hashlib
import sys
import openai
# 公开披露的恶意 extension.js SHA-256
KNOWN_BAD = {
"ecb58cb29078d9646ad1dcdbe51526f2d9cfea06be5fb2ab183e8ecc3ab6bf15",
}
KEYWORDS = ["child_process", "authorized_keys", "svc-telemetry",
"LaunchAgents", "schtasks", "crontab", "8099", "-R"]
client = openai.OpenAI(
api_key="YOUR_API_KEY",
base_url="https://api.apiyi.com/v1" # 使用 APIYI 统一接口
)
def sha256(path: str) -> str:
h = hashlib.sha256()
with open(path, "rb") as f:
for chunk in iter(lambda: f.read(1 << 20), b""):
h.update(chunk)
return h.hexdigest()
def review(path: str, head_size: int = 10000) -> None:
digest = sha256(path)
print("SHA-256:", digest)
if digest in KNOWN_BAD:
print("⚠️ 命中已公布的恶意哈希,请立即隔离设备并按官方指引处置")
head = open(path, encoding="utf-8", errors="ignore").read(head_size)
hits = [k for k in KEYWORDS if k in head]
print("文件开头命中关键词:", hits or "无")
prompt = (
"你是安全审计助手。下面是一个 IDE 扩展入口文件的开头部分,"
"请判断是否存在在模块加载时立即执行的代码,"
"并列出涉及子进程、SSH 密钥、持久化、网络外连的可疑片段。\n\n" + head
)
resp = client.chat.completions.create(
model="gpt-4o-mini",
messages=[{"role": "user", "content": prompt}],
max_tokens=1200,
)
print(resp.choices[0].message.content)
if __name__ == "__main__":
review(sys.argv[1] if len(sys.argv) > 1 else "extension.js")
Recomendación: la revisión con un modelo es solo una herramienta de apoyo y no sustituye el análisis de los registros EDR ni la comparación con los indicadores oficiales. Si quieres comparar cómo revisan código distintos modelos, puedes cambiar entre ellos con la misma clave API a través de APIYI apiyi.com. Los usuarios nuevos tienen una cuota gratuita de prueba. Además, antes de enviar el código para su revisión, comprueba que no contenga información empresarial sensible.
Una vez confirmado que se ejecutó la extensión maliciosa, sigue estos pasos en orden:
- Conserva las pruebas para la investigación y aísla el dispositivo;
- Elimina los archivos maliciosos, las entradas de inicio y las claves públicas SSH;
- Evalúa si los repositorios, las credenciales de la nube, los tokens de sesión y las claves API accesibles desde el dispositivo pueden correr riesgos posteriores;
- Si no puedes restablecer un estado confiable, reconstruye el sistema y rota todas las credenciales desde un dispositivo confiable.
Preguntas frecuentes (FAQ)
P1: ¿Las 66 líneas de JavaScript corresponden a todo el complemento de Claude Code?
No. Las 66 líneas corresponden al cargador malicioso insertado al principio de `extension.js`, desde la línea 1 hasta la 66, con unos 7.386 bytes. El código legítimo del complemento ocupa más de 3,6 MB y sigue ejecutándose con normalidad después.
P2: ¿En qué se diferencia esto de un ataque de inyección de indicaciones?
La inyección de indicaciones busca inducir al modelo a generar contenido o ejecutar acciones peligrosas. En este caso, el código de la extensión se ejecuta directamente al cargarse. El proceso no pasa por Claude, no requiere una conversación ni el consentimiento del modelo. Aunque nunca hayas usado las funciones de IA del complemento, el código podría ejecutarse al cargar la extensión.
P3: ¿Está afectado Claude Code si se instaló desde npm oficial o desde el mercado de VS Code?
Microsoft confirmó que ni Visual Studio Marketplace ni el paquete oficial de npm `@anthropic-ai/claude-code` se vieron afectados. Tampoco se encontraron versiones maliciosas correspondientes en Open VSX. Solo están afectadas las versiones 2.1.312 y 2.1.313 distribuidas a través del mercado de Cursor. Para determinar si una instalación está afectada, también hay que comprobar su origen y el hash del archivo.
P4: Si guardo claves API en variables de entorno, ¿debo cambiarlas?
El informe inicial solo incluía los nombres de las variables, no sus valores. Sin embargo, si se confirma que el código malicioso se ejecutó en tu dispositivo, es posible que la puerta trasera se haya utilizado para leer credenciales. Por precaución, conviene rotarlas desde un dispositivo de confianza. También se recomienda cambiar las claves API de plataformas como APIYI apiyi.com que estuvieran almacenadas en variables de entorno y adoptar un método más seguro para gestionarlas.
P5: ¿Cómo puedo reducir este tipo de riesgos al desarrollar aplicaciones de IA?
Te recomendamos seguir estas prácticas: no almacenar durante largos períodos claves de altos privilegios en variables de entorno en texto plano en tu equipo de desarrollo, usar claves distintas para cada proyecto y auditar periódicamente las extensiones del IDE. Al invocar modelos a través de una plataforma de agregación como APIYI apiyi.com, puedes usar una sola clave para acceder a modelos de varios proveedores. Así reduces la cantidad de credenciales repartidas por tu equipo y, si surge un problema, solo tienes que rotar una clave.
Puntos clave del incidente de la puerta trasera de 66 líneas de JavaScript
- Naturaleza del ataque: el mercado de extensiones de Cursor sufrió un ataque a la cadena de suministro; el modelo Claude no fue comprometido.
- Activación: un cargador IIFE de 66 líneas se ejecutaba automáticamente al cargar la extensión, sin que el usuario tuviera que hacer nada.
- Estructura de la puerta trasera: dos pares de claves SSH y un túnel inverso, utilizando únicamente herramientas incluidas en el sistema.
- Límites de lo confirmado: 5000 es el número máximo de usuarios afectados; no se ha confirmado el robo de valores reales de claves API.
- Respuesta: desinstalar el complemento no equivale a eliminar la puerta trasera. Hay que revisar distintos frentes y rotar las credenciales desde un dispositivo de confianza.
- Prevención: reduce la cantidad de claves locales en texto plano. Puedes usar APIYI apiyi.com para gestionar de forma centralizada las credenciales de invocación de modelos.
Conclusión
El incidente de la puerta trasera de 66 líneas de JavaScript deja tres lecciones:
- Un cambio pequeño puede causar mucho daño: basta con insertar código equivalente al 0,2 % de un archivo de 3,6 MB para convertir una extensión de confianza en un vehículo para una puerta trasera.
- Los permisos determinan el riesgo: las extensiones de IDE tienen plena capacidad de ejecución de Node.js. Incluso con permisos de usuario normales, pueden escribir claves y establecer mecanismos de persistencia.
- Retirar la extensión no pone fin al problema: los componentes maliciosos ya instalados pueden ejecutarse más tarde y mantener conexiones salientes, por lo que hay que buscarlos y eliminarlos por separado.
Si usaste la extensión Claude Code del mercado de Cursor durante el período de exposición, revisa tu entorno siguiendo los indicadores oficiales y rota las credenciales que puedan haberse visto afectadas. En el desarrollo diario, conviene reducir el número de credenciales almacenadas localmente. Por ejemplo, puedes usar APIYI apiyi.com para acceder a modelos de distintos proveedores con una sola clave y reducir el alcance de una posible filtración.
📚 Referencias
- Aviso oficial de seguridad de Cursor: fechas del incidente, versiones, hashes y script de limpieza
- Enlace:
cursor.com/blog/claude-code-extension-security-notice -
Descripción: fuente primaria para la investigación y la corrección
-
Microsoft Security Research: cadena de ataque completa y correspondencia con MITRE ATT&CK
- Enlace:
microsoft.com/en-us/security/blog/2026/10/30/inside-malicious-claude-code-branded-cursor-extension-persistent-ssh-backdoor/ -
Descripción: análisis de los límites de la cadena de suministro, el mecanismo SSH y la persistencia
-
Phorion: cargador de 66 líneas y fallos de implementación en cada plataforma
- Enlace:
phorion.io/blog/offical-claude-code-vsx-compromise/ -
Descripción: detalles sobre el filtrado de variables de entorno y un fallo en crontab de Linux
-
StepSecurity: comparación precisa de las muestras del 1 de noviembre
- Enlace:
stepsecurity.io/blog/claude-code-extension-trojanized -
Descripción: diferencias de tamaño entre archivos y pruebas de la falsificación de identificadores de versión
-
Expel: investigación de cuatro incidentes reales en clientes
- Enlace:
expel.com/blog/blog-fake-claude-code-extension-cursor-ssh-backdoor/ -
Descripción: casos de ejecución diferida y detecciones omitidas
-
OpenSourceMalware: análisis de la estructura interna de la extensión maliciosa
- Enlace:
opensourcemalware.com/blog/trojanized-claude-code-extension-plants-persistent-ssh-backdoor - Descripción: confirmación de la ubicación y el método de ejecución del cargador
Autor: Equipo técnico de APIYI
Contacto técnico: Puedes contactarnos desde la página principal de APIYI en apiyi.com. Para más información, visita el centro de documentación en docs.apiyi.com
