Initiation & Scheduling
Get merchant hosted payment form.
GET /v1/merchant/payment/form/{terminalOrMerchantOrQrCodeReference}
Sample
GET /v1/merchant/payment/form/25441723-1A78-4345-A667-2C462DA525F1?amount=100.50¤cy=GHSAuth: Access token (Bearer).
Parameters
| Name | In | Required | Description |
|---|---|---|---|
terminalOrMerchantOrQrCodeReference | path | Yes | A globally unique terminal reference (UUID) or globally unique merchant reference (UUID) or globally unique QR code reference (UUID). |
amount | query | No | The amount (in cents, no decimal points) requested for payment. |
currency | query | No | The three character ISO code for the currency of the payment. |
redirectUrl | query | No | Optional URL to redirect to when the payment is complete. |
showQrCode | query | No | Optionally show the V2 EMV QR Code to scan for payment. |
timestamp | query | No | Optional timestamp from the initiating client. |
templateName | query | No | Optional name of the template file to use instead of the partner specific one. |
notificationEmailTemplateName | query | No | Optional name of the notification email template file to use instead of the partner default. |
options | query | No | Optional set of options that the client can parse and change the UI. |
Responses
| Status | Description |
|---|---|
200 | The request was successful and the merchant payment form content was returned. |
400 | The request failed validation, the error object will contain further information. |
404 | The request was successful but does not return any results. |
422 | The request payload is invalid, the error object will contain further information. |
429 | Too many requests are being sent concurrently or rate limiting has taken effect. |
500 | An unexpected error occurred, the error object will contain further information. |
Response body
"string"Code samples
// @vantagepay/vantagepay
// A hosted (browser) payment form URL - open it directly rather than calling it as an API.
const url = baseUrl + '/v1/merchant/payment/form/' + terminalOrMerchantOrQrCodeReference
window.open(url)// VantagePay.SDK
// A hosted (browser) payment form endpoint - navigate to the URL rather than calling it as an API.
var url = $"https://sandbox-api.vantagepay.dev/v1/merchant/payment/form/{terminalOrMerchantOrQrCodeReference}";Get merchant offline hosted payment form.
GET /v1/merchant/payment/form/offline
Auth: Access token (Bearer).
Parameters
| Name | In | Required | Description |
|---|---|---|---|
x | query | No | A pipe-delimited set of values in the following order: ClientTimestamp |
Responses
| Status | Description |
|---|---|
200 | The request was successful and the merchant payment form content was returned. |
400 | The request failed validation, the error object will contain further information. |
404 | The request was successful but does not return any results. |
422 | The request payload is invalid, the error object will contain further information. |
429 | Too many requests are being sent concurrently or rate limiting has taken effect. |
500 | An unexpected error occurred, the error object will contain further information. |
Response body
"string"Code samples
// @vantagepay/vantagepay
// Build the offline hosted payment-form URL for a scanned QR code.
const url = client.payments.getOfflinePaymentFormUrl(Date.now(), merchantId, terminalId, batchNumber, options)// VantagePay.SDK
// Build the offline hosted payment-form URL for a scanned QR code.
var url = client.Payments.GetOfflinePaymentFormUrl(timestamp, merchantId, terminalId, options);Initiate a payment by providing a payment request that contains the details of where to source funds from and where to transfer funds to.
POST /v1/pay
Sample - Pay into a Bank Account from a Mobile Wallet - Use required fields only
POST /v1/pay
{
"paymentSources": {
"mobileWallets": [
{
"mobileWalletOperator": "MTN",
"msisdn": "233111222333",
"amountInCents": 133,
"currency": "GHS"
}
]
},
"paymentDestinations": {
"bankAccounts": [
{
"accountNumber": "111222333",
"bank": "ABG",
"amountInCents": 133,
"currency": "GHS"
}
]
}
}Sample - Scan a QR Code and pay a Merchant from a Mobile Wallet
POST /v1/pay
{
"channel": 1,
"yourReference": "{{$guid}}",
"description": "Sample Payment",
"consumer": {
"firstName": "John",
"lastName": "Wick",
"emailAddress": "demo@vantagepay.com",
"mobileNumber": "233111222333",
"countryIsoCode": "GHA"
},
"paymentSources": {
"mobileWallets": [
{
"mobileWalletOperator": "MTN",
"msisdn": "233111222333",
"amountInCents": 133,
"currency": "GHS"
}
]
},
"paymentDestinations": {
"qrCodes": [
{
"qrCode":"00020101021251510007V2EmvQR01368e3b8880-3f6c-48e6-b0fc-561ae9d9f0d502164957030013982287520459935802GH5914AllanVisaTest26005Accra61052302154041.00530393662360108202110060506ZGA-560710Terminal 163043E24",
"amountInCents": 133,
"currency": "GHS"
}
]
},
"location": {
"longitude": -73.899020,
"latitude": 40.654170
},
"paymentStatusWebhook": {
"callbackUrl": "https://your.callback.endpoint",
"onPaymentCompleteOnly": true
}Sample - Pay a Merchant (Delayed Settlement) from a Credit Card
POST /v1/pay
{
"channel": 1,
"yourReference": "{{$guid}}",
"description": "Sample Payment",
"consumer": {
"firstName": "John",
"lastName": "Wick",
"emailAddress": "demo@vantagepay.com",
"mobileNumber": "233111222333",
"countryIsoCode": "GHA"
},
"paymentSources": {
"cards": [
{
"amountInCents": 133,
"currency": "GHS",
"nameOnCard": "John Wick",
"cardNumber": "5200000000000114",
"cvv": "123",
"expiryMonth": "09",
"expiryYear": "2022",
"cardHolder": {
"firstName": "John",
"lastName": "Wick",
"emailAddress": "demo@vantagepay.com",
"phoneNumber": "233111222333",
"countryIsoCode": "GHA"
},
"billingAddress": {
"addressLine1": "No. 23 Bissau Avenue",
"addressLine2": "Accra",
"postalCode": "00233",
"city": "Accra",
"state": "",
"countryIsoCode": "GHA"
}
}
]
},
"paymentDestinations": {
"merchants": [
{
"amountInCents": 133,
"currency": "GHS",
"merchantReference": "{{$guid}}",
"merchantSource": "ZGA"
}
]
},
"location": {
"longitude": -73.899020,
"latitude": 40.654170
},
"paymentStatusWebhook": {
"callbackUrl": "https://your.callback.endpoint",
"onPaymentCompleteOnly": true
}
}Sample - Pay into a Bank Account from a Mobile Wallet
POST /v1/pay
{
"channel": 1,
"yourReference": "{{$guid}}",
"description": "Sample Payment",
"consumer": {
"firstName": "John",
"lastName": "Wick",
"emailAddress": "demo@vantagepay.com",
"mobileNumber": "233111222333",
"countryIsoCode": "GHA"
},
"paymentSources": {
"mobileWallets": [
{
"mobileWalletOperator": "MTN",
"msisdn": "233111222333",
"amountInCents": 133,
"currency": "GHS"
}
]
},
"paymentDestinations": {
"bankAccounts": [
{
"accountNumber": "111222333",
"bank": "ABG",
"amountInCents": 133,
"currency": "GHS"
}
]
},
"location": {
"longitude": -73.899020,
"latitude": 40.654170
},
"paymentStatusWebhook": {
"callbackUrl": "https://your.callback.endpoint",
"onPaymentCompleteOnly": true
}
}Sample - Scan a QR Code and pay a Merchant from a Bank Account
POST /v1/pay
{
"channel": 1,
"yourReference": "{{$guid}}",
"description": "Sample Payment",
"consumer": {
"firstName": "John",
"lastName": "Wick",
"emailAddress": "demo@vantagepay.com",
"mobileNumber": "233111222333",
"countryIsoCode": "GHA"
},
"paymentSources": {
"bankAccounts":[
{
"amountInCents": 133,
"currency": "GHS",
"bank": "FBL",
"accountNumber": "0011223344",
}
]
},
"paymentDestinations": {
"qrCodes": [
{
"qrCode":"00020101021251510007V2EmvQR01368e3b8880-3f6c-48e6-b0fc-561ae9d9f0d502164957030013982287520459935802GH5914AllanVisaTest26005Accra61052302154041.00530393662360108202110060506ZGA-560710Terminal 163043E24",
"amountInCents": 133,
"currency": "GHS"
}
]
},
"location": {
"longitude": -73.899020,
"latitude": 40.654170
},
"paymentStatusWebhook": {
"callbackUrl": "https://your.callback.endpoint",
"onPaymentCompleteOnly": true
}
}Sample - Pay into a Bank Account from a Credit Card using mandatory Credit Card details only
POST /v1/pay
{
"channel": 1,
"yourReference": "{{$guid}}",
"description": "Sample Payment",
"consumer": {
"firstName": "John",
"lastName": "Wick",
"emailAddress": "demo@vantagepay.com",
"mobileNumber": "233111222333",
"countryIsoCode": "GHA"
},
"paymentSources": {
"cards": [
{
"amountInCents": 133,
"currency": "GHS",
"nameOnCard": "John Wick",
"cardNumber": "5200000000000114",
"cvv": "123",
"expiryMonth": "09",
"expiryYear": "2022"
}
]
},
"paymentDestinations": {
"bankAccounts": [
{
"accountNumber": "111222333",
"bank": "ABG",
"amountInCents": 133,
"currency": "GHS"
}
]
},
"location": {
"longitude": -73.899020,
"latitude": 40.654170
},
"paymentStatusWebhook": {
"callbackUrl": "https://your.callback.endpoint",
"onPaymentCompleteOnly": true
}
}Sample - Pay a Mobile Wallet from another Mobile Wallet
POST /v1/pay
{
"channel": 1,
"yourReference": "{{$guid}}",
"description": "Sample Payment",
"consumer": {
"firstName": "John",
"lastName": "Wick",
"emailAddress": "demo@vantagepay.com",
"mobileNumber": "233111222333",
"countryIsoCode": "GHA"
},
"paymentSources": {
"mobileWallets": [
{
"amountInCents": 133,
"msisdn": "233111222333",
"mobileWalletOperator": "MTN",
"currency": "GHS"
}
]
},
"paymentDestinations": {
"mobileWallets": [
{
"amountInCents": 133,
"msisdn": "233444555666",
"mobileWalletOperator": "VDF",
"currency": "GHS"
}
]
},
"location": {
"longitude": -73.899020,
"latitude": 40.654170
},
"paymentStatusWebhook": {
"callbackUrl": "https://your.callback.endpoint",
"onPaymentCompleteOnly": true
}
}Sample - Pay a Bill from a Mobile Wallet
{
"channel": 1,
"yourReference": "{{$guid}}",
"description": "Sample Payment",
"consumer": {
"firstName": "John",
"lastName": "Wick",
"emailAddress": "demo@vantagepay.com",
"mobileNumber": "233111222333",
"countryIsoCode": "GHA",
"addresses": [
{
"addressType": "BILL",
"addressLine1": "No. 23 Bissau Avenue",
"addressLine2": "East Legon",
"postalCode": "00233",
"city": "Accra",
"state": "Fake State",
"countryIsoCode": "GHA"
}
]
},
"paymentSources": {
"mobileWallets": [
{
"amountInCents": 133,
"currency": "GHS",
"msisdn": "233123456789",
"mobileWalletOperator": "MTN"
}
]
},
"paymentDestinations": {
"bills": [
{
"amountInCents": 133,
"currency": "GHS",
"productReference": "e8292091-e563-465a-af71-3569d90913a2",
"productFields":
{
"accountRef": "201801603",
"test": "hello"
}
}
]
},
"location": {
"longitude": -73.899020,
"latitude": 40.654170
},
"paymentStatusWebhook": {
"callbackUrl": "https://your.callback.endpoint",
"onPaymentCompleteOnly": true
}
}Auth: Access token (Bearer).
Request body
| Field | Type | Required | Description |
|---|---|---|---|
paymentSources | object | Yes | Model to hold lists of Cards and Mobile Money accounts from which a payment must be made. |
paymentDestinations | object | Yes | Model to hold lists of Merchants who must be paid. |
channel | Unknown, Web, USSD, Callback, Generated, Settlement, Scheduled, MobileApplication, SDK, POS, SuperPOS | No | Specify the channel that this payment originated from. |
yourReference | string? | No | A unique client reference for this payment. This is optional to detect duplicate calls and also allow you to associate payments with your own internal reference numbers. |
splitReference | string? | No | An optional reference that is associated with every transaction batch that participates in a split payment. This is used for split payments in environments like restaurants where multiple transaction batches contribute to one common bill. The client processing the split payment is responsible for generating this reference and ensuring that all transaction batches that are part of the split payment are associated with the same split reference. |
consumer | object | No | Core identity and contact details for a consumer (end user). |
merchant | object | No | Core identity, categorisation, and contact details for a merchant. |
location | object | No | A geographic coordinate with an optional time zone and description. Used to pin an address or entity on a map. |
paymentStatusWebhook | object | No | A model to hold the details of a web hook that a caller of this API would like to be called back on. |
description | string? | No | A text description of the payment. Sometimes also referred to as a Narration. |
recurrenceSchedule | object | No | Defines a recurrence schedule for a repeating payment, specifying the interval, end condition, and historical schedule entries. |
lineItems | array<object>? | No | A list of line items associated with this payment. |
{
"paymentSources": {
"cards": [],
"mobileWallets": [],
"bankAccounts": [],
"wallets": [],
"cash": {},
"applePay": {},
"googlePay": {}
},
"paymentDestinations": {
"merchants": [],
"mobileWallets": [],
"bankAccounts": [],
"qrCodes": [],
"cards": [],
"wallets": [],
"bills": [],
"cash": {}
},
"channel": "Unknown",
"yourReference": "string",
"splitReference": "00000000-0000-0000-0000-000000000000",
"consumer": {
"reference": "00000000-0000-0000-0000-000000000000",
"yourReference": "string",
"source": "string",
"userReference": "00000000-0000-0000-0000-000000000000",
"firstName": "string",
"lastName": "string",
"middleName": "string",
"emailAddress": "string",
"mobileNumber": "string",
"countryIsoCode": "None",
"dateOfBirth": "string",
"gender": "Male",
"preferredLanguage": "None",
"kycStatusSummary": "Unverified",
"isActive": true
},
"merchant": {
"reference": "00000000-0000-0000-0000-000000000000",
"userReference": "00000000-0000-0000-0000-000000000000",
"yourReference": "string",
"source": "string",
"name": "string",
"categoryCode": 0,
"category": "string",
"emailAddress": "string",
"mobileNumber": "string",
"countryIsoCode": "None",
"currency": "None",
"kybStatusSummary": "Unverified",
"shortCode": 0,
"isActive": true
},
"location": {
"latitude": 0,
"longitude": 0,
"timeZone": "string",
"description": "string"
},
"paymentStatusWebhook": {
"callbackUrl": "string",
"onPaymentCompleteOnly": true
},
"description": "string",
"recurrenceSchedule": {
"repeatInterval": "Weekly",
"scheduleEndDate": "string",
"repeatCount": 0
},
"lineItems": [
{}
]
}Responses
| Status | Description |
|---|---|
202 | The payment request was received and processed successfully. |
400 | The request failed validation, the error object will contain further information. |
401 | The authorization information provided is not valid, authentication is required to access this resource. |
403 | The authorization header does not contain the correct type or you do not have access to this resource. |
422 | The request payload is invalid, the error object will contain further information. |
429 | Too many requests are being sent concurrently or rate limiting has taken effect. |
500 | An unexpected error occurred, the error object will contain further information. |
Response body
| Field | Type | Required | Description |
|---|---|---|---|
success | boolean | No | Gets a value indicating whether the operation was successful. |
result | object | No | Model to hold details of a response to a payment request. |
{
"success": true,
"result": {
"reference": "00000000-0000-0000-0000-000000000000",
"paymentStatusUrls": {}
}
}Code samples
// @vantagepay/vantagepay
import { ApiError, OnPaymentComplete } from '@vantagepay/vantagepay'
client.events.subscribe(OnPaymentComplete, (_, status) => {
console.log('Payment complete:', status.paymentReference)
})
try {
const status = await client.payments.pay({
yourReference: 'ORDER-1001',
paymentSources: {
mobileWallets: [{ mobileWalletOperator: 'MTN', msisdn: '233555666112', amountInCents: 5000, currency: 'GHS' }],
},
paymentDestinations: {
merchants: [{ merchantReference: '3fa85f64-5717-4562-b3fc-2c963f66afa6', amountInCents: 5000, currency: 'GHS', paymentType: 'BuyingGoods' }],
},
})
console.log('Initial status:', status.percentageComplete)
} catch (error) {
if (error instanceof ApiError) console.error(error.statusCode, error.message)
else throw error
}// VantagePay.SDK
using System.Collections.Generic;
using VantagePay.Models.Lookups;
using VantagePay.Models.Payments;
using VantagePay.Models.Payments.Requests;
client.Payments.OnPaymentComplete = status => Console.WriteLine($"Complete: {status.PaymentReference}");
var initialStatus = await client.Payments.PayAsync(new PaymentRequest
{
YourReference = "ORDER-1001",
PaymentSources = new PaymentSources
{
MobileWallets = new List<MobileWalletSource>
{
new() { MobileWalletOperator = MobileWalletOperator.MTN, Msisdn = "233555666112", AmountInCents = 5000, Currency = Currency.GHS },
},
},
PaymentDestinations = new PaymentDestinations
{
Merchants = new List<MerchantDestination>
{
new() { MerchantReference = "3fa85f64-5717-4562-b3fc-2c963f66afa6", AmountInCents = 5000, Currency = Currency.GHS, PaymentType = MerchantPaymentType.BuyingGoods },
},
},
});Generate a settlement batch for a batch number.
POST /v1/pay/merchant/external-settlement
Auth: Access token (Bearer).
Request body
| Field | Type | Required | Description |
|---|---|---|---|
merchantAccountNumber | string? | No | The merchant account number as returned by the terminal, with leading zeros stripped. |
terminalNumber | string? | No | The terminal identifier, left-padded to 8 digits and with leading zeros stripped before padding. |
batchNumber | string? | No | The settlement batch number, left-padded to 3 digits. |
transactionDateUtc | string | No | The UTC date and time the terminal submitted the settlement batch. |
timeZone | string? | No | The IANA or Windows time-zone identifier for the terminal's local time, used to display settlement times in the correct zone. |
transactionReference | string? | No | The unique transaction reference assigned to this settlement batch by the payment engine. |
currency | one of 106 values (e.g. None, AFN, ALL, ...) | No | The currency in which the settlement batch was processed. |
batchFailedReference | string? | No | The reference returned by the host for any transactions that failed to settle. |
batchFailedCount | integer | No | The number of transactions in the batch that failed to settle. |
totalTransactionCount | integer | No | The total number of transactions included in the settlement batch. |
totalTransactionAmountInCents | integer | No | The aggregate settled amount in cents across all transactions in the batch. |
debitCardTransactionCount | integer | No | The number of debit-card transactions included in the batch. |
debitCardTransactionAmountInCents | integer | No | The aggregate debit-card settled amount in cents. |
resultCode | string? | No | The ISO 8583 result code returned by the acquirer host for the settlement batch. |
resultText | string? | No | A human-readable description of the ZGA.Core.Models.Payments.ExternalCardSettlementData.ResultCode. |
message | string? | No | A short message describing the overall outcome of the settlement batch. |
hostResponse | string? | No | The raw response string returned by the acquiring host. |
location | object | No | A geographic coordinate with an optional time zone and description. Used to pin an address or entity on a map. |
{
"merchantAccountNumber": "string",
"terminalNumber": "string",
"batchNumber": "string",
"transactionDateUtc": "string",
"timeZone": "string",
"transactionReference": "string",
"currency": "None",
"batchFailedReference": "string",
"batchFailedCount": 0,
"totalTransactionCount": 0,
"totalTransactionAmountInCents": 0,
"debitCardTransactionCount": 0,
"debitCardTransactionAmountInCents": 0,
"resultCode": "string",
"resultText": "string",
"message": "string",
"hostResponse": "string",
"location": {
"latitude": 0,
"longitude": 0,
"timeZone": "string",
"description": "string"
}
}Responses
| Status | Description |
|---|---|
200 | The request was successful but does not return any results. |
400 | The request failed validation, the error object will contain further information. |
401 | The authorization information provided is not valid, authentication is required to access this resource. |
403 | The authorization header does not contain the correct type or you do not have access to this resource. |
422 | The request payload is invalid, the error object will contain further information. |
429 | Too many requests are being sent concurrently or rate limiting has taken effect. |
500 | An unexpected error occurred, the error object will contain further information. |
Response body
| Field | Type | Required | Description |
|---|---|---|---|
success | boolean | No | Gets a value indicating whether the operation was successful. |
{
"success": true
}Code samples
// @vantagepay/vantagepay
// POS terminal integration - typically driven from the .NET SDK.
// Not wrapped by the JavaScript SDK - call the endpoint directly with the active token.
const response = await fetch(baseUrl + '/v1/pay/merchant/external-settlement', {
method: 'POST',
headers: { Authorization: 'Bearer ' + ApiTokens.accessToken },
})
const result = await response.json()// VantagePay.SDK
using VantagePay.Models.Payments;
using VantagePay.Models.Lookups;
await client.Payments.CreateSettlementBatchAsync(new ExternalCardSettlementData
{
MerchantAccountNumber = "12345678",
TerminalNumber = "00000042",
BatchNumber = "001",
Currency = Currency.ZAR,
TotalTransactionCount = 12,
TotalTransactionAmountInCents = 150000,
ResultCode = "0",
TransactionReference = "e1d2c3b4-a5f6-4738-9a0b-1c2d3e4f5a6b",
});Generate a transaction for an external card payment.
POST /v1/pay/merchant/external-card
Auth: Access token (Bearer).
Request body
| Field | Type | Required | Description |
|---|---|---|---|
transactionDateUtc | string | No | The UTC date and time the terminal submitted the transaction. |
timeZone | string? | No | The IANA or Windows time-zone identifier for the terminal's local time. |
transactionBatchReference | string? | No | The payment engine transaction batch reference associated with this terminal transaction. |
splitReference | string? | No | A shared split-payment reference that groups multiple batches contributing to the same consumer bill. |
tipEmployeeReference | string? | No | The reference of the employee who should receive the tip, if applicable. |
transactionReference | string? | No | The unique transaction reference assigned by the payment engine. |
transactionNumber | string? | No | The transaction sequence number assigned by the terminal. |
transactionType | string? | No | The transaction type descriptor as returned by the terminal (e.g. PURCHASE, REFUND). |
merchantAccountNumber | string? | No | The merchant account number as returned by the terminal, with leading zeros stripped. |
terminalNumber | string? | No | The terminal identifier, left-padded to 8 digits. |
batchNumber | string? | No | The settlement batch number, left-padded to 3 digits. |
customDescription | string? | No | An optional description that overrides the default transaction label, used for itemised receipts. |
currency | one of 106 values (e.g. None, AFN, ALL, ...) | No | The currency in which the transaction was processed. |
requestedAmountInCents | integer | No | The purchase amount in cents originally requested by the terminal. |
approvedAmountInCents | integer | No | The purchase amount in cents approved by the acquiring host. |
requestedCashbackAmountInCents | integer | No | The cashback amount in cents requested by the cardholder. |
approvedCashbackAmountInCents | integer | No | The cashback amount in cents approved by the acquiring host. |
requestedMerchantFeeInCents | integer | No | The merchant surcharge fee in cents requested. |
approvedMerchantFeeInCents | integer | No | The merchant surcharge fee in cents approved by the acquiring host. |
requestedTaxAmountInCents | integer | No | The tax amount in cents requested. |
approvedTaxAmountInCents | integer | No | The tax amount in cents approved by the acquiring host. |
requestedTipAmountInCents | integer | No | The tip amount in cents requested by the cardholder. |
approvedTipAmountInCents | integer | No | The tip amount in cents approved by the acquiring host. |
maskedCardNumber | string? | No | The masked PAN of the card used (e.g. 411111******1111). |
expiryDate | string? | No | The card expiry date as returned by the terminal (format: MMYY or YYMM depending on scheme). |
authCode | string? | No | The authorisation code returned by the issuer for an approved transaction. |
authMode | string? | No | The authentication mode used (e.g. PIN, SIGNATURE, CONTACTLESS). |
resultCode | string? | No | The ISO 8583 result code returned by the acquiring host (e.g. 00 for approved). |
message | string? | No | A short human-readable outcome message. |
detailedMessage | string? | No | A verbose description of the outcome, supplementing ZGA.Core.Models.Payments.ExternalCardTransactionData.Message. |
hostResponse | string? | No | The raw response string returned by the acquiring host. |
gatewayTransactionReference | string? | No | A unique transaction reference assigned by the payment gateway. |
gatewayResponse | string? | No | The raw JSON or string response returned by the payment gateway. |
avsResponse | string? | No | The Address Verification Service (AVS) response code returned by the issuer. |
cvvResponse | string? | No | The Card Verification Value (CVV/CVC) check response code returned by the issuer. |
issuerResponseCode | string? | No | The ISO 8583 response code returned by the card issuer. |
globalUniqueIdentifier | string? | No | A globally unique identifier assigned to this transaction by the network or acquirer. |
cardPresentFlag | string? | No | Flag indicating whether the card was physically present at the terminal (e.g. 1 = present, 0 = absent). |
entryModeFlag | string? | No | The card-data entry mode flag (e.g. chip, swipe, contactless, manual). |
pinStatusFlag | string? | No | Flag indicating the PIN entry status for this transaction. |
apppn | string? | No | EMV Application Preferred Name (APPPN) from the chip. |
aid | string? | No | EMV Application Identifier (AID) from the chip. |
atc | string? | No | EMV Application Transaction Counter (ATC) from the chip. |
ac | string? | No | EMV Application Cryptogram (AC) generated by the chip for this transaction. |
tvr | string? | No | EMV Terminal Verification Results (TVR) - a bitmap of checks performed by the terminal. |
tsi | string? | No | EMV Transaction Status Information (TSI) - indicates which functions were performed during processing. |
cvm | string? | No | EMV Cardholder Verification Method (CVM) used (e.g. PIN, signature, no CVM). |
ctq | string? | No | EMV Card Transaction Qualifiers (CTQ) - contactless transaction qualifier bitmap. |
stan | string? | No | The Systems Trace Audit Number (STAN) assigned by the terminal for this transaction. |
invoiceNumber | string? | No | The terminal-assigned invoice number for this transaction. |
receiptNumber | string? | No | The receipt number printed on the customer copy. |
nameOnCard | string? | No | The cardholder name as embossed or encoded on the card. |
location | object | No | A geographic coordinate with an optional time zone and description. Used to pin an address or entity on a map. |
printLines | array<string>? | No | Free-text lines to be appended verbatim to the printed receipt. |
lineItems | array<object>? | No | Itemised line items that make up this transaction (products or services purchased). |
clientData | object? | No | A key-value map of arbitrary client data forwarded from the terminal to the payment engine. |
{
"transactionDateUtc": "string",
"timeZone": "string",
"transactionBatchReference": "00000000-0000-0000-0000-000000000000",
"splitReference": "00000000-0000-0000-0000-000000000000",
"tipEmployeeReference": "string",
"transactionReference": "string",
"transactionNumber": "string",
"transactionType": "string",
"merchantAccountNumber": "string",
"terminalNumber": "string",
"batchNumber": "string",
"customDescription": "string",
"currency": "None",
"requestedAmountInCents": 0,
"approvedAmountInCents": 0,
"requestedCashbackAmountInCents": 0,
"approvedCashbackAmountInCents": 0,
"requestedMerchantFeeInCents": 0,
"approvedMerchantFeeInCents": 0,
"requestedTaxAmountInCents": 0,
"approvedTaxAmountInCents": 0,
"requestedTipAmountInCents": 0,
"approvedTipAmountInCents": 0,
"maskedCardNumber": "string",
"expiryDate": "string",
"authCode": "string",
"authMode": "string",
"resultCode": "string",
"message": "string",
"detailedMessage": "string",
"hostResponse": "string",
"gatewayTransactionReference": "string",
"gatewayResponse": "string",
"avsResponse": "string",
"cvvResponse": "string",
"issuerResponseCode": "string",
"globalUniqueIdentifier": "string",
"cardPresentFlag": "string",
"entryModeFlag": "string",
"pinStatusFlag": "string",
"apppn": "string",
"aid": "string",
"atc": "string",
"ac": "string",
"tvr": "string",
"tsi": "string",
"cvm": "string",
"ctq": "string",
"stan": "string",
"invoiceNumber": "string",
"receiptNumber": "string",
"nameOnCard": "string",
"location": {
"latitude": 0,
"longitude": 0,
"timeZone": "string",
"description": "string"
},
"printLines": [
"string"
],
"lineItems": [
{}
],
"clientData": {}
}Responses
| Status | Description |
|---|---|
202 | The payment request was submitted successfully. |
400 | The request failed validation, the error object will contain further information. |
401 | The authorization information provided is not valid, authentication is required to access this resource. |
403 | The authorization header does not contain the correct type or you do not have access to this resource. |
422 | The request payload is invalid, the error object will contain further information. |
429 | Too many requests are being sent concurrently or rate limiting has taken effect. |
500 | An unexpected error occurred, the error object will contain further information. |
Response body
| Field | Type | Required | Description |
|---|---|---|---|
success | boolean | No | Gets a value indicating whether the operation was successful. |
result | object | No | Model to hold details of a response to a payment request. |
{
"success": true,
"result": {
"reference": "00000000-0000-0000-0000-000000000000",
"paymentStatusUrls": {}
}
}Code samples
// @vantagepay/vantagepay
// POS terminal integration - typically driven from the .NET SDK.
// Not wrapped by the JavaScript SDK - call the endpoint directly with the active token.
const response = await fetch(baseUrl + '/v1/pay/merchant/external-card', {
method: 'POST',
headers: { Authorization: 'Bearer ' + ApiTokens.accessToken },
})
const result = await response.json()// VantagePay.SDK
using VantagePay.Models.Payments;
using VantagePay.Models.Lookups;
var status = await client.Payments.PayMerchantAsync(new ExternalCardTransactionData
{
TransactionReference = "e1d2c3b4-a5f6-4738-9a0b-1c2d3e4f5a6b",
MerchantAccountNumber = "12345678",
TerminalNumber = "00000042",
Currency = Currency.ZAR,
RequestedAmountInCents = 5000,
ApprovedAmountInCents = 5000,
MaskedCardNumber = "411111******1111",
ResultCode = "0",
TransactionType = "PURCHASE",
});Cancel/reverse an external card payment made to a merchant.
POST /v1/pay/merchant/external-card/cancel
Auth: Access token (Bearer).
Request body
| Field | Type | Required | Description |
|---|---|---|---|
transactionDateUtc | string | No | The UTC date and time the terminal submitted the transaction. |
timeZone | string? | No | The IANA or Windows time-zone identifier for the terminal's local time. |
transactionBatchReference | string? | No | The payment engine transaction batch reference associated with this terminal transaction. |
splitReference | string? | No | A shared split-payment reference that groups multiple batches contributing to the same consumer bill. |
tipEmployeeReference | string? | No | The reference of the employee who should receive the tip, if applicable. |
transactionReference | string? | No | The unique transaction reference assigned by the payment engine. |
transactionNumber | string? | No | The transaction sequence number assigned by the terminal. |
transactionType | string? | No | The transaction type descriptor as returned by the terminal (e.g. PURCHASE, REFUND). |
merchantAccountNumber | string? | No | The merchant account number as returned by the terminal, with leading zeros stripped. |
terminalNumber | string? | No | The terminal identifier, left-padded to 8 digits. |
batchNumber | string? | No | The settlement batch number, left-padded to 3 digits. |
customDescription | string? | No | An optional description that overrides the default transaction label, used for itemised receipts. |
currency | one of 106 values (e.g. None, AFN, ALL, ...) | No | The currency in which the transaction was processed. |
requestedAmountInCents | integer | No | The purchase amount in cents originally requested by the terminal. |
approvedAmountInCents | integer | No | The purchase amount in cents approved by the acquiring host. |
requestedCashbackAmountInCents | integer | No | The cashback amount in cents requested by the cardholder. |
approvedCashbackAmountInCents | integer | No | The cashback amount in cents approved by the acquiring host. |
requestedMerchantFeeInCents | integer | No | The merchant surcharge fee in cents requested. |
approvedMerchantFeeInCents | integer | No | The merchant surcharge fee in cents approved by the acquiring host. |
requestedTaxAmountInCents | integer | No | The tax amount in cents requested. |
approvedTaxAmountInCents | integer | No | The tax amount in cents approved by the acquiring host. |
requestedTipAmountInCents | integer | No | The tip amount in cents requested by the cardholder. |
approvedTipAmountInCents | integer | No | The tip amount in cents approved by the acquiring host. |
maskedCardNumber | string? | No | The masked PAN of the card used (e.g. 411111******1111). |
expiryDate | string? | No | The card expiry date as returned by the terminal (format: MMYY or YYMM depending on scheme). |
authCode | string? | No | The authorisation code returned by the issuer for an approved transaction. |
authMode | string? | No | The authentication mode used (e.g. PIN, SIGNATURE, CONTACTLESS). |
resultCode | string? | No | The ISO 8583 result code returned by the acquiring host (e.g. 00 for approved). |
message | string? | No | A short human-readable outcome message. |
detailedMessage | string? | No | A verbose description of the outcome, supplementing ZGA.Core.Models.Payments.ExternalCardTransactionData.Message. |
hostResponse | string? | No | The raw response string returned by the acquiring host. |
gatewayTransactionReference | string? | No | A unique transaction reference assigned by the payment gateway. |
gatewayResponse | string? | No | The raw JSON or string response returned by the payment gateway. |
avsResponse | string? | No | The Address Verification Service (AVS) response code returned by the issuer. |
cvvResponse | string? | No | The Card Verification Value (CVV/CVC) check response code returned by the issuer. |
issuerResponseCode | string? | No | The ISO 8583 response code returned by the card issuer. |
globalUniqueIdentifier | string? | No | A globally unique identifier assigned to this transaction by the network or acquirer. |
cardPresentFlag | string? | No | Flag indicating whether the card was physically present at the terminal (e.g. 1 = present, 0 = absent). |
entryModeFlag | string? | No | The card-data entry mode flag (e.g. chip, swipe, contactless, manual). |
pinStatusFlag | string? | No | Flag indicating the PIN entry status for this transaction. |
apppn | string? | No | EMV Application Preferred Name (APPPN) from the chip. |
aid | string? | No | EMV Application Identifier (AID) from the chip. |
atc | string? | No | EMV Application Transaction Counter (ATC) from the chip. |
ac | string? | No | EMV Application Cryptogram (AC) generated by the chip for this transaction. |
tvr | string? | No | EMV Terminal Verification Results (TVR) - a bitmap of checks performed by the terminal. |
tsi | string? | No | EMV Transaction Status Information (TSI) - indicates which functions were performed during processing. |
cvm | string? | No | EMV Cardholder Verification Method (CVM) used (e.g. PIN, signature, no CVM). |
ctq | string? | No | EMV Card Transaction Qualifiers (CTQ) - contactless transaction qualifier bitmap. |
stan | string? | No | The Systems Trace Audit Number (STAN) assigned by the terminal for this transaction. |
invoiceNumber | string? | No | The terminal-assigned invoice number for this transaction. |
receiptNumber | string? | No | The receipt number printed on the customer copy. |
nameOnCard | string? | No | The cardholder name as embossed or encoded on the card. |
location | object | No | A geographic coordinate with an optional time zone and description. Used to pin an address or entity on a map. |
printLines | array<string>? | No | Free-text lines to be appended verbatim to the printed receipt. |
lineItems | array<object>? | No | Itemised line items that make up this transaction (products or services purchased). |
clientData | object? | No | A key-value map of arbitrary client data forwarded from the terminal to the payment engine. |
{
"transactionDateUtc": "string",
"timeZone": "string",
"transactionBatchReference": "00000000-0000-0000-0000-000000000000",
"splitReference": "00000000-0000-0000-0000-000000000000",
"tipEmployeeReference": "string",
"transactionReference": "string",
"transactionNumber": "string",
"transactionType": "string",
"merchantAccountNumber": "string",
"terminalNumber": "string",
"batchNumber": "string",
"customDescription": "string",
"currency": "None",
"requestedAmountInCents": 0,
"approvedAmountInCents": 0,
"requestedCashbackAmountInCents": 0,
"approvedCashbackAmountInCents": 0,
"requestedMerchantFeeInCents": 0,
"approvedMerchantFeeInCents": 0,
"requestedTaxAmountInCents": 0,
"approvedTaxAmountInCents": 0,
"requestedTipAmountInCents": 0,
"approvedTipAmountInCents": 0,
"maskedCardNumber": "string",
"expiryDate": "string",
"authCode": "string",
"authMode": "string",
"resultCode": "string",
"message": "string",
"detailedMessage": "string",
"hostResponse": "string",
"gatewayTransactionReference": "string",
"gatewayResponse": "string",
"avsResponse": "string",
"cvvResponse": "string",
"issuerResponseCode": "string",
"globalUniqueIdentifier": "string",
"cardPresentFlag": "string",
"entryModeFlag": "string",
"pinStatusFlag": "string",
"apppn": "string",
"aid": "string",
"atc": "string",
"ac": "string",
"tvr": "string",
"tsi": "string",
"cvm": "string",
"ctq": "string",
"stan": "string",
"invoiceNumber": "string",
"receiptNumber": "string",
"nameOnCard": "string",
"location": {
"latitude": 0,
"longitude": 0,
"timeZone": "string",
"description": "string"
},
"printLines": [
"string"
],
"lineItems": [
{}
],
"clientData": {}
}Responses
| Status | Description |
|---|---|
202 | The payment request was submitted successfully. |
400 | The request failed validation, the error object will contain further information. |
401 | The authorization information provided is not valid, authentication is required to access this resource. |
403 | The authorization header does not contain the correct type or you do not have access to this resource. |
422 | The request payload is invalid, the error object will contain further information. |
429 | Too many requests are being sent concurrently or rate limiting has taken effect. |
500 | An unexpected error occurred, the error object will contain further information. |
Response body
| Field | Type | Required | Description |
|---|---|---|---|
success | boolean | No | Gets a value indicating whether the operation was successful. |
result | object | No | Model to hold details of a response to a payment request. |
{
"success": true,
"result": {
"reference": "00000000-0000-0000-0000-000000000000",
"paymentStatusUrls": {}
}
}Code samples
// @vantagepay/vantagepay
// POS terminal integration - typically driven from the .NET SDK.
// Not wrapped by the JavaScript SDK - call the endpoint directly with the active token.
const response = await fetch(baseUrl + '/v1/pay/merchant/external-card/cancel', {
method: 'POST',
headers: { Authorization: 'Bearer ' + ApiTokens.accessToken },
})
const result = await response.json()// VantagePay.SDK
using VantagePay.Models.Payments;
var status = await client.Payments.CancelMerchantPaymentAsync(new ExternalCardTransactionData
{
TransactionReference = "e1d2c3b4-a5f6-4738-9a0b-1c2d3e4f5a6b",
TransactionBatchReference = Guid.Parse("c7b8a9d0-1234-4567-89ab-cdef01234567"),
MerchantAccountNumber = "12345678",
TerminalNumber = "00000042",
});Pay a merchant.
POST /v1/pay/merchant/{merchantReference}
Sample
POST /v1/pay/merchant/610c3876-5dd4-450d-a12f-901bf2e7b107
{
"channel": 1,
"yourReference": "{{$guid}}",
"description": "Sample Merchant Payment",
"consumer": {
"firstName": "John",
"lastName": "Wick",
"emailAddress": "demo@vantagepay.com",
"mobileNumber": "233111222333",
"countryIsoCode": "GHA"
},
"paymentSources": {
"mobileWallets": [
{
"mobileWalletOperator": "MTN",
"msisdn": "233111222333",
"amountInCents": 133,
"currency": "GHS"
}
]
},
"location": {
"longitude": -73.899020,
"latitude": 40.654170
},
"paymentStatusWebhook": {
"callbackUrl": "https://yourdomain.com/callback",
"onPaymentCompleteOnly": true
}
}Auth: Access token (Bearer).
Parameters
| Name | In | Required | Description |
|---|---|---|---|
merchantReference | path | Yes | The globally unique internal merchant reference (UUID) of the merchant to be paid. |
Request body
| Field | Type | Required | Description |
|---|---|---|---|
paymentSources | object | Yes | Model to hold lists of Cards and Mobile Money accounts from which a payment must be made. |
terminalReference | string? | No | The optional terminal reference if this payment is being made from a merchant controlled device. |
qrCodeReference | string? | No | The optional QR code reference if this payment is being made from a scanned QR code. |
timestamp | integer? | No | The optional timestamp from the client used to calculate an offline verification code. |
notificationEmailAddress | string? | No | An optional email address to notify once the payment has been processed. When provided, a receipt email is sent to this address regardless of the merchant's default notification settings. |
notificationMobileNumber | string? | No | An optional mobile number (MSISDN) to notify once the payment has been processed. When provided, an SMS receipt is sent to this number regardless of the merchant's default notification settings. |
tipAmountInCents | integer | No | An optional tip amount, in the smallest currency unit (e.g. cents), to include on top of the base payment amount. Set to 0 when no tip is applicable. |
tipEmployeeReference | string? | No | An optional reference that identifies the employee who should receive the tip (e.g. a waiter or cashier). Only relevant when ZGA.Core.Models.Payments.Requests.MerchantPaymentRequest.TipAmountInCents is greater than zero. |
channel | Unknown, Web, USSD, Callback, Generated, Settlement, Scheduled, MobileApplication, SDK, POS, SuperPOS | No | Specify the channel that this payment originated from. |
yourReference | string? | No | A unique client reference for this payment. This is optional to detect duplicate calls and also allow you to associate payments with your own internal reference numbers. |
splitReference | string? | No | An optional reference that is associated with every transaction batch that participates in a split payment. This is used for split payments in environments like restaurants where multiple transaction batches contribute to one common bill. The client processing the split payment is responsible for generating this reference and ensuring that all transaction batches that are part of the split payment are associated with the same split reference. |
consumer | object | No | Core identity and contact details for a consumer (end user). |
merchant | object | No | Core identity, categorisation, and contact details for a merchant. |
location | object | No | A geographic coordinate with an optional time zone and description. Used to pin an address or entity on a map. |
paymentStatusWebhook | object | No | A model to hold the details of a web hook that a caller of this API would like to be called back on. |
description | string? | No | A text description of the payment. Sometimes also referred to as a Narration. |
recurrenceSchedule | object | No | Defines a recurrence schedule for a repeating payment, specifying the interval, end condition, and historical schedule entries. |
lineItems | array<object>? | No | A list of line items associated with this payment. |
{
"paymentSources": {
"cards": [],
"mobileWallets": [],
"bankAccounts": [],
"wallets": [],
"cash": {},
"applePay": {},
"googlePay": {}
},
"terminalReference": "00000000-0000-0000-0000-000000000000",
"qrCodeReference": "00000000-0000-0000-0000-000000000000",
"timestamp": 0,
"notificationEmailAddress": "string",
"notificationMobileNumber": "string",
"tipAmountInCents": 0,
"tipEmployeeReference": "string",
"channel": "Unknown",
"yourReference": "string",
"splitReference": "00000000-0000-0000-0000-000000000000",
"consumer": {
"reference": "00000000-0000-0000-0000-000000000000",
"yourReference": "string",
"source": "string",
"userReference": "00000000-0000-0000-0000-000000000000",
"firstName": "string",
"lastName": "string",
"middleName": "string",
"emailAddress": "string",
"mobileNumber": "string",
"countryIsoCode": "None",
"dateOfBirth": "string",
"gender": "Male",
"preferredLanguage": "None",
"kycStatusSummary": "Unverified",
"isActive": true
},
"merchant": {
"reference": "00000000-0000-0000-0000-000000000000",
"userReference": "00000000-0000-0000-0000-000000000000",
"yourReference": "string",
"source": "string",
"name": "string",
"categoryCode": 0,
"category": "string",
"emailAddress": "string",
"mobileNumber": "string",
"countryIsoCode": "None",
"currency": "None",
"kybStatusSummary": "Unverified",
"shortCode": 0,
"isActive": true
},
"location": {
"latitude": 0,
"longitude": 0,
"timeZone": "string",
"description": "string"
},
"paymentStatusWebhook": {
"callbackUrl": "string",
"onPaymentCompleteOnly": true
},
"description": "string",
"recurrenceSchedule": {
"repeatInterval": "Weekly",
"scheduleEndDate": "string",
"repeatCount": 0
},
"lineItems": [
{}
]
}Responses
| Status | Description |
|---|---|
202 | The payment request was submitted and processed successfully. |
400 | The request failed validation, the error object will contain further information. |
422 | The request payload is invalid, the error object will contain further information. |
429 | Too many requests are being sent concurrently or rate limiting has taken effect. |
500 | An unexpected error occurred, the error object will contain further information. |
Response body
| Field | Type | Required | Description |
|---|---|---|---|
success | boolean | No | Gets a value indicating whether the operation was successful. |
result | object | No | A payment response returned to a merchant after initiating a payment, extending the base response with an optional access token. |
{
"success": true,
"result": {
"accessToken": "string",
"reference": "00000000-0000-0000-0000-000000000000",
"paymentStatusUrls": {}
}
}Code samples
// @vantagepay/vantagepay
// Supports anonymous callers; the access token from the response is stored automatically.
const status = await client.payments.payMerchant('3fa85f64-5717-4562-b3fc-2c963f66afa6', {
paymentSources: {
mobileWallets: [{ mobileWalletOperator: 'MTN', msisdn: '233555666112', amountInCents: 5000, currency: 'GHS' }],
},
tipAmountInCents: 0,
})// VantagePay.SDK
using System.Collections.Generic;
using VantagePay.Models.Lookups;
using VantagePay.Models.Payments;
using VantagePay.Models.Payments.Requests;
var status = await client.Payments.PayMerchantAsync(Guid.Parse("3fa85f64-5717-4562-b3fc-2c963f66afa6"), new MerchantPaymentRequest
{
PaymentSources = new PaymentSources
{
MobileWallets = new List<MobileWalletSource>
{
new() { MobileWalletOperator = MobileWalletOperator.MTN, Msisdn = "233555666112", AmountInCents = 5000, Currency = Currency.GHS },
},
},
TipAmountInCents = 0,
});Cancel a recurrence schedule.
DELETE /v1/pay/schedules/{scheduleReference}
This endpoint will cancel a payment recurrence schedule and all schedule entries that have not yet been processed will be cancelled immediately.
Sample
DELETE /v1/pay/schedules/9fd4dff4-5edc-4b28-b593-dc76739a6171Auth: Access token (Bearer).
Parameters
| Name | In | Required | Description |
|---|---|---|---|
scheduleReference | path | Yes | Reference for the recurrence schedule to be cancelled. |
Responses
| Status | Description |
|---|---|
200 | The request was successful but does not return any results. |
400 | The request failed validation, the error object will contain further information. |
401 | The authorization information provided is not valid, authentication is required to access this resource. |
403 | The authorization header does not contain the correct type or you do not have access to this resource. |
404 | The request was successful but does not return any results. |
422 | The request payload is invalid, the error object will contain further information. |
429 | Too many requests are being sent concurrently or rate limiting has taken effect. |
500 | An unexpected error occurred, the error object will contain further information. |
Response body
| Field | Type | Required | Description |
|---|---|---|---|
success | boolean | No | Gets a value indicating whether the operation was successful. |
result | object | No | Defines a recurrence schedule for a repeating payment, specifying the interval, end condition, and historical schedule entries. |
{
"success": true,
"result": {
"repeatInterval": "Weekly",
"scheduleEndDate": "string",
"repeatCount": 0
}
}Code samples
// @vantagepay/vantagepay
// Deletes a recurring-payment schedule. Not wrapped by the JavaScript SDK.
// Not wrapped by the JavaScript SDK - call the endpoint directly with the active token.
const response = await fetch(baseUrl + '/v1/pay/schedules/' + scheduleReference, {
method: 'DELETE',
headers: { Authorization: 'Bearer ' + ApiTokens.accessToken },
})
const result = await response.json()// VantagePay.SDK
await client.Payments.DeletePaymentRecurrenceScheduleAsync(Guid.Parse("11112222-3333-4444-5555-666677778888"));Get all active payment schedules for a given user.
GET /v1/pay/schedules
This endpoint will retrieve a list of all active payment recurrence schedules for the user to which the proffered access token belongs.
Sample
GET /v1/pay/schedulesAuth: Access token (Bearer).
Responses
| Status | Description |
|---|---|
200 | The request was successful but does not return any results. |
400 | The request failed validation, the error object will contain further information. |
401 | The authorization information provided is not valid, authentication is required to access this resource. |
403 | The authorization header does not contain the correct type or you do not have access to this resource. |
422 | The request payload is invalid, the error object will contain further information. |
429 | Too many requests are being sent concurrently or rate limiting has taken effect. |
500 | An unexpected error occurred, the error object will contain further information. |
Response body
| Field | Type | Required | Description |
|---|---|---|---|
success | boolean | No | Gets a value indicating whether the operation was successful. |
result | array<object>? | No | Gets the response payload. |
{
"success": true,
"result": [
{}
]
}Code samples
// @vantagepay/vantagepay
// Lists recurring-payment schedules. Not wrapped by the JavaScript SDK.
// Not wrapped by the JavaScript SDK - call the endpoint directly with the active token.
const response = await fetch(baseUrl + '/v1/pay/schedules', {
method: 'GET',
headers: { Authorization: 'Bearer ' + ApiTokens.accessToken },
})
const result = await response.json()// VantagePay.SDK
await client.Payments.GetPaymentRecurrenceSchedulesAsync();