Endpoints de Wazimodo

Wazimodo proporciona una API REST unificada para interactuar con instancias válidas.

Información General

Todas las peticiones deben realizarse a:

POST /api/v1/{instance_id}/{category}/{endpoint}

Parámetros de Ruta

  • {instance_id}: Tu identificador único de instancia (UUID).

Headers Requeridos

X-API-Key: <TU_API_KEY> Content-Type: application/json

Primeros pasos

  • Configura tu autenticación con una API Key: API Keys.

📨 Mensajes

POST Enviar Texto

Envía un mensaje de texto a un número de teléfono o grupo.

POST /api/v1/{instance_id}/message/text
ParámetroTipoRequeridoDescripción
numberstringNúmero de teléfono (ej. 5215512345678) o JID de Grupo (…g.us).
textstringEl contenido del mensaje.

Petición

curl -X POST "https://wazimodo.com/api/v1/{instance_id}/message/text" \
  -H "X-API-Key: <TU_API_KEY>" \
  -H "Content-Type: application/json" \
  -d '{
  "number": "5215512345678",
  "text": "Mensaje de prueba"
}'
wget --method=POST \
  --header="X-API-Key: <TU_API_KEY>" \
  --header="Content-Type: application/json" \
  --body-data='{
  "number": "5215512345678",
  "text": "Mensaje de prueba"
}' \
  "https://wazimodo.com/api/v1/{instance_id}/message/text" -O -
fetch("https://wazimodo.com/api/v1/{instance_id}/message/text", {
  method: "POST",
  headers: {
    "X-API-Key": "<TU_API_KEY>",
    "Content-Type": "application/json"
  },
  body: JSON.stringify({
  "number": "5215512345678",
  "text": "Mensaje de prueba"
})
})
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error('Error:', error));
import requests

url = "https://wazimodo.com/api/v1/{instance_id}/message/text"
headers = {
    "X-API-Key": "<TU_API_KEY>",
    "Content-Type": "application/json"
}
data = {
  "number": "5215512345678",
  "text": "Mensaje de prueba"
}

response = requests.post(url, headers=headers, json=data)

print(response.json())

Respuesta Exitosa (200 OK)

{
  "key": {
    "remoteJid": "5215512345678@s.whatsapp.net",
    "fromMe": true,
    "id": "3EB0..."
  },
  "message": {
    "conversation": "Mensaje de prueba"
  },
  "status": "PENDING"
}

Errores Comunes

  • 400 Bad Request: Falta el campo number o text.
  • 404 Instance Not Found: La instancia no existe o no está activa.
{
  "error": "VALIDATION_ERROR",
  "message": "Fields \"number\" and \"text\" are required"
}

POST Enviar Imagen

Envía un archivo de imagen.

POST /api/v1/{instance_id}/message/image
ParámetroTipoRequeridoDescripción
numberstringNúmero de teléfono o JID de Grupo.
mediastringURL de la imagen.
captionstringNoTexto a mostrar debajo de la imagen.

Petición

curl -X POST "https://wazimodo.com/api/v1/{instance_id}/message/image" \
  -H "X-API-Key: <TU_API_KEY>" \
  -H "Content-Type: application/json" \
  -d '{
  "number": "5215512345678",
  "media": "https://upload.wikimedia.org/wikipedia/commons/7/70/Example.png",
  "caption": "Pie de foto de la imagen de prueba"
}'
wget --method=POST \
  --header="X-API-Key: <TU_API_KEY>" \
  --header="Content-Type: application/json" \
  --body-data='{
  "number": "5215512345678",
  "media": "https://upload.wikimedia.org/wikipedia/commons/7/70/Example.png",
  "caption": "Pie de foto de la imagen de prueba"
}' \
  "https://wazimodo.com/api/v1/{instance_id}/message/image" -O -
fetch("https://wazimodo.com/api/v1/{instance_id}/message/image", {
  method: "POST",
  headers: {
    "X-API-Key": "<TU_API_KEY>",
    "Content-Type": "application/json"
  },
  body: JSON.stringify({
  "number": "5215512345678",
  "media": "https://upload.wikimedia.org/wikipedia/commons/7/70/Example.png",
  "caption": "Pie de foto de la imagen de prueba"
})
})
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error('Error:', error));
import requests

url = "https://wazimodo.com/api/v1/{instance_id}/message/image"
headers = {
    "X-API-Key": "<TU_API_KEY>",
    "Content-Type": "application/json"
}
data = {
  "number": "5215512345678",
  "media": "https://upload.wikimedia.org/wikipedia/commons/7/70/Example.png",
  "caption": "Pie de foto de la imagen de prueba"
}

response = requests.post(url, headers=headers, json=data)

print(response.json())

Respuesta Exitosa (200 OK)

{
  "key": {
    "remoteJid": "5215512345678@s.whatsapp.net",
    "fromMe": true,
    "id": "BAE5F..."
  },
  "message": {
    "imageMessage": {
      "url": "https://..."
    }
  },
  "status": "PENDING"
}

Errores

{
  "error": "DOWNLOAD_FAILED",
  "message": "Could not download media from URL"
}

POST Enviar Audio (PTT)

Envía un mensaje de audio (nota de voz).

POST /api/v1/{instance_id}/message/audio
ParámetroTipoRequeridoDescripción
numberstringNúmero de teléfono o JID de Grupo.
audiostringURL del archivo de audio.

Petición

curl -X POST "https://wazimodo.com/api/v1/{instance_id}/message/audio" \
  -H "X-API-Key: <TU_API_KEY>" \
  -H "Content-Type: application/json" \
  -d '{
  "number": "5215512345678",
  "audio": "https://www.soundhelix.com/examples/mp3/SoundHelix-Song-1.mp3"
}'
wget --method=POST \
  --header="X-API-Key: <TU_API_KEY>" \
  --header="Content-Type: application/json" \
  --body-data='{
  "number": "5215512345678",
  "audio": "https://www.soundhelix.com/examples/mp3/SoundHelix-Song-1.mp3"
}' \
  "https://wazimodo.com/api/v1/{instance_id}/message/audio" -O -
fetch("https://wazimodo.com/api/v1/{instance_id}/message/audio", {
  method: "POST",
  headers: {
    "X-API-Key": "<TU_API_KEY>",
    "Content-Type": "application/json"
  },
  body: JSON.stringify({
  "number": "5215512345678",
  "audio": "https://www.soundhelix.com/examples/mp3/SoundHelix-Song-1.mp3"
})
})
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error('Error:', error));
import requests

url = "https://wazimodo.com/api/v1/{instance_id}/message/audio"
headers = {
    "X-API-Key": "<TU_API_KEY>",
    "Content-Type": "application/json"
}
data = {
  "number": "5215512345678",
  "audio": "https://www.soundhelix.com/examples/mp3/SoundHelix-Song-1.mp3"
}

response = requests.post(url, headers=headers, json=data)

print(response.json())

Respuesta Exitosa (200 OK)

{
  "key": {
    "remoteJid": "5215512345678@s.whatsapp.net",
    "fromMe": true,
    "id": "BAE5F..."
  },
  "message": {
    "audioMessage": {
      "url": "https://...",
      "ptt": true
    }
  },
  "status": "PENDING"
}

POST Enviar Documento

Envía un archivo genérico (PDF, Doc, etc.).

POST /api/v1/{instance_id}/message/document
ParámetroTipoRequeridoDescripción
numberstringNúmero de teléfono o JID de Grupo.
mediastringURL del archivo.
fileNamestringNoNombre del archivo a mostrar.
captionstringNoTexto del pie de foto.

Petición

curl -X POST "https://wazimodo.com/api/v1/{instance_id}/message/document" \
  -H "X-API-Key: <TU_API_KEY>" \
  -H "Content-Type: application/json" \
  -d '{
  "number": "5215512345678",
  "media": "https://www.orimi.com/pdf-test.pdf",
  "fileName": "documento-test.pdf",
  "caption": "Documento de prueba"
}'
wget --method=POST \
  --header="X-API-Key: <TU_API_KEY>" \
  --header="Content-Type: application/json" \
  --body-data='{
  "number": "5215512345678",
  "media": "https://www.orimi.com/pdf-test.pdf",
  "fileName": "documento-test.pdf",
  "caption": "Documento de prueba"
}' \
  "https://wazimodo.com/api/v1/{instance_id}/message/document" -O -
fetch("https://wazimodo.com/api/v1/{instance_id}/message/document", {
  method: "POST",
  headers: {
    "X-API-Key": "<TU_API_KEY>",
    "Content-Type": "application/json"
  },
  body: JSON.stringify({
  "number": "5215512345678",
  "media": "https://www.orimi.com/pdf-test.pdf",
  "fileName": "documento-test.pdf",
  "caption": "Documento de prueba"
})
})
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error('Error:', error));
import requests

url = "https://wazimodo.com/api/v1/{instance_id}/message/document"
headers = {
    "X-API-Key": "<TU_API_KEY>",
    "Content-Type": "application/json"
}
data = {
  "number": "5215512345678",
  "media": "https://www.orimi.com/pdf-test.pdf",
  "fileName": "documento-test.pdf",
  "caption": "Documento de prueba"
}

response = requests.post(url, headers=headers, json=data)

print(response.json())

Respuesta Exitosa (200 OK)

{
  "key": {
    "remoteJid": "5215512345678@s.whatsapp.net",
    "fromMe": true,
    "id": "BAE5F..."
  },
  "message": {
    "documentMessage": {
      "url": "https://...",
      "fileName": "documento-test.pdf"
    }
  },
  "status": "PENDING"
}

POST Enviar Multimedia (Genérico)

Envía multimedia genérica (imagen, video, etc.) especificando el tipo.

POST /api/v1/{instance_id}/message/media
ParámetroTipoRequeridoDescripción
numberstringNúmero de teléfono o JID de Grupo.
mediatypestringTipo de medio (ej. image).
mediastringURL del archivo.
captionstringNoTexto del pie de foto.

Petición

curl -X POST "https://wazimodo.com/api/v1/{instance_id}/message/media" \
  -H "X-API-Key: <TU_API_KEY>" \
  -H "Content-Type: application/json" \
  -d '{
  "number": "5215512345678",
  "mediatype": "image",
  "media": "https://upload.wikimedia.org/wikipedia/commons/7/70/Example.png",
  "caption": "Media genérico de prueba"
}'
wget --method=POST \
  --header="X-API-Key: <TU_API_KEY>" \
  --header="Content-Type: application/json" \
  --body-data='{
  "number": "5215512345678",
  "mediatype": "image",
  "media": "https://upload.wikimedia.org/wikipedia/commons/7/70/Example.png",
  "caption": "Media genérico de prueba"
}' \
  "https://wazimodo.com/api/v1/{instance_id}/message/media" -O -
fetch("https://wazimodo.com/api/v1/{instance_id}/message/media", {
  method: "POST",
  headers: {
    "X-API-Key": "<TU_API_KEY>",
    "Content-Type": "application/json"
  },
  body: JSON.stringify({
  "number": "5215512345678",
  "mediatype": "image",
  "media": "https://upload.wikimedia.org/wikipedia/commons/7/70/Example.png",
  "caption": "Media genérico de prueba"
})
})
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error('Error:', error));
import requests

url = "https://wazimodo.com/api/v1/{instance_id}/message/media"
headers = {
    "X-API-Key": "<TU_API_KEY>",
    "Content-Type": "application/json"
}
data = {
  "number": "5215512345678",
  "mediatype": "image",
  "media": "https://upload.wikimedia.org/wikipedia/commons/7/70/Example.png",
  "caption": "Media genérico de prueba"
}

response = requests.post(url, headers=headers, json=data)

print(response.json())

Respuesta Exitosa (200 OK)

{
  "key": {
    "remoteJid": "5215512345678@s.whatsapp.net",
    "fromMe": true,
    "id": "BAE5F..."
  },
  "message": {
    "imageMessage": {
      "url": "https://..."
    }
  },
  "status": "PENDING"
}

Errores

{
  "error": "INVALID_MEDIA_TYPE",
  "message": "mediatype must be one of: image, video, document, audio"
}

POST Enviar Reacción

Reacciona a un mensaje específico con un emoji.

POST /api/v1/{instance_id}/message/reaction
ParámetroTipoRequeridoDescripción
reactionstringEl emoji de reacción (ej., ”👍“).
keyobjectObjeto con la información del mensaje.
key.remoteJidstringJID del chat (ej. 5215512345678@s.whatsapp.net o …@g.us para grupos).
key.idstringID del mensaje al que reaccionar.
key.fromMebooleanSi el mensaje original fue enviado por ti (true) o recibido (false).

Petición

curl -X POST "https://wazimodo.com/api/v1/{instance_id}/message/reaction" \
  -H "X-API-Key: <TU_API_KEY>" \
  -H "Content-Type: application/json" \
  -d '{
  "reaction": "👍",
  "key": {
    "remoteJid": "5215512345678@s.whatsapp.net",
    "id": "MESSAGE_ID_REAL",
    "fromMe": false
  }
}'
wget --method=POST \
  --header="X-API-Key: <TU_API_KEY>" \
  --header="Content-Type: application/json" \
  --body-data='{
  "reaction": "👍",
  "key": {
    "remoteJid": "5215512345678@s.whatsapp.net",
    "id": "MESSAGE_ID_REAL",
    "fromMe": false
  }
}' \
  "https://wazimodo.com/api/v1/{instance_id}/message/reaction" -O -
fetch("https://wazimodo.com/api/v1/{instance_id}/message/reaction", {
  method: "POST",
  headers: {
    "X-API-Key": "<TU_API_KEY>",
    "Content-Type": "application/json"
  },
  body: JSON.stringify({
  "reaction": "👍",
  "key": {
    "remoteJid": "5215512345678@s.whatsapp.net",
    "id": "MESSAGE_ID_REAL",
    "fromMe": false
  }
})
})
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error('Error:', error));
import requests

url = "https://wazimodo.com/api/v1/{instance_id}/message/reaction"
headers = {
    "X-API-Key": "<TU_API_KEY>",
    "Content-Type": "application/json"
}
data = {
  "reaction": "👍",
  "key": {
    "remoteJid": "5215512345678@s.whatsapp.net",
    "id": "MESSAGE_ID_REAL",
    "fromMe": false
  }
}

response = requests.post(url, headers=headers, json=data)

print(response.json())

Respuesta Exitosa (200 OK)

{
  "key": {
    "remoteJid": "5215512345678@s.whatsapp.net",
    "fromMe": true,
    "id": "BAE5F..."
  },
  "message": {
    "reactionMessage": {
      "key": {
        "remoteJid": "...",
        "id": "..."
      },
      "text": "👍"
    }
  },
  "status": "PENDING"
}

💬 Acciones de Chat

POST Establecer Presencia

Simula estado de escribiendo o grabando.

POST /api/v1/{instance_id}/chat/presence
ParámetroTipoRequeridoDescripción
numberstringNúmero de teléfono o JID de Grupo.
presencestringEstado: “composing” (escribiendo) o “available” (disponible).
typestringTipo: “text”.
delaynumberNoRetraso en milisegundos.

Petición

curl -X POST "https://wazimodo.com/api/v1/{instance_id}/chat/presence" \
  -H "X-API-Key: <TU_API_KEY>" \
  -H "Content-Type: application/json" \
  -d '{
  "number": "5215512345678",
  "presence": "composing",
  "type": "text",
  "delay": 3000
}'
wget --method=POST \
  --header="X-API-Key: <TU_API_KEY>" \
  --header="Content-Type: application/json" \
  --body-data='{
  "number": "5215512345678",
  "presence": "composing",
  "type": "text",
  "delay": 3000
}' \
  "https://wazimodo.com/api/v1/{instance_id}/chat/presence" -O -
fetch("https://wazimodo.com/api/v1/{instance_id}/chat/presence", {
  method: "POST",
  headers: {
    "X-API-Key": "<TU_API_KEY>",
    "Content-Type": "application/json"
  },
  body: JSON.stringify({
  "number": "5215512345678",
  "presence": "composing",
  "type": "text",
  "delay": 3000
})
})
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error('Error:', error));
import requests

url = "https://wazimodo.com/api/v1/{instance_id}/chat/presence"
headers = {
    "X-API-Key": "<TU_API_KEY>",
    "Content-Type": "application/json"
}
data = {
  "number": "5215512345678",
  "presence": "composing",
  "type": "text",
  "delay": 3000
}

response = requests.post(url, headers=headers, json=data)

print(response.json())

Respuesta Exitosa (200 OK)

{
  "status": "success",
  "message": "Presence set"
}

POST Marcar como Leído

Marca mensajes específicos como leídos.

POST /api/v1/{instance_id}/chat/read
ParámetroTipoRequeridoDescripción
readMessagesarrayArray de objetos de mensaje para marcar como leídos.

Estructura del Objeto Mensaje:

  • remoteJid: El JID del chat.
  • id: El ID del mensaje.

Petición

curl -X POST "https://wazimodo.com/api/v1/{instance_id}/chat/read" \
  -H "X-API-Key: <TU_API_KEY>" \
  -H "Content-Type: application/json" \
  -d '{
  "readMessages": [
    {
      "remoteJid": "5215512345678@s.whatsapp.net",
      "id": "MESSAGE_ID"
    }
  ]
}'
wget --method=POST \
  --header="X-API-Key: <TU_API_KEY>" \
  --header="Content-Type: application/json" \
  --body-data='{
  "readMessages": [
    {
      "remoteJid": "5215512345678@s.whatsapp.net",
      "id": "MESSAGE_ID"
    }
  ]
}' \
  "https://wazimodo.com/api/v1/{instance_id}/chat/read" -O -
fetch("https://wazimodo.com/api/v1/{instance_id}/chat/read", {
  method: "POST",
  headers: {
    "X-API-Key": "<TU_API_KEY>",
    "Content-Type": "application/json"
  },
  body: JSON.stringify({
  "readMessages": [
    {
      "remoteJid": "5215512345678@s.whatsapp.net",
      "id": "MESSAGE_ID"
    }
  ]
})
})
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error('Error:', error));
import requests

url = "https://wazimodo.com/api/v1/{instance_id}/chat/read"
headers = {
    "X-API-Key": "<TU_API_KEY>",
    "Content-Type": "application/json"
}
data = {
  "readMessages": [
    {
      "remoteJid": "5215512345678@s.whatsapp.net",
      "id": "MESSAGE_ID"
    }
  ]
}

response = requests.post(url, headers=headers, json=data)

print(response.json())

Respuesta Exitosa (200 OK)

{
  "status": "success",
  "count": 1
}

POST Verificar Números

Verifica si los números de teléfono están registrados en WhatsApp.

POST /api/v1/{instance_id}/chat/numbers
ParámetroTipoRequeridoDescripción
numbersarrayLista de números de teléfono a verificar.

Petición

curl -X POST "https://wazimodo.com/api/v1/{instance_id}/chat/numbers" \
  -H "X-API-Key: <TU_API_KEY>" \
  -H "Content-Type: application/json" \
  -d '{
  "numbers": [
    "5215512345678"
  ]
}'
wget --method=POST \
  --header="X-API-Key: <TU_API_KEY>" \
  --header="Content-Type: application/json" \
  --body-data='{
  "numbers": [
    "5215512345678"
  ]
}' \
  "https://wazimodo.com/api/v1/{instance_id}/chat/numbers" -O -
fetch("https://wazimodo.com/api/v1/{instance_id}/chat/numbers", {
  method: "POST",
  headers: {
    "X-API-Key": "<TU_API_KEY>",
    "Content-Type": "application/json"
  },
  body: JSON.stringify({
  "numbers": [
    "5215512345678"
  ]
})
})
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error('Error:', error));
import requests

url = "https://wazimodo.com/api/v1/{instance_id}/chat/numbers"
headers = {
    "X-API-Key": "<TU_API_KEY>",
    "Content-Type": "application/json"
}
data = {
  "numbers": [
    "5215512345678"
  ]
}

response = requests.post(url, headers=headers, json=data)

print(response.json())

Respuesta Exitosa (200 OK)

{
  "5215512345678": {
    "jid": "5215512345678@s.whatsapp.net",
    "found": true,
    "isIn": true
  }
}

🔔 Webhooks y Configuración Avanzada

Wazimodo permite configurar webhooks para recibir eventos en tiempo real y personalizar el comportamiento de tu instancia. Los webhooks funcionan enviando peticiones HTTP POST a la URL que configures, permitiendo una integración reactiva sin necesidad de realizar consultas constantes (polling).

Eventos de Webhook

Puedes suscribirte a los siguientes eventos para recibirlos en tu URL configurada:

MESSAGES_UPSERT MESSAGES_UPDATE CONTACTS_UPSERT
Nota: Los eventos se envían vía POST a la URL de webhook que configures al crear la instancia.

Configuración de Instancia

Al crear una instancia, puedes definir opciones avanzadas de comportamiento. Ten en cuenta que estas opciones son inmutables después de la creación.

Opción Tipo Descripción
reject_call boolean Rechaza automáticamente las llamadas entrantes.
msg_call string Mensaje de respuesta automática al rechazar una llamada.
always_online boolean Mantiene el estado "En línea" permanentemente.
groups_ignore boolean Ignora eventos y mensajes provenientes de grupos.
read_messages boolean Marca automáticamente los mensajes como leídos.
read_status boolean Marca automáticamente los estados como vistos.
sync_full_history boolean Sincroniza el historial completo al conectar (consumo alto).
Importante: Las opciones de configuración avanzada (como reject_call, always_online, etc.) solo se pueden establecer al momento de crear la instancia. Actualmente, la API no permite modificar estos valores en una instancia existente; para cambiarlos, es necesario eliminar y volver a crear la instancia.