Payments
Payouts

Payouts

At any time you can pay out funds from you Virtual Account to an external account.

Initiating Payout

You can initiate Payout in the following way:

  • From Merchant Portal, Balances section
  • Using Volume API

Initiating Payout in Merchant Portal

In order to make a Payout, please go to Balances section and press Make Payout next to the account you want to make payment from.

BalancesBeforePayment

PayoutDialog

Once you've made the payment and it has been finished, you'll see change in balance reflected in the same Balances page.

BalancesAfterPayment

Payout status

Payout status is delivered to you by Payout Webhooks.

Payout status has following values:

StatusDescription
IN_PROGRESSpayment is in progress
PROCESSEDpayment is was processed (does not mean delivered)
CANCELLEDpayment was cancelled
FAILEDpayment failed
HELDpayment is held and may require contact with volume for it's further processing
RETURNEDpayment was delivered to destination account and returned

Payout status delivered by Webhooks

Once you've configured Payout Webhook URL in Merchant Portal, in Settings->Webhooks And Callbacks section, you will be provided with a Webhook for any status change.

Delivery guarantee

Each webhook is delivered until your endpoint answers with 200 OK.

Body

Webhook calls will be delivered as PUT REST call with following payload

{
 "eventTimeUtc" : "2024-11-07T07:55:27.004128Z",
 "applicationId" : "62b36790-f8cd-4764-8e19-2e19ada49cb1",
 "payoutId" : "50cb26b8-1a2d-4455-ba2a-f1c229779500",
 "payoutAmount" : 0.30,
 "payoutCurrency" : "GBP",
 "payoutReference" : "241107073325914PYB",
 "payoutStatus" : "IN_PROGRESS",
 "payoutStatusDescription" : "",
 "payoutWebhookDeliveryAttempt" : 0,
 "destination" : {
   "type" : "SCAN",
   "name" : "John Smith",
   "accountNumber" : "12345678",
   "sortCode" : "123456"
 }
}

Important headers

Expect this call with following headers:

HeaderValue
Content-Typeapplication/json
Acceptapplication/json
Authorizationsignature of the request calculated as described here

Security

You can verify webhook integrity by checking it's signature passed via Authorization header. Mechanism is identical to signature verification if regular payment webhooks. You can find description here

Initiating Payout using Volume API

You can also initiate a Payout using Volume's API.

Please contact your Customer Success Manager or send us an email at support@getvolume.com to request access to this feature.

Prerequisites

In order to initiate a payout via the API, you would need to obtain the details below:

Payout API Initiation

Request Example

curl --location --request POST 'https://api.sandbox.volumepay.io/api/payouts' \
--header 'Content-Type: application/vnd.volume.v1.0+json' \
--header 'x-application-id: application-id' \
--header 'x-application-secret: application-secret' \
--data '{
    "applicationId": "41f75930-ef98-40d8-b6f7-5ee2b01bd3b3",
    "payInAccountSelector": "gbp-va-o",
    "amount": 100,
    "destination": {
        "destinationType": "toAccount",
        "accountType": "SCAN",
        "holderName": "John Doe",
        "accountNumber": "12098709",
        "sortCode": "185008"
    }
}'

API Request Properties

argumentkindtypedescription
Content-TypeheaderStringapplication/vnd.volume.v0.7+json
x-application-idheaderUUIDid of the merchant application
x-application-secretheaderUUIDprivate key of the merchant application
applicationIdbodyUUIDid of the merchant application
payInAccountSelectorbodyStringsource account ID
amountbodyNumberamount to pay
destinationTypebodyStringtype of the payout. Currently, only "toAccount" is supported
accountTypebodyStringtype of the destination account. Currently only "SCAN" is supported
holderNamebodyStringdestination account holder name
accountNumberbodyStringdestination account number
sortCodebodyStringdestination account sort code

Response Example

{
    "applicationId": "41f75930-ef98-40d8-b6f7-5ee2b01bd3b3",
    "payoutId": "83c0c8a4-b087-4e09-acfa-952d58a62c98",
    "createdAt": "2025-12-01T11:12:24.833190085Z",
    "status": "IN_PROGRESS",
    "amount": 100,
    "reference": "25120111743381MRH2",
    "currency": "GBP",
    "source": {
        "type": "SCAN",
        "name": "Volume Demo",
        "accountNumber": "10000101",
        "sortCode": "001101",
        "iban": null
    },
    "destination": {
        "type": "SCAN",
        "name": "John Doe",
        "accountNumber": "12098709",
        "sortCode": "185008",
        "iban": null
    },
    "tracingId": "692d7817000000004039fae2c94c943c"
}

API Response Properties

argumenttypedescription
applicationIdUUIDid of the merchant application
payoutIdUUIDid of the payout
createdAtstringid of the merchant application
statusstringinitial payout status. Supported values: IN_PROGRESS, PROCESSED, FAILED, HELD, RETURNED
amountNumberamount to pay
referencestringreference of the payment
currencystringcurrency of the payment
source.typeStringtype of the source account
source.nameStringsource account holder name
source.accountNumberStringsource account number
source.sortCodeStringsource account sort code
source.ibanStringsource iban
destination.typeStringtype of the destination account
destination.nameStringdestination account holder name
destination.accountNumberStringdestination account number
destination.sortCodeStringdestination account sort code
destination.ibanStringdestination iban
tracingIdStringAPI response tracing ID

Payout API Status Request

You should rely on webhooks as your primary source for payout status updates. However, you may also use our GET API endpoint to retrieve real-time payout status when needed.

Request Example

curl --location --request GET 'https://api.sandbox.volumepay.io/api/payouts/{payoutId}' \
--header 'Content-Type: application/vnd.volume.v1.0+json' \
--header 'x-application-id: application-id' \
--header 'x-application-secret: application-secret' \

Payout Statuses

StatusDescription
IN_PROGRESSpayout is in progress
PROCESSEDpayout was processed (does not mean delivered)
FAILEDpayout failed
HELDpayout is temporeraly held and may require contact with Volume for it's further processing
RETURNEDpayment was delivered to destination account and returned