Skip to main content
This page is the authoritative payload reference for every webhook Galantis registers with Shopify and every webhook event it receives from Meta. It covers the topic, the expected payload structure, and what the webhook drives in Galantis. For the processing behavior and downstream effects of each webhook, see Integrations — Shopify Webhooks and Integrations — Meta Webhooks. This page focuses on payload structure for developer reference.

Security

Shopify webhooks — All incoming Shopify webhooks are validated via HMAC signature verification using the X-Shopify-Hmac-Sha256 header before processing. Requests with invalid or missing signatures are rejected with a 401 response and never reach the handler. Meta webhooks — All incoming Meta webhooks are validated via signature verification using the X-Hub-Signature-256 header before processing. Invalid signatures are rejected. Both verifications use the app secret for their respective platform. Webhook payloads are never processed without a valid signature.

Shopify webhooks

Customer webhooks

customers/create

customers/update Same structure as customers/create. All fields are included in the payload — Galantis diffs the incoming data against the stored record to identify changes.
customers/delete
Only the customer ID is included. Galantis uses the ID to locate and remove the corresponding contact record.
customers/marketing_consent_updated
Galantis maps the SMS/phone marketing consent state to the corresponding internal consent status on the contact record.
customer_tags/added

customer_tags/removed

Order webhooks

orders/create

orders/cancelled Same structure as orders/create with cancelled_at and cancel_reason fields added:

orders/updated (used for shipping)
Galantis interprets orders/updated payloads to drive the relevant automation triggers (for example, ORDER_SHIPPED when fulfillment data indicates a successful shipment). See Automations — triggers for the available triggers.

Product and collection webhooks

products/create

products/update Same structure as products/create. Galantis processes the full payload — updated fields overwrite stored values, and inventory_quantity changes are checked for the 0→>0 Back-in-Stock restock pattern.
products/delete

collections/create, collections/update

collections/delete

Billing and app lifecycle webhooks

app_subscriptions/update

app/uninstalled Handler: Tenant deactivation

GDPR webhooks

customers/redact

shop/redact

Meta webhooks

messages (inbound)
For QUICK_REPLY button responses, the messages[0].type is "interactive" and the payload includes:

message_status (status update)
"status" values: "sent", "delivered", "read", "played", "failed". For "failed" status, an "errors" array is included:

message_template_status_update
"event" values: "APPROVED", "REJECTED", "PAUSED", "DISABLED". For "REJECTED", the "reason" field contains Meta’s rejection explanation.