API explorer

Theme switcher

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.

You can also read how to set or disable the Order Webhook: Order Webhook Set | Order Webhook Disable

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

JSON
{ "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

JSON
{ "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

JSON
{ "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

JSON
{ "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

JSON
{ "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

JSON
{ "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

JSON
{ "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

JSON
{ "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.
Was this section helpful?

What made this section unhelpful for you?

On this page
  • Order Webhook