Webhooks
Flow Retail can send webhooks to your system when specific events occur, allowing you to process updates in real time β for example when an order is settled, a product is updated, or stock changes.
How webhooks are delivered
Event triggered β Flow Retail sends an `HTTP POST` request to your registered webhook endpoint.
Timeout β If your endpoint does not respond within 10 seconds, we consider it a timeout.
Retries β On timeout or `5xx` response, Flow Retail retries the webhook up to 10 times with exponential backoff.
No retries on 4xx β Any `4xx` status code (including `429`) marks the webhook as failed and will not be retried.
Status codes β quick reference
200 OK
Event processed successfully
No
202 Accepted
Event accepted for asynchronous processing
No
400 Bad Request
Invalid payload (validation error, etc.)
No
401/403
Invalid or missing authentication
No
404
Endpoint not found / wrong route
No
429 Too Many Requests
Temporary overload β not ready to receive more calls
No
5xx
Temporary server error
Yes
Timeout > 10s
No response within 10 seconds
Yes
All available webhooks
Below is the full list of webhook action values you can subscribe to.
PRODUCT_CREATE
A new product was created
PRODUCT_UPDATE
An existing product was updated
PRODUCT_DELETE
A product was deleted
CUSTOMER_CREATE
A new customer was created
CUSTOMER_UPDATE
An existing customer was updated
CUSTOMER_DELETE
A customer was deleted
ORDER_SETTLED
A new order was settled (fully paid)
ORDER_RECEIPT_SETTLED
A receipt was settled
ORDER_DELIVERED
An existing order was delivered in full
ORDER_HANDLING_STATE_CHANGED
An order handling state was changed
TILL_CLOSED
A till was counted and closed
TILL_OPEN
A till was opened
PRICE_CREATE
A new price was created
PRICE_UPDATE
A price was updated
PRICE_DELETE
A price was deleted
STOCK_CHANGE
Stock changed for a product in a specific warehouse
PRODUCT_MEDIA_CHANGE
Product media was created, updated, or deleted
PURCHASE_RECEIVED
A purchase order was fully received
Response examples
Flow Retail sends a webhook as an HTTP POST and waits up to 10 seconds for a response.
Your endpoint should return the appropriate HTTP status code depending on whether you successfully received and processed the event.
The table below shows how Flow Retail interprets your response:
200 OK
Event processed successfully β remove it from the queue
No
202 Accepted
Event accepted for async processing β remove it from the queue
No
Any 4xx
Permanent error (invalid payload, auth error, etc.) β remove it from the queue
No
5xx
Temporary server error β retry later
Yes
Timeout > 10s
No response within 10 seconds β retry later
Yes
200 OK β synchronous processing
202 Accepted β asynchronous processing
400 Bad Request β do not retry
500 Internal Server Error β retry
Example webhook payloads
All payloads are sent as application/json in the request body.
Fields may be added over time β always parse only what you need.
PRODUCT_CREATE
ORDER_SETTLED
STOCK_CHANGE
Best practices for webhook receivers
Respond fast β Do not do heavy processing inside the webhook handler; enqueue work instead.
Idempotency β Make sure your processing logic can handle duplicate events.
Logging β Log incoming webhooks for troubleshooting.
Security β Verify the request is from Flow Retail (via IP allowlisting or signing).
Error handling β Return a 5xx if you want Flow Retail to retry.
Last updated