Si quieres enviar un mensaje (no campañas), usa POST /api/send-message
.
Sólo necesitas tu instanceId, token y el destino.
- Destino: número con indicativo (ej:
573001112233
) o JID (ej:573001112233@c.us
). - Tipos:
text
,image
,video
,audio
,document
,sticker
,location
,contact
. - Para campañas, usa /api/bulk.
Personaliza tus datos
El ID numérico de tu instancia
Lo ves en Dashboard → Instancia
Número con indicativo o JID
Los botones “Copiar” usarán tus valores.
1) Enviar texto
curl -X POST https://whapi.co/api/send-message \ -H "Content-Type: application/json" \ -d '{ "instanceId": 123, "token": "TOKEN_DE_TU_INSTANCIA", "to": "573001112233", "type": "text", "message": "Hola 👋 desde whapi.co" }'
fetch('https://whapi.co/api/send-message', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ instanceId: 123, token: "TOKEN_DE_TU_INSTANCIA", to: "573001112233", type: "text", message: "Hola 👋 desde whapi.co" }) }) .then(r => r.json()) .then(console.log) .catch(console.error);
const axios = require('axios'); axios.post('https://whapi.co/api/send-message', { instanceId: 123, token: "TOKEN_DE_TU_INSTANCIA", to: "573001112233", type: "text", message: "Hola 👋 desde whapi.co" }).then(res => { console.log(res.data); }).catch(console.error);
import requests resp = requests.post('https://whapi.co/api/send-message', json={ "instanceId": 123, "token": "TOKEN_DE_TU_INSTANCIA", "to": "573001112233", "type": "text", "message": "Hola 👋 desde whapi.co" }) print(resp.json())
<?php $payload = [ "instanceId" => 123, "token" => "TOKEN_DE_TU_INSTANCIA", "to" => "573001112233", "type" => "text", "message" => "Hola 👋 desde whapi.co" ]; $ch = curl_init("https://whapi.co/api/send-message"); curl_setopt_array($ch, [ CURLOPT_POST => true, CURLOPT_HTTPHEADER => ["Content-Type: application/json"], CURLOPT_POSTFIELDS => json_encode($payload), CURLOPT_RETURNTRANSFER => true, ]); $response = curl_exec($ch); if ($response === false) { die("cURL error: " . curl_error($ch)); } curl_close($ch); echo $response; ?>
2) Enviar imagen
curl -X POST https://whapi.co/api/send-message \ -H "Content-Type: application/json" \ -d '{ "instanceId": 123, "token": "TOKEN_DE_TU_INSTANCIA", "to": "573001112233", "type": "image", "media": "https://mi-cdn.com/foto.jpg", "caption": "Nueva carta 🍝" }'
fetch('https://whapi.co/api/send-message', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ instanceId: 123, token: "TOKEN_DE_TU_INSTANCIA", to: "573001112233", type: "image", media: "https://mi-cdn.com/foto.jpg", caption: "Nueva carta 🍝" }) }) .then(r => r.json()) .then(console.log) .catch(console.error);
const axios = require('axios'); axios.post('https://whapi.co/api/send-message', { instanceId: 123, token: "TOKEN_DE_TU_INSTANCIA", to: "573001112233", type: "image", media: "https://mi-cdn.com/foto.jpg", caption: "Nueva carta 🍝" }).then(res => console.log(res.data)) .catch(console.error);
import requests resp = requests.post('https://whapi.co/api/send-message', json={ "instanceId": 123, "token": "TOKEN_DE_TU_INSTANCIA", "to": "573001112233", "type": "image", "media": "https://mi-cdn.com/foto.jpg", "caption": "Nueva carta 🍝" }) print(resp.json())
<?php $payload = [ "instanceId" => 123, "token" => "TOKEN_DE_TU_INSTANCIA", "to" => "573001112233", "type" => "image", "media" => "https://mi-cdn.com/foto.jpg", "caption" => "Nueva carta 🍝" ]; $ch = curl_init("https://whapi.co/api/send-message"); curl_setopt_array($ch, [ CURLOPT_POST => true, CURLOPT_HTTPHEADER => ["Content-Type: application/json"], CURLOPT_POSTFIELDS => json_encode($payload), CURLOPT_RETURNTRANSFER => true, ]); $response = curl_exec($ch); if ($response === false) { die("cURL error: " . curl_error($ch)); } curl_close($ch); echo $response; ?>
Documento
curl -X POST https://whapi.co/api/send-message \ -H "Content-Type: application/json" \ -d '{ "instanceId": 123, "token": "TOKEN_DE_TU_INSTANCIA", "to": "573001112233", "type": "document", "media": "https://mi-cdn.com/manual.pdf", "filename": "manual.pdf" }'
fetch('https://whapi.co/api/send-message', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ instanceId: 123, token: "TOKEN_DE_TU_INSTANCIA", to: "573001112233", type: "document", media: "https://mi-cdn.com/manual.pdf", filename: "manual.pdf" }) }).then(r => r.json()).then(console.log).catch(console.error);
const axios = require('axios'); axios.post('https://whapi.co/api/send-message', { instanceId: 123, token: "TOKEN_DE_TU_INSTANCIA", to: "573001112233", type: "document", media: "https://mi-cdn.com/manual.pdf", filename: "manual.pdf" }).then(res => console.log(res.data)).catch(console.error);
import requests resp = requests.post('https://whapi.co/api/send-message', json={ "instanceId": 123, "token": "TOKEN_DE_TU_INSTANCIA", "to": "573001112233", "type": "document", "media": "https://mi-cdn.com/manual.pdf", "filename": "manual.pdf" }) print(resp.json())
<?php $payload = [ "instanceId" => 123, "token" => "TOKEN_DE_TU_INSTANCIA", "to" => "573001112233", "type" => "document", "media" => "https://mi-cdn.com/manual.pdf", "filename" => "manual.pdf" ]; $ch = curl_init("https://whapi.co/api/send-message"); curl_setopt_array($ch, [ CURLOPT_POST => true, CURLOPT_HTTPHEADER => ["Content-Type: application/json"], CURLOPT_POSTFIELDS => json_encode($payload), CURLOPT_RETURNTRANSFER => true, ]); $response = curl_exec($ch); if ($response === false) { die("cURL error: " . curl_error($ch)); } curl_close($ch); echo $response; ?>
Audio (nota de voz)
curl -X POST https://whapi.co/api/send-message \ -H "Content-Type: application/json" \ -d '{ "instanceId": 123, "token": "TOKEN_DE_TU_INSTANCIA", "to": "573001112233", "type": "audio", "media": "https://mi-cdn.com/audio.ogg" }'
fetch('https://whapi.co/api/send-message', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ instanceId: 123, token: "TOKEN_DE_TU_INSTANCIA", to: "573001112233", type: "audio", media: "https://mi-cdn.com/audio.ogg" }) }).then(r => r.json()).then(console.log).catch(console.error);
const axios = require('axios'); axios.post('https://whapi.co/api/send-message', { instanceId: 123, token: "TOKEN_DE_TU_INSTANCIA", to: "573001112233", type: "audio", media: "https://mi-cdn.com/audio.ogg" }).then(res => console.log(res.data)).catch(console.error);
import requests resp = requests.post('https://whapi.co/api/send-message', json={ "instanceId": 123, "token": "TOKEN_DE_TU_INSTANCIA", "to": "573001112233", "type": "audio", "media": "https://mi-cdn.com/audio.ogg" }) print(resp.json())
<?php $payload = [ "instanceId" => 123, "token" => "TOKEN_DE_TU_INSTANCIA", "to" => "573001112233", "type" => "audio", "media" => "https://mi-cdn.com/audio.ogg" ]; $ch = curl_init("https://whapi.co/api/send-message"); curl_setopt_array($ch, [ CURLOPT_POST => true, CURLOPT_HTTPHEADER => ["Content-Type: application/json"], CURLOPT_POSTFIELDS => json_encode($payload), CURLOPT_RETURNTRANSFER => true, ]); $response = curl_exec($ch); if ($response === false) { die("cURL error: " . curl_error($ch)); } curl_close($ch); echo $response; ?>
Sticker
curl -X POST https://whapi.co/api/send-message \ -H "Content-Type: application/json" \ -d '{ "instanceId": 123, "token": "TOKEN_DE_TU_INSTANCIA", "to": "573001112233", "type": "sticker", "media": "https://mi-cdn.com/sticker.png" }'
fetch('https://whapi.co/api/send-message', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ instanceId: 123, token: "TOKEN_DE_TU_INSTANCIA", to: "573001112233", type: "sticker", media: "https://mi-cdn.com/sticker.png" }) }).then(r => r.json()).then(console.log).catch(console.error);
const axios = require('axios'); axios.post('https://whapi.co/api/send-message', { instanceId: 123, token: "TOKEN_DE_TU_INSTANCIA", to: "573001112233", type: "sticker", media: "https://mi-cdn.com/sticker.png" }).then(res => console.log(res.data)).catch(console.error);
import requests resp = requests.post('https://whapi.co/api/send-message', json={ "instanceId": 123, "token": "TOKEN_DE_TU_INSTANCIA", "to": "573001112233", "type": "sticker", "media": "https://mi-cdn.com/sticker.png" }) print(resp.json())
<?php $payload = [ "instanceId" => 123, "token" => "TOKEN_DE_TU_INSTANCIA", "to" => "573001112233", "type" => "sticker", "media" => "https://mi-cdn.com/sticker.png" ]; $ch = curl_init("https://whapi.co/api/send-message"); curl_setopt_array($ch, [ CURLOPT_POST => true, CURLOPT_HTTPHEADER => ["Content-Type: application/json"], CURLOPT_POSTFIELDS => json_encode($payload), CURLOPT_RETURNTRANSFER => true, ]); $response = curl_exec($ch); if ($response === false) { die("cURL error: " . curl_error($ch)); } curl_close($ch); echo $response; ?>
3) Enviar ubicación
curl -X POST https://whapi.co/api/send-message \ -H "Content-Type: application/json" \ -d '{ "instanceId": 123, "token": "TOKEN_DE_TU_INSTANCIA", "to": "573001112233", "type": "location", "latitude": 4.7110, "longitude": -74.0721 }'
fetch('https://whapi.co/api/send-message', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ instanceId: 123, token: "TOKEN_DE_TU_INSTANCIA", to: "573001112233", type: "location", latitude: 4.7110, longitude: -74.0721 }) }).then(r => r.json()).then(console.log).catch(console.error);
const axios = require('axios'); axios.post('https://whapi.co/api/send-message', { instanceId: 123, token: "TOKEN_DE_TU_INSTANCIA", to: "573001112233", type: "location", latitude: 4.7110, longitude: -74.0721 }).then(res => console.log(res.data)).catch(console.error);
import requests resp = requests.post('https://whapi.co/api/send-message', json={ "instanceId": 123, "token": "TOKEN_DE_TU_INSTANCIA", "to": "573001112233", "type": "location", "latitude": 4.7110, "longitude": -74.0721 }) print(resp.json())
<?php $payload = [ "instanceId" => 123, "token" => "TOKEN_DE_TU_INSTANCIA", "to" => "573001112233", "type" => "location", "latitude" => 4.7110, "longitude" => -74.0721 ]; $ch = curl_init("https://whapi.co/api/send-message"); curl_setopt_array($ch, [ CURLOPT_POST => true, CURLOPT_HTTPHEADER => ["Content-Type: application/json"], CURLOPT_POSTFIELDS => json_encode($payload), CURLOPT_RETURNTRANSFER => true, ]); $response = curl_exec($ch); if ($response === false) { die("cURL error: " . curl_error($ch)); } curl_close($ch); echo $response; ?>
4) Enviar contacto (vCard)
curl -X POST https://whapi.co/api/send-message \ -H "Content-Type: application/json" \ -d '{ "instanceId": 123, "token": "TOKEN_DE_TU_INSTANCIA", "to": "573001112233", "type": "contact", "vcard": "BEGIN:VCARD\nVERSION:3.0\nFN:Soporte Whapi\nTEL;TYPE=CELL:+573001234567\nEND:VCARD" }'
fetch('https://whapi.co/api/send-message', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ instanceId: 123, token: "TOKEN_DE_TU_INSTANCIA", to: "573001112233", type: "contact", vcard: `BEGIN:VCARD VERSION:3.0 FN:Soporte Whapi TEL;TYPE=CELL:+573001234567 END:VCARD` }) }).then(r => r.json()).then(console.log).catch(console.error);
const axios = require('axios'); axios.post('https://whapi.co/api/send-message', { instanceId: 123, token: "TOKEN_DE_TU_INSTANCIA", to: "573001112233", type: "contact", vcard: 'BEGIN:VCARD\nVERSION:3.0\nFN:Soporte Whapi\nTEL;TYPE=CELL:+573001234567\nEND:VCARD' }).then(res => console.log(res.data)).catch(console.error);
import requests resp = requests.post('https://whapi.co/api/send-message', json={ "instanceId": 123, "token": "TOKEN_DE_TU_INSTANCIA", "to": "573001112233", "type": "contact", "vcard": "BEGIN:VCARD\nVERSION:3.0\nFN:Soporte Whapi\nTEL;TYPE=CELL:+573001234567\nEND:VCARD" }) print(resp.json())
<?php $payload = [ "instanceId" => 123, "token" => "TOKEN_DE_TU_INSTANCIA", "to" => "573001112233", "type" => "contact", "vcard" => "BEGIN:VCARD\nVERSION:3.0\nFN:Soporte Whapi\nTEL;TYPE=CELL:+573001234567\nEND:VCARD" ]; $ch = curl_init("https://whapi.co/api/send-message"); curl_setopt_array($ch, [ CURLOPT_POST => true, CURLOPT_HTTPHEADER => ["Content-Type: application/json"], CURLOPT_POSTFIELDS => json_encode($payload), CURLOPT_RETURNTRANSFER => true, ]); $response = curl_exec($ch); if ($response === false) { die("cURL error: " . curl_error($ch)); } curl_close($ch); echo $response; ?>
Consejos rápidos
- Si ves errores de “número inválido”, convierte primero el número a JID con /api/resolve-number.
- Para adjuntos, usa URLs públicas (CDN o servidor de archivos accesible).
- Las confirmaciones (ack) y eventos los recibes por SSE o vía webhook.