Payment Return and Notification URL

Prev Next

Use this page for card, Open Banking, Direct Debit, and Stripe-connected card payments. A return URL redirects the customer back to your website, while a notification URL receives payment updates on your server.

Return URL and notification URL

Set return_url and notification_url in the payment intent, including for Stripe-connected payments.

The notification_url should be a publicly reachable HTTPS endpoint that accepts POST requests. A browser redirect alone should not be used as proof of payment.

{
  "return_url": "https://example.com/payment/result",
  "notification_url": "https://example.com/webhooks/payments"
}

Return URL

After the customer has completed the payment successfully, they will be redirected to the specified URL with the following query parameters:

  • transaction_id: The Transaction ID for the payment.

  • status: The status of the transaction.

  • note: Additional transaction details.

  • merchant_data: Additional custom data relating to the merchant or customer, for example, an order_id.

Example card redirect

https://example.com/payment/result?transaction_id=BL-NRUGVMX93Q-075959&status=captured&note=captured

Notification URL / Webhooks

After the customer has completed the payment successfully, Blink Payment sends a POST request to the notification_url provided in the intent.

The request body can contain the following fields:

  • transaction_id: The Transaction ID for the payment.

  • status: The status of the transaction.

  • event_type: Distinguishes between new customer transactions and reruns.

  • note: Additional transaction details.

  • merchant_data: Additional custom data relating to the merchant or customer, for example, an order_id.

Notification URL examples

Card payment HTTP body

{
  "transaction_id": "BL-NRUGVMX93Q-075959",
  "note": "captured",
  "event_type": "new_transaction",
  "status": "captured"
}

Open Banking HTTP body

{
  "transaction_id": "BL-PEUGDNJX1WW-812063",
  "note": "OK",
  "event_type": "new_transaction",
  "merchant_data": "{\"order_id\" : \"ob-12345678\"}",
  "status": "Accepted"
}

Direct Debit HTTP body

{
  "transaction_id": "BL-007748C858",
  "note": "Pending Submission",
  "merchant_data": "{\"order_id\": \"dd-12345678\"}",
  "status": "Pending Submission"
}

Rerun card transaction HTTP body

{
  "transaction_id": "BL-WWUKV3WG4Y-783191",
  "note": "Rerun successfully",
  "event_type": "rerun_transaction",
  "status": "Captured"
}

All response bodies are flat JSON objects. merchant_data is returned as a JSON-encoded string.

Responding to webhooks and retries

Acknowledge the webhook with HTTP 200, 201, 202, or 204. The response body is ignored.

All other status codes count as failures, including other 2xx responses and redirects. Blink does not follow redirects.

HTTP/1.1 204 No Content

Failed deliveries are attempted up to five times in total, approximately 310 seconds apart, with no increasing backoff. Connection errors, timeouts, and unsuccessful responses follow the same retry rules. Worker failures may consume an attempt before a request reaches your endpoint.

Respond promptly: connection timeouts are 5 seconds, and read timeouts are 10 seconds. Your endpoint should also handle duplicate notifications safely.

After all retry attempts have been exhausted, failed messages are retained for 14 days. Restoring the endpoint does not automatically replay them.