Skip to main content

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 (the signing_secret from Create Your App). Compute an HMAC-SHA256 (hex) over the string {timestamp}.{rawBody} and send:
Sign and send the exact same body bytes. Vambe verifies the signature against the raw request body β€” re-serializing differently will fail verification. Requests older than 5 minutes are rejected.
A 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_id matching the external_id Vambe captured from your account_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.
If no installation can be resolved, Vambe responds 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
Vambe upserts by (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
This soft-deletes the product for that store.
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.