Overview
Your platform pushes events to Vambe as they happen. Each event is a canonical JSON payload β you map your own data onto Vambeβs shape, so there is no per-provider code on Vambeβs side. All inbound endpoints are:Authenticating your webhooks
Every request must be signed with your appβs signing secret (thesigning_secret from
Create Your App).
Compute an HMAC-SHA256 (hex) over the string {timestamp}.{rawBody} and send:
2xx response means the event was accepted. Retry on any non-2xx β Vambe is idempotent
on the entityβs external id.
The envelope
Every payload is an envelope with two optional routing fields plus the entity:string
Your identifier for the merchant store. Used to resolve the installation (see below).
string
Your event id. Advisory today; reserved for explicit de-duplication.
Resolving the installation
A single app can be installed by many merchants, so Vambe must map each webhook to the right installation:- Multi-store: send
external_store_idmatching theexternal_idVambe captured from youraccount_info_url. Vambe resolves by(app, external_id). - Single installation: if the app has exactly one installation, it resolves automatically
even without
external_store_id.
404.
Order
POST /api/public/apps/{appId}/events/order
The customer phone is the most important field: it is how Vambe links the order to the
WhatsApp contact. Send it in E.164 format when possible. Products are matched by
external_product_id against the catalog you synced.external_checkout_id attributes the sale. When the order was paid through a checkout
Vambe requested via
checkout_create, include the
same id you returned there. Vambe uses it to credit the sale to the assistant conversation
that produced the checkout. Omit it (or send null) for orders that did not come from a
Vambe checkout.Checkout (abandoned)
POST /api/public/apps/{appId}/events/checkout
customer.phone and recover_url are required for recovery: Vambe resolves (or creates) the
contact by phone and records the abandoned checkout with its recovery link. For checkouts that
Vambe requested via checkout_create, external_id must be the same id you returned as
external_checkout_id β that is how the abandoned checkout is tied back to the conversation.Fulfillment
POST /api/public/apps/{appId}/events/fulfillment
Products
Products are incremental β each event affects only the product you send. Vambe never deletes the rest of your catalog from a webhook.Upsert (create or update)
POST /api/public/apps/{appId}/events/product
(external_id, store): a new external_id is created, an existing one is
updated. Product embeddings (for AI search and recommendations) run automatically.
Delete
POST /api/public/apps/{appId}/events/product/delete
Catalog over webhook is the push model. If youβd rather have Vambe pull your full
catalog instead, that is handled by the
products_list outbound capability β talk to the
Vambe team about which model fits your platform.