|
|
|
|
|
|
⚠️ You may not have access to some functionalities due to your Access Role.
|
Search: |
|
|
|
|
1
|
Welcome to the Reseller API Documentation section! This section is intended for developers who wish to integrate their applications with our reseller platform. Our Reseller API provides programmatic access to a variety of functions that allow you as reseller or merchant to manage your accounts and transactions to serve your customers.
Before getting started with the Reseller API, we highly recommend reading our Core API Documentation. This document provides an overview of our API architecture, authentication methods, and other key concepts that are important to understand before diving into the Reseller API specifics.
In this Reseller API Documentation, we will cover the various endpoints available, request and response formats, error codes, and other details necessary to successfully utilize our Reseller API.
You can also download POSTMAN collection here to guide your development
|
|
2
|
List of Basic and Important Steps
To purchase products from our API, certain fields are required. While similar fields are used for all purchases, their values will vary. Please note that some fields are mandatory for certain products but may be optional for others.
This page provides a collection of commonly used endpoints. However, this does not limit your development to only the listed endpoints. For more information on each endpoint, please refer to its documentation for usage details and required parameters.
Some Important Fields
Please note that all these fields are available when you list the product catalogue
| Attribute |
Description |
| productId |
The ID of the product |
| providerId |
The ID of the provider. |
| value |
The value after the product (After conversion if applicable). This is the targetValue field from the product listing |
| walletId |
The Wallet ID of the currency you want to use for the purchase |
| productCode |
The productCode is required for some product such as utilities e.g Electricity, cable TV etc. This is compulsory for Utilities |
| uniqueAccountId |
This is the Unique Account ID required for Airtime, Data and Utilities. This is compulsory for these product categories. E.g Phone number(In international format) for Airtime and Data, SmartCardno for cable TV or Meter No for electricity. This must be supplied. |
1. Get List of All Possible Product Categories
GET: {baseUrl}/api/v1/Product/Categories
Please note the categoryCode from this endpoint.
2. Get List of All Possible Subcategories for a Category
GET: {baseUrl}/api/v1/Product/Category/{categoryCode}
Please note the subCategoryCode from this endpoint.
3. Get Wallet ID
GET: {baseUrl}/api/v1/Report/AccountBalance
Note the walletId from this endpoint.
walletId: This is wallet id for the currency you will be using to pay for the product
4. List of Products by Category
GET: {baseUrl}/api/v1/Product/Category/{categoryCode}
Please note the basic fields from this endpoint. Use a categoryCode for {categoryCode}, e.g GiftCard
5. List of Products by Category Filtered by Usage Country
GET: {baseurl}/api/v1/Product/Category/{categoryCode}?filters={"countryCode":"{countryCode}"}
Please use the appropriate categoryCode for {categoryCode} and countrCode for {countryCode}, e.g esim and GBR
Sample Request: {baseurl}/api/v1/Product/Category/esim?filters={"countryCode":"GBR"}
6. List of Products by Category Filtered by Subcategory
GET: {baseurl}/api/v1/Product/Category/{categoryCode}?filters={"subCategoryCode":"{subCategoryCode}"}
Please use the appropriate categoryCode for {categoryCode} and Sub Category Code for {subCategoryCode}, e.g giftcard and Food-Beverage
Sample Request: {baseurl}/api/v1/Product/Category/giftcard?filters={"subCategoryCode":"Food-Beverage"}
7. Validate a Customer Account
Some Services need to validate the customer acccount number before purchase. E.g Cable TVs and Electricity companies.
POST: {baseurl}/api/v1/validations
Please read the endpoint documentation for more details.
8. Make a Purchase
POST: {baseurl}/api/v1/orders
Please read the endpoint documentation for more details.
9. Currency Settings
Ensure that you set the X-Wallet-Id in the request header and that it matches the walletId attribute in the body of your request when making a purchase. This is the wallet for the settlement currency you are using for the purchase.
|
|
3
|
Before moving to Production, we recommend validating a few basic flows in the Sandbox environment to ensure your integration is stable and ready for live transactions.
| SN |
Validation Step |
Endpoint to Use |
| 1 |
Pull available products (confirm you can load the product catalogue). |
GET: /api/v1/Product/Categories
GET: /api/v1/Product/Category/{categoryCode} |
| 2 |
Fetch product details using a product ID (confirm product lookup works). |
GET: /api/v1/Product/{productId} |
| 3 |
Retrieve current exchange rates (confirm FX rates are accessible for pricing). |
GET: /api/v1/Report/FxRate |
| 4 |
Place an order successfully (confirm your full purchase flow works end-to-end). |
POST: /api/v1/orders |
| 5 |
Handle an order that returns PENDING (confirm you can process async orders). |
POST: /api/v1/orders
Then validate using:
POST: /api/v1/order/status
or
GET: /api/v1/order/status?transactionReference={transactionReference} |
| 6 |
Handle an order that returns FAILED (confirm you can surface errors and stop retries correctly). |
POST: /api/v1/orders
Then validate using:
POST: /api/v1/order/status
or
GET: /api/v1/order/status?transactionReference={transactionReference} |
| 7 |
Check order status (confirm you can query status and reconcile outcomes). |
POST: /api/v1/order/status
or
GET: /api/v1/order/status?transactionReference={transactionReference} |
PLEASE NOTE:
Once you have successfully validated the flows above in Sandbox, you can request Production credentials by emailing support@vendifydigital.com.
|
|
4
|
This endpoint allows you to retrieve the effective foreign exchange rates available for your account. It returns the applicable rate used to convert a product currency to the transacting currency.
Endpoint
GET: api/v1/Report/FxRate
Sample Request: To get all effective exchange rates available, use the request shown below.
{baseUrl}/api/v1/Report/FxRate
NOTE: The endpoint returns multiple currency mappings, showing each product currency and its corresponding transacting rate.
Additional Required Request Headers:
X-Wallet-Id
Sample Response:
{
"authenticated": true,
"sysDate": "2025-11-02T23:23:58.165Z",
"sysErr": 200,
"sysId": 251102232356083368,
"sessionUid": "S:HBVKHSABATJIPKIDWIMEKVBLM",
"requestStatus": "PROCESSED",
"message": "REQUEST OK",
"response": [
{
"productCurrency": "HKD",
"productValue": 1,
"transactingCurrency": "NGN",
"allInRate": 203.7913350000
},
{
"productCurrency": "AED",
"productValue": 1,
"transactingCurrency": "NGN",
"allInRate": 437.2800300000
},
{
"productCurrency": "GBP",
"productValue": 1,
"transactingCurrency": "NGN",
"allInRate": 2313.3000000000
},
{
"productCurrency": "USD",
"productValue": 1,
"transactingCurrency": "NGN",
"allInRate": 1721.5000000000
}
]
}
| Attribute |
Description |
| productCurrency |
The base or source currency of the product (e.g., HKD, AED, USD). |
| productValue |
A reference value of the product in the product currency (usually 1). |
| transactingCurrency |
The transacting or settlement currency (e.g., NGN). |
| allInRate |
The overall effective exchange rate applied to convert productCurrency to transactingCurrency. We quote a single all-in rate, this already includes the FX rate, our charges, and your commission. There are no separate mark-ups or hidden add-ons so that the price shown is the final recommended retail selling price out |
|
|
5
|
To buy a product, a POST request is required to the endpoint below. You will be able to get some of the required parameters from the list of products. The following attributes in the Header (in addition to X-Api-Key, X-Nonce and X-Signature) and body of the post are required.
POST: /api/v1/orders
In the header of your post request, the following attributes must be present
| Header |
Required |
Description |
| X-Api-Key |
Yes |
The API key for authenticating the API request |
| X-Nonce |
Yes |
A unique nonce value to prevent replay attacks |
| X-Signature |
Yes |
The signature for the API request. You are required to sign your APIKey+Nonce and include the signature in this header. |
| X-Wallet-Id |
Yes |
This is the wallet Id of the currency you wish to use to transanct. |
| X-Currency-Id |
No |
The ID of the currency being used in the request. Our system may ignore it in some requests if not relevant. This is depreciated. Use X-Wallet-Id instead |
| X-Currency-Code |
No |
X-Currency-Code is the ISO code of the currency being used in the request. Our system may ignore it in some requests if not relevant. This is depreciated. Use X-Wallet-Id instead |
Form the body of your post request with the following attributes as a JSON object
| Attribute |
Required |
Description |
| productId |
Yes |
Unique identifier for the product being sold. |
| providerId |
Yes |
Unique identifier for the provider of the product. |
| value |
Yes |
This is the final amount you pay in your chosen payment currency.
For products in your payment currency, this equals the product’s originalValue.
For products in a different currency from your payment currency, this is the converted value from the `targetValue` field in the product listing.
Important: When using this field, you must set `faceValue` field to `0`. |
| faceValue |
Yes |
This is the Face value of the product in its native (listed) currency.
This is NOT the amount you pay if you are paying in a different currency.
Our system will automatically convert this to your settlement/payment currency using the current exchange rate.
The converted amount will be charged to your account.
NOTE: This is the `originalValue` field in the product listing.
Important: When using this field, you must set the `value` field to `0`. |
| walletId |
Yes |
This is the wallet you wish to use to pay for the product. It must the same as the header value X-Wallet-Id |
| uniqueAccountId |
Yes |
This is the Unique Account number. Such as Mobile Number (In internaltional format) for Airtime and Data Purchase, or SmartCardno for cable TV or Meter No for electricity. This must be supplied by you. |
| accountName |
Yes/No |
The name on the customer's account that is tied to the uniqueAccountId. It is required for some utility product purchases, so we recommend supplying this value for all utility product purchases. |
| beneficiaryTelephone |
Yes/No |
Telephone number of the beneficiary or recipient of the product (in internaltional format). The value in uniqueAccountId for Data and Airtime purchase will overide this. |
| accountTelephone |
Yes/No |
The account telephone number (in international format) of the beneficiary account. This value can also be provided in the beneficiaryTelephone field. It is required for some utility product purchases, so we recommend supplying this value for all utility product purchases. |
| transactionTitle |
No |
Short title or name of the transaction. |
| transactionComment |
No |
Short additional comments or notes about the transaction. |
| productCode |
Yes/No |
The productCode is required for some product such as utilities e.g Electricity, cable TV etc. This is compulsory for Utilities |
| customerReference |
No |
You can pass a unique reference here to track your transactions or request. Maximum of 50 characters. |
| valueCurrencyId |
No |
Currency ID for the product. This must be the same value in header parameter X-Currency-Id. This is deprecated. Use X-Wallet-Id instead. |
| valueCurrencyCode |
No |
Currency Code for the product. This must be the same value in header parameter X-Currency-Code. This is deprecated. Use X-Wallet-Id instead. |
| buyerFirstname |
No |
This field is no longer required. It is not used in processing. |
| buyerLastname |
No |
This field is no longer required. It is not used in processing. |
| buyerTelephone |
No |
This field is no longer required. It is not used in processing. |
| buyerEmail |
No |
This field is no longer required. It is not used in processing. |
| buyerCountry |
No |
This field is no longer required. It is not used in processing. |
| beneficiaryFirstname |
No |
This field is no longer required. It is not used in processing. |
| beneficiaryLastname |
No |
This field is no longer required. It is not used in processing. |
| beneficiaryEmail |
No |
Email address of the beneficiary or recipient of the product. If Supplied an email receipt will be sent |
Sample Request Body
{
productId:9422,
providerId:123,
value:17450.00,
walletId:"NGN-143",
transactionTitle : "Cable TV Subscription Purchase",
transactionComment : "Subscription Purchase",
productCode:"ng_dstv_showcompe36",
uniqueAccountId: "4222863979",
beneficiaryEmail : "mrporter@myemail.com"
}
Sample Response
{
"authenticated": true,
"sysDate": "2025-03-11T22:48:08.918Z",
"sysErr": 200,
"sysId": 250311224805113784,
"sessionUid": "S:LGBYBJIYTURUDUQBFTXQWQBCW",
"requestStatus": "PROCESSED",
"message": "REQUEST OK",
"response": {
"responseStatus": "SUCCESS",
"responseMessage": "Product purchased successfully.",
"customerReference": "",
"transactionReference": "250311224805113784:S:LGBYBJIYTURUDUQBFTXQWQBCW",
"voucherCode": "8943 1081 6100 0326 169",
"redemptionUrl": "#",
"uniqueAccountId": "",
"qrCodeData": "LPA:1$rsp.truphone.com$JQ-1PKHOV-3C8K4V",
"deliveryField": "qrCodeData",
"productId": 5906,
"productCode": "RB00001",
"providerId": 92,
"providerName": "eSim",
"name": "Middle East 1GB",
"description": "Usable in following (6) contries: Israel, Jordan, Kuwait, Oman, Saudi Arabia, United Arab Emirates. \r\nPLEASE NOTE: Plan is Valid for 7 days after activation.",
"productMoreInfoUrl": "#",
"expirationDate": "2026-12-09",
"value": 7.2,
"valueCurrencyId": 230,
"valueCurrencyCode": "USD",
"walletId": "GBP-104",
"productCost": 5.904,
"productCostCurrencyCode": "GBP",
"productCostCurrencyId": 229,
"sysComment": "Cost Converted from base(USD) to GBP rate of 0.820000",
"fxRate": {
"rate": 0.82,
"currencyCode": "GBP"
}
}
}
| IMPORTANT NOTE: Product Id or any other record Id in the Sandbox Environment will not be valid in your Production Environment. The data in the Sandbox and Production Environments are completely different. However, the structure, attributes, data types, and endpoints remain the same when you change your baseUrl to the Production Environment. |
Facevalue Recommendation: We recommend using the faceValue field when placing an order, especially where the product currency is different from your payment currency.
The faceValue field represents the face value of the product in its native/listed currency. This value comes from the originalValue field in the product listing.
Our system will automatically convert this amount (faceValue) to your payment currency using the current exchange rate, and the converted amount will be charged to your account.
When placing an order, use either the faceValue field or the value field, but not both. If you use the faceValue field, set the value field to 0, and vice versa. |
|
|
6
|
Below is a description of our standard response attributes and their meanings. Please note that some attributes may not have values in some purchase or order request response.
This is related to the /orders endpoint response. .
POST: /api/v1/orders
| Attribute |
Description |
| authenticated |
Indicates if the request is authenticated (true/false). |
| sysDate |
System date and time when the request was processed. |
| sysErr |
System error code (200 indicates success). |
| sysId |
Unique system identifier for the request. |
| sessionUid |
Unique identifier for the session. |
| requestStatus |
Indicates the status of the request (e.g., PROCESSED). |
| message |
General message indicating the status of the request. |
| responseStatus |
Status of the response (e.g., SUCCESS or FAILED or PENDING). |
| responseMessage |
Detailed message about the response (e.g., Product purchased successfully). |
| customerReference |
Reference identifier supplierd with the request. |
| transactionReference |
Unique identifier for the transaction. |
| voucherCode |
Code that represents the purchased product. |
| redemptionUrl |
URL where the voucher can be redeemed (When applicable). |
| qrCodeData |
QR code data for order that can redeem the product (e.g in eSim Purchase). |
| deliveryField |
Indicates which field (qrCodeData, voucherCode, or redemptionUrl) contains the redemption details. |
| redemptionInfo |
This field will provide relevant information on how to redeem the product where applicable. |
| productId |
Unique identifier for the product. |
| productCode |
Code assigned to the product. |
| providerId |
Unique identifier for the provider. |
| providerName |
Name of the provider. |
| name |
Name of the product. |
| description |
Details about the product and possible redemption methods. |
| productMoreInfoUrl |
URL for more information about the product. |
| expirationDate |
Date when the voucher or product expires. |
| value |
Value of the product. |
| valueCurrencyId |
Unique identifier for the currency of the product value. |
| valueCurrencyCode |
Currency code (e.g., GBP for British Pounds). |
| walletId |
Wallet identifier associated with the transaction. |
| productCost |
Cost of the product. |
| productCostCurrencyCode |
Currency code for the product cost. |
| productCostCurrencyId |
Unique identifier for the currency of the product cost. |
| sysComment |
System-generated comment. |
| fxRate.rate |
Exchange rate applicable to the transaction. |
| fxRate.currencyCode |
Currency code associated with the exchange rate. |
PLEASE NOTE:
For transactions involving eSIM products, the response object will include extra fields that provide installation links and data-usage information.
Please check Extra eSIM Fields Returned in POST /api/v1/orders documentation for more details.
|
|
7
|
For transactions involving eSIM products, the response object will include extra fields that provide installation links and data-usage information. These fields appear only when the purchased product is an eSIM using {baseUrl}/api/v1/orders endpoint.
| Field |
Description |
| androidInstallUrl |
An installation instruction link for Android devices. Customers can tap this link to view how to install their eSIM profile on supported Android phones.
Example:
https://sandboxapi.vendifydigital.com/esim/esimsetup.aspx?card=LPA:1$rsp.truphone.com$JQ-20RU5P-14E0E0R |
| iosInstallUrl |
Apple eSIM provisioning link for iOS devices. This opens the official Apple installation screen to activate the eSIM profile.
Example:
https://esimsetup.apple.com/esim_qrcode_provisioning?carddata=LPA:1$rsp.truphone.com$JQ-20RU5P-14E0E0R |
| eSimDataUsageUrl |
A link that allows the customer to check their live data balance and usage history for the purchased eSIM.
Example:
https://sandboxapi.vendifydigital.com/esim/esimbalance.aspx?iccid=8943108165011804478 |
Note: These fields are returned automatically when the system detects that the purchased product is an eSIM. Traditional or non-eSIM products will not include these properties in the response.
|
|
8
|
This endpoint allows you to query an order status to determine its current or final status using the transactionReference or x-nonce value.
You can retrieve order status using either a POST request with a request body or a GET request with a query parameter.
Option 1 – POST Request
POST: /api/v1/order/status
Sample Request Body when using transactionReference:
{ "transactionReference": "250315235931835041:S:QRKUOSODRMCYMLTXBQHGMLOQH" }
Sample Request Body when using x-nonce:
{ "x-nonce":"110426053014142800271506" }
Option 2 – GET Request
GET: /api/v1/order/status?transactionReference={transactionReference}
Sample Request when using transactionReference:
{baseUrl}/api/v1/order/status?transactionReference=260218112821240181:S:JMVOUAEVOTUUEWNBVTSPBSNDB
Sample Request when using x-nonce:
{baseUrl}/api/v1/order/status?x-nonce=1104260528172249158979271
| Parameter |
Description |
| transactionReference |
Unique identifier returned when the order was created. This value is required to retrieve the current or final status of the original transaction. |
| x-nonce |
The unique nonce value (sent in the request header as X-Nonce) of the original transaction. |
Sample Response
{
"authenticated": true,
"sysDate": "2025-03-16T00:00:05.932Z",
"sysErr": 200,
"sysId": 250316000084034332,
"sessionUid": "S:GDOSLUUEARGFGYYZNGFQFPDHA",
"requestStatus": "PROCESSED",
"message": "REQUEST OK",
"response": {
"responseStatus": "SUCCESS",
"responseMessage": "Transaction completed successfully",
"orderStatus": "SUCCESS",
"transactionReference": "250315235931835041:S:QRKUOSODRMCYMLTXBQHGMLOQH",
"name": "UK_Trial_Test (Code/PIN/URL)",
"productId": 9431,
"productCost": 110.00,
"productCostCurrencyCode": "GBP",
"voucherCode": "CODE-1013",
"redemptionInfo": "This is a Sample Test Product in the Sandbox Environment. In the Production Environment based on the Product, you will receive clear instructions on how and where to use it in the API response.",
"redemptionUrl": "https://trailexample.com",
"qrCodeData": "",
"deliveryField": "redemptionUrl",
"transactionDate": "2025-03-15T00:00:00",
"transactionTime": "23:59:37",
"requestComment": "Transaction record retrieved"
}
}
| Attribute |
Description |
| authenticated |
Indicates if the request is authenticated (true/false). |
| sysDate |
System date and time when the request was processed. |
| sysErr |
System error code (200 indicates success). |
| sysId |
Unique system identifier for the request. |
| sessionUid |
Unique identifier for the session. |
| requestStatus |
Indicates the state of the request (e.g., PROCESSED). |
| message |
General message indicating the status of the request. |
| responseStatus |
Status of the request (e.g., SUCCESS or FAILED or PENDING). |
| responseMessage |
Detailed message about the response. |
| customerReference |
Reference identifier supplied with the order request. |
| orderStatus |
Current state or Status of the order. |
| transactionReference |
Unique identifier for the transaction. |
| voucherCode |
Code that represents the purchased product. |
| redemptionUrl |
URL where the voucher can be redeemed. |
| qrCodeData |
QR code data for order that can redeem the product (e.g in eSim Pruchase). |
| deliveryField |
Indicates which field (qrCodeData, voucherCode, or redemptionUrl) contains the redemption details. |
| productId |
Unique identifier for the product. |
| providerName |
Name of the provider. |
| name |
Name of the product. |
| productCost |
Cost of the product. |
| productCostCurrencyCode |
Currency code for the product cost. |
| transactionDate |
The date the trasaction was carried out. |
| transactionTime |
The time the trasaction was carried out. |
| requestComment |
Comment about the query request |
PLEASE NOTE:
Both POST and GET methods return the same response structure. You may use whichever method better suits your integration design.
|
|
9
|
This endpoint allows you to get details of an already purchased voucher and resend it to the original buyer and beneficiary by email and SMS.
GET: /api/v1/Voucher/Details/{TransactionReference}
Sample Response
{
"authenticated": true,
"sysDate": "2023-04-09T11:24:17.837Z",
"sysErr": 200,
"sysId": 230409112427713246,
"sessionUid": "S:HUWDJHMRWXBTGGTBVDTDZRNWW",
"requestStatus": "PROCESSED",
"message": "REQUEST OK",
"response": {
"status": 1,
"code": "XCJ*********UYV",
"description": "Details sent successfully. Email and SMS Message sent.",
"expirationDate": "2024/04/03"
}
}
|
|
10
|
This endpoint allows you to get your transaction history between two dates as a Service Reseller or Merchant.
You must provide three parameters (fromDate, toDate and status). Please note that you can not pull more than 2 month's record at a time. If you require a wider range, you can use export endpoint and the exported data will be sent to your admin email address.
Please Note: Personally identifiable information will be masked out in this report.
GET: /api/v1/Report/Reseller/TransactionHistory
Sample Request
GET: /api/v1/Report/Reseller/TransactionHistory?fromDate=2021-01-01&toDate=2021-02-01&status=all
| Url Parameter |
Description |
| fromDate |
This is the start date of transactions you want to report on. Format must be ISO 8601 (YYYY-MM-DD) e.g 2021-01-25 |
| toDate |
This is the end date of transactions you want to report on. Format must be ISO 8601 (YYYY-MM-DD) e.g 2021-02-25 |
| status |
This is the type of report you want. Value must either be all, used or unused :
all means all records including redeemed and unredeemed vouchers
used means all voucher records that has been purchased and redeemed
unused means all voucher records that has been purchased but not redeemed
|
Sample Response
| Attribute |
Description |
| transactionReference |
The unique reference number for the transaction |
| transactionDate |
The date of the transaction |
| voucher |
The voucher code |
| currency |
The currency of the voucher |
| voucherValue |
The value of the voucher in the currency specified |
| transactedCurrency |
The currency used in the transaction |
| transactedValue |
The value of the transaction in the transacted currency |
| redeemedStatus |
The status of the voucher (redeemed or not redeemed) |
| buyerFirstname |
The first name of the buyer |
| buyerLastname |
The last name of the buyer |
| buyerTelephone |
The telephone number of the buyer |
| buyerEmail |
The email address of the buyer |
| beneficiaryTelephone |
The telephone number of the beneficiary |
| beneficiaryEmail |
The email address of the beneficiary |
{
"authenticated": true,
"sysDate": "2023-04-09T12:54:12.049Z",
"sysErr": 200,
"sysId": 230409125443850421,
"sessionUid": "S:MJZQCMGEWECYVUCOZJXWQQVLP",
"requestStatus": "PROCESSED",
"message": "REQUEST OK",
"response": [
{
"transactionReference": "2023040ikhkumwxxykymhjm",
"transactionDate": "2023/04/09",
"voucher": "GEJ*********KDB",
"currency": "NGN",
"voucherValue": "100.00",
"transactedCurrency": "NGN",
"transactedValue": "100.00",
"redeemedStatus": "Not Redeemed",
"buyerFirstname": "Harry",
"buyerLastname": "Porter",
"buyerTelephone": "+**********77",
"buyerEmail": "po**************com",
"beneficiaryTelephone": "+**********77",
"beneficiaryEmail": "po**************com"
},
{
"transactionReference": "2023040jeltyyfiseaddrvvas",
"transactionDate": "2023/04/09",
"voucher": "PVZ*********YOX",
"currency": "GBP",
"voucherValue": "100.00",
"transactedCurrency": "NGN",
"transactedValue": "0.00",
"redeemedStatus": "Not Redeemed",
"buyerFirstname": "Harry",
"buyerLastname": "Porter",
"buyerTelephone": "+**********77",
"buyerEmail": "po**************com",
"beneficiaryTelephone": "+**********77",
"beneficiaryEmail": "po**************com"
},
{
"transactionReference": "20230tqenmtdbnhhfavenpmm",
"transactionDate": "2023/04/09",
"voucher": "XCJ*********UYV",
"currency": "GBP",
"voucherValue": "100.00",
"transactedCurrency": "NGN",
"transactedValue": "57,191.70",
"redeemedStatus": "Not Redeemed",
"buyerFirstname": "Harry",
"buyerLastname": "Porter",
"buyerTelephone": "+**********77",
"buyerEmail": "po**************com",
"beneficiaryTelephone": "+**********77",
"beneficiaryEmail": "po**************com"
}
]
}
|
|
11
|
This endpoint allows you to get your transaction summary between two dates as a Service Reseller or Merchant.
You must provide two parameters (fromDate and toDate). Please note that you can not pull more than 24 month's record at a time. If you require a wider range, you can use export endpoint and the exported data will be sent to your admin email address.
GET: /api/v1/Report/Reseller/TransactionSummary
Sample Request
GET: /api/v1/Report/Reseller/TransactionSummary?fromDate=2021-01-01&toDate=2021-02-01
| Url Parameter |
Description |
| fromDate |
This is the start date of transactions you want to report on. Format must be ISO 8601 (YYYY-MM-DD) e.g 2021-01-25 |
| toDate |
This is the end date of transactions you want to report on. Format must be ISO 8601 (YYYY-MM-DD) e.g 2021-02-25 |
Sample Response
| Attribute |
Description |
| productCode |
The code assigned to the product. |
| productName |
The name of the product. |
| transactionCount |
The number of transactions processed for the product. |
| totalVoucherValue |
The total value of vouchers issued for the product. |
| voucherCurrency |
The currency in which the vouchers were issued. |
| currencyCountry |
The country of the voucher currency. |
| reportFromDate |
The starting date of the report. |
| reportToDate |
The ending date of the report. |
{
"authenticated": true,
"sysDate": "2023-04-23T12:16:48.075Z",
"sysErr": 200,
"sysId": 230410121635840353,
"sessionUid": "S:LRZNAJPJIZGALJCLXYEYTJTCL",
"requestStatus": "PROCESSED",
"message": "REQUEST OK",
"response": [
{
"productCode": "F5A500GB",
"productName": "Five Star Airtime",
"transactionCount": "2",
"totalVoucherValue": "1,000.00",
"voucherCurrency": "GBP",
"currencyCountry": "United Kingdom",
"reportFromDate": "2021-01-01",
"reportToDate": "2023-09-01"
},
{
"productCode": "P11GB500",
"productName": "P11GB500",
"transactionCount": "3",
"totalVoucherValue": "1,500.00",
"voucherCurrency": "GBP",
"currencyCountry": "United Kingdom",
"reportFromDate": "2021-01-01",
"reportToDate": "2023-09-01"
},
{
"productCode": "P11US200",
"productName": "P11US200",
"transactionCount": "5",
"totalVoucherValue": "1,000.00",
"voucherCurrency": "USD",
"currencyCountry": "United States",
"reportFromDate": "2021-01-01",
"reportToDate": "2023-09-01"
},
{
"productCode": "PMNG10K",
"productName": "PROMAX 10,000 Naira Gift Voucher",
"transactionCount": "1",
"totalVoucherValue": "10,000.00",
"voucherCurrency": "NGN",
"currencyCountry": "Nigeria",
"reportFromDate": "2021-01-01",
"reportToDate": "2023-09-01"
}
]
}
|
|
12
|
This endpoint allows you to update the delivery Email and Mobile phone for an already sold voucher as a Service Reseller or a Merchant .
A JSON object as described below must be sent in a http PATCH request body to the API endpoint. The transaction reference voucher must be used to perform this update.
Please note that this function is associated with elevated privileges. An email notification will be sent to your company's administrator concerning this modification.
PATCH: /api/v1/Voucher/UpdateDelivery
Sample Request Body
{
buyerEmail:"tom.thomas@vendifydigital.com",
beneficiaryEmail:"john.packer@vendifydigital.com",
beneficiaryTelephone:"+4470000000000",
transactionReference:"20230329084310lvjvztylvixpxlblgjsglomcc"
}
| Attribute |
Description |
| buyerEmail |
The new email address of the buyer that will be updated on the voucher record. |
| beneficiaryEmail |
The new email address of the beneficiary that will be updated on the voucher record. |
| beneficiaryTelephone |
The new telephone number of the beneficiary in international format, the voucher PIN will be sent to this number. |
| transactionReference |
A unique identifier for the transaction when the voucher was purchased. This will be used to identify the voucher to update. |
Sample Response
| Attribute |
Description |
| voucherCode |
The masked code of the voucher. Note the real voucher code would be sent to the buyer and beneficiary email. |
| status |
The status of the voucher, with 1 indicating that it is successful and 0 indicating update request failed. |
| requestResponse |
The server response message for the request to update the delivery details. |
| expirationDate |
The expiration date of the voucher. |
{
"authenticated": true,
"sysDate": "2023-04-23T22:16:17.525Z",
"sysErr": 200,
"sysId": 230410221663061557,
"sessionUid": "S:TJCREQQVTWYUQTCGGQZKDZSSP",
"requestStatus": "PROCESSED",
"message": "REQUEST OK",
"response": {
"voucherCode": "LV***********LB",
"status": 1,
"requestResponse": "Delivery details has been updated.",
"expirationDate": "2024-03-23"
}
}
|
|
13
|
This endpoint allows you to get details of all your Voucher Service Providers. Please note that you will only get a list of Voucher Service Providers that you have been assigned to (by eVend Admin) and that you can transact with their products. Use the providerCode where you are required to user a Service Provider Code in your API request.
GET: /api/v1/reseller/providers
Sample Response
{
"authenticated": true,
"sysDate": "2023-04-04T21:04:58.940Z",
"sysErr": 200,
"sysId": 230704210473714343,
"sessionUid": "S:VIUENKMIFAQTUBOKZHLKDAJDG",
"requestStatus": "PROCESSED",
"message": "REQUEST OK",
"response": [
{
"providerCode": "sandboxservicep",
"name": "Sandbox Service Provider Ltd",
"url": "www.servicep.com",
"description": "Sandbox Service Provider creates test vouchers",
"email": "info@servicep.com",
"telephone": "+44000000000",
"requestStatus": 1
},
{
"providerCode": "servpath",
"name": "Server Pathways Ltd",
"url": "www.servpath.com",
"description": "Server Pathways Provider creates online digital vouchers",
"email": "info@servicep.com",
"telephone": "+33000000000",
"requestStatus": 1
}
]
}
|
|
14
|
This endpoint allows you to retrieve a list of products for a specific category by providing the categoryCode in the GET request.
Endpoint
GET: api/v1/Product/Category/{categoryCode}
Sample Request: CategoryCode using giftcard
{baseurl}/api/v1/Product/Category/giftcard
Additional Required Request Headers:
X-Wallet-Id
Optional Product Filtering
You can filter products using the filters query parameter.
Available Filter Parameters
| Filter Name |
Example Value |
Description |
| countryCode |
USA
USA,GBR
ALL |
Filters products by ISO country code. Use comma-separated values for multiple countries. Use ALL to return products for all countries. |
| subCategoryCode |
Food-Beverage
Food-Beverage,Home-Living |
Filters products by subcategory. Use comma-separated values for multiple subcategories. |
| brandFamily |
Xbox
Amazon |
Filters products by parent brand grouping. Useful when multiple regional brand codes belong to the same master brand. |
| brandCode |
Uk-Xbox
UK-Amazon |
Filters products by brand code grouping. |
Example Filtered Requests
| Scenario |
Example Request |
| Filter by USA only |
{baseurl}/api/v1/Product/Category/esim?filters={"countryCode":"USA"} |
| Filter by USA & GBR |
{baseurl}/api/v1/Product/Category/esim?filters={"countryCode":"USA,GBR"} |
| Filter by SubCategory |
{baseurl}/api/v1/Product/Category/giftcard?filters={"subCategoryCode":"Food-Beverage"} |
| Filter by Brand Family |
{baseurl}/api/v1/Product/Category/giftcard?filters={"brandFamily":"Xbox"} |
| Filter by Brand Code |
{baseurl}/api/v1/Product/Category/giftcard?filters={"brandCode":"uk-aldi"} |
NOTES:
You can get a list of all available country codes by executing a GET request to:
{baseurl}/api/v1/product/countries
You can get a list of all available brand family by executing a GET request to:
{baseurl}/api/v1/product/brand-families
You can get a list of all available category codes by executing a GET request to:
{baseurl}/api/v1/product/categories
You can get a list of all available sub category codes for a Category of product by executing a GET request to:
{baseurl}/api/v1/product/subcategory/{categoryCode}
Sample Response:
{
authenticated: true,
sysDate: 2023-04-08T09:09:41.903Z,
sysErr: 200,
sysId: 230408090966705261,
sessionUid: S:SRVBPHSDOBJGQREPJDPRGBQFE,
requestStatus: PROCESSED,
message: REQUEST OK,
response: [
{
"productId": 4299,
"productCode": "RW001827",
"providerId": 8,
"name": "Amazon UK eGift Voucher (Realtime)",
"targetValue": 2313.30,
"targetCurrencyId": 160,
"targetCurrencyCode": "NGN",
"originalValue": 1.00,
"originalCurrencyId": 229,
"originalCurrencyCode": "GBP",
"value": 1.00,
"valueCurrencyId": 229,
"valueCurrencyCode": "GBP",
"productCost": 2197.6350,
"productCostCurrencyCode": "NGN",
"productCostCurrencyId": 160,
"walletId": "NGN-59",
"category": "Gift Card",
"categoryCode": "giftcard",
"subCategory": "E-Commerce & Online Shopping",
"subCategoryCode": "E-Commerce-Online-Shopping",
"serviceCode": "amazon-uk",
"brandFamily": "Amazon",
"brandCode": "amazon-uk",
"brandLogoUrl": "https://evend-assets-brands.s3.eu-west-2.amazonaws.com/app-images/amazon-uk.png",
"providerName": "amazon-uk",
"description": "Amazon a leading online retailer of products that inform, educate, and inspire.",
"productMoreInfoUrl": "#",
"expirationDate": "2035-12-09",
"validity": "",
"fxRate": {
"rate": 2313.30,
"currencyCode": "NGN"
},
"denominations": [
{
"type": "range",
"minValue": 2.0,
"maxValue": 1000.0,
"currencyCode": "GBP"
}
],
"sysComment": "Cost converted from GBP to NGN"
},
{
"productId": 4300,
"productCode": "RW001827",
"providerId": 8,
"name": "Amazon UK eGift Voucher (Realtime)",
"targetValue": 11566.50,
"targetCurrencyId": 160,
"targetCurrencyCode": "NGN",
"originalValue": 5.00,
"originalCurrencyId": 229,
"originalCurrencyCode": "GBP",
"value": 5.00,
"valueCurrencyId": 229,
"valueCurrencyCode": "GBP",
"productCost": 10988.1750,
"productCostCurrencyCode": "NGN",
"productCostCurrencyId": 160,
"walletId": "NGN-59",
"category": "Gift Card",
"categoryCode": "giftcard",
"subCategory": "E-Commerce & Online Shopping",
"subCategoryCode": "E-Commerce-Online-Shopping",
"serviceCode": "amazon-uk",
"brandFamily": "Amazon",
"brandCode": "amazon-uk",
"brandLogoUrl": "https://evend-assets-brands.s3.eu-west-2.amazonaws.com/app-images/amazon-uk.png",
"providerName": "amazon-uk",
"description": "Amazon a leading online retailer of products that inform, educate, and inspire.",
"productMoreInfoUrl": "#",
"expirationDate": "2035-12-09",
"validity": "",
"fxRate": {
"rate": 2313.30,
"currencyCode": "NGN"
},
"denominations": [
{
"type": "fixed",
"minValue": 5.00,
"maxValue": 5.00,
"currencyCode": "GBP"
}
],
"sysComment": "Cost converted from GBP to NGN"
}
]
}
Field Descriptions
For detailed explanations of each field, please refer to the Product Details Field Descriptions section.
|
|
15
|
This endpoint allows you to retrieve details of a product by using the id of the product in the GET request.
Endpoint
GET: api/v1/Product/{productId}
Sample Request: If productId is 8746
{baseurl}/api/v1/product/8746
Additional Required Request Headers:
X-Currency-Id and X-Currency-Code
Optional Query Parameters
You may optionally pass either requestTargetValue or requestFaceValue in the request to simulate what the product response would look like for a specific value.
| Query Parameter |
Description |
Example |
| requestTargetValue |
The desired value in the transaction currency. When FX conversion is involved, this represents the converted value in the wallet currency. If no FX conversion is involved, this represents the required product value. |
{baseurl}/api/v1/product/8746?requestTargetValue=5000 |
| requestFaceValue |
The actual face value of the product in its original currency. |
{baseurl}/api/v1/product/8746?requestFaceValue=10 |
Sample Response:
{
authenticated: true,
sysDate: 2023-04-08T09:09:41.903Z,
sysErr: 200,
sysId: 230408090966705261,
sessionUid: S:SRVBPHSDOBJGQREPJDPRGBQFE,
requestStatus: PROCESSED,
message: REQUEST OK,
response: "productId": 8746,
"productCode": "RW000045",
"providerId": 112,
"name": "Test Proudct (Code/PIN/URL)",
"targetValue": 100.0,
"targetCurrencyId": 230,
"targetCurrencyCode": "USD",
"originalValue": 100.0,
"originalCurrencyId": 230,
"originalCurrencyCode": "USD",
"value": 100.0,
"valueCurrencyId": 230,
"valueCurrencyCode": "USD",
"productCost": 100.0,
"productCostCurrencyCode": "USD",
"productCostCurrencyId": 230,
"walletId": "USD-104",
"category": "Gift Card",
"categoryCode": "giftcard",
"subCategory": "E-Commerce & Online Shopping",
"subCategoryCode": "E-Commerce-Online-Shopping",
"serviceCode": "",
"brandCode": "USA-Trial-Test",
"brandLogoUrl": "https://evend-assets-brands.aws.com/mylogo.png",
"providerName": "USA_Trial_Test",
"description": "This is sample product and this could be an html description.",
"productMoreInfoUrl": "#",
"expirationDate": "2026-12-09",
"validity": "",
"fxRate": {
"rate": 1.0,
"currencyCode": "USD"
},
"denominations": [
{
"type": "fixed",
"minValue": 100.0,
"maxValue": 100.0,
"currencyCode": "USD"
}
],
"sysComment": "",
"redeemableCountryCodes": [
"KEN",
"NGA",
"ZAF"
],
}
Field Descriptions
For detailed explanations of each field, please refer to the Product Details Field Descriptions section.
|
|
16
|
Below is a description of product attributes returned inside the response object when retrieving product details.
| Attribute |
Description |
| productId |
Unique identifier for the product. |
| productCode |
Code assigned to the product. This code is used when making certain purchase request. |
| providerId |
Unique identifier of the provider supplying the product. |
| name |
Name of the product (e.g., Amazon UK Voucher). |
| targetValue |
Converted value of the product based on the wallet currency (target currency) in use. |
| targetCurrencyId |
Unique identifier of the target currency. |
| targetCurrencyCode |
Currency code of the converted value (e.g., NGN). |
| originalValue |
Original base value of the product before any currency conversion. You can use this as faceValue when placing an order |
| originalCurrencyId |
Unique identifier of the original currency. |
| originalCurrencyCode |
Currency code of the original value (e.g., USD). |
| value |
Note: This field is depreaciated-It has the same value as originalValue field. It is the Original base value of the product before any currency conversion. |
| valueCurrencyId |
Note: This field is depreaciated. Unique identifier of the product value currency. |
| valueCurrencyCode |
Note: This field is depreaciated. Currency code of the product value (e.g., USD). |
| productCost |
Total cost of the product in the wallet currency after conversion. |
| productCostCurrencyCode |
Currency code of the product cost (e.g., NGN). |
| productCostCurrencyId |
Unique identifier of the product cost currency. |
| walletId |
Identifier of the wallet that will be debited for the purchase. |
| category |
High-level product category (e.g., eSim). |
| categoryCode |
Code representing the product category (e.g., esim). |
| subCategory |
Specific grouping within the category (e.g., Middle East). |
| subCategoryCode |
Code representing the product subcategory. |
| serviceCode |
Internal service identifier where applicable. May be empty for some products. |
| brandFamily |
The parent brand grouping for related brand variants (e.g., Apple). Useful for filtering or aggregating products across multiple regional brand codes. |
| brandCode |
Unique code identifying the product brand. |
| brandLogoUrl |
URL pointing to the brand’s logo image. |
| providerName |
Name of the provider or network offering the product. |
| description |
Detailed product description. I may include coverage countries, usage terms, and validity period. |
| productMoreInfoUrl |
URL providing additional product details or documentation (if applicable). |
| expirationDate |
Date when the product listing or voucher expires (if applicable). |
| validity |
This field describes how long the product remains valid after purchase or activation. If this field is empty, the product may not have a specific validity period, or the validity information may be included in the product description. |
| fxRate.rate |
Exchange rate applied when converting from the original currency to the wallet currency. |
| fxRate.currencyCode |
Currency code associated with the exchange rate. |
| denominations.type |
Indicates whether the product value is fixed or within a range (e.g., fixed). |
| denominations.minValue |
Minimum allowable purchase value. For fixed products, this equals the maxValue. |
| denominations.maxValue |
Maximum allowable purchase value. For fixed products, this equals the minValue. |
| denominations.currencyCode |
Currency code applicable to the denomination values. |
| sysComment |
System-generated note explaining pricing or conversion logic. |
| redeemableCountryCodes |
List of ISO country codes where the product can be redeemed or expected to be used(e.g., GBR). |
PLEASE NOTE:
The value or originalValue is the faceValue of the product in its original currency.
The targetValue and productCost reflect currency conversion based on the applicable fxRate.
The fxRate is determined by the walletid in use.
For fixed denomination products, the minValue and maxValue will be the same. For range denomination products, a value within the specified range must be provided when purchasing.
The redeemableCountryCodes field indicates geographical usage restrictions where applicable.
|
|
17
|
This endpoint allows you to get list of all product brands
GET: {baseurl}/api/v1/product/brands
Optional Filtering by Country using countryCode filter
You can pull available product brands in a country by filtering for a specific country (e.g USA) using the following syntax:
{baseurl}/api/v1/product/brands?filters={"countryCode":"USA"}
Optional Filtering by Product Category using categoryCode filter
You can pull available product brands for a specific product category (e.g giftcard) using the following syntax:
{baseurl}/api/v1/product/brands?filters={"categoryCode":"giftcard"}
Sample Response:
{
"authenticated": true,
"sysDate": "2024-10-14T20:55:57.408Z",
"sysErr": 200,
"sysId": 241014205585143174,
"sessionUid": "S:IBSUITESYAVATSZSKHUUCGPQN",
"requestStatus": "PROCESSED",
"message": "REQUEST OK",
"response": [
{
"id": 33,
"name": "Adidas UK",
"brandCode": "adidas-uk",
"description": "Adidas UK",
"countryCode": "GBR",
"country": "United Kingdom",
"logoUrl": "https://evend-assets.s3.amazonaws.com/app-images/brand-images/1484/logo"
},
{
"id": 10,
"name": "Apple-UK",
"brandCode": "apple-uk",
"description": "Apple UK",
"countryCode": "GBR",
"country": "United Kingdom",
"logoUrl": "https://evend-assets.s3.amazonaws.com/app-images/brand-images/1484/logo"
},
{
"id": 38,
"name": "Airbnb Uk",
"brandCode": "airbnb-uk",
"description": "Airbnb Uk",
"countryCode": "GBR",
"country": "United Kingdom",
"logoUrl": "https://evend-assets.s3.amazonaws.com/app-images/brand-images/1484/logo"
},
{
"id": 40,
"name": "AirlineGift UK",
"brandCode": "airlinegift-uk",
"description": "AirlineGift UK",
"countryCode": "GBR",
"country": "United Kingdom",
"logoUrl": "https://evend-assets.s3.amazonaws.com/app-images/brand-images/1484/logo"
},
{
"id": 41,
"name": "Aldi UK",
"brandCode": "aldi-uk",
"description": "Aldi UK",
"countryCode": "GBR",
"country": "United Kingdom",
"logoUrl": "https://evend-assets.s3.amazonaws.com/app-images/brand-images/1484/logo"
}
]
}
| Attribute |
Description |
| id |
A unique numeric identifier for the country or region |
| name |
The name of the brand |
| brandCode |
The a unique code representing the brand. |
| description |
More details about the brand |
| countryCode |
Country Code that the brand is associated with |
| country |
Country name that the brand is associated with |
| logoUrl |
Url to the brand logo where applicable. |
|
|
18
|
To retrieve products that can be used in a specific country, use the Get Product List By Category endpoint:
GET: api/v1/Product/Category/{categoryCode}
You can filter the product list using the countryCode filter parameter.
Example – Get eSIM products usable in the USA
{baseUrl}/api/v1/Product/Category/esim?filters={"countryCode":"USA"}
Example – Get eSIM products usable in USA and Great Britain
{baseUrl}/api/v1/Product/Category/esim?filters={"countryCode":"USA,GBR"}
The response will return products whose redeemableCountryCodes include the specified countries.
|
|
19
|
This endpoint allows you to get list of all product brand families
GET: {baseurl}/api/v1/product/brand-families
Optional Filtering by Country using countryCode filter
You can get available product brand families in a country by filtering for a specific country (e.g USA) using the following syntax:
{baseurl}/api/v1/product/brand-families?filters={"countryCode":"USA"}
Optional Filtering by Product Category using categoryCode filter
You can get available product brand families for a specific product category (e.g giftcard) using the following syntax:
{baseurl}/api/v1/product/brand-families?filters={"categoryCode":"giftcard"}
Sample Response:
{
"authenticated": true,
"sysDate": "2024-10-14T20:55:57.408Z",
"sysErr": 200,
"sysId": 241014205585143174,
"sessionUid": "S:IBSUITESYAVATSZSKHUUCGPQN",
"requestStatus": "PROCESSED",
"message": "REQUEST OK",
"response": [
{
"brandFamilyCode": "Amazon",
"brandFamily": "Amazon",
"productCount": 4,
"countryCount": 3,
"availableInCountries": "AED, GBR, USA"
},
{
"brandFamilyCode": "Apple",
"brandFamily": "Apple",
"productCount": 1,
"countryCount": 1,
"availableInCountries": "AED"
},
{
"brandFamilyCode": "Gift-Me-Crypto",
"brandFamily": "Gift-Me-Crypto",
"productCount": 2,
"countryCount": 2,
"availableInCountries": "GBR, USA"
},
{
"brandFamilyCode": "Netflix",
"brandFamily": "Netflix",
"productCount": 2,
"countryCount": 2,
"availableInCountries": "GBR, USA"
}
]
}
Below is a description of attributes returned when retrieving Brand Family records.
| Attribute |
Description |
| brandFamilyCode |
Unique code representing the brand family. This value is typically used for filtering or querying products under the same parent brand. |
| brandFamily |
Display name of the parent brand grouping (e.g., Netflix). This represents the master brand under which related regional or currency-specific brands are grouped. |
| productCount |
Total number of products available under this brand family. |
| countryCount |
Number of distinct countries where products under this brand family are available. |
| availableInCountries |
Comma-separated list of ISO country codes where the brand family has available products (e.g., GBR for Great Britain, USA for United States). |
|
|
20
|
The redeemableCountryCodes field indicates the countries where a product can be redeemed or used.
This field is mainly applicable to eSIM products, and all eSIM products usually include one or more country codes in this field.
Example
"redeemableCountryCodes": ["GBR", "USA", "NGA"]
The values returned are ISO country codes representing the countries where the product is valid for use or redemption.
If the field contains an empty array, for example:
"redeemableCountryCodes": []
This usually means the product can be redeemed online globally or is not restricted to a specific country or region.
|
|
21
|
This endpoint allows you to retrieve a list of Sub Categories that are available for a Product Category. Please use the categoryCode in the GET request and not the Category name.
Endpoint
GET: api/v1/Product/SubCategory/{categoryCode}
Sample Request: To get all the available Sub Categories under category Gift Card. Use the Gift Card categoryCode i.e giftcard in the request as shown below
{baseurl}/api/v1/Product/SubCategory/giftcard
NOTE: You can get the list of all Categories and their CategoryCode from the endpoint shown below
{baseUrl}/api/v1/Product/Categories
Additional Required Request Headers:
X-Currency-Id and X-Currency-Code
Sample Response:
{
authenticated: true,
sysDate: 2023-04-08T09:09:41.903Z,
sysErr: 200,
sysId: 230408090966705261,
sessionUid: S:SRVBPHSDOBJGQREPJDPRGBQFE,
requestStatus: PROCESSED,
message: REQUEST OK,
response: [
{
"id": 2,
"subCategory": "Charity & Donations",
"subCategoryCode": "Charity-Donations"
},
{
"id": 4,
"subCategory": "E-Commerce & Online Shopping",
"subCategoryCode": "E-Commerce-Online-Shopping"
},
{
"id": 5,
"subCategory": "Electronics & Gadgets",
"subCategoryCode": "Electronics-Gadgets"
},
{
"id": 7,
"subCategory": "Fashion, Beauty & Lifestyle",
"subCategoryCode": "Fashion-Beauty-Lifestyle"
}
]
}
| Attribute |
Description |
| id |
Unique identifier for the subcategory. |
| subCategory |
Name of the subcategory (e.g., Electronics & Gadgets). |
| subCategoryCode |
Code representing the subcategory (e.g., Electronics-Gadgets). |
|
|
22
|
This endpoint allows you to retrieve a list of airtime and data bundle products using airtime or data-bundle as categoryCode in the GET request.
Airtime Endpoint: {baseurl}/api/v1/Product/Category/airtime
Databundle Endpoint: {baseurl}/api/v1/Product/Category/data-bundle
Endpoint Sample Request for Airtime
GET:api/v1/Product/Category/{categoryCode}
Sample Request for Airtime: CategoryCode using airtime
{baseurl}/api/v1/Product/Category/airtime
Pull Airtime using Filters
To filter airtime products by country or region, you can add a filters query parameter to the endpoint. For example, to get products in the "airtime" category available in a country, use the following request:
{baseurl}/api/v1/Product/Category/airtime?filters={"countryCode":"{countryCode}"}
To pull all products in a airtime category, regardless of country or region, you can also use the ALL filter value. For example, to get all products in the "airtime" category for all countries:
{baseurl}/api/v1/Product/Category/airtime?filters={"countryCode":"ALL"}
You can obtain a list of all country codes by executing a GET request to:
{baseurl}/api/v1/Product/Countries
Additional Required Request Headers:
X-Currency-Id and X-Currency-Code
NOTES:
You can obtain a list of all available country codes by executing a GET request to:
{baseurl}/api/v1/product/countries
You can obtain a list of all available sub category codes for a Category of product by executing a GET request to:
{baseurl}/api/v1/product/SubCategory/{categoryCode}
Sample Response:
{
authenticated: true,
sysDate: 2023-04-08T09:09:41.903Z,
sysErr: 200,
sysId: 230408090966705261,
sessionUid: S:SRVBPHSDOBJGQREPJDPRGBQFE,
requestStatus: PROCESSED,
message: REQUEST OK,
response: [
{
"originalCurrencyId": 160,
"targetCurrencyId": 230,
"originalCurrencyCode": "NGN",
"targetCurrencyCode": "USD",
"originalValue": 500.00,
"targetValue": 0.278000,
"status": 1,
"category": "AirTime",
"categoryCode": "airtime",
"subCategory": "Africa - Nigeria - MTN",
"subCategoryCode": "Africa-Nigeria-MTN",
"productId": 9418,
"productCode": "MFIN5OR",
"brandCode": "mtn-nigeria",
"brandLogoUrl": "https://evend-assets-brands.aws.com/mylogo.png",
"providerId": 123,
"providerName": "eVend Data Store",
"name": "MTN Airtime",
"description": "MTN Airtime. Product Code MFIN-5-OR",
"productMoreInfoUrl": "#",
"expirationDate": "2035-12-09",
"value": 500.00,
"valueCurrencyId": 160,
"valueCurrencyCode": "NGN",
"productCost": 0.278000,
"productCostCurrencyCode": "USD",
"productCostCurrencyId": 230,
"sysComment": "Cost Converted from base(NGN) to USD rate of 0.000556",
"denominations": [
{
"type": "fixed",
"minValue": 500.0,
"maxValue": 500.0,
"currencyCode": "NGN"
},
{
"type": "range",
"minValue": 500.0,
"maxValue": 50000.0,
"currencyCode": "NGN"
}
]
},
{
"originalCurrencyId": 160,
"targetCurrencyId": 230,
"originalCurrencyCode": "NGN",
"targetCurrencyCode": "USD",
"originalValue": 500.00,
"targetValue": 0.278000,
"status": 1,
"category": "AirTime",
"categoryCode": "airtime",
"subCategory": "Africa - Nigeria - AIRTEL",
"subCategoryCode": "Africa-Nigeria-AIRTEL",
"productId": 9419,
"productCode": "MFIN1OR",
"brandCode": "airtel-nigeria",
"brandLogoUrl": "https://evend-assets-brands.aws.com/mylogo.png",
"providerId": 123,
"providerName": "eVend Data Store",
"name": "Airtel NG Airtime",
"description": "Airtel Airtime. Code MFIN-1-OR",
"productMoreInfoUrl": "#",
"expirationDate": "2025-12-09",
"value": 500.00,
"valueCurrencyId": 160,
"valueCurrencyCode": "NGN",
"productCost": 0.278000,
"productCostCurrencyCode": "USD",
"productCostCurrencyId": 230,
"sysComment": "Cost Converted from base(NGN) to USD rate of 0.000556",
"denominations": [
{
"type": "fixed",
"minValue": 500.0,
"maxValue": 500.0,
"currencyCode": "NGN"
},
{
"type": "range",
"minValue": 500.0,
"maxValue": 50000.0,
"currencyCode": "NGN"
}
]
},
{
"originalCurrencyId": 160,
"targetCurrencyId": 230,
"originalCurrencyCode": "NGN",
"targetCurrencyCode": "USD",
"originalValue": 500.00,
"targetValue": 0.278000,
"status": 1,
"category": "AirTime",
"categoryCode": "airtime",
"subCategory": "Africa - Nigeria - GLO",
"subCategoryCode": "Africa-Nigeria-GLO",
"productId": 9420,
"productCode": "MFIN6OR",
"brandCode": "glo-nigeria",
"brandLogoUrl": "https://evend-assets-brands.aws.com/mylogo.png",
"providerId": 123,
"providerName": "eVend Data Store",
"name": "Glo NG Airtime",
"description": "Glo NG Airtime. Code MFIN-6-OR",
"productMoreInfoUrl": "#",
"expirationDate": "2025-12-09",
"value": 500.00,
"valueCurrencyId": 160,
"valueCurrencyCode": "NGN",
"productCost": 0.278000,
"productCostCurrencyCode": "USD",
"productCostCurrencyId": 230,
"sysComment": "Cost Converted from base(NGN) to USD rate of 0.000556",
"denominations": [
{
"type": "fixed",
"minValue": 500.0,
"maxValue": 500.0,
"currencyCode": "NGN"
},
{
"type": "range",
"minValue": 500.0,
"maxValue": 50000.0,
"currencyCode": "NGN"
}
]
},
{
"originalCurrencyId": 160,
"targetCurrencyId": 230,
"originalCurrencyCode": "NGN",
"targetCurrencyCode": "USD",
"originalValue": 500.00,
"targetValue": 0.278000,
"status": 1,
"category": "AirTime",
"categoryCode": "airtime",
"subCategory": "Africa - Nigeria - 9Mobile",
"subCategoryCode": "Africa-Nigeria-9Mobile",
"productId": 9421,
"productCode": "MFIN2OR",
"brandCode": "nigeria-9mobile",
"brandLogoUrl": "https://evend-assets-brands.aws.com/mylogo.png",
"providerId": 123,
"providerName": "eVend Data Store",
"name": "9mobile NG Airtime",
"description": "9mobile NG Airtime. Code MFIN-2-OR",
"productMoreInfoUrl": "#",
"expirationDate": "2025-12-09",
"value": 500.00,
"valueCurrencyId": 160,
"valueCurrencyCode": "NGN",
"productCost": 0.278000,
"productCostCurrencyCode": "USD",
"productCostCurrencyId": 230,
"sysComment": "Cost Converted from base(NGN) to USD rate of 0.000556",
"denominations": [
{
"type": "fixed",
"minValue": 500.0,
"maxValue": 500.0,
"currencyCode": "NGN"
},
{
"type": "range",
"minValue": 500.0,
"maxValue": 50000.0,
"currencyCode": "NGN"
}
]
}
]
}
| Attribute |
Description |
| originalCurrencyId |
ID of the original currency used for the product. |
| targetCurrencyId |
ID of the target currency after conversion. |
| originalCurrencyCode |
Currency code of the original currency (e.g., GBP). |
| targetCurrencyCode |
Currency code of the target currency (e.g., USD). |
| originalValue |
Value of the product in the original currency. |
| targetValue |
Converted value of the product in the target currency. |
| status |
Status of the product (e.g., 1 is active, 0 is inactive). |
| category |
General category of the product (e.g., Gift Card). |
| categoryCode |
Code representing the product's category. |
| subCategory |
Specific subcategory of the product (e.g., Home & Living). |
| subCategoryCode |
Code representing the product's subcategory. |
| productId |
Unique identifier for the product. |
| productCode |
Code representing the specific product. |
| brandCode |
Code representing the product brand. |
| brandLogoUrl |
Url for the product brand logo. |
| providerId |
Unique identifier of the product provider. |
| providerName |
Name of the provider offering the product. |
| name |
Name of the product. |
| description |
Brief description of the product. |
| productMoreInfoUrl |
URL for more information about the product. |
| expirationDate |
Date when the product expires. |
| value |
The face value of the product. |
| valueCurrencyId |
ID of the currency of the product's value. |
| valueCurrencyCode |
Currency code used for the product's value (e.g., USD). |
| productCost |
The product cost. Amount paid for the product. This is exclusive of any commission received |
| productCostCurrencyId |
ID of the currency of the product's cost. |
| productCostCurrencyCode |
Currency code used for the product's cost (e.g., USD). |
| sysComment |
System-generated comment explaining the value conversion where applicable. |
|
|
23
|
This endpoint allows you to retrieve detailed information about a specific eSIM, including its plan name, data allowance, and current status. Use the ICCID of the eSIM in the GET request path.
Endpoint : GET: api/v1/report/esim/details/{iccid}
Sample Request: To get the details of a specific eSIM, include its ICCID in the URL as shown below.
{baseUrl}/api/v1/report/esim/details/8943108165011804478
Sample Response:
{
"authenticated": true,
"sysDate": "2025-11-28T13:44:47.537Z",
"sysErr": 200,
"sysId": 251128134410826655,
"sessionUid": "S:YIOCSWUSJGIHHFNITKYRQSNDB",
"requestStatus": "PROCESSED",
"message": "REQUEST OK",
"response": {
"id": 4528,
"iccid": "8943108165011804478",
"planName": "Demo eSim Plan 1GB",
"status": "Data started",
"lastUpdated": "2025-11-28T13:44:47.542Z",
"validityInDays": 7,
"totalDataAllowanceGb": "1.02",
"remainingDataGb": "1.02",
"message": "Esim Details"
}
}
| Attribute |
Description |
| id |
Unique identifier for the eSIM record. |
| iccid |
Integrated Circuit Card Identifier (ICCID) - the unique serial number of the eSIM. |
| planName |
Name of the data plan associated with the eSIM. |
| status |
Current operational state of the eSIM (e.g., Pending Activation, Data started, Expired). |
| lastUpdated |
Date and time when the eSIM status or usage was last updated. |
| validityInDays |
Total validity period of the eSIM plan in days. |
| totalDataAllowanceGb |
Total data allowance for the plan, expressed in gigabytes (GB). |
| remainingDataGb |
Remaining data available for use, in gigabytes (GB). |
| message |
Response message or additional context for the retrieved data. |
Usage Notes:
- The ICCID must belong to an eSIM registered under your account.
- Use this endpoint to display or verify live usage information and plan details.
- Values for remainingDataGb and status update in near real-time based on network reporting.
|
|
24
|
This endpoint allows you to validate a Utility Service such as Electricty, Cable TV unique account ID before making a purchase.
This endpoint will show you available product codes that you can use when purchasing certain services and if the uniqueAccountId provided is valid
Validation Endpoint: {baseurl}/api/v1/validations
Required Input Fields
| Attribute |
Required |
Description |
| uniqueAccountId |
YES |
This is the Unique Customer or Client Account number for the service been requested. E.g Meter number, DTSV Smart Card number etc |
| productId |
YES/NO |
This is the Product id for the product or service. Other optional fields will be ignored if this field is provided |
| serviceCode |
YES/NO |
Specifies the Service Code for the product. Please check the product listing for this value. This field is optional if the productId is provided. |
| brandCode |
YES/NO |
Specifies the Brand Code for the product. Please check the product listing for this value. This field is optional if the productId is provided. |
| serviceType |
YES/NO |
Specifies the service type for the product. For utility products, the value must be either PREPAID or POSTPAID. This field is optional if the productId is provided. |
Sample Request:
{
"serviceCode":"TV",
"productId":123,
"uniqueAccountId":"4111ZZZZ863979",
"brandCode":"DSTV",
"serviceType":"PREPAID"
}
Sample Response:
{
"authenticated": true,
"sysDate": "2024-01-06T10:39:44.406Z",
"sysErr": 200,
"sysId": 240106103984646342,
"sessionUid": "S:ICXXLOSROUTFKQDSZTHFJFZLY",
"requestStatus": "PROCESSED",
"message": "REQUEST OK",
"response": {
"productId": 9422,
"providerId": 123,
"status": "200",
"message": "successful",
"accountName": "Test User",
"uniqueAccountId": "4111ZZZZ863979",
"brandCode": "DSTV",
"productOptions": [
{
"productName": "Compact + Showmax_",
"productCode": "ng_dstv_showcompe36",
"noOfMonths": 1,
"value": 17450
},
{
"productName": "ASIAE36 + SHOWMAXE36_",
"productCode": "ng_dstv_showasiae36",
"noOfMonths": 1,
"value": 15900
},
{
"productName": "DStv Indian_",
"productCode": "ng_dstv_asiae36",
"noOfMonths": 1,
"value": 12400
},
{
"productName": "DStv Yanga_",
"productCode": "ng_dstv_nnj1e36",
"noOfMonths": 1,
"value": 5100
},
{
"productName": "PremiumFrench + Showmax_",
"productCode": "ng_dstv_showprwfrnse36",
"noOfMonths": 1,
"value": 57500
},
{
"productName": "DStv Compact Plus_",
"productCode": "ng_dstv_comple36",
"noOfMonths": 1,
"value": 25000
},
{
"productName": "DStv French Touch_",
"productCode": "ng_dstv_frn7e36",
"noOfMonths": 1,
"value": 5800
},
{
"productName": "CompactPlus + Showmax_",
"productCode": "ng_dstv_showcomple36",
"noOfMonths": 1,
"value": 26750
}
],
"transactionReference": "20250106103944daauwrodttxydpjhcnbidspgq",
"validated": true
}
}
| Attribute |
Description |
| productId |
Unique identifier for the product. |
| providerId |
Identifier for the service provider. |
| productCode |
Code assigned to the product, can be null. |
| status |
Response status code indicating the request outcome. |
| message |
Descriptive message about the request status. |
| accountName |
Name of the account associated with the uniqueAccountId. |
| uniqueAccountId |
Unique identifier for the account. |
| brandCode |
Code representing the brand of the product. |
| productOptions |
List of available product options (when available). |
| productName |
Name of the product. |
| productCode |
Code assigned to the product. |
| noOfMonths |
Duration of the product subscription in months. |
| value |
Price or cost of the product. |
| validated |
Boolean flag indicating whether the data is validated. |
|
|
25
|
Some products require additional validation before purchase. When a product has the code USE_VALIDATION_PRODUCT_CODE, it means you must first validate the customer’s uniqueAccountId (for example, a DSTV number or other service identifier) before completing the transaction.
Validation & Purchase Flow
| SN |
Steps |
| 1 |
Check the product information. If the productCode is USE_VALIDATION_PRODUCT_CODE, validation is required before purchase. |
| 2 |
Use the Validation Endpoint (POST: /api/v1/validations) to validate the customer’s uniqueAccountId (e.g., DSTV number, subscription ID etc). |
| 3 |
If the validation is successful, the response will contain a list of all available or eligible products (also called bouquets) for the validated account. |
| 4 |
Each product in the validation response will include its actual productCode. This is the code you must use when making the purchase. |
| 5 |
Make the purchase request using the productCode returned from validation, and include the same uniqueAccountId used during the validation step. |
Important Notes
| Item |
Description |
| USE_VALIDATION_PRODUCT_CODE |
A placeholder product code indicating that account validation must be completed before the actual purchasable product code is known. |
| uniqueAccountId |
A required customer identifier used for validation (e.g., DSTV smart card number, meter number, or customer ID). |
| Validation Endpoint |
POST: /api/v1/validations — used to retrieve all valid products under the customer’s account. |
| Bouquets / Product Options |
These are the available products returned after validation, each containing its own real productCode. |
For full details on the validation process, please refer to the Validate Utility Account ID documentation (POST: /api/v1/validations).
|
|
26
|
This guide provides a step-by-step walkthrough to help you purchase airtime products from our API.
We will be using Nigerian airtime for this use case.
Please note that this is just a guide, and we trust that you will automate the process to suit your application's needs.
Please note {{baseUrl}} is the API base url
STEP 1: In the header of your request, make sure the following attributes are present
| Header |
Required |
Description |
| X-Api-Key |
Yes |
The API key for authenticating the API request |
| X-Nonce |
Yes |
A unique nonce value to prevent replay attacks |
| X-Signature |
Yes |
The signature for the API request. You are required to sign your APIKey+Nonce and include the signature in this header. |
| X-Wallet-Id |
Yes |
This is the wallet Id of the currency you wish to use to transanct. |
| X-Currency-Id |
No |
The ID of the currency being used in the request. Our system may ignore it in some requests if not relevant. This is depreciated. Use X-Wallet-Id instead |
| X-Currency-Code |
No |
X-Currency-Code is the ISO code of the currency being used in the request. Our system may ignore it in some requests if not relevant. This is depreciated. Use X-Wallet-Id instead |
STEP 2: Get List of Airtime products
GET: {{baseUrl}}/api/v1/Product/Category/airtime?filters={"countryCode":"nga"}
STEP 3: Choose Network you want to buy from and the note the following fields:
productId,providerId
STEP 4: Use values retrieved in Step 3 to fill the standard request payload and use the end point below.
POST: {{baseUrl}}/api/v1/orders
Sample Request Payload
{
productId:9418,
providerId:123,
value:500.00,
walletId:"NGN-456",
uniqueAccountId : "+2348038030133",
transactionTitle : "MTN Nigeria Airtime",
transactionComment : "MTN Nigeria Airtime via Voucher-API",
beneficiaryEmail : "info@vendifydigital.com"
}
Sample Response
{
"authenticated": true,
"sysDate": "2025-01-29T11:57:11.976Z",
"sysErr": 200,
"sysId": 250129115711054438,
"sessionUid": "S:BAXPCIDRKCCQDUHEFAYMWKVOD",
"requestStatus": "PROCESSED",
"message": "REQUEST OK",
"response": {
"responseStatus": "SUCCESS",
"responseMessage": "Product purchased successfully. Email receipt sent.",
"transactionReference": "250129115711054438:S:BAXPCIDRKCCQDUHEFAYMWKVOD",
"voucherCode": "AIRT 2501 2911 5711 0544 38:S :BAX PCID RKCC QDUH EFAY MWKV OD",
"productId": 9418,
"productCode": "MFIN5OR",
"providerId": 123,
"providerName": "MTN NG",
"name": "MTN Airtime",
"description": "MTN Airtime. Product Code MFIN-5-OR",
"productMoreInfoUrl": "#",
"expirationDate": "2035-12-09",
"value": 500.0,
"valueCurrencyId": 160,
"valueCurrencyCode": "NGN",
"productCost": 500.0,
"productCostCurrencyCode": "NGN",
"productCostCurrencyId": 160,
"sysComment": ""
}
}
|
|
27
|
To simulate a transaction that initially returns a PENDING status, use the following test numbers in the Sandbox environment for airtime purchase.
These test cases allow you to mimic real-world scenarios where a transaction status changes after some time. Some PENDING transactions may later complete as SUCCESSFUL or FAILED
|
|
28
|
To simulate SUCCESSFUL or FAILED transactions, use the following test numbers in the Sandbox environment for airtime purchase.
These test cases allow you to mimic real-world scenarios where a transaction is Successful or may Fail
|
|
29
|
Go to : PORTAL TOOLS ➝ Site Management ➝ Account Wallet Mgmt
This page allows you to set up a dedicated bank account (wallet) that you can transfer funds to in order to top up your eVend wallet.
| SN |
Instruction |
| 1 |
Please ensure you enter your full name exactly as it appears on your identity document. |
| 2 |
During the setup process, you will receive an email requesting you to verify your identity. |
| 3 |
Follow the instructions in the email carefully to complete the identity verification. |
| 4 |
Once your identity is verified, a bank wallet account will be created for you. |
| 5 |
You will then be able to fund your eVend wallet directly from your bank account using the assigned bank name and account number. |
NOTE:
Please note that this is a one time setup. After you complete it, you will not need to repeat the process unless you choose to update the identity of the officer verified for the account.
|
|
30
|
To review what your system sent to the API and the response returned by the system, use the View API Logs feature available in the Portal.
Navigation Path
PORTAL TOOLS → Site Management → View API Logs
What You Can See
Request payload sent to the API
System response returned for the request
HTTP status code and timestamps
Audit Trail & Email Notification
Each time an API log is accessed, an audit trail entry is recorded and an automatic email notification is sent to the logged-in user confirming the log access.
This feature is useful for troubleshooting, reconciliation, and security monitoring.
|
|
31
|
Common Integration Questions
| Question |
Answer |
| I am getting an error asking for customer phone number when processing a utility (electricity) transaction. What should I do? |
Some utility products require additional fields such as accountTelephone.
Ensure you include the customer's phone number in the request payload when required by the product.
Sample Payload:
{
"productId": 9423,
"providerId": 123,
"productCode": "PHEDC-PREPAID",
"faceValue": 5000.0,
"uniqueAccountId": "25112401374",
"accountTelephone": "+2348188090111",
"transactionTitle": "electricity",
"transactionComment": "electricity",
"email": "support@vendifydigital.com"
}
|
| Should I validate a utility account before making a purchase? |
Yes. For utility services like electricity, you should first validate the account using the validation endpoint:
POST: {baseUrl}/api/v1/validations
Example Validation Payload:
{
"serviceCode": "ELECT",
"uniqueAccountId": "25112401374",
"brandCode": "PHEDC",
"serviceType": "PREPAID"
}
|
| Which endpoint should I use to fetch eSIM products? |
Use the category endpoint for eSIM products:
GET: {baseUrl}/api/v1/Product/Category/esim |
| Can I filter eSIM products by country? |
Yes. You can filter by country using the filters parameter:
{baseUrl}/api/v1/Product/Category/esim?filters={"countryCode":"NGA"} |
| Should I use product by brand or product by category? |
It is recommended to use the category endpoint:
GET: {baseUrl}/api/v1/Product/Category/{categoryCode}
You can then apply filters such as countryCode to refine the results instead of relying on brand-specific queries. Please check the documentation for /api/v1/Product/Category/{categoryCode} |
|
|
|