Skip to content

Profile, Agreement & OTP

Create a new merchant.

POST /v1/merchant

Auth: Access token (Bearer).

Request body

FieldTypeRequiredDescription
createdDatestringNoThe UTC date and time at which this merchant record was created.
loginCredentialsobjectNoLogin credentials for a user account - used to authenticate and generate access tokens.
tradingNamestring?NoThe merchant's trading name if different from their registered business name.
franchiseNamestring?NoThe name of the franchise group this merchant belongs to, if applicable.
capturedBystring?NoThe identifier of the user or system that captured this merchant record.
capturedFromstring?NoThe source system or channel through which this merchant was captured.
industryNone, Retail, Restaurant, Forecourt, WorkshopNoThe industry classification of this merchant's business.
phoneNumberstring?NoThe merchant's landline or switchboard phone number.
notificationEmailAddressstring?NoThe email address to which payment notifications are sent.
notificationMobileNumberstring?NoThe mobile number to which payment notification SMSes are sent.
citystring?NoThe city in which the merchant primarily operates.
statestring?NoThe state or province in which the merchant primarily operates.
languageIsoCodeone of 238 values (e.g. None, AAR, AFR, ...)NoThe merchant's preferred language for communications.
webSiteUrlstring?NoThe merchant's website URL.
isRegistrationCompletebooleanNotrue if the merchant has completed their self-registration flow.
isEmailVerifiedbooleanNotrue if the merchant has verified their email address.
isMobileNumberVerifiedbooleanNotrue if the merchant has verified their mobile number via OTP.
vCardstring?NoA vCard-encoded contact string for this merchant, generated by the system.
logoImagestring?NoA base64-encoded logo image for the merchant, used in hosted payment pages and receipts.
taxNumberstring?NoThe merchant's tax registration number (e.g. VAT number).
companyRegistrationNumberstring?NoThe merchant's company registration number as issued by the registrar.
companyRegistrationDatestring?NoThe date on which the merchant's company was formally registered.
adminPasscodestring?NoAn optional admin passcode for POS terminal access control.
logoUrlstring?NoThe publicly accessible URL of the merchant's logo image.
hostedPaymentUrlstring?NoThe URL for this merchant's hosted payment page (VantagePay-generated).
hostedPaymentOptionsobjectNoConfiguration options for a merchant's hosted (online / card-not-present) payment page, including accepted card schemes and settlement timing.
posOptionsobjectNoFeature flags that control which transaction types and capabilities are enabled on a merchant's POS terminals.
businessobjectNoThe legal business entity associated with a merchant, used for KYB verification and settlement.
addressesarray<object>?NoPhysical addresses linked to this merchant.
employeesarray<object>?NoEmployees associated with this merchant.
terminalsarray<object>?NoPOS terminals configured for this merchant.
filesarray<object>?NoFiles uploaded for this merchant (e.g. KYB documents, business registration certificates).
notificationSettingsarray<object>?NoConfigured notification event preferences for this merchant.
attributesarray<object>?NoCustom attribute values associated with this merchant (partner-specific metadata).
bankAccountsarray<object>?NoBank accounts linked to this merchant for settlement.
mobileWalletsarray<object>?NoMobile money wallet accounts linked to this merchant for settlement.
operatingTimesarray<object>?NoThe operating hours configured for this merchant.
devicesarray<object>?NoMobile and POS devices registered to this merchant for push notification delivery.
qrCodesarray<object>?NoEMV QR codes configured for this merchant.
assignedProductReferencesarray<string>?NoThe set of product references (from other merchants) that this merchant has been granted access to in addition to their own products. Sync semantics on admin merchant update: null = caller did not supply the field (no change is applied); empty collection = all existing assignments are cleared; populated collection = assignments are replaced with exactly the supplied set. The self-service merchant update controller strips this field before persistence so only admins can modify merchant product assignments.
referencestring?NoThe system-assigned unique reference (UUID) for this merchant. Assigned on creation; null on new records before persistence.
userReferencestring?NoThe unique reference (UUID) of the authentication user account associated with this merchant profile, if one exists.
yourReferencestring?NoAn optional external reference from the caller's system that identifies this merchant in their own data store.
sourcestring?NoThe identifier of the originating system or partner that registered this merchant.
namestringYesThe trading name of the merchant.
categoryCodeone of 967 values (e.g. 0, 11, 701, ...)YesThe ISO 18245 Merchant Category Code (MCC) that classifies the merchant's type of business.
categorystring?NoThe display name of the merchant category, derived from ZGA.Core.Models.Merchants.BasicMerchant.CategoryCode.
emailAddressstring?NoThe primary contact email address for the merchant.
mobileNumberstring?NoThe primary contact mobile number for the merchant in international MSISDN format.
countryIsoCodeone of 248 values (e.g. None, AFG, ALB, ...)NoThe ISO 3166-1 alpha-3 country code of the country in which the merchant operates.
currencyone of 106 values (e.g. None, AFN, ALL, ...)YesThe ISO 4217 currency in which the merchant transacts.
kybStatusSummaryUnverified, Verified, PartiallyVerified, RejectedNoA summary of the merchant's Know Your Business (KYB) verification status.
shortCodeinteger?NoA short numeric code assigned to the merchant that can be used as a compact identifier in USSD/QR flows.
isActivebooleanNotrue if the merchant account is currently active and able to accept payments.
json
{
  "createdDate": "string",
  "loginCredentials": {
    "username": "string",
    "password": "string",
    "isLockedOut": true,
    "reasonForLockout": "string"
  },
  "tradingName": "string",
  "franchiseName": "string",
  "capturedBy": "string",
  "capturedFrom": "string",
  "industry": "None",
  "phoneNumber": "string",
  "notificationEmailAddress": "string",
  "notificationMobileNumber": "string",
  "city": "string",
  "state": "string",
  "languageIsoCode": "None",
  "webSiteUrl": "string",
  "isRegistrationComplete": true,
  "isEmailVerified": true,
  "isMobileNumberVerified": true,
  "vCard": "string",
  "logoImage": "string",
  "taxNumber": "string",
  "companyRegistrationNumber": "string",
  "companyRegistrationDate": "string",
  "adminPasscode": "string",
  "logoUrl": "string",
  "hostedPaymentUrl": "string",
  "hostedPaymentOptions": {
    "cardNotPresentMID": 0,
    "isVisaEnabled": true,
    "isMastercardEnabled": true,
    "isAmericanExpressEnabled": true,
    "isDinersEnabled": true,
    "settlementTime": "None"
  },
  "posOptions": {
    "isRefundsEnabled": true,
    "isCancellationsEnabled": true,
    "isPurchaseWithCashbackEnabled": true,
    "isWithdrawalsEnabled": true,
    "isBalanceCheckEnabled": true,
    "isCurrencyConversionEnabled": true,
    "isRcsPaymentEnabled": true,
    "isDebiCheckEnabled": true,
    "isPreAuthorizationEnabled": true,
    "isManualCardEntryEnabled": true,
    "isInvoiceNumberEnabled": true,
    "isPasscodeAlwaysRequired": true,
    "fuelPurchaseMethod": "ByAmount"
  },
  "business": {
    "reference": "00000000-0000-0000-0000-000000000000",
    "parentBusinessReference": "00000000-0000-0000-0000-000000000000",
    "createdDate": "string",
    "yourReference": "string",
    "source": "string",
    "name": "string",
    "emailAddress": "string",
    "mobileNumber": "string",
    "phoneNumber": "string",
    "isEmailVerified": true,
    "isMobileNumberVerified": true,
    "isActive": true
  },
  "addresses": [
    {}
  ],
  "employees": [
    {}
  ],
  "terminals": [
    {}
  ],
  "files": [
    {}
  ],
  "notificationSettings": [
    {}
  ],
  "attributes": [
    {}
  ],
  "bankAccounts": [
    {}
  ],
  "mobileWallets": [
    {}
  ],
  "operatingTimes": [
    {}
  ],
  "devices": [
    {}
  ],
  "qrCodes": [
    {}
  ],
  "assignedProductReferences": [
    "00000000-0000-0000-0000-000000000000"
  ],
  "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
}

Responses

StatusDescription
200The request was successful and a merchant was created.
400The request failed validation, the error object will contain further information.
401The authorization information provided is not valid, authentication is required to access this resource.
403The authorization header does not contain the correct type or you do not have access to this resource.
422The request payload is invalid, the error object will contain further information.
429Too many requests are being sent concurrently or rate limiting has taken effect.
500An unexpected error occurred, the error object will contain further information.

Response body

FieldTypeRequiredDescription
successbooleanNoGets a value indicating whether the operation was successful.
resultobjectNoCore identity, categorisation, and contact details for a merchant.
json
{
  "success": true,
  "result": {
    "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
  }
}

Code samples

ts
// @vantagepay/vantagepay
import { Currency } from '@vantagepay/vantagepay'

const merchant = await client.merchants.createMerchant({
  name: 'Acme Stores',
  tradingName: 'Acme',
  industry: 'Retail',
  city: 'Accra',
  languageIsoCode: 'ENG',
})
csharp
// VantagePay.SDK
using VantagePay.Models.Merchants;
using VantagePay.Models.Lookups;

var merchant = await client.Merchants.CreateMerchantAsync(new Merchant
{
    Name = "Acme Stores",
    TradingName = "Acme",
    Industry = Industry.Retail,
    City = "Accra",
    LanguageIsoCode = Language.ENG,
});

Update your merchant information.

PUT /v1/merchant

Sample

json
PUT /v1/merchant
{
"yourReference": "123456",
"reference": "8a8b9824-ac42-42e5-b955-a7a84425988c",
"category": "5399",
"categoryCode": 5399,
"currency": "GHS",
"emailAddress": "demo@vantagepay.com",
"languageIsoCode": "ENG",
"loginCredentials": null,
"mobileNumber": "233111222333",
"name": "Global Enterprises",
"addresses": [
  {
    "addressLine1": "DEFAULT",
    "addressLine2": "",
    "addressLine3": "",
    "addressType": 1,
    "city": "Accra",
    "countryIsoCode": "GHA",
    "postalCode": "0000",
    "reference": "caba6360-1043-41c7-89ad-7402ffebc392",
    "state": "Gt Accra",
    "yourReference": "ADDRESS_1234",
    "location": {
      "latitude": 0.0,
      "longitude": 0.0,
      "timeZone": "UTC"
    }
  }
],
"attributes": [
  {
    "Id": 8,
    "Name": null,
    "Value": "0241931361"
  }
],
"bankAccount": {
  "accountNumber": "1050325859314",
  "bank": "FBL",
  "currency": "GHS"
},
"employees": [],
"notificationSettings": [],
"operatingTimes": [],
"settlementBankAccount": {
  "accountName": null,
  "accountNumber": "1555555777777",
  "bank": "FBL",
  "currency": "GHS"
},
"terminals": [
  {
    "name": "Terminal 1",
    "qrCodes": null,
    "reference": "dc1ea64e-0b38-4f3d-a15e-179df92b014c",
    "yourReference": "2097",
  }
],
"webSiteUrl": ""

}

Auth: Access token (Bearer).

Request body

FieldTypeRequiredDescription
createdDatestringNoThe UTC date and time at which this merchant record was created.
loginCredentialsobjectNoLogin credentials for a user account - used to authenticate and generate access tokens.
tradingNamestring?NoThe merchant's trading name if different from their registered business name.
franchiseNamestring?NoThe name of the franchise group this merchant belongs to, if applicable.
capturedBystring?NoThe identifier of the user or system that captured this merchant record.
capturedFromstring?NoThe source system or channel through which this merchant was captured.
industryNone, Retail, Restaurant, Forecourt, WorkshopNoThe industry classification of this merchant's business.
phoneNumberstring?NoThe merchant's landline or switchboard phone number.
notificationEmailAddressstring?NoThe email address to which payment notifications are sent.
notificationMobileNumberstring?NoThe mobile number to which payment notification SMSes are sent.
citystring?NoThe city in which the merchant primarily operates.
statestring?NoThe state or province in which the merchant primarily operates.
languageIsoCodeone of 238 values (e.g. None, AAR, AFR, ...)NoThe merchant's preferred language for communications.
webSiteUrlstring?NoThe merchant's website URL.
isRegistrationCompletebooleanNotrue if the merchant has completed their self-registration flow.
isEmailVerifiedbooleanNotrue if the merchant has verified their email address.
isMobileNumberVerifiedbooleanNotrue if the merchant has verified their mobile number via OTP.
vCardstring?NoA vCard-encoded contact string for this merchant, generated by the system.
logoImagestring?NoA base64-encoded logo image for the merchant, used in hosted payment pages and receipts.
taxNumberstring?NoThe merchant's tax registration number (e.g. VAT number).
companyRegistrationNumberstring?NoThe merchant's company registration number as issued by the registrar.
companyRegistrationDatestring?NoThe date on which the merchant's company was formally registered.
adminPasscodestring?NoAn optional admin passcode for POS terminal access control.
logoUrlstring?NoThe publicly accessible URL of the merchant's logo image.
hostedPaymentUrlstring?NoThe URL for this merchant's hosted payment page (VantagePay-generated).
hostedPaymentOptionsobjectNoConfiguration options for a merchant's hosted (online / card-not-present) payment page, including accepted card schemes and settlement timing.
posOptionsobjectNoFeature flags that control which transaction types and capabilities are enabled on a merchant's POS terminals.
businessobjectNoThe legal business entity associated with a merchant, used for KYB verification and settlement.
addressesarray<object>?NoPhysical addresses linked to this merchant.
employeesarray<object>?NoEmployees associated with this merchant.
terminalsarray<object>?NoPOS terminals configured for this merchant.
filesarray<object>?NoFiles uploaded for this merchant (e.g. KYB documents, business registration certificates).
notificationSettingsarray<object>?NoConfigured notification event preferences for this merchant.
attributesarray<object>?NoCustom attribute values associated with this merchant (partner-specific metadata).
bankAccountsarray<object>?NoBank accounts linked to this merchant for settlement.
mobileWalletsarray<object>?NoMobile money wallet accounts linked to this merchant for settlement.
operatingTimesarray<object>?NoThe operating hours configured for this merchant.
devicesarray<object>?NoMobile and POS devices registered to this merchant for push notification delivery.
qrCodesarray<object>?NoEMV QR codes configured for this merchant.
assignedProductReferencesarray<string>?NoThe set of product references (from other merchants) that this merchant has been granted access to in addition to their own products. Sync semantics on admin merchant update: null = caller did not supply the field (no change is applied); empty collection = all existing assignments are cleared; populated collection = assignments are replaced with exactly the supplied set. The self-service merchant update controller strips this field before persistence so only admins can modify merchant product assignments.
referencestring?NoThe system-assigned unique reference (UUID) for this merchant. Assigned on creation; null on new records before persistence.
userReferencestring?NoThe unique reference (UUID) of the authentication user account associated with this merchant profile, if one exists.
yourReferencestring?NoAn optional external reference from the caller's system that identifies this merchant in their own data store.
sourcestring?NoThe identifier of the originating system or partner that registered this merchant.
namestringYesThe trading name of the merchant.
categoryCodeone of 967 values (e.g. 0, 11, 701, ...)YesThe ISO 18245 Merchant Category Code (MCC) that classifies the merchant's type of business.
categorystring?NoThe display name of the merchant category, derived from ZGA.Core.Models.Merchants.BasicMerchant.CategoryCode.
emailAddressstring?NoThe primary contact email address for the merchant.
mobileNumberstring?NoThe primary contact mobile number for the merchant in international MSISDN format.
countryIsoCodeone of 248 values (e.g. None, AFG, ALB, ...)NoThe ISO 3166-1 alpha-3 country code of the country in which the merchant operates.
currencyone of 106 values (e.g. None, AFN, ALL, ...)YesThe ISO 4217 currency in which the merchant transacts.
kybStatusSummaryUnverified, Verified, PartiallyVerified, RejectedNoA summary of the merchant's Know Your Business (KYB) verification status.
shortCodeinteger?NoA short numeric code assigned to the merchant that can be used as a compact identifier in USSD/QR flows.
isActivebooleanNotrue if the merchant account is currently active and able to accept payments.
json
{
  "createdDate": "string",
  "loginCredentials": {
    "username": "string",
    "password": "string",
    "isLockedOut": true,
    "reasonForLockout": "string"
  },
  "tradingName": "string",
  "franchiseName": "string",
  "capturedBy": "string",
  "capturedFrom": "string",
  "industry": "None",
  "phoneNumber": "string",
  "notificationEmailAddress": "string",
  "notificationMobileNumber": "string",
  "city": "string",
  "state": "string",
  "languageIsoCode": "None",
  "webSiteUrl": "string",
  "isRegistrationComplete": true,
  "isEmailVerified": true,
  "isMobileNumberVerified": true,
  "vCard": "string",
  "logoImage": "string",
  "taxNumber": "string",
  "companyRegistrationNumber": "string",
  "companyRegistrationDate": "string",
  "adminPasscode": "string",
  "logoUrl": "string",
  "hostedPaymentUrl": "string",
  "hostedPaymentOptions": {
    "cardNotPresentMID": 0,
    "isVisaEnabled": true,
    "isMastercardEnabled": true,
    "isAmericanExpressEnabled": true,
    "isDinersEnabled": true,
    "settlementTime": "None"
  },
  "posOptions": {
    "isRefundsEnabled": true,
    "isCancellationsEnabled": true,
    "isPurchaseWithCashbackEnabled": true,
    "isWithdrawalsEnabled": true,
    "isBalanceCheckEnabled": true,
    "isCurrencyConversionEnabled": true,
    "isRcsPaymentEnabled": true,
    "isDebiCheckEnabled": true,
    "isPreAuthorizationEnabled": true,
    "isManualCardEntryEnabled": true,
    "isInvoiceNumberEnabled": true,
    "isPasscodeAlwaysRequired": true,
    "fuelPurchaseMethod": "ByAmount"
  },
  "business": {
    "reference": "00000000-0000-0000-0000-000000000000",
    "parentBusinessReference": "00000000-0000-0000-0000-000000000000",
    "createdDate": "string",
    "yourReference": "string",
    "source": "string",
    "name": "string",
    "emailAddress": "string",
    "mobileNumber": "string",
    "phoneNumber": "string",
    "isEmailVerified": true,
    "isMobileNumberVerified": true,
    "isActive": true
  },
  "addresses": [
    {}
  ],
  "employees": [
    {}
  ],
  "terminals": [
    {}
  ],
  "files": [
    {}
  ],
  "notificationSettings": [
    {}
  ],
  "attributes": [
    {}
  ],
  "bankAccounts": [
    {}
  ],
  "mobileWallets": [
    {}
  ],
  "operatingTimes": [
    {}
  ],
  "devices": [
    {}
  ],
  "qrCodes": [
    {}
  ],
  "assignedProductReferences": [
    "00000000-0000-0000-0000-000000000000"
  ],
  "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
}

Responses

StatusDescription
200The request was successful and the merchants details are updated.
400The request failed validation, the error object will contain further information.
401The authorization information provided is not valid, authentication is required to access this resource.
403The authorization header does not contain the correct type or you do not have access to this resource.
404The request was successful but does not return any results.
422The request payload is invalid, the error object will contain further information.
429Too many requests are being sent concurrently or rate limiting has taken effect.
500An unexpected error occurred, the error object will contain further information.

Response body

FieldTypeRequiredDescription
successbooleanNoGets a value indicating whether the operation was successful.
resultobjectNoFull merchant profile, extending ZGA.Core.Models.Merchants.BasicMerchant with trading details, linked accounts, terminals, employees, addresses, and KYB documentation.
json
{
  "success": true,
  "result": {
    "createdDate": "string",
    "loginCredentials": {},
    "tradingName": "string",
    "franchiseName": "string",
    "capturedBy": "string",
    "capturedFrom": "string",
    "industry": "None",
    "phoneNumber": "string",
    "notificationEmailAddress": "string",
    "notificationMobileNumber": "string",
    "city": "string",
    "state": "string",
    "languageIsoCode": "None",
    "webSiteUrl": "string",
    "isRegistrationComplete": true,
    "isEmailVerified": true,
    "isMobileNumberVerified": true,
    "vCard": "string",
    "logoImage": "string",
    "taxNumber": "string",
    "companyRegistrationNumber": "string",
    "companyRegistrationDate": "string",
    "adminPasscode": "string",
    "logoUrl": "string",
    "hostedPaymentUrl": "string",
    "hostedPaymentOptions": {},
    "posOptions": {},
    "business": {},
    "addresses": [],
    "employees": [],
    "terminals": [],
    "files": [],
    "notificationSettings": [],
    "attributes": [],
    "bankAccounts": [],
    "mobileWallets": [],
    "operatingTimes": [],
    "devices": [],
    "qrCodes": [],
    "assignedProductReferences": [],
    "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
  }
}

Code samples

ts
// @vantagepay/vantagepay
const merchant = await client.merchants.getMerchant()
merchant.tradingName = 'Acme Superstore'
const updated = await client.merchants.updateMerchant(merchant)
csharp
// VantagePay.SDK
var merchant = await client.Merchants.GetMerchantAsync();
merchant!.TradingName = "Acme Superstore";
var updated = await client.Merchants.UpdateMerchantAsync(merchant);

Get your merchant information.

GET /v1/merchant

Sample

json
GET /v1/merchant

Auth: Access token (Bearer).

Responses

StatusDescription
200The request was successful and the merchant information was returned.
400The request failed validation, the error object will contain further information.
401The authorization information provided is not valid, authentication is required to access this resource.
403The authorization header does not contain the correct type or you do not have access to this resource.
404The request was successful but does not return any results.
422The request payload is invalid, the error object will contain further information.
429Too many requests are being sent concurrently or rate limiting has taken effect.
500An unexpected error occurred, the error object will contain further information.

Response body

FieldTypeRequiredDescription
successbooleanNoGets a value indicating whether the operation was successful.
resultobjectNoFull merchant profile, extending ZGA.Core.Models.Merchants.BasicMerchant with trading details, linked accounts, terminals, employees, addresses, and KYB documentation.
json
{
  "success": true,
  "result": {
    "createdDate": "string",
    "loginCredentials": {},
    "tradingName": "string",
    "franchiseName": "string",
    "capturedBy": "string",
    "capturedFrom": "string",
    "industry": "None",
    "phoneNumber": "string",
    "notificationEmailAddress": "string",
    "notificationMobileNumber": "string",
    "city": "string",
    "state": "string",
    "languageIsoCode": "None",
    "webSiteUrl": "string",
    "isRegistrationComplete": true,
    "isEmailVerified": true,
    "isMobileNumberVerified": true,
    "vCard": "string",
    "logoImage": "string",
    "taxNumber": "string",
    "companyRegistrationNumber": "string",
    "companyRegistrationDate": "string",
    "adminPasscode": "string",
    "logoUrl": "string",
    "hostedPaymentUrl": "string",
    "hostedPaymentOptions": {},
    "posOptions": {},
    "business": {},
    "addresses": [],
    "employees": [],
    "terminals": [],
    "files": [],
    "notificationSettings": [],
    "attributes": [],
    "bankAccounts": [],
    "mobileWallets": [],
    "operatingTimes": [],
    "devices": [],
    "qrCodes": [],
    "assignedProductReferences": [],
    "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
  }
}

Code samples

ts
// @vantagepay/vantagepay
const merchant = await client.merchants.getMerchant()
csharp
// VantagePay.SDK
var merchant = await client.Merchants.GetMerchantAsync();

Retrieves the merchant agreement as an HTML document with merchant-specific information populated.

GET /v1/merchant/agreement

The returned HTML is suitable for direct rendering in a browser and includes merchant-specific details such as name, address, and the current date. The response is cached for 24 hours and is delivered with a content type of 'text/html'.

Auth: Access token (Bearer).

Responses

StatusDescription
200The request was successful but does not return any results.
400The request failed validation, the error object will contain further information.
401The authorization information provided is not valid, authentication is required to access this resource.
403The authorization header does not contain the correct type or you do not have access to this resource.
422The request payload is invalid, the error object will contain further information.
429Too many requests are being sent concurrently or rate limiting has taken effect.
500An unexpected error occurred, the error object will contain further information.

Code samples

ts
// @vantagepay/vantagepay
const agreementHtml = await client.merchants.getMerchantAgreement()
csharp
// VantagePay.SDK
var agreementHtml = await client.Merchants.GetMerchantAgreementAsync();

Accepts the agreement for the currently authenticated user and creates a signed agreement file if one does not already exist within the last 24 hours.

POST /v1/merchant/agreement/accept

If the user has already accepted and verified the agreement within the past 24 hours, the method returns an Accepted response without creating a new agreement file. Otherwise, it generates a new agreement PDF, uploads it, and marks it as verified. The method requires the user to be authenticated and associated with a valid merchant reference.

Auth: Access token (Bearer).

Responses

StatusDescription
200The request was successful but does not return any results.
400The request failed validation, the error object will contain further information.
401The authorization information provided is not valid, authentication is required to access this resource.
403The authorization header does not contain the correct type or you do not have access to this resource.
422The request payload is invalid, the error object will contain further information.
429Too many requests are being sent concurrently or rate limiting has taken effect.
500An unexpected error occurred, the error object will contain further information.

Response body

FieldTypeRequiredDescription
successbooleanNoGets a value indicating whether the operation was successful.
json
{
  "success": true
}

Code samples

ts
// @vantagepay/vantagepay
await client.merchants.acceptMerchantAgreement()
csharp
// VantagePay.SDK
await client.Merchants.AcceptMerchantAgreementAsync();

Validate a merchant's name against the one on record and return an access token if it matches closely enough.

POST /v1/merchant/validate/name

Auth: Access token (Bearer).

Request body

json
{}

Responses

StatusDescription
200The request was processed; the response body indicates whether the name was accepted.
400The request failed validation, the error object will contain further information.
401The authorization information provided is not valid, authentication is required to access this resource.
403The authorization header does not contain the correct type or you do not have access to this resource.
422The request payload is invalid, the error object will contain further information.
429Too many requests are being sent concurrently or rate limiting has taken effect.
500An unexpected error occurred, the error object will contain further information.

Response body

FieldTypeRequiredDescription
successbooleanNoGets a value indicating whether the operation was successful.
resultobjectNoThe response returned after verifying a merchant name, including an access token if the name is approved for use.
json
{
  "success": true,
  "result": {
    "accessToken": "string"
  }
}

Code samples

ts
// @vantagepay/vantagepay
// On success a restricted token is stored so the caller can create a merchant user.
const matched = await client.merchants.validateMerchantName('Acme Stores')
if (matched) {
  await client.merchants.createUser('cashier01', 'StrongPassword123!')
}
csharp
// VantagePay.SDK
// Validates a merchant name (fuzzy match). Not wrapped by the .NET SDK.
// Not wrapped by the .NET SDK - call the endpoint directly with an authorized HttpClient.
using var http = new HttpClient { BaseAddress = new Uri("https://sandbox-api.vantagepay.dev") };
http.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", client.ApiTokens.AccessToken);
var response = await http.PostAsync("/v1/merchant/validate/name", content: null);
response.EnsureSuccessStatusCode();

Verify a merchant mobile number by sending an OTP request.

POST /v1/merchant/otp/{msisdn}

Auth: Access token (Bearer).

Parameters

NameInRequiredDescription
msisdnpathYesThe merchant mobile number to send the OTP to.

Responses

StatusDescription
200The request was successful but does not return any results.
400The request failed validation, the error object will contain further information.
401The authorization information provided is not valid, authentication is required to access this resource.
403The authorization header does not contain the correct type or you do not have access to this resource.
422The request payload is invalid, the error object will contain further information.
429Too many requests are being sent concurrently or rate limiting has taken effect.
500An unexpected error occurred, the error object will contain further information.

Response body

FieldTypeRequiredDescription
successbooleanNoGets a value indicating whether the operation was successful.
json
{
  "success": true
}

Code samples

ts
// @vantagepay/vantagepay
await client.merchants.verifyMobileNumber('233555666112')
csharp
// VantagePay.SDK
await client.Merchants.VerifyMobileNumberAsync("233555666112");

Validate merchant OTP request.

POST /v1/merchant/otp/validate/{msisdn}

Auth: Access token (Bearer).

Parameters

NameInRequiredDescription
msisdnpathYesThe mobile number to send the OTP to.

Request body

FieldTypeRequiredDescription
otpValuestringYesThe OTP value entered by the user (required).
json
{
  "otpValue": "string"
}

Responses

StatusDescription
200The request was successful but does not return any results.
400The request failed validation, the error object will contain further information.
401The authorization information provided is not valid, authentication is required to access this resource.
403The authorization header does not contain the correct type or you do not have access to this resource.
422The request payload is invalid, the error object will contain further information.
429Too many requests are being sent concurrently or rate limiting has taken effect.
500An unexpected error occurred, the error object will contain further information.

Response body

FieldTypeRequiredDescription
successbooleanNoGets a value indicating whether the operation was successful.
resultobjectNoThe result returned after a successful OTP verification, indicating whether a user account exists and providing a short-lived access token if so.
json
{
  "success": true,
  "result": {
    "userAccountExists": true,
    "accessToken": "string"
  }
}

Code samples

ts
// @vantagepay/vantagepay
const result = await client.merchants.validateOtp('123456', '233555666112')
csharp
// VantagePay.SDK
var result = await client.Merchants.ValidateOtpAsync("123456", "233555666112");

Payments for Africa