Skip to main content
The authoritative list for your workspace is GET /api/v1/workspace-webhooks/events. It includes each event’s JSON schema and a sample. This page summarises it. Fields that have no value are left out of data. IDs are always UUIDs.

Publishing events

Account events carry the account’s id, name, provider (for example instagram) and status. account.deleted carries id and "deleted": true. Post events carry the post’s id and a numeric status. Fetch the full post with Get a post. post.deleted carries ids (a list of post IDs), deleted and to_trash.

Messaging events

Messaging events can be limited to one channel per subscription: whatsapp, facebook, instagram, sms or tiktok, or all.

Contacts

Conversations and messages

Not every channel reports every message status: You can’t subscribe a channel to a status it never reports.

Automations and broadcasts

Payments and bookings

Store

All store events carry event, contact and order. salesbot.store.order_created, salesbot.store.order_paid, salesbot.store.payment_failed, salesbot.store.checkout_abandoned, salesbot.store.order_fulfilled, salesbot.store.order_cancelled, salesbot.store.order_refunded, salesbot.store.product_back_in_stock, salesbot.store.inventory_low, salesbot.store.customer_milestone

Data objects

Text fields are capped at 1,000 characters (message.text at 10,000) and lists at 100 items. Contact and message events can include personal data such as names, emails, phone numbers and message text, so protect your receiver accordingly.

Ad referrals on message.received

salesbot.message.received carries two extra fields that tell you which ad brought the person in. No other event changes.
  • message.referral: the Click-to-WhatsApp, Click-to-Messenger or Click-to-Instagram ad, or m.me / ig.me ref link, this message came from. It’s null on an ordinary message.
  • contact.source: the contact’s first touch, as text. For example Messenger ad: 2021 Toyota Corolla LE, Instagram ad: Autumn sale, WhatsApp ad: ... or WhatsApp post: .... It’s null when the contact didn’t come from an ad.
message.referral is the same 12-key object the Messaging API returns: Every key is present, and null when Meta didn’t send it. Links are only passed on when they are plain http(s) URLs with no username or password and at most 2,048 characters; any other link becomes null. Links are never shortened.
The media links are Meta CDN links and they expire. If you need the image or video later, copy it when the webhook arrives.
When someone taps an ad without writing anything, an inbound message reading Opened the chat from an ad is recorded with the referral, so you still get a message.received for the tap.

Example