API REST profesional para automatizar el envío de mensajes de WhatsApp. Consulta nuestros planes y precios para más información.
API REST optimizada para envío de mensajes de WhatsApp en tiempo real con alta disponibilidad
Autenticación por tokens API seguros, límites inteligentes y conexiones HTTPS encriptadas
Integra en minutos con cualquier lenguaje de programación usando nuestra API REST
Regístrate en ZapGo para obtener acceso a la API
Configura tu instancia con Meta Cloud API (Business API oficial)
Copia tu User ID y API Token desde el dashboard
Usa la API para enviar mensajes según tu plan. Ver precios
POST https://zapgo.com.co/api/leads/create-from-form
Parámetros JSON:
{
"name": "Juan Pérez", // Requerido
"email": "juan@example.com", // Requerido (o phone)
"phone": "573001234567", // Requerido (o email)
"message": "Mensaje del form", // Opcional
"source": "Formulario Web", // Opcional
"company": "Empresa XYZ" // Opcional
}💡 Perfecto para formularios web: Crea el lead y dispara automáticamente el email de bienvenida configurado en tus automatizaciones.
GET https://zapgo.com.co/api/auth/me
Retorna tus datos de usuario y suscripción
POST https://zapgo.com.co/api/send-message
Parámetros JSON:
{
"instance_id": "1", // Requerido
"to": "573001234567", // Requerido
"message": "Hola desde API", // Requerido
"media_url": "" // Opcional
}POST https://zapgo.com.co/api/instances
Parámetros JSON:
{
"instance_name": "Mi Instancia", // Requerido
"phone_number": "+573001234567" // Requerido
}POST https://zapgo.com.co/api/instances/[id]/connect
Conecta la instancia usando Meta Cloud API. Sin parámetros.
POST https://zapgo.com.co/api/instances/[id]/disconnect
Sin parámetros. Desconecta la instancia de WhatsApp
PUT https://zapgo.com.co/api/instances/[id]
Parámetros JSON:
{
"instance_name": "Nuevo nombre", // Opcional
"webhook_url": "https://...", // Opcional
"webhook_events": ["message"] // Opcional
}DELETE https://zapgo.com.co/api/instances/[id]
Sin parámetros. Elimina la instancia (soft delete)
GET https://zapgo.com.co/api/instances
Retorna todas tus instancias activas con conteo de mensajes
GET https://zapgo.com.co/api/instances/[id]
Retorna los detalles de una instancia específica
const axios = require('axios');
async function sendMessage(instanceId, to, message) {
try {
const response = await axios.post(
'https://zapgo.com.co/api/send-message',
{
instance_id: instanceId,
to: to,
message: message
},
{
headers: {
'Authorization': 'Bearer YOUR_API_TOKEN',
'Content-Type': 'application/json'
}
}
);
console.log('Mensaje enviado:', response.data);
} catch (error) {
console.error('Error:', error.response?.data || error.message);
}
}
// Uso
sendMessage('1', '573001234567', '¡Hola desde ZapGo!');// Ejemplo de integración con formulario HTML
document.getElementById('contactForm').addEventListener('submit', async (e) => {
e.preventDefault();
const formData = {
name: document.getElementById('name').value,
email: document.getElementById('email').value,
phone: document.getElementById('phone').value,
message: document.getElementById('message').value,
source: 'Sitio Web Principal',
company: document.getElementById('company')?.value
};
try {
const response = await fetch('https://zapgo.com.co/api/leads/create-from-form', {
method: 'POST',
headers: {
'Authorization': 'Bearer YOUR_API_TOKEN',
'Content-Type': 'application/json'
},
body: JSON.stringify(formData)
});
const result = await response.json();
if (result.success) {
alert('¡Gracias! Nos pondremos en contacto pronto.');
e.target.reset();
} else {
alert('Error: ' + result.error);
}
} catch (error) {
alert('Error al enviar el formulario');
console.error(error);
}
});import requests
def create_lead_from_form(name, email, phone, message):
url = "https://zapgo.com.co/api/leads/create-from-form"
headers = {
"Authorization": "Bearer YOUR_API_TOKEN",
"Content-Type": "application/json"
}
data = {
"name": name,
"email": email,
"phone": phone,
"message": message,
"source": "Formulario Web"
}
try:
response = requests.post(url, headers=headers, json=data)
response.raise_for_status()
result = response.json()
if result.get("success"):
print(f"Lead creado: {result.get('lead_id')}")
print(result.get("message"))
else:
print(f"Error: {result.get('error')}")
except requests.exceptions.RequestException as e:
print(f"Error: {e}")
# Uso
create_lead_from_form(
"Juan Pérez",
"juan@example.com",
"573001234567",
"Quiero más información sobre el producto"
)import requests
def send_message(instance_id, to, message):
url = "https://zapgo.com.co/api/send-message"
headers = {
"Authorization": "Bearer YOUR_API_TOKEN",
"Content-Type": "application/json"
}
data = {
"instance_id": instance_id,
"to": to,
"message": message
}
try:
response = requests.post(url, headers=headers, json=data)
response.raise_for_status()
print("Mensaje enviado:", response.json())
except requests.exceptions.RequestException as e:
print("Error:", e)
# Uso
send_message("1", "573001234567", "¡Hola desde ZapGo!")<?php
function sendMessage($instanceId, $to, $message) {
$url = 'https://zapgo.com.co/api/send-message';
$data = json_encode([
'instance_id' => $instanceId,
'to' => $to,
'message' => $message
]);
$options = [
'http' => [
'method' => 'POST',
'header' => "Authorization: Bearer YOUR_API_TOKEN\r\n" .
"Content-Type: application/json\r\n",
'content' => $data
]
];
$context = stream_context_create($options);
$result = file_get_contents($url, false, $context);
if ($result !== FALSE) {
echo "Mensaje enviado: " . $result . "\n";
} else {
echo "Error al enviar mensaje\n";
}
}
// Uso
sendMessage('1', '573001234567', '¡Hola desde ZapGo!');
?>const axios = require('axios');
async function connectWithQR(instanceId) {
const API_TOKEN = 'YOUR_API_TOKEN';
const BASE_URL = 'https://zapgo.com.co';
try {
// Generar código QR
const response = await axios.post(
`${BASE_URL}/api/whatsapp/connect-qr`,
{ instance_id: instanceId },
{ headers: { 'Authorization': `Bearer ${API_TOKEN}` } }
);
if (response.data.status === 'qr_ready') {
console.log('Escanea el QR:');
console.log(response.data.qr_code); // Base64 del QR
// Verificar estado cada 3 segundos
const checkStatus = setInterval(async () => {
const status = await axios.get(
`${BASE_URL}/api/whatsapp/connect-qr?instance_id=${instanceId}`,
{ headers: { 'Authorization': `Bearer ${API_TOKEN}` } }
);
if (status.data.status === 'connected') {
console.log('Conectado!');
clearInterval(checkStatus);
}
}, 3000);
} else if (response.data.status === 'already_connected') {
console.log('Ya está conectada. Desconéctala primero.');
}
} catch (error) {
console.error('Error:', error.response?.data || error.message);
}
}
// Uso
connectWithQR(1);<?php
function connectWithQR($instanceId) {
$url = 'https://zapgo.com.co/api/whatsapp/connect-qr';
$data = json_encode(['instance_id' => $instanceId]);
$options = [
'http' => [
'method' => 'POST',
'header' => "Authorization: Bearer YOUR_API_TOKEN\r\n" .
"Content-Type: application/json\r\n",
'content' => $data
]
];
$context = stream_context_create($options);
$result = file_get_contents($url, false, $context);
if ($result !== FALSE) {
$response = json_decode($result, true);
if ($response['status'] === 'qr_ready') {
echo "Escanea el QR:\n";
echo "QR Base64: " . $response['qr_code'] . "\n";
// Mostrar en HTML
echo '<img src="' . $response['qr_code'] . '" alt="QR Code" />';
} elseif ($response['status'] === 'already_connected') {
echo "Ya está conectada. Desconéctala primero.\n";
}
} else {
echo "Error al generar QR\n";
}
}
// Uso
connectWithQR('1');
?>Enviar mensaje:
curl -X POST https://zapgo.com.co/api/send-message \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{"instance_id":"1","to":"573001234567","message":"Hola"}'Crear Lead desde Formulario:
curl -X POST https://zapgo.com.co/api/leads/create-from-form \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{"name":"Juan Pérez","email":"juan@example.com","phone":"573001234567","message":"Quiero información"}'Operación exitosa
Parámetros inválidos o instancia conectada
Token API inválido o faltante
Función requiere suscripción Premium
Recurso no encontrado
Código QR expiró sin ser escaneado
Límite de mensajes alcanzado
Error interno del servidor
Nunca expongas tu token en el frontend. Úsalo solo en backend
Implementa retry logic y maneja códigos HTTP apropiadamente
Desconecta la instancia antes de generar un nuevo QR. Error 400 si ya está conectada
Verifica estado cada 3 segundos. El QR expira después de 3 minutos
Valida números antes de enviar para evitar desperdiciar mensajes
Webhooks solo disponibles en plan Premium para notificaciones en tiempo real