curl --request POST \
--url https://api.wppfy.com/send/status \
--header 'Content-Type: application/json' \
--header 'token: <api-key>' \
--data '
{
"type": "text",
"text": "Novidades chegando!"
}
'{
"Id": "ABCD1234",
"content": {},
"messageTimestamp": 1672531200000,
"status": "Pending",
"debug": {
"status_privacy_type": "contacts",
"audience_recipient_count": 245,
"total_contacts_in_store": 300,
"contacts_with_full_name": 245,
"contacts_with_push_name_only": 32,
"contacts_with_business_name_only": 23,
"used_default_privacy_fallback": false,
"privacy_lookup_error": "privacy unavailable",
"explicit_recipients": true,
"requested_recipient_count": 25,
"resolved_recipient_count": 20,
"discarded_recipient_count": 5,
"discarded_recipients": [
{
"input": "144637553594388@lid",
"reason": "lid_unresolved"
}
],
"max_recipients": 100,
"selected_recipient_count": 100,
"partial_send": true
}
}{
"error": "Fuente inválida",
"debug": {}
}{
"error": "failed to determine status audience: privacy unavailable"
}Enviar estado (stories)
Envía un estado de WhatsApp con soporte para texto, imagen, video y audio.
Este endpoint tiene 4 modos de uso:
- envío normal: omita
recipients,max_recipientsygroup - envío explícito: indique
recipientspara enviar solo a números específicos; la API aprovecha los válidos y descarta los inválidos con el motivo endebug - envío parcial: indique
max_recipientspara limitar la audiencia o aplicar un límite de seguridad sobrerecipients - estado de grupo: indique
groupcon el JID del grupo (@g.us)
Observación importante sobre recipients
Cuando se indica recipients, la API:
- acepta números en formato WhatsApp, JIDs
@s.whatsapp.nety JIDs@lid - cuando recibe
@lid, intenta resolver ese identificador al PN (@s.whatsapp.net) usando los vínculos conocidos por la instancia - si el
@lidno puede resolverse a un PN, ese elemento se descarta con el motivolid_unresolved - valida si el destinatario existe en WhatsApp usando el mismo flujo de verificación del envío normal, en lotes para evitar una llamada remota por destinatario
- cruza los destinatarios verificados con la audiencia permitida por la privacidad del estado, aceptando equivalencia PN/LID cuando ese vínculo es conocido
- los destinatarios descartados aparecen en
debug.discarded_recipients, con motivos comoinvalid_format,lid_unresolved,not_on_whatsapp,outside_status_audienceyduplicate - la solicitud solo devuelve
400cuando no queda ningún destinatario válido para el envío
Observación importante sobre max_recipients
El campo max_recipients se agregó como mitigación operativa.
Ya hemos observado casos en los que WhatsApp bloquea inmediatamente el envío de estados cuando la audiencia es muy grande
(por ejemplo, agendas con miles de contactos, como ~3.000).
La causa exacta aún no está totalmente clara, por lo que se recomienda comenzar con límites menores y aumentarlos gradualmente.
Estado de grupo
Con group, el estado se publica en el grupo y aparece para los miembros en la pestaña Estados, en lugar del estado de la cuenta. La cuenta debe participar en el grupo. Aplica a texto, imagen y video: el audio (audio, ptt y myaudio) no funciona en el estado de grupo y devuelve 400.
- no se combina con
recipientsni conmax_recipients(devuelve400) - la respuesta incluye
Id,content,messageTimestampystatus, sindebug
Tipos soportados
text: texto con color de fondo y fuenteimage: imagen con leyenda opcionalvideo: video con leyenda opcionalaudio: audio normalmyaudio: audio enviado como vozptt: audio enviado como voz
Colores de fondo
Indique un valor de 1 a 19. La API convierte este índice al color usado por WhatsApp.
1: amarillo verdoso suave2: amarillo pálido3: amarillo anaranjado vibrante4: verde vibrante5: verde musgo6: verde claro7: azul piscina8: azul intenso9: azul claro grisáceo10: lila claro11: lila cálido12: púrpura azulado13: magenta profundo14: rosa suave15: salmón rosado16: marrón claro17: gris claro azulado18: gris medio19: gris profundo predeterminado
Ejemplo rápido:
7: azul piscina13: magenta profundo19: gris profundo (predeterminado)
Fuentes válidas para type=text
Valores aceptados actualmente: 0, 1, 2, 6, 7, 8, 9, 10.
Límites
text: máximo de 656 caracteresmax_recipients: no puede ser negativorecipients: acepta números, JIDs@s.whatsapp.nety JIDs@lid@lidsolo se incluye en el envío cuando puede resolverse localmente a un PN válido; de lo contrario, se descarta- para tipos de medios,
filees obligatorio group: JID del grupo (@g.us)
Ejemplo de envío explícito:
{
"type": "text",
"text": "Novidades chegando!",
"recipients": [
"5511999999999",
"5511888888888@s.whatsapp.net"
]
}
Ejemplo de envío parcial:
{
"type": "text",
"text": "Novidades chegando!",
"background_color": 7,
"font": 1,
"max_recipients": 100
}
Ejemplo de estado de grupo:
{
"type": "image",
"file": "https://exemplo.com/status.jpg",
"text": "Aviso para o grupo",
"group": "120363123456789012@g.us"
}
curl --request POST \
--url https://api.wppfy.com/send/status \
--header 'Content-Type: application/json' \
--header 'token: <api-key>' \
--data '
{
"type": "text",
"text": "Novidades chegando!"
}
'{
"Id": "ABCD1234",
"content": {},
"messageTimestamp": 1672531200000,
"status": "Pending",
"debug": {
"status_privacy_type": "contacts",
"audience_recipient_count": 245,
"total_contacts_in_store": 300,
"contacts_with_full_name": 245,
"contacts_with_push_name_only": 32,
"contacts_with_business_name_only": 23,
"used_default_privacy_fallback": false,
"privacy_lookup_error": "privacy unavailable",
"explicit_recipients": true,
"requested_recipient_count": 25,
"resolved_recipient_count": 20,
"discarded_recipient_count": 5,
"discarded_recipients": [
{
"input": "144637553594388@lid",
"reason": "lid_unresolved"
}
],
"max_recipients": 100,
"selected_recipient_count": 100,
"partial_send": true
}
}{
"error": "Fuente inválida",
"debug": {}
}{
"error": "failed to determine status audience: privacy unavailable"
}Autorizaciones
Cuerpo
Tipo del estado.
text, image, video, audio, myaudio, ptt "text"
Texto principal o leyenda.
"¡Novedades en camino!"
Índice del color de fondo para estado de texto.
1 <= x <= 197
Fuente aceptada para type=text.
0, 1, 2, 6, 7, 8, 9, 10 1
URL o base64 del archivo multimedia.
"https://example.com/video.mp4"
Campo aceptado en el payload; la API genera la miniatura automáticamente cuando es necesario.
"https://example.com/thumb.jpg"
MIME type del archivo, cuando sea necesario.
"video/mp4"
Lista explícita de destinatarios. Acepta números en formato de WhatsApp, JIDs @s.whatsapp.net y JIDs @lid. La API valida elemento por elemento, descarta los inválidos con el motivo en debug y envía al subconjunto válido restante. Las entradas @lid dependen de una resolución conocida a PN.
[
"5511999999999",
"5511888888888@s.whatsapp.net"
]
Limita el envío a un subconjunto determinístico de la audiencia. Cuando se informa recipients, funciona como límite de seguridad sobre la lista explícita ya validada.
x >= 0100
JID del grupo (@g.us). Publica el estado en el grupo, para los miembros, en lugar del estado de la cuenta. No se combina con recipients ni max_recipients. Solo texto, imagen y video: el audio devuelve 400.
"120363123456789012@g.us"
Respuesta
Estado enviado con éxito
ID del mensaje cuando hay un envío real.
"ABCD1234"
Contenido procesado del mensaje cuando hay un envío real.
Timestamp en milisegundos cuando hay un envío real.
1672531200000
Estado del envío cuando hay un envío real.
"Pending"
Métricas agregadas de la audiencia y de la selección aplicada.
Show child attributes
Show child attributes
