Documentación / Completo
Onboarding hospedado (tu cliente conecta su número)
POST /v1/onboarding-links
Cuando el número es de tu cliente y no querés pedirle sus credenciales de Meta, conecta él mismo su WhatsApp en una página con tu marca — sin login, sin ver nuestra marca, sin que vos toques la app de Meta. Hay dos formas, elegí la tuya:
1. Mandale un link (sin código). Generás el link desde el panel (Números → 'Enviar link a un cliente') y se lo pasás vos (por WhatsApp, mail, lo que sea). Ideal para conectar clientes de a uno. No necesitás escribir nada.
2. Integralo en tu sistema (con código). Tu cliente toca 'Conectar WhatsApp' dentro de TU producto y se conecta solo, sin que intervengas. El flujo: tu backend llama POST /v1/onboarding-links con label, externalId (y returnOrigin si vas a usar popup) → recibe una url → lo mandás ahí por redirección (la más robusta, recomendada en móvil) o popup (se siente embebido). Cuando termina, el resultado te llega por postMessage Y por el webhook connection.created con tu externalId. El snippet de frontend y los ejemplos de backend están abajo.
En ambos casos podés fijar el modo (cloud_api/coexistence, u omitir para que elija tu cliente) y el idioma de la página (lang: es/it/en/pt, u omitir para detectarlo del navegador). El token es de un solo uso y vence: el vencimiento es configurable (expiresIn en segundos, 5 min–30 días) — por API el default es 1 hora, desde el panel 7 días.
curl -X POST https://api.waiaconnect.com/v1/onboarding-links \
-H "Authorization: Bearer wc_live_YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"label":"López Pharmacy","externalId":"pharmacy-42","lang":"es","returnOrigin":"https://app.yourcompany.com","expiresIn":3600}'
# → { "url": "https://…/c/<token>", "expiresAt": "…", "publicId": "onb_…" }
# Send url to your customer. It is shown ONCE; the token is consumed only when they connect.Generás un link con la marca de tu cliente; él conecta su número sin entrar a tu panel ni ver nuestra marca. Recibís connection.created con tu externalId. El detalle completo (diagrama, snippet de popup, y por qué nunca en un iframe) está dentro del panel, con tus datos reales.
La URL (con el token) se devuelve UNA sola vez, como una API key — mandala y guardala.
El token se consume recién cuando se crea la conexión, no al abrir la página. Si tu cliente cierra la ventana o se le corta internet, vuelve a abrir el MISMO link y sigue — hasta que venza.
El webhook es la fuente confiable. El postMessage se pierde si tu cliente cierra la ventana; el webhook connection.created no. Confirmá del lado del servidor con ese evento.
⚠ Nunca dentro de un iframe: el popup del Embedded Signup se rompe ahí (restricciones de popup + bloqueo de cookies de terceros). Usá redirección o popup de primer nivel.
Para el popup, returnOrigin es obligatorio: es el origen https exacto al que respondemos (nunca *), validado al crear el link.
Tu cliente NUNCA ve nuestra marca ni entra a tu panel; vos NUNCA entrás a su cuenta de Meta (PRODUCTO §7.3). Configurá tu marca en Ajustes → Marca.
Estados del link: pending (sin usar), used (ya conectó), expired (venció), revoked (lo cancelaste). Revocá uno pendiente con DELETE /v1/onboarding-links/:id.