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.

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

ConceptoQué 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:

ScopeHabilita
tenants.readListar / ver negocios.
tenants.writeCrear y desconectar negocios.
messages.sendEnviar mensajes WhatsApp.
messages.readConsultar estado de un mensaje.
templates.readListar / ver plantillas.
templates.writeCrear y borrar plantillas.
mercadopago.readConsultar estado de conexión de MercadoPago.
mercadopago.writeIniciar conexión MP, crear preferencias de cobro, hacer reembolsos.
mail.readListar dominios / casillas / alias y leer mensajes.
mail.writeCrear/borrar dominios, casillas y alias; enviar y borrar mensajes.
arca.readEstado de facturación, último número y comprobantes emitidos.
arca.writeEmitir 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
}
HTTPErrorQué pasó
400validation_failedEl payload tiene un campo mal o falta algo obligatorio.
401unauthorizedAPI key revocada, mal pasada o ausente.
403forbidden_scopeLa API key no tiene permiso para este endpoint.
404tenant_not_foundEl tenant_ref no existe en tu cuenta.
409tenant_not_connectedEl negocio existe pero no tiene WhatsApp conectado. Completá el onboarding primero.
409mp_not_connectedEl negocio no tiene MercadoPago conectado (no completó OAuth o el token fue revocado). Mandale el connect_url.
404domain_not_foundEl dominio de correo no pertenece a ese negocio.
404account_not_foundLa casilla de correo no pertenece a ese negocio.
502imap_error / smtp_errorFalló la lectura (IMAP) o el envío (SMTP) de un correo. Ver message.
503not_configuredEl servicio (correo / facturación) no está habilitado para tu cuenta todavía. Escribinos.
409arca_not_connected / delegation_pendingEl negocio no cargó sus datos fiscales, o falta confirmar la delegación en su Clave Fiscal.
422cae_rejectedARCA rechazó el comprobante. El detalle de las observaciones va en message.
422meta_recipient_unreachableMeta rechazó el destino (allowlist, número inexistente, etc).
422invalid_payloadAlgún campo no cumple las reglas de Meta (vertical inválido, websites > 2, etc).
423meta_account_lockedMeta bloqueó la cuenta (error 131031). Usá /v1/phone-number/register para destrabarla.
429rate_limit_exceededPasaste 60 req/min. Esperá y reintentá.
502meta_otherMeta devolvió un error que no mapeamos a un código específico. Mirá meta_code en la respuesta.
502refund_failedMercadoPago rechazó el reembolso (pago no reembolsable, ya reembolsado, etc.). Ver message.
503meta_token_invalidEl access token del negocio expiró o fue revocado. Necesita reconectar.
5xxinternal_errorAlgo 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ó.