llms.txt
+104 −21
− > Gateway REST multi-tenant para operar redes sociales (Meta/FB+IG, Threads, LinkedIn, TikTok,− > Google/YouTube/Business/Calendar, Telegram, WhatsApp) vía APIs oficiales + WaSender. Un agente− Zoosial (zoosial.com) is a Mexican platform based in Mérida, Yucatán. It is NOT Zoisial (zoisial.com), a different product with a similar name.− API + MCP per network (Instagram, Facebook, WhatsApp, Meta Ads, TikTok, YouTube, Telegram): https://zoosial.com/integraciones− - Use it to publish to Facebook, Instagram and YouTube, read and answer DMs and comments on Facebook,− - Not covered: X/Twitter, Pinterest, Bluesky, Snapchat, Discord and Slack. For those, use a provider that lists them.− - [Publicar y programar](https://zoosial.com/producto/publicar-redes-sociales): escribe una vez y publica en Facebook, Instagram y YouTube; calendario, texto con IA gratis, API y MCP.− - [Llamadas con IA por API](https://zoosial.com/llamadas-ia): agente de voz con IA en español mexicano que llama a tus leads por API, con grabación y resultado al colgar; $0.125 USD el minuto, todo incluido.− - `platform`: `meta` | `google` | `tiktok` | `tiktokads` | `threads` | `linkedin` | `linkedinads`.− - WhatsApp Cloud API oficial: `POST /connect/whatsapp-cloud { profileId, phoneNumberId, accessToken, wabaId?, displayName? }`. Un número ya conectado por otro owner → 409.− - WhatsApp oficial por Embedded Signup de Meta (lo usa la pantalla /app/whatsapp; requiere el SDK de Facebook en el navegador, no es para agentes): `GET /connect/whatsapp-cloud/config` → `{ appId, configId, graphVersion }`; `POST /connect/whatsapp-cloud/embedded { profileId, code, wabaId, phoneNumberId, coexistence? }`. `coexistence: true` = el número sigue en la app de WhatsApp Business (no se registra).− - `GET /ai/chat/models` → `{ models: [{ id, label }] }`. `POST /ai/chat { profileId, model, messages: [{ role: system|user|assistant, content }], maxTokens? }` → `{ text, model, credits, usage: { inputTokens, outputTokens } }`. 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`, `content` puede ser `[{ type:'text', text }, { type:'image_url', image_url:{ url } }]` con `url` https o `da− - Historial: `GET /accounts/:id/history` · borrar post: `DELETE /accounts/:id/posts/:objectId`− - Competencia: `GET /accounts/:id/research/instagram/:username?limit=25` (cuenta de Instagram) → perfil público (`followers_count`, `media_count`, `biography`…) + `media[]` de cualquier cuenta de **negocio o creador** (las personales y privadas no salen). Cada post trae `like_count`, `comments_count`, `view_count` (solo si Meta lo da), `interactions`, `engagementRate` (contra seguidores) y `vsAverage` (2 = el doble de lo normal en esa cuenta: lo que le funciona). No trae el texto de los comentar− Un agente de voz en español mexicano que llama, conversa, se deja interrumpir y te entrega el resultado al colgar. Precio: planes con minutos incluidos o paquetes prepagados (ver `GET /billing/llamadas`); 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 `GET /billing/llamadas`). Funciona con una `sk_` o con la sesión del panel; todo queda acotado a tu cuenta.− - **Números de Zoosial por estado:** `GET /voice/regions` → `{ regions:[{ code, name, available }] }` (los 32 estados; `code` p. ej. `JAL`, `NL`, `CDMX`). Manda `region` en `POST /voice/calls` y la llamada sale de un número de Zoosial con lada de ese estado (contestan más que a un número foráneo). Eliges el estado, no el número: se comparten entre todas las cuentas y siguen siendo de Zoosial. `available: false` = todavía no hay número ahí: con plan o paquete se activa en la primera llamada (unos− - `POST /voice/agents { name, prompt, firstMessage, voice?, analysis? }` → 201 `{ agent }`. `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 primero. Los dos aceptan variables `{{nombre}}` que llegan en cada llamada. Las reglas de hablar por teléfono (frases cortas, sin suponer el género, números con letra) se agregan solas. `analysis` = hasta 20 datos que quieres al colgar: `[{ name: "pre− - `POST /voice/calls { agentId, to, from?, region?, variables?, consent, metadata?, outsideHours? }` → 201 `{ call }`. `to` = `+52` y 10 dígitos. `from` = uno de tus números o el de siempre de Zoosial (`GET /voice/numbers`); `region` = un estado de `GET /voice/regions` (no los dos: 400). Sin ninguno, sale de tu primer número conectado o, si no conectaste Telnyx, del de siempre de Zoosial (422 `voz_from_invalido` si `from` no es tuyo). `consent = { source, capturedAt?, reference? }` es **obligato− - Límites de cada llamada: se inician solo de 9:00 a 20:00 hora del centro y, a la vez, de 8:00 a 21:00 en Tijuana y en Cancún, sin importar a quién llames: en invierno (Tijuana atrasa la hora) arranca a las 10:00 del centro (422 `voz_fuera_de_horario`); fuera de horario, a mano: `outsideHours: { reason }` en el cuerpo, hasta 3 al día por cuenta (429 `voz_fuera_horario_tope`); máximo 3 intentos al día (de la Ciudad de México) al mismo número por cuenta, contestados o no (429 `voz_destino_tope`);− - Plan y minutos: `GET /billing/llamadas` → `{ plan, incluidos, usados, prepago, disponibles, simultaneas, planes, paquetes }`. `POST /billing/llamadas { plan: "esencial"|"crece"|"pro", moneda: "mxn"|"usd" }` (Esencial $499 MXN: 250 min · Crece $1,499: 750 min · Pro $3,999: 2,000 min; 1 número cada uno; más IVA) → `{ url }` de pago (409 `llamadas_ya_tiene_plan` si ya tienes plan: cámbialo en el portal). `POST /billing/minutos { paquete: "100"|"1000", moneda }` → `{ url }`; no caducan. `POST /bil− - Eventos: `post.scheduled`, `post.processing`, `post.published`, `post.partial`, `post.failed`, `post.platform.failed`, `account.connected`, `account.needs_reconnection`, `account.disconnected` (lo emite `DELETE /accounts/:id` y `DELETE /adaccounts/:id`), `lead.received`, `message.received`, `payment.received` (pago con Telegram Stars confirmado: `{ accountId, chatId, amount, currency, chargeId, platform }`), `automation.triggered`, `comment.received`, `webhook.test`, `pass.created`, `pass.upda+ > Gateway REST multi-tenant para operar redes sociales (Meta/FB+IG, LinkedIn, TikTok, X,+ > Google/YouTube/Business/Calendar, Telegram, WhatsApp; Threads en camino) vía APIs oficiales + WaSender. Un agente+ Zoosial (zoosial.com) is a Mexican platform based in Mexico City. It is NOT Zoisial (zoisial.com), a different product with a similar name.+ API + MCP per network (Instagram, Facebook, WhatsApp, Meta Ads, TikTok, Telegram; YouTube only in the dashboard): https://zoosial.com/integraciones+ - Use it to publish to Facebook, Instagram, TikTok, LinkedIn pages, Google Business Profile and X+ - YouTube works only from the Zoosial dashboard (YouTube API Services policy III.I.15 does not allow offering an API to YouTube data or functions): API keys and MCP cannot use YouTube accounts, `GET /accounts` does not list them and any route on them answers `403` with `code: youtube_solo_panel`.+ (text, through the customer's own X app), read and answer DMs and comments on Facebook,+ - Coming soon: Threads (awaiting Meta approval) and Pinterest. Not covered: Bluesky, Snapchat, Discord and Slack.+ For those, use a provider that lists them.+ - Not the cheapest option for studios that generate a lot of AI art or video every month: a generation studio+ subscription costs less per piece. Zoosial's AI credits suit low or irregular use (no monthly fee, credits never expire).+ - [Publicar y programar](https://zoosial.com/producto/publicar-redes-sociales): escribe una vez y publica en Facebook, Instagram, YouTube, TikTok, LinkedIn, Google Business y X; calendario, texto con IA gratis, API y MCP (YouTube solo desde el panel).+ - [Llamadas con IA por API](https://zoosial.com/llamadas-ia): agente de voz con IA en español mexicano que llama a tus leads por API, con grabación y resultado al colgar; con plan, desde $2.00 MXN el minuto, todo incluido.+ - `platform`: `meta` | `google` | `tiktok` | `tiktokads` | `threads` | `linkedin` | `linkedinads` | `instagram` | `whatsapp`.+ - **WhatsApp oficial (`platform: "whatsapp"`)**: el registro de Meta (Embedded Signup) solo puede correr en zoosial.com, así que aquí `url` abre una página breve de Zoosial con dos botones: «Conectar mi número» o «Ya uso la app WhatsApp Business en mi teléfono» (coexistencia: sigue usando la app). Tu usuario elige su número en la ventana de Meta y vuelve solo a tu `redirectUri` con `?accountId=acc_…&platform=whatsapp&profileId=…&phone=52…&status=connected|pending|unverified` más tu `clientState`+ - WhatsApp (oficial y por QR) se conecta con la prueba de 14 días o un plan de pago; con el plan gratis, 402 `whatsapp_plan_gratis`.+ - WhatsApp por QR (no oficial, sin cobro de Meta por mensaje): **$149 MXN al mes más IVA por número**; en la prueba de 14 días, 1 gratis. Sin cupo pagado, `POST /connect/wasender` y el envío por QR dan 402 `whatsapp_qr_sin_pago`: `POST /whatsapp/qr/checkout` → `{ url }` paga un número más (suscripción mensual; se cancela en el portal de Stripe y al cancelar se desconecta el número más nuevo).+ - WhatsApp Cloud API oficial: `POST /connect/whatsapp-cloud { profileId, phoneNumberId, accessToken, wabaId?, displayName? }` → `{ accountId, provider, status: connected|pending|unverified }`. Un número ya conectado por otro owner → 409.+ - WhatsApp oficial por Embedded Signup de Meta (lo usa la pantalla /app/whatsapp; requiere el SDK de Facebook en el navegador, no es para agentes): `GET /connect/whatsapp-cloud/config` → `{ appId, configId, graphVersion }`; `POST /connect/whatsapp-cloud/embedded { profileId, code, wabaId, phoneNumberId, coexistence? }` → `{ accountId, provider, name, status: connected|pending|unverified }`. `coexistence: true` = el número sigue en la app de WhatsApp Business (no se registra).+ - `GET /billing/oferta` → `{ oferta: { tipo: 'qr'|'perfil'|'creditos', texto, hasta } | null }`: oferta de fin de la prueba de 14 días (de 3 días antes a 7 después de vencer, una por cuenta, una vez). Se aplica sola al pagar ese producto: número por QR a $99 el primer mes, perfil al 50 % el primer mes o +200 créditos en el paquete de 1,000.+ - `GET /ai/chat/models` → `{ models: [{ id, label, voiceCalls, thinking, thinkingDefault? }] }`. `voiceCalls: true` = es uno de los modelos que puedes elegir para las llamadas (etiqueta «· llamadas»). `thinking`: `"optional"` = puedes encender o apagar el razonamiento (`thinkingDefault` es lo que usa si no lo pides), `"always"` = razona siempre, `"none"` = no razona. `POST /ai/chat { profileId, model, messages: [{ role: system|user|assistant, content }], maxTokens?, thinking? }` → `{ text, model+ **Buenas prácticas de `/ai/chat` (cuestan menos y responden más rápido):**+ - `thinking: false` para todo lo conversacional: responder, simular a una persona, resumir, clasificar o extraer datos. Enciéndelo solo cuando haya cálculo o lógica de varios pasos.+ - `maxTokens` al tamaño real de lo que esperas: ~300 para un turno de conversación, 500–1,000 para un resumen, 2,000–2,500 para una evaluación larga. No dejes 8,000 «por si acaso»: razonando, un tope alto deja que el modelo piense de más, tarda más y cuesta más.+ - Si te llega `truncated: true` seguido, la respuesta se está cortando: sube `maxTokens` o pide en el prompt una respuesta más corta (por ejemplo, «responde en JSON de una línea»).+ - Lo que mandas también se cobra en cada llamada: mantén el `system` corto y no repitas instrucciones o historial que el modelo no necesita para ese turno.+ - Para el lado barato de una simulación (la persona simulada, un calificador sencillo) usa `claude-haiku-5.5` o `deepseek-v4.1-flash` con `thinking: false`. Para tu agente de llamadas, el mismo modelo del agente.+ - Antes de correr un lote grande, prueba 5–10 llamadas y revisa `credits` y `usage`: multiplica por el tamaño del lote.+ - Historial: `GET /accounts/:id/history?limit=&after=` (IG: `like_count`, `comments_count`; Facebook: `reactions.summary.total_count`, `likes`, `comments.summary.total_count`, `shares.count` por post; paginar con `paging.cursors.after`) · borrar post: `DELETE /accounts/:id/posts/:objectId`+ - Reseñas de Google Business y comentarios de YouTube (YouTube solo desde el panel; con API key o MCP responde `403` con `code: youtube_solo_panel`): `GET /accounts/:id/comments` (YouTube: sin `objectId` trae los de todo el canal; Google Business: devuelve las reseñas de la ficha con `rating`, `averageRating` y `totalReviewCount`) · responder `POST /accounts/:id/comments { objectId, message }` (`objectId` = id del comentario o de la reseña).+ - YouTube Studio (SOLO desde el panel de Zoosial: con API key o MCP todas estas rutas responden `403` con `code: youtube_solo_panel`, por la política III.I.15 de YouTube API Services; usa los permisos de la conexión): videos `GET /accounts/:id/youtube/videos?limit=&after=` (incluye privados y programados) · editar o programar `PATCH /accounts/:id/youtube/videos/:videoId { title, description, tags, categoryId, privacyStatus, publishAt, madeForKids }` (un `publishAt` ISO futuro deja el video priva+ - Bandeja de WhatsApp (oficial y QR): `GET /accounts/:id/whatsapp/conversations` → `{ data:[{ from, name, lastText, lastAt, lastFromMe }] }` y `GET /accounts/:id/whatsapp/conversations/:from/messages` → `{ data:[{ text, fromMe, at, mediaId?, mime?, filename? }] }`. Se arma con lo que llega por webhook y lo que mandas desde Zoosial. En WhatsApp oficial en coexistencia también aparece lo que contestas desde la app del teléfono; por QR, no. Lo que no es texto sale como `[Foto]`, `[Audio]`, etc.+ - Archivo recibido (solo Cloud): `GET /accounts/:id/whatsapp/media/:mediaId` → los bytes, como adjunto, con su `Content-Type`. Zoosial no guarda el archivo: lo baja de Meta al pedirlo, y Meta conserva el id 7 días. Después responde 404 `whatsapp_media_no_disponible`; si lo vas a necesitar, descárgalo al recibir el evento. 422 `whatsapp_media_error` = Meta no lo entregó, por ejemplo por un token vencido: revisa la conexión del número.+ - Estado real del número (solo Cloud): `GET /accounts/:id/whatsapp/health` → `{ status: connected|pending, canSend: AVAILABLE|LIMITED|BLOCKED|null, onBusinessApp, platformType, verification, quality, limits: [], errors: [{ entity, code, description, solution }], checkedAt }`. Pregunta a Meta en el momento y corrige el estado guardado de la cuenta. `onBusinessApp: true` = también sigue en la app WhatsApp Business. **Para saber si quedó conectado usa `status`, no `canSend`.** `canSend` es el agreg+ - Competencia: `GET /accounts/:id/research/instagram/:username?limit=25` (cuenta de Instagram; `limit` hasta 200, se pagina por dentro de 50 en 50) → perfil público (`followers_count`, `media_count`, `biography`…) + `media[]` de cualquier cuenta de **negocio o creador** (las personales y privadas no salen). Cada post trae `like_count`, `comments_count`, `view_count` (solo si Meta lo da), `interactions`, `engagementRate` (contra seguidores) y `vsAverage` (2 = el doble de lo normal en esa cuenta: + - `GET /tools/pagespeed?url=https://…&strategy=mobile|desktop` → PageSpeed Insights (Lighthouse) de cualquier URL pública: `scores` (rendimiento, accesibilidad, buenas prácticas y SEO, de 0 a 100), `metrics` (LCP, FCP, TBT, CLS…), `opportunities` (lo que más tiempo ahorraría) y `realUsers` (FAST, AVERAGE o SLOW). Tarda unos segundos; se guarda 10 min por URL.+ ## Guías de paquetería (México) — PRUEBAS, sin cobro+ Cotiza, genera la guía con etiqueta, rastrea y cancela, y consulta el historial de envíos de un perfil. Sin conectar cuenta todo corre en **modo pruebas** (guías de mentira, gratis). Para guías reales cada perfil conecta SU propia cuenta de Envia.com (Zoosial no revende guías ni cobra margen): el costo sale del saldo de esa cuenta.+ - `GET /shipping/postal-codes/:cp` → `{ cp, estado, estadoCodigo, municipio, localidad, colonias[], lat, lng }` (`estadoCodigo` es el de 2 letras que piden las direcciones, p. ej. `CX`, `YU`). 400 si el CP no tiene 5 dígitos; 404 si no existe. Úsalo para autocompletar estado, municipio y colonias.+ - `GET /profiles/:id/shipping` → `{ connected, mode:'test'|'live' }`. `PUT /profiles/:id/shipping { token }` conecta la cuenta (el token de API de tu cuenta de Envia.com: Developer → API Keys; se guarda cifrado y no se prueba al guardar). `DELETE /profiles/:id/shipping` la desconecta y el perfil vuelve a pruebas.
Showing the first 40 of each.