Payment notifications

Payment notifications for Volt Gateway and Pay by Link

About Volt Notifications

We inform you of a payment's success/failure/pending status by sending a POST request that contains a digitally signed payment notification to a secure URL on your server. This happens in the background and is not visible to the shopper.

Notification vs Return URL

You should always rely on the information sent in notifications rather than the return URL the shopper was redirected to. This is especially important for embedded checkouts where the return URLs are not used.

By using a secret key that you receive during application setup, you can check the signature of the message to confirm that it came from Volt and is a genuine notification. Never process any message that appears to originate at Volt without performing this verification step first.

If a status was originally pending, we'll send you another notification when it changes to success or failure. Each notification will be digitally signed, and you'll then need to confirm that you have received the notification and the signature is correct.

Important!

The success notification is only a confirmation that the payment was successfully initiated at the bank. Some banks allow payments to be cancelled after they are initiated so this is not a guarantee that the funds will arrive in your account. Note, however, that we do issue payment received notifications via Connect.

Payment notifications

For our core Gateway and Pay by Link products, we'll send a notification to your payment notification URL if:

  • A payment initiation is complete
  • A payment is delayed
  • The payment initiation fails for any reason

Notification fields

The body of the notification contains a JSON formatted data structure, which has the following fields:

Prop

Type

Example notification body

If the payment was refused by the shopper's bank:

{
  "payment": "292d48f6-90f3-450b-93eb-0b480b8b70dd",
  "reference": "Invoice-12346",
  "merchantInternalReference": "Order for a trip to Greece 20-27.08.2026",
  "amount": 1000,
  "status": "COMPLETED",
  "detailedStatus": "COMPLETED"
}

View expected payment processing times

Additional notification content

Volt can provide additional details in your payment notifications. The following table shows the full list of supported fields. It is possible to manage the additional notification content through our merchant portal Fuzebox inside the Application section.

List of available fields:

Prop

Type

Example notification content:

{
   "payment":"f839adfb-4b16-422d-a056-b10d5307660f",
   "reference":"uniquereference",
   "merchantInternalReference": "Order for a trip to Greece 20-27.08.2026",
   "amount":2500,
   "status":"COMPLETED",
   "detailedStatus": "COMPLETED",
   "sender":{
      "iban":"DE63500105173256774934",
      "accountNumber": null,
      "sortCode": null,
      "name":"Mrs Jane Doe",
      "bank":{
         "id":"ea54dc4d-d2e4-481f-8424-a9eb9a2db4ab",
         "country":"DE",
         "groupName":"Norisbank",
         "branchName":"Norisbank Berlin",
         "bic8":"HANDSESS"
      }
   }
}

What each status means

The status categories presented in the status field of the notification (COMPLETED, FAILED, and PENDING) provide a high-level overview of the transaction's current status. A more specific update can be found in the detailedStatus field.

COMPLETED

The COMPLETED status means that the payment has been instructed and your customer's bank has accepted it. Both the payment request and instruction process are completed.

However, banks are still able to cancel payments after the instruction has been accepted, so a status of COMPLETED does not guarantee that you will receive the funds. It is important to confirm receipt of funds with your receiving bank before releasing the goods or services.

COMPLETED:

{
  "payment": "292d48f6-90f3-450b-93eb-0b480b8b70dd",
  "reference": "Invoice-12345",
  "merchantInternalReference": "Order for a trip to Greece 20-27.08.2026",
  "amount": 1000,
  "status": "COMPLETED",
  "detailedStatus": "COMPLETED"
}

FAILED

The FAILED status means that the payment request could not be completed. This could be due to technical reasons in the banking network, the customer cancelled the payment, or the customer's bank rejected it.

REFUSED_BY_RISK:

{
  "payment": "292d48f6-90f3-450b-93eb-0b480b8b70dd",
  "reference": "Invoice-12345",
  "merchantInternalReference": "Order for a trip to Greece 20-27.08.2026",
  "amount": 1000,
  "status": "FAILED",
  "detailedStatus": "REFUSED_BY_RISK"
}

REFUSED_BY_BANK:

{
  "payment": "292d48f6-90f3-450b-93eb-0b480b8b70dd",
  "reference": "Invoice-12345",
  "merchantInternalReference": "Order for a trip to Greece 20-27.08.2026",
  "amount": 1000,
  "status": "FAILED",
  "detailedStatus": "REFUSED_BY_BANK"
}

ERROR_AT_BANK:

{
  "payment": "292d48f6-90f3-450b-93eb-0b480b8b70dd",
  "reference": "Invoice-12345",
  "merchantInternalReference": "Order for a trip to Greece 20-27.08.2026",
  "amount": 1000,
  "status": "FAILED",
  "detailedStatus": "ERROR_AT_BANK"
}

CANCELLED_BY_USER:

{
  "payment": "292d48f6-90f3-450b-93eb-0b480b8b70dd",
  "reference": "Invoice-12345",
  "merchantInternalReference": "Order for a trip to Greece 20-27.08.2026",
  "amount": 1000,
  "status": "FAILED",
  "detailedStatus": "CANCELLED_BY_USER"
}

ABANDONED_BY_USER:

{
  "payment": "292d48f6-90f3-450b-93eb-0b480b8b70dd",
  "reference": "Invoice-12345",
  "merchantInternalReference": "Order for a trip to Greece 20-27.08.2026",
  "amount": 1000,
  "status": "FAILED",
  "detailedStatus": "ABANDONED_BY_USER"
}

FAILED (for any other reason):

{
  "payment": "292d48f6-90f3-450b-93eb-0b480b8b70dd",
  "reference": "Invoice-12345",
  "merchantInternalReference": "Order for a trip to Greece 20-27.08.2026",
  "amount": 1000,
  "status": "FAILED",
  "detailedStatus": "FAILED"
}

PENDING

The PENDING status means that payment has not yet been confirmed by the customer's bank. This can occur for multiple reasons, including the customer's bank encountering a delay in processing payments or an additional authorisation required for payments – a common setup on business accounts.

When the status changes, you'll automatically receive another notification, usually with a final status of COMPLETED or FAILED. It is possible that this could be an updated PENDING status with a different detailedStatus reason. If you'd like to manually check for status changes periodically, you can do so using the GET/payments/{id} endpoint.

BANK_REDIRECT:

{
  "payment": "292d48f6-90f3-450b-93eb-0b480b8b70dd",
  "reference": "Invoice-12345",
  "merchantInternalReference": "Order for a trip to Greece 20-27.08.2026",
  "amount": 1000,
  "status": "PENDING",
  "detailedStatus": "BANK_REDIRECT"
}

DELAYED_AT_BANK:

{
  "payment": "292d48f6-90f3-450b-93eb-0b480b8b70dd",
  "reference": "Invoice-12345",
  "merchantInternalReference": "Order for a trip to Greece 20-27.08.2026",
  "amount": 1000,
  "status": "PENDING",
  "detailedStatus": "DELAYED_AT_BANK"
}

AWAITING_CHECKOUT_AUTHORISATION:

{
  "payment": "292d48f6-90f3-450b-93eb-0b480b8b70dd",
  "reference": "Invoice-12345",
  "merchantInternalReference": "Order for a trip to Greece 20-27.08.2026",
  "amount": 1000,
  "status": "PENDING",
  "detailedStatus": "AWAITING_CHECKOUT_AUTHORISATION"
}

Connect statuses

There are two additional statuses that are provided by our Volt Connect service RECEIVED and NOT_RECEIVED. These notifications do not include the detailedStatus field by design. The next article will explain the RECEIVED and NOT_RECEIVED statuses in more detail.
Find out more about Volt Connect

Payments received

One of the major benefits of using Volt Connect is that you know when funds are in your account, allowing you to safely release goods or services.

Each time a payment is received into your Connect account, we'll reconcile it against expected payments. If successful, we'll update the payment's status to RECEIVED and send you a payment_received notification to the same payment notifications endpoint used with Gateway.

Sometimes, you may receive the COMPLETED notification after the payment_received notification due to the processing speed of some banks.

Payment received notification

The format of this notification is different to a Volt Gateway notification, it contains different information and a different header structure. The signature calculation is identical, so you should process and acknowledge Connect notifications using the same method as Gateway notifications.

Notification delivery

  • Volt will send you one notification per payment
  • The notification will be delivered to your payment notifications URL

Notification header

  • The User-Agent for Connect notifications will be Volt/2.0
  • X-Volt-Type, defines the content to expect (payment_received in this case)
  • This header structure will be used for other Connect notifications
POST /payment_notification_url HTTP/1.1
Host: customer.com
Content-Type: application/json
User-Agent: Volt/2.0
X-Volt-Timed: 20200131123456
X-Volt-Signed: eda5e46baa6a676851975365e12b4ae61ee48442c0cbb8d0e3c3cfd47c3e1085
X-Volt-Type: payment_received

Notification body

{
  "payment":"aef1e5e0-d1ae-4114-93b1-853c35d3b5b6",
  "reference":"PayerReference",
  "amount":1234567,
  "status":"RECEIVED",
  "currency":"GBP",
  "timestamp":"2023-01-26T12:34:56+00:00",
  "merchantInternalReference": "Order for a trip to Greece 20-27.08.2023",
  "sender":{
    "location": "GB",
    "name":"Mr Richard Richardson",
    "accountNumber":"12345678",
    "sortCode":"404777",
    "iban":null,
    "swiftBic":null
  }
}

Notification body fields

Sender content is location specific and only contains details if provided to Volt from the payer's bank. UK payments may contain information such as sortCode and accountNumberfields, while SEPA and some international payments will contain iban. International payments may also contain a swiftBic.

NameDescription
paymentVolt's internal ID for the payment, as returned in your initial payment request
timestampWhen the notification was generated
currencyCurrency of the payment
amountAmount of the payment, shown in minor units of currency (pence, cents)
statusPayment status
referenceThe reference you specified for the payment
merchantInternalReferenceAn optional longer reference for the payment
sender
locationA two-letter ISO code representing the sender's country (if known)
nameSender's name
accountNumberDomestic account number
sortCodeUK sort code
ibanInternational Bank Account Number (for international or SEPA payments)
swiftBicSwift BIC, a standard addressing element for banks
bsbAU bank-state-branch identifier of bank account (for PayTo payments)
payIDAU PayID identifier (for PayTo payments)

Additional Information

Sender fields will only be available to you if we can ensure compliance with data protection laws.

Payments not received

Payment processing is determined by the payment system used. A payment can take couple of seconds up to couple of days to be fully processed. We listed out more details on the expected processing of the different payment systems.

Notifications

If the payment is not received within the maximum timeframe above, we'll change the payment status to NOT_RECEIVED and send the following notification to your notifications endpoint.

Notification header

POST /payment_notification_url HTTP/1.1
Host: customer.com
Content-Type: application/json
User-Agent: Volt/2.0
X-Volt-Timed: 20200131123456
X-Volt-Signed: eda5e46baa6a676851975365e12b4ae61ee48442c0cbb8d0e3c3cfd47c3e1085
X-Volt-Type: payment_not_received

Notification body

{
  "payment":"75809566-3fbe-4f14-bd8d-e6cd49ecedb7",
  "reference":"PayerReference",
  "merchantInternalReference": "Order for a trip to Greece 20-27.08.2023",
  "amount":1234567,
  "status":"NOT_RECEIVED",
  "currency":"GBP",
  "timestamp":"2019-10-28T12:34:56+01:00"
}

Notification fields

  • payment is Volt's internal ID for the payment, as returned in your initial payment request
  • reference is the reference you specified for the payment
  • merchantInternalReference is an optional longer reference for the payment
  • amount is the amount of the payment, as always in minor units of currency (pence, cents) rather than pounds, euros or dollars
  • status is the status of the payment
  • currency is the currency of the payment
  • timestamp is when the notification was generated

Testing on sandbox

Test what happens when a payment is not received into a Connect account, without having to wait, by using our sandbox environment.

Simply request a payment for any currency that you have a Connect account setup, with an amount of exactly 2050 and process it via one of our mock banks.

Example payment request

{
  "currencyCode": "GBP",
  "amount": 2050,
  "type": "OTHER",
  "uniqueReference": "test54321",
  "merchantInternalReference": "Order for a trip to Greece 20-27.08.2023",
  "payer": {
    "reference": "u59kt9yh",
    "email": "john.smith@example.com",
    "name": "John Smith",
    "ip": "192.168.0.1"
  }
}

Expected result

You should receive a NOT_RECEIVED notification as detailed above and the payment should be visible in Fuzebox.

How is this guide?

Last updated on

On this page