Owner (tú) → Profiles (marcas/proyectos, máximo 1 cuenta por red social cada uno) → Accounts (cuentas conectadas: página FB, IG, WhatsApp…).
/profiles/profiles/accounts/accounts/healthconnected / needs_reconnection./accounts/:id/aboutabout: null, no error./profiles/:id/adaccounts/accounts/:id · /adaccounts/:idaccount.disconnected. No des-registra la app en la plataforma (eso se hace desde Facebook/Google) ni borra el historial de posts.Se cobra por perfil, no por cuenta. Regla estructural: cada perfil admite 1 cuenta por red social (1 Facebook, 1 Instagram, 1 YouTube, 1 Meta Ads, 1 Google Ads, etc.) — para conectar otra cuenta de la misma red hay que crear otro perfil. El plan Free permite 1 perfil con hasta 3 cuentas en total y 20 créditos de IA al mes; el Trial (14 días desde el registro) permite 1 perfil con todas las redes (1 c/u) y 150 créditos; con suscripción activa, perfiles y cuentas ilimitados y 300 créditos. GET /profiles devuelve estos límites en plan.limits, y marca cada perfil con paused: true|false. Si superas un límite, la API responde con un code: 409 one_per_network (ya hay una cuenta de esa red en el perfil), 402 plan_account_limit, 402 plan_profile_limit, 402 ai_credit_limit o 403 profile_paused (el perfil dejó de estar cubierto por tu plan tras un downgrade: los más antiguos siguen activos, el resto se pausa).
Un mismo patrón genérico para las tres plataformas que usan OAuth:
/connect/:platform?profileId=…:platform es meta (Facebook + Instagram), threads, tiktok (orgánico), tiktokads (Marketing API) o google — este último con &product=youtube|googlebusiness|googlecalendar, uno por conexión (ver Google). Devuelve { authUrl } para abrir en el navegador. Una plataforma desconocida → 400./connect/:platform/callback/app/connect-select con un connectToken (vale 15 min y no se consume, así que sirve para encadenar página + cuentas publicitarias); Threads, TikTok y Google redirigen directo al Dashboard ya conectado. Si tu app registró un redirectUri en su API key, el callback vuelve a tu propia pantalla con ?profileId=&ct=&platform=meta&clientState= — ver Integración de agente.Para Meta hay un paso extra: elegir a qué Página de Facebook conectar (y su Instagram asociado). Las cuentas publicitarias (ad accounts) usan el mismo connectToken con su propio picker — no se auto-conecta ninguna, cada una se elige (y se cobra) aparte.
/profiles/:id/connect/meta/available?ct=<connectToken>/profiles/:id/connect/meta/profiles/:id/connect/meta/adaccounts/available?ct=<connectToken>/profiles/:id/connect/meta/adaccountsct del callback).WhatsApp (QR o Cloud API oficial) y Telegram (bot token) no pasan por un flujo OAuth de navegador — ver WhatsApp Business y Telegram.
# Crear un profile y arrancar OAuth con Meta curl -X POST https://zoosial.com/profiles \ -H "Authorization: Bearer $SC_API_KEY" -H "Content-Type: application/json" \ -d '{"name":"Mi marca"}' # → { "id": "prof_123", "name": "Mi marca" } curl "https://zoosial.com/connect/meta?profileId=prof_123" \ -H "Authorization: Bearer $SC_API_KEY" # → { "authUrl": "https://facebook.com/dialog/oauth?..." }