Documentación
Sabado Cloud es una plataforma B2B que te conecta a varios servicios (WhatsApp Business como Tech Provider de Meta, MercadoPago como marketplace para cobros con split, correo electrónico gestionado con tu propio dominio, y facturación electrónica ARCA) detrás de una sola API REST y un solo set de webhooks firmados. Acá tenés todo lo que necesitás para integrarte.
Cómo se organizan estos docs
La doc está partida por servicio: cada servicio soportado tiene su propia sección en la barra lateral. Esta página cubre lo común a todos (autenticación, errores, idempotencia). Los endpoints específicos viven en su sección.
- WhatsApp Cloud API — mandar y recibir mensajes, plantillas, perfil del negocio, estado del número, estadísticas.
- MercadoPago split — conectar el MP del comercio por OAuth, cobrar con un fee de plataforma y cancelar/reembolsar.
- Correo (email) — conectar un dominio, configurar su DNS, crear casillas y alias, y leer / enviar mensajes por API.
- Facturación (ARCA) — emitir comprobantes electrónicos (Factura C / A / B) por el CUIT del negocio, con delegación de Clave Fiscal.
- Webhooks — recibir eventos firmados (mensajes entrantes, cambios de estado, pagos aprobados / rechazados / reembolsados, etc.).
- Onboarding — cómo el cliente final conecta su WhatsApp (Embedded Signup con coexistence o migration).
Cuando agreguemos un servicio nuevo, va a aparecer como una sección
propia (/docs/<servicio>/) con su propio set de
endpoints. La estructura del sidebar y los conceptos comunes
(autenticación, errores, webhooks) se mantienen.
Quickstart de 5 minutos
Asumimos que ya tenés acceso al panel en
https://waba.galgo.io/customer. Si todavía no, escribinos
a contacto@sabado.cloud y te
damos uno.
1. Emitir tu primera credencial
Andá a API keys en tu panel y hacé click en Emitir credencial. Ponele un nombre (por ejemplo, Producción), guardá el secret que te aparece — es la única vez que lo vas a ver completo.
Cada credencial tiene un set de scopes (permisos
granulares). Pedí solo los que necesitás: messages.send
para mandar WhatsApp, mercadopago.write para cobrar,
etc. La lista completa la ves en el panel cuando emitís la key.
2. Registrar tu primer negocio
En Tus negocios,
click en Registrar negocio nuevo. Completá el nombre y
un identificador interno (ej: pizzeria-don-mario) que vas a
usar en la API.
Compartile al negocio el link de onboarding que te damos abajo. Cuando entren, conectan su WhatsApp Business sin perder el uso de la app del celular. Si además vas a cobrar con MercadoPago, el comercio conecta su cuenta MP por un botón aparte del panel.
3. Mandar tu primer mensaje
Una vez que el negocio conectó su WhatsApp, podés enviar mensajes con
plantillas pre-aprobadas. Por ejemplo, la plantilla
hello_world que viene cargada por default:
curl -X POST "https://waba.galgo.io/v1/messages" \
-H "Authorization: Bearer TU_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"tenant_ref": "pizzeria-don-mario",
"to": "5491155555555",
"type": "template",
"template": {
"name": "hello_world",
"language": "en_US"
}
}'
La respuesta tiene este formato:
{
"id": "019dcf...",
"tenant_ref": "pizzeria-don-mario",
"type": "template",
"status": "sent",
"to": "5491155555555",
"waba_message_id": "wamid.HBg...",
"created_at": "2026-05-07T15:30:00Z"
}
Para el detalle completo (tipos de mensaje, media, interactivos, templates, etc.) andá a WhatsApp Cloud API. Para cobros con MercadoPago, MercadoPago split.
4. Ver tu uso
Volvé a tu panel, andá a Uso y vas a ver el conteo de mensajes enviados, recibidos y entregas de webhook.
Listo. Ya estás integrado. El resto de la doc te cuenta cómo recibir mensajes y eventos entrantes, cómo manejar errores, cómo gestionar plantillas, y cómo cobrar con split de pagos.
Conceptos clave
| Concepto | Qué es |
|---|---|
| Cuenta | Tu cuenta en Sabado Cloud. Tiene API keys, webhook URL y un secret HMAC. |
| Negocio (tenant) | El cliente final tuyo. Cada uno tiene un external_ref único dentro de tu cuenta. Un mismo negocio puede tener conectados varios servicios (WhatsApp + MercadoPago, por ejemplo). |
| Mensaje | Cada envío o recepción que pasa por la API de WhatsApp. Los enviados tienen un ciclo de vida: queued → sent → delivered → read (o failed). |
| Plantilla | Texto pre-aprobado por Meta para enviar como primer mensaje a un contacto. Se gestiona en nombre del negocio. |
| Pago | Un cobro hecho con la cuenta MercadoPago del negocio vía Checkout Pro. Sabado retiene un marketplace_fee sobre cada cobro. |
| Dominio / Casilla | El dominio de correo del negocio (ej. tudominio.com) y las casillas que cuelgan de él (ej. ventas@tudominio.com). Sabado corre el servidor de correo; la contraseña de cada casilla se usa internamente y nunca se expone. |
| Webhook | Cada vez que pasa algo relevante (mensaje entrante, cambio de estado, pago aprobado/reembolsado, etc.) te mandamos un POST firmado a tu URL. |
Privacidad. No mostramos contenido de mensajes en tu panel — solo los contamos para tu facturación. El contenido vive en tu sistema, no en el nuestro. Lo mismo aplica a los pagos: la fuente de verdad sigue siendo MercadoPago; nosotros guardamos lo necesario para auditoría y conciliación.
Autenticación
Cada request va con el header Authorization: Bearer TU_API_KEY.
El secret completo se muestra una sola vez al emitir la credencial.
Authorization: Bearer gwk_live_aBcDeFgHiJkLmNoPqRsTuVwXyZ1234567890
Si perdiste el secret, emití uno nuevo, actualizá tu sistema y revocá el anterior. No mantenemos copia del secret, solo un hash con sal.
Scopes
Cada API key tiene una lista de scopes. Cada endpoint requiere uno
específico — si tu key no lo tiene, recibís 403 forbidden_scope.
Los scopes disponibles hoy:
| Scope | Habilita |
|---|---|
tenants.read | Listar / ver negocios. |
tenants.write | Crear y desconectar negocios. |
messages.send | Enviar mensajes WhatsApp. |
messages.read | Consultar estado de un mensaje. |
templates.read | Listar / ver plantillas. |
templates.write | Crear y borrar plantillas. |
mercadopago.read | Consultar estado de conexión de MercadoPago. |
mercadopago.write | Iniciar conexión MP, crear preferencias de cobro, hacer reembolsos. |
mail.read | Listar dominios / casillas / alias y leer mensajes. |
mail.write | Crear/borrar dominios, casillas y alias; enviar y borrar mensajes. |
arca.read | Estado de facturación, último número y comprobantes emitidos. |
arca.write | Emitir comprobantes electrónicos (facturas C / A / B). |
* | Wildcard — habilita todos los scopes anteriores. |
Rate limit
60 requests por minuto por API key. Si lo superás, devolvemos
429 Too Many Requests con header Retry-After
en segundos.
Errores
Las respuestas de error tienen este formato:
{
"ok": false,
"error": "meta_recipient_unreachable",
"message": "El número de destino no está en el allowlist de testers.",
"meta_code": 131030
}
| HTTP | Error | Qué pasó |
|---|---|---|
| 400 | validation_failed | El payload tiene un campo mal o falta algo obligatorio. |
| 401 | unauthorized | API key revocada, mal pasada o ausente. |
| 403 | forbidden_scope | La API key no tiene permiso para este endpoint. |
| 404 | tenant_not_found | El tenant_ref no existe en tu cuenta. |
| 409 | tenant_not_connected | El negocio existe pero no tiene WhatsApp conectado. Completá el onboarding primero. |
| 409 | mp_not_connected | El negocio no tiene MercadoPago conectado (no completó OAuth o el token fue revocado). Mandale el connect_url. |
| 404 | domain_not_found | El dominio de correo no pertenece a ese negocio. |
| 404 | account_not_found | La casilla de correo no pertenece a ese negocio. |
| 502 | imap_error / smtp_error | Falló la lectura (IMAP) o el envío (SMTP) de un correo. Ver message. |
| 503 | not_configured | El servicio (correo / facturación) no está habilitado para tu cuenta todavía. Escribinos. |
| 409 | arca_not_connected / delegation_pending | El negocio no cargó sus datos fiscales, o falta confirmar la delegación en su Clave Fiscal. |
| 422 | cae_rejected | ARCA rechazó el comprobante. El detalle de las observaciones va en message. |
| 422 | meta_recipient_unreachable | Meta rechazó el destino (allowlist, número inexistente, etc). |
| 422 | invalid_payload | Algún campo no cumple las reglas de Meta (vertical inválido, websites > 2, etc). |
| 423 | meta_account_locked | Meta bloqueó la cuenta (error 131031). Usá /v1/phone-number/register para destrabarla. |
| 429 | rate_limit_exceeded | Pasaste 60 req/min. Esperá y reintentá. |
| 502 | meta_other | Meta devolvió un error que no mapeamos a un código específico. Mirá meta_code en la respuesta. |
| 502 | refund_failed | MercadoPago rechazó el reembolso (pago no reembolsable, ya reembolsado, etc.). Ver message. |
| 503 | meta_token_invalid | El access token del negocio expiró o fue revocado. Necesita reconectar. |
| 5xx | internal_error | Algo se rompió de nuestro lado. Reintentá con backoff. |
Idempotencia
Para evitar enviar el mismo mensaje dos veces si tu sistema reintentó
un POST que ya había salido, agregá el header
Idempotency-Key con un UUID o string único de tu sistema:
curl -X POST "https://waba.galgo.io/v1/messages" \
-H "Authorization: Bearer TU_API_KEY" \
-H "Idempotency-Key: pedido-12345-confirmacion" \
-H "Content-Type: application/json" \
-d '{ ... }'
Si recibimos dos veces la misma key con el mismo body, devolvemos la misma respuesta — no enviamos el mensaje dos veces. Las keys quedan guardadas durante 24 horas.
Para reembolsos de MercadoPago hay idempotencia interna por
payment_id — reintentar el mismo refund no genera un
segundo reembolso. Ver Cancelar / reembolsar.
Soporte
¿Algo no anda como esperabas? Escribinos a contacto@sabado.cloud. Somos pocos y respondemos rápido — sobre todo si nos das el ID de la request o del evento que falló.