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.

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.

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.