Browse documentation

Notification endpoint

POST /api/webhooks/ingest — full reference with request and response examples.

POST /api/webhooks/ingest?type=<event_type>

Sends one WhatsApp notification to one recipient using an approved UTILITY template.

Headers

HeaderRequiredValue
x-api-keyYesYour workspace key
Content-TypeYesapplication/json

Query parameters

ParameterRequiredDescription
typeYesappointment, delivery or status-update. status_update is also accepted
businessNoA group id, when one workspace runs several businesses. Omit for the workspace default
dry_runNo1 to validate only. Nothing is queued or sent
test_sendNo1 to queue the composed text as a free-form message without a template

Body fields

The body is JSON. It must provide `recipient_phone` plus one value for each blank in the template chosen for this event on its Notification page. Any approved UTILITY template works with any event type.

If you saved a field mapping, MsgOrb reads each value from the path you gave it. A value the mapping leaves empty is taken from a top-level field with the same name as the blank, and then from the backup value set on the Notification page, if any (never for recipient_phone). So a body that already uses the template's names works as sent. Line breaks and tabs inside values are turned into spaces, because Meta rejects them.

The starter templates each page can create use the names below, so with a starter template these are the fields to send.

type=appointment

FieldRequired
recipient_phoneYes
client_nameYes
appointment_timeYes
service_typeYes

type=delivery

FieldRequired
recipient_phoneYes
customer_nameYes
order_idYes
delivery_statusYes
tracking_urlYes

type=status-update

FieldRequired
recipient_phoneYes
subject_nameYes
current_statusYes

recipient_phone must be full international format with the country code. MsgOrb rejects anything it cannot resolve unambiguously rather than guessing a country.

Request example

curl -X POST \
  "https://www.msgorb.com/api/webhooks/ingest?type=delivery" \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "recipient_phone": "+12145550123",
    "customer_name": "Jane Doe",
    "order_id": "A-10423",
    "delivery_status": "Out for delivery",
    "tracking_url": "https://track.example.com/A-10423"
  }'

Success response

{
  "success": true,
  "message": "Notification received and queued successfully",
  "event_type": "delivery"
}

Status 202. The message is queued; the dispatcher sends it within moments and the outcome appears on Delivery and Queue Health.

Error response

{
  "success": false,
  "error": "No template configured for 'delivery'. Open Notifications, and choose an approved UTILITY template to send."
}

Every status code is listed in Notification errors.

Behaviour worth knowing

  • MsgOrb stores the most recent payload it receives per event type and uses it to suggest mappings in the field mapper. Send one real event early, even if it is rejected.
  • Recipients who replied STOP are refused with 403. This is enforced, not advisory.
  • Every call is written to the Connection Logs on the matching Notification page with its real status.