Shop
Read your store’s products and orders, and react to paid orders, from your server.
Stores, products and orders are built in the dashboard’s Shop; the API lets your systems (stock, fulfilment, accounting) read them and add products. The SDKs do not wrap these endpoints yet: call them over HTTP with your key, as below.
Keys and scopes
shop scope (and refunds write to refund an order).Your stores and their orders
curl https://api.watenga.africa/v1/merchant/shop/stores \
-H "Authorization: Bearer $WATENGA_SECRET_KEY" \
-H "Watenga-Version: 2026-10-29"
curl https://api.watenga.africa/v1/merchant/shop/stores/{storeId}/orders \
-H "Authorization: Bearer $WATENGA_SECRET_KEY" \
-H "Watenga-Version: 2026-10-29"
curl https://api.watenga.africa/v1/merchant/shop/stores/{storeId}/orders/{orderId} \
-H "Authorization: Bearer $WATENGA_SECRET_KEY" \
-H "Watenga-Version: 2026-10-29"Add a product
Each variant has its own prices, one per currency. Write amounts in the currency’s own decimals, as everywhere else in the API ("25.00" USD, "1500" UGX); the four-decimal form ("25.0000") is still accepted. Shop returns amounts with four decimals.
curl -X POST https://api.watenga.africa/v1/merchant/shop/stores/{storeId}/products \
-H "Authorization: Bearer $WATENGA_SECRET_KEY" \
-H "Watenga-Version: 2026-10-29" \
-H "Content-Type: application/json" \
-d '{"title":"Lunch box","slug":"lunch-box","status":"active","variants":[{"title":"Default","option_values":{},"prices":[{"currency":"USD","amount":"12.50"}]}]}'Webhook events
| Event | When |
|---|---|
shop.order.paid | An order was paid: fulfil it |
shop.order.payment-failed | The order’s payment failed |
shop.order.refunded | An order was refunded |
Each event carries the object in data.object; verify the signature first (Webhooks).
Test it
Use a test secret key (sk_test_…): it never moves money. Pay with the test cards and wallet numbers, and receive the webhooks on your machine with watenga listen --forward-to http://localhost:3000/webhooks (CLI).
Related: Refunds