Primeros pasos

Módulo

Mensajería

API WhatsApp unificada: envía, sigue y consulta texto, plantillas, multimedia, ubicación, contactos, interactividad y reacciones.

POST/messagesAlcance: writeOficial + Básico

Envía un mensaje WhatsApp tipado.

Para responder usa conversation_id; para iniciar usa connection_id + recipient. Recipient acepta teléfono, contacto, BSUID, parent BSUID o username. type predeterminado es text — el único tipo de la conexión del plan Básico; los demás exigen conexión Oficial y plan Oficial/Agency. Authorization con la API key es la única credencial obligatoria. Idempotency-Key es opcional y recomendada para reintentos.

Parámetros de ruta

Sin parámetros adicionales.

Parámetros de query

Sin parámetros adicionales.

Campos del cuerpo
CampoTipoDescripción
Idempotency-KeyopcionalheaderOpcional y recomendada para reintentos idempotentes (8–128 caracteres).
textopcionalstringTexto; obligatorio cuando type=text.
typeopcionaltext | template | image | video | audio | document | sticker | location | contacts | interactive | reactionTipo de mensaje. Predeterminado text.
templateopcionalobjectPara template: name, language y components.
mediaopcionalobjectPara multimedia: link o id.
interactiveopcionalobjectObjeto interactivo nativo de Meta.
reply_to_message_idopcionalstringWAMID del mensaje a responder.
biz_opaque_callback_dataopcionalstringCorrelación devuelta por Meta en estados (máximo 512).
conversation_idopcionaluuidÚsalo para responder una conversación existente.
connection_idopcionaluuidConexión usada para iniciar una conversación nueva.
recipientopcionalobjectPara iniciar: phone, contact_id, BSUID, parent BSUID o username.
toopcionalstringLegado: equivale a recipient.phone.

Ejemplos listos

curl -X POST "https://connect.zyronstack.com/api/v1/messages" \
  -H "Authorization: Bearer SUA_CHAVE_API" \
  -H "content-type: application/json" \
  -d '{
  "conversation_id": "<CONVERSATION_ID>",
  "type": "text",
  "text": "Ola, Maria. Posso te ajudar?"
}'

Respuestas

202Meta aceptó el envío; consulta el estado en historial o webhook.
404Conversación o conexión no encontrada.
422text ausente o destino incompleto.

Ejemplo de respuesta

{
  "data": {
    "conversation_id": "<CONVERSATION_ID>",
    "provider_message_id": "wamid.HBgM...",
    "type": "text",
    "recipient": { "phone": "5511999998888", "business_scoped_user_id": "BR.4389531741319467" },
    "accepted": true,
    "delivery_status": "pending"
  }
}
POST/messagesAlcance: writeOficial (Meta)Requiere plan Oficial o Agency

Envía imagen, video, documento o sticker.

Usa media.id de POST /media o media.link público.

Parámetros de ruta

Sin parámetros adicionales.

Parámetros de query

Sin parámetros adicionales.

Campos del cuerpo
CampoTipoDescripción
connection_idobligatoriouuidNúmero Oficial que envía.
recipient.phoneobligatoriostringTeléfono con DDI.
typeobligatorioimage | video | document | stickerTipo del archivo.
media.idopcionalstringID de POST /media.
media.linkopcionalURLAlternativa pública.

Ejemplos listos

curl -X POST "https://connect.zyronstack.com/api/v1/messages" \
  -H "Authorization: Bearer SUA_CHAVE_API" \
  -H "content-type: application/json" \
  -d '{
  "connection_id": "<CONNECTION_ID>",
  "recipient": { "phone": "<TELEFONE_COM_DDI>" },
  "type": "image",
  "media": { "id": "<MEDIA_ID>", "caption": "Proposta em anexo" }
}'

Respuestas

202Archivo aceptado; sigue el wamid.
POST/messagesAlcance: writeOficial (Meta)Requiere plan Oficial o Agency

Envía audio o nota de voz.

Sube primero y usa media.id.

Parámetros de ruta

Sin parámetros adicionales.

Parámetros de query

Sin parámetros adicionales.

Campos del cuerpo
CampoTipoDescripción
media.idobligatoriostringID de upload.

Ejemplos listos

curl -X POST "https://connect.zyronstack.com/api/v1/messages" \
  -H "Authorization: Bearer SUA_CHAVE_API" \
  -H "content-type: application/json" \
  -d '{
  "connection_id": "<CONNECTION_ID>",
  "recipient": { "phone": "<TELEFONE_COM_DDI>" },
  "type": "audio",
  "media": { "id": "<MEDIA_ID>" }
}'

Respuestas

202Audio aceptado.
POST/messagesAlcance: writeOficial (Meta)Requiere plan Oficial o Agency

Envía plantilla aprobada.

Úsalo fuera de la ventana de 24 h.

Parámetros de ruta

Sin parámetros adicionales.

Parámetros de query

Sin parámetros adicionales.

Campos del cuerpo
CampoTipoDescripción
template.nameobligatoriostringNombre aprobado exacto.
template.componentsopcionalarrayParámetros.

Ejemplos listos

curl -X POST "https://connect.zyronstack.com/api/v1/messages" \
  -H "Authorization: Bearer SUA_CHAVE_API" \
  -H "content-type: application/json" \
  -d '{
  "connection_id": "<CONNECTION_ID>",
  "recipient": { "phone": "<TELEFONE_COM_DDI>" },
  "type": "template",
  "template": { "name": "NOME_DO_TEMPLATE", "language": "pt_BR", "components": [] }
}'

Respuestas

202Template aceptado.
POST/messagesAlcance: writeOficial (Meta)Requiere plan Oficial o Agency

Envía botones, lista, ubicación, contactos o reacción.

Cambia type y su objeto.

Parámetros de ruta

Sin parámetros adicionales.

Parámetros de query

Sin parámetros adicionales.

Campos del cuerpo
CampoTipoDescripción
interactive | location | contacts | reactionopcionalobjectContenido del tipo elegido.

Ejemplos listos

curl -X POST "https://connect.zyronstack.com/api/v1/messages" \
  -H "Authorization: Bearer SUA_CHAVE_API" \
  -H "content-type: application/json" \
  -d '{
  "conversation_id": "<CONVERSATION_ID>",
  "type": "location",
  "location": { "latitude": -22.879, "longitude": -43.104, "name": "Local do atendimento" }
}'

Respuestas

202Mensaje especial aceptado.
GET/messagesAlcance: readOficial + Básico

Lista mensajes y estados.

Filtra por conexión, conversación, contacto, dirección, estado o WAMID.

Parámetros de ruta

Sin parámetros adicionales.

Parámetros de query
CampoTipoDescripción
connection_idopcionaluuidConexión WhatsApp.
conversation_idopcionaluuidConversación interna.
provider_message_idopcionalstringWAMID/ID del provider.
limitopcionalnumberCantidad de registros por página. Predeterminado 50; máximo 200 en la mayoría de listas.
offsetopcionalnumberÍndice inicial de la página. Usa pagination.next_offset para la siguiente página.

Campos del cuerpo

Este endpoint no recibe cuerpo JSON.

Ejemplos listos

curl -X GET "https://connect.zyronstack.com/api/v1/messages?connection_id=<CONNECTION_ID>&provider_message_id=wamid.HBgM..." \
  -H "Authorization: Bearer SUA_CHAVE_API"

Respuestas

200Mensajes paginados.
GET/messages/:idAlcance: readOficial + Básico

Consulta un mensaje con payload.

Lee metadatos sin perder el payload original.

Parámetros de ruta
CampoTipoDescripción
idobligatoriointegerID interno del log.

Parámetros de query

Sin parámetros adicionales.

Campos del cuerpo

Este endpoint no recibe cuerpo JSON.

Ejemplos listos

curl -X GET "https://connect.zyronstack.com/api/v1/messages/42" \
  -H "Authorization: Bearer SUA_CHAVE_API"

Respuestas

200Mensaje devuelto.
POST/messages/:id/readAlcance: writeOficial (Meta)

Marca un mensaje inbound como leído.

Disponible para conexión Oficial; usa el WAMID guardado.

Parámetros de ruta
CampoTipoDescripción
idobligatoriointegerID interno del log inbound.

Parámetros de query

Sin parámetros adicionales.

Campos del cuerpo

Este endpoint no recibe cuerpo JSON.

Ejemplos listos

curl -X POST "https://connect.zyronstack.com/api/v1/messages/42/read" \
  -H "Authorization: Bearer SUA_CHAVE_API"

Respuestas

200Lectura confirmada.
422Conexión no soporta lectura.