curl --request POST \
--url https://api.notifique.dev/v1/whatsapp/messages \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"to": [
"5511999999999"
],
"type": "text",
"payload": {
"message": "Olá!"
},
"from": "clxx..."
}
'{
"success": true,
"data": {
"messageIds": [
"clxx1...",
"clxx2..."
],
"count": 2,
"status": "QUEUED",
"scheduledAt": null,
"sandbox": false,
"localization": {
"appliedAiLocales": [
"en"
],
"fallbackLocales": [
"pt"
],
"aiTranslatedRecipientCount": 1
}
}
}{
"success": false,
"error": "Bad Request",
"message": "Validation failed",
"details": [
{
"field": "payload.message",
"message": "text type requires payload.message"
}
],
"code": "BAD_REQUEST"
}{
"success": false,
"error": "Bad Request",
"code": "VALIDATION_ERROR",
"message": "Campo inválido ou ausente."
}{
"success": false,
"error": "Bad Request",
"code": "VALIDATION_ERROR",
"message": "Campo inválido ou ausente."
}{
"success": false,
"error": "Bad Request",
"code": "VALIDATION_ERROR",
"message": "Campo inválido ou ausente."
}{
"success": false,
"error": "Bad Request",
"code": "VALIDATION_ERROR",
"message": "Campo inválido ou ausente."
}{
"success": false,
"error": "Too Many Requests",
"code": "WARMUP_DAILY_LIMIT",
"message": "This instance is in the warm-up period (first 3 days). Daily send limit is 20. Try again tomorrow or wait until warm-up ends."
}{
"success": false,
"error": "Service Unavailable",
"message": "Failed to enqueue message",
"code": "SERVICE_UNAVAILABLE"
}Send WhatsApp message
Send a WhatsApp message to one or more numbers. Canonical contract: type + payload (text, media, buttons, list, carousel, or type: template with payload.templateId). Use from to select instance or pool. On unofficial, type=buttons and type=carousel are also available; they may stop working at any time.
curl --request POST \
--url https://api.notifique.dev/v1/whatsapp/messages \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"to": [
"5511999999999"
],
"type": "text",
"payload": {
"message": "Olá!"
},
"from": "clxx..."
}
'{
"success": true,
"data": {
"messageIds": [
"clxx1...",
"clxx2..."
],
"count": 2,
"status": "QUEUED",
"scheduledAt": null,
"sandbox": false,
"localization": {
"appliedAiLocales": [
"en"
],
"fallbackLocales": [
"pt"
],
"aiTranslatedRecipientCount": 1
}
}
}{
"success": false,
"error": "Bad Request",
"message": "Validation failed",
"details": [
{
"field": "payload.message",
"message": "text type requires payload.message"
}
],
"code": "BAD_REQUEST"
}{
"success": false,
"error": "Bad Request",
"code": "VALIDATION_ERROR",
"message": "Campo inválido ou ausente."
}{
"success": false,
"error": "Bad Request",
"code": "VALIDATION_ERROR",
"message": "Campo inválido ou ausente."
}{
"success": false,
"error": "Bad Request",
"code": "VALIDATION_ERROR",
"message": "Campo inválido ou ausente."
}{
"success": false,
"error": "Bad Request",
"code": "VALIDATION_ERROR",
"message": "Campo inválido ou ausente."
}{
"success": false,
"error": "Too Many Requests",
"code": "WARMUP_DAILY_LIMIT",
"message": "This instance is in the warm-up period (first 3 days). Daily send limit is 20. Try again tomorrow or wait until warm-up ends."
}{
"success": false,
"error": "Service Unavailable",
"message": "Failed to enqueue message",
"code": "SERVICE_UNAVAILABLE"
}Authorizations
API Key no header Authorization. Exemplo: Authorization: Bearer sk_live_xxxxx
Headers
Chave única para idempotência. Alternativa: x-idempotency-key.
Body
Destinatários: números com DDI (ex.: 5511999999999) ou JID de grupo (ex.: 120363295648424210@g.us). Uma message por item.
1 - 500 elementsMessage type. Use template with payload.templateId for workspace templates (official or unofficial).
text, image, video, audio, document, location, contact, buttons, list, carousel, template Content per type. text: message. image|video|audio|document: mediaUrl, fileName, mimetype (required); optional caption. location: latitude, longitude, name, address. contact: contact or contactId. buttons: title, description, buttons (1–3; reply | copy | url | call | pix). list: title, description, buttonText, listSections. carousel: cards (1–10). template: templateId, variables, headerMediaUrl, carouselCardMediaUrls.
Show child attributes
Show child attributes
Remetente WhatsApp: id da instância, id ou nome do pool, telefone E.164 ou nome da instância.
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Metadados por envio, mesclados em Message.metadata (pares string→string). Respeite limites de payload.
Show child attributes
Show child attributes
Tradução por destinatário (manual ou IA). Campos traduzíveis: payload.message, payload.caption.
Show child attributes
Show child attributes
Mapa locale → string ou objeto com chaves por campo (message, caption, …). Usado com localization.mode=manual.
Variáveis para substituir placeholders {{chave}} em payload.message, payload.caption e options.autoReplyText.
Show child attributes
Show child attributes
Response
Message(ns) aceita(s). Enfileirada(s) ou agendada(s). Response padronizada com envelope success/data; status em MAIÚSCULO (QUEUED, SCHEDULED).
true
Conteúdo de data na resposta de envio.
Show child attributes
Show child attributes
{
"messageIds": ["clxx..."],
"status": "QUEUED",
"scheduledAt": "2025-02-10T14:00:00.000Z",
"count": 1,
"sandbox": true,
"localization": {
"appliedAiLocales": ["string"],
"fallbackLocales": ["string"],
"aiTranslatedRecipientCount": 1
}
}
Was this page helpful?

