Browse documentation

Testing a notification

Two query flags that let you exercise the endpoint before real traffic hits it.

Both flags skip the approved-template requirement and nothing else. Authentication, business ownership, field mapping, required fields, phone validation and opt-out handling all still apply.

Validate only

POST /api/webhooks/ingest?type=appointment&dry_run=1

Nothing is queued and Meta is not contacted. The response returns HTTP 200 with the resolved payload after mapping, the message MsgOrb composed, and a template report explaining exactly why a live call would or would not succeed:

{
  "success": true,
  "mode": "dry_run",
  "recipient_phone": "+15551234567",
  "resolved_payload": { "client_name": "Jane Doe" },
  "composed_message": "Hello Jane Doe, this is a reminder ...",
  "template": {
    "configured": true,
    "approved": false,
    "missing_variables": [],
    "note": "Status is \"pending\", so a live call would be rejected with 409 until Meta approves it."
  }
}

Send for real, without a template

POST /api/webhooks/ingest?type=appointment&test_send=1

This queues the composed text as a free-form message on the normal pipeline and returns HTTP 202. It is a real send from your connected number.

A free-form message only reaches someone whose 24-hour window is open — they must have messaged your business number recently. Otherwise Meta rejects it with 131047 and the Delivery page shows the reason. test_send exists so you can prove the integration works while a template is still awaiting approval. It is not a substitute for one in production.

Reading the result

The Connection Logs table at the bottom of each Notification page records the real outcome of every call, including rejections. Green is 2xx, orange is 4xx, red is 5xx. Delivery and Queue Health then shows whether the queued message actually reached the recipient.