This help will guide you through the setup and usage of our point of sale cash register software.
Search by keyword in the help section:
Webhook (HTTP notifications)
Kash.click supports two families of webhooks: legacy webhooks, preserved for backward compatibility, and new generation JSON webhooks intended for integrations with Zapier, Make, n8n, Pipedream or your own services.
Next-generation JSON webhooks
Each delivery is sent via POST with a stable JSON body and signature headers. Unnecessary sensitive data is not exposed in customer, product, and checkout closing objects.
Common JSON envelope
| Field | Description |
|---|---|
id | Unique identifier of the event, prefix evt_. |
type | Event type, for example sale.created. |
created_at | Date UTC ISO-8601 of event creation. |
account_id | Kash.click store ID. |
data | Object containing useful business data. |
{ "id": "evt_6e6f9d9e7c7c4d71b97c2f51", "type": "sale.created", "created_at": "2026-07-16T10:00:00Z", "account_id": 123, "data": { "sale": { "id": 98765, "number": 42, "total": 59.9, "paid": 59.9, "is_refund": false, "cashbox_id": 7, "delivery_method": "Counter sale" }, "customer": { "id": 456, "name": "Martin", "surname": "Julie", "email": "julie@example.com" }, "items": [], "payments": [], "invoice": { "id": 98765, "number": 42, "pdf_url": "https://php7.enregistreuse.fr/workers/webpages/downloadInvoice.php?idcommande=98765&verif=..." } }} Headers sent
| Header | Amount |
|---|---|
Content-Type | application/json |
User-Agent | Kash.click Webhooks/1.0 |
X-Kash-Event | Type of event sent. |
X-Kash-Delivery | Unique delivery identifier, prefix del_. |
X-Kash-Timestamp | Unix uses timestamps for signatures. |
X-Kash-Signature | v1= |
Signature verification
The signature is calculated using the shared secret of the webhook, on the timestamp, a dot, then the raw JSON body exactly received.
expected = "v1=" + hex_hmac_sha256(X-Kash-Timestamp + "." + raw_body, webhook_secret)$timestamp = $_SERVER["HTTP_X_KASH_TIMESTAMP"];$signature = $_SERVER["HTTP_X_KASH_SIGNATURE"];$body = file_get_contents("php://input");$expected = "v1=".hash_hmac("sha256", $timestamp.".".$body, $secret);if (!hash_equals($expected, $signature)) { http_response_code(401); exit;}if (abs(time() - intval($timestamp)) > 300) { http_response_code(401); exit;} Types of events available
| Type | Triggering | Data | Main payload |
|---|---|---|---|
customer.created | Creating a client from the API or interface. | customer | data.customer |
customer.updated | Modifying a client from the API or interface. | customer | data.customer |
sale.created | Order confirmed, no refund. | sale, customer, items, payments, invoice | data.sale, data.customer, data.items, data.payments, data.invoice |
sale.refunded | Refund order validated. | sale, customer, items, payments, invoice | data.sale.is_refund vaut true |
sale.paid | Order completed or fully paid for. | sale, customer, items, payments, invoice | data.sale, data.customer, data.items, data.payments, data.invoice |
product.created | Creating an article from the API or the interface. | product | data.product |
product.updated | Modifying an article from the API or the interface. | product | data.product |
stock.low | The stock falls below the configured alert threshold. | product, stock | data.product, data.stock |
stock.out | The stock drops to zero. | product, stock | data.product, data.stock |
order.sent_to_preparation | Order sent for preparation. | sale, customer, items, payments, invoice | Meme structure que les events de vente. |
order.preparation_completed | Order preparation complete. | sale, customer, items, payments, invoice | Meme structure que les events de vente. |
delivery.started | Delivery has started. | sale, customer, items, payments, invoice | Meme structure que les events de vente. |
day_closing.created | Cash register closure created. | day_closing | data.day_closing |
Details of data objects
data.customer
Sent for customer.created, customer.updated, and included in sales events when an order is linked to a customer.
| Field | Description |
|---|---|
id | Internal customer identifier. |
name | Surname |
surname | First name |
title | Title |
email | |
phone | Main telephone number. |
phone2 | Secondary telephone number. |
addressline1 | Address line 1 |
addressline2 | Address line 2 |
postcode | Postcode |
city | City |
country | Country |
customer_group_id | Customer group identifier. |
accounting_code | Customer accounting code. |
data.product
Sends for product.created, product.updated, stock.low and stock.out.
| Field | Description |
|---|---|
id | Internal identifier of the article. |
title | Long title. |
short_title | Short title |
description | Description |
price | Selling price |
buying_price | Purchase price |
barcode | Barcode. |
department_id | Department identifier. |
vat_id | VAT rate identifier. |
stock | Quantity available. |
stock_alert | Article-specific alert threshold. |
unit_id | Unit identifier. |
unavailable | 1 if the item is unavailable. |
shop_hidden | 1 if the item is a mask from the online store. |
data.stock
Ships only with stock.low and stock.out.
| Field | Description |
|---|---|
previous | Stock before the operation. |
current | Stock after the operation. |
delta | Applied variation. |
alert_threshold | Threshold used to trigger stock.low. |
data.sale
Sends for sale.created, sale.refunded, sale.paid, order.sent_to_preparation, order.preparation_completed and delivery.started.
| Field | Description |
|---|---|
id | Internal order identifier. |
number | Accounting number / number visible when available. |
title | Order title. |
created_at | Order creation date. |
validated_at | Order validation date. |
value_at | Value date |
total | Total order amount. |
paid | Amount paid known at the time of the event. |
is_refund | true if the event corresponds to a refund. |
cashbox_id | Cash register ID. |
delivery_method | Delivery method label. |
delivery_method_id | Delivery method identifier. |
| Field | Description |
|---|---|
payments | Order payment table. The main fields are id, idModePaiement, idTypePaiement, datePaiement, montantPaye and montantVerse. |
items | Table of order item lines. It includes the business fields of the order line, including item, quantity, price and VAT when available. |
data.invoice
Included in sales and order cycle events.
| Field | Description |
|---|---|
id | Internal identifier of the order/invoice. |
number | Invoice number visible when available. |
pdf_url | PDF download URL. |
data.day_closing
Sends for day_closing.created.
| Field | Description |
|---|---|
cashbox_id | Cash register ID. |
cashbox_name | Cash register name |
total | Total cash over the period. |
opened_at | UTC ISO-8601 opening date. |
closed_at | UTC ISO-8601 closing date. |
Reliability and retries
- An HTTP 2xx response marks the delivery as successful.
- Other responses or network errors remain pending until the next attempt.
- The retry intervals are 1 minute, 5 minutes, 15 minutes, 1 hour, then 6 hours.
- After 5 attempts, the delivery status changes to failed.
- Each attempt stores the date, HTTP code, a response snippet, and the error message.
Historical Webhooks
The old saleWebhookURL and openingWebhookURL fields are still supported. They submit application/x-www-form-urlencoded forms and do not replace the new generation JSON webhooks.
historical command webhook
The URL configured for sales is called when an order is validated or completed.
type: validated or terminatedisRefund: true/false if refundorderID: order accounting numberorderInternalID: internal order identifiercreationDate,validationDate,valueDate: dates in timestampprice,paid: order amountsclientID,client: client identifier and JSONcashBoxID,deliveryMethod: checkout and deliveryPDFinvoice: PDF invoice linkitems,VATs,VAT,payments: JSON articles, VAT and paymentsHMAC_SHA256,signatureVerificationURL: historical signature and verification URL
Historical webhook for opening/closing cash registers
The URL configured for cash register openings and closings is called when cash register state changes.
type:cashBox_closeOrcashBox_opentotal: Total cash received during the period, for cashBox_closeopened,closed: opening and closing datessignatureVerificationURL: URL to verify the historical signature
This document is made available under the terms of the licence Creative Commons Attribution 4.0 International (CC BY 4.0) .