Skip to main content

Webhook Delivery Problems

Symptom: Webhook not receiving events

  1. Confirm the correct event types are selected (Order Status Change, Order Item Status Change, Order Item Delivered, QR Code Scans).
  2. Confirm the endpoint URL is publicly accessible - webhooks cannot reach localhost or internal network addresses.
  3. Use the Send Test feature to send a test event to your endpoint.
  4. Confirm the webhook is registered on the correct account/subaccount - events from a subaccount only fire that subaccount's webhooks, not the parent's.

Symptom: Receiving duplicate events

thanks.io delivers at-least-once. Return a 2xx response as quickly as possible, and make your consumer idempotent - store the event ID and skip processing if you've already handled it.


Symptom: Payload missing expected fields

  1. Review the full payload structure for each event type at docs.thanks.io.
  2. Log the raw incoming payload and compare to the documented schema.
  3. Use the Send Test dashboard feature to capture a sample payload.

Symptom: Endpoint returning 4xx/5xx and events not retrying

  1. Fix the underlying error in your endpoint. Check your server logs.
  2. 400 Bad Request usually means a parser mismatch - verify your endpoint parses application/json.
  3. 401/403 means your endpoint is enforcing auth - remove it for the webhook path.
  4. Once your endpoint is healthy, send a test event to confirm delivery is restored.

Symptom: Wrong account events being received

Webhooks are scoped per account/subaccount. To receive events from both parent and subaccounts at the same endpoint, create a separate webhook subscription in each account context pointing to the same URL.


Symptom: Birthday or thank-you campaign webhook not firing

  1. Confirm the campaign is enabled and actively sending. Go to Automated Campaigns and check that the Status column shows the automation as ON.
  2. Confirm the correct webhook event type is subscribed: Order Item Status Change (fires on each piece sent) or Order Item Delivered (fires on delivery). Birthday/holiday campaigns create orders just like any other campaign, so the same webhook events fire.
  3. Confirm the webhook is registered on the same account or subaccount as the campaign. Subaccount webhooks do not fire on the parent account's webhook subscriptions.
  4. Check your webhook endpoint with Send Test to confirm delivery is working end to end.
  5. If the campaign has never fired at all, check Campaign Not Triggering first.