Peach
  1. webhooks
Peach
  • messaging
    • Send a pre-approved template message
      POST
    • Poll template message status
      GET
    • Launch a broadcast
      POST
    • Poll broadcast status
      GET
    • Poll template messages status
      GET
  • contacts
    • Create a contact on Peach
      POST
  • orders
    • Create an order
      POST
    • Find order by ID
      GET
    • Create a refund for an order
      POST
  • medias
    • List available medias
      GET
    • Add a media
      POST
    • Remove a media
      DELETE
  • webhooks
    • Order status webhooks
    • Flow execution status webhooks
    • Message delivery status webhooks
    • AI flow execution status webhooks
  1. webhooks

Message delivery status webhooks

Peach can trigger various webhooks as part of Template messages as well as interactive messages' delivery life-cycle, if those have been configured from within Peach.
1.
message_delivery.sent - this is triggered when the message has been sent to the contact.
The webhook payload:
when the message is a Template message:
{
  "type": "message_delivery.sent",
  "data": {
    "message": {
      "id": "cmsg_1234abcd",
      "status": "sent",
      "type": "template_message",
      "reason": null,
      "created_at": "2025-05-22T11:25:06.239Z",
      "updated_at": "2025-05-22T11:25:06.239Z"
    },
    "contact": {
      "id": 1,
      "account_id": 1,
      "name": "John Doe",
      "phone_number": "+919988776655",
      "first_name": "John",
      "last_name": "Doe",
      "country_code": "91",
      "language": null,
      "email": "johndoe@example.com"
    },
    "event": null
  }
}
when the message is an interactive message:
{
  "type": "message_delivery.sent",
  "data": {
    "message": {
      "id": 1,
      "status": "sent",
      "type": "message",
      "reason": null,
      "created_at": "2025-05-03T02:17:07.420Z",
      "updated_at": "2025-05-03T02:17:07.420Z"
    },
    "contact": {
      "id": 1,
      "account_id": 1,
      "name": "John Doe",
      "phone_number": "+919988776655",
      "first_name": "John",
      "last_name": "Doe",
      "country_code": "91",
      "language": null,
      "email": "johndoe@example.com"
    },
    "event": null
  }
}
2.
message_delivery.delivered - this is triggered when the message has been delivered to the contact.
The webhook payload:
when the message is a Template message:
{
  "type": "message_delivery.sent",
  "data": {
    "message": {
      "id": "cmsg_1234abcd",
      "status": "delivered",
      "type": "template_message",
      "reason": null,
      "created_at": "2025-05-22T11:25:06.239Z",
      "updated_at": "2025-05-22T11:25:06.239Z"
    },
    "contact": {
      "id": 1,
      "account_id": 1,
      "name": "John Doe",
      "phone_number": "+919988776655",
      "first_name": "John",
      "last_name": "Doe",
      "country_code": "91",
      "language": null,
      "email": "johndoe@example.com"
    },
    "event": null
  }
}
when the message is an interactive message:
{
  "type": "message_delivery.sent",
  "data": {
    "message": {
      "id": 1,
      "status": "delivered",
      "type": "message",
      "reason": null,
      "created_at": "2025-05-03T02:17:07.420Z",
      "updated_at": "2025-05-03T02:17:07.420Z"
    },
    "contact": {
      "id": 1,
      "account_id": 1,
      "name": "John Doe",
      "phone_number": "+919988776655",
      "first_name": "John",
      "last_name": "Doe",
      "country_code": "91",
      "language": null,
      "email": "johndoe@example.com"
    },
    "event": null
  }
}
3.
message_delivery.failed - this is triggered when the message could not be sent to the contact.
The webhook payload:
when the message is a Template message:
{
  "type": "message_delivery.sent",
  "data": {
    "message": {
      "id": "cmsg_1234abcd",
      "status": "failed",
      "type": "template_message",
      "reason": "failure reason",
      "created_at": "2025-05-22T11:25:06.239Z",
      "updated_at": "2025-05-22T11:25:06.239Z"
    },
    "contact": {
      "id": 1,
      "account_id": 1,
      "name": "John Doe",
      "phone_number": "+919988776655",
      "first_name": "John",
      "last_name": "Doe",
      "country_code": "91",
      "language": null,
      "email": "johndoe@example.com"
    },
    "event": null
  }
}
when the message is an interactive message:
{
  "type": "message_delivery.sent",
  "data": {
    "message": {
      "id": 1,
      "status": "failed",
      "type": "message",
      "reason": "failure reason",
      "created_at": "2025-05-03T02:17:07.420Z",
      "updated_at": "2025-05-03T02:17:07.420Z"
    },
    "contact": {
      "id": 1,
      "account_id": 1,
      "name": "John Doe",
      "phone_number": "+919988776655",
      "first_name": "John",
      "last_name": "Doe",
      "country_code": "91",
      "language": null,
      "email": "johndoe@example.com"
    },
    "event": null
  }
}
4.
message_delivery.read - this is triggered when the message was read by the contact.
The webhook payload:
when the message is a Template message:
{
  "type": "message_delivery.sent",
  "data": {
    "message": {
      "id": "cmsg_1234abcd",
      "status": "read",
      "type": "template_message",
      "reason": null,
      "created_at": "2025-05-22T11:25:06.239Z",
      "updated_at": "2025-05-22T11:25:06.239Z"
    },
    "contact": {
      "id": 1,
      "account_id": 1,
      "name": "John Doe",
      "phone_number": "+919988776655",
      "first_name": "John",
      "last_name": "Doe",
      "country_code": "91",
      "language": null,
      "email": "johndoe@example.com"
    },
    "event": null
  }
}
when the message is an interactive message:
{
  "type": "message_delivery.sent",
  "data": {
    "message": {
      "id": 1,
      "status": "read",
      "type": "message",
      "reason": null,
      "created_at": "2025-05-03T02:17:07.420Z",
      "updated_at": "2025-05-03T02:17:07.420Z"
    },
    "contact": {
      "id": 1,
      "account_id": 1,
      "name": "John Doe",
      "phone_number": "+919988776655",
      "first_name": "John",
      "last_name": "Doe",
      "country_code": "91",
      "language": null,
      "email": "johndoe@example.com"
    },
    "event": null
  }
}
Previous
Flow execution status webhooks
Next
AI flow execution status webhooks
Built with