Mensajes Programados
Administra los mensajes creados con delay o scheduleTime mediante POST /v1/messages y POST /v1/messages/template . El messageId de la respuesta HTTP 202 basta para consultar, reprogramar o cancelar un envío.
Resumen de endpoints
| Operación | Endpoint | Uso |
|---|---|---|
| Listar | GET /v1/messages/scheduled | Filtra mensajes y recorre resultados paginados. |
| Obtener | GET /v1/messages/scheduled/{messageId} | Consulta un mensaje por su ID público. |
| Reprogramar | PATCH /v1/messages/scheduled/{messageId} | Cambia la fecha o el retraso antes del procesamiento. |
| Cancelar | DELETE /v1/messages/scheduled/{messageId} | Cancela un envío antes del procesamiento. |
Las respuestas públicas nunca exponen el payload completo del mensaje ni identificadores internos
como taskId. Tampoco necesitas campaignId, runId ni otro identificador interno para administrar
el envío.
Crear un mensaje programado
Estos endpoints administran mensajes ya creados. Para crear uno, consulta Enviar Mensaje Personalizado o Enviar Plantilla y agrega exactamente uno de estos campos:
delay: de3000ms a86400000ms (24 horas).scheduleTime: fecha futura en ISO 8601, como máximo 30 días después de la solicitud.
Los campos son mutuamente exclusivos. La respuesta HTTP 202 incluye el messageId que usarás en
los endpoints de esta página.
Recurso público
Las operaciones de obtener, reprogramar y cancelar devuelven este recurso. Al listar, cada elemento
de messages tiene la misma forma:
{
"messageId": "msg_01JQ91AB7C4D8E2F6G0H",
"kind": "template",
"status": "scheduled",
"channelId": "wb-12345",
"conversationId": "5215512345678",
"campaignId": "api",
"messageType": null,
"templateName": "recordatorio_cita",
"preview": "Hola Ana, te recordamos tu cita...",
"phoneNumber": "5215512345678",
"name": "Ana López",
"executeAt": "2026-10-15T15:45:00.000Z",
"createdAt": "2026-09-20T20:00:00.000Z",
"updatedAt": "2026-09-20T20:00:00.000Z",
"cancelledAt": null,
"sentAt": null,
"failedAt": null,
"error": null,
"reschedulable": true
} | Campo | Tipo | Descripción |
|---|---|---|
messageId | string | Identificador público y estable del mensaje. |
kind | enum | service para mensajes de servicio o template para plantillas. |
status | enum | creating, delayed, scheduled, processing, sent, cancelled o failed. |
channelId | string | Canal desde el que se enviará o se envió el mensaje. |
conversationId | string | null | Conversación o destinatario asociado, cuando está disponible. |
campaignId | string | null | Campaña de atribución, cuando existe. No se usa para administrar el mensaje. |
messageType | string | null | Tipo del mensaje de servicio, por ejemplo text o image. |
templateName | string | null | Nombre de la plantilla cuando kind es template. |
preview | string | null | Vista previa segura del contenido. No es el payload completo. |
phoneNumber | string | null | Teléfono del destinatario, cuando está disponible. |
name | string | null | Nombre del destinatario, cuando está disponible. |
executeAt | string | Fecha de ejecución normalizada a ISO 8601 UTC. |
createdAt | string | Fecha de creación en ISO 8601 UTC. |
updatedAt | string | Fecha de la última actualización en ISO 8601 UTC. |
cancelledAt | string | null | Fecha de cancelación. |
sentAt | string | null | Fecha de envío exitoso. |
failedAt | string | null | Fecha del fallo definitivo. |
error | string | null | Información pública del fallo, si el estado es failed. |
reschedulable | boolean | Indica si el mensaje todavía acepta PATCH. |
Listar Mensajes Programados
GET https://api.platica.mx/v1/messages/scheduled Sin filtros, devuelve los mensajes activos con estado creating, delayed, scheduled o processing.
Parámetros de consulta
| Parámetro | Tipo | Default | Descripción |
|---|---|---|---|
workspace | string | — | Workspace a consultar. Solo es obligatorio cuando la API key tiene acceso a varios workspaces. |
status | string CSV | creating,delayed,scheduled,processing | Uno o varios estados: creating, delayed, scheduled, processing, sent, cancelled, failed. |
kind | enum | — | Filtra por service o template. |
campaignId | string | — | Filtra por campaña. Es solo un filtro; no se requiere para administrar un mensaje por messageId. |
from | string ISO 8601 | — | Inicio del rango de executeAt. |
to | string ISO 8601 | — | Fin del rango de executeAt. |
limit | integer | 50 | Resultados por página, de 1 a 200. |
pageToken | string | — | Token opaco devuelto por la página anterior. |
Ejemplo con filtros:
curl "https://api.platica.mx/v1/messages/scheduled?status=scheduled,processing&kind=template&from=2026-10-01T00%3A00%3A00Z&to=2026-11-01T00%3A00%3A00Z&limit=50" \
-H "Authorization: Bearer pl_key_..." Respuesta
| Campo | Descripción |
|---|---|
messages | Recursos públicos de la página actual. |
count | Cantidad de elementos en messages. |
nextPageToken | Token para solicitar la página siguiente. Se omite en la última página. |
Paginación
count indica cuántos elementos incluye la página actual. Cuando existe otra página, la respuesta
incluye nextPageToken. Envíalo sin modificar como pageToken y conserva los mismos filtros:
curl "https://api.platica.mx/v1/messages/scheduled?status=scheduled,processing&kind=template&limit=50&pageToken=eyJleGVjdXRlQXQiOiIyMDI2LTEwLTE1VDE1OjQ1OjAwLjAwMFoifQ" \
-H "Authorization: Bearer pl_key_..." Cuando nextPageToken no está presente, llegaste a la última página. No interpretes ni construyas
tokens manualmente.
Obtener Mensaje Programado
GET https://api.platica.mx/v1/messages/scheduled/{messageId} Parámetros del recurso
Los mismos parámetros aplican a las operaciones de obtener, reprogramar y cancelar.
| Parámetro | Ubicación | Tipo | Descripción | Requerido |
|---|---|---|---|---|
messageId | path | string | ID devuelto al crear el mensaje. | ✓ |
workspace | query | string | Workspace del mensaje. Solo es obligatorio para API keys multi-workspace. | — |
curl "https://api.platica.mx/v1/messages/scheduled/msg_01JQ91AB7C4D8E2F6G0H" \
-H "Authorization: Bearer pl_key_..." Respuesta
Devuelve el recurso público correspondiente a messageId.
Reprogramar Mensaje Programado
PATCH https://api.platica.mx/v1/messages/scheduled/{messageId} Envía exactamente uno de scheduleTime o delay. No necesitas enviar campaignId, runId ni el
payload original.
Cuerpo de la solicitud
Reprogramar a una fecha absoluta:
{
"scheduleTime": "2026-10-16T10:30:00-06:00"
} O moverlo con un retraso relativo al momento de la solicitud:
{
"delay": 3600000
} | Campo | Tipo | Descripción | Requerido |
|---|---|---|---|
scheduleTime | string ISO 8601 | Nueva fecha futura, como máximo 30 días después de la solicitud. No se combina con delay. | ✓¹ |
delay | integer | Nuevo retraso de 3000 a 86400000 ms (24 horas). No se combina con scheduleTime. | ✓¹ |
¹ Envía exactamente uno.
Respuesta
Devuelve el recurso público actualizado. Con scheduleTime, el estado queda scheduled; con delay, queda delayed. Si reschedulable es false, no intentes reprogramarlo.
Cancelar Mensaje Programado
DELETE https://api.platica.mx/v1/messages/scheduled/{messageId} Cancela el envío y devuelve el recurso con estado cancelled:
curl -X DELETE "https://api.platica.mx/v1/messages/scheduled/msg_01JQ91AB7C4D8E2F6G0H" \
-H "Authorization: Bearer pl_key_..." Respuesta
Devuelve el recurso público con status: "cancelled", cancelledAt y reschedulable: false. La cancelación es idempotente: repetir DELETE sobre un mensaje ya cancelado
devuelve el mismo recurso y no genera otro efecto.
Estados y transiciones
creatingdura normalmente solo unos instantes mientras se registra la tarea.delayedyscheduledrepresentan el mismo estado pendiente.PATCHpermite cambiar entre ambos sin alterar el resto del flujo.- Mientras está pendiente,
DELETElo mueve acancelled. processingsignifica que la ejecución ya empezó; no se puede reprogramar ni cancelar.sent,cancelledyfailedson estados finales.- La ventana de servicio, el estado de bloqueo del contacto y las reglas del canal se vuelven a
validar al ejecutar. Un mensaje aceptado puede terminar en
failed.
Fechas y zonas horarias
- Envía
scheduleTime,fromytoen formato ISO 8601. - Incluye
Zo un offset como-06:00para evitar ambigüedad. Cuando omites la zona,scheduleTimeusa la hora de México. executeAt,createdAt,updatedAt,cancelledAt,sentAtyfailedAtsiempre se devuelven normalizados a UTC.delayse calcula desde el momento en que la API acepta la solicitud.
Idempotencia
Los GET son seguros e idempotentes. Un PATCH con delay es relativo al momento de cada solicitud,
así que no lo repitas automáticamente después de una respuesta incierta: consulta primero el recurso
por messageId. Ante un 409, vuelve a consultar el mensaje y decide con base en status y reschedulable.
Consulta Errores de la API para conocer el formato y los códigos comunes.
La programación de turnos de la API de Chat usa scheduleAt y pertenece
a un flujo distinto. Estos endpoints solo administran mensajes creados con POST /v1/messages o POST /v1/messages/template.