Errores Comunes
400 Bad Request: Falta el camponumberotext.404 Instance Not Found: La instancia no existe o no está activa.
Wazimodo proporciona una API REST unificada para interactuar con instancias válidas.
Todas las peticiones deben realizarse a:
POST /api/v1/{instance_id}/{category}/{endpoint}{instance_id}: Tu
identificador único de instancia (UUID).
Envía un mensaje de texto a un número de teléfono o grupo.
POST /api/v1/{instance_id}/message/text | Parámetro | Tipo | Requerido | Descripción |
|---|---|---|---|
number | string | Sí | Número de teléfono (ej. 5215512345678) o JID de Grupo (…g.us). |
text | string | Sí | El contenido del mensaje. |
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()) {
"key": {
"remoteJid": "5215512345678@s.whatsapp.net",
"fromMe": true,
"id": "3EB0..."
},
"message": {
"conversation": "Mensaje de prueba"
},
"status": "PENDING"
}{
"error": "VALIDATION_ERROR",
"message": "Fields \"number\" and \"text\" are required"
}Envía un archivo de imagen.
POST /api/v1/{instance_id}/message/image | Parámetro | Tipo | Requerido | Descripción |
|---|---|---|---|
number | string | Sí | Número de teléfono o JID de Grupo. |
media | string | Sí | URL de la imagen. |
caption | string | No | Texto a mostrar debajo de la imagen. |
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()) {
"key": {
"remoteJid": "5215512345678@s.whatsapp.net",
"fromMe": true,
"id": "BAE5F..."
},
"message": {
"imageMessage": {
"url": "https://..."
}
},
"status": "PENDING"
}{
"error": "DOWNLOAD_FAILED",
"message": "Could not download media from URL"
}Envía un mensaje de audio (nota de voz).
POST /api/v1/{instance_id}/message/audio | Parámetro | Tipo | Requerido | Descripción |
|---|---|---|---|
number | string | Sí | Número de teléfono o JID de Grupo. |
audio | string | Sí | URL del archivo de audio. |
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()) {
"key": {
"remoteJid": "5215512345678@s.whatsapp.net",
"fromMe": true,
"id": "BAE5F..."
},
"message": {
"audioMessage": {
"url": "https://...",
"ptt": true
}
},
"status": "PENDING"
}Envía un archivo genérico (PDF, Doc, etc.).
POST /api/v1/{instance_id}/message/document | Parámetro | Tipo | Requerido | Descripción |
|---|---|---|---|
number | string | Sí | Número de teléfono o JID de Grupo. |
media | string | Sí | URL del archivo. |
fileName | string | No | Nombre del archivo a mostrar. |
caption | string | No | Texto del pie de foto. |
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()) {
"key": {
"remoteJid": "5215512345678@s.whatsapp.net",
"fromMe": true,
"id": "BAE5F..."
},
"message": {
"documentMessage": {
"url": "https://...",
"fileName": "documento-test.pdf"
}
},
"status": "PENDING"
}Envía multimedia genérica (imagen, video, etc.) especificando el tipo.
POST /api/v1/{instance_id}/message/media | Parámetro | Tipo | Requerido | Descripción |
|---|---|---|---|
number | string | Sí | Número de teléfono o JID de Grupo. |
mediatype | string | Sí | Tipo de medio (ej. image). |
media | string | Sí | URL del archivo. |
caption | string | No | Texto del pie de foto. |
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()) {
"key": {
"remoteJid": "5215512345678@s.whatsapp.net",
"fromMe": true,
"id": "BAE5F..."
},
"message": {
"imageMessage": {
"url": "https://..."
}
},
"status": "PENDING"
}{
"error": "INVALID_MEDIA_TYPE",
"message": "mediatype must be one of: image, video, document, audio"
}Reacciona a un mensaje específico con un emoji.
POST /api/v1/{instance_id}/message/reaction | Parámetro | Tipo | Requerido | Descripción |
|---|---|---|---|
reaction | string | Sí | El emoji de reacción (ej., ”👍“). |
key | object | Sí | Objeto con la información del mensaje. |
key.remoteJid | string | Sí | JID del chat (ej. 5215512345678@s.whatsapp.net o …@g.us para grupos). |
key.id | string | Sí | ID del mensaje al que reaccionar. |
key.fromMe | boolean | Sí | Si el mensaje original fue enviado por ti (true) o recibido (false). |
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()) {
"key": {
"remoteJid": "5215512345678@s.whatsapp.net",
"fromMe": true,
"id": "BAE5F..."
},
"message": {
"reactionMessage": {
"key": {
"remoteJid": "...",
"id": "..."
},
"text": "👍"
}
},
"status": "PENDING"
}Simula estado de escribiendo o grabando.
POST /api/v1/{instance_id}/chat/presence | Parámetro | Tipo | Requerido | Descripción |
|---|---|---|---|
number | string | Sí | Número de teléfono o JID de Grupo. |
presence | string | Sí | Estado: “composing” (escribiendo) o “available” (disponible). |
type | string | Sí | Tipo: “text”. |
delay | number | No | Retraso en milisegundos. |
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()) {
"status": "success",
"message": "Presence set"
}Marca mensajes específicos como leídos.
POST /api/v1/{instance_id}/chat/read | Parámetro | Tipo | Requerido | Descripción |
|---|---|---|---|
readMessages | array | Sí | Array de objetos de mensaje para marcar como leídos. |
Estructura del Objeto Mensaje:
remoteJid: El JID del chat.id: El ID del mensaje.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()) {
"status": "success",
"count": 1
}Verifica si los números de teléfono están registrados en WhatsApp.
POST /api/v1/{instance_id}/chat/numbers | Parámetro | Tipo | Requerido | Descripción |
|---|---|---|---|
numbers | array | Sí | Lista de números de teléfono a verificar. |
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()) {
"5215512345678": {
"jid": "5215512345678@s.whatsapp.net",
"found": true,
"isIn": true
}
}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).
Puedes suscribirte a los siguientes eventos para recibirlos en tu URL configurada:
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). |