Order Webhook
The Order Webhook notifies your system about important events in the order lifecycle.
This allows your platform to react in real time — for example, when an order is placed, partially paid, fully paid, credited, or put on hold.
When it’s triggered
Event | Description | Typical Use Case |
order_placed | Customer successfully placed an order. | Mark order as created. |
order_workflow_started | The order entered internal processing workflow. | Order can be shown as started. |
partial_payment_added | A partial payment for the order was received. | Get the new order details to adjust the outstanding amount. |
order_paid | The order has been fully paid. | Mark order as paid. |
partial_credit_added | A partial credit or refund was applied to the order. | Get the new order details to adjust the outstanding amount. |
order_fully_accredited | A full credit or refund was applied to the order. | Mark order as fully accredited in system. |
customer_fully_paid | The customer has cleared all outstanding balances. | Mark order as paid. |
order_on_hold | The order is temporarily on hold (e.g. pending review, dispute process). | Mark order as paused. |
Example Payloads
Each event sends a webhook payload with the same structure. Only the event parameter changes to indicate the current order state.
Payload Parameters:
- order_id — unique id of the Billink order
- invoice_number_clean - internal invoice number
- invoice_number - public invoice number, generated by Billink based on invoice_number_clean
- workflow_id - unique id assigned to the order workflow
- event - state of the order, which triggered the webhook
- timestamp - the exact date and time when the webhook was triggered (Y-m-d H:i:s format). Time zone: Amsterdam, Netherlands (GMT+2)
- custom_invoice_id (Might not be always presented) - will be shown if it exists in Billink Session.
Example: order_placed
{
"order_id": "123456",
"invoice_number": "1ABINVOICE1234",
"invoice_number_clean": "INVOICE1234",
"workflow_id": "123",
"event": "order_placed",
"timestamp": "2025-10-10 09:45:00",
"custom_invoice_id": "1TST-CUSTOM-INVOICE-12345" //if presented
}Example: partial_payment_added
{
"order_id": "123456",
"invoice_number": "1ABINVOICE1234",
"invoice_number_clean": "INVOICE1234",
"workflow_id": "123",
"event": "partial_payment_added",
"timestamp": "2025-10-10 09:45:00",
"custom_invoice_id": "1TST-CUSTOM-INVOICE-12345" //if presented
}Example: order_paid
{
"order_id": "123456",
"invoice_number": "1ABINVOICE1234",
"invoice_number_clean": "INVOICE1234",
"workflow_id": "123",
"event": "order_paid",
"timestamp": "2025-10-10 09:45:00",
"custom_invoice_id": "1TST-CUSTOM-INVOICE-12345" //if presented
}Example: partial_credit_added
{
"order_id": "123456",
"invoice_number": "1ABINVOICE1234",
"invoice_number_clean": "INVOICE1234",
"workflow_id": "123",
"event": "partial_credit_added",
"timestamp": "2025-10-10 09:45:00",
"custom_invoice_id": "1TST-CUSTOM-INVOICE-12345" //if presented
}Example: order_fully_accredited
{
"order_id": "123456",
"invoice_number": "1ABINVOICE1234",
"invoice_number_clean": "INVOICE1234",
"workflow_id": "123",
"event": "order_fully_accredited",
"timestamp": "2025-10-10 09:45:00",
"custom_invoice_id": "1TST-CUSTOM-INVOICE-12345" //if presented
}Example: customer_fully_paid
{
"order_id": "123456",
"invoice_number": "1ABINVOICE1234",
"invoice_number_clean": "INVOICE1234",
"workflow_id": "123",
"event": "customer_fully_paid",
"timestamp": "2025-10-10 09:45:00",
"custom_invoice_id": "1TST-CUSTOM-INVOICE-12345" //if presented
}Example: order_workflow_started
{
"order_id": "123456",
"invoice_number": "1ABINVOICE1234",
"invoice_number_clean": "INVOICE1234",
"workflow_id": "123",
"event": "order_workflow_started",
"timestamp": "2025-10-10 09:45:00",
"custom_invoice_id": "1TST-CUSTOM-INVOICE-12345" //if presented
}Example: order_on_hold
{
"order_id": "123456",
"invoice_number": "1ABINVOICE1234",
"invoice_number_clean": "INVOICE1234",
"workflow_id": "123",
"event": "order_on_hold",
"timestamp": "2025-10-10 09:45:00",
"custom_invoice_id": "1TST-CUSTOM-INVOICE-12345" //if presented
}Delivery and Retries
When a webhook is triggered, Billink sends an HTTPS POST request to your configured webhook URL with the corresponding event payload.
If your endpoint does respond with HTTP 200-299, the system will automatically retry delivery up to three times:
Attempt | Delay before retry |
1st retry | after 5 seconds |
2nd retry | after 10 seconds |
3rd retry | after 15 seconds |
After three failed attempts, the webhook is considered undeliverable, and no further retries will be made.
To ensure successful delivery:
- Always respond with HTTP 200 OK as soon as your system receives the webhook.
- Handle processing asynchronously to avoid timeouts.
- Log all incoming webhook attempts for debugging and reconciliation.
What made this section unhelpful for you?
On this page
- Order Webhook