Live in four steps.
Get your API keys
Sign up and retrieve your AI front desk ID and API credentials from the dashboard.
Embed the widget
Add the embed script and initialisation code to your website.
Configure webhooks
Set up endpoints to receive real-time events from chat conversations.
Test and deploy
Verify your integration in sandbox mode, then switch to production.
Authentication
There are two kinds of key. Widget and chat requests send your API key in the X-API-KEY header.
Partner endpoints — the Catalogue Push API — take a merchant key as a bearer token in Authorization.
Never expose API keys in client-side code.
For AI coding agents
Building with Claude Code, Cursor or Copilot? Point the agent at plain Markdown instead of this page — no layout, no scripts, every endpoint and payload intact.
Or switch this page to Markdown view and copy it in one click.
Widget embedding
Basic integration
Add the shamz.ai widget to your website by including our embed script. Replace YOUR_API_KEY with your actual API key from the dashboard.
Configuration options
Talk to the front desk
/api/widget/chatSend a message
Send a message to the AI front desk. Include session_id to keep conversation context, and an optional survey with the customer’s details.
Send us your catalogue.
For shops whose own software sends us the catalogue rather than letting us read it. If your system cannot expose an API to us — or you would rather it did not — push to ours instead. The assistant then answers from what you send: product names, prices, stock and specifications.
Postman collection
Five calls ready to run, with a worked example body and tests that check the contract — not only the status code. Set apiKey in the Variables tab and send request 1.
Getting a key
The merchant creates it in their shamz dashboard under E-commerce → Push API, or in the shamz app under Shop → API keys.
The secret is shown once and stored scrambled, so it cannot be recovered — if it is lost, create another and switch the old one off. Switched-off keys stop working on the very next request.
/api/partners/v1/catalogSend your catalogue
Your whole catalogue. Anything you have sent before and leave out of this call is taken off sale — never send a partial list here. Answers 202: products are saved before we reply, images are fetched just after.
You can also send shop-wide answers alongside the products — delivery, returns, warranty — and the assistant uses them the same way it uses specs. Matching questions are replaced, not duplicated.
/api/partners/v1/itemsUpdate prices and stock
Send as often as you like. Values are absolute, not adjustments, and nothing is ever taken off sale here. This is the one to call when stock moves.
/api/partners/v1/cartsCarts
Optional, and separate from the catalogue. Send us carts and the assistant can follow up on the ones left behind — a WhatsApp message with the basket and a link back to it, on a schedule the merchant sets.
Send the current contents whenever the cart changes — what you send replaces what we held, so a retry is harmless. Upsert only: a cart you leave out is untouched.
recovery_url is required because the reminder is a link back to the cart. A customer_phone or customer_email is required because without one there is nobody to remind. A cart missing either is rejected, not stored.
discount_code is optional and is your code, applied by your checkout. We never invent one for a pushed shop.
/api/partners/v1/ordersOrders
An order was placed. This stops a shopper who has already bought from being chased, and makes follow-ups measurable — the cart records which reminder was last sent before the order arrived. Send every order; the response tells you which matched a cart.
Carts and orders allow 300 requests a minute. The merchant must switch cart follow-ups on first — until then these calls answer normally but store nothing, and say so.
/api/partners/v1/statusCheck what we hold
How many products are live, how many are ready for a WhatsApp carousel, and when you last sent us anything. Check your own integration without asking us.
carousel_ready differs by place, deliberately: in the push response it counts products you just sent with a photo and a link; here it counts what we can show right now — lower until photos arrive.
Image results appear here a few seconds after a push. image_errors is capped at 25 entries, keyed by your external_id, and images_at says which push they belong to.
A complete example
PHP, because that is what most shop systems in the region run. Python too. Both are run against production before they ship, so they work as printed.
Responses and limits
One bad row never costs you the rest of the catalogue. You get back what was accepted, what was rejected and why, and any warnings.
Image links must be https and publicly reachable; we host our own copy, because WhatsApp will not deliver a card whose image it cannot load. Send links, not base64.
How current your data is, is yours to own. We answer customers from the last thing you sent and never call back to your system — pick a cadence that matches how fast your stock moves.
Hear about it the moment it happens.
Events
Subscribe to receive real-time notifications about events in your AI front desk.
Setting up webhooks
Official SDKs
None are published yet. The REST API above is the integration surface today — it is fully documented, and the Postman collections run against it.
JavaScript / TypeScript
Coming soonA typed client for the REST API. Until it ships, call the endpoints directly — every one of them is documented above.
Python
Coming soonFor backend integrations and automation. The Catalogue Push examples show the same calls with `requests`.
React component
Coming soonA drop-in component. The embed script already works in React — see the example below.
Example: React
No package needed — the embed script is a plain script tag, so a small component that loads it once and calls init is the whole integration. This is what the React SDK will wrap when it ships.
Rate limits & best practices
API rate limits
Best practices
Error handling
On 429, back off and retry. Throw on any other non-2xx, and always show the customer a fallback message.
Need technical support?
Have questions about API implementation or need help with integration? Our technical team is here to assist.