{"openapi":"3.1.0","info":{"title":"Zoosial API","version":"1.0","description":"Catálogo de operaciones derivado de https://zoosial.com/llms.txt, que es el contrato completo (cuerpos, errores y reglas). / Operation catalog derived from https://zoosial.com/llms.txt, the full contract (bodies, errors, rules).","contact":{"url":"https://zoosial.com/support"}},"servers":[{"url":"https://zoosial.com"}],"security":[{"bearerAuth":[]}],"tags":[{"name":"At a glance (English)"},{"name":"When to use Zoosial / Cuándo usar Zoosial"},{"name":"Discovery files / Archivos de descubrimiento"},{"name":"Producto"},{"name":"Autenticación y modelo de seguridad (LEER PRIMERO)"},{"name":"Gestión de API keys (solo con sesión de usuario, no con sk_)"},{"name":"Estructura de datos"},{"name":"Conectar cuentas"},{"name":"Sesiones de conexión — la forma correcta para apps externas"},{"name":"Publicar"},{"name":"IA generativa (copy, imagen, video, voz)"},{"name":"Gestión orgánica (Meta) — todas requieren una cuenta del owner (:id = accountId)"},{"name":"Investigación de mercado (Meta) — solo lectura; :id = cuenta conectada que se usa como lente"},{"name":"Automatizaciones comment-to-DM (tipo ManyChat)"},{"name":"Leads (Lead Ads) y pipeline"},{"name":"Ads (Meta + Google)"},{"name":"Commerce / Catálogos (Meta Commerce)"},{"name":"Google Calendar"},{"name":"Analytics para IA"},{"name":"Wallet (pases de Apple Wallet)"},{"name":"Facturación CFDI 4.0 (México) — MODO PRUEBAS"},{"name":"Datos SAT (sin credenciales)"},{"name":"Datos SAT con e.firma (solo en memoria)"},{"name":"Contabilidad e inteligencia contable (sin credenciales, sin estado)"},{"name":"Qué hace Datos SAT y qué no"},{"name":"Llamadas con IA (voz) — salientes a celulares de México"},{"name":"Webhooks de SALIDA (tus endpoints reciben eventos firmados)"},{"name":"Uso / facturación"},{"name":"MCP (Model Context Protocol)"},{"name":"Cómo probar de forma segura"}],"paths":{"/openapi.json":{"get":{"tags":["Discovery files / Archivos de descubrimiento"],"summary":"(OpenAPI 3.1 catalog of every operation below; this file stays the full contract)","security":[],"responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}}},"/.well-known/mcp/server-card.json":{"get":{"tags":["Discovery files / Archivos de descubrimiento"],"summary":"(MCP server card)","responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}}},"/.well-known/api-catalog":{"get":{"tags":["Discovery files / Archivos de descubrimiento"],"summary":"GET /.well-known/api-catalog","responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}}},"/sitemap.xml":{"get":{"tags":["Discovery files / Archivos de descubrimiento"],"summary":"No token needed.","responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}}},"/health":{"get":{"tags":["Autenticación y modelo de seguridad (LEER PRIMERO)"],"summary":"GET /health","security":[],"responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}}},"/llms.txt":{"get":{"tags":["Autenticación y modelo de seguridad (LEER PRIMERO)"],"summary":"/webhooks/ (entrantes de","security":[],"responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}}},"/connect/meta/callback":{"get":{"tags":["Autenticación y modelo de seguridad (LEER PRIMERO)"],"summary":"y equivalentes de tiktok/tiktokads/threads/linkedin/linkedinads/google), y","responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}}},"/wallet/passes/{id}/download":{"get":{"tags":["Autenticación y modelo de seguridad (LEER PRIMERO)"],"summary":"(la abre el teléfono del cliente final, sin cuenta de Zoosial","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}}},"/api-keys":{"post":{"tags":["Gestión de API keys (solo con sesión de usuario, no con sk_)"],"summary":"La key (sk_live_…) se muestra una sola vez.","responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}},"get":{"tags":["Gestión de API keys (solo con sesión de usuario, no con sk_)"],"summary":"lista (sin la key en claro).","responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}}},"/api-keys/{id}":{"patch":{"tags":["Gestión de API keys (solo con sesión de usuario, no con sk_)"],"summary":"edita la key sin recrearla (ver \"Conectar cuentas\").","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}},"delete":{"tags":["Gestión de API keys (solo con sesión de usuario, no con sk_)"],"summary":"revoca al instante.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}}},"/profiles":{"post":{"tags":["Estructura de datos"],"summary":"POST /profiles","responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}},"get":{"tags":["Estructura de datos"],"summary":"Cada profile trae paused: true|false.","responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}}},"/profiles/{id}":{"patch":{"tags":["Estructura de datos"],"summary":"único campo editable hoy: el contexto de negocio (máx. 2000 chars) que usa el generador de copy.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}},"delete":{"tags":["Estructura de datos"],"summary":"borra el profile. Solo si está VACÍO: con cuentas o ad accounts dentro","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}}},"/accounts":{"get":{"tags":["Estructura de datos"],"summary":"cuentas del owner, sin tokens.","responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}}},"/accounts/{id}":{"delete":{"tags":["Estructura de datos"],"summary":"desconecta (borra el registro y el token en Zoosial; no des-registra la app en la plataforma) y emite account.disconnected.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}}},"/platform/warnings":{"get":{"tags":["Estructura de datos"],"summary":"avisos que las plataformas mandaron ANTES de restringir algo","responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}}},"/accounts/health":{"get":{"tags":["Estructura de datos"],"summary":"GET /accounts/health","responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}}},"/accounts/{id}/about":{"get":{"tags":["Estructura de datos"],"summary":"about: la ficha \"Información\" de la Página de Facebook (sirve para prellenar aiContext; en otras plataformas null, no error). profile: la ficha completa — Faceb","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}}},"/adaccounts":{"get":{"tags":["Estructura de datos"],"summary":"cuentas publicitarias conectadas.","responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}}},"/adaccounts/{id}":{"delete":{"tags":["Estructura de datos"],"summary":"desconecta una.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}}},"/connect/sessions":{"post":{"tags":["Sesiones de conexión — la forma correcta para apps externas"],"summary":"POST /connect/sessions","responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}}},"/connect/{plataforma}":{"get":{"tags":["Sesiones de conexión — la forma correcta para apps externas"],"summary":"de más abajo.","parameters":[{"name":"plataforma","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}}},"/connect/start/{token}":{"get":{"tags":["Sesiones de conexión — la forma correcta para apps externas"],"summary":"302 a la red social. Es la url de arriba; la abre el navegador de","parameters":[{"name":"token","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}}},"/connect/meta":{"get":{"tags":["Sesiones de conexión — la forma correcta para apps externas"],"summary":"sigue existiendo para uso interactivo","responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}}},"/profiles/{id}/connect/meta/available":{"get":{"tags":["Sesiones de conexión — la forma correcta para apps externas"],"summary":"(lista, cada una con","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}}},"/profiles/{id}/connect/meta":{"post":{"tags":["Sesiones de conexión — la forma correcta para apps externas"],"summary":"(conecta UNA página + su IG asociado).","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}}},"/profiles/{id}/connect/meta/new-profile":{"post":{"tags":["Sesiones de conexión — la forma correcta para apps externas"],"summary":"crea un perfil nuevo con el nombre","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}}},"/profiles/{id}/connect/meta/adaccounts/available":{"get":{"tags":["Sesiones de conexión — la forma correcta para apps externas"],"summary":"GET /profiles/{id}/connect/meta/adaccounts/available","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}}},"/profiles/{id}/connect/meta/adaccounts":{"post":{"tags":["Sesiones de conexión — la forma correcta para apps externas"],"summary":"POST /profiles/{id}/connect/meta/adaccounts","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}}},"/connect/tiktok":{"get":{"tags":["Sesiones de conexión — la forma correcta para apps externas"],"summary":"GET /connect/tiktok","responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}}},"/connect/tiktokads":{"get":{"tags":["Sesiones de conexión — la forma correcta para apps externas"],"summary":"(Marketing API)","responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}}},"/connect/threads":{"get":{"tags":["Sesiones de conexión — la forma correcta para apps externas"],"summary":"GET /connect/threads","responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}}},"/connect/google":{"get":{"tags":["Sesiones de conexión — la forma correcta para apps externas"],"summary":"GET /connect/google","responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}}},"/connect/linkedin":{"get":{"tags":["Sesiones de conexión — la forma correcta para apps externas"],"summary":"(páginas de empresa: publicar y analíticas) y","responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}}},"/connect/linkedinads":{"get":{"tags":["Sesiones de conexión — la forma correcta para apps externas"],"summary":"(cuentas publicitarias). Funcionan también con","responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}}},"/profiles/{id}/connect/linkedin/available":{"get":{"tags":["Sesiones de conexión — la forma correcta para apps externas"],"summary":"GET /profiles/{id}/connect/linkedin/available","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}}},"/profiles/{id}/connect/linkedin":{"post":{"tags":["Sesiones de conexión — la forma correcta para apps externas"],"summary":"(páginas) o (anuncios).","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}}},"/connect/wasender":{"post":{"tags":["Sesiones de conexión — la forma correcta para apps externas"],"summary":"POST /connect/wasender","responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}}},"/accounts/{id}/wasender/qr":{"get":{"tags":["Sesiones de conexión — la forma correcta para apps externas"],"summary":"GET /accounts/{id}/wasender/qr","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}}},"/connect/whatsapp-cloud":{"post":{"tags":["Sesiones de conexión — la forma correcta para apps externas"],"summary":"Un número ya conectado por otro owner → 409.","responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}}},"/connect/whatsapp-cloud/config":{"get":{"tags":["Sesiones de conexión — la forma correcta para apps externas"],"summary":"GET /connect/whatsapp-cloud/config","responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}}},"/connect/whatsapp-cloud/embedded":{"post":{"tags":["Sesiones de conexión — la forma correcta para apps externas"],"summary":"coexistence: true = el número sigue en la app de WhatsApp Business (no se registra).","responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}}},"/connect/telegram":{"post":{"tags":["Sesiones de conexión — la forma correcta para apps externas"],"summary":"(chatId = @canal o id numérico; el bot debe ser admin).","responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}}},"/accounts/{id}/telegram/invoice":{"post":{"tags":["Sesiones de conexión — la forma correcta para apps externas"],"summary":"envía una invoice cobrable con Stars (moneda XTR, sin comisión de plataforma: el bot se queda el 100%). Requiere plan con la feature habilitada (todos los de pa","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}}},"/accounts/{id}/telegram/conversations":{"get":{"tags":["Sesiones de conexión — la forma correcta para apps externas"],"summary":"un renglón por chat con su mensaje más reciente (lastText es / si el mensaje no tenía texto).","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}}},"/accounts/{id}/telegram/conversations/{chatId}/messages":{"get":{"tags":["Sesiones de conexión — la forma correcta para apps externas"],"summary":"en orden cronológico ascendente.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"chatId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}}},"/accounts/{id}/telegram/messages":{"post":{"tags":["Sesiones de conexión — la forma correcta para apps externas"],"summary":"responde a ese chat. Sin gate de plan (no es la feature de pago; esa es Stars).","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}}},"/posts":{"post":{"tags":["Publicar"],"summary":"publica ya o programa. Sin scheduledFor publica al momento.","responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}},"get":{"tags":["Publicar"],"summary":"historial del owner. limit por defecto es 6: pásalo explícito si quieres más. Sin profileId/accountId, trae publicaciones de TODOS tus perfiles — un owner con v","responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}}},"/posts/{id}":{"delete":{"tags":["Publicar"],"summary":"cancela una publicación programada o borra un intento fallido. Un post ya published responde 400: su contenido vive en la plataforma, se borra con","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}}},"/accounts/{id}/posts/{objectId}":{"delete":{"tags":["Publicar"],"summary":"DELETE /accounts/{id}/posts/{objectId}","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"objectId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}}},"/upload":{"post":{"tags":["Publicar"],"summary":"sube media al CDN y devuelve para mediaUrls. No es multipart, son dos modos","responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}}},"/upload/url":{"post":{"tags":["Publicar"],"summary":"Zoosial descarga el archivo de una URL https pública (sin hosts internos, redirecciones revisadas, máximo 512 MB) y lo sube al CDN. Útil cuando la plataforma re","responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}}},"/upload/sign":{"post":{"tags":["Publicar"],"summary":"un enlace firmado de 30 minutos. Con él","responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}}},"/upload/s/{token}":{"post":{"tags":["Publicar"],"summary":"recibe los bytes crudos sin header Authorization (el token del enlace es la credencial). Es para agentes con terminal que no ven su token OAuth: curl -X POST \"<","parameters":[{"name":"token","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}}},"/accounts/{accountId}/tiktok/creator-info":{"get":{"tags":["Publicar"],"summary":"devuelve las opciones de publicación","parameters":[{"name":"accountId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}}},"/accounts/{accountId}/tiktok/videos":{"get":{"tags":["Publicar"],"summary":"lista videos públicos","parameters":[{"name":"accountId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}}},"/accounts/{accountId}/tiktok/status":{"get":{"tags":["Publicar"],"summary":"consulta el estado de un Direct Post.","parameters":[{"name":"accountId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}}},"/webhooks/tiktok":{"post":{"tags":["Publicar"],"summary":"recibe eventos firmados de TikTok (authorization.removed","responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}}},"/queue/slots":{"post":{"tags":["Publicar"],"summary":"POST /queue/slots","responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}},"get":{"tags":["Publicar"],"summary":"GET /queue/slots","responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}}},"/queue/slots/{id}":{"delete":{"tags":["Publicar"],"summary":"DELETE /queue/slots/{id}","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}}},"/queue":{"post":{"tags":["Publicar"],"summary":"(auto-agenda al próximo slot libre; 400 si el profile no tiene slots)","responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}},"get":{"tags":["Publicar"],"summary":"GET /queue","responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}}},"/ai/models":{"get":{"tags":["IA generativa (copy, imagen, video, voz)"],"summary":"catálogo de modelos disponibles . Descubre los modelos por acá, no hardcodees ids: un modelo nuevo aparece solo. maxReferenceImages es 0 si el modelo no soporta","responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}}},"/ai/generate-copy":{"post":{"tags":["IA generativa (copy, imagen, video, voz)"],"summary":"Gratis (rate-limit diario, no gasta crédito), síncrono (rápido).","responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}}},"/ai/generate-image":{"post":{"tags":["IA generativa (copy, imagen, video, voz)"],"summary":"imageUrls (hasta maxReferenceImages del modelo) usa el slug kieModelWithImage del modelo si existe; presetId es solo metadata que vuelve en el historial (no cam","responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}}},"/ai/generate-video":{"post":{"tags":["IA generativa (copy, imagen, video, voz)"],"summary":"duration solo aplica a modelos con durationOptions en","responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}}},"/billing/creditos":{"post":{"tags":["IA generativa (copy, imagen, video, voz)"],"summary":"de pago ($185, $830 y $2,950 MXN más IVA; 10% menos desde 10 perfiles, 15% desde 25, 20% desde 100), acreditados al confirmarse el pago. Se cuentan al milésimo ","responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}},"get":{"tags":["IA generativa (copy, imagen, video, voz)"],"summary":"saldo comprado y precios con tu descuento. Recarga automática (solo desde el panel, no con API key)","responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}}},"/billing/creditos/auto":{"post":{"tags":["IA generativa (copy, imagen, video, voz)"],"summary":"compra ese paquete cuando el saldo comprado baja de umbral créditos; la primera vez devuelve para guardar la tarjeta, luego . Hasta 3 recargas al día; si el cob","responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}},"delete":{"tags":["IA generativa (copy, imagen, video, voz)"],"summary":"DELETE /billing/creditos/auto","responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}}},"/ai/chat/models":{"get":{"tags":["IA generativa (copy, imagen, video, voz)"],"summary":"GET /ai/chat/models","responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}}},"/ai/chat":{"post":{"tags":["IA generativa (copy, imagen, video, voz)"],"summary":"Hasta 50 mensajes y 120,000 caracteres; maxTokens 1–8000 (500 por defecto). Imágenes (p. ej. páginas de un estado de cuenta escaneado): en un mensaje user, cont","responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}}},"/ai/generate-audio":{"post":{"tags":["IA generativa (copy, imagen, video, voz)"],"summary":"Texto a voz. prompt es el texto a leer, tope 500 caracteres (el costo es fijo, no escala con la longitud). voice es obligatorio. model debe ser uno con kind:'au","responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}}},"/ai/generate/{taskId}":{"get":{"tags":["IA generativa (copy, imagen, video, voz)"],"summary":"poll único para imagen, video Y audio (mismo endpoint): mientras corre, o al terminar. El crédito se cobra recién al confirmar éxito (fallos no cobran). Tarea i","parameters":[{"name":"taskId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}}},"/ai/generations":{"get":{"tags":["IA generativa (copy, imagen, video, voz)"],"summary":"historial de generaciones del owner (borrado perezoso de las expiradas), con AiGeneration = . profileId es opcional — sin él devuelve el historial de todos los ","responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}}},"/accounts/{id}/history":{"get":{"tags":["Gestión orgánica (Meta) — todas requieren una cuenta del owner (:id = accountId)"],"summary":"GET /accounts/{id}/history","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}}},"/accounts/{id}/comments":{"get":{"tags":["Gestión orgánica (Meta) — todas requieren una cuenta del owner (:id = accountId)"],"summary":"GET /accounts/{id}/comments","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}},"post":{"tags":["Gestión orgánica (Meta) — todas requieren una cuenta del owner (:id = accountId)"],"summary":"POST /accounts/{id}/comments","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}}},"/accounts/{id}/comments/hide":{"post":{"tags":["Gestión orgánica (Meta) — todas requieren una cuenta del owner (:id = accountId)"],"summary":"(solo Facebook — en Instagram Meta usa otro campo y hoy no oculta nada ahí) · borrar","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}}},"/accounts/{id}/comments/{commentId}":{"delete":{"tags":["Gestión orgánica (Meta) — todas requieren una cuenta del owner (:id = accountId)"],"summary":"responder por privado (DM) a demanda, con texto propio","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"commentId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}}},"/accounts/{id}/comments/{commentId}/private-reply":{"post":{"tags":["Gestión orgánica (Meta) — todas requieren una cuenta del owner (:id = accountId)"],"summary":"POST /accounts/{id}/comments/{commentId}/private-reply","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"commentId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}}},"/accounts/{id}/conversations":{"get":{"tags":["Gestión orgánica (Meta) — todas requieren una cuenta del owner (:id = accountId)"],"summary":"GET /accounts/{id}/conversations","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}}},"/accounts/{id}/conversations/{convId}":{"get":{"tags":["Gestión orgánica (Meta) — todas requieren una cuenta del owner (:id = accountId)"],"summary":"GET /accounts/{id}/conversations/{convId}","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"convId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}}},"/accounts/{id}/messages":{"post":{"tags":["Gestión orgánica (Meta) — todas requieren una cuenta del owner (:id = accountId)"],"summary":"Pasadas las 24 h sin respuesta del cliente (y sin la feature \"Human Agent\" aprobada en Meta) devuelve 422: el cliente tiene que volver a escribir.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}}},"/accounts/{id}/whatsapp/send":{"post":{"tags":["Gestión orgánica (Meta) — todas requieren una cuenta del owner (:id = accountId)"],"summary":"(enruta por proveedor wasender/cloud; maneja rate-limit). Solo Cloud: envía una plantilla aprobada (lo único que Meta acepta fuera de la ventana de 24 h desde e","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}}},"/accounts/{id}/whatsapp/templates":{"get":{"tags":["Gestión orgánica (Meta) — todas requieren una cuenta del owner (:id = accountId)"],"summary":"GET /accounts/{id}/whatsapp/templates","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}},"post":{"tags":["Gestión orgánica (Meta) — todas requieren una cuenta del owner (:id = accountId)"],"summary":"(body con , …; example = valores de muestra). Meta la revisa: nace PENDING.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}}},"/accounts/{id}/insights":{"get":{"tags":["Gestión orgánica (Meta) — todas requieren una cuenta del owner (:id = accountId)"],"summary":"GET /accounts/{id}/insights","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}}},"/accounts/{id}/post-insights":{"get":{"tags":["Gestión orgánica (Meta) — todas requieren una cuenta del owner (:id = accountId)"],"summary":"Audiencia de Instagram: (Meta pide 100+ seguidores; con y sin period, se manda lifetime solo). Horas activas","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}}},"/accounts/{id}/research/instagram/{username}":{"get":{"tags":["Investigación de mercado (Meta) — solo lectura; :id = cuenta conectada que se usa como lente"],"summary":"(cuenta de Instagram) → perfil público (followers_count, media_count, biography…) + media de cualquier cuenta de negocio o creador (las personales y privadas no","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"username","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}}},"/accounts/{id}/research/instagram-lookup":{"get":{"tags":["Investigación de mercado (Meta) — solo lectura; :id = cuenta conectada que se usa como lente"],"summary":"(cuenta de Instagram) → . Lee la portada del sitio, saca los enlaces a instagram.com y confirma cada uno con Business Discovery (found: false = personal, privad","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}}},"/accounts/{id}/research/hashtag/{tag}":{"get":{"tags":["Investigación de mercado (Meta) — solo lectura; :id = cuenta conectada que se usa como lente"],"summary":"(cuenta de Instagram; recent = últimas 24 h) → con el mismo ranking. Meta permite 30 hashtags distintos por cuenta cada 7 días (repetir uno no gasta). Pendiente","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"tag","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}}},"/accounts/{id}/research/tagged":{"get":{"tags":["Investigación de mercado (Meta) — solo lectura; :id = cuenta conectada que se usa como lente"],"summary":"(Instagram) → posts de otras cuentas donde etiquetaron a la tuya, con username.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}}},"/accounts/{id}/research/ad-library":{"get":{"tags":["Investigación de mercado (Meta) — solo lectura; :id = cuenta conectada que se usa como lente"],"summary":"2& (FB o IG) → anuncios con page_name, textos, fechas, plataformas y libraryUrl. Para México y fuera de la UE Meta solo publica por API anuncios políticos y de ","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}}},"/ads/targeting-search":{"get":{"tags":["Investigación de mercado (Meta) — solo lectura; :id = cuenta conectada que se usa como lente"],"summary":"intereses con audience_size_lower_bound/upper_bound.","responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}}},"/ads/audience-estimate":{"post":{"tags":["Investigación de mercado (Meta) — solo lectura; :id = cuenta conectada que se usa como lente"],"summary":"usuarios activos al mes de ese targeting (mismo objeto que un ad set). No gastan nada.","responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}}},"/automations":{"post":{"tags":["Automatizaciones comment-to-DM (tipo ManyChat)"],"summary":"cuando alguien comenta con una keyword, se le manda un DM (private reply) + respuesta pública opcional, con dedup. Sin platformPostId aplica a toda la cuenta; s","responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}},"get":{"tags":["Automatizaciones comment-to-DM (tipo ManyChat)"],"summary":"GET /automations","responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}}},"/automations/{id}":{"get":{"tags":["Automatizaciones comment-to-DM (tipo ManyChat)"],"summary":"GET /automations/{id}","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}},"patch":{"tags":["Automatizaciones comment-to-DM (tipo ManyChat)"],"summary":"PATCH /automations/{id}","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}},"delete":{"tags":["Automatizaciones comment-to-DM (tipo ManyChat)"],"summary":"DELETE /automations/{id}","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}}},"/accounts/{id}/automation-priority":{"put":{"tags":["Automatizaciones comment-to-DM (tipo ManyChat)"],"summary":"tu app declara que ELLA responde en esa cuenta (por defecto comentarios y mensajes). Mientras exista, las automatizaciones de Zoosial de la cuenta no disparan; ","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}},"delete":{"tags":["Automatizaciones comment-to-DM (tipo ManyChat)"],"summary":"la quita. Las automatizaciones de Meta Business Suite no se pueden apagar por API: se apagan a mano en Business Suite.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}}},"/accounts/{id}/lead-forms":{"get":{"tags":["Leads (Lead Ads) y pipeline"],"summary":"GET /accounts/{id}/lead-forms","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}},"post":{"tags":["Leads (Lead Ads) y pipeline"],"summary":"crea un formulario en la Página de Facebook (400 si la cuenta no es de Facebook). Meta NO permite editarlo después. is_optimized_for_quality (mayor intención) s","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}}},"/accounts/{id}/lead-forms/{formId}":{"get":{"tags":["Leads (Lead Ads) y pipeline"],"summary":"(detalles + preguntas)","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"formId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}}},"/accounts/{id}/leads":{"get":{"tags":["Leads (Lead Ads) y pipeline"],"summary":"(leads paginados por cursor after; after null = fin).","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}}},"/accounts/{id}/lead-forms/{formId}/test-webhook":{"post":{"tags":["Leads (Lead Ads) y pipeline"],"summary":"emite un lead.received de MUESTRA (con field_data derivado de las preguntas reales del form y atribución de ejemplo test_ad_…/test_adset_…/test_campaign_…) a tu","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"formId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}}},"/accounts/{id}/lead-states":{"get":{"tags":["Leads (Lead Ads) y pipeline"],"summary":"con solo los leads que ya tienen estado — un lead sin fila se pinta como \"nuevo\", no hay que materializar nada.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}}},"/accounts/{id}/lead-states/{leadId}":{"patch":{"tags":["Leads (Lead Ads) y pipeline"],"summary":"value es número o null, note texto o null.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"leadId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}}},"/accounts/{id}/email-pilot":{"get":{"tags":["Leads (Lead Ads) y pipeline"],"summary":"indica si está habilitado.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}}},"/accounts/{id}/lead-email-consents":{"get":{"tags":["Leads (Lead Ads) y pipeline"],"summary":"lista permisos","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}}},"/accounts/{id}/lead-email-consents/{leadId}":{"patch":{"tags":["Leads (Lead Ads) y pipeline"],"summary":"registra o revoca el permiso por página y lead.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"leadId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}}},"/accounts/{id}/email-pilot/campaigns":{"post":{"tags":["Leads (Lead Ads) y pipeline"],"summary":"envía hasta 100 mensajes individuales a leads con permiso vigente. requestId debe ser UUID; Mailz aceptación no confirma entrega y los resultados inciertos no s","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}}},"/email-marketing/unsubscribe/{token}":{"get":{"tags":["Leads (Lead Ads) y pipeline"],"summary":"muestra la confirmación de baja","parameters":[{"name":"token","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}},"post":{"tags":["Leads (Lead Ads) y pipeline"],"summary":"aplica la baja tras confirmación o petición one-click de RFC 8058. No requiere sesión.","parameters":[{"name":"token","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}}},"/ads/campaigns":{"get":{"tags":["Ads (Meta + Google)"],"summary":"GET /ads/campaigns","responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}},"post":{"tags":["Ads (Meta + Google)"],"summary":"POST /ads/campaigns","responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}}},"/ads/adsets":{"get":{"tags":["Ads (Meta + Google)"],"summary":"(campaignId opcional: sin él, todos los adsets de la cuenta)","responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}},"post":{"tags":["Ads (Meta + Google)"],"summary":"POST /ads/adsets","responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}}},"/ads/ads":{"get":{"tags":["Ads (Meta + Google)"],"summary":"(adsetId opcional: sin él, todos los anuncios de la cuenta; el creative incluye body/title/link_url/object_story_spec con el texto real del anuncio; para leer s","responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}},"post":{"tags":["Ads (Meta + Google)"],"summary":"POST /ads/ads","responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}}},"/ads/adcreatives":{"post":{"tags":["Ads (Meta + Google)"],"summary":"cualquier campo de un AdCreative de","responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}}},"/ads/object":{"patch":{"tags":["Ads (Meta + Google)"],"summary":"PATCH /ads/object","responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}},"delete":{"tags":["Ads (Meta + Google)"],"summary":"DELETE /ads/object","responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}}},"/ads/review":{"get":{"tags":["Ads (Meta + Google)"],"summary":"Compara los últimos 7 días contra los 7 anteriores y avisa de: costo por lead que sube más de 25%, gasto sin leads, frecuencia mayor a 3, presupuesto total cuyo","responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}}},"/ads/remove-ai":{"post":{"tags":["Ads (Meta + Google)"],"summary":"crea un creativo igual con todas las mejoras de Advantage+ creative en OPT_OUT (plantillas, retoques, recortes, textos reescritos, voz traducida…), aplica las c","responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}}},"/ads/copy":{"post":{"tags":["Ads (Meta + Google)"],"summary":"La copia nace en PAUSED; deepCopy (default true) copia también lo que cuelga debajo.","responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}}},"/ads/insights":{"get":{"tags":["Ads (Meta + Google)"],"summary":"(objectId requerido; breakdowns ej. age,gender,region — se pasa tal cual a Meta; da una fila por día, 1-90 o monthly)","responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}}},"/ads/locations":{"get":{"tags":["Ads (Meta + Google)"],"summary":"(búsqueda de ubicaciones)","responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}}},"/ads/audiences":{"get":{"tags":["Ads (Meta + Google)"],"summary":"GET /ads/audiences","responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}},"post":{"tags":["Ads (Meta + Google)"],"summary":"POST /ads/audiences","responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}}},"/ads/pixels":{"get":{"tags":["Ads (Meta + Google)"],"summary":"GET /ads/pixels","responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}}},"/ads/pixel-events":{"post":{"tags":["Ads (Meta + Google)"],"summary":"(Conversions API)","responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}}},"/ads/custom-conversions":{"get":{"tags":["Ads (Meta + Google)"],"summary":"GET /ads/custom-conversions","responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}},"post":{"tags":["Ads (Meta + Google)"],"summary":"POST /ads/custom-conversions","responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}}},"/ads/boost":{"post":{"tags":["Ads (Meta + Google)"],"summary":"(impulsa un post existente)","responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}}},"/ads/darkpost":{"post":{"tags":["Ads (Meta + Google)"],"summary":"(post no publicado en el feed, solo para anuncios)","responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}}},"/commerce/catalogs":{"get":{"tags":["Commerce / Catálogos (Meta Commerce)"],"summary":"devuelve los","responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}},"post":{"tags":["Commerce / Catálogos (Meta Commerce)"],"summary":"POST /commerce/catalogs","responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}}},"/commerce/products":{"get":{"tags":["Commerce / Catálogos (Meta Commerce)"],"summary":"GET /commerce/products","responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}},"post":{"tags":["Commerce / Catálogos (Meta Commerce)"],"summary":"POST /commerce/products","responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}},"delete":{"tags":["Commerce / Catálogos (Meta Commerce)"],"summary":"DELETE /commerce/products","responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}}},"/commerce/products/batch":{"post":{"tags":["Commerce / Catálogos (Meta Commerce)"],"summary":"(alta/edición masiva)","responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}}},"/commerce/product-sets":{"get":{"tags":["Commerce / Catálogos (Meta Commerce)"],"summary":"GET /commerce/product-sets","responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}},"post":{"tags":["Commerce / Catálogos (Meta Commerce)"],"summary":"POST /commerce/product-sets","responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}}},"/commerce/shops":{"get":{"tags":["Commerce / Catálogos (Meta Commerce)"],"summary":"GET /commerce/shops","responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}}},"/accounts/{id}/calendar/calendars":{"get":{"tags":["Google Calendar"],"summary":"GET /accounts/{id}/calendar/calendars","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}}},"/accounts/{id}/calendar/events":{"get":{"tags":["Google Calendar"],"summary":"GET /accounts/{id}/calendar/events","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}},"post":{"tags":["Google Calendar"],"summary":"POST /accounts/{id}/calendar/events","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}}},"/accounts/{id}/calendar/events/{eventId}":{"patch":{"tags":["Google Calendar"],"summary":"edición parcial","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"eventId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}},"delete":{"tags":["Google Calendar"],"summary":"DELETE /accounts/{id}/calendar/events/{eventId}","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"eventId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}}},"/analytics/{accountId}/summary":{"get":{"tags":["Analytics para IA"],"summary":"(normalizado para consumo por IA).","parameters":[{"name":"accountId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}}},"/analytics/{accountId}/followers":{"get":{"tags":["Analytics para IA"],"summary":"histórico diario de seguidores (un snapshot por día).","parameters":[{"name":"accountId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}}},"/wallet/programs":{"post":{"tags":["Wallet (pases de Apple Wallet)"],"summary":"Con certificateMode:'own' el program nace en appleStatus:'pending_connection'. secondaryColor (hex) activa un degradado con primaryColor; secondaryColor: '' lo ","responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}},"get":{"tags":["Wallet (pases de Apple Wallet)"],"summary":"(los del dueño autenticado).","responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}}},"/wallet/programs/{id}":{"get":{"tags":["Wallet (pases de Apple Wallet)"],"summary":"(nunca incluye certificados ni llaves).","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}},"patch":{"tags":["Wallet (pases de Apple Wallet)"],"summary":"Edita el diseño de un programa ya creado (no acepta type ni certificateMode, esos son fijos desde la creación). secondaryColor: '' para quitar el degradado.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}}},"/wallet/programs/{id}/apple/connect":{"post":{"tags":["Wallet (pases de Apple Wallet)"],"summary":"(solo certificateMode:'own') → . Genera el par de llaves (la privada nunca sale del servidor) y el CSR: llévalo a tu cuenta Apple Developer para crear ahí tu Pa","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}}},"/wallet/programs/{id}/apple/certificate":{"post":{"tags":["Wallet (pases de Apple Wallet)"],"summary":"Sube el .cer que te dio Apple; expiresAt sale de la fecha real del certificado.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}}},"/wallet/programs/{id}/apple/status":{"get":{"tags":["Wallet (pases de Apple Wallet)"],"summary":"GET /wallet/programs/{id}/apple/status","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}}},"/wallet/passes":{"post":{"tags":["Wallet (pases de Apple Wallet)"],"summary":"appleUrl ya trae el ? — es el link directo y completo para \"Agregar a Apple Wallet\" (pública, ver arriba); googleUrl es el link real para \"Guardar en Google Wal","responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}}},"/wallet/programs/{id}/passes":{"get":{"tags":["Wallet (pases de Apple Wallet)"],"summary":"(los pases de ese programa, con ambos links de descarga ya armados; googleUrl es null si Google Wallet no está activo para la cuenta).","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}}},"/wallet/passes/{id}":{"get":{"tags":["Wallet (pases de Apple Wallet)"],"summary":"(mismos campos que la creación).","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}},"delete":{"tags":["Wallet (pases de Apple Wallet)"],"summary":"da de baja el pase (deja de poder usarse; el ya instalado en el teléfono sigue viéndose pero no se actualiza más).","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}}},"/wallet/passes/{id}/transactions":{"post":{"tags":["Wallet (pases de Apple Wallet)"],"summary":"Ledger, no solo balance: cada movimiento queda auditado (amount puede ser negativo para descontar/redimir).","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}},"get":{"tags":["Wallet (pases de Apple Wallet)"],"summary":"GET /wallet/passes/{id}/transactions","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}}},"/profiles/{id}/invoicing":{"get":{"tags":["Facturación CFDI 4.0 (México) — MODO PRUEBAS"],"summary":"(connected:false si el perfil aún no registra datos fiscales).","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}},"post":{"tags":["Facturación CFDI 4.0 (México) — MODO PRUEBAS"],"summary":"alta o actualización de los datos fiscales del perfil (razón social exacta como en la constancia del SAT, régimen de 3 dígitos, CP de 5 dígitos). Devuelve lo mi","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}}},"/profiles/{id}/invoicing/live":{"post":{"tags":["Facturación CFDI 4.0 (México) — MODO PRUEBAS"],"summary":"pasa el perfil a modo real: desde ahí toda factura tiene validez fiscal ante el SAT (antes, mode:'test', se timbra sin validez). Exige que la organización esté ","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}}},"/profiles/{id}/invoicing/plan":{"post":{"tags":["Facturación CFDI 4.0 (México) — MODO PRUEBAS"],"summary":"sin plan: de pago en Stripe; con plan: cambia de nivel ahí mismo, prorrateado ( ).","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}}},"/profiles/{id}/invoicing/plan/portal":{"post":{"tags":["Facturación CFDI 4.0 (México) — MODO PRUEBAS"],"summary":"del portal (tarjeta, recibos, cancelar). Sin plan, emitir en real → 402 . Los planes de Zoosial (redes) no incluyen facturas.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}}},"/billing/timbres":{"post":{"tags":["Facturación CFDI 4.0 (México) — MODO PRUEBAS"],"summary":"de pago ($100, $450 y $850 MXN, más IVA), acreditados al confirmarse el pago (OXXO: al pagarlo). Sin nada → 402 y no se timbra; si el PAC rechaza, no se cobra. ","responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}}},"/profiles/{id}/invoicing/csd":{"put":{"tags":["Facturación CFDI 4.0 (México) — MODO PRUEBAS"],"summary":"sube el CSD (Certificado de Sello Digital) del perfil: cer y key son los archivos en base64. Zoosial lo reenvía al PAC y no lo guarda. 409 si faltan los datos f","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}}},"/profiles/{id}/invoices":{"post":{"tags":["Facturación CFDI 4.0 (México) — MODO PRUEBAS"],"summary":"201 . Por concepto: iva = 16 (default) · 8 (frontera) · 0 · exento; con_iva (default true) indica si price ya incluye IVA; discount en pesos; retencion = ningun","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}},"get":{"tags":["Facturación CFDI 4.0 (México) — MODO PRUEBAS"],"summary":"(los 20 documentos más recientes: facturas, notas de crédito y pagos, con type, paymentMethod y cancellationStatus).","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}}},"/profiles/{id}/invoices/{invId}":{"get":{"tags":["Facturación CFDI 4.0 (México) — MODO PRUEBAS"],"summary":"el mismo resumen más amountDue (saldo pendiente de una factura a crédito) e items. 404 si no existe.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"invId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}},"delete":{"tags":["Facturación CFDI 4.0 (México) — MODO PRUEBAS"],"summary":"cancela ante el SAT (motive 01–04; por defecto 02). El motivo 01 («errores con relación») exige & con el id o UUID de la factura que la sustituye; los demás mot","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"invId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}}},"/profiles/{id}/invoices/{invId}/payments":{"post":{"tags":["Facturación CFDI 4.0 (México) — MODO PRUEBAS"],"summary":"registra un pago de una factura a crédito (PPD): emite el complemento de pago (CFDI tipo P). La parcialidad, el saldo anterior y los impuestos prorrateados los ","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"invId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}}},"/profiles/{id}/invoices/{invId}/credit-note":{"post":{"tags":["Facturación CFDI 4.0 (México) — MODO PRUEBAS"],"summary":"nota de crédito (CFDI de egreso relacionado, relación 01) por amount con IVA incluido, sobre una factura de ingreso vigente. 400 si excede el total.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"invId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}}},"/profiles/{id}/invoices/{invId}/{format}":{"get":{"tags":["Facturación CFDI 4.0 (México) — MODO PRUEBAS"],"summary":"descarga el PDF o el XML timbrado (format = pdf o xml).","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"invId","in":"path","required":true,"schema":{"type":"string"}},{"name":"format","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}}},"/profiles/{id}/invoicing/branding":{"put":{"tags":["Facturación CFDI 4.0 (México) — MODO PRUEBAS"],"summary":"marca del negocio en sus facturas: color hexadecimal y logo PNG/JPG en base64. El PDF sale con el logo del cliente.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}}},"/webhooks/facturapi/{profileId}":{"post":{"tags":["Facturación CFDI 4.0 (México) — MODO PRUEBAS"],"summary":"receptor interno de los avisos del PAC (lo llama el PAC, no tú; firmado con HMAC y rechazado con 401 si la firma o la organización no cuadran). Se registra solo","parameters":[{"name":"profileId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}}},"/hooks":{"post":{"tags":["Facturación CFDI 4.0 (México) — MODO PRUEBAS"],"summary":"POST /hooks","responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}},"get":{"tags":["Webhooks de SALIDA (tus endpoints reciben eventos firmados)"],"summary":"GET /hooks","responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}}},"/sat/cfdi/status":{"post":{"tags":["Facturación CFDI 4.0 (México) — MODO PRUEBAS"],"summary":"directo del SAT, para CUALQUIER CFDI (emitido o recibido, sea o no de Zoosial): estado = Vigente | Cancelado | No Encontrado; efos = 200 si el emisor NO está en","responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}}},"/sat/cfdi/status/batch":{"post":{"tags":["Facturación CFDI 4.0 (México) — MODO PRUEBAS"],"summary":"hasta 100 por llamada: . Un CFDI que el SAT no responda va como sin tumbar el lote. Cupo: unos 300 CFDI por minuto por cuenta, compartido con","responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}}},"/sat/lists/check":{"post":{"tags":["Datos SAT (sin credenciales)"],"summary":"hasta 1,000 RFC contra las listas negras del SAT: 69-B (EFOS: Presunto, Definitivo, Desvirtuado, Sentencia Favorable), 69-B Bis y art. 69 (no localizados, crédi","responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}}},"/sat/cfdi/parse":{"post":{"tags":["Datos SAT (sin credenciales)"],"summary":"hasta 100 XML de CFDI (3.3 o 4.0) a JSON: , relacionados: , conceptos: , pagos: }], nomina: , deducciones: , otrosPagos: , incapacidades: }] } }] }. nomina vien","responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}}},"/sat/opinion/public":{"post":{"tags":["Datos SAT (sin credenciales)"],"summary":"opinión de cumplimiento 32-D por la consulta pública del SAT: o . publica:false no significa opinión negativa: el SAT solo muestra las positivas que el contribu","responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}}},"/sat/terms/accept":{"post":{"tags":["Datos SAT con e.firma (solo en memoria)"],"summary":"POST /sat/terms/accept","responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}}},"/sat/terms":{"get":{"tags":["Datos SAT con e.firma (solo en memoria)"],"summary":"Sin aceptarla, las rutas con e.firma responden 403 sat_terminos_pendientes. Al aceptarla declaras, por cada e.firma que envíes, tener la autorización escrita y ","responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}}},"/billing/datos-sat":{"get":{"tags":["Datos SAT con e.firma (solo en memoria)"],"summary":"GET /billing/datos-sat","responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}},"post":{"tags":["Datos SAT con e.firma (solo en memoria)"],"summary":"(múltiplo de 10, hasta 1,000) → sin plan: del pago con tarjeta de Stripe; con plan: cambia el cupo, prorrateado en la siguiente factura → (409 sat_cupo_menor_al","responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}}},"/billing/datos-sat/portal":{"post":{"tags":["Datos SAT con e.firma (solo en memoria)"],"summary":"del portal de Stripe del plan (tarjeta, facturas, cancelar).","responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}}},"/sat/download/query":{"post":{"tags":["Datos SAT con e.firma (solo en memoria)"],"summary":"(422 si el SAT la rechaza, con su codigo; entonces requestId es null). Fechas que no existen (p. ej. 2026-02-30) → 400. Solo se mide uso si el SAT la acepta. Cu","responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}}},"/sat/download/verify":{"post":{"tags":["Datos SAT con e.firma (solo en memoria)"],"summary":"Responde 200 aunque el SAT dé un codigo distinto de 5000: revisa estado y codigo. Verificar no se cobra. Tarda de minutos a 72 h (se han visto 7 días): consulta","responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}}},"/sat/download/package":{"post":{"tags":["Datos SAT con e.firma (solo en memoria)"],"summary":"por defecto el ZIP tal cual (application/zip): XML de los CFDI, o un .txt de metadata separado por ~. Con formato:'json': metadata → ; XML → . Para paquetes muy","responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}}},"/sat/opinion":{"post":{"tags":["Datos SAT con e.firma (solo en memoria)"],"summary":"opinión de cumplimiento 32-D completa del titular de la e.firma (positiva o negativa, sea pública o no): (sentido, estatus y folio pueden venir en null si el SA","responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}}},"/sat/constancia":{"post":{"tags":["Datos SAT con e.firma (solo en memoria)"],"summary":"Constancia de Situación Fiscal del titular: . datos es lo que trae el PDF ya leído: (fechas DD/MM/AAAA; un campo que no aparece va en null; datos entero en null","responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}}},"/sat/declarations":{"post":{"tags":["Datos SAT con e.firma (solo en memoria)"],"summary":"declaraciones provisionales y definitivas presentadas en ese ejercicio (normales y complementarias): . Con pdf trae el PDF de cada una: la declaración completa ","responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}}},"/sat/review":{"post":{"tags":["Datos SAT con e.firma (solo en memoria)"],"summary":"revisión completa del titular en una llamada (lo que usa el panel /app/datos-sat): 32-D, constancia, listas negras y declaraciones del año en curso y el anterio","responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}}},"/sat/reviews":{"get":{"tags":["Datos SAT con e.firma (solo en memoria)"],"summary":"las revisiones guardadas de tu cuenta, la más reciente primero, una por RFC. Cada","responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}}},"/sat/reviews/{rfc}":{"delete":{"tags":["Datos SAT con e.firma (solo en memoria)"],"summary":"DELETE /sat/reviews/{rfc}","parameters":[{"name":"rfc","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}}},"/sat/declarations/parse":{"post":{"tags":["Datos SAT con e.firma (solo en memoria)"],"summary":"(1 a 20, ~1 MB cada uno) → lee acuses de declaración provisional o definitiva que ya tengas, sin e.firma: | ] }. fueraDePlazo: se presentó después del vencimien","responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}}},"/sat/accounting/parse":{"post":{"tags":["Contabilidad e inteligencia contable (sin credenciales, sin estado)"],"summary":"contabilidad electrónica del SAT (Anexo 24 v1.3: Catalogo, Balanza, Polizas, AuxiliarCtas) a JSON: (un XML malo va como ; las listas siempre vienen, vacías si n","responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}}},"/sat/accounting/build":{"post":{"tags":["Contabilidad e inteligencia contable (sin credenciales, sin estado)"],"summary":"el XML (application/xml) con la misma forma de JSON que devuelve parse; importes a 2 decimales, sin sello. Faltan campos obligatorios, importes que no son númer","responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}}},"/sat/reconcile":{"post":{"tags":["Contabilidad e inteligencia contable (sin credenciales, sin estado)"],"summary":"], combinacionesIncompletas } (hasta 3 sugerencias por movimiento, ordenadas por puntaje; movimiento es tu id o el índice como texto). Se buscan complementos de","responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}}},"/sat/payments/check":{"post":{"tags":["Contabilidad e inteligencia contable (sin credenciales, sin estado)"],"summary":"(en complemento_repetido, uuidFactura es ''): complementos de pago aplicados dos veces o con saldos que no cuadran.","responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}}},"/sat/accounts/suggest":{"post":{"tags":["Contabilidad e inteligencia contable (sin credenciales, sin estado)"],"summary":"por CFDI . La regla va por RFC de la contraparte (el proveedor, o el cliente si propioRfc es el emisor); un concepto de ClaveProdServ de activo fijo (familias 2","responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}}},"/billing/llamadas":{"get":{"tags":["Llamadas con IA (voz) — salientes a celulares de México"],"summary":"); se cobra por minuto completo de llamada contestada; las que nadie contesta no gastan minutos. Cada cuenta trae 3 minutos de regalo, una sola vez (regalo en","responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}},"post":{"tags":["Llamadas con IA (voz) — salientes a celulares de México"],"summary":"(Esencial $499 MXN: 200 min · Crece $1,499: 700 min · Pro $3,999: 2,000 min; 1 número cada uno; más IVA) → de pago (409 llamadas_ya_tiene_plan si ya tienes plan","responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}}},"/voice/terms":{"get":{"tags":["Llamadas con IA (voz) — salientes a celulares de México"],"summary":"GET /voice/terms","responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}}},"/voice/terms/accept":{"post":{"tags":["Llamadas con IA (voz) — salientes a celulares de México"],"summary":"POST /voice/terms/accept","responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}}},"/voice/calls":{"post":{"tags":["Llamadas con IA (voz) — salientes a celulares de México"],"summary":"da 403 voz_terminos_pendientes.","responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}},"get":{"tags":["Llamadas con IA (voz) — salientes a celulares de México"],"summary":"agentId&limit&offset (limit 20, máx. 100; lo más reciente primero)","responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}}},"/voice/calls/{id}":{"get":{"tags":["Llamadas con IA (voz) — salientes a celulares de México"],"summary":"GET /voice/calls/{id}","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}}},"/voice/numbers":{"get":{"tags":["Llamadas con IA (voz) — salientes a celulares de México"],"summary":"desde qué números puedes llamar. shared: true son números de Zoosial (el primero es el de siempre; todos traen su region, null si no se reconoce); shared: false","responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}}},"/voice/verified":{"post":{"tags":["Llamadas con IA (voz) — salientes a celulares de México"],"summary":"202: Telnyx le manda un código (5 al día por cuenta y 3 al mismo teléfono, 429 voz_verif_tope)","responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}}},"/voice/verified/{phone}/verify":{"post":{"tags":["Llamadas con IA (voz) — salientes a celulares de México"],"summary":"201 (422 voz_codigo_invalido; 404 voz_verif_no_pedida: pide el código primero, vence a los 15 min)","parameters":[{"name":"phone","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}}},"/voice/verified/{phone}":{"delete":{"tags":["Llamadas con IA (voz) — salientes a celulares de México"],"summary":"Cuenta como número de tu plan (402 voz_numeros_tope); 409 voz_verificado_ajeno si ya es de otra cuenta. Aparece en","parameters":[{"name":"phone","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}}},"/voice/regions":{"get":{"tags":["Llamadas con IA (voz) — salientes a celulares de México"],"summary":"(los 32 estados; code p. ej. JAL, NL, CDMX). Manda region en","responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}}},"/voice/telnyx":{"post":{"tags":["Llamadas con IA (voz) — salientes a celulares de México"],"summary":"201 : la API key v2 de tu cuenta (crea una solo para Zoosial). Crea en tu cuenta un perfil de salida «Zoosial» (solo a México) y una app de Call Control «Zoosia","responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}},"get":{"tags":["Llamadas con IA (voz) — salientes a celulares de México"],"summary":"GET /voice/telnyx","responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}},"delete":{"tags":["Llamadas con IA (voz) — salientes a celulares de México"],"summary":"desconecta, regresa tus números y borra la app y el perfil de tu cuenta (409 telnyx_llamadas_en_curso mientras haya llamadas por tu Telnyx).","responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}}},"/webhooks/telnyx/c/{hook}":{"post":{"tags":["Llamadas con IA (voz) — salientes a celulares de México"],"summary":"(un secreto por cuenta; no lo llames tú). Reconectar crea otra app y borra la anterior. 422 telnyx_llave_invalida si Telnyx rechaza la llave; 422 telnyx_error s","parameters":[{"name":"hook","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}}},"/voice/telnyx/numbers":{"post":{"tags":["Llamadas con IA (voz) — salientes a celulares de México"],"summary":"201: ese número (de tu cuenta) pasa a la app de Zoosial. 402 voz_numeros_tope si ya usas los de tu plan; 404 telnyx_numero_ajeno o telnyx_no_conectado.","responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}}},"/voice/telnyx/numbers/{phone}":{"delete":{"tags":["Llamadas con IA (voz) — salientes a celulares de México"],"summary":"deja de usarse en Zoosial y en tu Telnyx vuelve a la conexión donde estaba.","parameters":[{"name":"phone","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}},"patch":{"tags":["Llamadas con IA (voz) — salientes a celulares de México"],"summary":"ese agente contesta las llamadas que entran a ese número (agentId: null = no se contestan y se rechazan). La llamada entrante aparece como cualquier otra (direc","parameters":[{"name":"phone","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}}},"/voice/voices":{"get":{"tags":["Llamadas con IA (voz) — salientes a celulares de México"],"summary":"sample es un MP3 de ~5 s de esa voz para escucharla antes de elegir. regina (mexicana) es la de defecto. En voice del agente también vale el ID de cualquier voz","responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}}},"/voice/agents":{"post":{"tags":["Llamadas con IA (voz) — salientes a celulares de México"],"summary":"201 . prompt (hasta 8000) es el guion: quién es, qué busca y qué datos debe obtener. firstMessage (hasta 300) es lo primero que dice al contestar: la IA habla p","responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}},"get":{"tags":["Llamadas con IA (voz) — salientes a celulares de México"],"summary":"GET /voice/agents","responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}}},"/voice/agents/{id}":{"get":{"tags":["Llamadas con IA (voz) — salientes a celulares de México"],"summary":"GET /voice/agents/{id}","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}},"patch":{"tags":["Llamadas con IA (voz) — salientes a celulares de México"],"summary":"(solo los campos que mandes)","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}},"delete":{"tags":["Llamadas con IA (voz) — salientes a celulares de México"],"summary":"DELETE /voice/agents/{id}","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}}},"/voice/dnc":{"get":{"tags":["Llamadas con IA (voz) — salientes a celulares de México"],"summary":"GET /voice/dnc","responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}},"post":{"tags":["Llamadas con IA (voz) — salientes a celulares de México"],"summary":"POST /voice/dnc","responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}}},"/voice/dnc/{phone}":{"delete":{"tags":["Llamadas con IA (voz) — salientes a celulares de México"],"summary":"Marcar a un número de la lista da 422 voz_no_llamar. Si la persona pide en la llamada que no la vuelvan a llamar y el análisis lo detecta, entra sola (source: \"","parameters":[{"name":"phone","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}}},"/voice/calls/{id}/hangup":{"post":{"tags":["Llamadas con IA (voz) — salientes a celulares de México"],"summary":"POST /voice/calls/{id}/hangup","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}}},"/billing/minutos":{"post":{"tags":["Llamadas con IA (voz) — salientes a celulares de México"],"summary":"POST /billing/minutos","responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}}},"/billing/llamadas/portal":{"post":{"tags":["Llamadas con IA (voz) — salientes a celulares de México"],"summary":"para cambiar o cancelar el plan.","responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}}},"/hooks/{id}/test":{"post":{"tags":["Webhooks de SALIDA (tus endpoints reciben eventos firmados)"],"summary":"admite un ping cada 30 s.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}}},"/hooks/{id}":{"get":{"tags":["Webhooks de SALIDA (tus endpoints reciben eventos firmados)"],"summary":"GET /hooks/{id}","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}},"patch":{"tags":["Webhooks de SALIDA (tus endpoints reciben eventos firmados)"],"summary":"PATCH /hooks/{id}","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}},"delete":{"tags":["Webhooks de SALIDA (tus endpoints reciben eventos firmados)"],"summary":"DELETE /hooks/{id}","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}}},"/hooks/{id}/deliveries":{"get":{"tags":["Webhooks de SALIDA (tus endpoints reciben eventos firmados)"],"summary":"(historial de entregas con reintentos).","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}}},"/whoami":{"get":{"tags":["Uso / facturación"],"summary":"con qué credencial estás hablando y a qué perfiles llegas (herramienta MCP whoami).","responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}}},"/usage":{"get":{"tags":["Uso / facturación"],"summary":"Contabilidad por owner. usage.ai = créditos de IA usados este mes (con un decimal); aiCreditosComprados = saldo de paquetes que queda.","responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}}},"/billing/checkout":{"post":{"tags":["Uso / facturación"],"summary":"(requiere sesión de usuario, no sk_) → crea/recupera el Customer de Stripe y","responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}}},"/billing/portal":{"post":{"tags":["Uso / facturación"],"summary":"(requiere sesión de usuario) → devuelve al Billing Portal de Stripe","responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}}},"/mcp":{"post":{"tags":["MCP (Model Context Protocol)"],"summary":"Sin sesiones y sin SSE: cada mensaje JSON-RPC va en su propio POST y la respuesta","responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}},"get":{"tags":["MCP (Model Context Protocol)"],"summary":"GET /mcp","responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}},"delete":{"tags":["MCP (Model Context Protocol)"],"summary":"responden 405 a propósito — no ofrecemos stream de servidor ni sesiones.","responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}}},"/.well-known/oauth-protected-resource":{"get":{"tags":["MCP (Model Context Protocol)"],"summary":"GET /.well-known/oauth-protected-resource","responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}}},"/.well-known/oauth-protected-resource/mcp":{"get":{"tags":["MCP (Model Context Protocol)"],"summary":"GET /.well-known/oauth-protected-resource/mcp","responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}}},"/.well-known/oauth-authorization-server":{"get":{"tags":["MCP (Model Context Protocol)"],"summary":"GET /.well-known/oauth-authorization-server","responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}}},"/oauth/register":{"post":{"tags":["MCP (Model Context Protocol)"],"summary":"client_id (cliente público, sin","responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}}},"/oauth/authorize":{"get":{"tags":["MCP (Model Context Protocol)"],"summary":"lleva a la pantalla /app/oauth, donde la persona inicia sesión y","responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}}},"/oauth/approve":{"post":{"tags":["MCP (Model Context Protocol)"],"summary":"es lo que llama esa","responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}}},"/oauth/token":{"post":{"tags":["MCP (Model Context Protocol)"],"summary":"( , code, redirect_uri, client_id","responses":{"200":{"description":"OK"},"default":{"description":"Error: { \"error\": \"mensaje\", \"code\"? }. Ver llms.txt"}}}}},"externalDocs":{"description":"llms.txt","url":"https://zoosial.com/llms.txt"},"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","description":"API key sk_live_… o access token OAuth del MCP"}}}}