invory.app
Integrate your POS system with Invory to automatically sync sales and update inventory in real time at every checkout.
https://platform.base44.com/api/apps/69302369dfe2ff6a9d4122c4/functions/posWebhookEvery request must include two identifiers, either as HTTP headers (recommended) or as JSON body fields (for legacy POS compatibility).
| Header | Body Field (alternative) | Description |
|---|---|---|
X-API-Key | api_key | API Key generated from the Invory Integrations page |
X-Business-Id | business_id | Unique business identifier, visible on the Integrations page |
The API Key and Business ID are available from Settings → POS Integrationswithin the end customer's Invory account.
Content-Type: application/json X-API-Key: YOUR_API_KEY_HERE X-Business-Id: YOUR_BUSINESS_ID_HERE
itemssale_dateorder_idtable_numbercover_countwaiter_namepayment_methoddiscount_percentsubtotaltaxtotalitems)namequantityunit_pricetotal_pricecategorypayment_method{
"sale_date": "2026-04-09T14:30:00Z",
"order_id": "ORD-001234",
"table_number": "5",
"cover_count": 2,
"waiter_name": "Mario Rossi",
"payment_method": "card",
"discount_percent": 0,
"notes": "",
"items": [
{
"name": "Mojito",
"category": "cocktail",
"quantity": 2,
"unit_price": 9,
"total_price": 18
},
{
"name": "Spaghetti Carbonara",
"category": "primi",
"quantity": 1,
"unit_price": 14,
"total_price": 14
}
],
"subtotal": 32,
"tax": 3.52,
"total": 35.52
}{
"status": "ok",
"pos_system": "NomePOS",
"message": "Processed 2 items. Updated 5 inventory records.",
"items_processed": 2,
"inventory_updated": 5,
"order_id": "ORD-001234"
}If your POS system uses different field names from the defaults, you can configure a custom mapping from the Invory Integrations page without modifying the POS payload.
For example, if your POS sends product_name instead of name, simply configure the mapping and the webhook adapts automatically.
Remappable fields:
namequantity → default: quantityunit_price → default: unit_pricecategory → default: categorypayment_method → default: payment_methoddiscount → default: discountitems_array → default: itemssale_date → default: sale_dateIf a sold item name matches a product in the Invory menu with linked ingredients, the system automatically deducts the quantities from inventory.
Example:
1 "Mojito" is sold → Invory finds the recipe → deducts 50ml Rum, 30ml Lime Juice, 100ml Soda Water from inventory. Units are converted automatically (ml ↔ L, g ↔ kg).
Name matching is case-sensitive and must be identical between the POS and the Invory menu. If no match is found, the sale is still recorded without inventory deduction.
curl -X POST \
https://platform.base44.com/api/apps/69302369dfe2ff6a9d4122c4/functions/posWebhook \
-H "Content-Type: application/json" \
-H "X-API-Key: YOUR_API_KEY_HERE" \
-H "X-Business-Id: YOUR_BUSINESS_ID_HERE" \
-d '{
"order_id": "TEST-001",
"sale_date": "2026-04-09T14:30:00Z",
"payment_method": "card",
"items": [
{
"name": "Mojito",
"category": "cocktail",
"quantity": 1,
"unit_price": 9.00,
"total_price": 9.00
}
],
"total": 9.00
}'