booking
Creat Event
Admin request to create event
Create events request description
Endpoint
POST {host}/ji036/v1/booking/event/create
Request Body params
| Parameter | Type | required | Description |
|---|---|---|---|
| status | boolean | false | by default the status will be set to true |
| eventName | String | true | status . name of the event |
| userId | String | true | the user creating the transaction |
| startDate | date | true | start date of the event. format 2022-11-15T08:38:20.195+00:00 |
| endDate | date | true | end date of the event. format 2022-11-15T08:38:20.195+00:00 |
| coverImage | String | false | a cover image or background image |
| images | Array | false | all the possible images to describe the event |
| ticket | Array | false | all the possible ticket of the array, not necessarily required during the creation of event |
| location | Object | true | the location of the event |
| poster | Object | false | the event creator information |
| specialGuest | Array | false | the special invitees to showcase the event |
Note: images is an array of string, ["https://host/bbfbrv.png", "https://host/bbfbrv.png"]
Request Body for ticket
Note: ticket is an array of objects
| Parameter | Type | required | Description |
|---|---|---|---|
| isValid | boolean | false | default is true, that is if the ticket is still valid |
| ticketName | String | true | the ticket name example: One Star |
| ticketType | String | false | the ticket name example: VIP |
| quantity | number | true | the number of ticket available for that ticket type |
| currency | String | false | default is XAF |
| createdBy | date | false | the user creating the ticket |
Request Body for location
Note: location is an object
| Parameter | Type | required | Description |
|---|---|---|---|
| venue | String | true | the event specific location, that is the precise venue, example Akwa Palace |
| country | String | true | the country where the event will take place |
| region | String | true | the region where the event will take place |
| town | String | true | the town where the event will take place |
| long | number | false | greenWhich longitude |
| lat | number | false | greenWhich latitude |
Request Body for poster
| Parameter | Type | required | Description |
|---|---|---|---|
| name | String | false | the user's real name |
| title | String | false | the user's title which he will want his guest to see |
| image | String | false | the user's image which he will like to show the invitees |
Request Body for specialGuest
Note: specialGuest is an array of object
| Parameter | Type | required | Description |
|---|---|---|---|
| name | String | false | the real name of the guest |
| title | String | false | the title of the guest example P-Square |
| role | String | false | the role he or she will play |
| description | String | false | describing the role of the special guest max 1000 character |
| country | String | false | Country where the guest is coming from |
| image | Array of strings | false | the user's image which he will like to show the invitees |
Sample request
Event payload
{
"eventName": "End of year party",
"startDate": "2022-11-15T08:38:20.195+00:00",
"endDate": "2022-11-15T11:38:20.195+00:00",
"coverImage": "https://tranzak.me/images/35223mage.png",
"images": [
"https://myimage.png",
"https://myimage.png"
],
"status": true,
"ticket": [
{
"quantity": 7,
"ticketType": "VIP",
"price": 2000,
"currency": "XAF",
"isValid": true,
"createdBy": "Bimeri Noel"
},
{
"quantity": 15,
"ticketType": "Normal",
"numberSold": 0,
"price": 500,
"currency": "XAF",
"isValid": true,
"createdBy": "Bimeri Noel"
}
],
"location": {
"location": "Paramount Hotel",
"country": "Cameroon",
"region": "South West",
"town": "Buea",
"long": 22345,
"lat": 34235
},
"poster": {
"name": "bimeri noel",
"title": "Papa Promo",
"image": "https://ttazak.me/image/532fdgvscs44.png"
},
"specialGuest": [
{
"name": "Magaza",
"title": "Big Mike",
"role": "Director",
"description": "He is the one to direct all the activities. He will be welcome by the president, he is from Dubai, a very popular man",
"image": [
"https://tranzak.me/images/4236534r2fcsf4f.jpg",
"https://tranzak.me/images/4236534r2fcsf4f.jpg"
],
"country": "Cameroon"
},
{
"name": "Peter and Paul",
"title": "P-Square",
"role": "Singers",
"description": "They will sing on their latest 2022 songs, they are all the qway from Nigeria",
"image": [
"https://tranzak.me/images/4236534r2fcsf4f.jpg"
],
"country": "Nigeria"
}
]
}
Sample response
{
"data": {
"images": [
"https://myimage.png",
"https://myimage.png"
],
"status": true,
"_id": "63696357e75b212c08c1e728",
"eventName": "End of year party",
"startDate": "2022-11-15T08:38:20.195Z",
"endDate": "2022-11-15T11:38:20.195Z",
"coverImage": "https://tranzak.me/images/35223mage.png",
"ticket": [
{
"quantity": 7,
"price": 2000,
"currency": "XAF",
"numberSold": 0,
"isValid": true,
"_id": "63696357e75b212c08c1e729",
"ticketType": "VIP",
"createdBy": "Bimeri Noel"
},
{
"quantity": 15,
"price": 500,
"currency": "XAF",
"numberSold": 0,
"isValid": true,
"_id": "63696357e75b212c08c1e72a",
"ticketType": "Normal",
"createdBy": "Bimeri Noel"
}
],
"location": {
"_id": "63696357e75b212c08c1e72b",
"location": "Paramount Hotel",
"country": "Cameroon",
"region": "South West",
"town": "Buea",
"long": 22345,
"lat": 34235
},
"poster": {
"_id": "63696357e75b212c08c1e72c",
"name": "bimeri noel",
"title": "Papa Promo",
"image": "https://ttazak.me/image/532fdgvscs44.png"
},
"specialGuest": [
{
"image": [
"https://tranzak.me/images/4236534r2fcsf4f.jpg",
"https://tranzak.me/images/4236534r2fcsf4f.jpg"
],
"_id": "63696357e75b212c08c1e72d",
"name": "Magaza",
"title": "Big Mike",
"role": "Director",
"description": "He is the one to direct all the activities. He will be welcome by the president, he is from Dubai, a very popular man",
"country": "Cameroon"
},
{
"image": [
"https://tranzak.me/images/4236534r2fcsf4f.jpg"
],
"_id": "63696357e75b212c08c1e72e",
"name": "Peter and Paul",
"title": "P-Square",
"role": "Singers",
"description": "They will sing on their latest 2022 songs, they are all the qway from Nigeria",
"country": "Nigeria"
}
],
"eventNum": "T18H8APB41VQ0FEE",
"createdAt": "2022-11-07T19:58:15.324Z",
"updatedAt": "2022-11-07T19:58:15.324Z",
"__v": 0
},
"success": true,
"msg": "TRANSACTION_SUCCESSFUL"
}
Admin request to update event
Endpoint
POST {host}/ji036/v1/booking/event/update
Note: The payload is the same as that of create
Get all event
Endpoint
GET {host}/ji036/v1/booking/event/list
Sample response
{
"data": [
{
"images": [
"https://myimage1.png",
"https://myimage2.png",
"https://myimage3.png"
],
"status": true,
"_id": "6369039462d67b97f4613fcf",
"eventName": "Hello Events",
"startDate": "2022-11-15T08:38:20.195Z",
"endDate": "2022-11-15T11:38:20.195Z",
"coverImage": "https://tranzak.me/images/35223mages.png",
"ticket": [
{
"quantity": 8,
"price": 2000,
"currency": "XAF",
"numberSold": 0,
"isValid": true,
"_id": "6369039462d67b97f4613fd0",
"ticketType": "VIP",
"createdBy": "Bimeri Noel"
},
{
"quantity": 15,
"price": 500,
"currency": "XAF",
"numberSold": 0,
"isValid": true,
"_id": "6369039462d67b97f4613fd1",
"ticketType": "Normal",
"createdBy": "Bimeri Noel"
}
],
"location": {
"_id": "6369039462d67b97f4613fd2",
"location": "Paramount Hotels",
"country": "Cameroons",
"region": "South Wests",
"town": "Buea",
"long": 22345,
"lat": 34235
},
"poster": {
"_id": "6369039462d67b97f4613fd3",
"name": "bimeri noel",
"title": "Papa Promo, one in",
"image": "https://ttazak.me/image/532fdgvscs44images.png"
},
"specialGuest": [
{
"image": [
"https://tranzak.me/images/4236534r2fcsf4f.jpg",
"https://tranzak.me/images/4236534r2fcsf4f.jpg"
],
"_id": "6369039462d67b97f4613fd4",
"name": "Magaza Noel",
"title": "Big Mike Monster",
"role": "Director",
"description": "He is the one to direct all the activities. He will be welcome by the president, he is from Dubai, a very popular man",
"country": "Cameroon"
},
{
"image": [
"https://tranzak.me/images/4236534r2fcsf4f.jpg",
"https://tranzak.me/images/4236534r2fcsf4f.jpg",
"https://tranzak.me/images/4236534r2fcsf4f.jpg"
],
"_id": "6369039462d67b97f4613fd5",
"name": "Peter and Paul",
"title": "P-Square",
"role": "Singers",
"description": "They will sing on their latest 2022 songs, they are all the qway from Nigeria",
"country": "Nigeria"
}
],
"eventNum": "17OYNOVIWZGF3QHM",
"createdAt": "2022-11-07T13:09:40.013Z",
"updatedAt": "2022-11-07T18:00:28.653Z",
"__v": 8
},
],
"success": true,
"msg": "TRANSACTION_SUCCESSFUL"
}
Get all Active event
Endpoint
GET {host}/ji036/v1/booking/event/list/active
Sample response
{
"data": [
{
"images": [
"https://myimage1.png",
"https://myimage2.png",
"https://myimage3.png"
],
"status": true,
"_id": "6369039462d67b97f4613fcf",
"eventName": "Hello Events",
"startDate": "2022-11-15T08:38:20.195Z",
"endDate": "2022-11-15T11:38:20.195Z",
"coverImage": "https://tranzak.me/images/35223mages.png",
"ticket": [
{
"quantity": 8,
"price": 2000,
"currency": "XAF",
"numberSold": 0,
"isValid": true,
"_id": "6369039462d67b97f4613fd0",
"ticketType": "VIP",
"createdBy": "Bimeri Noel"
},
{
"quantity": 15,
"price": 500,
"currency": "XAF",
"numberSold": 0,
"isValid": true,
"_id": "6369039462d67b97f4613fd1",
"ticketType": "Normal",
"createdBy": "Bimeri Noel"
}
],
"location": {
"_id": "6369039462d67b97f4613fd2",
"location": "Paramount Hotels",
"country": "Cameroons",
"region": "South Wests",
"town": "Buea",
"long": 22345,
"lat": 34235
},
"poster": {
"_id": "6369039462d67b97f4613fd3",
"name": "bimeri noel",
"title": "Papa Promo, one in",
"image": "https://ttazak.me/image/532fdgvscs44images.png"
},
"specialGuest": [
{
"image": [
"https://tranzak.me/images/4236534r2fcsf4f.jpg",
"https://tranzak.me/images/4236534r2fcsf4f.jpg"
],
"_id": "6369039462d67b97f4613fd4",
"name": "Magaza Noel",
"title": "Big Mike Monster",
"role": "Director",
"description": "He is the one to direct all the activities. He will be welcome by the president, he is from Dubai, a very popular man",
"country": "Cameroon"
},
{
"image": [
"https://tranzak.me/images/4236534r2fcsf4f.jpg",
"https://tranzak.me/images/4236534r2fcsf4f.jpg",
"https://tranzak.me/images/4236534r2fcsf4f.jpg"
],
"_id": "6369039462d67b97f4613fd5",
"name": "Peter and Paul",
"title": "P-Square",
"role": "Singers",
"description": "They will sing on their latest 2022 songs, they are all the qway from Nigeria",
"country": "Nigeria"
}
],
"eventNum": "17OYNOVIWZGF3QHM",
"createdAt": "2022-11-07T13:09:40.013Z",
"updatedAt": "2022-11-07T18:00:28.653Z",
"__v": 8
},
{
"images": [
"https://myimage.png",
"https://myimage.png"
],
"status": true,
"_id": "63695c866fafd62bdc0303b6",
"eventName": "Hello Event",
"startDate": "2022-11-15T08:38:20.195Z",
"endDate": "2022-11-15T11:38:20.195Z",
"coverImage": "https://tranzak.me/images/35223mage.png",
"location": {
"_id": "63695c866fafd62bdc0303b7",
"location": "Paramount House",
"country": "Cameroon",
"region": "South West",
"town": "Buea",
"long": 22345,
"lat": 34235
},
"poster": {
"_id": "63695c866fafd62bdc0303b8",
"name": "bimeri noel",
"title": "Papa Promo",
"image": "https://ttazak.me/image/532fdgvscs44.png"
},
"eventNum": "K3R1PSNRTQD599DE",
"ticket": [
{
"quantity": 8,
"price": 2000,
"currency": "XAF",
"numberSold": 0,
"isValid": true,
"_id": "6369039462d67b97f4613fd0",
"ticketType": "VIP",
"createdBy": "Bimeri Noel"
}
],
"specialGuest": [],
"createdAt": "2022-11-07T19:29:10.661Z",
"updatedAt": "2022-11-07T19:35:01.688Z",
"__v": 1
}
],
"success": true,
"msg": "TRANSACTION_SUCCESSFUL"
}
Get event by id
Endpoint
GET {host}/ji036/v1/booking/event/list/{eventId}
Sample response
{
"data": [
{
"images": [
"https://myimage1.png",
"https://myimage2.png",
"https://myimage3.png"
],
"status": true,
"_id": "6369039462d67b97f4613fcf",
"eventName": "Hello Events",
"startDate": "2022-11-15T08:38:20.195Z",
"endDate": "2022-11-15T11:38:20.195Z",
"coverImage": "https://tranzak.me/images/35223mages.png",
"ticket": [
{
"quantity": 8,
"price": 2000,
"currency": "XAF",
"numberSold": 0,
"isValid": true,
"_id": "6369039462d67b97f4613fd0",
"ticketType": "VIP",
"createdBy": "Bimeri Noel"
},
{
"quantity": 15,
"price": 500,
"currency": "XAF",
"numberSold": 0,
"isValid": true,
"_id": "6369039462d67b97f4613fd1",
"ticketType": "Normal",
"createdBy": "Bimeri Noel"
}
],
"location": {
"_id": "6369039462d67b97f4613fd2",
"location": "Paramount Hotels",
"country": "Cameroons",
"region": "South Wests",
"town": "Buea",
"long": 22345,
"lat": 34235
},
"poster": {
"_id": "6369039462d67b97f4613fd3",
"name": "bimeri noel",
"title": "Papa Promo, one in",
"image": "https://ttazak.me/image/532fdgvscs44images.png"
},
"specialGuest": [
{
"image": [
"https://tranzak.me/images/4236534r2fcsf4f.jpg",
"https://tranzak.me/images/4236534r2fcsf4f.jpg"
],
"_id": "6369039462d67b97f4613fd4",
"name": "Magaza Noel",
"title": "Big Mike Monster",
"role": "Director",
"description": "He is the one to direct all the activities. He will be welcome by the president, he is from Dubai, a very popular man",
"country": "Cameroon"
},
{
"image": [
"https://tranzak.me/images/4236534r2fcsf4f.jpg",
"https://tranzak.me/images/4236534r2fcsf4f.jpg",
"https://tranzak.me/images/4236534r2fcsf4f.jpg"
],
"_id": "6369039462d67b97f4613fd5",
"name": "Peter and Paul",
"title": "P-Square",
"role": "Singers",
"description": "They will sing on their latest 2022 songs, they are all the qway from Nigeria",
"country": "Nigeria"
}
],
"eventNum": "17OYNOVIWZGF3QHM",
"createdAt": "2022-11-07T13:09:40.013Z",
"updatedAt": "2022-11-07T18:00:28.653Z",
"__v": 8
}
],
"success": true,
"msg": "TRANSACTION_SUCCESSFUL"
}
Book a ticket
Endpoint
POST {host}/ji036/v1/transaction/ticket
Sample request
{
"event_id": "trh56hbth5bt",
"ticket_id": "6gw6hb5",
"amount":3000,
"currency":"XAF",
"currencyCode":"XAF",
"recipientName":"",
"appId":"fe5gw5b5",
"orgId":"4sh5v5g5gq",
"userId":"v34tgg4gbt",
"recipientAccountNumber":"45gghg34f4f",
"paymentMethod":"MTN MoMo",
"serviceType":1,
"serviceName":"event Name",
"serviceRef":"trh56hbth5bt",
"remark":"",
"version":"",
"scopeId":"",
"sex":1
}
Sample response
{
"data": {
"currencyCode": "XAF",
"serviceType": 1,
"status": 10,
"version": null,
"sex": 1,
"_id": "6372939e243bc01e8cdecb8e",
"amount": "3000",
"currency": "XAF",
"recipientName": "",
"appId": "fe5gw5b5",
"orgId": "4sh5v5g5gq",
"userId": "v34tgg4gbt",
"recipientAccountNumber": "45gghg34f4f",
"paymentMethod": "MTN MoMo",
"serviceName": "event Name",
"serviceRef": "trh56hbth5bt",
"remark": "",
"scopeId": "",
"transactionNum": "9I47CZZ3M41X77WN",
"createdAt": "2022-11-14T19:14:38.175Z",
"updatedAt": "2022-11-14T19:14:38.175Z",
"__v": 0
},
"success": true,
"msg": "TRANSACTION_SUCCESSFUL"
}
Get transaction byId
Endpoint
GET {host}/ji036/v1/transaction/getById/{transactionId}
Sample response
{
"data": [
{
"currencyCode": "XAF",
"serviceType": 1,
"status": 10,
"version": null,
"sex": 1,
"_id": "6372847ef478ee2e2871aa34",
"amount": "0",
"currency": "XAF",
"recipientName": "bimeri noel",
"appId": "",
"orgId": "tztstmzud2s36vpf",
"userId": "68f8c53b42ef47e38664da826dd07a86",
"recipientAccountNumber": "",
"paymentMethod": "MTN MoMo",
"serviceName": "Hello Event",
"serviceRef": "63726c10b849a76190d7c04e",
"remark": "",
"scopeId": "",
"transactionNum": "SUI696YOK79TD2JH",
"createdAt": "2022-11-14T18:10:06.517Z",
"updatedAt": "2022-11-14T18:10:06.517Z",
"__v": 0
}
],
"success": true,
"msg": "TRANSACTION_SUCCESSFUL"
}
Get users latest transactions
Endpoint
GET {host}/ji036/v1/transaction/latest-by-user
Sample response
{
"data": [
{
"currencyCode": "XAF",
"serviceType": 1,
"status": 10,
"version": null,
"sex": 1,
"_id": "6372847ef478ee2e2871aa34",
"amount": "0",
"currency": "XAF",
"recipientName": "bimeri noel",
"appId": "",
"orgId": "tztstmzud2s36vpf",
"userId": "68f8c53b42ef47e38664da826dd07a86",
"recipientAccountNumber": "",
"paymentMethod": "MTN MoMo",
"serviceName": "Hello Event",
"serviceRef": "63726c10b849a76190d7c04e",
"remark": "",
"scopeId": "",
"transactionNum": "SUI696YOK79TD2JH",
"createdAt": "2022-11-14T18:10:06.517Z",
"updatedAt": "2022-11-14T18:10:06.517Z",
"__v": 0
}
],
"success": true,
"msg": "TRANSACTION_SUCCESSFUL"
}
Get users transactions
Endpoint
GET {host}/ji036/v1/transaction/mine
Sample response
{
"data": {
"list": [
{
"currencyCode": "XAF",
"serviceType": 1,
"status": 10,
"version": null,
"sex": 1,
"_id": "637295ca243bc01e8cdecb93",
"amount": "2000",
"currency": "XAF",
"recipientName": "bimeri noel",
"appId": "",
"orgId": "tztstmzud2s36vpf",
"userId": "68f8c53b42ef47e38664da826dd07a86",
"recipientAccountNumber": "",
"paymentMethod": "MTN MoMo",
"serviceName": "Hello Event",
"serviceRef": "637266a1946e005e004d757f",
"remark": "",
"scopeId": "",
"transactionNum": "Y2TBT8ECC7DPCRGH",
"createdAt": "2022-11-14T19:23:54.910Z",
"updatedAt": "2022-11-14T19:23:54.910Z",
"__v": 0
},
{
....
}
],
"total": 19,
"totalPages": 2,
"hasMore": true,
"currentPage": 1
},
"success": true,
"msg": "TRANSACTION_SUCCESSFUL"
}
cortex
Account
Account management. Displays list of standard accounts : PRIMARY - the "pseudo wallet" account BONUS - that stores the bonus offered by the system Merchant's default - the merchant default account (applicable only for merchants )
Endpoint
GET /v1/account/list
Filter parameters
None
Response
Account list
{
"data": {
"list": [
{
"id": "243",
"currencyCode": "XAF",
"type": "1",
"balanceAmount": 1000063226682,
"name": "",
"description": "",
"avatarUrl": null,
"label": "TYPE_PRIMARY",
"isActive": "1",
"createdAt": "2021-10-20 16:23:12"
},
{
"id": "245",
"currencyCode": "XAF",
"type": "4",
"balanceAmount": 0,
"name": "",
"description": "",
"avatarUrl": null,
"label": "TYPE_BONUS_REWARD",
"isActive": "1",
"createdAt": "2021-10-20 16:23:12"
},
{
"id": "247",
"currencyCode": "XAF",
"type": "5",
"balanceAmount": 2893929,
"name": "",
"description": "",
"avatarUrl": null,
"label": "TYPE_MERCHANT_DEFAULT",
"isActive": "1",
"createdAt": "2021-10-20 16:23:12"
}
]
},
"dateTime": "2021-10-28T09:38:57+00:00",
"duration": "0.04s",
"lang": "en-US",
"roleId": 1,
"roleLabel": "owner",
"scopeUserId": 87,
"success": true,
"userId": 87
}
Bonus Rewards
Bonus reward management interface (for end-user)
Status Codes
const STATUS_PENDING_ACCEPTANCE = 1 ;
const STATUS_ACTIVE = 2 ; //active
const STATUS_COMPLETED = 3; //Bonus used up
const STATUS_INACTIVE = -1 ;
List Bonus
Displays list of available bonus rewards Only bonus in PENDING or ACTIVE state will be shown.
Endpoint
GET /v1/bonus/list
Request Body params
| Parameter | Type | required | Description |
|---|---|---|---|
| id | int | true | ID of reward |
| status | int | true | status . STATUS_PENDING_ACCEPTANCE = 1 ; STATUS_ACTIVE = 2 ; STATUS_COMPLETED = 3; STATUS_INACTIVE = -1 ; |
Response
Bonus reward list
{
"data": {
"currentPage": 1,
"hasMore": false,
"list": [
{
"id": "10",
"bonusPlanId": "1",
"balance": 754,
"allocatedAmount": 754,
"status": "1",
"orgUserId": "23",
"createdByUserId": "23",
"expiresAt": "2022-04-30 02:41:59",
"createdAt": "2022-03-14 19:41:59",
"currencyCode": "XAF",
"statusText": "pending acceptance",
"name": "Cool bonus planssssssss",
"description": "Description of some cool bonus plan",
"typeText": "merchant payment"
},
{
"id": "9",
"bonusPlanId": "1",
"balance": 733,
"allocatedAmount": 733,
"status": "1",
"orgUserId": "23",
"createdByUserId": "23",
"expiresAt": "2022-04-30 02:41:58",
"createdAt": "2022-03-14 19:41:58",
"currencyCode": "XAF",
"statusText": "pending acceptance",
"name": "Cool bonus planssssssss",
"description": "Description of some cool bonus plan",
"typeText": "merchant payment"
},
],
"pageCount": [
1,
50
],
"pageSize": 10,
"totalItems": 9
},
"success": true,
"debugInfo": null,
"debug": {
"lang": "en-US",
"dateTime": "2022-03-14T21:22:43+00:00",
"hostname": "cortex01",
"serverIpAddress": "192.168.137.2",
"clientIpAddress": "192.168.137.1",
"duration": "0.092s",
"userId": 23,
"type": 3,
"orgUserId": 23,
"roleId": 1000,
"roleLabel": "owner",
"firstName": null,
"displayName": "tz23"
}
}
Activate/Accept Bonus
Confirms a bonus reward. Upon confirmation, the reward will be made available for use. Only bonus rewards with status STATUS_ACTIVE may be used to discount transaction.
Endpoint
POST /v1/bonus/list
Request Body params
| Parameter | Type | required | Description |
|---|---|---|---|
| id | int | true | ID of reward |
Response
The response shown in the view section
View details of a bonus reward
Confirms a bonus reward. Upon confirmation, the reward will be made available for use. Only bonus rewards with status STATUS_ACTIVE may be used to discount transaction.
Endpoint
GET /v1/bonus/view?id=<ID>
Request Body params
| Parameter | Type | required | Description |
|---|---|---|---|
| id | int | true | ID of reward |
Response
{
"id": 1,
"bonusPlanId": 1,
"balance": 0,
"allocatedAmount": 530,
"status": "3",
"expiresAt": "2022-04-30 01:37:07",
"createdAt": "2022-03-14 18:37:08",
"currencyCode": "XAF",
"statusText": "used up",
"name": "Cool bonus planssssssss",
"description": "Description of some cool bonus plan",
"type": "merchant payment"
}
Customers
Merchant interface to manage and interact with their customers. Customers are automatically created after completion of a financial transaction. Merchants may not be allowed to directly add users as customers of theirs.
Update a customer's info
Updates customer info
Endpoint
POST /v1/customer/update
Request Body Parameters
| Parameter | Type | required | Description |
|---|---|---|---|
| _id | String (100) | true | unique customer ID |
| displayName | String(100) | false | The display name |
| note | String(200) | false | note |
{
"_id": "CUSJ08ELDVUXLVYR",
"displayName" : "A basssddd customer" ,
"note" : "This is an awesome customer! Send s"
}
Response
The response data is shown in the VIEW section
See the [view] section
View
Displays customer info
Endpoint
GET /v1/customer/view?_id=customerId
Request Body Parameters
| Parameter | Type | required | Description |
|---|---|---|---|
| _id | String (100) | true | unique customer ID |
Response
The customer data
"data": {
"_id": "CUS7A6MU8W8EPYGB",
"acquisitionMethod": "1",
"acquisitionMethodText": "purchase",
"allTimePoints": "90",
"avatarUrl": null,
"createdAt": "2022-04-06 13:39:30",
"currencyCode": "XAF",
"currentPoints": "90",
"displayName": null,
"note": "",
"totalInboundAmount": 9000,
"totalInboundTransactionCount": "1",
"totalOutboundAmount": 0,
"totalOutboundTransactionCount": "0",
"updatedAt": "2022-04-06 14:39:54",
"userDisplayName": null,
"userId": "sys4o2ut70skfde6"
},
List customers
Lists customers
Endpoint
GET /v1/customer/list
Response
Listing
{
"data": {
"currentPage": 1,
"hasMore": false,
"list": [
{
"_id": "CUS7A6MU8W8EPYGB",
"displayName": "A basssddd customer",
"note": "A big spender. Spender!",
"acquisitionMethod": "1",
"totalInboundAmount": 9000,
"totalOutboundAmount": 0,
"totalInboundTransactionCount": "1",
"totalOutboundTransactionCount": "0",
"currentPoints": "90",
"allTimePoints": "90",
"createdAt": "2022-04-06 13:39:30",
"updatedAt": "2022-04-06 16:06:09",
"acquisitionMethodText": "purchase",
"currencyCode": "XAF",
"userId": "sys4o2ut70skfde6",
"avatarUrl": null,
"userDisplayName": null
},
{
"_id": "CUSGXPQ7A3EB6X6Z",
"displayName": null,
"note": "",
"acquisitionMethod": "1",
"totalInboundAmount": 16800,
"totalOutboundAmount": 0,
"totalInboundTransactionCount": "1",
"totalOutboundTransactionCount": "0",
"currentPoints": "163",
"allTimePoints": "163",
"createdAt": "2022-04-05 17:44:49",
"updatedAt": "2022-04-06 12:19:40",
"acquisitionMethodText": "purchase",
"currencyCode": "XAF",
"userId": "845f5c7c0a7249c69e689054e1634b15",
"avatarUrl": "null",
"userDisplayName": null
},
{
"_id": "CUSW2BVF5EL6Q9DP",
"displayName": "Freddy",
"note": "",
"acquisitionMethod": "1",
"totalInboundAmount": 199,
"totalOutboundAmount": 0,
"totalInboundTransactionCount": "1",
"totalOutboundTransactionCount": "0",
"currentPoints": "2",
"allTimePoints": "2",
"createdAt": "2022-04-05 15:41:57",
"updatedAt": "2022-04-05 16:45:37",
"acquisitionMethodText": "purchase",
"currencyCode": "XAF",
"userId": "5af45258d73640438aa0ec4e444f3439",
"avatarUrl": "null",
"userDisplayName": "Freddy"
}
],
"pageCount": [
1,
50
],
"pageSize": 10,
"totalItems": 3
},
"success": true,
"debugInfo": null,
"debug": {
"lang": "en-US",
"dateTime": "2022-04-06T15:08:08+00:00",
"hostname": "cortex01",
"serverIpAddress": "192.168.137.2",
"clientIpAddress": "192.168.137.1",
"duration": "0.039s",
"userId": 22,
"_userId": "tz22",
"scopeId": null,
"type": 3,
"orgUserId": 22,
"roleId": 1000,
"roleLabel": "owner",
"firstName": null,
"displayName": "tz22"
}
}
Other actions
The following are supported actions :
Search
For search , use the VIEW interface and pass the customerId in the param
Dashboard
Displays the merchant dashboard stats
Main Dashboard
Endpoint
GET /v1/dashboard/index
Filter parameters
None
Response
Merchant sales and other stats
{
"genStartTime": 66342990717678,
"accounts": {
"currencyCode": "XAF",
"balance": {
"primary": 999999998136934,
"merchant": 130000
},
"merchantSubAccounts": "1"
},
"sales": {
"amount": {
"allTime": 130000,
"last30Days": 130000,
"last7Days": 130000,
"last3Days": 130000,
"last24Hours": 130000,
"today": 130000
},
"volume": {
"allTime": "13",
"last30Days": "13",
"last7Days": "13",
"last3Days": "13",
"last24Hours": "13",
"today": "13"
},
"peakAmount": {
"allTime": 10000,
"last30Days": 10000,
"last7Days": 10000,
"last3Days": 10000,
"last24Hours": 10000,
"today": 10000
},
"timeSeries": {
"allTime": [
"10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000",
"2021-11-24 18:35:49,2021-11-24 18:35:52,2021-11-24 18:35:52,2021-11-24 18:35:53,2021-11-24 18:35:53,2021-11-24 18:35:54,2021-11-24 18:35:54,2021-11-24 18:35:55,2021-11-24 18:35:55,2021-11-24 18:35:56,2021-11-24 18:35:56,2021-11-24 18:35:57,2021-11-24 18:35:58"
],
"last30Days": {
"amount": [
10000,
10000,
10000,
10000,
10000,
10000,
10000,
10000,
10000,
10000,
10000,
10000,
10000
],
"transactionTime": [
"2021-11-24 18:35:49",
"2021-11-24 18:35:52",
"2021-11-24 18:35:52",
"2021-11-24 18:35:53",
"2021-11-24 18:35:53",
"2021-11-24 18:35:54",
"2021-11-24 18:35:54",
"2021-11-24 18:35:55",
"2021-11-24 18:35:55",
"2021-11-24 18:35:56",
"2021-11-24 18:35:56",
"2021-11-24 18:35:57",
"2021-11-24 18:35:58"
]
},
"last7Days": {
"amount": [
10000,
10000,
10000,
10000,
10000,
10000,
10000,
10000,
10000,
10000,
10000,
10000,
10000
],
"transactionTime": [
"2021-11-24 18:35:49",
"2021-11-24 18:35:52",
"2021-11-24 18:35:52",
"2021-11-24 18:35:53",
"2021-11-24 18:35:53",
"2021-11-24 18:35:54",
"2021-11-24 18:35:54",
"2021-11-24 18:35:55",
"2021-11-24 18:35:55",
"2021-11-24 18:35:56",
"2021-11-24 18:35:56",
"2021-11-24 18:35:57",
"2021-11-24 18:35:58"
]
},
"last3Days": {
"amount": [
10000,
10000,
10000,
10000,
10000,
10000,
10000,
10000,
10000,
10000,
10000,
10000,
10000
],
"transactionTime": [
"2021-11-24 18:35:49",
"2021-11-24 18:35:52",
"2021-11-24 18:35:52",
"2021-11-24 18:35:53",
"2021-11-24 18:35:53",
"2021-11-24 18:35:54",
"2021-11-24 18:35:54",
"2021-11-24 18:35:55",
"2021-11-24 18:35:55",
"2021-11-24 18:35:56",
"2021-11-24 18:35:56",
"2021-11-24 18:35:57",
"2021-11-24 18:35:58"
]
},
"last24Hours": {
"amount": [
10000,
10000,
10000,
10000,
10000,
10000,
10000,
10000,
10000,
10000,
10000,
10000,
10000
],
"transactionTime": [
"2021-11-24 18:35:49",
"2021-11-24 18:35:52",
"2021-11-24 18:35:52",
"2021-11-24 18:35:53",
"2021-11-24 18:35:53",
"2021-11-24 18:35:54",
"2021-11-24 18:35:54",
"2021-11-24 18:35:55",
"2021-11-24 18:35:55",
"2021-11-24 18:35:56",
"2021-11-24 18:35:56",
"2021-11-24 18:35:57",
"2021-11-24 18:35:58"
]
}
}
},
"outbound": {
"amount": {
"allTime": 7779930,
"last30Days": 7779930,
"last7Days": 7779930,
"last3Days": 7779930,
"last24Hours": 7779930,
"today": 7779930
},
"transfers": {
"amount": {
"allTime": 0,
"last30Days": 0,
"last7Days": 0,
"last3Days": 0,
"last24Hours": 0,
"today": 0
}
},
"refunds": {
"volume": {
"allTime": 0,
"last30Days": 0,
"last7Days": 0,
"last3Days": 0,
"last24Hours": 0,
"today": 0
}
}
},
"customer": {
"allTime": "1",
"last30Days": "1",
"last7Days": "1",
"last3Days": "1",
"last24Hours": "1",
"today": "1"
},
"createdAt": "2021-11-24 17:40:20",
"genEndTime": 66343060053763,
"netTime": 66342993710772280,
"merchantUserId": 87
}
Generate Stats
This should be called to refresh or generate/update the dash stats. Note that the stat generation is carried out asynchronously.
Endpoint
GET /v1/dashboard/generate
Filter parameters
None
Response
Success or failure message
{
"data": "Request successfully submitted",
"success": true,
"dateTime": "2021-11-22T20:55:25+00:00",
"duration": "0.248s",
"lang": "en-US",
"userId": 87,
"orgUserId": 87,
"roleId": 1000,
"roleLabel": "owner",
"hostname": "cortex01",
"serverIpAddress": "192.168.137.2"
}
Introduction to Cortex
Core Transaction Engine X, or Cortex for short, is the payment processing engine for Tranzak.
Base URL
The Base URL is staging-api.tranzak.me/fapi/
Request Method
For consistency, all requests that will create/update data in the backend shall be accessed via https POST requests. Read access will be carried out via https GET .
Authentication
Authentication will follow the same guideline as provided in the internal API development. All authentication tokens will be created by the user center and passed on in every request to the Cortex backend.
Invoice
Merchant invoice
Status Codes
const STATUS_DRAFT = 1 ;
const STATUS_PENDING = 2 ; //Active but not paid (unpaid)
const STATUS_PARTIALLY_PAID = 3 ; //FULLY paid
const STATUS_PAID = 4 ; //FULLY paid
const STATUS_CANCELLED = -1 ; //Cancelled
Create (from scratch)
Create an invoice from scratch
Endpoint
POST /v1/invoice/create
Request Body Parameters
| Parameter | Type | required | Description |
|---|---|---|---|
| title | String | true | Invoice title |
| currencyCode | String | true | the invoice currency code. Defaults to user's currency code |
| userInvoiceRef | String | false | custom invoice ref |
| totalTax | String | false | tax if applicable. default : 0 |
| billToName | String | false | Name of invoice |
| billToAddress | String | false | custom invoice ref |
| billToEmail | String | false | custom invoice ref |
| memo | String | false | Memo |
| activateUponCreation | String | false | Make invoice available for payment |
| clientNote | String | false | payer's note |
| items | String | true | JSON representation of the items (see request body) |
| receivingAccountId | Number | false | The MERCHANT account type account ID that the invoice will be paid into. Default : merchant default account |
| issueDate | String | false | Invoice date of issue |
| dueDate | String | false | Invoice due date |
| acceptPartialPayments | Boolean | false | Partial payments accepted? |
{
"invoiceId" : 2,
"userInvoiceRef" : "210ssssssssssss000" ,
"title" : "invoice tiles" ,
"totalTax" : 100,
"billToName" : "Tranzak Descriptinaria" ,
"billToAddress" : "Rue Druot" ,
"billToEmail" : "trrr@tranzak.net" ,
"memo" : "my memo" ,
"type" : 1,
"clientNote" : "Client note is cool" ,
"acceptPartialPayments" : 1,
"activateUponCreation" : 1,
"receivingAccountId" : "247" ,
"items" : [
{
"itemDescription" : "some item" ,
"unitPrice" : 1000,
"quantity" : 2
},
{
"itemDescription" : "some item2" ,
"unitPrice" : 100,
"quantity" : 2
},
{
"itemDescription" : "some item2" ,
"unitPrice" : 100,
"quantity" : 2
},
{
"itemDescription" : "some item3" ,
"unitPrice" : 100,
"quantity" : 2
}
]
}
Response
See VIEW section
Upload an invoice
Uploads an invoice file
Request body
| Parameter | Type | required | Description |
|---|---|---|---|
| title | String | true | Invoice title |
| fileUrl | String | true | file URL |
| amount | String | true | the amount (as shown in the invoice file) |
| currencyCode | String | true | the invoice currency code. Defaults to user's currency code |
| userInvoiceRef | String | false | custom invoice ref |
| totalTax | String | false | tax if applicable. default : 0 |
| billToName | String | false | Name of invoice |
| billToAddress | String | false | custom invoice ref |
| billToEmail | String | false | custom invoice ref |
| memo | String | false | Memo |
| activateUponCreation | String | false | Make invoice available for payment |
| clientNote | String | false | payer's note |
| receivingAccountId | Number | false | The MERCHANT account type account ID that the invoice will be paid into. Default : merchant default account |
| issueDate | String | false | Invoice date of issue |
| dueDate | String | false | Invoice due date |
| acceptPartialPayments | Boolean | false | Partial payments accepted? |
Update
Updates model
Endpoint
POST /v1/invoice/update
Request Body Parameters
| Parameter | Type | required | Description |
|---|---|---|---|
| _id | String | true | GC code |
See [[CREATE]] for other params
Response
See the VIEW section
View
Shows data
Endpoint
GET /v1/invoice/view?_id=INVOICE_ID
Request Body Parameters
Issue a GET request
Response
{
"data": {
"id": "20",
"key": "INVSBT22IQ4AFVJYHEPIVGW",
"userId": "87",
"accountId": null,
"userInvoiceRef": "210000",
"title": "invoice tiles",
"totalTax": "100",
"subtotal": "2600",
"currencyCode": "XAF",
"type": "1",
"issueDate": "2021-10-24",
"dueDate": "2021-10-24",
"billToName": "Tranzak Descriptinaria",
"billToAddress": "Rue Druot",
"billToEmail": "trrr@tranzak.net",
"billToUserId": null,
"memo": "my memo",
"clientNote": "Client note is cool",
"acceptPartialPayments": "1",
"status": "2",
"cancellationNote": null,
"hasInternalPayment": "0",
"hasExternalPayment": "0",
"totalExternalPaymentAmount": "0",
"jsonData": "[{\"itemDescription\":\"some item\",\"quantity\":2,\"unitPrice\":1000},{\"itemDescription\":\"some item2\",\"quantity\":2,\"unitPrice\":100},{\"itemDescription\":\"some item2\",\"quantity\":2,\"unitPrice\":100},{\"itemDescription\":\"some item3\",\"quantity\":2,\"unitPrice\":100}]",
"fileUrl": null,
"postedAt": null,
"createdAt": "2021-10-24 14:18:12",
"updatedAt": null,
"account": null
},
"dateTime": "2021-10-24T13:18:12+00:00",
"duration": "0.047s",
"lang": "en-US",
"roleId": 1,
"roleLabel": "owner",
"scopeUserId": 87,
"success": true,
"userId": 87
}
List
List items
Endpoint
GET /v1/invoice/list
Filter parameters
| Parameter | Type | required | Description |
|---|---|---|---|
| status | Number | true | [1 - draft, 2- pending , 3-active , 4-closed , 5-cancelled , 6-suspended] |
Response
Listing
{
"data": {
"list": [
{
"id": "23",
"key": "INVTJIR09U0P90BQC2DGO8E",
"userId": "87",
"accountId": null,
"userInvoiceRef": "210000",
"title": "invoice tiles",
"totalTax": "100",
"subtotal": "2600",
"currencyCode": "XAF",
"type": "1",
"issueDate": "2021-10-24",
"dueDate": "2021-10-24",
"billToName": "Tranzak Descriptinaria",
"billToAddress": "Rue Druot",
"billToEmail": "trrr@tranzak.net",
"billToUserId": null,
"memo": "my memo",
"clientNote": "Client note is cool",
"acceptPartialPayments": "1",
"status": "2",
"cancellationNote": null,
"hasInternalPayment": "0",
"hasExternalPayment": "0",
"totalExternalPaymentAmount": "0",
"jsonData": "[{\"itemDescription\":\"some item\",\"quantity\":2,\"unitPrice\":1000},{\"itemDescription\":\"some item2\",\"quantity\":2,\"unitPrice\":100},{\"itemDescription\":\"some item2\",\"quantity\":2,\"unitPrice\":100},{\"itemDescription\":\"some item3\",\"quantity\":2,\"unitPrice\":100}]",
"fileUrl": null,
"postedAt": null,
"createdAt": "2021-10-24 14:23:35",
"updatedAt": null,
"account": null
},
{
"id": "22",
"key": "INVTXNEGDROC3DBMKJVQXQ3",
"userId": "87",
"accountId": null,
"userInvoiceRef": "210000",
"title": "invoice tiles",
"totalTax": "100",
"subtotal": "2600",
"currencyCode": "XAF",
"type": "1",
"issueDate": "2021-10-24",
"dueDate": "2021-10-24",
"billToName": "Tranzak Descriptinaria",
"billToAddress": "Rue Druot",
"billToEmail": "trrr@tranzak.net",
"billToUserId": null,
"memo": "my memo",
"clientNote": "Client note is cool",
"acceptPartialPayments": "1",
"status": "2",
"cancellationNote": null,
"hasInternalPayment": "0",
"hasExternalPayment": "0",
"totalExternalPaymentAmount": "0",
"jsonData": "[{\"itemDescription\":\"some item\",\"quantity\":2,\"unitPrice\":1000},{\"itemDescription\":\"some item2\",\"quantity\":2,\"unitPrice\":100},{\"itemDescription\":\"some item2\",\"quantity\":2,\"unitPrice\":100},{\"itemDescription\":\"some item3\",\"quantity\":2,\"unitPrice\":100}]",
"fileUrl": null,
"postedAt": null,
"createdAt": "2021-10-24 14:23:34",
"updatedAt": null,
"account": null
},
],
"totalItems": 23,
"pageCount": [
1,
50
],
"pageSize": 20,
"currentPage": 1,
"hasMore": true
},
"dateTime": "2021-10-24T13:23:53+00:00",
"duration": "0.05s",
"lang": "en-US",
"roleId": 1,
"roleLabel": "owner",
"scopeUserId": 87,
"success": true,
"userId": 87
}
Add a payment
Adds a non-Tranzak payment using some other source
Endpoint
POST /v1/invoice/add-payment
Filter parameters
| Parameter | Type | required | Description |
|---|---|---|---|
| _id | Number | true | invoice ID |
| amount | Number | true | amount in invoice currency |
| paymentSourceId | Number | true | payment source ID 2 => PAYMENT_SOURCE_CASH , 3 => PAYMENT_SOURCE_OTHER_MEANS |
| note | Number | true | a note |
{
"_id" : "IV375WEJ3BEBPRJ4ZBS3",
"amount" : 1 ,
"paymentSourceId" : 2,
"note" : "We added payment !"
}
Response
See VIEW-PAYMENT section
View Payment
Views an invoice payment
Endpoint GET /invoice/view-payment?_id=PAYMENT_ID
{
"data": {
"_id": "IPQEZD1Z61RRQ78KJJMS",
"amount": 1,
"paymentId": null,
"paymentSourceId": 2,
"note": "We added payment !",
"createdAt": "2021-10-30 17:49:21",
"invoice": {
"_id": "IVOXIV5U4LYR5DY58EBI",
"userInvoiceRef": "5555",
"title": "invoice tiles",
"totalTax": 100,
"subtotal": 8000,
"totalPaid": 36,
"currencyCode": "XAF",
"type": 1,
"issueDate": "2021-10-30",
"dueDate": "2021-10-30",
"billToName": "Tranzak Descriptinaria",
"billToAddress": "Rue Druot",
"billToEmail": "trrr@tranzak.net",
"billToUserId": null,
"memo": "my memo",
"clientNote": "Client note is cool",
"acceptPartialPayments": 1,
"status": 3,
"cancellationNote": null,
"hasInternalPayment": 0,
"hasExternalPayment": 1,
"totalExternalPaymentAmount": 36,
"jsonData": "[{\"itemDescription\":\"some item\",\"quantity\":2,\"unitPrice\":1000},{\"itemDescription\":\"some item2\",\"quantity\":2,\"unitPrice\":1000},{\"itemDescription\":\"some item2\",\"quantity\":2,\"unitPrice\":1000},{\"itemDescription\":\"some item3\",\"quantity\":2,\"unitPrice\":1000}]",
"fileUrl": null,
"submittedAt": null,
"createdAt": "2021-10-30 17:49:21",
"updatedAt": "2021-10-30 18:49:01",
"receivingAccount": {
"name": "",
"description": "",
"id": 247,
"type": "Merchant account (Default)"
},
"statusText": "partially paid",
"merchant": {
"_id": "TZONL8EHWO00IGGY",
"displayName": "tz87",
"countryCode": "CM",
"verifiedName": null
}
},
"paymentSourceText": "paid via cash"
},
"dateTime": "2021-10-30T17:49:21+00:00",
"duration": "0.058s",
"lang": "en-US",
"roleId": 1,
"roleLabel": "owner",
"scopeUserId": 87,
"success": true,
"userId": 87
}
List Payments
List payments made to invoices. Use filters to filter through list
Endpoint GET /invoice/list-payments
Request Body (filters)
| Parameter | Type | required | Description |
|---|---|---|---|
| _id | String | false | Payment ID |
| invoiceId | String | false | _id of invoice |
| paymentId | String | false | payment Id |
| paymentSourceId | String | false | source ID |
RESPONSE
{
"data": {
"currentPage": 1,
"hasMore": false,
"list": [
{
"_id": "IP5NU8BZZ3XLIRXNW4W7",
"invoiceId": "IV22041519WYGAK1KD3C",
"amount": 100,
"paymentId": null,
"paymentSourceId": "2",
"note": "Payment via cash",
"createdAt": "2022-04-15 12:35:52",
"currencyCode": "XAF",
"paymentSourceText": "paid via cash"
},
{
"_id": "IPCRAKBRG8GBEE88CIFZ",
"invoiceId": "IV22041519WYGAK1KD3C",
"amount": 100,
"paymentId": null,
"paymentSourceId": "2",
"note": "Payment via cash",
"createdAt": "2022-04-15 12:35:51",
"currencyCode": "XAF",
"paymentSourceText": "paid via cash"
},
{
"_id": "IPZHFWEO8YTIS6PMWZ2H",
"invoiceId": "IV22041519WYGAK1KD3C",
"amount": 100,
"paymentId": null,
"paymentSourceId": "2",
"note": "Payment via cash",
"createdAt": "2022-04-15 12:35:51",
"currencyCode": "XAF",
"paymentSourceText": "paid via cash"
},
{
"_id": "IPKQS2NAXKN8VFQVITBV",
"invoiceId": "IV22041519WYGAK1KD3C",
"amount": 100,
"paymentId": null,
"paymentSourceId": "2",
"note": "Payment via cash",
"createdAt": "2022-04-15 12:35:50",
"currencyCode": "XAF",
"paymentSourceText": "paid via cash"
}
],
"pageCount": [
1,
50
],
"pageSize": 10,
"totalItems": 4
},
"success": true,
"debugInfo": null,
"debug": {
"lang": "en-US",
"dateTime": "2022-04-15T12:38:39+00:00",
"hostname": "cortex01",
"serverIpAddress": "192.168.137.2",
"clientIpAddress": "192.168.137.1",
"duration": "0.046s",
"userId": 25,
"_userId": "845f5c7c0a7249c69e689054e1634b15",
"scopeId": "stebnuufw93vrs",
"type": 2,
"orgUserId": 25,
"roleId": 1000,
"roleLabel": "owner",
"firstName": null,
"displayName": null
}
}
Other actions
Details
Displays invoice info. This interface is meant to be accessed by the public to view (and act on) an invoice.
Endpoint
GET /v1/invoice/details?_id=INVOICE_ID
Request Body Parameters
Issue a GET request
Response
See VIEW section
Cancel
Cancels an invoice
Endpoint
POST /v1/invoice/cancel
Submit
Submits an invoice in draft status and make it available to receive payment
Endpoint
POST /v1/invoice/submit
Create Transaction
Creates a transaction - to be called by the payer
Endpoint
POST /v1/invoice/create-transaction
Mark as paid
Marks the invoice as paid
Endpoint
POST /v1/invoice/mark-as-paid
Request body params
| Parameter | Type | required | Description |
|---|---|---|---|
| _id | String | true | Payment ID |
| paymentSourceId | String | true | _id of invoice |
| note | String | true | payment Id |
{
"_id": "IVRYCSMGIEW2OO6TMUPY",
"paymentSourceId" : 1,
"note" : "We closed this invoice !"
}
Move to draft
Moves an UNPAID invoice to draft status so that it can be edited
Endpoint
POST /v1/invoice/move-to-draft
Request Body
{
"_id": "IVRYCSMGIEW2OO6TMUPY"
}
Lucky Money (Merchant)
This is the lucky money interface.
Status Codes
const STATUS_PENDING = 1 ; //Not authorized (payment not made)
const STATUS_ACTIVE = 2 ; //Paid and available for picking
const STATUS_COMPLETED = 4; // ALL Draws successfully completed
const STATUS_CANCELLED = -1; // Unpaid - cancelled
const STATUS_CLOSED = -2 ; //LM expired with some draws not claimed. Campaign closed
const STATUS_REFUNDED = -3; //Refund was manually triggered
EVENTS (Via Webhook)
const WH_EVENT_LUCKY_MONEY_TRANSACTION_COMPLETED = 'LUCKYMONEY.TRANSACTION.COMPLETED' ;
const WH_EVENT_LUCKY_MONEY_LUCKY_DRAW = 'LUCKYMONEY.LUCKYDRAW' ;
Creates a LM Transaction
Creates a LM and returns the transaction payload which will be used for authorization. See [[Transaction]] section
Endpoint
POST /fapi/lucky-money/create-transaction
Request Body Parameters
| Parameter | Type | required | Description |
|---|---|---|---|
| luckyMoneyId | String | true | The unique lucky money ID |
| amount | Number | true | Amount (the default currency = currency of the user) |
| currencyCode | Number | false | the currency code e.g XAF, USD. (the currency = currency of the current user) |
| appId | String | true | the appId (if the LM is created by an app). Callbacks will be sent to the app (via webhooks) |
| payerMessage | Number | false | A custom message from the payer. |
| expiresAt | date | false | The expiry date. LM will not be allocated after the expiry date is reached |
| isBonusReward | Boolean | true | If the LM shall be allocated as bonus |
| bonusValidityHours | Number | false | usable if isBonusReward=true : How long the allocated bonus should last in hours (e.g 1, 24, 72) |
{
"luckyMoneyId": "sasaseefbhfghjfg",
"amount": 1000,
"currencyCode": "XAF",
"appId": "apwbmpg97os2ga",
"payerMessage": "Thank you for your awesomeness",
"isBonusReward": 1,
"bonusValidityHours": 72,
"expiresAt": "2022-12-19 13:45:11"
}
Response
Upon creation, a transaction object is created and returned for authorization. The LM ID can be obtained from the serviceId attribute in the transaction payload.
See the TRANSACTION VIEW page
View
Displays LM data
Endpoint
GET/fapi//lucky-money/view?id=[[LM_ID]]
Request Body Parameters
| Parameter | Type | required | Description |
|---|---|---|---|
| id | String | true | The LM Id |
Response
LM Data
{
"data": {
"id": "ssssasassa",
"orgId": "tzi38oovovoz5uq9",
"createdByUserId": "buhvz1fqjux1l9mc",
"amount": 1000,
"currencyCode": "XAF",
"paymentId": "TX22121912C83QHMOMBI",
"status": 4,
"payerMessage": null,
"createdAt": "2022-12-19 15:05:51",
"isBonusReward": null,
"appId": "apwbmpg97os2ga",
"balance": "0",
"refundId": null,
"bonusValidityHours": 72,
"expiresAt": "2022-12-24 13:45:11",
"lastUpdatedAt": null,
"lastDrawCompletedAt": "2022-12-19 15:06:25.822592",
"statusText": "terminé",
"drawTimeInSeconds": 34,
"drawTimeInHumanTime": "34 seconds after"
},
"success": true
}
View With More details
Displays LM data with extra calculated data (e.g totalAllocatedAmount )
Endpoint
GET/fapi//lucky-money/details?id=[[LM_ID]]
Request Body Parameters
| Parameter | Type | required | Description |
|---|---|---|---|
| id | String | true | The LM Id |
Response
LM Data
{
"data": {
"id": "LM12sssss3",
"orgId": "tzi38oovovoz5uq9",
"createdByUserId": "buhvz1fqjux1l9mc",
"amount": 1000,
"currencyCode": "XAF",
"paymentId": "TX221216JFUXOBIJNTZF",
"status": 2,
"payerMessage": null,
"createdAt": "2022-12-16 14:48:23",
"allocatedAsBonus": null,
"type": 1,
"isBonusReward": 1,
"appId": "apwbmpg97os2ga",
"luckyMoneyId": "LM12sssss3",
"balance": "400",
"refundId": null,
"bonusValidityHours": null,
"statusText": "Actif",
"totalAllocatedAmount": 600
},
"success": true
}
Lucky Draw
Trigger a lucky draw
Endpoint
POST /fapi/lucky-money/pick
Filter parameters
| Parameter | Type | required | Description |
|---|---|---|---|
| luckyMoneyId | String | true | The LM ID |
| luckyDrawId | String | true | The UNUQUE lucky draw ID. This will be used to enforce duplicate check |
| amount | Number | true | The amount that will be assigned to the current user. The currency of the LM will be used |
Request body
{
"luckyMoneyId": "LM12sssss3",
"amount" : 100,
"currencyCode" : "XAF",
"luckyDrawId" : "1223sdssssssds"
}
Response
Lucky draw data
{
"data": {
"id": "LM12ssssss3asa3ss",
"luckyMoneyId": "LM12ssssss3asa3ss",
"orgId": "tzi38oovovoz5uq9",
"createdByUfId": "buhvz1fqjux1l9mc",
"paymentId": "TX221219ON157OGX0P8O",
"amount": 1,
"currencyCode": "USD",
"message": null,
"bonusRewardId": "BN221219S5Q1K7XX",
"createdAt": "2022-12-19 10:33:16.535703",
"appId": "apwbmpg97os2ga"
},
"success": true
}
View Lucky Draw Details
Diplays lucky draw data
Endpoint
GET /fapi/lucky-money/pick/fapi/lucky-money/view-draw?id=DRAW_ID
Filter parameters
| Parameter | Type | required | Description |
|---|---|---|---|
| id | String | true | The draw ID |
Request body
Response
Lucky draw data
{
"data": {
"id": "LM12ssssss3asa3ss",
"luckyMoneyId": "LM12ssssss3asa3ss",
"orgId": "tzi38oovovoz5uq9",
"createdByUfId": "buhvz1fqjux1l9mc",
"paymentId": "TX221219ON157OGX0P8O",
"amount": 1,
"currencyCode": "USD",
"message": null,
"bonusRewardId": "BN221219S5Q1K7XX",
"createdAt": "2022-12-19 10:33:16.535703",
"appId": "apwbmpg97os2ga"
},
"success": true
}
CLOSE LM
Closes a lucky money campaign. Operation
- If LM is of status PENDING/UNPAID , it will be marked as CANCELLED
- If LM is of status ACTIVE (PAID) , then the unclaimed balance will be REFUNDED and the LM marked as CLOSED
- If the LM is of status ACTIVE (PAID) and the all draws have been completed, then the LM will be marked as COMPLETED
- if the LM is of status completed or closed, then NO action
Endpoint
POST /fapi/lucky-money/mark-as-closed
Filter parameters
| Parameter | Type | required | Description |
|---|---|---|---|
| luckyMoneyId | String | true | The LM ID |
Request body
{
"luckyMoneyId": "LM12ss3"
}
Response
Lucky LM data
{
"data": {
"id": "ssssasassssssssssa",
"orgId": "tzi38oovovoz5uq9",
"createdByUserId": "buhvz1fqjux1l9mc",
"amount": 1000,
"currencyCode": "XAF",
"paymentId": "TX221219ZEE2OYDMT23W",
"status": -3,
"payerMessage": null,
"createdAt": "2022-12-19 15:42:47.443332",
"isBonusReward": 1,
"appId": "apwbmpg97os2ga",
"balance": 0,
"refundId": "REF221219SYE0H0PTFF2",
"bonusValidityHours": 72,
"expiresAt": "2022-12-24 13:45:11",
"lastUpdatedAt": null,
"closedByStaffId": null,
"lastDrawCompletedAt": null,
"adminRefundNote": null,
"statusText": "closed/refunded"
},
"success": true
}
REFUND LM
Refunds remaining balance of lucky money to the creator. The refund is synchronous, i.e. it will happen immediately during the API call.
Endpoint
POST /fapi/lucky-money/refund
Filter parameters
| Parameter | Type | required | Description |
|---|---|---|---|
| luckyMoneyId | String | true | The LM ID |
Request body
{
"luckyMoneyId": "LM12ss3"
}
Response
Lucky LM data
{
"data": {
"id": "LM12ss3",
"orgId": "tzi38oovovoz5uq9",
"createdByUserId": "buhvz1fqjux1l9mc",
"amount": 1000,
"currencyCode": "XAF",
"paymentId": "TX221216QW53GWYBAPVV",
"status": -1,
"payerMessage": null,
"createdAt": "2022-12-16 14:42:09",
"allocatedAsBonus": null,
"type": 1,
"isBonusReward": 1,
"appId": "apwbmpg97os2ga",
"luckyMoneyId": "LM12ss3",
"balance": "1000",
"refundId": "REF22121648G5R70NRBN"
},
"success": true
}
Merchant Sub-Accoounts
Management of Merchant sub-accounts
Creates a Merchant sub-account
Creates a mch sub-account
Endpoint
POST /v1/mch-account/create
Request Body Parameters
| Parameter | Type | required | Description |
|---|---|---|---|
| name | Number | true | Name of the sub-account |
| description | String(500) | true | description |
| enableManualSettlement | Boolean | false | whether/not to enable manual settlement |
| settlementAccountId | String | false | the settlement (payment method) accountId |
{
"name": "w6shp1cry97x",
"description" : "Party scatter" ,
"enableManualSettlement" : 1,
"settlementAccountId" : 247
}
Response
Upon creation, a transaction object is created and returned for authorization See the VIEW section
Update
Updates a merchant account info
see create
Request body
Endpoint POST /v1/mch-account/update
{
"_id" : "ACNN3JOMQXS5YWLUBDB0" ,
"name": "w6shp1cry97x",
"description" : "Party scatter" ,
"enableManualSettlement" : 1,
"settlementAccountId" : "ACAWQA0KIMLF6JIBLRAG"
}
Response
See the VIEW section
View
Displays
Endpoint
GET /v1/mch-account/view/_id_?=ACCOUNT_ID
Request Body Parameters
| Parameter | Type | required | Description |
|---|---|---|---|
| _id | String | true | The account ID |
Response
Merchant account data
{
"data": {
"_id": "ACJTWGZ6PFTWHGPSD5GR",
"enableManualSettlement": 1,
"createdAt": "2021-10-31 01:43:28",
"lastUpdatedAt": null,
"user": {
"_id": "TZF3SBZWL3JQWTAK",
"displayName": "tz87",
"countryCode": "CM",
"verifiedName": null,
"avatarUrl": null
},
"settlementAccount": {
"accountId": "ACJTWGZ6PFTWHGPSD5GR",
"name": "w6shp1cry97x",
"description": "Party scatter",
"avatarUrl": "/static/img/logos/tz-logo-btn-black.png"
},
"name": "w6shp1cry97x",
"description": "Party scatter",
"balanceAmount": 0,
"withheldBalanceAmount": 0,
"avatarUrl": "/static/img/logos/tz-logo-btn-black.png",
"isActive": 1
},
"dateTime": "2021-10-31T01:43:28+00:00",
"duration": "0.049s",
"lang": "en-US",
"roleId": 1,
"roleLabel": "owner",
"scopeUserId": 87,
"success": true,
"userId": 87
}
List
Lists
Endpoint
GET /v1/mch-account/list
Filter parameters
Response
{
"data": {
"currentPage": 1,
"hasMore": false,
"list": [
{
"enableManualSettlement": "1",
"account": {
"_id": "MSA4AG0Y0LLXSNAEHARO",
"type": "6",
"typeText": "Merchant account",
"name": "w6shp1cry97x",
"description": "Party scatter",
"avatarUrl": "http://staging-api.tranzak.me/fapi/static/img/logos/tz-logo-btn-black.png",
"balanceAmount": 0,
"currencyCode": "XAF",
"createdAt": "2021-12-22 17:19:42"
},
"settlementAccount": {
"_id": "PMI42MCRPUBUGA4J7PHW",
"type": "7",
"typeText": "Payment method",
"name": "porky cshop",
"description": "chatter box",
"avatarUrl": "http://staging-api.tranzak.me/fapi/static/img/partners/mtn.png",
"provider": "MTN Momo",
"providerAccountHolderId": "237674728670",
"providerType": "telecom wallet"
}
},
{
"enableManualSettlement": "1",
"account": {
"_id": "MSAM3JXE67VWWO14NF2H",
"type": "6",
"typeText": "Merchant account",
"name": "w6shp1cry97x",
"description": "Party scatter",
"avatarUrl": "http://staging-api.tranzak.me/fapi/static/img/logos/tz-logo-btn-black.png",
"balanceAmount": 0,
"currencyCode": "XAF",
"createdAt": "2021-12-22 17:14:15"
},
"settlementAccount": {
"_id": "PMI42MCRPUBUGA4J7PHW",
"type": "7",
"typeText": "Payment method",
"name": "porky cshop",
"description": "chatter box",
"avatarUrl": "http://staging-api.tranzak.me/fapi/static/img/partners/mtn.png",
"provider": "MTN Momo",
"providerAccountHolderId": "237674728670",
"providerType": "telecom wallet"
}
}
],
"pageCount": [
1,
50
],
"pageSize": 20,
"totalItems": 7
},
"success": true,
"dateTime": "2021-12-28T10:11:07+00:00",
"duration": "0.064s",
"lang": "en-US",
"userId": 109,
"orgUserId": 108,
"roleId": 1000,
"roleLabel": "super admin/owner",
"hostname": "cortex01",
"serverIpAddress": "192.168.137.2"
}
Merchant Settlement interface
Merchant settlement interface.
Status Codes
const STATUS_PENDING = 1;
const STATUS_THIRD_PARTY_PROCESSING = 2; //Applicable to external batch payments.
const STATUS_COMPLETED = 3;
const STATUS_FAILED = -1;
Creates a LM
Creates a partial settlement. This is applicable for merchant accounts with enableManualSettlement = 1.
Endpoint
GEET /v1/mch-settlement/create
Request Filter Parameters
| Parameter | Type | required | Description |
|---|---|---|---|
| amount | flat | true | Custom settlement amount. |
| currencyCode | string | false | optional. Currencycode of merchant sub-account |
| beneAccountId | Number | true | the destination account ID (e.g payment method _id, Tz wallet) |
| payerAccountId | Number | true | The source merchant account |
| description | Boolean | false | description narration |
| isCrossBorder | Boolean | false | whether/not this settlement is for cross-border transactions |
Request payload
{
"amount": "5646100",
"beneAccountId": "AC8DDER98LYUZT9W0140",
"payerAccountId": "MSATGI7LV549JIHB8VMO",
"description" : "Manual settlement",
"isCrossBorderSettlement" : 0
}
Response
The response is Transaction payload. The transaction authorization page should be loaded to enable the user authorize the payment.
"data": {
"_id": "PP2201057FSTTC4R4ZNZ",
"amount": 10000,
"bene": { }
... truncated
Lists
List settlements (pending/historic)
Endpoint
GEET /v1/mch-settlement/list
Request Filter Parameters
| Parameter | Type | required | Description |
|---|---|---|---|
| _id | string | false | Batch ID |
| accountId | Number | false | The merchant account ID |
| destinationAccountId | Number | false | the destination account ID (e.g payment method ID) |
| status | Number | false | the status Code : 1-pending , 2-third-party processing , 3-completed, 4-failed |
| isCrossBorder | Boolean | false | cross-border flag : 1 for Xborder , 0 for same country , NULL for not included |
Response
{
"data": {
"currentPage": 1,
"hasMore": false,
"list": [
{
"_id": "MSBDUMXF30RYBGSC",
"amount": null,
"fee": null,
"status": "1",
"statusText": "pending",
"isManualSettlement": null,
"isCrossBorder": "0",
"dueDate": "2022-01-18 00:00:00",
"reportFilePath": null,
"account": {
"_id": "MSA366G9OI456BZDK7A0",
"type": "6",
"typeText": "Merchant account",
"name": "w6shp1cry97x",
"description": "Party scatter",
"avatarUrl": "http://staging-api.tranzak.me/fapi/static/img/logos/tz-logo-btn-black.png",
"balanceAmount": 100100,
"currencyCode": "XAF"
}
},
{
"_id": "MSBC2209H6UX10QR",
"amount": 5646100,
"fee": 56461,
"status": "3",
"statusText": "completed",
"isManualSettlement": "1",
"isCrossBorder": "0",
"dueDate": "2022-01-17 17:27:42",
"reportFilePath": null,
"account": {
"_id": "MSATGI7LV549JIHB8VMO",
"type": "6",
"typeText": "Merchant account",
"name": "w6shp1cry97x",
"description": "Party scatter",
"avatarUrl": "http://staging-api.tranzak.me/fapi/static/img/logos/tz-logo-btn-black.png",
"balanceAmount": 10000,
"currencyCode": "XAF"
},
"destinationAccount": {
"_id": "AC8DDER98LYUZT9W0140",
"type": "1",
"typeText": "Primary account",
"name": "",
"description": "",
"avatarUrl": "http://staging-api.tranzak.me/fapi/static/img/logos/tz-logo-btn.png",
"provider": "tranzak",
"providerAccountHolderId": "AC8DDER98LYUZT9W0140",
"providerType": "internal account"
}
},
],
"pageCount": [
1,
50
],
"pageSize": 20,
"totalItems": 4
},
"success": true,
"dateTime": "2022-01-17T19:12:14+00:00",
"duration": "0.054s",
"lang": "en-US",
"userId": 36,
"orgUserId": 35,
"roleId": 1000,
"roleLabel": "super admin/owner",
"hostname": "cortex01",
"serverIpAddress": "192.168.137.2"
}
View
Displays Mch settlement data
Endpoint
GET /v1/mch-settlement/view?_id=MSBDUMXF30RYBGSC
Request Body Parameters
| Parameter | Type | required | Description |
|---|---|---|---|
| id | String | true | The Mch SETT Id |
| accountId | String | true | merchant account to be settled |
| destinationAccountId | String | true | dest account |
| status | String | true | status e.g. 1-pending, 2-third-party processing , 3-completed , 4-failed |
Response
the merchant settlement batch data
{
"data": {
"_id": "MSBDUMXF30RYBGSC",
"account": {
"_id": "MSA366G9OI456BZDK7A0",
"name": "w6shp1cry97x",
"description": "w6shp1cry97x",
"avatarUrl": "http://staging-api.tranzak.me/fapi/static/img/logos/tz-logo-btn-black.png",
"balanceAmount": 100100,
"currencyCode": "XAF"
},
"accountId": "MSA366G9OI456BZDK7A0",
"currencyCode": "XAF",
"dateTime": null,
"destinationAccount": null,
"fee": 0,
"isCrossBorder": "0",
"isManualSettlement": null,
"status": "1",
"statusText": "pending"
},
"success": true,
"dateTime": "2022-01-17T19:20:47+00:00",
"duration": "0.056s",
"lang": "en-US",
"userId": 36,
"orgUserId": 35,
"roleId": 1000,
"roleLabel": "super admin/owner",
"hostname": "cortex01",
"serverIpAddress": "192.168.137.2"
}
List Transactions in a batch
Lists LMs that have already been allocated. LM in draft mode will NOT be shown
Endpoint
GET /v1/mch-settlement/list-transactions
Request Filter Parameters
| Parameter | Type | required | Description |
|---|---|---|---|
| _id | Number | false | The merchant sett batch job ID |
| paymentId | Number | false | The merchant sett batchId |
| settlementBatchId | Number | false | The merchant sett batchId |
| accountId | Number | false | The accountId |
| isCrossBorder | bit | false | whether transaction is cross-border/not |
Response
Listing
{
"data": {
"currentPage": 1,
"hasMore": true,
"list": [
{
"paymentId": "MP220117PG0U6EXQ9XSJ",
"settlementBatchId": "MSBDUMXF30RYBGSC",
"amount": 1001,
"currencyCode": "XAF",
"createdAt": "2022-01-17 18:05:10",
"accountId": "MSA366G9OI456BZDK7A0",
"account": {
"_id": "MSA366G9OI456BZDK7A0",
"type": "6",
"typeText": "Merchant account",
"name": "w6shp1cry97x",
"description": "Party scatter",
"avatarUrl": "http://staging-api.tranzak.me/fapi/static/img/logos/tz-logo-btn-black.png",
"balanceAmount": 100100,
"currencyCode": "XAF"
}
},
{
"paymentId": "MP220117V8MTOX2YGQMM",
"settlementBatchId": "MSBDUMXF30RYBGSC",
"amount": 1001,
"currencyCode": "XAF",
"createdAt": "2022-01-17 18:05:10",
"accountId": "MSA366G9OI456BZDK7A0",
"account": {
"_id": "MSA366G9OI456BZDK7A0",
"type": "6",
"typeText": "Merchant account",
"name": "w6shp1cry97x",
"description": "Party scatter",
"avatarUrl": "http://staging-api.tranzak.me/fapi/static/img/logos/tz-logo-btn-black.png",
"balanceAmount": 100100,
"currencyCode": "XAF"
}
},
],
"pageCount": [
1,
50
],
"pageSize": 20,
"totalItems": 401
},
"success": true,
"dateTime": "2022-01-17T19:23:38+00:00",
"duration": "0.065s",
"lang": "en-US",
"userId": 36,
"orgUserId": 35,
"roleId": 1000,
"roleLabel": "super admin/owner",
"hostname": "cortex01",
"serverIpAddress": "192.168.137.2"
}
Merchant Settings
Provides an interface to display and update merchant settings
View Merchant Setting
Displays merchant info
Endpoint
GET /v1/merchant/details
Request Body Parameters
N/A
Response
The response is the merchant details
Response
The customer data
{
"data": {
"commission": 0.0225,
"commissionCap": 0,
"createdAt": "2021-11-12 13:36:20",
"enableCrossBorderCollection": true,
"enableCustomCouponCodes": 0,
"enableGiftCard": 0,
"enableGuestPayments": 0,
"enableInPersonPayment": 1,
"enableManualSettlement": false,
"enableMembershipService": 0,
"enableVirtualAccounts": 0,
"freezeSettlement": null,
"gracePeriodEndsAt": "2021-11-12 13:36:20",
"lastUpdatedAt": "2021-11-15 20:28:41",
"maxActiveCoupons": 10,
"maxCouponsPerPromotion": 200,
"maxLuckyMoneyAmount": 500,
"maxLuckyMoneyQuantity": 500,
"maxSubAccounts": 30,
"maxVirtualAccounts": 100,
"minSettlementAmount": 100,
"settlementAccount": {
"_id": "ACMO9X1OBNGSU7NXES07",
"balance": null,
"providerName": "Orange Money",
"partnerAccountHolderId": "655007058",
"partnerAccountHolderName": null,
"avatarUrl": "https://rest.tranzak.me/static/img/partners/orange.png",
"name": "Orange Money | 655007058"
},
"settlementWindowId": null,
"userId": 87
},
"success": true,
"dateTime": "2021-11-15T20:28:41+00:00",
"duration": "0.068s",
"lang": "en-US",
"userId": 87,
"orgUserId": 87,
"roleId": 1000,
"roleLabel": "owner",
"hostname": "cortex01",
"serverIpAddress": "192.168.137.2"
}
Update Merchant Settings
Updates the settings
Endpoint
POST /v1/merchant/update
Request Body Parameters
| Parameter | Type | required | Description |
|---|---|---|---|
| settlementAccountId | String | true | the settlement account - to be selected from External payment method list |
| enableManualSettlement | bool | false | Whether/not to enable manual settlement |
| enableCrossBorderCollection | bool | false | Whether/not to enable cross-border collection |
| payoutAllowedIpAddressList | bool | false | IP address list for payouts/mass payments |
{
"enableManualSettlement" : false ,
"enableCrossBorderCollection" : true ,
"enableCrossBorderCollection": true,
"payoutAllowedIpAddressList" : "192.168.137.1 , 10.1.1.1, 10.2.2.2-90"
}
Response
The response is the merchant info (see above);
Payment Links
Merchant tool for creating links to receiving money
Status Codes
const STATUS_DRAFT = 1 ; //editable not not payable
const STATUS_ACTIVE = 2 ; // non-editable & unpaid -> payable
const STATUS_PAID = 3 ; //FULLY PAID -- non-editable, non-payable
const STATUS_CANCELLED = -1; //UNPAID -- non-editable, non-payable
Create a refund request
Creates a payment link
Endpoint
POST /v1/payment-link/create
Request Body Parameters
| Parameter | Type | required | Description |
|---|---|---|---|
| amount | Float | true | the amount |
| currencyCode | Number | false | 3-letter currency code. Default is to use merchant's primary currency code |
| description | String(200) | true | Description that will be shown to payer |
| acceptMultiplePayments | boolean | false | Name of the sub-account |
| acceptUserSpecifiedAmount | boolean | false | Whether to allow payer to specify an amount. If this is set, then amount should be set to 0 |
| receivingAccountId | Number | false | the MERCHANT (sub)-account that will receive payments |
| enableAfterCreation | boolean | false | Whether to auto-enable the link after submission |
| avatarUrl | boolean | false | The AvatarUrl |
{
"amount": 100,
"currencyCode": "USD",
"description": "My description makes yours look descriptive",
"acceptMultiplePayments": true,
"acceptUserSpecifiedAmount": 0,
"enableAfterCreation":1 ,
"receivingAccountId" : "ACEFWGU029UWA2Q66KGJ" ,
"avatarUrl" : "http://tranzak.me/assets/img/why-us.png"
}
Response
See the VIEW section
Update
Endpoint POST /v1/payment-link/update
Request body params
| Parameter | Type | required | Description |
|---|---|---|---|
| _id | String | true | Id of the p-link |
| amount | Float | true | the amount |
| currencyCode | Number | false | 3-letter currency code. Default is to use merchant's primary currency code |
| description | String(200) | true | Description that will be shown to payer |
| acceptMultiplePayments | boolean | false | Name of the sub-account |
| acceptUserSpecifiedAmount | boolean | false | Whether to allow payer to specify an amount. If this is set, then amount should be set to 0 |
| receivingAccountId | Number | false | the MERCHANT (sub)-account that will receive payments |
| enableAfterCreation | boolean | false | Whether to auto-enable the link after submission |
| avatarUrl | boolean | false | The Avatar Url |
{
"_id": "PLZG3LKT227VVGC0M8CB",
"amount": 100,
"currencyCode": "USD",
"description": "My description makes yours look descriptive",
"acceptMultiplePayments": true,
"acceptUserSpecifiedAmount": 0,
"accountId": "" ,
"enableAfterCreation":1 ,
"receivingAccountId" : "ACEFWGU029UWA2Q66KGJ"
}
Deactivate
Cancels /deactivates a link
Endpoint POST /v1/payment-link/deactivate
Request body
| Parameter | Type | required | Description |
|---|---|---|---|
| _id | String | true | Id of the p-link |
{
"_id" : "PLZG3LKT227VVGC0M8CB"
}
Response
See the VIEW section
View
Displays
Endpoint
GET /v1/payment-link/view/_id_?=PLINK_ID
e.g /payment-link/view?_id=PLZG3LKT227VVGC0M8CB
Request Body Parameters
| Parameter | Type | required | Description |
|---|---|---|---|
| _id | String | true | The p-link ID |
Response
PL data
{
"data": {
"_id": "PLZG3LKT227VVGC0M8CB",
"amount": 100,
"currencyCode": "XAF",
"description": "My description makes yours look descriptive",
"acceptMultiplePayments": 1,
"acceptUserSpecifiedAmount": 0,
"userTransactionRef": "",
"status": 2,
"avatarUrl": "http://tranzak.me/assets/img/why-us.png",
"expiresAt": "2021-11-02 16:46:37",
"createdAt": "2021-10-31 16:46:37",
"lastUpdatedAt": null,
"receivingAccount": {
"_id": "ACEFWGU029UWA2Q66KGJ",
"currencyCode": "XAF",
"type": 6,
"avatarUrl": "/static/img/logos/tz-logo-btn-black.png"
},
"statusText": "active"
},
"dateTime": "2021-10-31T17:03:47+00:00",
"duration": "0.041s",
"lang": "en-US",
"roleId": 1,
"roleLabel": "owner",
"scopeUserId": 87,
"success": true,
"userId": 87
}
List
Lists
Endpoint
GET /v1/payment-link/list
Filter parameters
| Parameter | Type | required | Description |
|---|---|---|---|
| status | int | false | Filter by status codes : e.g 1- DRAFT (editable), 2- STATUS_ACTIVE (payable) , 3- STATUS_PAID , 4-STATUS_CANCELLED |
_id | int | false | filter by ID
Response
Listing
{
"data": {
"list": [
{
"_id": "PLOD5D8NZ8XOXGNEINLW",
"amount": 100,
"currencyCode": "XAF",
"description": "My description makes yours look descriptive",
"acceptMultiplePayments": "1",
"acceptUserSpecifiedAmount": "0",
"userTransactionRef": "",
"status": "1",
"expiresAt": "2021-11-02 16:46:37",
"createdAt": "2021-10-31 16:46:37",
"lastUpdatedAt": null,
"avatarUrl": "http://tranzak.me/assets/img/why-us.png",
"receivingAccount": {
"_id": "ACEFWGU029UWA2Q66KGJ",
"currencyCode": "XAF",
"type": "6",
"avatarUrl": "/static/img/logos/tz-logo-btn-black.png"
},
"statusText": "draft"
},
{
"_id": "PLZS4C7CQFAGY0U6QAFP",
"amount": 100,
"currencyCode": "XAF",
"description": "My description makes yours look descriptive",
"acceptMultiplePayments": "1",
"acceptUserSpecifiedAmount": "0",
"userTransactionRef": "",
"status": "1",
"expiresAt": "2021-11-02 16:46:37",
"createdAt": "2021-10-31 16:46:37",
"lastUpdatedAt": null,
"statusText": "draft"
},
],
"totalItems": 9,
"pageCount": [
1,
50
],
"pageSize": 20,
"currentPage": 1,
"hasMore": false
},
"dateTime": "2021-10-31T17:23:24+00:00",
"duration": "0.045s",
"lang": "en-US",
"roleId": 1,
"roleLabel": "owner",
"scopeUserId": 87,
"success": true,
"userId": 87
}
Create transaction
Creates a transaction from a P-LINK this endpoint should be called by the payer. Creates a Transaction object as response. Visit the TRANSACTION VIEW section
POST /v1/payment-link/create-transaction
Request body params
| Parameter | Type | required | Description |
|---|---|---|---|
| paymentLinkId | String | true | Id of the p-link |
| transactionAmount | Number | true | The amount . this is applicable only if acceptUserSpecifiedAmount = true |
{
"_id" : "PLZG3LKT227VVGC0M8CB",
"transactionAmount" : 100
}
Other actions
Clone
Make a clone of a Payment link
Endpoint POST /v1/payment-link/clone
activate
Activates a p-link
POST /v1/payment-link/activate
{
"_id" : "PLZG3LKT227VVGC0M8CB"
}
Can filter transaction by PLink Id
Payment Method
PM management
Status Codes
const STATUS_PENDING = 1 ;
const STATUS_ACTIVE = 2 ;
const STATUS_DEACTIVATED = -1;
List Operators
Lists operators/service providers that may be added as PM. The FULL list of the operators will be returned (i.e. NO PAGINATION IS NEEDED)
GET /v1/payment-method/list-operators
Request body params
The following filter(s) apply
| Parameter | Type | required | Description |
|---|---|---|---|
| typeId | String(100) | true | Filter by treasury typeId. Current types : const TYPE_BANK_CREDIT = 1; const TYPE_BANK_DEBIT = 2; const TYPE_BANK_PREPAID = 3; const TYPE_TELCO_WALLET = 4; |
{
"data": [
{
"id": "16",
"accountId": "ACISG2AUKQKWJWRELW35",
"shortName": "BICEC - Cameroun",
"name": "BICEC - Cameroun",
"description": "CM | BICEC - Cameroun",
"bankCode": "10003",
"typeId": "1",
"typeText": "credit card",
"avatarUrl": "http://staging-api.tranzak.me/fapi/static/img/partners/bicec.png",
"cardAvatarUrl": "http://staging-api.tranzak.me/fapi/static/img/partners/cards/",
"isPaymentMethod": "1"
},
{
"id": "13",
"accountId": "ACV0SMS7GNVQVPB53194",
"shortName": "SocGen",
"name": "SocGen",
"description": "CM | SocGen",
"bankCode": "10048",
"typeId": "1",
"typeText": "credit card",
"avatarUrl": "http://staging-api.tranzak.me/fapi/static/img/partners/socgen.png",
"cardAvatarUrl": "http://staging-api.tranzak.me/fapi/static/img/partners/cards/",
"isPaymentMethod": "1"
},
{
"id": "10",
"accountId": "ACXE5G4YI8W95GRM1ZGT",
"shortName": "StanChart - Cameroon",
"name": "StanChart - Cameroon",
"description": "CM | StanChart - Cameroon",
"bankCode": "10064",
"typeId": "1",
"typeText": "credit card",
"avatarUrl": "http://staging-api.tranzak.me/fapi/static/img/partners/stanchart.png",
"cardAvatarUrl": "http://staging-api.tranzak.me/fapi/static/img/partners/cards/",
"isPaymentMethod": "1"
},
{
"id": "7",
"accountId": "ACB8DKBV9NJ3VUPH2244",
"shortName": "Afriland Cameroon",
"name": "Afriland Cameroon",
"description": "CM | Afriland Cameroon",
"bankCode": "10078",
"typeId": "1",
"typeText": "credit card",
"avatarUrl": "http://staging-api.tranzak.me/fapi/static/img/partners/afriland.png",
"cardAvatarUrl": "http://staging-api.tranzak.me/fapi/static/img/partners/cards/",
"isPaymentMethod": "1"
},
{
"id": "4",
"accountId": "AC889BINH2T5OWS8RK63",
"shortName": "UBA Cameroon",
"name": "UBA Cameroon",
"description": "CM | UBA Cameroon",
"bankCode": "10037",
"typeId": "1",
"typeText": "credit card",
"avatarUrl": "http://staging-api.tranzak.me/fapi/static/img/partners/uba.png",
"cardAvatarUrl": "http://staging-api.tranzak.me/fapi/static/img/partners/cards/",
"isPaymentMethod": "1"
}
],
"success": true,
"dateTime": "2022-02-05T05:09:31+00:00",
"duration": "0.047s",
"lang": "en-US",
"userId": 34,
"orgUserId": 33,
"roleId": 1000,
"roleLabel": "owner",
"hostname": "cortex01",
"serverIpAddress": "192.168.137.2"
}
Link a Mobile Wallet
Links a mobile wallet
Endpoint
POST /v1/payment-method/add-mobile-wallet
Request Body Parameters
| Parameter | Type | required | Description |
|---|---|---|---|
| partnerAccountHolderId | String | true | the identifier , e.g phone number +237612345678 for MWP or bank account for linking bank accounts |
| partnerAccountHolderName | String | false | The account holder name |
| name | String(100) | true | Custom name for the PM |
| description | Number (200) | false | Custom description for the PM |
{
"partnerAccountHolderId" : 237674728670,
"partnerAccountHolderName" : "Dan Momo Ntui",
"name" : "Fav momo" ,
"description" : "The momo i used for to shop online."
}
Response
See the VIEW section
Link a Bank Debit Card
Links a debit card from a list of providers
Endpoint
POST /v1/payment-method/add-bank-debit
Request Body Parameters
| Parameter | Type | required | Description |
|---|---|---|---|
| partnerAccountHolderId | String | true | the account number |
| partnerAccountHolderName | String | true | The account holder name |
| bankBranchCode | String | true | The branch code |
| bankRibCode | String | true | The RIB (key) for the account |
| treasuryAccountId | String | true | The treasury service account ID. This is to be obtained from list-operators endpoint by filtering for typeId = 2 |
| name | String(100) | true | Custom name for the PM |
| description | Number (200) | false | Custom description for the PM |
{
"bankBranchCode" : "00001",
"bankRibCode" : "0078" ,
"partnerAccountHolderId" : "00712345678999",
"partnerAccountHolderName" : "Dan From Tranzak",
"name" : "My fav bank account" ,
"description" : "Much money" ,
"treasuryAccountId" : "15"
}
Response
See the VIEW section
Link a Bank PrePaid Card
Links a debit card from a list of providers
Endpoint
POST /v1/payment-method/add-prepaid-card
Request Body Parameters
| Parameter | Type | required | Description |
|---|---|---|---|
| prepaidCardFirstSixDigits | String | true | The first 6 digits of card |
| prepaidCardLastFourDigits | String | true | The last 4 digits of the card |
| prepaidCardCustomerId | String | true | 10-digit - The customer ID (located on the backside of the card) |
| partnerAccountHolderName | String | true | The account holder's name |
| treasuryAccountId | String | true | The treasury service account ID. This is to be obtained from list-operators endpoint by filtering for typeId = 3 |
| name | String(100) | true | Custom name for the PM |
| description | Number (200) | false | Custom description for the PM |
{
"prepaidCardFirstSixDigits" : "00001",
"prepaidCardLastFourDigits" : "0078" ,
"prepaidCardCustomerId" : "0000998774",
"partnerAccountHolderName" : "Dan Prepaid Name",
"name" : "Fav Prepaid card" ,
"description" : "Prepaid card for online payments" ,
"treasuryAccountId" : "17"
}
Response
See the VIEW section
Update
The params may be edited
POST /v1/payment-method/update
Request body params
| Parameter | Type | required | Description |
|---|---|---|---|
| _id | String | true | model ID |
| name | String(100) | false | Name of PM |
| description | Number (200) | false | brief desc |
{
"_id" :"ACPN6AZBYQVH1TVXUN7J",
"name" : "My s4444444" ,
"description" : "Momo",
...(other params)
}
View
Displays model data
Endpoint
GET /v1/payment-method/view/_id_?=PM_ID
Request Body Parameters
| Parameter | Type | required | Description |
|---|---|---|---|
| _id | String | true | The PM ID |
Response
PM data
Debit card
{
"data": {
"_id": "PMF2I3XL693RE1ZCMCS4",
"bankBranchCode": "00001",
"bankRibCode": "0078",
"createdAt": "2022-02-05 05:04:11",
"createdByUserId": 34,
"description": "Much money",
"isVerified": 0,
"name": "My fav bank account",
"orgUserId": 33,
"partnerAccountHolderId": "00712345678999",
"partnerAccountHolderName": "Dan From Tranzak",
"partnerAccountIdType": null,
"prepaidCardCustomerId": null,
"prepaidCardFirstSixDigits": null,
"prepaidCardLastFourDigits": null,
"providerData": {
"_id": "PMF2I3XL693RE1ZCMCS4",
"accountId": "PMF2I3XL693RE1ZCMCS4",
"providerType": 2,
"providerTypeText": "bank",
"serviceType": "debit card",
"id": 7,
"countryCode": "CM",
"name": "BICEC - Cameroun",
"code": "cmbicec-ca",
"shortName": "BICEC - Cameroun",
"description": "CM | BICEC - Cameroun",
"isOffline": 0,
"avatarUrl": "http://staging-api.tranzak.me/fapi/static/img/partners/bicec.png",
"cardAvatarUrl": "http://staging-api.tranzak.me/fapi/static/img/partners/cards/"
},
"requirePinForTransaction": 1,
"status": 2,
"statusText": "active"
},
"success": true,
"dateTime": "2022-02-05T05:27:47+00:00",
"duration": "0.048s",
"lang": "en-US",
"userId": 34,
"orgUserId": 33,
"roleId": 1000,
"roleLabel": "owner",
"hostname": "cortex01",
"serverIpAddress": "192.168.137.2"
}
Prepaid card
{
"data": {
"_id": "PM9S3U4R2ZFT69081YZR",
"bankBranchCode": null,
"bankRibCode": null,
"createdAt": "2022-02-05 05:05:14",
"createdByUserId": 34,
"description": "Prepaid card for online payments",
"isVerified": 0,
"name": "Fav Prepaid card",
"orgUserId": 33,
"partnerAccountHolderId": "0078",
"partnerAccountHolderName": "Dan Prepaid Name",
"partnerAccountIdType": null,
"prepaidCardCustomerId": "0000998776",
"prepaidCardFirstSixDigits": "00001",
"prepaidCardLastFourDigits": "0078",
"providerData": {
"_id": "PM9S3U4R2ZFT69081YZR",
"accountId": "PM9S3U4R2ZFT69081YZR",
"providerType": 3,
"providerTypeText": "bank",
"serviceType": "prepaid card",
"id": 7,
"countryCode": "CM",
"name": "BICEC - Cameroun",
"code": "cmbicec-ca",
"shortName": "BICEC - Cameroun",
"description": "CM | BICEC - Cameroun",
"isOffline": 0,
"avatarUrl": "http://staging-api.tranzak.me/fapi/static/img/partners/bicec.png",
"cardAvatarUrl": "http://staging-api.tranzak.me/fapi/static/img/partners/cards/"
},
"requirePinForTransaction": 1,
"status": 2,
"statusText": "active"
},
"success": true,
"dateTime": "2022-02-05T05:26:00+00:00",
"duration": "0.049s",
"lang": "en-US",
"userId": 34,
"orgUserId": 33,
"roleId": 1000,
"roleLabel": "owner",
"hostname": "cortex01",
"serverIpAddress": "192.168.137.2"
}
Mobile wallet
{
"data": {
"_id": "PMBTNU7CQPJ9WI4UA9P3",
"bankBranchCode": null,
"bankRibCode": null,
"createdAt": "2022-02-05 05:03:32",
"createdByUserId": 34,
"description": "chatter box",
"isVerified": 0,
"name": "porky cshop",
"orgUserId": 33,
"partnerAccountHolderId": "237674728670",
"partnerAccountHolderName": "sssssjsdlsd",
"partnerAccountIdType": null,
"prepaidCardCustomerId": null,
"prepaidCardFirstSixDigits": null,
"prepaidCardLastFourDigits": null,
"providerData": {
"_id": "PMBTNU7CQPJ9WI4UA9P3",
"accountId": "PMBTNU7CQPJ9WI4UA9P3",
"providerType": 4,
"providerTypeText": null,
"serviceType": "telecom wallet",
"id": 1,
"countryCode": "CM",
"name": "MTN Momo",
"code": "cmmtnmomo",
"shortName": "MTN Momo",
"description": "CM | MTN Momo",
"isOffline": 0,
"avatarUrl": "http://staging-api.tranzak.me/fapi/static/img/partners/mtn.png",
"cardAvatarUrl": "http://staging-api.tranzak.me/fapi/static/img/partners/cards/"
},
"requirePinForTransaction": 1,
"status": 2,
"statusText": "active"
},
"success": true,
"dateTime": "2022-02-05T05:26:52+00:00",
"duration": "0.046s",
"lang": "en-US",
"userId": 34,
"orgUserId": 33,
"roleId": 1000,
"roleLabel": "owner",
"hostname": "cortex01",
"serverIpAddress": "192.168.137.2"
}
List
Lists PMs
Endpoint
GET /v1/payment-method/list
Filter parameters
| Parameter | Type | required | Description |
|---|---|---|---|
| status | int | false | Filter by status codes : e.g 1- DRAFT, 2- STATUS_ACTIVE , 3- STATUS_PAID , 4-STATUS_CANCELLED |
| type | int | false | Filter by type codes : e.g 1- refund, 2- reversal |
| id | int | false | filter by ID |
Response
Listing
{
"data": [
{
"partnerAccountHolderId": "237637758893",
"partnerAccountHolderName": null,
"partnerAccountIdType": null,
"requirePinForTransaction": "1",
"status": "2",
"bankBranchCode": null,
"bankRibCode": null,
"prepaidCardFirstSixDigits": null,
"prepaidCardLastFourDigits": null,
"prepaidCardCustomerId": null,
"isVerified": "0",
"createdAt": "2022-04-05 15:28:27",
"_id": "PMLYUCJE5BKR4ZVIJBHD",
"name": "Orange Money | 237637758893",
"description": "",
"statusText": "active",
"providerData": {
"providerServiceId": "2",
"providerType": "Telecom operator",
"providerTypeText": "Telecom operator",
"serviceType": "telecom wallet",
"providerId": "2",
"countryCode": "CM",
"name": "Orange Money",
"bankCode": null,
"shortName": "Orange Money",
"description": "CM | Orange Money",
"isOffline": "0",
"avatarUrl": "https://staging-api.tranzak.me/fapi/static/img/partners/orange.png",
"cardAvatarUrl": "https://staging-api.tranzak.me/fapi/static/img/partners/cards/"
}
},
{
"partnerAccountHolderId": "237616181398",
"partnerAccountHolderName": null,
"partnerAccountIdType": null,
"requirePinForTransaction": "1",
"status": "2",
"bankBranchCode": null,
"bankRibCode": null,
"prepaidCardFirstSixDigits": null,
"prepaidCardLastFourDigits": null,
"prepaidCardCustomerId": null,
"isVerified": "0",
"createdAt": "2022-04-05 15:28:27",
"_id": "PMEQUUHNLBAEYA9TLVR7",
"name": "MTN Momo | 237616181398",
"description": "",
"statusText": "active",
"providerData": {
"providerServiceId": "1",
"providerType": "Telecom operator",
"providerTypeText": "Telecom operator",
"serviceType": "telecom wallet",
"providerId": "1",
"countryCode": "CM",
"name": "MTN Momo",
"bankCode": null,
"shortName": "MTN Momo",
"description": "CM | MTN Momo",
"isOffline": "0",
"avatarUrl": "https://staging-api.tranzak.me/fapi/static/img/partners/mtn.png",
"cardAvatarUrl": "https://staging-api.tranzak.me/fapi/static/img/partners/cards/"
}
}
],
"success": true,
"debugInfo": null,
"debug": {
"lang": "en-US",
"dateTime": "2022-04-11T10:31:06+00:00",
"hostname": "cortex01",
"serverIpAddress": "192.168.137.2",
"clientIpAddress": "192.168.137.1",
"duration": "0.042s",
"userId": 22,
"_userId": "tz22",
"scopeId": null,
"type": 3,
"orgUserId": 22,
"roleId": 1000,
"roleLabel": "owner",
"firstName": null,
"displayName": "tz22"
}
}
Other actions
Deactivate
Deactivates a PM
Endpoint POST /v1/payment-method/deactivate
Activate
Submits a report for processing
POST /v1/payment-method/activate
{
"_id" : "PM9S3U4R2ZFT69081YZR"
}
List (For Settlement)
Lists payment methods that may be used for settlement
Endpoint
GET /v1/payment-method/list-for-settlement
Response
Response is similar in structure as given in the [[list]] section
Payout | Mass Payment
Payout or mass payment is a service that enables making payments to one or more users. The beneficiaries can be INTERNAL or EXTERNAL (bank, MWP, Visa Prepaid cards etc) ; There are two ways of creating payouts:
- By manually adding recipients via JSON payload;
- By uploading a payout file using the relevant Payout template (MWP, internal, Bank transfer, prepaid card transfer)
Four services , using different templates are supported :
- Internal transfer - transfer funds to one or more tranzak internal users. Users will be searched ufId
- Mobile wallet transfer - send money to one or more mobile wallet users
- Bank transfer - send funds to bank accounts
- Pre-paid card transfer - top-up pre-paid cards
Each of the 4 types listed above supports either creating a request via JSON or via file upload using separate endpoints.
IMPORTANT NOTES
- Note that the user's default currency code will be used for the transaction
- The update endpoints are to be used exclusively by the service types created via JSON config.
- For requests created via file upload, all changes to the content must be done in the uploaded file by the user and re-uploaded.
const STATUS_PENDING = 1 ;
const STATUS_PAID = 2 ; // The payout has been paid to
const STATUS_PROCESSING = 3; // Batch job launched
const STATUS_COMPLETED = 4 ; //Completed
const STATUS_CANCELLED = -2 ; //Cancelled
const STATUS_FAILED = -1 ; // Failed
const STATUS_INTERNAL_TRANSFER_COMPLETED = 7 ; // internal transfer completed
Types
const TYPE_INTERNAL_TRANSFER = 1;
const TYPE_MOBILE_WALLET_TRANSFER = 2;
const TYPE_BANK_DEBIT_TRANSFER = 3; //
const TYPE_PREPAID_TRANSFER = 4; //
Create Internal Transfer (JSON)
Request endpoint
POST /payout/create-internal-transfer
Request body params
| Parameter | Type | required | Description |
|---|---|---|---|
| title | String | true | Title of this PO |
| feeIsPaidByReceiver | int | false | whether fee is paid by receiver |
| isPriority | int | false | Whether priority queue should be used. Paid service |
| receivers | array | true | Array list of recipients (see payload) |
| mchTransactionRef | array | false | The creator's custom reference ID |
{
"title": "Payout cool title",
"currencyCode" : "USD" ,
"feeIsPaidByReceiver": 1,
"isPriority": 1,
"mchTransactionRef" : "ref12345566666",
"receivers" : [
{
"tranzakId" : "tz13",
"accountName" : "Dan Internal",
"amount" : "1000",
"beneficiaryNote" : "Hello salary",
"payerNote" : "Transfer to user",
"payerReferenceId" : "111111"
},
{
"tranzakId" : "tz14",
"accountName" : "Dan Internal",
"amount" : "1000",
"beneficiaryNote" : "Hello salary2",
"payerNote" : "Transfer to user2",
"payerReferenceId" : "22222"
},
{
"tranzakId" : "tz15",
"accountName" : "Dan Internal",
"amount" : "1000",
"beneficiaryNote" : "Hello salary3",
"payerNote" : "Transfer to user3",
"payerReferenceId" : "33333"
}
]
}
Response
The response is a payout object . See the VIEW section.
Update Internal Transfer Request
Updates the content of an internal transfer created via JSON configuration.
Endpoint
POST /payout/update-internal-transfer
Request body params
| Parameter | Type | required | Description |
|---|---|---|---|
| _id | String | true | ID of the PO |
| title | String | true | Title of this PO |
| feeIsPaidByReceiver | int | false | whether fee is paid by receiver |
| isPriority | int | false | Whether priority queue should be used. Paid service |
| receivers | array | true | Array list of recipients (see payload) |
| mchTransactionRef | array | false | The creator's custom reference ID |
{
"_id": "POOESL0X1NYDTFN54U9H",
"title": "Payout cool title",
"feeIsPaidByReceiver": 1,
"isPriority": 1,
"items" : [
{
"beneficiaryAccountId" : "tz87",
"beneficiaryAccountName" : "testing",
"beneficiaryOrgCode" : "0",
"amount" : "1000"
},
{
"beneficiaryAccountId" : "666666666",
"beneficiaryAccountName" : "MTN Test recipient",
"beneficiaryOrgCode" : "cmmtnmomo",
"amount" : "1000"
} ,
{
"beneficiaryAccountId" : "tz87",
"beneficiaryAccountName" : "Orange Test",
"beneficiaryOrgCode" : "cmoramomo",
"amount" : "1000"
}
]
}
Response
See the VIEW section for the response
UPLOAD Internal Transfer FILE
This endpoint creates an internal transfer via file upload
Endpoint
POST /payout/upload-internal-file
Request body params
Only the file (created from the relevant template) shall be uploaded. All changes to the details of the payout shall be amended in the file and re-submitted (in case of changes);
Response
See the VIEW section for the response
Creates a MOBILE MONEY TRANSFER via JSON
This endpoint creates an mobile money transfer via JSON configuration
Request endpoint
POST /payout/create-mw
Request body params
| Parameter | Type | required | Description |
|---|---|---|---|
| title | String | true | Title of this PO |
| feeIsPaidByReceiver | int | false | whether fee is paid by receiver |
| isPriority | int | false | Whether priority queue should be used. Paid service |
| receivers | array | true | Array list of recipients (see payload) |
| mchTransactionRef | array | false | The creator's custom reference ID |
{
"title": "Payout cool title",
"currencyCode" : "USD" ,
"feeIsPaidByReceiver": 1,
"isPriority": 1,
"mchTransactionRef" : "ref12345566666",
"receivers" : [
{
"mobileNumber" : "+237674728670",
"accountName" : "Dan Momo",
"amount" : "1000",
"beneficiaryNote" : "Hello salary",
"payerNote" : "Transfer to user",
"payerReferenceId" : "111111"
},
{
"mobileNumber" : "+237674728670",
"accountName" : "Dan Momo",
"amount" : "1000",
"beneficiaryNote" : "Hello salary2",
"payerNote" : "Transfer to user2",
"payerReferenceId" : "22222"
},
{
"mobileNumber" : "+237674728670",
"accountName" : "Dan Momo",
"amount" : "1000",
"beneficiaryNote" : "Hello salary3",
"payerNote" : "Transfer to user3",
"payerReferenceId" : "33333"
}
]
}
Response
The response is a payout object . See the VIEW section.
Update Mobile Money Transfer Request
Updates the content of an Mobile money transfer created via JSON configuration.
Endpoint
POST /payout/update-mw
Request body params
| Parameter | Type | required | Description |
|---|---|---|---|
| _id | String | true | ID of the PO |
| title | String | true | Title of this PO |
| feeIsPaidByReceiver | int | false | whether fee is paid by receiver |
| isPriority | int | false | Whether priority queue should be used. Paid service |
| receivers | array | true | Array list of recipients (see payload) |
| mchTransactionRef | array | false | The creator's custom reference ID |
{
"_id": "POSTY8AJRD3FQHIA8CTT",
"title": "Payout cool title",
"currencyCode" : "USD" ,
"feeIsPaidByReceiver": 1,
"isPriority": 1,
"mchTransactionRef" : "ref12345566666",
"receivers" : [
{
"mobileNumber" : "+237674728670",
"accountName" : "Dan Momo",
"amount" : "1000",
"beneficiaryNote" : "Hello salary",
"payerNote" : "Transfer to user",
"payerReferenceId" : "111111"
},
{
"mobileNumber" : "+237674728670",
"accountName" : "Dan Momo",
"amount" : "1000",
"beneficiaryNote" : "Hello salary2",
"payerNote" : "Transfer to user2",
"payerReferenceId" : "22222"
},
{
"mobileNumber" : "+237674728670",
"accountName" : "Dan Momo",
"amount" : "1000",
"beneficiaryNote" : "Hello salary3",
"payerNote" : "Transfer to user3",
"payerReferenceId" : "33333"
}
]
}
Response
See the VIEW section for the response
UPLOAD Mobile Money Transfer FILE
This endpoint creates an mobile wallet transfer via file upload
Endpoint
POST /payout/upload-mw-file
Request body params
Only the file (created from the relevant template) shall be uploaded. All changes to the details of the payout shall be amended in the file and re-submitted (in case of changes);
Response
See the VIEW section for the response
Creates a BANK DEBIT TRANSFER via JSON
This endpoint creates an bank transfer via JSON configuration
Request endpoint
POST /payout/create-bank-transfer
Request body params
| Parameter | Type | required | Description |
|---|---|---|---|
| title | String | true | Title of this PO |
| feeIsPaidByReceiver | int | false | whether fee is paid by receiver |
| isPriority | int | false | Whether priority queue should be used. Paid service |
| receivers | array | true | Array list of recipients (see payload) |
| mchTransactionRef | array | false | The creator's custom reference ID |
{
"title": "Payout cool title",
"currencyCode" : "USD" ,
"feeIsPaidByReceiver": 1,
"isPriority": 1,
"mchTransactionRef" : "ref12345566666",
"receivers" : [
{
"accountNumber" : "10001111111111",
"accountName" : "Paddy Wak Chuk",
"bankCode" : "10033",
"branchCode" : "0005",
"ribCode" : "56" ,
"amount" : "1000",
"beneficiaryNote" : "Hello salary|UBA",
"payerNote" : "Transfer to user",
"payerReferenceId" : "111111"
},
{
"accountNumber" : "100022222222",
"accountName" : "Jezz Tabac",
"bankCode" : "10033",
"branchCode" : "0007",
"ribCode" : "56" ,
"amount" : "1000",
"beneficiaryNote" : "Hello salary|UBA",
"payerNote" : "Transfer to user",
"payerReferenceId" : "22222"
},
{
"accountNumber" : "2000222222222",
"accountName" : "XiaLai Tui",
"bankCode" : "10005",
"branchCode" : "0005",
"ribCode" : "56" ,
"amount" : "1000",
"beneficiaryNote" : "Hello XiaLai|AFB",
"payerNote" : "Transfer to XiaLai",
"payerReferenceId" : "2222222"
},
{
"accountNumber" : "3330000000000333",
"accountName" : "Wizzy Brown",
"bankCode" : "10005",
"branchCode" : "0005",
"ribCode" : "56" ,
"amount" : "1000",
"beneficiaryNote" : "Hello wizz|AFB",
"payerMessage" : "Transfer to wizz",
"payerReferenceId" : "3333333"
}
]
}
Response
The response is a payout object . See the VIEW section.
Update Bank Transfer Request
Updates the content of an Mobile money transfer created via JSON configuration.
Endpoint
POST /payout/update-bank-transfer
Request body params
| Parameter | Type | required | Description |
|---|---|---|---|
| _id | String | true | ID of the PO |
| title | String | true | Title of this PO |
| feeIsPaidByReceiver | int | false | whether fee is paid by receiver |
| isPriority | int | false | Whether priority queue should be used. Paid service |
| receivers | array | true | Array list of recipients (see payload) |
| mchTransactionRef | array | false | The creator's custom reference ID |
{
"_id": "POSTY8AJRD3FQHIA8CTT",
"currencyCode" : "USD" ,
"feeIsPaidByReceiver": 1,
"isPriority": 1,
"mchTransactionRef" : "ref12345566666",
"receivers" : [
{
"accountNumber" : "10001111111111",
"accountName" : "Paddy Wak Chuk",
"bankCode" : "10033",
"branchCode" : "0005",
"ribCode" : "56" ,
"amount" : "1000",
"beneficiaryNote" : "Hello salary|UBA",
"payerNote" : "Transfer to user",
"payerReferenceId" : "111111"
},
{
"accountNumber" : "100022222222",
"accountName" : "Jezz Tabac",
"bankCode" : "10033",
"branchCode" : "0007",
"ribCode" : "56" ,
"amount" : "1000",
"beneficiaryNote" : "Hello salary|UBA",
"payerNote" : "Transfer to user",
"payerReferenceId" : "22222"
},
{
"accountNumber" : "2000222222222",
"accountName" : "XiaLai Tui",
"bankCode" : "10005",
"branchCode" : "0005",
"ribCode" : "56" ,
"amount" : "1000",
"beneficiaryNote" : "Hello XiaLai|AFB",
"payerNote" : "Transfer to XiaLai",
"payerReferenceId" : "2222222"
},
{
"accountNumber" : "3330000000000333",
"accountName" : "Wizzy Brown",
"bankCode" : "10005",
"branchCode" : "0005",
"ribCode" : "56" ,
"amount" : "1000",
"beneficiaryNote" : "Hello wizz|AFB",
"payerMessage" : "Transfer to wizz",
"payerReferenceId" : "3333333"
}
]
}
Response
See the VIEW section for the response
UPLOAD Mobile Money Transfer FILE
This endpoint creates an mobile wallet transfer via file upload
Endpoint
POST /payout/upload-bank-file
Request body params
Only the file (created from the relevant template) shall be uploaded. All changes to the details of the payout shall be amended in the file and re-submitted (in case of changes);
Response
See the VIEW section for the response
Creates a PREPAID CARD TOPUP via JSON
This endpoint creates an prepaid card topup via JSON configuration
Request endpoint
POST /payout/create-prepaid-card-transfer
Request body params
| Parameter | Type | required | Description |
|---|---|---|---|
| title | String | true | Title of this PO |
| feeIsPaidByReceiver | int | false | whether fee is paid by receiver |
| isPriority | int | false | Whether priority queue should be used. Paid service |
| receivers | array | true | Array list of recipients (see payload) |
| mchTransactionRef | array | false | The creator's custom reference ID |
{
"title": "Payout cool title",
"currencyCode" : "USD" ,
"feeIsPaidByReceiver": 1,
"isPriority": 1,
"mchTransactionRef" : "ref12345566666",
"receivers" : [
{
"accountName" : "Prepaid Cookie Monster",
"prepaidCardFirst6Digits" : "111111",
"prepaidCardLast4Digits" : "1111",
"prepaidCardCustomerId" : "111100111",
"amount" : "1000",
"beneficiaryNote" : "Hello salary",
"payerNote" : "Transfer to user",
"payerReferenceId" : "111111"
},
{
"accountName" : "Prepaid Cookie Monster",
"prepaidCardFirst6Digits" : "111111",
"prepaidCardLast4Digits" : "1111",
"prepaidCardCustomerId" : "111100111",
"amount" : "1000",
"beneficiaryNote" : "Hello salary",
"payerNote" : "Transfer to user",
"payerReferenceId" : "111111"
},
{
"accountName" : "Prepaid Cookie Monster",
"prepaidCardFirst6Digits" : "111111",
"prepaidCardLast4Digits" : "1111",
"prepaidCardCustomerId" : "111100111",
"amount" : "1000",
"beneficiaryNote" : "Hello salary",
"payerNote" : "Transfer to user",
"payerReferenceId" : "111111"
}
]
}
Response
The response is a payout object . See the VIEW section.
Update Prepaid card topup Request
Updates the content of an Prepaid card topup created via JSON configuration.
Endpoint
POST /payout/update-bank-transfer
Request body params
| Parameter | Type | required | Description |
|---|---|---|---|
| _id | String | true | ID of the PO |
| title | String | true | Title of this PO |
| feeIsPaidByReceiver | int | false | whether fee is paid by receiver |
| isPriority | int | false | Whether priority queue should be used. Paid service |
| receivers | array | true | Array list of recipients (see payload) |
| mchTransactionRef | array | false | The creator's custom reference ID |
{
"_id": "POSTY8AJRD3FQHIA8CTT",
"title": "Payout cool title",
"currencyCode" : "USD" ,
"feeIsPaidByReceiver": 1,
"isPriority": 1,
"mchTransactionRef" : "ref12345566666",
"receivers" : [
{
"accountName" : "Prepaid Cookie Monster",
"prepaidCardFirst6Digits" : "111111",
"prepaidCardLast4Digits" : "1111",
"prepaidCardCustomerId" : "111100111",
"amount" : "1000",
"beneficiaryNote" : "Hello salary",
"payerNote" : "Transfer to user",
"payerReferenceId" : "111111"
},
{
"accountName" : "Prepaid Cookie Monster",
"prepaidCardFirst6Digits" : "111111",
"prepaidCardLast4Digits" : "1111",
"prepaidCardCustomerId" : "111100111",
"amount" : "1000",
"beneficiaryNote" : "Hello salary",
"payerNote" : "Transfer to user",
"payerReferenceId" : "111111"
},
{
"accountName" : "Prepaid Cookie Monster",
"prepaidCardFirst6Digits" : "111111",
"prepaidCardLast4Digits" : "1111",
"prepaidCardCustomerId" : "111100111",
"amount" : "1000",
"beneficiaryNote" : "Hello salary",
"payerNote" : "Transfer to user",
"payerReferenceId" : "111111"
}
]
}
Response
See the VIEW section for the response
UPLOAD Prepaid Card Topup FILE
This endpoint creates an pre-paid card topup via file upload
Endpoint
POST /payout/upload-prepaid-card-file
Request body params
Only the file (created from the relevant template) shall be uploaded. All changes to the details of the payout shall be amended in the file and re-submitted (in case of changes);
Response
See the VIEW section for the response
View
View the details of a PO
Request body params
GET /fapi/payout/view?_id=<_id_of_PO>
| Parameter | Type | required | Description |
|---|---|---|---|
| _id | String | true | ID of the PO |
TYPES
const TYPE_INTERNAL_TRANSFER = 1;
const TYPE_MOBILE_WALLET_TRANSFER = 2;
const TYPE_BANK_DEBIT_TRANSFER = 3; //
const TYPE_VISA_PREPAID_TRANSFER = 4; //
STATUSES
const STATUS_PENDING = 1 ;
const STATUS_PAID = 2 ; // The payout has been paid to
const STATUS_PROCESSING = 3; // Batch job launched
const STATUS_COMPLETED = 4 ; //Completed
const STATUS_CANCELLED = 5 ; //Cancelled
const STATUS_FAILED = 6 ; // Failed
const STATUS_INTERNAL_TRANSFER_COMPLETED = 7 ; // internal transfer completed
Response
The following is response for a sample internal transfer
{
"data": {
"_id": "POFE7E3WVHBMOACOXMQF",
"completedAt": null,
"createdAt": "2022-02-07 18:31:52",
"createdByUserId": 34,
"currencyCode": "USD",
"description": null,
"feeIsPaidByReceiver": 1,
"isCreatedViaFileUpload": 0,
"isPriority": 1,
"mchTransactionRef": "ref12345566666",
"payment": null,
"priorityFee": 35,
"receivers": [
{
"tranzakId": "tz13",
"accountName": "Dan Internal",
"amount": "1000",
"beneficiaryNote": "Hello salary",
"payerNote": "Transfer to user",
"payerReferenceId": "111111"
},
{
"tranzakId": "tz14",
"accountName": "Dan Internal",
"amount": "1000",
"beneficiaryNote": "Hello salary2",
"payerNote": "Transfer to user2",
"payerReferenceId": "22222"
},
{
"tranzakId": "tz15",
"accountName": "Dan Internal",
"amount": "1000",
"beneficiaryNote": "Hello salary3",
"payerNote": "Transfer to user3",
"payerReferenceId": "33333"
}
],
"refund": null,
"spreadSheetReportFilePath": null,
"status": 1,
"statusText": "pending",
"title": "Payout cool title",
"totalAmount": 3000,
"totalFailedTransactionAmount": 0,
"totalFee": 0,
"totalNumberFailedTransactions": 0,
"totalNumberOfReceivers": 3,
"type": 1,
"typeText": "internal transfer"
},
"success": true,
"dateTime": "2022-02-07T18:32:30+00:00",
"duration": "0.057s",
"lang": "en-US",
"userId": 34,
"orgUserId": 33,
"roleId": 1000,
"roleLabel": "owner",
"hostname": "cortex01",
"serverIpAddress": "192.168.137.2"
}
Create A transaction
Creates a transaction to authorize a PO.
| Parameter | Type | required | Description |
|---|---|---|---|
| _id | String | true | PO ID |
Request Body
{
"_id" : "POAMB0GRBDWPMYCVMKNN"
}
Response
The response is standard TRANSACTION OBJECT . See Transaction VIEW section
List
Paginated list of PO
Response
{
"data": {
"currentPage": 1,
"hasMore": false,
"list": [
{
"_id": "POR0SQVN3ML1TQ117SR1",
"title": "Payout cool title",
"createdByUserId": "34",
"totalAmount": 3000,
"type": "4",
"currencyCode": "USD",
"mchTransactionRef": null,
"description": null,
"feeIsPaidByReceiver": "1",
"totalFee": 0,
"priorityFee": "35",
"isPriority": "1",
"status": "1",
"totalNumberOfReceivers": "3",
"isCreatedViaFileUpload": "0",
"spreadSheetReportFilePath": null,
"createdAt": "2022-02-07 18:35:43",
"completedAt": null,
"payment": null,
"statusText": "pending",
"typeText": "VISA pre-paid card transfer"
},
{
"_id": "POO91U1TDN57LG3CMRUG",
"title": "Payout cool title",
"createdByUserId": "34",
"totalAmount": 4000,
"type": "3",
"currencyCode": "USD",
"mchTransactionRef": "ref12345566666",
"description": null,
"feeIsPaidByReceiver": "1",
"totalFee": 0,
"priorityFee": "35",
"isPriority": "1",
"status": "1",
"totalNumberOfReceivers": "4",
"isCreatedViaFileUpload": "0",
"spreadSheetReportFilePath": null,
"createdAt": "2022-02-07 18:35:40",
"completedAt": null,
"payment": null,
"statusText": "pending",
"typeText": "bank transfer"
},
{
"_id": "POON9TCAWODF6PJ05V7R",
"title": "Payout cool title",
"createdByUserId": "34",
"totalAmount": 3000,
"type": "2",
"currencyCode": "USD",
"mchTransactionRef": "ref12345566666",
"description": null,
"feeIsPaidByReceiver": "1",
"totalFee": 0,
"priorityFee": "35",
"isPriority": "1",
"status": "1",
"totalNumberOfReceivers": "3",
"isCreatedViaFileUpload": "0",
"spreadSheetReportFilePath": null,
"createdAt": "2022-02-07 18:35:37",
"completedAt": null,
"payment": null,
"statusText": "pending",
"typeText": "mobile money transfer"
},
{
"_id": "PON45LV8V8IVKHR16EUY",
"title": "Payout cool title",
"createdByUserId": "34",
"totalAmount": 4000,
"type": "3",
"currencyCode": "USD",
"mchTransactionRef": "ref12345566666",
"description": null,
"feeIsPaidByReceiver": "1",
"totalFee": 0,
"priorityFee": "35",
"isPriority": "1",
"status": "1",
"totalNumberOfReceivers": "4",
"isCreatedViaFileUpload": "0",
"spreadSheetReportFilePath": null,
"createdAt": "2022-02-07 18:05:50",
"completedAt": null,
"payment": null,
"statusText": "pending",
"typeText": "bank transfer"
}
],
"pageCount": [
1,
50
],
"pageSize": 10,
"totalItems": 5
},
"success": true,
"dateTime": "2022-02-07T18:35:45+00:00",
"duration": "0.05s",
"lang": "en-US",
"userId": 34,
"orgUserId": 33,
"roleId": 1000,
"roleLabel": "owner",
"hostname": "cortex01",
"serverIpAddress": "192.168.137.2"
}
List Transfers (jobs) for a payout
List all the transfers that have been made for a particular Payout request (if payoutId has been set) or for ALL payout requests. Filter by payoutId
request body params
GET /payout/list-jobs?payoutId=POAMB0GRBDWPMYCVMKNN
Filters
| Parameter | Type | required | Description |
|---|---|---|---|
| id | String | false | transfer iD |
| payoutId | String | false | ID of the PO |
| status | int | false | job status e.g 1-pending, 2-processing, 3-pending-settlement, 4-completed , 5-failed |
| type | int | false | Filter by type (See above) |
The following params may be used for filtering :
currencyCode, beneficiaryBankName, beneficiaryAccountNumber,
beneficiaryAccountName, partnerTransactionRefId, payerNote, beneficiaryNote,
beneficiaryRibCode, beneficiaryPrepaidFirst6Digits, beneficiaryPrepaidLast4Digits, beneficiaryPrepaidCustomerId{
"data": {
"list": [
{
"id": "3",
"type": "1",
"payoutId": "POAMB0GRBDWPMYCVMKNN",
"amount": 1000,
"beneAmount": "980",
"feeAmount": 20,
"currencyCode": "XAF",
"outboundOrgCode": null,
"outboundOrgName": "tranzak",
"outboundAccountId": "tz87",
"outboundAccountName": null,
"swiftCode": null,
"partnerTransactionRefId": null,
"payerNote": null,
"beneNote": null,
"status": "3",
"errorCode": null,
"message": null,
"debugMessage": null,
"createdAt": "2021-10-31 19:08:14",
"lastUpdatedAt": "2021-10-31 20:08:14",
"payment": {
"transactionId": "PP20211031OK999UKUP0",
"datetime": "2021-10-31 20:08:14.508745"
},
"payout": {
"_id": "POAMB0GRBDWPMYCVMKNN",
"title": "Payout cool title",
"totalAmount": 3000,
"currencyCode": "XAF",
"paymentId": "31",
"refundId": null,
"userTransactionRef": null,
"description": null,
"feeIsPaidByReceiver": "1",
"totalFee": 0,
"priorityFee": "200",
"isPriority": "1",
"status": "7",
"totalNumberOfReceivers": "3",
"isCreatedViaFileUpload": "0",
"spreadSheetReportFilePath": null,
"createdAt": "2021-10-31 19:59:02",
"completedAt": null,
"statusText": "internal transfers completed"
},
"typeText": "internal transfer",
"errorCodeText": "unknown",
"statusText": "internal system error"
},
{
"id": "1",
"type": "1",
"payoutId": "POAMB0GRBDWPMYCVMKNN",
"amount": 1000,
"beneAmount": "980",
"feeAmount": 20,
"currencyCode": "XAF",
"outboundOrgCode": null,
"outboundOrgName": "tranzak",
"outboundAccountId": "tz87",
"outboundAccountName": null,
"swiftCode": null,
"partnerTransactionRefId": null,
"payerNote": null,
"beneNote": null,
"status": "3",
"errorCode": null,
"message": null,
"debugMessage": null,
"createdAt": "2021-10-31 19:08:14",
"lastUpdatedAt": "2021-10-31 20:08:14",
"payment": {
"transactionId": "PP20211031I5LKC1OR47",
"datetime": "2021-10-31 20:08:14.477032"
},
"payout": {
"_id": "POAMB0GRBDWPMYCVMKNN",
"title": "Payout cool title",
"totalAmount": 3000,
"currencyCode": "XAF",
"paymentId": "31",
"refundId": null,
"userTransactionRef": null,
"description": null,
"feeIsPaidByReceiver": "1",
"totalFee": 0,
"priorityFee": "200",
"isPriority": "1",
"status": "7",
"totalNumberOfReceivers": "3",
"isCreatedViaFileUpload": "0",
"spreadSheetReportFilePath": null,
"createdAt": "2021-10-31 19:59:02",
"completedAt": null,
"statusText": "internal transfers completed"
},
"typeText": "internal transfer",
"errorCodeText": "unknown",
"statusText": "internal system error"
}
],
"totalItems": 2,
"pageCount": [
1,
50
],
"pageSize": 20,
"currentPage": 1,
"hasMore": false
},
"dateTime": "2021-10-31T20:15:43+00:00",
"duration": "0.082s",
"lang": "en-US",
"roleId": 1,
"roleLabel": "owner",
"scopeUserId": 87,
"success": true,
"userId": 87
}
View a Transfer Job
Displays details of the job. A job is a single transaction inside a mass payment request.
Request Endpoint
```GET /payout/view-job?jobId=3 `
Filters
| Parameter | Type | required | Description |
|---|---|---|---|
| id | int | false | job iD |
Response
{
"data": {
"amount": 1000,
"beneAmount": 99900,
"beneficiaryAccountName": "Dan Internal",
"beneficiaryAccountNumber": "tz15",
"beneficiaryBankCode": null,
"beneficiaryBankName": "",
"beneficiaryBranchCode": null,
"beneficiaryNote": "Hello salary3",
"beneficiaryPrepaidCustomerId": null,
"beneficiaryPrepaidFirst6Digits": null,
"beneficiaryPrepaidLast4Digits": null,
"beneficiaryRibCode": null,
"createdAt": "2022-02-07 20:22:13",
"currencyCode": "USD",
"errorCode": 2,
"errorCodeText": "user not found",
"feeAmount": 1,
"id": "3",
"lastUpdatedAt": "2022-02-07 21:22:14",
"message": "Tranzak user tz15 was not found.",
"partnerTransactionRefId": null,
"payerNote": "Transfer to user3",
"payerReferenceId": "33333",
"payout": {
"_id": "PO3MYHNUTS9U8VVK791T",
"title": "Payout cool title",
"createdByUserId": 34,
"totalAmount": 3000,
"type": 1,
"currencyCode": "USD",
"mchTransactionRef": "ref12345566666",
"description": null,
"feeIsPaidByReceiver": 1,
"totalFee": 0,
"priorityFee": 35,
"isPriority": 1,
"status": 4,
"totalNumberOfReceivers": 3,
"isCreatedViaFileUpload": 0,
"spreadSheetReportFilePath": "@datastore/payouts/2022/02/payout_1_PO3MYHNUTS9U8VVK791T.xlsx",
"createdAt": "2022-02-07 20:20:24",
"completedAt": "2022-02-07 20:22:14",
"statusText": "completed",
"typeText": "internal transfer",
"totalNumberFailedTransactions": "3",
"totalFailedTransactionAmount": 3000
},
"status": 5,
"statusText": "failed"
},
"success": true,
"dateTime": "2022-02-07T20:51:31+00:00",
"duration": "0.045s",
"lang": "en-US",
"userId": 34,
"orgUserId": 34,
"roleId": 1000,
"roleLabel": "owner",
"hostname": "cortex01",
"serverIpAddress": "192.168.137.2"
}
Download Transfer File (report)
Download a payout report file
Request Endpoint
```GET /payout/view-job?jobId=3 `
Filters
| Parameter | Type | required | Description |
|---|---|---|---|
| id | int | false | job iD |
Clone
Clones a PO
| Parameter | Type | required | Description |
|---|---|---|---|
| _id | String | true | PO ID |
Request Body
{
"_id" : "POAMB0GRBDWPMYCVMKNN"
}
Response
A PO object . See VIEW section
List operators
Displays list of operators that funds may be transferred to
request body params
Endpoint
GET /payout/list-operators
Request Body
| Parameter | Type | required | Description |
|---|---|---|---|
| _id | String | true | treasury account ID |
Response
List of treasuries The FULL list of the operators will be returned (i.e. NO PAGINATION IS NEEDED)
{
"data": [
{
"accountId": "AC1A58ZY5MJW4ZMGNRX9",
"shortName": "BICEC - Cameroun",
"name": "BICEC - Cameroun",
"description": "CM | BICEC - Cameroun",
"typeId": "2",
"typeText": "debit card",
"avatarUrl": "http://staging-api.tranzak.me/fapi/static/img/partners/bicec.png",
"cardAvatarUrl": "http://staging-api.tranzak.me/fapi/static/img/partners/cards/bicec-dark.png",
"isPaymentMethod": "1"
},
{
"accountId": "AC2ZSJR2U0IJHOM7QQZH",
"shortName": "SocGen",
"name": "SocGen",
"description": "CM | SocGen",
"typeId": "2",
"typeText": "debit card",
"avatarUrl": "http://staging-api.tranzak.me/fapi/static/img/partners/socgen.png",
"cardAvatarUrl": "http://staging-api.tranzak.me/fapi/static/img/partners/cards/socgen-dark.png",
"isPaymentMethod": "1"
},
{
"accountId": "ACJ9AT76QXUNSQI6994P",
"shortName": "StanChart - Cameroon",
"name": "StanChart - Cameroon",
"description": "CM | StanChart - Cameroon",
"typeId": "2",
"typeText": "debit card",
"avatarUrl": "http://staging-api.tranzak.me/fapi/static/img/partners/stanchart.png",
"cardAvatarUrl": "http://staging-api.tranzak.me/fapi/static/img/partners/cards/stanchart-dark.png",
"isPaymentMethod": "1"
},
{
"accountId": "ACSFXZOZJTIFNSMPJUPX",
"shortName": "Afriland Cameroon",
"name": "Afriland Cameroon",
"description": "CM | Afriland Cameroon",
"typeId": "2",
"typeText": "debit card",
"avatarUrl": "http://staging-api.tranzak.me/fapi/static/img/partners/afriland.png",
"cardAvatarUrl": "http://staging-api.tranzak.me/fapi/static/img/partners/cards/afriland-dark.png",
"isPaymentMethod": "1"
},
{
"accountId": "ACCPH2FT07NSQNULR7XJ",
"shortName": "UBA Cameroon",
"name": "UBA Cameroon",
"description": "CM | UBA Cameroon",
"typeId": "2",
"typeText": "debit card",
"avatarUrl": "http://staging-api.tranzak.me/fapi/static/img/partners/uba.png",
"cardAvatarUrl": "http://staging-api.tranzak.me/fapi/static/img/partners/cards/uba-dark.png",
"isPaymentMethod": "1"
},
{
"accountId": "ACBUF2ADFJVJ4F5U78DR",
"shortName": "Orange Money",
"name": "Orange Money",
"description": "CM | Orange Money",
"typeId": "4",
"typeText": "telecom wallet",
"avatarUrl": "http://staging-api.tranzak.me/fapi/static/img/partners/orange.png",
"cardAvatarUrl": "http://staging-api.tranzak.me/fapi/static/img/partners/cards/orange-dark.png",
"isPaymentMethod": "1"
},
{
"accountId": "ACHL4UGMZCIKCF82KV2Y",
"shortName": "MTN Momo",
"name": "MTN Momo",
"description": "CM | MTN Momo",
"typeId": "4",
"typeText": "telecom wallet",
"avatarUrl": "http://staging-api.tranzak.me/fapi/static/img/partners/mtn.png",
"cardAvatarUrl": "http://staging-api.tranzak.me/fapi/static/img/partners/cards/mtn-momo-dark.png",
"isPaymentMethod": "1"
}
],
"success": true,
"dateTime": "2021-12-28T10:42:55+00:00",
"duration": "0.042s",
"lang": "en-US",
"userId": 109,
"orgUserId": 108,
"roleId": 1000,
"roleLabel": "super admin/owner",
"hostname": "cortex01",
"serverIpAddress": "192.168.137.2"
}
Refunds (Merchant)
Refund interface for merchant. Merchants may not directly create a refund request . They may however act on a request by : APPROVING or REJECTING it within the refund SLA lifetime
Status Codes
const STATUS_PENDING = 1 ;
const STATUS_APPROVED = 2; //Will be reported as 'processing'
const STATUS_COMPLETED = 3 ;
const STATUS_CANCELLED = -1 ; //Cancelled by payer
const STATUS_REJECTED = -2 ; //Rejected (by merchant or system)
const STATUS_ONHOLD = -3 ;
Types
const TYPE_DEFAULT = 1;
const TYPE_REVERSAL = 2;
const TYPE_MERCHANT_REJECT = 3;
const TYPE_CHARGEBACK = 4;
Request Reason Codes
const REASON_CODE_MUTUAL_AGREEMENT = 1; // buyer and seller reached mutual agreement
const REASON_CODE_ORDER_MISMATCH = 2; // order mismatch
const REASON_CODE_SUSPICIOUS_TRANSACTION = 3; //suspicious transaction
const REASON_CODE_DISPUTED_TRANSACTION = 4; //Part or all of the transaction terms of services was/were not fulfilled
const REASON_CODE_OTHER = 5; //Other reasons
const REASON_CODE_OUTBOUND_PAYMENT_FAIL = 5; //Other reasons
const REASON_CODE_DEFICIENT_PRODUCT_QUALITY = 6; //Other reasons
const REASON_CODE_DUP_TRANSACTION = 7; //Other reasons
const REASON_CODE_PRODUCT_NOT_DELIVERED = 8; //Other reasons
Rejection/Cancellation Reason codes
const REJECT_INSUFF_EVIDENCE = 1;
const REJECT_MUTUAL_AGREEMENT = 2;
Create Refund
Creates a merchant-issued refund for a transaction
Endpoint
POST /fapi/refund-mch/create
Request Params
| Parameter | Type | required | Description |
|---|---|---|---|
| refundedPaymentId | string | true | The transaction ID to be refunded |
| amount | Number | no | The amount to to be refunded. Set to NULL if FULL refund |
| reasonCode | Number | true | Reason code. See GET /fapi/refund/list-request-reason-codes for list of reason codes |
| cancellationNote | string | No | Optional note to payer/customer |
{
"refundedPaymentId": "MP220413Y8LCF5SDYYHK",
"reasonCode": 2,
"note": "Sorry for the inconvenience" ,
"amount" : 12
}
Response
See VIEW Section
Approve a refund request
Approves a refund request
Endpoint
POST /v1/mch-refund/approve
Request Body Parameters
| Parameter | Type | required | Description |
|---|---|---|---|
| _id | Number | true | Name of the sub-account |
| approvalNote | string | false | Custom note |
{
"_id": "REFF94KJRWSPHW0N5CGJ",
"approvalNote": "Thanks for supporting us"
}
Response
See the VIEW section
REJECT
Rejects a refund
Request body
| Parameter | Type | required | Description |
|---|---|---|---|
| refundId | Number | true | Name of the sub-account |
| reasonCode | Number | true | Name of the sub-account . See GET /fapi/refund-mch/list-reject-codes endpoint for list |
| cancellationNote | string | false | custom note |
Endpoint POST /v1/mch-refund/reject
{
"_id": "REFHDJQJ86TNI84T118Q",
"cancelCode" : 2,
"cancellationNote": "we agreed on this!"
}
Response
See the VIEW section
View
Displays
Endpoint
GET /v1/mch-refund/view/_id?=REFUND_ID
Request Body Parameters
| Parameter | Type | required | Description |
|---|---|---|---|
| _id | String | true | The refund ID |
Response
Merchant account data
"data": {
"_id": "REFF94KJRWSPHW0N5CGJ",
"amount": 1,
"approvedAt": "2022-04-06 23:11:16",
"cancelledAt": null,
"createdAt": "2022-04-06 23:08:51",
"currencyCode": "XAF",
"disputeId": null,
"dueDate": "2022-04-09 23:08:51",
"isApprovedBy": 2,
"isApprovedByText": "system",
"isCancelledBy": 0,
"isCancelledByText": "",
"isFinalRefund": 0,
"isInitiatedBy": 1,
"isInitiatedByText": "customer",
"lastUpdatedAt": "2022-04-06 23:11:16",
"lastUpdatedByStaffId": null,
"merchantRefundNumber": null,
"note": "My name is QR",
"reasonCode": 2,
"reasonText": "the order did not match the transaction agreement",
"refundedActivityPoints": 0,
"refundedPaymentId": "MP2204066B6MSMD8B1WK",
"status": 3,
"statusText": "completed",
"type": 1
},
List
Lists
Endpoint
GET /v1/mch-refund/list
Filter parameters
| Parameter | Type | required | Description |
|---|---|---|---|
| status | int | false | Filter by status codes : e.g 1- PENDING, 2- approved , 3- completed , 4-cancelled , 5-rejected , 6-on-hold |
| type | int | false | Filter by type codes : e.g 1- refund, 2- reversal |
| refundedPaymentId | int | false | Filter by refunded transaction ID |
Response
Listing
{
"data": {
"currentPage": 1,
"hasMore": false,
"list": [
{
"_id": "REFF94KJRWSPHW0N5CGJ",
"refundedPaymentId": "MP2204066B6MSMD8B1WK",
"type": "1",
"currencyCode": "XAF",
"amount": 1,
"dueDate": "2022-04-09 23:08:51",
"status": "3",
"refundedActivityPoints": "0",
"merchantRefundNumber": null,
"note": "My name is QR",
"reasonCode": "2",
"isFinalRefund": "0",
"disputeId": null,
"isInitiatedBy": "1",
"isCancelledBy": "0",
"isApprovedBy": "2",
"createdAt": "2022-04-06 23:08:51",
"cancelledAt": null,
"approvedAt": "2022-04-06 23:11:16",
"lastUpdatedAt": "2022-04-06 23:11:16",
"lastUpdatedByStaffId": null,
"payment": null,
"statusText": "completed",
"reasonText": "the order did not match the transaction agreement",
"isInitiatedByText": "customer",
"isCancelledByText": "",
"isApprovedByText": "system",
"merchant": {
"_id": "tz22",
"ufId": null,
"displayName": "tz22",
"verifiedName": null,
"avatarUrl": null
}
},
{
"_id": "REFH6W5VG2VBCFCBZ8X3",
"refundedPaymentId": "MP220406Z2SDCCUL4RH7",
"type": "1",
"currencyCode": "XAF",
"amount": 1,
"dueDate": "2022-04-09 21:15:46",
"status": "1",
"refundedActivityPoints": "0",
"merchantRefundNumber": null,
"note": "My name is QR",
"reasonCode": "2",
"isFinalRefund": "0",
"disputeId": null,
"isInitiatedBy": "1",
"isCancelledBy": "0",
"isApprovedBy": "0",
"createdAt": "2022-04-06 21:15:46",
"cancelledAt": null,
"approvedAt": null,
"lastUpdatedAt": null,
"lastUpdatedByStaffId": null,
"payment": null,
"statusText": "pending approval",
"reasonText": "the order did not match the transaction agreement",
"isInitiatedByText": "customer",
"isCancelledByText": "",
"isApprovedByText": "",
"merchant": {
"_id": "tz22",
"ufId": null,
"displayName": "tz22",
"verifiedName": null,
"avatarUrl": null
}
},
],
"pageCount": [
1,
50
],
"pageSize": 10,
"totalItems": 9
},
"success": true,
}
List Reject Codes
Lists out rejection codes with translated text
Endpoint
GET /fapi/refund-mch/list-reject-codes
Response
"data": {
"1": "insufficient evidence",
"2": "mutual agreement"
},
Refunds
Refund interface for payer.
Status Codes
const STATUS_PENDING = 1 ;
const STATUS_APPROVED = 2; //Will be reported as 'processing'
const STATUS_COMPLETED = 3 ;
const STATUS_CANCELLED = -1 ; //Cancelled by payer
const STATUS_REJECTED = -2 ; //Rejected (by merchant or system)
const STATUS_ONHOLD = -3 ;
Types
const TYPE_DEFAULT = 1;
const TYPE_REVERSAL = 2;
const TYPE_MERCHANT_REJECT = 3;
const TYPE_CHARGEBACK = 4;
Request Reason Codes
const REASON_CODE_MUTUAL_AGREEMENT = 1; // buyer and seller reached mutual agreement
const REASON_CODE_ORDER_MISMATCH = 2; // order mismatch
const REASON_CODE_SUSPICIOUS_TRANSACTION = 3; //suspicious transaction
const REASON_CODE_DISPUTED_TRANSACTION = 4; //Part or all of the transaction terms of services was/were not fulfilled
const REASON_CODE_OTHER = 5; //Other reasons
const REASON_CODE_OUTBOUND_PAYMENT_FAIL = 5; //Other reasons
const REASON_CODE_DEFICIENT_PRODUCT_QUALITY = 6; //Other reasons
const REASON_CODE_DUP_TRANSACTION = 7; //Other reasons
const REASON_CODE_PRODUCT_NOT_DELIVERED = 8; //Other reasons
Rejection/Cancellation Reason codes
const REJECT_INSUFF_EVIDENCE = 1;
const REJECT_MUTUAL_AGREEMENT = 2;
Create a refund request
Creates a refund request
Endpoint
POST /v1/refund/create
Request Body Parameters
| Parameter | Type | required | Description |
|---|---|---|---|
| refundedPaymentId | Number | true | the ID of the transaction to be refunded |
| note | Number | false | The note to merchant |
| reasonCode | Number | true | Reason codes . Call the relevant endpoint to obtain list of reason codes : e.g 1-mutual agreement , 2-order-mismatch , 3-suspicious/unauthorized transaction , 4- disputed transaction , 5-other |
| amount | Number | true | Name of the sub-account |
{
"refundedPaymentId" : "352451",
"note" : "please, refund",
"reasonCode" : 2,
"amount" : 1
}
Response
See the VIEW section
CANCEL
Cancels a refund
Request body
| Parameter | Type | required | Description |
|---|---|---|---|
| refundId | Number | true | Name of the sub-account |
| cancellationNote | string | no | Note |
Endpoint POST /v1/refund/cancel,
{
"refundId" : "REF26G2BYD744UJEW23I" ,
"cancellationNote": "Sorry for the inconvenience" ,
}
Response
See the VIEW section
View
Displays
Endpoint
GET /v1/refund/view/_id?=REFUND_ID
Request Body Parameters
| Parameter | Type | required | Description |
|---|---|---|---|
| _id | String | true | The refund ID |
Response
Merchant account data
{
"data": {
"_id": "REFF94KJRWSPHW0N5CGJ",
"amount": 1,
"approvedAt": "2022-04-06 23:11:16",
"cancelledAt": null,
"createdAt": "2022-04-06 23:08:51",
"currencyCode": "XAF",
"disputeId": null,
"dueDate": "2022-04-09 23:08:51",
"isApprovedBy": 2,
"isApprovedByText": "system",
"isCancelledBy": 0,
"isCancelledByText": "",
"isFinalRefund": 0,
"isInitiatedBy": 1,
"isInitiatedByText": "customer",
"lastUpdatedAt": "2022-04-06 23:11:16",
"lastUpdatedByStaffId": null,
"merchantRefundNumber": null,
"note": "My name is QR",
"reasonCode": 2,
"reasonText": "the order did not match the transaction agreement",
"refundedActivityPoints": 0,
"refundedPaymentId": "MP2204066B6MSMD8B1WK",
"status": 3,
"statusText": "completed",
"type": 1
},
"success": true,
}
List
Lists
Endpoint
GET /v1/refund/list
Filter parameters
| Parameter | Type | required | Description |
|---|---|---|---|
| status | int | false | Filter by status codes : e.g 1- PENDING, 2- approved , 3- completed , 4-cancelled , 5-rejected , 6-on-hold |
| type | int | false | Filter by type codes : e.g 1- refund, 2- reversal |
| refundedPaymentId | int | false | Filter by refunded transaction ID |
Response
Listing
{
"data": {
"currentPage": 1,
"hasMore": false,
"list": [
{
"_id": "REFF94KJRWSPHW0N5CGJ",
"refundedPaymentId": "MP2204066B6MSMD8B1WK",
"type": "1",
"currencyCode": "XAF",
"amount": 1,
"dueDate": "2022-04-09 23:08:51",
"status": "3",
"refundedActivityPoints": "0",
"merchantRefundNumber": null,
"note": "My name is QR",
"reasonCode": "2",
"isFinalRefund": "0",
"disputeId": null,
"isInitiatedBy": "1",
"isCancelledBy": "0",
"isApprovedBy": "2",
"createdAt": "2022-04-06 23:08:51",
"cancelledAt": null,
"approvedAt": "2022-04-06 23:11:16",
"lastUpdatedAt": "2022-04-06 23:11:16",
"lastUpdatedByStaffId": null,
"payment": null,
"statusText": "completed",
"reasonText": "the order did not match the transaction agreement",
"isInitiatedByText": "customer",
"isCancelledByText": "",
"isApprovedByText": "system",
"merchant": {
"_id": "tz22",
"ufId": null,
"displayName": "tz22",
"verifiedName": null,
"avatarUrl": null
}
},
{
"_id": "REFH6W5VG2VBCFCBZ8X3",
"refundedPaymentId": "MP220406Z2SDCCUL4RH7",
"type": "1",
"currencyCode": "XAF",
"amount": 1,
"dueDate": "2022-04-09 21:15:46",
"status": "1",
"refundedActivityPoints": "0",
"merchantRefundNumber": null,
"note": "My name is QR",
"reasonCode": "2",
"isFinalRefund": "0",
"disputeId": null,
"isInitiatedBy": "1",
"isCancelledBy": "0",
"isApprovedBy": "0",
"createdAt": "2022-04-06 21:15:46",
"cancelledAt": null,
"approvedAt": null,
"lastUpdatedAt": null,
"lastUpdatedByStaffId": null,
"payment": null,
"statusText": "pending approval",
"reasonText": "the order did not match the transaction agreement",
"isInitiatedByText": "customer",
"isCancelledByText": "",
"isApprovedByText": "",
"merchant": {
"_id": "tz22",
"ufId": null,
"displayName": "tz22",
"verifiedName": null,
"avatarUrl": null
}
},
],
"pageCount": [
1,
50
],
"pageSize": 10,
"totalItems": 9
},
"success": true,
}
List Refund Request Reason Codes
Lists the reason codes with translated text for payer
Endpoint
GET /fapi/refund/list-request-reason-codes
Response
{
"data": {
"1": "mutual agreement between buyer and seller",
"2": "the order did not match the transaction agreement",
"3": "suspicious transaction",
"4": "disputed transaction",
"5": "other reasons",
"6": "Deficient product/service",
"7": "Duplicate transaction"
},
"success": true
}
Transaction Report
Transaction report generator
Status Codes
const STATUS_DRAFT = 1 ;
const STATUS_PENDING = 2 ; //submitted
const STATUS_PROCESSING = 3;
const STATUS_COMPLETED = 4 ; //completed
const STATUS_CANCELLED = -2 ; //Cancelled/closed (failed, or cancelled)
const STATUS_FAILED = -1 ; //Cancelled/closed (failed, or cancelled)
Create a report
Creates a report
Endpoint
POST /v1/report/create
Request Body Parameters
| Parameter | Type | required | Description |
|---|---|---|---|
| name | String(100) | true | Name of report |
| description | Number (200) | false | description of report |
| filterStartDateTime | Datetime | true | Filter start date/time |
| filterEndDateTime | Datetime | false | Filter end date/time |
| submitAfterCreation | boolean | false | Whether to submit report for processing immediately after creating |
| accountIds | Datetime | false | List of comma-separated accounts |
| includeInvoicePayment | boolean | false | Whether to include invoice in the report |
| includeSales | boolean | false | Whether to include sales data in report |
| includeSettlementHistory | boolean | false | Whether/not to include settlement history |
| includeSettlementTransactions | boolean | false | Whether/not to include settlement transaction details |
| includePayouts | boolean | false | includePayouts |
| includeTransactions | boolean | false | includeTransactions |
| includePlatformPayments | boolean | false | includePlatformPayments |
| includeCustomerData | boolean | false | includeCustomerData |
{
"name": "My report card",
"description": "Report my case",
"filterStartDateTime": "2021-9-11 13:57:41",
"submitAfterCreation": 1,
"accountIds": "MSAMIOF9281FKHPBI0FO,MSATYLZSDYA2ON7C4ZH7",
"includeInvoicePayment": 1,
"includeSales": 1,
"includeSettlementHistory": 1,
"includeSettlementTransactions": 1
}
Response
See the VIEW section
Update
Endpoint POST /v1/report/update
Request body params
| Parameter | Type | required | Description |
|---|---|---|---|
| reportId | String | true | model ID |
| name | String(100) | true | Name of report |
| description | Number (200) | false | description of report |
| filterStartDateTime | Datetime | true | Filter start date/time |
| filterEndDateTime | Datetime | false | Filter end date/time |
| submitAfterCreation | boolean | false | Whether to submit report for processing immediately after creating |
{
"reportId" : 12,
"name" : "My report card",
"description" : "Reportss my case" ,
"filterStartDateTime" : "2021-10-1w 13:57:41",
"filterEndDateTime" : "2021-10-18 13:57:41"
}
View
Displays model data
Endpoint
GET /v1/report/view/reportId?=REPORT_ID
Request Body Parameters
| Parameter | Type | required | Description |
|---|---|---|---|
| reportId | String | true | The model ID |
Response
Merchant account data
{
"data": {
"name": "My report card",
"description": "Report my case",
"filterStartDateTime": "2021-10-26 18:51:04",
"status": 2,
"userId": 87,
"createdAt": "2021-10-26 18:51:04",
"key": "RP3C07OFI7Z0I59TETDU",
"id": 15,
"staffId": null,
"filterEndDateTime": null,
"createPdfFile": null,
"createExcelFile": null,
"htmlFilePath": null,
"pdfFilePath": null,
"excelFilePath": null,
"genStartTime": null,
"genEndTime": null,
"submittedAt": null,
"completedAt": null,
"lastUpdatedAt": null
},
"dateTime": "2021-10-26T18:51:04+00:00",
"duration": "0.053s",
"lang": "en-US",
"roleId": 1,
"roleLabel": "owner",
"scopeUserId": 87,
"success": true,
"userId": 87
}
List
Lists
Endpoint
GET /v1/report/list
Filter parameters
| Parameter | Type | required | Description |
|---|---|---|---|
| status | int | false | Filter by status codes : e.g 1- DRAFT, 2- STATUS_ACTIVE , 3- STATUS_PAID , 4-STATUS_CANCELLED |
| type | int | false | Filter by type codes : e.g 1- refund, 2- reversal |
| id | int | false | filter by ID |
Response
Listing
{
"data": {
"list": [
{
"id": 15,
"key": "RP3C07OFI7Z0I59TETDU",
"name": "My report card",
"userId": 87,
"description": "Report my case",
"status": 2,
"staffId": null,
"filterStartDateTime": "2021-10-26 18:51:04",
"filterEndDateTime": null,
"createPdfFile": 0,
"createExcelFile": 0,
"htmlFilePath": null,
"pdfFilePath": null,
"excelFilePath": null,
"genStartTime": null,
"genEndTime": null,
"createdAt": "2021-10-26 18:51:04",
"submittedAt": null,
"completedAt": null,
"lastUpdatedAt": null
},
{
"id": 14,
"key": "RPGREDUROTHX0ZXB1B3T",
"name": "My report card",
"userId": 87,
"description": "Report my case",
"status": 2,
"staffId": null,
"filterStartDateTime": "2021-10-22 11:47:19",
"filterEndDateTime": null,
"createPdfFile": 0,
"createExcelFile": 0,
"htmlFilePath": null,
"pdfFilePath": null,
"excelFilePath": null,
"genStartTime": null,
"genEndTime": null,
"createdAt": "2021-10-22 11:47:19",
"submittedAt": null,
"completedAt": null,
"lastUpdatedAt": null
}
],
"totalItems": 15,
"pageCount": [
1,
50
],
"pageSize": 20,
"currentPage": 1,
"hasMore": false
},
"dateTime": "2021-10-26T18:55:26+00:00",
"duration": "0.065s",
"lang": "en-US",
"roleId": 1,
"roleLabel": "owner",
"scopeUserId": 87,
"success": true,
"userId": 87
}
Download Report File
Downloads a generated report file
Request URL
GET /fapi/report/download-file?_id=REPORT_ID
Request Params
| Parameter | Type | required | Description |
|---|---|---|---|
| _id | String(100) | true | _id of report |
Response
The Raw Excel file
Other actions
Clone
Make a clone of a Payment link
Endpoint POST /v1/report/clone
submit
Submits a report for processing
POST /v1/report/submit
{
"reportId" : 10
}
Payment Request
Interface to request for funds from a payer
Status Codes
const STATUS_PENDING = 1 ;
const STATUS_PAYMENT_IN_PROGRESS = 2; //transient stage
const STATUS_COMPLETED = 3; //success
const STATUS_FAILED = -1 ;
const STATUS_CANCELLED = -2;
const STATUS_CANCELLED_BY_PAYER = -4;
const STATUS_VOIDED = -3 ;
Create a request
Initiates a payment request to a mobile phone number. Upon creation, the mobile user will be required to authorize the payment.
Endpoint
POST /v1/request/create
Request Body Parameters
| Parameter | Type | required | Description |
|---|---|---|---|
| amount | String(100) | true | amount |
| currencyCode | String(3) | true | currency code |
| receivingAccountId | String | false | The receivingAccountId |
| mobileWalletNumber | Datetime | false | The mobile wallet number. If mW number is set, a transaction will be automatically generated and a sent to the payer MW account for authorization. |
| mobileWalletNumber | boolean | false | Whether to submit report for processing immediately after creating |
{
"amount": 1,
"currencyCode" : "XAF",
"note" : "This is a noty note",
"receivingAccountId" : "MSAZTFNJSNA1S0VEJPIX" ,
"mwNumber" : "23768067567"
}
Response
See the VIEW section
Create Transaction
This endpoint is to generate a transaction payload for a request.
Request Body Parameters
POST /fapi/request/create-transaction
| Parameter | Type | required | Description |
|---|---|---|---|
| requestId | String(100) | true | ID of request |
{
"_id" : "REQ220218WGTVJDO4TG3"
}
Response
The response is a standard Transaction payload. See Transaction VIEW page.
VIEW
View the request data GET /fapi/request/view?_id=:REQID
Response
{
"data": {
"_id": "REQ220511Y7VIN9VTCRD",
"amount": 1000,
"appId": "c4jtk945h35i",
"beneNote": "",
"createdAt": "2022-05-11 15:43:06",
"createdByUserId": 25,
"currencyCode": "XAF",
"description": "Merchant Payment",
"id": 8,
"invoiceId": null,
"itemDetails": "",
"lastUpdatedAt": null,
"mchTransactionRef": "2333333",
"mobileWalletNumber": null,
"notifyUrl": null,
"orgUserId": 25,
"payerNote": "",
"payerUserId": null,
"payment": null,
"paymentId": null,
"receivingAccount": null,
"receivingAccountId": null,
"returnUrl": "",
"status": -4,
"statusText": "cancelled(by payer)",
"type": 2
},
"success": true,
}
Cancel a request
This endpoint is used to cancel a payment request. NOTE : Cancellation may be done by the creator (merchant) or the payer
Request Body Parameters
POST /fapi/request/cancel
| Parameter | Type | required | Description |
|---|---|---|---|
| _id | String(100) | true | ID of request |
{
"_id" : "REQ220218WGTVJDO4TG3"
}
Response
See VIEW section.
List Requests
Paginated list of requests
Endpoint
GET /request/list
Response
{
"data": {
"currentPage": 1,
"hasMore": true,
"list": [
{
"requestId": "REQ220512JUJ9VVRTGTW",
"status": "pending",
"amount": 1000,
"currencyCode": "XAF",
"description": "Merchant Payment",
"itemDetails": "",
"mchTransactionRef": "2333333",
"creationTime": "2022-05-12 19:49:48"
},
{
"requestId": "REQ2205126SURX2ZS0EF",
"status": "pending",
"amount": 1000,
"currencyCode": "XAF",
"description": "Merchant Payment",
"itemDetails": "",
"mchTransactionRef": "2333333",
"creationTime": "2022-05-12 19:49:47"
}
],
"pageCount": [
1,
50
],
"pageSize": 2,
"totalItems": 18
},
"success": true,
}
Transaction
View, update, capture a transaction
Status Codes
const STATUS_PENDING = 10; // transcient state
const STATUS_PAYMENT_IN_PROGRESS = 11 ; //Payer is in process of authorizing payment. This may be useful to merchant QR payment as the merchant can be shown the progress of the payment - transcient state
const STATUS_PENDING_INBOUND_PAYMENT = 20 ; // Awaiting transaction authorization from FUNDING source .
const STATUS_INBOUND_EXTPAY_FAILED = -20; //Inbound external payment failed. Payer should be presented with option to select PM
const STATUS_OUTBOUND_PROCESSING_BY_THIRD_PARTY = 30 ; //transcient state
const STATUS_COMPLETED = 40; //Completed successfully - terminal state
const STATUS_FAILED = -40 ; //Terminal state - FAILED
const STATUS_REVERSED = -41; //Reversal/refund completed - terminal state
const STATUS_REFUNDED = -42 ; //Refunded - terminal state
const STATUS_CANCELLED = -43; //Cancelled - terminal state
const STATUS_EXPIRED = -44; // Txn expired . terminal state
Types
const TYPE_TRANSFER = 1; //Default service type TRANSFER for non-merchant p2p
const TYPE_PAYMENT = self::TYPE_TRANSFER ;
const TYPE_MERCHANT_PAYMENT = 3;
const TYPE_REFUND = 4;
const TYPE_REVERSAL = 5;
const TYPE_FEE = 6;
const TYPE_TOPUP = 7;
const TYPE_CASHOUT = 8;
Update a transaction
This call is for updating a transaction in pending state in preparation for during the capture process.
Endpoint
POST /v1/transaction/update
Request Body Parameters
| Parameter | Type | required | Description |
|---|---|---|---|
| payerAccountId | Number | false | The payment method account ID |
| collectedCouponId | Number | false | the coupon ID (for merchant payments) |
| tipAmount | Number | false | the tip amount in transaction currency. Applicable only to merchant transactions |
| giftCardId | Number | false | Apply the gift card ID if applicable . The gift card amount will be automatically calculated based on available balance |
Response
The response is a standard TRANSACTION response payload. See the transaction response section
See Transaction VIEW page
Capture a transaction
Capturing is the process of authorizing/confirming a transaction.
Endpoint
POST /v1/transaction/capture
Request Body Parameters
| Parameter | Type | required | Description |
|---|---|---|---|
| payerAccountId | Number | false | The payment method account ID (Set if the payer uses a diff PM) |
| paymentPin | Number | true | the user's 6-digit payment PIN used for authorizing transactions |
Response
Response is standard Transaction payload response.
View transaction
Views transaction details. The details of a transaction will vary slightly depending on :
- Whether the current user is the payer or beneficiary.
- Whether the transaction is PENDING or in TERMINAL (completed/refunded/failed) state .
GET /v1/transaction/view?id=_TRANSACTION_ID
Request Body Parameters
| Parameter | Type | required | Description |
|---|---|---|---|
| _id | String | true | The transaction ID |
Response
Response is standard Transaction payload response. The payload for PAYER and BENEFICIARY are slightly different. the resulting payload will be generated based on the current user
PAYER's payload for transaction in PENDING State
{
"data": {
"_id": "MP220420OLT1VMFESEMA",
"amount": 1000,
"beneAccount": {
"name": "w6shp1cry97x",
"currencyCode": "XAF",
"_id": "MSAZ0I6E0JALVIPEYBSI"
},
"beneUser": {
"_id": "tz22",
"displayName": "tz22",
"beneficiaryAccountNumber": "tz22",
"isVerified": 0,
"avatarUrl": "https://staging-api.tranzak.me/fapi/static/img/logos/tz-logo-btn-black.png",
"note": "this is a nice note",
"netAmount": 1000,
"currencyCode": "XAF",
"amount": 1000,
"fee": 0
},
"completedAt": null,
"createdAt": "2022-04-20 15:54:53.341854",
"currencyCode": "XAF",
"currentUser": {
"_id": "tz22",
"ufId": null,
"displayName": "tz22",
"verifiedName": null,
"avatarUrl": null,
"orgUserId": "tz22"
},
"description": "Payment to tz22",
"disablePayerAccountSelection": null,
"isInitiatedByPayer": 1,
"itemDetails": "",
"mchTransactionRef": null,
"payerAccount": {
"_id": "ACYXG5PYRK3UZ2XW5PZW",
"name": "Primary balance",
"description": "",
"balance": 99999970,
"currencyCode": "XAF",
"isExternal": false
},
"payerOrgUser": {
"_id": "tz22",
"displayName": "tz22",
"avatarUrl": null,
"currencyCode": "XAF",
"amount": 1000,
"fee": 0,
"bonusAmount": 0,
"netAmount": 1000,
"isVerified": 0
},
"paymentMethods": [
{
"_id": "ACYXG5PYRK3UZ2XW5PZW",
"balance": 99999970,
"providerName": "Tranzak",
"partnerAccountHolderId": "",
"partnerAccountHolderName": "",
"avatarUrl": "https://staging-api.tranzak.me/fapi/static/img/logos/tz-logo.png",
"name": "Primary account balance",
"ussdCode": null
},
{
"_id": "PMKF8S8YPL4DG12RCGKU",
"balance": null,
"providerName": "MTN Momo",
"partnerAccountHolderId": "237675589201",
"partnerAccountHolderName": null,
"avatarUrl": "/static/img/partners/mtn.png",
"name": "MTN Momo | 237675589201",
"ussdCode": "*126#"
},
{
"_id": "PMED9H63ZA9DR0FAF3J5",
"balance": null,
"providerName": "Orange Money",
"partnerAccountHolderId": "237612950679",
"partnerAccountHolderName": null,
"avatarUrl": "/static/img/partners/orange.png",
"name": "Orange Money | 237612950679",
"ussdCode": "#150#"
},
{
"_id": "PMBB5DKOPNJX578Q5M9B",
"balance": null,
"providerName": "MTN Momo",
"partnerAccountHolderId": "237674728670",
"partnerAccountHolderName": "Dan Momo Ntui",
"avatarUrl": "/static/img/partners/mtn.png",
"name": "MTN Momo | 237674728670",
"ussdCode": "*126#"
},
{
"_id": "MSAW9KFE5IRA16E05T2L",
"balance": 20,
"providerName": "Tranzak merchant account",
"partnerAccountHolderId": "MSAW9KFE5IRA16E05T2L",
"partnerAccountHolderName": " 1",
"avatarUrl": "https://staging-api.tranzak.me/fapi/static/img/logos/tz-logo.png",
"name": " 1",
"ussdCode": "*126#"
}
],
"requirePinForTransaction": 1,
"returnUrl": "",
"status": 10,
"statusText": "pending",
"type": 3,
"typeText": "merchant payment"
},
"success": true,
"debugInfo": null,
"debug": {
"lang": "en-US",
"dateTime": "2022-04-20T15:54:53+00:00",
"hostname": "cortex01",
"serverIpAddress": "192.168.137.2",
"clientIpAddress": "192.168.137.1",
"duration": "0.121s",
"userId": 22,
"_userId": "tz22",
"scopeId": null,
"type": 3,
"orgUserId": 22,
"roleId": 1000,
"roleLabel": "owner",
"firstName": null,
"displayName": "tz22"
}
}
Payer's payload For transaction in TERMINAL (completed) state
{
"data": {
"_id": "MP220120POU1NRP84W0O",
"amount": 1000,
"bene": {
"displayName": "tz12",
"beneficiaryAccountId": "tz12",
"isVerified": 0,
"avatarUrl": null,
"note": null,
"netAmount": 900
},
"completedAt": "2022-01-20 01:39:29.664083",
"createdAt": "2022-01-20 00:16:51.808261",
"currencyCode": "XAF",
"currentUser": {
"_id": "syswkz2y65ugrmto",
"displayName": "tz13",
"countryCode": "CM",
"verifiedName": null,
"avatarUrl": null,
"primaryCurrencyCode": "XAF"
},
"description": "Payment to tz12",
"disablePayerAccountSelection": null,
"isInitiatiatedByPayer": true,
"itemDetails": null,
"mchTransactionRef": null,
"membership": {
"planId": "MEMSHOSURRCOVX58",
"_id": "CMDIJ6S3QAGO84Y6",
"name": "VIP membership",
"description": "buy at half price!",
"avatarUrl": "https://avatar.com/image.png",
"payerAmount": 100,
"payerCurrencyCode": "XAF",
"beneAmount": 100,
"beneCurrencyCode": "XAF"
},
"merchantCouponAmount": 0,
"payer": {
"displayName": "tz13",
"avatarUrl": null,
"currencyCode": "XAF",
"amount": 1000,
"fee": 0,
"bonusAmount": 0,
"merchantDiscountAmount": 0,
"giftCardAmount": 0,
"membershipAmount": 100,
"netAmount": 900,
"isVerified": 0,
"account": {
"_id": "ACWO7CG5KTSLE7FPL1Z8",
"name": "Primary balance",
"description": "",
"balance": 99999999100,
"currencyCode": "XAF",
"isExternal": false,
"openingBalance": 100000000000,
"closingBalance": 99999999100
}
},
"requirePinForTransaction": 1,
"returnUrl": null,
"status": 2,
"statusText": "completed",
"tipAmount": 0,
"type": 3,
"typeText": "merchant payment"
},
"success": true,
"dateTime": "2022-01-20T11:10:10+00:00",
"duration": "0.061s",
"lang": "en-US",
"userId": 13,
"orgUserId": 13,
"roleId": 1000,
"roleLabel": "super admin/owner",
"hostname": "cortex01",
"serverIpAddress": "192.168.137.2"
}
BENEFICIARY Payload in TERMINAL state
{
"data": {
"_id": "MP220120POU1NRP84W0O",
"amount": 1000,
"bene": {
"displayName": "Merchant account (Default)",
"beneficiaryAccountId": "tz12",
"isVerified": 0,
"avatarUrl": "http://staging-api.tranzak.me/fapi/static/img/logos/tz-logo-btn-black.png",
"note": null,
"netAmount": 900,
"currencyCode": "XAF",
"amount": 1000,
"fee": 0,
"giftCardDiscountAmount": 0,
"membershipDiscountAmount": 100,
"account": {
"name": "Merchant account (Default)",
"currencyCode": "XAF",
"_id": "MSAEDQL3H3UBK40L5H23",
"openingBalance": 0,
"closingBalance": 900
}
},
"completedAt": "2022-01-20 01:39:29.664083",
"createdAt": "2022-01-20 00:16:51.808261",
"currencyCode": "XAF",
"currentUser": {
"_id": "sysk4ml12hm856e9",
"displayName": "tz12",
"countryCode": "CM",
"verifiedName": null,
"avatarUrl": null,
"primaryCurrencyCode": "XAF"
},
"description": "Payment to tz12",
"disablePayerAccountSelection": null,
"isInitiatiatedByPayer": true,
"itemDetails": null,
"mchTransactionRef": null,
"membership": {
"planId": "MEMSHOSURRCOVX58",
"_id": "CMDIJ6S3QAGO84Y6",
"name": "VIP membership",
"description": "buy at half price!",
"avatarUrl": "https://avatar.com/image.png",
"payerAmount": 100,
"payerCurrencyCode": "XAF",
"beneAmount": 100,
"beneCurrencyCode": "XAF"
},
"merchantCouponAmount": 0,
"payer": {
"displayName": "tz13",
"avatarUrl": null
},
"requirePinForTransaction": 1,
"returnUrl": null,
"status": 2,
"statusText": "completed",
"tipAmount": 0,
"type": 3,
"typeText": "merchant payment"
},
"success": true,
"dateTime": "2022-01-20T11:10:35+00:00",
"duration": "0.055s",
"lang": "en-US",
"userId": 12,
"orgUserId": 12,
"roleId": 1000,
"roleLabel": "super admin/owner",
"hostname": "cortex01",
"serverIpAddress": "192.168.137.2"
}
Poll Transaction
Polls the transaction to obtain the status. Useful for payments that use external funding sources.
Endpoint
GET /v1/transaction/poll?_id=TXN_ID
Response
{
"status": 1,
"statusText": "pending"
}
Refresh Inbound External Payment Status
For payments using external payment methods. If the payment too long without status update, the payer may be asked to "refresh" the status of the payment to obtain the latest status from the service provider. The delay may be caused by payment not being sent/received or provider internal issues.
Request Endpoint
GET /transaction/refresh-inbound-payment-status
{
"_id" : "MP2202070XD9JIW6FBZS"
}
Response
Success/failure message
"data": {
"message": "success"
},
List transaction history
Displays Transaction history
Endpoint
POST /v1/transaction/list
Search Filter params
| Parameter | Type | required | Description |
|---|---|---|---|
| _id | string | false | transaction ID |
| accountId | string | false | Any account ID (could be payer or benef) |
| startDateTime | Date | false | start date time |
| endDateTime | Date | false | end date time |
| payerAccountId | Number | false | payer's (source) account ID |
| beneAccountId | Number | false | beneficiary's (destination) account ID |
| payerUserId | String | false | payer UserId |
| beneUserId | String | false | beneficiary's user ID |
| payerOrgUserId | String | false | payer's org User ID |
| customerId | String | false | Transactions involving this customer (for merchants) |
| payerUserId | String | false | Filter by SID of the authorizing user |
| beneIdToken | String | false | the beneficiary token (e.g mobile number, bank account number) e.g 237683160662 |
| description | String | false | transaction narration |
Response
{
"data": {
"currentPage": 1,
"hasMore": false,
"list": [
{
"_id": "MP220120HZ8YSECOBMV0",
"currencyCode": "USD",
"amount": 100,
"status": "2",
"statusText": "completed",
"type": "3",
"typeText": "merchant payment",
"serviceType": "1",
"serviceTypeText": "payment",
"description": "backdoor | demo data",
"completedAt": "2022-01-20 13:24:29.978583",
"isInitiatiatedByPayer": "1",
"couponAmount": 0,
"tipAmount": 0,
"payerOrgUser": {
"merchantDiscountAmount": 0,
"currencyCode": "XAF",
"amount": 56461,
"fee": 0,
"bonusAmount": 0,
"giftCardAmount": 0,
"netAmount": 56461,
"_id": "sysmk14qw1xwj5ys",
"displayName": " ",
"isVerified": "0",
"avatarUrl": null
},
"payerAccount": {
"_id": "ACJRIPS25TL7290AR7XX",
"currencyCode": "XAF",
"avatarUrl": "http://staging-api.tranzak.me/fapi/static/img/logos/tz-logo-btn.png",
"name": "Primary account",
"description": "",
"type": "1",
"typeText": "Primary account"
},
"beneUser": {
"currencyCode": "XAF",
"amount": 56461,
"fee": 0,
"netAmount": 56461,
"_id": "sysk4ml12hm856e9",
"displayName": "tz12",
"isVerified": "0",
"avatarUrl": null
},
"beneAccount": {
"_id": "MSAAQNHR8OVSDGAKVPJ6",
"currencyCode": "XAF",
"avatarUrl": "http://staging-api.tranzak.me/fapi/static/img/logos/tz-logo-btn-black.png",
"name": "m3",
"description": "Party scatter m3",
"type": "6",
"typeText": "Merchant account"
},
"service": {
"type": "1",
"typeText": "payment"
}
},
],
"pageCount": [
1,
50
],
"pageSize": 10,
"totalItems": 10
},
"success": true,
"dateTime": "2022-01-18T21:50:49+00:00",
"duration": "0.077s",
"lang": "en-US",
"userId": 34,
"orgUserId": 33,
"roleId": 1000,
"roleLabel": "super admin/owner",
"hostname": "cortex01",
"serverIpAddress": "192.168.137.2"
}
List SALES
Sales or sale transactions are a type of inbound transactions where :
- The current user is a merchant and the beneficiary ; And
- The receiving account type = merchant (sub)account
Request Endpoint
GET /v1/transaction/sales
Filter params
All filters applicable to transactions may be applied to sales. The following are extra filters supported by sales:
| Parameter | Type | required | Description |
|---|---|---|---|
| mchTransactionRef | String | false | merchant custom transaction ref |
| giftCardPackId | String | false | gift card pack ID |
| couponId | String | false | coupon ID |
| withTip | String | false | whether to filter by transactions with tips |
| membershipPlanId | String | false | membership plan ID |
Response
List of sale transactions The response payload is same as in transaction plus a few extra attributes
{
"data": {
"currentPage": 1,
"hasMore": false,
"list": [
{
"giftCard": {
"_id": "GPYZXQ2IZNF3JW83",
"name": "Save on purchasesSave on purchasesSave on! 100F off!",
"description": "Big things popping. Small things stopping it.",
"avatarUrl": null,
"valueAmount": "10000",
"currencyCode": "XAF",
"payerAmount": 100,
"payerCurrencyCode": "XAF",
"beneAmount": 100,
"beneCurrencyCode": "XAF",
},
"coupon": {
"_id": "CPMRLNVKR065WXB8",
"name": "Save on purchasesSave on purchasesSave on! 100F off!",
"description": "Big things popping. Small things stopping it.",
"amountOff": "100",
"currencyCode": "XAF",
"percentageOff": null,
"code": "VF48JK"
},
"membership": {
"_id": "CMA90I7XG7BQPXOV",
"planId": "MEMSHOSURRCOVX58",
"name": "VIP membership",
"description": "buy at half price!",
"payerAmount": 100,
"payerCurrencyCode": "XAF",
"beneAmount": 100,
"beneCurrencyCode": "XAF",
"avatarUrl": "https://avatar.com/image.png"
}
},
],
"pageCount": [
1,
50
],
"pageSize": 10,
"totalItems": 10
},
"success": true,
"dateTime": "2022-01-18T21:50:49+00:00",
"duration": "0.077s",
"lang": "en-US",
"userId": 34,
"orgUserId": 33,
"roleId": 1000,
"roleLabel": "super admin/owner",
"hostname": "cortex01",
"serverIpAddress": "192.168.137.2"
}
List OUTbound transactions
Outbound transactions are transactions where the current user is the payer .
GET /v1/transaction/outbound
Filter params
See list transactions
Response
Same as list transactions response
List INbound transactions
Outbound transactions are transactions where the current user is the payer
GET /v1/transaction/inbound
Filter params
See list transactions
Response
Same as list transactions response
View Inbound External Transactions
Inbound External transactions are transaction funded by external payment methods (e.g MWP) ; If an ext payment method is used to fund a transaction, then while waiting for the ext payment to finalize, then status of the ext payment can be tracked by calling this interface
Request body
GET /v1/transaction/view-inbound-ext-payment?_id=IBXXXX
Response
The transaction payload is returned with inboundExternalPayment data Sample transaction showing inbound payment data. The status of the inbound extPay can be tracked using this interface.
{
"data": {
"_id": "PP20211110G41L6O6866",
"amount": 1694,
"bene": {
"displayName": "MTN Momo | 655237546",
"isVerified": 0,
"avatarUrl": "http://rest.tranzak.me/static/img/partners/mtn.png",
"currencyCode": "XAF",
"amount": 1694,
"fee": 0,
"netAmount": 1694,
"account": {
"name": "MTN Momo | 655237546",
"currencyCode": "XAF"
}
},
"completedAt": "2021-11-10 18:26:45.801312",
"createdAt": "2021-11-10 17:26:43.641522",
"currencyCode": "XAF",
"currentUser": {
"_id": "sysn887xszvk8coz",
"displayName": "tz87",
"countryCode": "CM",
"verifiedName": null,
"avatarUrl": null
},
"description": "Payment to tz87",
"inboundExternalPayment": {
"_id": "IB20211110URNT2O",
"serviceProviderShortName": "MTN Momo",
"serviceProviderName": "MTN Momo",
"serviceProviderCountryCode": "CM",
"partnerAccountHolderId": "655237546",
"partnerAccountHolderName": null,
"avatarUrl": "/static/img/partners/mtn.png",
"providerType": "telecom wallet",
"status": 2,
"statusText": "completed"
},
"payer": {
"displayName": "Tranzak System Account | Cameroon",
"avatarUrl": null
},
"status": 2,
"statusText": "completed",
"type": 1,
"typeText": "transfer"
},
"success": true,
"dateTime": "2021-11-10T17:33:00+00:00",
"duration": "0.052s",
"lang": "en-US",
"userId": 87,
"orgUserId": 87,
"roleId": 1000,
"roleLabel": "owner",
"hostname": "cortex01",
"serverIpAddress": "192.168.137.2"
}
Cancel Inbound External Payment
Cancels an ongoing inbound ext payment . Upon cancelling the inbound ext payment, the user should be redirected to the payment authorization page
Request body
POST /v1/transaction/cancel-inbound-ext-payment
{
"_id" : "IB20211110Z2SVGY"
}
Response
The transaction payload is returned with inboundExternalPayment data. The status of the inboundExtPayment to confirm
{
"data": {
"_id": "PP20211110890QCQW90N",
"amount": 1694,
"bene": {
"displayName": "MTN Momo | 655237546",
"isVerified": 0,
"avatarUrl": "http://rest.tranzak.me/static/img/partners/mtn.png",
"currencyCode": "XAF",
"amount": 1694,
"fee": 0,
"netAmount": 1694,
"account": {
"name": "MTN Momo | 655237546",
"currencyCode": "XAF"
}
},
"completedAt": null,
"createdAt": "2021-11-10 17:46:14.051510",
"currencyCode": "XAF",
"currentUser": {
"_id": "sysn887xszvk8coz",
"displayName": "tz87",
"countryCode": "CM",
"verifiedName": null,
"avatarUrl": null
},
"description": "Payment to tz87",
"inboundExternalPayment": {
"_id": "IB20211110MM1VOB",
"serviceProviderShortName": "MTN Momo",
"serviceProviderName": "MTN Momo",
"serviceProviderCountryCode": "CM",
"partnerAccountHolderId": "655237546",
"partnerAccountHolderName": null,
"avatarUrl": "/static/img/partners/mtn.png",
"providerType": "telecom wallet",
"status": 5,
"statusText": "cancelled"
},
"payer": {
"displayName": "Tranzak System Account | Cameroon",
"avatarUrl": null
},
"paymentMethods": [],
"status": 1,
"statusText": "pending",
"type": 1,
"typeText": "transfer"
},
"success": true,
"dateTime": "2021-11-10T17:46:26+00:00",
"duration": "0.057s",
"lang": "en-US",
"userId": 87,
"orgUserId": 87,
"roleId": 1000,
"roleLabel": "owner",
"hostname": "cortex01",
"serverIpAddress": "192.168.137.2"
}
User Management
Manage/view user-related settings
View user info
GET /v1/user/info
Request Body Parameters
NA
Response
(to be filtered) The user info
{
"data": {
"_id": "845f5c7c0a7249c69e689054e1634b15",
"avatarUrl": "null",
"countryCode": "CM",
"displayName": null,
"firstName": null,
"hasSetPaymentPin": false,
"lastName": null,
"merchant": {
"_id": "845f5c7c0a7249c69e689054e1634b15",
"displayName": null,
"countryCode": "CM",
"verifiedName": null,
"avatarUrl": "null",
"primaryCurrencyCode": "XAF",
"type": 2,
"typeText": "business account",
"firstName": null,
"lastName": null
},
"merchantid": 4,
"orgUserId": "845f5c7c0a7249c69e689054e1634b15",
"primaryCurrencyCode": "XAF",
"roleId": 1000,
"roleName": "owner",
"type": 2,
"typeText": "business account",
"verifiedName": null
},
"success": true,
"debugInfo": null,
"debug": {
"lang": "en-US",
"dateTime": "2022-04-14T09:22:26+00:00",
"hostname": "cortex01",
"serverIpAddress": "192.168.137.2",
"clientIpAddress": "192.168.137.1",
"duration": "0.035s",
"userId": 25,
"_userId": "845f5c7c0a7249c69e689054e1634b15",
"scopeId": "stebnuufw93vrs",
"type": 2,
"orgUserId": 25,
"roleId": 1000,
"roleLabel": "owner",
"firstName": null,
"displayName": null,
"testSpecialCharacters": "Crédit"
}
}
Set Payment PIN
Sets a payment PIN for particular user
POST /v1/user/set-pin
Request Body Parameters
| Parameter | Type | required | Description |
|---|---|---|---|
| pin | Number(6) | true | 6-digit payment PIN |
| pinConfirm | Number(6) | false | 6-digit payment PIN (confirmation) |
{
"pin" : "123456" ,
"pinConfirm" : "123456"
}
Response
Success/failure response
{
"data": [],
"success": true,
"dateTime": "2021-11-10T16:56:23+00:00",
"duration": "0.061s",
"lang": "en-US",
"userId": 87,
"orgUserId": 87,
"roleId": 1000,
"roleLabel": "owner",
"hostname": "cortex01",
"serverIpAddress": "192.168.137.2"
}
Reset Payment PIN
Reset the current PIN
POST /v1/user/reset-pin
Request Body Parameters
| Parameter | Type | required | Description |
|---|---|---|---|
| currentPin | Number(6) | true | 6-digit payment PIN |
| pin | Number(6) | true | 6-digit payment PIN |
| pinConfirm | Number(6) | false | 6-digit payment PIN (confirmation) |
{
"currentPin" : "123456" ,
"pin" : "123456" ,
"pinConfirm" : "123456"
}
Response
Success/failure response
{
"data": [],
"success": true,
"dateTime": "2021-11-10T16:56:23+00:00",
"duration": "0.061s",
"lang": "en-US",
"userId": 87,
"orgUserId": 87,
"roleId": 1000,
"roleLabel": "owner",
"hostname": "cortex01",
"serverIpAddress": "192.168.137.2"
}
Get User Balance Summary
Retrieves the backend total balance for user. The balance = Primary account + total balance on all merchant sub-accounts (if applicable)
Request
GET /user/balance
Response
{
"data": {
"currencyCode": "XAF",
"primaryAccountBalance": 99992885914,
"totalBalance": 100450220014,
"totalMerchantAccountBalance": "457334100"
},
"success": true,
"dateTime": "2022-02-09T19:09:47+00:00",
"duration": "0.063s",
"lang": "en-US",
"userId": 34,
"orgUserId": 33,
"roleId": 1000,
"roleLabel": "owner",
"hostname": "cortex01",
"serverIpAddress": "192.168.137.2"
}
Generate In-Person Authorization Code
This endpoint generates the authorization code for a payer that intends to make an in-person (QR) payment.
Endpoint
POST /fapi/user/gen-in-person-auth-code
Request Params
| Parameter | Type | required | Description |
|---|---|---|---|
| paymentMethodId | string | false | Optional. The payment method ID that will be used to make payment. |
Response
{
"data": {
"authCode": "tzx34kqn5kft3599j636bd6",
"expires": "2022-08-05 05:10:55",
"paymentMethodId": "ACXECXC9M4V5Y4PK1MCU"
},
"success": true,
}
X-Pay / Transfer
Movement of funds from one account to another.
Transfer to an account
Make an arbitrary transfer to an account. Account is arbitrary and shall include all types : e.g PaymentMethods , merchant subaccounts, virtual accounts, primary accounts ...etc
POST /v1/xpay/to-account
Request Body Parameters
| Parameter | Type | required | Description |
|---|---|---|---|
| amount | Number | true | the amount to be transferred/paid |
| currencyCode | String (3) | false | the 3-letter currency code. Defaults to the payer's own currency code e.g XAF, USD, CNY , EUR |
| beneAccountId | String | true | the Tranzak account ID of the receiver e.g user account , Fundraiser accountId , etc .. eg: ACVFF9Z3MTI0SKLZ2Z2A |
| payerAccountId | String | false | the Tranzak account ID of the PAYER (could be tranzak wallet, or external payment method, ) eg: PMOWOGHC17NJR0YXCAT4 |
| note | String | false | The narration (to be shown to beneficiary) |
| requestRecurringPayment | int | false | Enable recurring payment flag (if supported) |
{
"amount": 1000,
"currencyCode" : "XAF" ,
"beneAccountId" : "ACVFF9Z3MTI0SKLZ2Z2A",
"payerAccountId" : "PMOWOGHC17NJR0YXCAT4",
"note" : "this is a nice note",
"requestRecurringPayment" : 1
}
Response
The response is a standard TRANSACTION response payload. See Transaction
Transfer to a User
Make a transfer to a Tranzak user.
Endpoint
POST /v1/xpay/to-user
Request Params
| Parameter | Type | required | Description |
|---|---|---|---|
| amount | Number | true | the amount to be transferred/paid |
| currencyCode | String (3) | false | the 3-letter currency code. Defaults to the payer's own currency code e.g XAF, USD, CNY , EUR |
| beneUserId | String | true | the user friendly ID eg: tzabc123333 . |
| note | String (200) | false | narration |
Request body
{
"amount": 100,
"currencyCode" : "XAF" ,
"beneUserId" : "stebnuufw93vrs" ,
"note" : "Thanks for all" ,
"requestRecurringPayment" : 1
}
Transfer to APP
Make a transfer to a merchant using an appId
Endpoint
POST /v1/xpay/to-app
Request Params
| Parameter | Type | required | Description |
|---|---|---|---|
| amount | Number | true | the amount to be transferred/paid |
| currencyCode | String (3) | false | the 3-letter currency code. Defaults to the payer's own currency code e.g XAF, USD, CNY , EUR |
| appId | String | true | the app ID (as provided from user center) |
| note | String (200) | false | narration |
| notifyUrl | String (200) | false | notification URL |
Request body
{
"amount": 100,
"currencyCode" : "XAF" ,
"beneUserId" : "stebnuufw93vrs" ,
"note" : "Thanks for all" ,
"requestRecurringPayment" : 1
}
Response
The response is a transaction payload. See the transaction [[VIEW]] page for sample. After receiving the response, the user should be presented with the payment authorization page
Transfer to Mobile Wallet
To telco MW operators (e.g. Momo , Orange Money)
Endpoint
POST /v1/xpay/to-mobile-wallet
| Parameter | Type | required | Description |
|---|---|---|---|
| amount | Number | true | the amount to be transferred/paid |
| currencyCode | String (3) | false | the 3-letter currency code. Defaults to the payer's own currency code e.g XAF, USD, CNY , EUR |
| beneficiaryAccountNumber | String | true | the MW number eg: 2376xxxxxxx . The number must be prefixed with the country dial code |
| payerAccountId | String | false | the Tranzak account ID of the PAYER (could be tranzak wallet, or external payment method) |
| note | String (200) | false | narration |
{
"amount": 100,
"beneficiaryAccountNumber" : "237674728670" ,
"payerAccountId" : "PMOWOGHC17NJR0YXCAT4",
"note" : "Cheers"
}
Response
The response is a transaction payload. See the transaction [[VIEW]] page for sample. After receiving the response, the user should be presented with the payment authorization page
Transfer to Mobile Wallet with instant CAPTURE
Transfer to mobile wallet with instant CAPTURE, i.e. no need to issue separate call to /transaction/capture interface . Instant capture would work if payerAccountId is an external/linked payment method
Endpoint
POST /v1/xpay/to-mobile-wallet-capture
Request Body
{
"amount": 1,
"beneficiaryAccountNumber" : "237674728670" ,
"payerAccountId" : "PMOWOGHC17NJR0YXCAT4" ,
"note" : "Cheers"
}
Transfer FROM an account
Launch a transfer from an account to another. Usually from a merchant or virtual account into another
POST /v1/xpay/between-accounts
Request Body Parameters
| Parameter | Type | required | Description |
|---|---|---|---|
| amount | Number | true | the amount to be transferred/paid |
| currencyCode | String (3) | false | the 3-letter currency code. Defaults to the payer's own currency code e.g XAF, USD, CNY , EUR |
| beneAccountId | String | true | the Tranzak account ID of the receiver eg: 12345465 |
| payerAccountId | String | true | The internal destination account |
{
"amount": "1000",
"beneAccountId": "MSAGX8J27RB2LM0214PF",
"payerAccountId": "MSA5LKKPMI4470BSIFVY"
}
Response
The response is a standard TRANSACTION response payload. See Transaction
Transfer to a customerId
Transfer to a customerId
POST /v1/xpay/to-customer
Request Body Parameters
| Parameter | Type | required | Description |
|---|---|---|---|
| amount | Number | true | the amount to be transferred/paid |
| currencyCode | String | false | the 3-letter currency code. Defaults to the payer's own currency code e.g XAF, USD, CNY , EUR |
| customerId | String | true | the customer ID |
| description | String | false | description |
{
"amount": 10000,
"customerId" : "CUS34MWFKF8548MQ",
"outboundAccountId" : "666666666666666666" ,
"outboundAccountName" : "Dannnnnnnn"
}
Response
The response is a standard TRANSACTION response payload. See Transaction
Transfer Bank Account
Transfer to a bank debit account
POST /v1/xpay/to-bank-account
Request Body Parameters
| Parameter | Type | required | Description |
|---|---|---|---|
| amount | Number | true | the amount to be transferred/paid |
| currencyCode | String | false | the 3-letter currency code. Defaults to the payer's own currency code e.g XAF, USD, CNY , EUR |
| treasuryServiceId | String | true | the provider ID taken from /list?type=TYPE_BANK_DEBIT ( TYPE_BANK_CREDIT = 1; TYPE_BANK_DEBIT = 2; TYPE_BANK_PREPAID = 3; TYPE_TELCO_WALLET = 4; TYPE_OTHER_WALLET = 5; ) |
| beneficiaryAccountNumber | String | true | bank account number |
| beneficiaryAccountName | String | true | bank account name |
| beneficiaryBranchCode | String | true | bank branch code |
| beneficiaryRibCode | String | true | the RIB code |
| payerAccountId | String | false | Optional, the payment method |
| note | String | false | Optional, the narration (for the beneficiary) |
{
"amount": 1000,
"treasuryServiceId" : 6,
"beneficiaryAccountNumber" : "07766373737373",
"beneficiaryAccountName" : "Dan UBA",
"beneficiaryBranchCode" : "1222",
"beneficiaryRibCode" : "22",
"payerAccountId" : "ACIFBPZ7ZX69HEZ5UQD8" ,
"note" : "beneficiary note"
}
Response
The response is a standard TRANSACTION response payload. See Transaction
Transfer Bank Account
Transfer to a bank debit account
POST /v1/xpay//to-prepaid-card
Request Body Parameters
| Parameter | Type | required | Description |
|---|---|---|---|
| amount | Number | true | the amount to be transferred/paid |
| currencyCode | String | false | the 3-letter currency code. Defaults to the payer's own currency code e.g XAF, USD, CNY , EUR |
| treasuryServiceId | String | true | the provider ID taken from /list?type=TYPE_BANK_PREPAID ( TYPE_BANK_CREDIT = 1; TYPE_BANK_DEBIT = 2; TYPE_BANK_PREPAID = 3; TYPE_TELCO_WALLET = 4; TYPE_OTHER_WALLET = 5; ) |
| beneficiaryAccountName | String | true | Name of account holder |
| beneficiaryPrepaidFirst6Digits | String | true | First 6-digits of the prepaid card |
| beneficiaryPrepaidLast4Digits | String | true | Last 4-digits of prepaid cards |
| beneficiaryPrepaidCustomerId | String | true | Customer ID of the card (located on the backside) |
| payerAccountId | String | false | Optional, the payment method |
| note | String | false | Optional, the narration (for the beneficiary) |
{
"amount": 1000,
"treasuryServiceId" : 5,
"beneficiaryAccountName" : "Dan Prepaid monster" ,
"beneficiaryPrepaidFirst6Digits" : "123456",
"beneficiaryPrepaidLast4Digits" : "4321",
"beneficiaryPrepaidCustomerId" : "1222",
"payerAccountId" : "ACIFBPZ7ZX69HEZ5UQD8" ,
"note" : "beneficiary note"
}
Response
The response is a standard TRANSACTION response payload. See Transaction
List Operators
Lists external operators (e.g banks, MWPs) that support transfers
Endpoint
GET /v1/xpay/list-operators
Request
| Parameter | Type | required | Description |
|---|---|---|---|
| typeId | Number | false | the type ID e.g. TYPE_BANK_CREDIT = 1; TYPE_BANK_DEBIT = 2; TYPE_BANK_PREPAID = 3; TYPE_TELCO_WALLET = 4; TYPE_OTHER_WALLET = 5; |
| name | String | false | the provider name. |
| id | String | false | Provider ID |
| bankCode | String | false | bank code |
{
"data": {
"list": [
{
"id": "5",
"accountId": "AC7OWWKOP5BFT0V6I4U4",
"shortName": "Afriland First Bank (Cameroon)",
"name": "Afriland First Bank (Cameroon)",
"description": "CM | Afriland First Bank (Cameroon)",
"bankCode": "10005",
"type": "2",
"typeText": "debit card",
"avatarUrl": "https://staging-api.tranzak.me/static/img/partners/afriland.png",
"cardAvatarUrl": "https://staging-api.tranzak.me/static/img/partners/cards/",
"isPaymentMethod": "1"
},
{
"id": "18",
"accountId": "ACO461DJNTZ88KD6FEBI",
"shortName": "Banque Atlantique - Cameroun",
"name": "Banque Atlantique - Cameroun",
"description": "CM | Banque Atlantique - Cameroun",
"bankCode": "10034",
"type": "2",
"typeText": "debit card",
"avatarUrl": "https://staging-api.tranzak.me/static/img/partners/atlantique.png",
"cardAvatarUrl": "https://staging-api.tranzak.me/static/img/partners/cards/",
"isPaymentMethod": "1"
},
{
"id": "7",
"accountId": "AC39UCXN9S43QVPECEP4",
"shortName": "BGFI Bank (Cameroon)",
"name": "BGFI Bank (Cameroon)",
"description": "CM | BGFI Bank (Cameroon)",
"bankCode": "10035",
"type": "2",
"typeText": "debit card",
"avatarUrl": "https://staging-api.tranzak.me/static/img/partners/bgfi.png",
"cardAvatarUrl": "https://staging-api.tranzak.me/static/img/partners/cards/",
"isPaymentMethod": "1"
},
{
"id": "6",
"accountId": "ACBCN07O3RY5FI95L5LE",
"shortName": "BICEC",
"name": "BICEC",
"description": "CM | BICEC",
"bankCode": "10001",
"type": "2",
"typeText": "debit card",
"avatarUrl": "https://staging-api.tranzak.me/static/img/partners/bicec.png",
"cardAvatarUrl": "https://staging-api.tranzak.me/static/img/partners/cards/",
"isPaymentMethod": "1"
},
{
"id": "10",
"accountId": "AC8H5D0XZU1I10C9C5OK",
"shortName": "CBC - Cameroon",
"name": "CBC - Cameroon",
"description": "CM | CBC - Cameroon",
"bankCode": "10008",
"type": "2",
"typeText": "debit card",
"avatarUrl": "https://staging-api.tranzak.me/static/img/partners/cbc.png",
"cardAvatarUrl": "https://staging-api.tranzak.me/static/img/partners/cards/",
"isPaymentMethod": "1"
},
{
"id": "9",
"accountId": "ACUKBIJXJ4NUPCJZGTH6",
"shortName": "CCA Bank - Cameroon",
"name": "CCA Bank - Cameroon",
"description": "CM | CCA Bank - Cameroon",
"bankCode": "99991",
"type": "2",
"typeText": "debit card",
"avatarUrl": "https://staging-api.tranzak.me/static/img/partners/cca.png",
"cardAvatarUrl": "https://staging-api.tranzak.me/static/img/partners/cards/",
"isPaymentMethod": "1"
},
{
"id": "15",
"accountId": "ACJDXA3R6HQPS4AZKZJ7",
"shortName": "Citi Bank - Cameroon",
"name": "Citi Bank - Cameroon",
"description": "CM | Citi Bank - Cameroon",
"bankCode": "10007",
"type": "2",
"typeText": "debit card",
"avatarUrl": "https://staging-api.tranzak.me/static/img/partners/citi.jpeg",
"cardAvatarUrl": "https://staging-api.tranzak.me/static/img/partners/cards/",
"isPaymentMethod": "1"
},
{
"id": "17",
"accountId": "AC6K63R32PG42GSGKZAU",
"shortName": "Crédit Foncier - Cameroon",
"name": "Crédit Foncier - Cameroon",
"description": "CM | Crédit Foncier - Cameroon",
"bankCode": "9995",
"type": "2",
"typeText": "debit card",
"avatarUrl": "https://staging-api.tranzak.me/static/img/partners/cfc.png",
"cardAvatarUrl": "https://staging-api.tranzak.me/static/img/partners/cards/",
"isPaymentMethod": "1"
},
{
"id": "11",
"accountId": "ACCRUEZI2TD859WJYXAC",
"shortName": "Ecobank Cameroon",
"name": "Ecobank Cameroon",
"description": "CM | Ecobank Cameroon",
"bankCode": "10029",
"type": "2",
"typeText": "debit card",
"avatarUrl": "https://staging-api.tranzak.me/static/img/partners/ecobank.png",
"cardAvatarUrl": "https://staging-api.tranzak.me/static/img/partners/cards/",
"isPaymentMethod": "1"
},
{
"id": "22",
"accountId": "ACS2XPTD2DPM9NRR2KG0",
"shortName": "Mastercard",
"name": "Mastercard",
"description": "CM | Mastercard",
"bankCode": null,
"type": "3",
"typeText": "prepaid card",
"avatarUrl": "https://staging-api.tranzak.me/static/img/partners/mastercard.png",
"cardAvatarUrl": "https://staging-api.tranzak.me/static/img/partners/cards/",
"isPaymentMethod": "1"
},
{
"id": "1",
"accountId": "ACROEQHXHLS0P3TZQFTV",
"shortName": "MTN Momo",
"name": "MTN Momo",
"description": "CM | MTN Momo",
"bankCode": null,
"type": "4",
"typeText": "telecom wallet",
"avatarUrl": "https://staging-api.tranzak.me/static/img/partners/mtn.png",
"cardAvatarUrl": "https://staging-api.tranzak.me/static/img/partners/cards/",
"isPaymentMethod": "1"
},
{
"id": "12",
"accountId": "ACXBHIRV579WKCZ0NOAJ",
"shortName": "NFC Bank - Cameroon",
"name": "NFC Bank - Cameroon",
"description": "CM | NFC Bank - Cameroon",
"bankCode": "99992",
"type": "2",
"typeText": "debit card",
"avatarUrl": "https://staging-api.tranzak.me/static/img/partners/nfc.jpg",
"cardAvatarUrl": "https://staging-api.tranzak.me/static/img/partners/cards/",
"isPaymentMethod": "1"
},
{
"id": "2",
"accountId": "ACJ6LWATRWUA5M99A6U8",
"shortName": "Orange Money",
"name": "Orange Money",
"description": "CM | Orange Money",
"bankCode": null,
"type": "4",
"typeText": "telecom wallet",
"avatarUrl": "https://staging-api.tranzak.me/static/img/partners/orange.png",
"cardAvatarUrl": "https://staging-api.tranzak.me/static/img/partners/cards/",
"isPaymentMethod": "1"
},
{
"id": "8",
"accountId": "ACUU25SHUX94W8ZMLFOF",
"shortName": "SCB - Cameroon",
"name": "SCB - Cameroon",
"description": "CM | SCB - Cameroon",
"bankCode": "10002",
"type": "2",
"typeText": "debit card",
"avatarUrl": "https://staging-api.tranzak.me/static/img/partners/scb.jpg",
"cardAvatarUrl": "https://staging-api.tranzak.me/static/img/partners/cards/",
"isPaymentMethod": "1"
},
{
"id": "13",
"accountId": "ACM5D751CY9JL8GL2RVI",
"shortName": "Societe Generale - Cameroon",
"name": "Societe Generale - Cameroon",
"description": "CM | Societe Generale - Cameroon",
"bankCode": "10003",
"type": "2",
"typeText": "debit card",
"avatarUrl": "https://staging-api.tranzak.me/static/img/partners/socgen.png",
"cardAvatarUrl": "https://staging-api.tranzak.me/static/img/partners/cards/",
"isPaymentMethod": "1"
},
{
"id": "16",
"accountId": "ACUURRUMUO62B78FV569",
"shortName": "Standard Chartered - Cameroon",
"name": "Standard Chartered - Cameroon",
"description": "CM | Standard Chartered - Cameroon",
"bankCode": "10004",
"type": "2",
"typeText": "debit card",
"avatarUrl": "https://staging-api.tranzak.me/static/img/partners/stanchart.png",
"cardAvatarUrl": "https://staging-api.tranzak.me/static/img/partners/cards/",
"isPaymentMethod": "1"
},
{
"id": "23",
"accountId": "ACSOB5XRE7QGG4K0Y82I",
"shortName": "Tranzak Virtual Bank",
"name": "Tranzak Inter-bank Transfer Services",
"description": "CM | Tranzak Inter-bank Transfer Services",
"bankCode": null,
"type": "2",
"typeText": "debit card",
"avatarUrl": "https://staging-api.tranzak.mehttps://staging-api.tranzak.me/static/img/logos/tz-logo.png",
"cardAvatarUrl": "https://staging-api.tranzak.me",
"isPaymentMethod": "1"
},
{
"id": "3",
"accountId": "ACL6II14VG8KHJMSPQ4G",
"shortName": "UBA Cameroon",
"name": "UBA Cameroon",
"description": "CM | UBA Cameroon",
"bankCode": "10033",
"type": "2",
"typeText": "debit card",
"avatarUrl": "https://staging-api.tranzak.me/static/img/partners/uba.png",
"cardAvatarUrl": "https://staging-api.tranzak.me/static/img/partners/cards/",
"isPaymentMethod": "1"
},
{
"id": "14",
"accountId": "ACRS6ELN34AB8JM5NG3X",
"shortName": "UBC - Cameroon",
"name": "UBC - Cameroon",
"description": "CM | UBC - Cameroon",
"bankCode": "99993",
"type": "2",
"typeText": "debit card",
"avatarUrl": "https://staging-api.tranzak.me/static/img/partners/ubc.jpg",
"cardAvatarUrl": "https://staging-api.tranzak.me/static/img/partners/cards/",
"isPaymentMethod": "1"
},
{
"id": "20",
"accountId": "ACV43E5W3WQHB8RFP6YZ",
"shortName": "Visa",
"name": "Visa",
"description": "CM | Visa",
"bankCode": null,
"type": "3",
"typeText": "prepaid card",
"avatarUrl": "https://staging-api.tranzak.me/static/img/partners/visa.png",
"cardAvatarUrl": "https://staging-api.tranzak.me/static/img/partners/cards/",
"isPaymentMethod": "1"
}
]
},
"success": true
}
miniApps
Base Url
https://staging-api.tranzak.me/aa038/ Staging https://api.tranzak.me/aa038/ Production
GET MP LIST BY ORG ID
https Request
GET /v1/org/list-by-orgId
Request Body Parameters
None
Header Parameters
| Parameter | Type | required | Description |
|---|---|---|---|
| Authorization | String | true | user' Bearer token, as sent from the front-end (eg: Bearer <userToken>) |
Response
| Parameter | Type | Description |
|---|---|---|
| list | [MP] | list of mini programs belong to the org Id |
{
"data": {
"list": [
{
"url": "https://staging-app.tranzak.me/tzmp/ff1ruzi3vz5o/emergence/",
"displayName": "Emergence",
"name": "Emergence Bilingual School",
"appPath": "emergence",
"appId": "ff1ruzi3vz5o",
"orgId": "p9m3rpjrnyxza9",
"logo": "https://staging-fms.tranzak.me/cdn/ia/pxl31xmasfdvy7d9_ntkavem7umjzjf107333.1900369719.jpg"
},
{
"url": "https://staging-app.tranzak.me/tzmp/i25ruoybb0owjz/camtel/",
"displayName": "Camtel",
"name": "Camtel",
"appPath": "camtel",
"appId": "i25ruoybb0owjz",
"orgId": "p9m3rpjrnyxza9",
"logo": "https://staging-fms.tranzak.me/cdn/ia/2msp7cyyl0usk6mh_x8pkwhwugwq693102978.038301376.png"
},
{
"url": "https://staging-app.tranzak.me/tzmp/2abnjls9no8pe6/nis-kitchen/",
"displayName": "Ni's Kitchen",
"name": "Ni's Kitchen",
"appPath": "nis-kitchen",
"appId": "2abnjls9no8pe6",
"orgId": "p9m3rpjrnyxza9",
"logo": "https://staging-fms.tranzak.me/cdn/ia/gqqlpqdyvqvx9cs8_x8pkwhwugwq693105289.34095781448.png"
},
{
"url": "https://staging-app.tranzak.me/tzmp/n7qyb51phi18r7/dsa/",
"displayName": "dsa",
"name": "dasdaadsads",
"appPath": "dsa",
"appId": "n7qyb51phi18r7",
"orgId": "p9m3rpjrnyxza9",
"logo": "https://staging-fms.tranzak.me/cdn/ia/ti305tyhjuw1tkoa_x8pkwhwugwq693108225.30012294921.png"
}
]
},
"errorMsg": "",
"errorCode": 0,
"success": true
}
Base Url
https://staging-api.tranzak.me/aa038/ Staging https://api.tranzak.me/aa038/ Production
GET Mini Programs Info(Detailed), used by the frond end apps
https Request
GET /v1/mps/details/:appId
Request Body Parameters
None
Response
{
"data": {
"tags": [
"modem",
"blue",
"optical fibre",
"4G",
"5G"
],
"categories": [
"Technology",
"Telecommunication"
],
"status": [
100
],
"enabledServices": [],
"countries": [
"cm"
],
"contactPhone": [],
"appLangs": [
"Francais",
"English"
],
"mode": 1,
"deleted": false,
"_id": "617a6633dfe63f0465be2a7c",
"logo": "https://fms.tranzak.me/cdn/ia/2msp7cyyl0usk6mh_x8pkwhwugwq693102978.038301376.png",
"backgroundImage": "https://fms.tranzak.me/cdn/ia/e8e4vq4b0y5davqz_x8pkwhwugwq693109535.96101458561.jpg",
"name": "Camtel",
"displayName": "Camtel",
"desc": "La Cameroon Telecommunications (CAMTEL) est une entreprise publique détenue à 100% par l’État camerounais. Créée en 1998, Camtel est fortement impliquée dans le développement et la modernisation des télécommunications au Cameroun. L’entreprise doit garantir une excellente qualité de l’infrastructure nationale dans un secteur fortement concurrentiel.\nPour cela, Camtel propose des technologies performantes qui garantissent la disponibilité et la maitrise des solutions globales de télécommunications :\n• Connexion au câble sous-marin Sat3 ;\n• Construction et exploitation du réseau national de transmission en fibres optiques et FH;\n• Exploitation de réseaux téléphoniques fixes filaires, CDMA (fixe sans fil) et mobile GSM;\n• Exploitation de 03 stations terriennes.\nCamtel s’est développée grâce aux options managériales avisées qui mettent en valeur les compétences d’un personnel chevronné et qualifié pour son métier. Cet ensemble est au service de la communauté pour combler les besoins de tous en TIC. See less",
"orgId": "k1yhlnmzgfz7ei",
"owner": "dadb46c4d7a04a4ebf8717eecfdba825",
"createdBy": "75b48c1c0ee144d5b10e34fee2ffa9a9",
"ufId": "jq9a5w740lb0ig",
"appId": "i25ruoybb0owjz",
"createdAt": "2021-10-28T08:58:27.917Z",
"updatedAt": "2021-10-28T08:58:27.917Z",
"__v": 1,
"address": [],
"appPath": "camtel",
"url": "https://app.tranzak.me/tzmp/i25ruoybb0owjz/camtel/"
},
"errorMsg": "",
"errorCode": 0,
"success": true
}
Validate App Key
http(s) Request
POST /v1/services/devtool/validate-key
Request Body Parameters
| Parameter | Type | Description |
|---|---|---|
| appKey | String | appKey eg: 45B290DDB2944092AE2F40336E7B46A0 |
| keyType | String | collection or disbursement |
| env | String | sandbox or production |
| appId | String | app id: eg: g7o84wzypf64 |
Response
{
"data": {
"appInfo":{/**/}
},
"errorMsg": "",
"errorCode": 0,
"success": true
}
// failure example
{
"data": {
},
"errorMsg": "",
"errorCode": 0,
"success": false
}
Generate short link
http(s) Request
POST /v1/services/mp-links/generate
Request Body Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| url | String | true | https://appmod.tranzak.me/merchant/?next=/shops/apmizi0bcd67tv/orders/1718&orgId=tzotwhx38zwnzel6 |
| socialMediaTitle | String | false | title that will show if the link is shared on social media |
| socialMediaDescription | String | false | description that will show if the link is shared on social media |
| socialMediaDescription | String | false | description that will show if the link is shared on social media |
| socialMediaImage | String | false | image that will show if the link is shared on social media |
| utmSource | String | false | The origin of the url.eg: chinamall.All utm parameters are needed only if you want to track the performance/popularity of a link |
| utmMedium | String | false | Medium where the link will be shared. if the link is meant for a particular medium eg: facebook |
| utmCampaign | String | false | If the link is for a particular campaign only. eg: new user sign up |
| utmContent | String | false | Needed If you are doing A/B Testing |
| utmTerm | String | false | Needed If you want to track search terms |
Response
{
"data": {
"shortLink": "https://link.tranzak.net/gKrToqUgzTU3LTTx5", // use this link
"previewLink": "https://link.tranzak.net/gKrToqUgzTU3LTTx5?d=1"
},
"errorMsg": "",
"errorCode": 0,
"success": true
}
GET Mini Programs Info(Minimal), used by other backend services
GET https://staging-api.tranzak.me/aa038/v1/services/details/minimal/:appId
Request Body Parameters
None
Header Parameters
| Parameter | Type | required | Description |
|---|---|---|---|
| Authorization | String | false | user' Bearer token, as sent from the front-end (eg: Bearer <userToken>) |
Response
| Parameter | Type | Description |
|---|---|---|
| name | String | mp name |
| displayName | String | mp display name |
| orgId | String | owner's _id |
| logo | String | mini programs' logo |
| _id | String | _id |
| appId | String | appId |
{
"data": {
"name": "Camtel",
"displayName": "Camtel",
"orgId": "k1yhlnmzgfz7ei",
"logo": "https://fms.tranzak.me/cdn/ia/2msp7cyyl0usk6mh_x8pkwhwugwq693102978.038301376.png",
"_id": "617a6633dfe63f0465be2a7c",
"appId": "i25ruoybb0owjz"
},
"success": true
}
GET Mini Programs Info(Detailed), used by the frond end apps
https Request
GET https://staging-api.tranzak.me/aa038/v1/mps/details/:appId
Request Body Parameters
None
Response
{
"data": {
"tags": [
"modem",
"blue",
"optical fibre",
"4G",
"5G"
],
"categories": [
"Technology",
"Telecommunication"
],
"status": [
100
],
"enabledServices": [],
"countries": [
"cm"
],
"contactPhone": [],
"appLangs": [
"Francais",
"English"
],
"mode": 1,
"deleted": false,
"_id": "617a6633dfe63f0465be2a7c",
"logo": "https://fms.tranzak.me/cdn/ia/2msp7cyyl0usk6mh_x8pkwhwugwq693102978.038301376.png",
"backgroundImage": "https://fms.tranzak.me/cdn/ia/e8e4vq4b0y5davqz_x8pkwhwugwq693109535.96101458561.jpg",
"name": "Camtel",
"displayName": "Camtel",
"desc": "La Cameroon Telecommunications (CAMTEL) est une entreprise publique détenue à 100% par l’État camerounais. Créée en 1998, Camtel est fortement impliquée dans le développement et la modernisation des télécommunications au Cameroun. L’entreprise doit garantir une excellente qualité de l’infrastructure nationale dans un secteur fortement concurrentiel.\nPour cela, Camtel propose des technologies performantes qui garantissent la disponibilité et la maitrise des solutions globales de télécommunications :\n• Connexion au câble sous-marin Sat3 ;\n• Construction et exploitation du réseau national de transmission en fibres optiques et FH;\n• Exploitation de réseaux téléphoniques fixes filaires, CDMA (fixe sans fil) et mobile GSM;\n• Exploitation de 03 stations terriennes.\nCamtel s’est développée grâce aux options managériales avisées qui mettent en valeur les compétences d’un personnel chevronné et qualifié pour son métier. Cet ensemble est au service de la communauté pour combler les besoins de tous en TIC. See less",
"orgId": "k1yhlnmzgfz7ei",
"owner": "dadb46c4d7a04a4ebf8717eecfdba825",
"createdBy": "75b48c1c0ee144d5b10e34fee2ffa9a9",
"ufId": "jq9a5w740lb0ig",
"appId": "i25ruoybb0owjz",
"createdAt": "2021-10-28T08:58:27.917Z",
"updatedAt": "2021-10-28T08:58:27.917Z",
"__v": 1,
"address": [],
"appPath": "camtel",
"url": "https://app.tranzak.me/tzmp/i25ruoybb0owjz/camtel/"
},
"errorMsg": "",
"errorCode": 0,
"success": true
}
GET Mini Programs Info(Minimal), used by other backend services
GET https://staging-api.tranzak.me/aa038/v1/services/details/minimal/:appId
Request Body Parameters
None
Header Parameters
| Parameter | Type | required | Description |
|---|---|---|---|
| Authorization | String | false | user' Bearer token, as sent from the front-end (eg: Bearer <userToken>) |
Response
| Parameter | Type | Description |
|---|---|---|
| name | String | mp name |
| displayName | String | mp display name |
| orgId | String | owner's _id |
| logo | String | mini programs' logo |
| _id | String | _id |
| appId | String | appId |
{
"data": {
"name": "Camtel",
"displayName": "Camtel",
"orgId": "k1yhlnmzgfz7ei",
"logo": "https://fms.tranzak.me/cdn/ia/2msp7cyyl0usk6mh_x8pkwhwugwq693102978.038301376.png",
"_id": "617a6633dfe63f0465be2a7c",
"appId": "i25ruoybb0owjz"
},
"success": true
}
GET MP Minimal Info and Owner info
GET https://staging-api.tranzak.me/aa038/v1/services/details/minimal/with-owner/:appId
Request Body Parameters
None
Response
{
"data": {
"appInfo": {
"name": "Camtel",
"displayName": "Camtel",
"orgId": "k1yhlnmzgfz7ei",
"logo": "https://fms.tranzak.me/cdn/ia/2msp7cyyl0usk6mh_x8pkwhwugwq693102978.038301376.png",
"_id": "617a6633dfe63f0465be2a7c",
"appId": "i25ruoybb0owjz",
"owner": {
"sex": 0,
"userType": 2,
"isDeleted": false,
"role": 1000,
"hp": true,
"firstName": "Camtel Owner",
"lastName": "Automated",
"phone": "+237622922163",
"ufId": "k1yhlnmzgfz7ei",
"orgId": "k1yhlnmzgfz7ei",
"scopeId": "k1yhlnmzgfz7ei",
"platformId": "k1yhlnmzgfz7ei",
"userId": "dadb46c4d7a04a4ebf8717eecfdba825"
}
}
},
"errorMsg": "",
"errorCode": 0,
"success": true
}
Validate App Key
http(s) Request
POST https://staging-api.tranzak.me/aa038/v1/services/devtool/validate-key
Request Body Parameters
| Parameter | Type | Description |
|---|---|---|
| appKey | String | appKey eg: 45B290DDB2944092AE2F40336E7B46A0 |
| keyType | String | collection or disbursement |
| env | String | sandbox or production |
| appId | String | app id: eg: g7o84wzypf64 |
Response
{
"data": {
"appInfo":{/**/}
},
"errorMsg": "",
"errorCode": 0,
"success": true
}
// failure example
{
"data": {
},
"errorMsg": "",
"errorCode": 0,
"success": false
}
cortexBackoffice
Rewards: Bonuses
Bonus reward Allocation & management interface (for staff)
List Matching Events
List a events that must be matched before bonus would apply
Endpoint
GET /backoffice/bonus/create-plan
Response
{
"data": {
"1": "merchant payment",
"2": "payment method link",
"3": "user account upgrade",
"4": "real name verification"
},
"success": true,
}
Create Bonus Allocation Plan
Creates a plan on how bonus shall be allocated
Endpoint
POST /backoffice/bonus/create-plan
Request Body params
| Parameter | Type | required | Description |
|---|---|---|---|
| name | int | true | ID of reward |
| description | int | true | description |
| maxAllocationPerUser | int | true | maxAllocationPerUser |
| countryCode | int | true | countryCode |
| totalAmount | int | true | totalAmount |
| eventTypeId | int | true | eventTypeId |
| isRandomAmount | int | true | isRandomAmount |
| maxAmount | int | true | maxAmount |
| minAmount | int | true | minAmount |
| durationHours | int | true | durationHours |
| expiresAt | int | true | expiresAt |
| autoActivateAfterAssignment | int | true | autoActivateAfterAssignment |
{
"name": "Cool bonus plan",
"description": "Description of some cool bonus plan",
"maxAllocationPerUser": 1,
"countryCode": "CM",
"totalAmount": "1111",
"eventTypeId": "1",
"isRandomAmount": 1,
"maxAmount": "1111",
"minAmount": "1",
"durationHours": "1111" ,
"expiresAt": "2022-04-24 00:46:50" ,
"autoActivateAfterAssignment" : 1
}
Status codes
const DEFAULT_DURATION_HOURS = 7*24 ; //3 days
const STATUS_PENDING = 1; //Pending approval
const STATUS_ACTIVE = 2; //Active
const STATUS_CLOSED = 3; //Used up
const STATUS_PAUSED = -1; //Temporarily paused
const STATUS_CANCELLED = -2; //Cancelled
Response
See VIEW Bonus plan section
Update Bonus Plan
Create Bonus Allocation Plan
Creates a plan on how bonus shall be allocated
Endpoint
POST /backoffice/bonus/update-plan
Request Body params
| Parameter | Type | required | Description |
|---|---|---|---|
| id | int | true | ID of reward |
| name | string | false | name of bonus plan |
| description | int | false | description |
| maxAllocationPerUser | int | true | maxAllocationPerUser |
| countryCode | int | false | countryCode |
| totalAmount | int | false | totalAmount |
| eventTypeId | int | false | eventTypeId |
| isRandomAmount | int | false | isRandomAmount |
| maxAmount | int | false | maxAmount |
| minAmount | int | false | minAmount |
| durationHours | int | false | durationHours |
| expiresAt | int | false | expiresAt |
| autoActivateAfterAssignment | int | false | autoActivateAfterAssignment |
{
"id" : 1,
"name": "Cool bonus plan",
"description": "Description of some cool bonus plan",
"maxAllocationPerUser": 1,
"countryCode": "CM",
"totalAmount": "1111",
"eventTypeId": "1",
"isRandomAmount": 1,
"maxAmount": "1111",
"minAmount": "1",
"durationHours": "1111" ,
"expiresAt": "2022-04-24 00:46:50" ,
"autoActivateAfterAssignment" : 1
}
Response
See VIEW Bonus plan section
View Plan
Displays plan details
Endpoint
GET /backoffice/bonus/view-plan
Request Body params
| Parameter | Type | required | Description |
|---|---|---|---|
| id | int | true | ID of reward |
Response
{
"data": {
"autoActivateAfterAssignment": 1,
"countryCode": "CM",
"createdAt": "2022-03-22 17:58:20",
"createdByStaff": "1",
"currencyCode": "XAF",
"description": "Description of some cool bonus plan",
"durationHours": 1111,
"eventTypeId": 1,
"eventTypeText": "merchant payment",
"expiresAt": "2022-04-24 00:46:50",
"fundingAccountBalance": 0,
"fundingAccountId": 229,
"id": 1,
"isRandomAmount": 1,
"lastUpdatedByStaffId": null,
"matchOnlyMerchantPaymentFromOrgUserIdList": null,
"matchOnlyMerchantPaymentsUsingPMTreasuryServiceList": null,
"matchOnlyTreasuryAccountList": null,
"maxAllocationPerUser": 1,
"maxAmount": 1111,
"minAmount": 1,
"name": "Cool bonus plan",
"status": 1,
"statusText": "pending approval",
"totalAmount": 1111
},
"success": true,
}
Activate Bonus Plan
Confirms a bonus reward. Upon confirmation, the reward will be made available for use. Only bonus rewards with status STATUS_ACTIVE may be used to discount transaction.
Endpoint
POST /backoffice/bonus/activate
Request Body params
| Parameter | Type | required | Description |
|---|---|---|---|
| id | int | true | ID of reward |
{
"id": 1
}
Response
The response shown in the view-plan section
Topup Bonus Account
Adds funds from system discount account into the bonus account. Balance must be available otherwise action will fail.
Endpoint
POST /backoffice/bonus/topup
Request Body params
| Parameter | Type | required | Description |
|---|---|---|---|
| id | int | true | ID of reward |
| topupAmount | int | true | amount to be credited |
{
"id": 1,
"topupAmount": 11111100
}
Response
See view-plan section
List Bonus Plans
Displays list of plans
Endpoint
POST /backoffice/bonus/list-plans
Request filters
return [
[['id', 'totalAmount', 'eventTypeId', 'maxAllocationPerUser', 'isRandomAmount', 'minAmount', 'maxAmount', 'status', 'durationHours', 'fundingAccountId' , 'countryCode', 'name', 'description', 'matchOnlyMerchantPaymentsUsingPMTreasuryServiceList', 'matchOnlyTreasuryAccountList', 'matchOnlyMerchantPaymentFromOrgUserIdList', 'expiresAt', 'createdByStaff', 'lastUpdatedByStaffId', 'createdAt'], 'safe'],
];
Response
{
"data": {
"currentPage": 1,
"hasMore": false,
"list": [
{
"id": "1",
"countryCode": "CM",
"totalAmount": 1111,
"currencyCode": "XAF",
"eventTypeId": "1",
"maxAllocationPerUser": "1",
"isRandomAmount": "1",
"minAmount": 1,
"maxAmount": 1111,
"name": "Cool bonus plan",
"description": "Description of some cool bonus plan",
"status": "2",
"durationHours": "1111",
"matchOnlyMerchantPaymentsUsingPMTreasuryServiceList": null,
"matchOnlyTreasuryAccountList": null,
"matchOnlyMerchantPaymentFromOrgUserIdList": null,
"fundingAccountId": "229",
"expiresAt": "2022-04-24 00:46:50",
"autoActivateAfterAssignment": "1",
"createdByStaff": "1",
"lastUpdatedByStaffId": null,
"createdAt": "2022-03-22 17:58:20",
"eventType": "merchant payment",
"statusText": "merchant payment",
"fundingAccountBalance": 111
}
],
"pageCount": [
1,
50
],
"pageSize": 20,
"totalItems": 1
},
"success": true,
}
Other Actions
Pause
Temporarily suspends a bonus plan
Endpoint
POST /backoffice/bonus/pause
Cancel
Cancels a bonus plan
Endpoint
POST /backoffice/bonus/cancel
List Rewards
Lists allocated bonus rewards
Request endpoint
GET /backoffice/bonus/list-rewards
Request Filters
[['id', 'bonusPlanId', 'balance', 'allocatedAmount', 'status', 'orgUserId', 'createdByUserId' , 'expiresAt', 'createdAt']
Response
{
"data": {
"currentPage": 1,
"hasMore": false,
"list": [
{
"id": "7",
"bonusPlanId": "1",
"balance": 207,
"allocatedAmount": 207,
"status": "2",
"orgUserId": "25",
"createdByUserId": "25",
"expiresAt": "2022-05-08 01:38:36",
"createdAt": "2022-03-22 18:38:36",
"statusText": "active"
},
{
"id": "6",
"bonusPlanId": "1",
"balance": 896,
"allocatedAmount": 896,
"status": "2",
"orgUserId": "25",
"createdByUserId": "25",
"expiresAt": "2022-05-08 01:38:35",
"createdAt": "2022-03-22 18:38:35",
"statusText": "active"
},
{
"id": "5",
"bonusPlanId": "1",
"balance": 817,
"allocatedAmount": 817,
"status": "2",
"orgUserId": "25",
"createdByUserId": "25",
"expiresAt": "2022-05-08 01:38:34",
"createdAt": "2022-03-22 18:38:34",
"statusText": "active"
},
{
"id": "4",
"bonusPlanId": "1",
"balance": 369,
"allocatedAmount": 369,
"status": "2",
"orgUserId": "25",
"createdByUserId": "25",
"expiresAt": "2022-05-08 01:38:33",
"createdAt": "2022-03-22 18:38:33",
"statusText": "active"
},
{
"id": "3",
"bonusPlanId": "1",
"balance": 165,
"allocatedAmount": 165,
"status": "2",
"orgUserId": "25",
"createdByUserId": "25",
"expiresAt": "2022-05-08 01:38:33",
"createdAt": "2022-03-22 18:38:33",
"statusText": "active"
},
{
"id": "2",
"bonusPlanId": "1",
"balance": 936,
"allocatedAmount": 936,
"status": "2",
"orgUserId": "25",
"createdByUserId": "25",
"expiresAt": "2022-05-08 01:38:31",
"createdAt": "2022-03-22 18:38:31",
"statusText": "active"
},
{
"id": "1",
"bonusPlanId": "1",
"balance": 853,
"allocatedAmount": 853,
"status": "2",
"orgUserId": "25",
"createdByUserId": "25",
"expiresAt": "2022-05-08 01:37:45",
"createdAt": "2022-03-22 18:37:45",
"statusText": "active"
}
],
"pageCount": [
1,
50
],
"pageSize": 20,
"totalItems": 7
},
"success": true,
"debugInfo": null,
"debug": {
"lang": "en-US",
"dateTime": "2022-03-22T18:46:41+00:00",
"hostname": "cortex01",
"serverIpAddress": "192.168.137.2",
"clientIpAddress": "192.168.137.1",
"duration": "0.045s",
"userId": "1",
"staffId": "1",
"staffFirstName": null
}
}
View Reward Details
Displays details of a bonus reward allocation
Request Endpoint
GET /backoffice/bonus/view-reward?id=BONUS_REWARD_ID
Response
{
"data": {
"allocatedAmount": 853,
"balance": 853,
"bonusPlanId": 1,
"createdAt": "2022-03-22 18:37:45",
"createdByUserId": 25,
"eventTypeText": "merchant payment",
"expiresAt": "2022-05-08 01:37:45",
"id": 1,
"orgUserId": 25,
"status": 2,
"statusText": "active"
},
"success": true,
}
Cancel Reward
cancels an allocated reward
Request Endpoint
GET /backoffice/bonus/cancel-reward?id=BONUS_REWARD_ID
Request Params
| Parameter | Type | required | Description |
|---|---|---|---|
| id | int | true | ID of reward |
{
"id": 1
}
Response
See View-reward section
Core System Accounts - CSA
Core systems accounts are special accounts for system use. They are used to track fund movement between customers and Tranzak
CSA List
Displays paginated list of CSAs
Request Endpoint
GET /backoffice/csa/list
Request Params
[['id', 'accountId', 'countryCode', 'type', ], 'safe'],
Response
{
"data": {
"currentPage": 1,
"hasMore": false,
"list": [
{
"id": "1",
"countryCode": "CM",
"type": "internal",
"accountId": "1",
"createdAt": "2022-03-25 12:20:51",
"account": {
"id": "1",
"_id": "ACI66XBMZALRNZ7PETWA",
"userId": "1",
"currencyCode": "XAF",
"type": "2",
"balanceAmount": 0,
"withheldBalanceAmount": 0,
"name": "",
"description": "",
"avatarUrl": "https://staging-api.tranzak.me/fapi/static/img/logos/tz-logo-btn.png",
"label": "TYPE_CSA",
"isCsaOverdraftAccount": "1",
"isActive": "1",
"createdAt": "2022-03-25 13:20:51",
"lastUpdatedAt": null,
"typeText": "CSA account"
},
"country": {
"geoNameId": "2233387",
"code": "CM",
"name": "Cameroon",
"currencyName": "Franc",
"iso3": "CMR",
"currencyCode": "XAF",
"currencySymbol": null,
"dialCode": "237",
"isoNumeric": "120",
"capital": "Yaounde",
"continent": "AF",
"tld": ".cm",
"languages": "en-CM,fr-CM",
"createdAt": "2020-12-01 12:15:01"
},
"typeText": "internal"
},
{
"id": "9",
"countryCode": "CM",
"type": "guest_payment",
"accountId": "9",
"createdAt": "2022-03-25 12:20:51",
"account": {
"id": "9",
"_id": "ACQJOELHLKHKV2LJP707",
"userId": "1",
"currencyCode": "XAF",
"type": "2",
"balanceAmount": 0,
"withheldBalanceAmount": 0,
"name": "",
"description": "",
"avatarUrl": "https://staging-api.tranzak.me/fapi/static/img/logos/tz-logo-btn.png",
"label": "TYPE_CSA",
"isCsaOverdraftAccount": "1",
"isActive": "1",
"createdAt": "2022-03-25 13:20:51",
"lastUpdatedAt": null,
"typeText": "CSA account"
},
"country": {
"geoNameId": "2233387",
"code": "CM",
"name": "Cameroon",
"currencyName": "Franc",
"iso3": "CMR",
"currencyCode": "XAF",
"currencySymbol": null,
"dialCode": "237",
"isoNumeric": "120",
"capital": "Yaounde",
"continent": "AF",
"tld": ".cm",
"languages": "en-CM,fr-CM",
"createdAt": "2020-12-01 12:15:01"
},
"typeText": "guest_payment"
},
{
"id": "8",
"countryCode": "CM",
"type": "cross_border",
"accountId": "8",
"createdAt": "2022-03-25 12:20:51",
"account": {
"id": "8",
"_id": "AC8LSATEM4JABPYOL346",
"userId": "1",
"currencyCode": "XAF",
"type": "2",
"balanceAmount": 0,
"withheldBalanceAmount": 0,
"name": "",
"description": "",
"avatarUrl": "https://staging-api.tranzak.me/fapi/static/img/logos/tz-logo-btn.png",
"label": "TYPE_CSA",
"isCsaOverdraftAccount": "1",
"isActive": "1",
"createdAt": "2022-03-25 13:20:51",
"lastUpdatedAt": null,
"typeText": "CSA account"
},
"country": {
"geoNameId": "2233387",
"code": "CM",
"name": "Cameroon",
"currencyName": "Franc",
"iso3": "CMR",
"currencyCode": "XAF",
"currencySymbol": null,
"dialCode": "237",
"isoNumeric": "120",
"capital": "Yaounde",
"continent": "AF",
"tld": ".cm",
"languages": "en-CM,fr-CM",
"createdAt": "2020-12-01 12:15:01"
},
"typeText": "cross_border"
},
{
"id": "7",
"countryCode": "CM",
"type": "treasury",
"accountId": "7",
"createdAt": "2022-03-25 12:20:51",
"account": {
"id": "7",
"_id": "ACCA7QKPH2VRMFMOIZ3P",
"userId": "1",
"currencyCode": "XAF",
"type": "2",
"balanceAmount": 0,
"withheldBalanceAmount": 0,
"name": "",
"description": "",
"avatarUrl": "https://staging-api.tranzak.me/fapi/static/img/logos/tz-logo-btn.png",
"label": "TYPE_CSA",
"isCsaOverdraftAccount": "1",
"isActive": "1",
"createdAt": "2022-03-25 13:20:51",
"lastUpdatedAt": null,
"typeText": "CSA account"
},
"country": {
"geoNameId": "2233387",
"code": "CM",
"name": "Cameroon",
"currencyName": "Franc",
"iso3": "CMR",
"currencyCode": "XAF",
"currencySymbol": null,
"dialCode": "237",
"isoNumeric": "120",
"capital": "Yaounde",
"continent": "AF",
"tld": ".cm",
"languages": "en-CM,fr-CM",
"createdAt": "2020-12-01 12:15:01"
},
"typeText": "treasury"
},
{
"id": "6",
"countryCode": "CM",
"type": "account_payable",
"accountId": "6",
"createdAt": "2022-03-25 12:20:51",
"account": {
"id": "6",
"_id": "ACYDS97RU9GT1Q20BKYX",
"userId": "1",
"currencyCode": "XAF",
"type": "2",
"balanceAmount": 0,
"withheldBalanceAmount": 0,
"name": "",
"description": "",
"avatarUrl": "https://staging-api.tranzak.me/fapi/static/img/logos/tz-logo-btn.png",
"label": "TYPE_CSA",
"isCsaOverdraftAccount": "1",
"isActive": "1",
"createdAt": "2022-03-25 13:20:51",
"lastUpdatedAt": null,
"typeText": "CSA account"
},
"country": {
"geoNameId": "2233387",
"code": "CM",
"name": "Cameroon",
"currencyName": "Franc",
"iso3": "CMR",
"currencyCode": "XAF",
"currencySymbol": null,
"dialCode": "237",
"isoNumeric": "120",
"capital": "Yaounde",
"continent": "AF",
"tld": ".cm",
"languages": "en-CM,fr-CM",
"createdAt": "2020-12-01 12:15:01"
},
"typeText": "account_payable"
},
{
"id": "5",
"countryCode": "CM",
"type": "profit_loss",
"accountId": "5",
"createdAt": "2022-03-25 12:20:51",
"account": {
"id": "5",
"_id": "ACKEK3436WXOHF3GTRPX",
"userId": "1",
"currencyCode": "XAF",
"type": "2",
"balanceAmount": 0,
"withheldBalanceAmount": 0,
"name": "",
"description": "",
"avatarUrl": "https://staging-api.tranzak.me/fapi/static/img/logos/tz-logo-btn.png",
"label": "TYPE_CSA",
"isCsaOverdraftAccount": "1",
"isActive": "1",
"createdAt": "2022-03-25 13:20:51",
"lastUpdatedAt": null,
"typeText": "CSA account"
},
"country": {
"geoNameId": "2233387",
"code": "CM",
"name": "Cameroon",
"currencyName": "Franc",
"iso3": "CMR",
"currencyCode": "XAF",
"currencySymbol": null,
"dialCode": "237",
"isoNumeric": "120",
"capital": "Yaounde",
"continent": "AF",
"tld": ".cm",
"languages": "en-CM,fr-CM",
"createdAt": "2020-12-01 12:15:01"
},
"typeText": "profit_loss"
},
{
"id": "4",
"countryCode": "CM",
"type": "luckymoney",
"accountId": "4",
"createdAt": "2022-03-25 12:20:51",
"account": {
"id": "4",
"_id": "ACCMOMHS5G4PLN3FBMQJ",
"userId": "1",
"currencyCode": "XAF",
"type": "2",
"balanceAmount": 0,
"withheldBalanceAmount": 0,
"name": "",
"description": "",
"avatarUrl": "https://staging-api.tranzak.me/fapi/static/img/logos/tz-logo-btn.png",
"label": "TYPE_CSA",
"isCsaOverdraftAccount": "0",
"isActive": "1",
"createdAt": "2022-03-25 13:20:51",
"lastUpdatedAt": null,
"typeText": "CSA account"
},
"country": {
"geoNameId": "2233387",
"code": "CM",
"name": "Cameroon",
"currencyName": "Franc",
"iso3": "CMR",
"currencyCode": "XAF",
"currencySymbol": null,
"dialCode": "237",
"isoNumeric": "120",
"capital": "Yaounde",
"continent": "AF",
"tld": ".cm",
"languages": "en-CM,fr-CM",
"createdAt": "2020-12-01 12:15:01"
},
"typeText": "luckymoney"
},
{
"id": "3",
"countryCode": "CM",
"type": "bonus_credit",
"accountId": "3",
"createdAt": "2022-03-25 12:20:51",
"account": {
"id": "3",
"_id": "AC23X8236X45PE7ZTSYC",
"userId": "1",
"currencyCode": "XAF",
"type": "2",
"balanceAmount": 0,
"withheldBalanceAmount": 0,
"name": "",
"description": "",
"avatarUrl": "https://staging-api.tranzak.me/fapi/static/img/logos/tz-logo-btn.png",
"label": "TYPE_CSA",
"isCsaOverdraftAccount": "0",
"isActive": "1",
"createdAt": "2022-03-25 13:20:51",
"lastUpdatedAt": null,
"typeText": "CSA account"
},
"country": {
"geoNameId": "2233387",
"code": "CM",
"name": "Cameroon",
"currencyName": "Franc",
"iso3": "CMR",
"currencyCode": "XAF",
"currencySymbol": null,
"dialCode": "237",
"isoNumeric": "120",
"capital": "Yaounde",
"continent": "AF",
"tld": ".cm",
"languages": "en-CM,fr-CM",
"createdAt": "2020-12-01 12:15:01"
},
"typeText": "bonus_credit"
},
{
"id": "2",
"countryCode": "CM",
"type": "external",
"accountId": "2",
"createdAt": "2022-03-25 12:20:51",
"account": {
"id": "2",
"_id": "ACRGFOF1Q8ENGVH3OTHG",
"userId": "1",
"currencyCode": "XAF",
"type": "2",
"balanceAmount": 0,
"withheldBalanceAmount": 0,
"name": "",
"description": "",
"avatarUrl": "https://staging-api.tranzak.me/fapi/static/img/logos/tz-logo-btn.png",
"label": "TYPE_CSA",
"isCsaOverdraftAccount": "1",
"isActive": "1",
"createdAt": "2022-03-25 13:20:51",
"lastUpdatedAt": null,
"typeText": "CSA account"
},
"country": {
"geoNameId": "2233387",
"code": "CM",
"name": "Cameroon",
"currencyName": "Franc",
"iso3": "CMR",
"currencyCode": "XAF",
"currencySymbol": null,
"dialCode": "237",
"isoNumeric": "120",
"capital": "Yaounde",
"continent": "AF",
"tld": ".cm",
"languages": "en-CM,fr-CM",
"createdAt": "2020-12-01 12:15:01"
},
"typeText": "external"
},
{
"id": "10",
"countryCode": "CM",
"type": "gift_card_pack",
"accountId": "10",
"createdAt": "2022-03-25 12:20:51",
"account": {
"id": "10",
"_id": "ACH6XWJEJLDHSJ9DU7G3",
"userId": "1",
"currencyCode": "XAF",
"type": "2",
"balanceAmount": 0,
"withheldBalanceAmount": 0,
"name": "",
"description": "",
"avatarUrl": "https://staging-api.tranzak.me/fapi/static/img/logos/tz-logo-btn.png",
"label": "TYPE_CSA",
"isCsaOverdraftAccount": "1",
"isActive": "1",
"createdAt": "2022-03-25 13:20:51",
"lastUpdatedAt": null,
"typeText": "CSA account"
},
"country": {
"geoNameId": "2233387",
"code": "CM",
"name": "Cameroon",
"currencyName": "Franc",
"iso3": "CMR",
"currencyCode": "XAF",
"currencySymbol": null,
"dialCode": "237",
"isoNumeric": "120",
"capital": "Yaounde",
"continent": "AF",
"tld": ".cm",
"languages": "en-CM,fr-CM",
"createdAt": "2020-12-01 12:15:01"
},
"typeText": "gift_card_pack"
}
],
"pageCount": [
1,
50
],
"pageSize": 20,
"totalItems": 10
},
"success": true,
"debugInfo": null,
"debug": {
"lang": "en-US",
"dateTime": "2022-03-25T14:35:06+00:00",
"hostname": "cortex01",
"serverIpAddress": "192.168.137.2",
"clientIpAddress": "192.168.137.1",
"duration": "0.045s",
"userId": "1",
"staffId": "1",
"staffFirstName": null
}
}
Add Supported Country.
This interface is called to add system accounts so that transactions from a particular country can work well. IF CSAs are not created for a new country , transactions involving that country will FAIL.
Endpoint
GET /backoffice/csa/add-supported-country
Request params
{
"countryCode": "CD"
}
Response
Success | fail message.
List Supported Countries
List countries currently supported
Endpoint
GET /backoffice/csa/add-supported-country
Request params
N/A
Response
{
"data": [
{
"id": "11",
"countryCode": "CD",
"type": "internal",
"accountId": "226",
"createdAt": "2022-03-25 14:44:43",
"country": {
"geoNameId": "203312",
"code": "CD",
"name": "Democratic Republic of the Congo",
"currencyName": "Franc",
"iso3": "COD",
"currencyCode": "CDF",
"currencySymbol": null,
"dialCode": "243",
"isoNumeric": "180",
"capital": "Kinshasa",
"continent": "AF",
"tld": ".cd",
"languages": "fr-CD,ln,ktu,kg,sw,lua",
"createdAt": "2020-12-01 12:15:01"
}
},
{
"id": "1",
"countryCode": "CM",
"type": "internal",
"accountId": "1",
"createdAt": "2022-03-25 12:20:51",
"country": {
"geoNameId": "2233387",
"code": "CM",
"name": "Cameroon",
"currencyName": "Franc",
"iso3": "CMR",
"currencyCode": "XAF",
"currencySymbol": null,
"dialCode": "237",
"isoNumeric": "120",
"capital": "Yaounde",
"continent": "AF",
"tld": ".cm",
"languages": "en-CM,fr-CM",
"createdAt": "2020-12-01 12:15:01"
}
},
{
"id": "21",
"countryCode": "ng",
"type": "internal",
"accountId": "236",
"createdAt": "2022-03-25 14:44:49",
"country": null
}
],
"success": true,
"debugInfo": null,
"debug": {
"lang": "en-US",
"dateTime": "2022-03-25T14:45:20+00:00",
"hostname": "cortex01",
"serverIpAddress": "192.168.137.2",
"clientIpAddress": "192.168.137.1",
"duration": "0.044s",
"userId": "1",
"staffId": "1",
"staffFirstName": null
}
}
Add CSA Type for a country
IN case a new CSA type is added in the future, this interface can be used to add the new CSA to the list of CSAs for a country .
Request Endpoint
POST /backoffice/csa/add-csa-type-for-country
Request Params
{
"csaType" : "gift_card_pack",
"countryCode" : "CD"
}
Response
CSA payload | See ViEW CSA details
View CSA Details
View details for CSA
Request Endpoint
POST /backoffice/csa/view?id=CSA_ID
Request Params
| Parameter | Type | required | Description |
|---|---|---|---|
| id | String(100) | true | CSA ID |
Response
{
"data": {
"account": {
"id": 1,
"_id": "ACI66XBMZALRNZ7PETWA",
"userId": 1,
"currencyCode": "XAF",
"type": 2,
"balanceAmount": 0,
"withheldBalanceAmount": 0,
"name": "",
"description": "",
"avatarUrl": "https://staging-api.tranzak.me/fapi/static/img/logos/tz-logo-btn.png",
"label": "TYPE_CSA",
"isCsaOverdraftAccount": 1,
"isActive": 1,
"createdAt": "2022-03-25 13:20:51",
"lastUpdatedAt": null,
"typeText": "CSA account"
},
"accountId": 1,
"country": {
"geoNameId": 2233387,
"code": "CM",
"name": "Cameroon",
"currencyName": "Franc",
"iso3": "CMR",
"currencyCode": "XAF",
"currencySymbol": null,
"dialCode": "237",
"isoNumeric": 120,
"capital": "Yaounde",
"continent": "AF",
"tld": ".cm",
"languages": "en-CM,fr-CM",
"createdAt": "2020-12-01 12:15:01"
},
"countryCode": "CM",
"createdAt": "2022-03-25 12:20:51",
"id": 1,
"type": "internal",
"typeText": "internal"
},
"success": true,
"debugInfo": null,
"debug": {
"lang": "en-US",
"dateTime": "2022-03-25T15:12:58+00:00",
"hostname": "cortex01",
"serverIpAddress": "192.168.137.2",
"clientIpAddress": "192.168.137.1",
"duration": "0.045s",
"userId": "1",
"staffId": "1",
"staffFirstName": null
}
}
CSA Types
List of CSA types
Request Endpoint
GET /backoffice/csa/list-csa-types
Request Params
N/A
Response
{
"data": {
"account_payable": "account_payable",
"bonus_credit": "bonus_credit",
"cross_border": "cross_border",
"external": "external",
"gateway_payment": "gateway_payment",
"gift_card_pack": "gift_card_pack",
"guest_payment": "guest_payment",
"internal": "internal",
"luckymoney": "luckymoney",
"profit_loss": "profit_loss",
"treasury": "treasury"
},
"success": true,
"debugInfo": null,
"debug": {
"lang": "en-US",
"dateTime": "2022-03-25T15:14:09+00:00",
"hostname": "cortex01",
"serverIpAddress": "192.168.137.2",
"clientIpAddress": "192.168.137.1",
"duration": "0.042s",
"userId": "1",
"staffId": "1",
"staffFirstName": null
}
}
Financials
Financial summary
List Treasury Cash flows
Displays chronological in-out cash flows
Request Endpoint
GET /backoffice/financials/treasury-cash-flow-history
Request Params
[['countryCode', 'id', 'treasuryServiceId', 'paymentId'], 'safe'],
[['amount', 'currencyCode', 'note', 'createdAt'], 'safe'],
Response
{
"data": {
"currentPage": 1,
"hasMore": false,
"list": [
{
"id": "1",
"amount": "-980",
"currencyCode": "XAF",
"treasuryServiceId": "1",
"paymentId": "32",
"note": "Outbound txn|paymentId=31",
"createdAt": "2022-03-25 15:48:28",
"treasuryService": {
"id": "1",
"countryCode": "CM",
"serviceName": null,
"treasuryId": "1",
"type": "4",
"accountId": "12",
"isPaymentMethod": "1",
"isEnabled": "1",
"externalBalance": "0",
"avatarUrl": null,
"createdByStaffId": null,
"createdAt": "2022-03-25 12:20:51",
"lastUpdatedAt": null
},
"treasury": {
"id": "1",
"userId": "3",
"countryCode": "CM",
"type": "2",
"shortName": "MTN Momo",
"name": "MTN Momo",
"description": "CM | MTN Momo",
"isOffline": "0",
"status": "1",
"isPaymentMethod": "1",
"bankCode": null,
"isOutboundPaymentProvider": "1",
"outboundRatePercentage": "2.9000",
"avatarUrl": "/static/img/partners/mtn.png",
"cardAvatarUrl": "/static/img/partners/cards/",
"isSelectableByUsers": "1",
"isVerificationSource": "0",
"isExpressPaymentSupported": "1",
"paymentWebRedirectUrl": null,
"inboundMinAmount": "1",
"inboundMaxAmount": "1000000",
"inboundPercentageCharge": "2",
"inboundFixedCharge": "10",
"outboundMinAmount": "1",
"outboundMaxAmount": "100000",
"outboundFixedCharge": "10",
"outboundPercentageCharge": "2",
"outboundProcessingTimeInHours": null,
"outboundMaxJobPerBatch": null,
"ussdMobileMoneyDialCode": "*126#",
"enableVisaPrepaidSettlement": "0",
"enableMastercardPrepaidSettlement": "0",
"isSettlementEntity": "1",
"settlementPriority": "10",
"maxPrepaidCardJobsPerBatch": null,
"maxIntraBankJobsPerBatch": null,
"maxInterBankJobsPerBatch": null,
"settlementAccountId": "11",
"swiftCode": null,
"createdByStaffId": null,
"createdAt": "2022-03-25 12:20:51",
"updatedAt": null
}
}
],
"pageCount": [
1,
50
],
"pageSize": 20,
"totalItems": 1
},
"success": true,
"debugInfo": null,
"debug": {
"lang": "en-US",
"dateTime": "2022-03-25T15:48:37+00:00",
"hostname": "cortex01",
"serverIpAddress": "192.168.137.2",
"clientIpAddress": "192.168.137.1",
"duration": "0.044s",
"userId": "1",
"staffId": "1",
"staffFirstName": null
}
}
Revenue Stats
Display revenue data
Request Endpoint
GET /backoffice/financials/stats?countryCode=CM
Request Params
| Parameter | Type | required | Description |
|---|---|---|---|
| countryCode | String(100) | false | countryCode - if no country is set, all supported country data will be listed |
Response
{
"data": {
"currencyCode": "XAF",
"inbound": {
"1Hour": {
"completed": {
"amount": 0,
"number": "0"
},
"failed": {
"amount": 0,
"number": "0"
},
"pending": {
"amount": 0,
"number": "0"
},
"total": {
"amount": 0,
"number": "0"
}
},
"today": {
"completed": {
"amount": 0,
"number": "0"
},
"failed": {
"amount": 0,
"number": "0"
},
"pending": {
"amount": 0,
"number": "0"
},
"total": {
"amount": 0,
"number": "0"
}
},
"24Hours": {
"completed": {
"amount": 0,
"number": "0"
},
"failed": {
"amount": 0,
"number": "0"
},
"pending": {
"amount": 0,
"number": "0"
},
"total": {
"amount": 0,
"number": "0"
}
},
"3Days": {
"completed": {
"amount": 0,
"number": "0"
},
"failed": {
"amount": 0,
"number": "0"
},
"pending": {
"amount": 0,
"number": "0"
},
"total": {
"amount": "1000",
"number": "1"
}
},
"7Days": {
"completed": {
"amount": 0,
"number": "0"
},
"failed": {
"amount": 0,
"number": "0"
},
"pending": {
"amount": 0,
"number": "0"
},
"total": {
"amount": "1000",
"number": "1"
}
},
"30Days": {
"completed": {
"amount": 0,
"number": "0"
},
"failed": {
"amount": 0,
"number": "0"
},
"pending": {
"amount": 0,
"number": "0"
},
"total": {
"amount": "1000",
"number": "1"
}
}
},
"outbound": {
"1Hour": {
"completed": {
"amount": "2940",
"number": "3"
},
"failed": {
"amount": 0,
"number": "0"
},
"pending": {
"amount": 0,
"number": "0"
},
"total": {
"amount": "2940",
"number": "3"
}
},
"today": {
"completed": {
"amount": "2940",
"number": "3"
},
"failed": {
"amount": 0,
"number": "0"
},
"pending": {
"amount": 0,
"number": "0"
},
"total": {
"amount": "2940",
"number": "3"
}
},
"24Hours": {
"completed": {
"amount": "2940",
"number": "3"
},
"failed": {
"amount": 0,
"number": "0"
},
"pending": {
"amount": 0,
"number": "0"
},
"total": {
"amount": "2940",
"number": "3"
}
},
"3Days": {
"completed": {
"amount": "3920",
"number": "4"
},
"failed": {
"amount": 0,
"number": "0"
},
"pending": {
"amount": 0,
"number": "0"
},
"total": {
"amount": "3920",
"number": "4"
}
},
"7Days": {
"completed": {
"amount": "3920",
"number": "4"
},
"failed": {
"amount": 0,
"number": "0"
},
"pending": {
"amount": 0,
"number": "0"
},
"total": {
"amount": "3920",
"number": "4"
}
},
"30Days": {
"completed": {
"amount": "3920",
"number": "4"
},
"failed": {
"amount": 0,
"number": "0"
},
"pending": {
"amount": 0,
"number": "0"
},
"total": {
"amount": "3920",
"number": "4"
}
}
},
"revenue": {
"accountId": 5,
"1Hour": "630",
"24Hour": "630",
"3Day": "843",
"7Day": "843",
"30Day": "843"
}
},
"success": true
}
Revenue History
Tracks the P&L account ID for a particular country
Endpoint
GET /backoffice/financials/revenue-history?countryCode=XX
Request Params
| Parameter | Type | required | Description |
|---|---|---|---|
| countryCode | String(100) | false | countryCode - if no country is set, all supported country data will be listed |
Response
{
"data": {
"currentPage": 1,
"hasMore": false,
"list": [
{
"id": "89",
"paymentId": "41",
"isCredit": "1",
"accountId": "5",
"amount": 10,
"currencyCode": "XAF",
"openingBalance": 0,
"closingBalance": 0,
"createdAt": "2022-03-28 09:19:22",
"account": {
"id": "5",
"_id": "ACKEK3436WXOHF3GTRPX",
"userId": "1",
"currencyCode": "XAF",
"type": "2",
"balanceAmount": "0",
"withheldBalanceAmount": "0",
"name": "",
"description": "",
"avatarUrl": "https://staging-api.tranzak.me/fapi/static/img/logos/tz-logo-btn.png",
"label": "TYPE_CSA",
"isCsaOverdraftAccount": "1",
"isActive": "1",
"createdAt": "2022-03-25 13:20:51",
"lastUpdatedAt": null
},
"csa": {
"id": "5",
"countryCode": "CM",
"type": "profit_loss",
"accountId": "5",
"createdAt": "2022-03-25 12:20:51"
}
},
{
"id": "86",
"paymentId": "40",
"isCredit": "1",
"accountId": "5",
"amount": 200,
"currencyCode": "XAF",
"openingBalance": 0,
"closingBalance": 0,
"createdAt": "2022-03-28 09:19:22",
"account": {
"id": "5",
"_id": "ACKEK3436WXOHF3GTRPX",
"userId": "1",
"currencyCode": "XAF",
"type": "2",
"balanceAmount": "0",
"withheldBalanceAmount": "0",
"name": "",
"description": "",
"avatarUrl": "https://staging-api.tranzak.me/fapi/static/img/logos/tz-logo-btn.png",
"label": "TYPE_CSA",
"isCsaOverdraftAccount": "1",
"isActive": "1",
"createdAt": "2022-03-25 13:20:51",
"lastUpdatedAt": null
},
"csa": {
"id": "5",
"countryCode": "CM",
"type": "profit_loss",
"accountId": "5",
"createdAt": "2022-03-25 12:20:51"
}
},
{
"id": "81",
"paymentId": "38",
"isCredit": "1",
"accountId": "5",
"amount": 10,
"currencyCode": "XAF",
"openingBalance": 0,
"closingBalance": 0,
"createdAt": "2022-03-28 09:19:21",
"account": {
"id": "5",
"_id": "ACKEK3436WXOHF3GTRPX",
"userId": "1",
"currencyCode": "XAF",
"type": "2",
"balanceAmount": "0",
"withheldBalanceAmount": "0",
"name": "",
"description": "",
"avatarUrl": "https://staging-api.tranzak.me/fapi/static/img/logos/tz-logo-btn.png",
"label": "TYPE_CSA",
"isCsaOverdraftAccount": "1",
"isActive": "1",
"createdAt": "2022-03-25 13:20:51",
"lastUpdatedAt": null
},
"csa": {
"id": "5",
"countryCode": "CM",
"type": "profit_loss",
"accountId": "5",
"createdAt": "2022-03-25 12:20:51"
}
},
{
"id": "78",
"paymentId": "37",
"isCredit": "1",
"accountId": "5",
"amount": 200,
"currencyCode": "XAF",
"openingBalance": 0,
"closingBalance": 0,
"createdAt": "2022-03-28 09:19:20",
"account": {
"id": "5",
"_id": "ACKEK3436WXOHF3GTRPX",
"userId": "1",
"currencyCode": "XAF",
"type": "2",
"balanceAmount": "0",
"withheldBalanceAmount": "0",
"name": "",
"description": "",
"avatarUrl": "https://staging-api.tranzak.me/fapi/static/img/logos/tz-logo-btn.png",
"label": "TYPE_CSA",
"isCsaOverdraftAccount": "1",
"isActive": "1",
"createdAt": "2022-03-25 13:20:51",
"lastUpdatedAt": null
},
"csa": {
"id": "5",
"countryCode": "CM",
"type": "profit_loss",
"accountId": "5",
"createdAt": "2022-03-25 12:20:51"
}
},
{
"id": "73",
"paymentId": "35",
"isCredit": "1",
"accountId": "5",
"amount": 10,
"currencyCode": "XAF",
"openingBalance": 0,
"closingBalance": 0,
"createdAt": "2022-03-28 09:19:18",
"account": {
"id": "5",
"_id": "ACKEK3436WXOHF3GTRPX",
"userId": "1",
"currencyCode": "XAF",
"type": "2",
"balanceAmount": "0",
"withheldBalanceAmount": "0",
"name": "",
"description": "",
"avatarUrl": "https://staging-api.tranzak.me/fapi/static/img/logos/tz-logo-btn.png",
"label": "TYPE_CSA",
"isCsaOverdraftAccount": "1",
"isActive": "1",
"createdAt": "2022-03-25 13:20:51",
"lastUpdatedAt": null
},
"csa": {
"id": "5",
"countryCode": "CM",
"type": "profit_loss",
"accountId": "5",
"createdAt": "2022-03-25 12:20:51"
}
},
{
"id": "70",
"paymentId": "34",
"isCredit": "1",
"accountId": "5",
"amount": 200,
"currencyCode": "XAF",
"openingBalance": 0,
"closingBalance": 0,
"createdAt": "2022-03-28 09:19:18",
"account": {
"id": "5",
"_id": "ACKEK3436WXOHF3GTRPX",
"userId": "1",
"currencyCode": "XAF",
"type": "2",
"balanceAmount": "0",
"withheldBalanceAmount": "0",
"name": "",
"description": "",
"avatarUrl": "https://staging-api.tranzak.me/fapi/static/img/logos/tz-logo-btn.png",
"label": "TYPE_CSA",
"isCsaOverdraftAccount": "1",
"isActive": "1",
"createdAt": "2022-03-25 13:20:51",
"lastUpdatedAt": null
},
"csa": {
"id": "5",
"countryCode": "CM",
"type": "profit_loss",
"accountId": "5",
"createdAt": "2022-03-25 12:20:51"
}
},
{
"id": "63",
"paymentId": "31",
"isCredit": "1",
"accountId": "5",
"amount": 10,
"currencyCode": "XAF",
"openingBalance": 0,
"closingBalance": 0,
"createdAt": "2022-03-25 16:48:24",
"account": {
"id": "5",
"_id": "ACKEK3436WXOHF3GTRPX",
"userId": "1",
"currencyCode": "XAF",
"type": "2",
"balanceAmount": "0",
"withheldBalanceAmount": "0",
"name": "",
"description": "",
"avatarUrl": "https://staging-api.tranzak.me/fapi/static/img/logos/tz-logo-btn.png",
"label": "TYPE_CSA",
"isCsaOverdraftAccount": "1",
"isActive": "1",
"createdAt": "2022-03-25 13:20:51",
"lastUpdatedAt": null
},
"csa": {
"id": "5",
"countryCode": "CM",
"type": "profit_loss",
"accountId": "5",
"createdAt": "2022-03-25 12:20:51"
}
},
{
"id": "60",
"paymentId": "30",
"isCredit": "1",
"accountId": "5",
"amount": 200,
"currencyCode": "XAF",
"openingBalance": 0,
"closingBalance": 0,
"createdAt": "2022-03-25 16:48:23",
"account": {
"id": "5",
"_id": "ACKEK3436WXOHF3GTRPX",
"userId": "1",
"currencyCode": "XAF",
"type": "2",
"balanceAmount": "0",
"withheldBalanceAmount": "0",
"name": "",
"description": "",
"avatarUrl": "https://staging-api.tranzak.me/fapi/static/img/logos/tz-logo-btn.png",
"label": "TYPE_CSA",
"isCsaOverdraftAccount": "1",
"isActive": "1",
"createdAt": "2022-03-25 13:20:51",
"lastUpdatedAt": null
},
"csa": {
"id": "5",
"countryCode": "CM",
"type": "profit_loss",
"accountId": "5",
"createdAt": "2022-03-25 12:20:51"
}
},
{
"id": "29",
"paymentId": "15",
"isCredit": "1",
"accountId": "5",
"amount": 1,
"currencyCode": "XAF",
"openingBalance": 0,
"closingBalance": 0,
"createdAt": "2022-03-25 14:13:29",
"account": {
"id": "5",
"_id": "ACKEK3436WXOHF3GTRPX",
"userId": "1",
"currencyCode": "XAF",
"type": "2",
"balanceAmount": "0",
"withheldBalanceAmount": "0",
"name": "",
"description": "",
"avatarUrl": "https://staging-api.tranzak.me/fapi/static/img/logos/tz-logo-btn.png",
"label": "TYPE_CSA",
"isCsaOverdraftAccount": "1",
"isActive": "1",
"createdAt": "2022-03-25 13:20:51",
"lastUpdatedAt": null
},
"csa": {
"id": "5",
"countryCode": "CM",
"type": "profit_loss",
"accountId": "5",
"createdAt": "2022-03-25 12:20:51"
}
},
{
"id": "24",
"paymentId": "13",
"isCredit": "1",
"accountId": "5",
"amount": 1,
"currencyCode": "XAF",
"openingBalance": 0,
"closingBalance": 0,
"createdAt": "2022-03-25 14:13:29",
"account": {
"id": "5",
"_id": "ACKEK3436WXOHF3GTRPX",
"userId": "1",
"currencyCode": "XAF",
"type": "2",
"balanceAmount": "0",
"withheldBalanceAmount": "0",
"name": "",
"description": "",
"avatarUrl": "https://staging-api.tranzak.me/fapi/static/img/logos/tz-logo-btn.png",
"label": "TYPE_CSA",
"isCsaOverdraftAccount": "1",
"isActive": "1",
"createdAt": "2022-03-25 13:20:51",
"lastUpdatedAt": null
},
"csa": {
"id": "5",
"countryCode": "CM",
"type": "profit_loss",
"accountId": "5",
"createdAt": "2022-03-25 12:20:51"
}
},
{
"id": "17",
"paymentId": "10",
"isCredit": "1",
"accountId": "5",
"amount": 1,
"currencyCode": "XAF",
"openingBalance": 0,
"closingBalance": 0,
"createdAt": "2022-03-25 14:13:29",
"account": {
"id": "5",
"_id": "ACKEK3436WXOHF3GTRPX",
"userId": "1",
"currencyCode": "XAF",
"type": "2",
"balanceAmount": "0",
"withheldBalanceAmount": "0",
"name": "",
"description": "",
"avatarUrl": "https://staging-api.tranzak.me/fapi/static/img/logos/tz-logo-btn.png",
"label": "TYPE_CSA",
"isCsaOverdraftAccount": "1",
"isActive": "1",
"createdAt": "2022-03-25 13:20:51",
"lastUpdatedAt": null
},
"csa": {
"id": "5",
"countryCode": "CM",
"type": "profit_loss",
"accountId": "5",
"createdAt": "2022-03-25 12:20:51"
}
}
],
"pageCount": [
1,
50
],
"pageSize": 20,
"totalItems": 11
},
"success": true
}
Invoice (BO)
Invoice management interface for BO
List Invoices
Endpoint
GET /backoffice/invoice/list
Request Params
[['id', 'orgUserId', 'createdByUserId', 'receivingAccountId', 'totalTax', 'subtotal', 'totalPaid', 'type', 'billToUserId', 'acceptPartialPayments', 'status', 'hasInternalPayment', 'hasExternalPayment', 'totalExternalPaymentAmount'], 'safe'],
[['_id', 'userInvoiceRef', 'title', 'currencyCode', 'issueDate', 'dueDate', 'billToName', 'billToAddress', 'billToEmail', 'memo', 'clientNote', 'cancellationNote', 'jsonData', 'appId', 'fileUrl', 'submittedAt', 'createdAt', 'updatedAt'], 'safe'
Response
Paginated list of invoices
{
"data": {
"currentPage": 1,
"hasMore": false,
"list": [
{
"id": "2",
"_id": "IV22032555JZXP3EWGZJ",
"orgUserId": "23",
"createdByUserId": "23",
"receivingAccountId": null,
"userInvoiceRef": "5555",
"title": "Plumbing services",
"totalTax": 100,
"subtotal": 2600,
"totalPaid": 0,
"currencyCode": "XAF",
"type": "1",
"issueDate": "2022-03-25",
"dueDate": "2022-03-25",
"billToName": "Plumbing Ltd",
"billToAddress": "Rue Druot",
"billToEmail": "trrr@tranzak.net",
"billToUserId": null,
"memo": "Memo for schoolmo for schoolmo for schoolmo for schoolmo for s",
"clientNote": "Client note is cool",
"acceptPartialPayments": "1",
"status": "2",
"cancellationNote": "",
"hasInternalPayment": "0",
"hasExternalPayment": "0",
"totalExternalPaymentAmount": "0",
"jsonData": "[{\"itemDescription\":\"some item\",\"quantity\":2,\"unitPrice\":1000},{\"itemDescription\":\"some item2\",\"quantity\":2,\"unitPrice\":100},{\"itemDescription\":\"some item2\",\"quantity\":2,\"unitPrice\":100},{\"itemDescription\":\"some item3\",\"quantity\":2,\"unitPrice\":100}]",
"appId": null,
"fileUrl": null,
"submittedAt": null,
"createdAt": "2022-03-25 16:45:11",
"updatedAt": null,
"statusText": "unpaid",
"typeText": "uploaded invoice file"
},
{
"id": "1",
"_id": "IV220325QHYLQ56O6GMF",
"orgUserId": "23",
"createdByUserId": "23",
"receivingAccountId": null,
"userInvoiceRef": "5555",
"title": "Plumbing services",
"totalTax": 100,
"subtotal": 2600,
"totalPaid": 0,
"currencyCode": "XAF",
"type": "1",
"issueDate": "2022-03-25",
"dueDate": "2022-03-25",
"billToName": "Plumbing Ltd",
"billToAddress": "Rue Druot",
"billToEmail": "trrr@tranzak.net",
"billToUserId": null,
"memo": "Memo for schoolmo for schoolmo for schoolmo for schoolmo for s",
"clientNote": "Client note is cool",
"acceptPartialPayments": "1",
"status": "2",
"cancellationNote": "",
"hasInternalPayment": "0",
"hasExternalPayment": "0",
"totalExternalPaymentAmount": "0",
"jsonData": "[{\"itemDescription\":\"some item\",\"quantity\":2,\"unitPrice\":1000},{\"itemDescription\":\"some item2\",\"quantity\":2,\"unitPrice\":100},{\"itemDescription\":\"some item2\",\"quantity\":2,\"unitPrice\":100},{\"itemDescription\":\"some item3\",\"quantity\":2,\"unitPrice\":100}]",
"appId": null,
"fileUrl": null,
"submittedAt": null,
"createdAt": "2022-03-25 16:45:10",
"updatedAt": null,
"statusText": "unpaid",
"typeText": "uploaded invoice file"
}
],
"pageCount": [
1,
50
],
"pageSize": 20,
"totalItems": 2
},
"success": true,
"debugInfo": null,
"debug": {
"lang": "en-US",
"dateTime": "2022-03-25T16:45:14+00:00",
"hostname": "cortex01",
"serverIpAddress": "192.168.137.2",
"clientIpAddress": "192.168.137.1",
"duration": "0.046s",
"userId": "1",
"staffId": "1",
"staffFirstName": null
}
}
View Invoice Details
Details of invoice
Endpoint
GET /backoffice/invoice/view?id=INVOICE_ID
Request Filters
| Parameter | Type | required | Description |
|---|---|---|---|
| id | String(100) | true | invoice ID |
| _id | String(100) | false | _id of invoice |
Response
{
"data": {
"_id": "IV220325QHYLQ56O6GMF",
"acceptPartialPayments": 1,
"appId": null,
"billToAddress": "Rue Druot",
"billToEmail": "trrr@tranzak.net",
"billToName": "Plumbing Ltd",
"billToUserId": null,
"cancellationNote": "",
"clientNote": "Client note is cool",
"createdAt": "2022-03-25 16:45:10",
"createdByUserId": 23,
"currencyCode": "XAF",
"dueDate": "2022-03-25",
"fileUrl": null,
"hasExternalPayment": 0,
"hasInternalPayment": 0,
"id": 1,
"issueDate": "2022-03-25",
"jsonData": "[{\"itemDescription\":\"some item\",\"quantity\":2,\"unitPrice\":1000},{\"itemDescription\":\"some item2\",\"quantity\":2,\"unitPrice\":100},{\"itemDescription\":\"some item2\",\"quantity\":2,\"unitPrice\":100},{\"itemDescription\":\"some item3\",\"quantity\":2,\"unitPrice\":100}]",
"memo": "Memo for schoolmo for schoolmo for schoolmo for schoolmo for s",
"orgUserId": 23,
"receivingAccountId": null,
"status": 2,
"statusText": "unpaid",
"submittedAt": null,
"subtotal": 2600,
"title": "Plumbing services",
"totalExternalPaymentAmount": "0",
"totalPaid": 0,
"totalTax": 100,
"type": 1,
"typeText": "uploaded invoice file",
"updatedAt": null,
"userInvoiceRef": "5555"
},
"success": true,
"debugInfo": null,
"debug": {
"lang": "en-US",
"dateTime": "2022-03-25T16:46:42+00:00",
"hostname": "cortex01",
"serverIpAddress": "192.168.137.2",
"clientIpAddress": "192.168.137.1",
"duration": "0.039s",
"userId": "1",
"staffId": "1",
"staffFirstName": null
}
}
Invoice Payments
Paginated list of invoice payments. Use filters to navigate
Endpoint
GET /backoffice/invoice/list-payments
Request Params
[['id', 'createdByUserId', 'invoiceId', 'amount', 'paymentId', 'paymentSourceId' , '_id', 'note', ], 'safe'],
Response
{
"data": {
"currentPage": 1,
"hasMore": false,
"list": [
{
"_id": "IPQVF4YCA7QX05JNHM8K",
"createdByUserId": "23",
"amount": 100,
"paymentId": null,
"paymentSourceId": "2",
"note": "Payment via cash",
"createdAt": "2022-03-25 16:49:35",
"invoice": {
"id": "2",
"_id": "IV22032555JZXP3EWGZJ",
"orgUserId": "23",
"createdByUserId": "23",
"receivingAccountId": null,
"userInvoiceRef": "5555",
"title": "Plumbing services",
"totalTax": 100,
"subtotal": 2600,
"totalPaid": 200,
"currencyCode": "XAF",
"type": "1",
"issueDate": "2022-03-25",
"dueDate": "2022-03-25",
"billToName": "Plumbing Ltd",
"billToAddress": "Rue Druot",
"billToEmail": "trrr@tranzak.net",
"billToUserId": null,
"memo": "Memo for schoolmo for schoolmo for schoolmo for schoolmo for s",
"clientNote": "Client note is cool",
"acceptPartialPayments": "1",
"status": "3",
"cancellationNote": "",
"hasInternalPayment": "0",
"hasExternalPayment": "1",
"totalExternalPaymentAmount": "200",
"jsonData": "[{\"itemDescription\":\"some item\",\"quantity\":2,\"unitPrice\":1000},{\"itemDescription\":\"some item2\",\"quantity\":2,\"unitPrice\":100},{\"itemDescription\":\"some item2\",\"quantity\":2,\"unitPrice\":100},{\"itemDescription\":\"some item3\",\"quantity\":2,\"unitPrice\":100}]",
"appId": null,
"fileUrl": null,
"submittedAt": null,
"createdAt": "2022-03-25 16:45:11",
"updatedAt": "2022-03-25 17:49:35",
"statusText": "partially paid",
"typeText": null
},
"paymentSourceText": "paid via cash"
},
{
"_id": "IPMT6RSKX6PI8XWBTCTA",
"createdByUserId": "23",
"amount": 100,
"paymentId": null,
"paymentSourceId": "2",
"note": "Payment via cash",
"createdAt": "2022-03-25 16:49:34",
"invoice": {
"id": "2",
"_id": "IV22032555JZXP3EWGZJ",
"orgUserId": "23",
"createdByUserId": "23",
"receivingAccountId": null,
"userInvoiceRef": "5555",
"title": "Plumbing services",
"totalTax": 100,
"subtotal": 2600,
"totalPaid": 200,
"currencyCode": "XAF",
"type": "1",
"issueDate": "2022-03-25",
"dueDate": "2022-03-25",
"billToName": "Plumbing Ltd",
"billToAddress": "Rue Druot",
"billToEmail": "trrr@tranzak.net",
"billToUserId": null,
"memo": "Memo for schoolmo for schoolmo for schoolmo for schoolmo for s",
"clientNote": "Client note is cool",
"acceptPartialPayments": "1",
"status": "3",
"cancellationNote": "",
"hasInternalPayment": "0",
"hasExternalPayment": "1",
"totalExternalPaymentAmount": "200",
"jsonData": "[{\"itemDescription\":\"some item\",\"quantity\":2,\"unitPrice\":1000},{\"itemDescription\":\"some item2\",\"quantity\":2,\"unitPrice\":100},{\"itemDescription\":\"some item2\",\"quantity\":2,\"unitPrice\":100},{\"itemDescription\":\"some item3\",\"quantity\":2,\"unitPrice\":100}]",
"appId": null,
"fileUrl": null,
"submittedAt": null,
"createdAt": "2022-03-25 16:45:11",
"updatedAt": "2022-03-25 17:49:35",
"statusText": "partially paid",
"typeText": null
},
"paymentSourceText": "paid via cash"
}
],
"pageCount": [
1,
50
],
"pageSize": 20,
"totalItems": 2
},
"success": true,
"debugInfo": null,
"debug": {
"lang": "en-US",
"dateTime": "2022-03-25T16:49:38+00:00",
"hostname": "cortex01",
"serverIpAddress": "192.168.137.2",
"clientIpAddress": "192.168.137.1",
"duration": "0.044s",
"userId": "1",
"staffId": "1",
"staffFirstName": null
}
}
Merchant (BO)
Merchant management interface. Use standard key->value display method for data presentation
List Merchant Accounts
Paginated list of merchants. Many filters available.
Endpoint
GET /backoffice/merchant/list
Request Params
Filters
[['id', 'userId', 'commissionCap', 'minSettlementAmount', 'settlementWindowId', 'settlementAccountId', 'enableManualSettlement', 'maxActiveCoupons', 'maxCouponsPerPromotion', 'maxLuckyMoneyQuantity', 'maxLuckyMoneyAmount', 'enableGuestPayments', 'enableInPersonPayment', 'maxSubAccounts', 'enableGiftCard', 'enablePreFinancedGiftCard', 'enableVirtualAccounts', 'maxVirtualAccounts', 'enableMembershipService', 'enableCrossBorderCollection', 'enableCustomCouponCodes', 'freezeSettlement'], 'safe'],
[['commission', 'internalSettlementCommission' , 'gracePeriodEndsAt', 'payoutAllowedIpAddressList',], 'safe'],
Response
{
"data": {
"currentPage": 1,
"hasMore": true,
"list": [
{
"id": "21",
"userId": "43",
"commission": null,
"internalSettlementCommission": null,
"commissionCap": null,
"minSettlementAmount": null,
"settlementWindowId": null,
"settlementAccountId": null,
"enableManualSettlement": "0",
"maxActiveCoupons": null,
"maxCouponsPerPromotion": null,
"maxLuckyMoneyQuantity": null,
"maxLuckyMoneyAmount": null,
"enableGuestPayments": "0",
"enableInPersonPayment": "0",
"maxSubAccounts": null,
"enableGiftCard": "0",
"enablePreFinancedGiftCard": null,
"enableVirtualAccounts": "0",
"maxVirtualAccounts": null,
"gracePeriodEndsAt": "2022-04-24 12:20:53",
"enableMembershipService": "0",
"enableCrossBorderCollection": "0",
"enableCustomCouponCodes": "0",
"payoutAllowedIpAddressList": null,
"freezeSettlement": null,
"giftCardFundingAccountId": "222",
"membershipDebitAccountId": "223",
"createdAt": "2022-03-25 12:20:53",
"lastUpdatedAt": null,
"lastUpdatedByStaffId": null
},
],
"pageCount": [
1,
50
],
"pageSize": 20,
"totalItems": 21
},
"success": true,
"debugInfo": null,
"debug": {
"lang": "en-US",
"dateTime": "2022-03-25T14:03:11+00:00",
"hostname": "cortex01",
"serverIpAddress": "192.168.137.2",
"clientIpAddress": "192.168.137.1",
"duration": "0.092s",
"userId": "1",
"staffId": "1",
"staffFirstName": null
}
}
View Merchant Details
Displays merchant details
Request Endpoint
GET /backoffice/merchant/view?id=userId
Request Filter Params
{
"data": {
"commission": null,
"commissionCap": null,
"createdAt": "2022-03-25 12:20:52",
"enableCrossBorderCollection": 0,
"enableCustomCouponCodes": 0,
"enableGiftCard": 0,
"enableGuestPayments": 0,
"enableInPersonPayment": 0,
"enableManualSettlement": 0,
"enableMembershipService": 0,
"enablePreFinancedGiftCard": null,
"enableVirtualAccounts": 0,
"freezeSettlement": null,
"giftCardFundingAccount": {
"id": 42,
"_id": "ACNLEQTH9YS9MUO6T9VX",
"userId": 23,
"currencyCode": "XAF",
"type": 8,
"balanceAmount": 0,
"withheldBalanceAmount": 0,
"name": "",
"description": "",
"avatarUrl": "https://staging-api.tranzak.me/fapi/static/img/logos/tz-logo-btn.png",
"label": "TYPE_MERCHANT_GIFT_CARD_FUNDING",
"isCsaOverdraftAccount": 0,
"isActive": 1,
"createdAt": "2022-03-25 13:20:52",
"lastUpdatedAt": null,
"typeText": "Gift card funding account"
},
"giftCardFundingAccountId": 42,
"gracePeriodEndsAt": "2022-04-24 12:20:52",
"id": 1,
"internalSettlementCommission": null,
"lastUpdatedAt": null,
"lastUpdatedByStaffId": null,
"maxActiveCoupons": null,
"maxCouponsPerPromotion": null,
"maxLuckyMoneyAmount": null,
"maxLuckyMoneyQuantity": null,
"maxSubAccounts": null,
"maxVirtualAccounts": null,
"membershipDebitAccount": {
"id": 43,
"_id": "ACICJQP6IG9RVIP5OPJA",
"userId": 23,
"currencyCode": "XAF",
"type": 17,
"balanceAmount": 0,
"withheldBalanceAmount": 0,
"name": "",
"description": "",
"avatarUrl": "https://staging-api.tranzak.me/fapi/static/img/logos/tz-logo-btn.png",
"label": "MCH_MEMBERSHIP_DEBIT",
"isCsaOverdraftAccount": 0,
"isActive": 1,
"createdAt": "2022-03-25 13:20:52",
"lastUpdatedAt": null,
"typeText": "Merchant membership debit account"
},
"membershipDebitAccountId": 43,
"minSettlementAmount": null,
"payoutAllowedIpAddressList": null,
"settlementAccountId": null,
"settlementWindowId": null,
"user": {
"id": 23,
"_id": "tz23",
"ufId": null,
"orgUserId": null,
"scopeId": null,
"roleId": 1000,
"primaryCurrencyCode": "XAF",
"residenceCountryCode": "CM",
"type": 3,
"firstName": null,
"lastName": null,
"displayName": "tz23",
"verifiedName": null,
"paymentPin": "$2y$05$UnwJHcr3sL9n34rWX/i2oO4OeLhJ4GeSUdZJNP6H72ouUAO4ZkpzO",
"phoneNumber": null,
"language": "en_GB",
"timeZone": "Africa/Douala",
"isRNVerified": 0,
"loginEnabled": 1,
"avatarUrl": null,
"defaultSendingAccountId": null,
"canReceivePayment": 1,
"canSendPayment": 1,
"createdAt": "2022-03-25 12:20:51",
"lastUpdatedAt": "2022-03-25 13:20:52"
},
"userId": 23
},
"success": true,
"debugInfo": null,
"debug": {
"lang": "en-US",
"dateTime": "2022-03-25T14:23:03+00:00",
"hostname": "cortex01",
"serverIpAddress": "192.168.137.2",
"clientIpAddress": "192.168.137.1",
"duration": "0.055s",
"userId": "1",
"staffId": "1",
"staffFirstName": null
}
}
Update Merchant Settings
Updates updatable params
Request Endpoint
POST /backoffice/merchant/update
Request Params
{
"userId": 1,
"commission": null,
"commissionCap": null,
"enableCrossBorderCollection": 0,
"enableCustomCouponCodes": 0,
"enableGiftCard": 1,
"enableGuestPayments": 0,
"enableInPersonPayment": 0,
"enableManualSettlement": 0,
"enableMembershipService": 0,
"enablePreFinancedGiftCard": 1,
"enableVirtualAccounts": 0,
"freezeSettlement": null,
"gracePeriodEndsAt": "2022-04-21 12:04:56",
"internalSettlementCommission": null,
"lastUpdatedAt": null,
"maxActiveCoupons": null,
"maxCouponsPerPromotion": null,
"maxLuckyMoneyAmount": null,
"maxLuckyMoneyQuantity": null,
"maxSubAccounts": null,
"maxVirtualAccounts": null,
"minSettlementAmount": null
}
Response
See VIEW Section
List Merchant Sub-Accounts
Displays paginated list of sub-accounts
Request Endpoint
GET /backoffice/merchant/sub-accounts
Request Params
[['merchantId' , 'accountId', 'createdByUserId', 'enableManualSettlement', 'settlementAccountId', 'settlementBatchId', 'crossBorderSettlementBatchId'], 'safe'],
Response
{
"data": {
"currentPage": 1,
"hasMore": true,
"list": [
{
"accountId": "221",
"createdByUserId": "43",
"enableManualSettlement": null,
"settlementAccountId": null,
"settlementBatchId": null,
"crossBorderSettlementBatchId": null,
"createdAt": "2022-03-25 12:20:53",
"lastUpdatedAt": null,
"account": {
"id": "221",
"_id": "MSA9WQC3ZZ17XNCJ11KQ",
"userId": "43",
"currencyCode": "XAF",
"type": "5",
"balanceAmount": "0",
"withheldBalanceAmount": "0",
"name": "",
"description": "",
"avatarUrl": "https://staging-api.tranzak.me/fapi/static/img/logos/tz-logo-btn-black.png",
"label": "TYPE_MERCHANT_DEFAULT",
"isCsaOverdraftAccount": "0",
"isActive": "1",
"createdAt": "2022-03-25 13:20:53",
"lastUpdatedAt": null
},
"merchant": {
"id": "21",
"userId": "43",
"commission": null,
"internalSettlementCommission": null,
"commissionCap": null,
"minSettlementAmount": null,
"settlementWindowId": null,
"settlementAccountId": null,
"enableManualSettlement": "0",
"maxActiveCoupons": null,
"maxCouponsPerPromotion": null,
"maxLuckyMoneyQuantity": null,
"maxLuckyMoneyAmount": null,
"enableGuestPayments": "0",
"enableInPersonPayment": "0",
"maxSubAccounts": null,
"enableGiftCard": "0",
"enablePreFinancedGiftCard": null,
"enableVirtualAccounts": "0",
"maxVirtualAccounts": null,
"gracePeriodEndsAt": "2022-04-24 12:20:53",
"enableMembershipService": "0",
"enableCrossBorderCollection": "0",
"enableCustomCouponCodes": "0",
"payoutAllowedIpAddressList": null,
"freezeSettlement": null,
"giftCardFundingAccountId": "222",
"membershipDebitAccountId": "223",
"createdAt": "2022-03-25 12:20:53",
"lastUpdatedAt": null,
"lastUpdatedByStaffId": null
},
"user": {
"id": "43",
"_id": "tz43",
"ufId": null,
"orgUserId": null,
"scopeId": null,
"roleId": "1000",
"primaryCurrencyCode": "XAF",
"residenceCountryCode": "CM",
"type": "3",
"firstName": null,
"lastName": null,
"displayName": "tz43",
"verifiedName": null,
"paymentPin": "$2y$05$rzEUcrWUyKnqY8ccMBejYOnISzontDQsbNPWpDOPwdW.NyQoe15PC",
"phoneNumber": null,
"language": "en_GB",
"timeZone": "Africa/Douala",
"isRNVerified": "0",
"loginEnabled": "1",
"avatarUrl": null,
"defaultSendingAccountId": null,
"canReceivePayment": "1",
"canSendPayment": "1",
"createdAt": "2022-03-25 12:20:53",
"lastUpdatedAt": "2022-03-25 13:20:53"
},
"merchantId": "21"
},
{
"accountId": "212",
"createdByUserId": "42",
"enableManualSettlement": null,
"settlementAccountId": null,
"settlementBatchId": null,
"crossBorderSettlementBatchId": null,
"createdAt": "2022-03-25 12:20:53",
"lastUpdatedAt": null,
"account": {
"id": "212",
"_id": "MSAUHZXYRO2US6HHTCNX",
"userId": "42",
"currencyCode": "XAF",
"type": "5",
"balanceAmount": "0",
"withheldBalanceAmount": "0",
"name": "",
"description": "",
"avatarUrl": "https://staging-api.tranzak.me/fapi/static/img/logos/tz-logo-btn-black.png",
"label": "TYPE_MERCHANT_DEFAULT",
"isCsaOverdraftAccount": "0",
"isActive": "1",
"createdAt": "2022-03-25 13:20:53",
"lastUpdatedAt": null
},
"merchant": {
"id": "20",
"userId": "42",
"commission": null,
"internalSettlementCommission": null,
"commissionCap": null,
"minSettlementAmount": null,
"settlementWindowId": null,
"settlementAccountId": null,
"enableManualSettlement": "0",
"maxActiveCoupons": null,
"maxCouponsPerPromotion": null,
"maxLuckyMoneyQuantity": null,
"maxLuckyMoneyAmount": null,
"enableGuestPayments": "0",
"enableInPersonPayment": "0",
"maxSubAccounts": null,
"enableGiftCard": "0",
"enablePreFinancedGiftCard": null,
"enableVirtualAccounts": "0",
"maxVirtualAccounts": null,
"gracePeriodEndsAt": "2022-04-24 12:20:53",
"enableMembershipService": "0",
"enableCrossBorderCollection": "0",
"enableCustomCouponCodes": "0",
"payoutAllowedIpAddressList": null,
"freezeSettlement": null,
"giftCardFundingAccountId": "213",
"membershipDebitAccountId": "214",
"createdAt": "2022-03-25 12:20:53",
"lastUpdatedAt": null,
"lastUpdatedByStaffId": null
},
"user": {
"id": "42",
"_id": "tz42",
"ufId": null,
"orgUserId": null,
"scopeId": null,
"roleId": "1000",
"primaryCurrencyCode": "XAF",
"residenceCountryCode": "CM",
"type": "3",
"firstName": null,
"lastName": null,
"displayName": "tz42",
"verifiedName": null,
"phoneNumber": null,
"language": "en_GB",
"timeZone": "Africa/Douala",
"isRNVerified": "0",
"loginEnabled": "1",
"avatarUrl": null,
"defaultSendingAccountId": null,
"canReceivePayment": "1",
"canSendPayment": "1",
"createdAt": "2022-03-25 12:20:53",
"lastUpdatedAt": "2022-03-25 13:20:53"
},
"merchantId": "20"
},
{
"accountId": "203",
"createdByUserId": "41",
"enableManualSettlement": null,
"settlementAccountId": null,
"settlementBatchId": null,
"crossBorderSettlementBatchId": null,
"createdAt": "2022-03-25 12:20:53",
"lastUpdatedAt": null,
"account": {
"id": "203",
"_id": "MSA3QPYCAARSJ772QMNG",
"userId": "41",
"currencyCode": "XAF",
"type": "5",
"balanceAmount": "0",
"withheldBalanceAmount": "0",
"name": "",
"description": "",
"avatarUrl": "https://staging-api.tranzak.me/fapi/static/img/logos/tz-logo-btn-black.png",
"label": "TYPE_MERCHANT_DEFAULT",
"isCsaOverdraftAccount": "0",
"isActive": "1",
"createdAt": "2022-03-25 13:20:53",
"lastUpdatedAt": null
},
"merchant": {
"id": "19",
"userId": "41",
"commission": null,
"internalSettlementCommission": null,
"commissionCap": null,
"minSettlementAmount": null,
"settlementWindowId": null,
"settlementAccountId": null,
"enableManualSettlement": "0",
"maxActiveCoupons": null,
"maxCouponsPerPromotion": null,
"maxLuckyMoneyQuantity": null,
"maxLuckyMoneyAmount": null,
"enableGuestPayments": "0",
"enableInPersonPayment": "0",
"maxSubAccounts": null,
"enableGiftCard": "0",
"enablePreFinancedGiftCard": null,
"enableVirtualAccounts": "0",
"maxVirtualAccounts": null,
"gracePeriodEndsAt": "2022-04-24 12:20:53",
"enableMembershipService": "0",
"enableCrossBorderCollection": "0",
"enableCustomCouponCodes": "0",
"payoutAllowedIpAddressList": null,
"freezeSettlement": null,
"giftCardFundingAccountId": "204",
"membershipDebitAccountId": "205",
"createdAt": "2022-03-25 12:20:53",
"lastUpdatedAt": null,
"lastUpdatedByStaffId": null
},
"user": {
"id": "41",
"_id": "tz41",
"ufId": null,
"orgUserId": null,
"scopeId": null,
"roleId": "1000",
"primaryCurrencyCode": "XAF",
"residenceCountryCode": "CM",
"type": "3",
"firstName": null,
"lastName": null,
"displayName": "tz41",
"verifiedName": null,
"paymentPin": "$2y$05$YNpO8ab8tRnmwzyeqig0eeMrQUByR7J2ir0jgkuJASP82w1yTgJDi",
"phoneNumber": null,
"language": "en_GB",
"timeZone": "Africa/Douala",
"isRNVerified": "0",
"loginEnabled": "1",
"avatarUrl": null,
"defaultSendingAccountId": null,
"canReceivePayment": "1",
"canSendPayment": "1",
"createdAt": "2022-03-25 12:20:53",
"lastUpdatedAt": "2022-03-25 13:20:53"
},
"merchantId": "19"
},
{
"accountId": "194",
"createdByUserId": "40",
"enableManualSettlement": null,
"settlementAccountId": null,
"settlementBatchId": null,
"crossBorderSettlementBatchId": null,
"createdAt": "2022-03-25 12:20:53",
"lastUpdatedAt": null,
"account": {
"id": "194",
"_id": "MSAKHMWR9BX7JTZNAE48",
"userId": "40",
"currencyCode": "XAF",
"type": "5",
"balanceAmount": "0",
"withheldBalanceAmount": "0",
"name": "",
"description": "",
"avatarUrl": "https://staging-api.tranzak.me/fapi/static/img/logos/tz-logo-btn-black.png",
"label": "TYPE_MERCHANT_DEFAULT",
"isCsaOverdraftAccount": "0",
"isActive": "1",
"createdAt": "2022-03-25 13:20:53",
"lastUpdatedAt": null
},
"merchant": {
"id": "18",
"userId": "40",
"commission": null,
"internalSettlementCommission": null,
"commissionCap": null,
"minSettlementAmount": null,
"settlementWindowId": null,
"settlementAccountId": null,
"enableManualSettlement": "0",
"maxActiveCoupons": null,
"maxCouponsPerPromotion": null,
"maxLuckyMoneyQuantity": null,
"maxLuckyMoneyAmount": null,
"enableGuestPayments": "0",
"enableInPersonPayment": "0",
"maxSubAccounts": null,
"enableGiftCard": "0",
"enablePreFinancedGiftCard": null,
"enableVirtualAccounts": "0",
"maxVirtualAccounts": null,
"gracePeriodEndsAt": "2022-04-24 12:20:53",
"enableMembershipService": "0",
"enableCrossBorderCollection": "0",
"enableCustomCouponCodes": "0",
"payoutAllowedIpAddressList": null,
"freezeSettlement": null,
"giftCardFundingAccountId": "195",
"membershipDebitAccountId": "196",
"createdAt": "2022-03-25 12:20:53",
"lastUpdatedAt": null,
"lastUpdatedByStaffId": null
},
"user": {
"id": "40",
"_id": "tz40",
"ufId": null,
"orgUserId": null,
"scopeId": null,
"roleId": "1000",
"primaryCurrencyCode": "XAF",
"residenceCountryCode": "CM",
"type": "3",
"firstName": null,
"lastName": null,
"displayName": "tz40",
"verifiedName": null,
"paymentPin": "$2y$05$BIxny0oZLOKpSMVAsqVc0eHRYL1LdAR8qb39iGoyW1i89Q3fw.5O.",
"phoneNumber": null,
"language": "en_GB",
"timeZone": "Africa/Douala",
"isRNVerified": "0",
"loginEnabled": "1",
"avatarUrl": null,
"defaultSendingAccountId": null,
"canReceivePayment": "1",
"canSendPayment": "1",
"createdAt": "2022-03-25 12:20:53",
"lastUpdatedAt": "2022-03-25 13:20:53"
},
"merchantId": "18"
},
],
"pageCount": [
1,
50
],
"pageSize": 20,
"totalItems": 21
},
"success": true,
"debugInfo": null,
"debug": {
"lang": "en-US",
"dateTime": "2022-03-25T14:20:31+00:00",
"hostname": "cortex01",
"serverIpAddress": "192.168.137.2",
"clientIpAddress": "192.168.137.1",
"duration": "0.055s",
"userId": "1",
"staffId": "1",
"staffFirstName": null
}
}
Topup Merchant Gift Card Pack Account
Adds arbitrary funds into the merchant gift card pack account. This will be used for pre-financed GCs.
Request Endpoint
GET /merchant/topup-gift-card-account
Request Params
{
"id": 1,
"topupAmount": 100000000
}
Response
See VIEW Merchant section
List Merchant Settlement Batches
Display paginated list of merchant batches.
Request Endpoint
/backoffice/merchant/settlement-batches
Request Filters
[['merchantId' , 'id', 'merchantUserId', 'accountId', 'isManualSettlement', 'isCrossBorder', 'destinationAccountId', 'clearingTransactionId', 'amount', 'fee', 'status', '_id', 'dueDate', 'createdAt', 'processingStartTime', 'processingEndTime', 'reportFilePath'], 'safe'],
Response
{
"data": {
"currentPage": 1,
"hasMore": false,
"list": [
{
"id": "1",
"_id": "MSBZI33LQ0FQTAT3",
"merchantUserId": "23",
"accountId": "41",
"isManualSettlement": null,
"isCrossBorder": "0",
"destinationAccountId": null,
"clearingTransactionId": null,
"amount": null,
"fee": null,
"status": "1",
"dueDate": "2022-03-26 00:00:00",
"createdAt": "2022-03-25 12:23:42",
"processingStartTime": null,
"processingEndTime": null,
"reportFilePath": null,
"lastUpdatedAt": null,
"account": {
"id": "41",
"_id": "MSA4LDJ0LYRFWCXL29C8",
"userId": "23",
"currencyCode": "XAF",
"type": "5",
"balanceAmount": "1000",
"withheldBalanceAmount": "0",
"name": "",
"description": "",
"avatarUrl": "https://staging-api.tranzak.me/fapi/static/img/logos/tz-logo-btn-black.png",
"label": "TYPE_MERCHANT_DEFAULT",
"isCsaOverdraftAccount": "0",
"isActive": "1",
"createdAt": "2022-03-25 13:20:52",
"lastUpdatedAt": "2022-03-25 13:39:24"
},
"user": {
"id": "23",
"_id": "tz23",
"ufId": null,
"orgUserId": null,
"scopeId": null,
"roleId": "1000",
"primaryCurrencyCode": "XAF",
"residenceCountryCode": "CM",
"type": "3",
"firstName": null,
"lastName": null,
"displayName": "tz23",
"verifiedName": null,
"paymentPin": "$2y$05$UnwJHcr3sL9n34rWX/i2oO4OeLhJ4GeSUdZJNP6H72ouUAO4ZkpzO",
"phoneNumber": null,
"language": "en_GB",
"timeZone": "Africa/Douala",
"isRNVerified": "0",
"loginEnabled": "1",
"avatarUrl": null,
"defaultSendingAccountId": null,
"canReceivePayment": "1",
"canSendPayment": "1",
"createdAt": "2022-03-25 12:20:51",
"lastUpdatedAt": "2022-03-25 13:20:52"
},
"merchant": {
"id": "1",
"userId": "23",
"commission": null,
"internalSettlementCommission": null,
"commissionCap": null,
"minSettlementAmount": null,
"settlementWindowId": null,
"settlementAccountId": null,
"enableManualSettlement": "0",
"maxActiveCoupons": null,
"maxCouponsPerPromotion": null,
"maxLuckyMoneyQuantity": null,
"maxLuckyMoneyAmount": null,
"enableGuestPayments": "0",
"enableInPersonPayment": "0",
"maxSubAccounts": null,
"enableGiftCard": "0",
"enablePreFinancedGiftCard": null,
"enableVirtualAccounts": "0",
"maxVirtualAccounts": null,
"gracePeriodEndsAt": "2022-04-24 12:20:52",
"enableMembershipService": "0",
"enableCrossBorderCollection": "0",
"enableCustomCouponCodes": "0",
"payoutAllowedIpAddressList": null,
"freezeSettlement": null,
"giftCardFundingAccountId": "42",
"membershipDebitAccountId": "43",
"createdAt": "2022-03-25 12:20:52",
"lastUpdatedAt": null,
"lastUpdatedByStaffId": null
},
"subAccount": {
"accountId": "41",
"createdByUserId": "23",
"enableManualSettlement": null,
"settlementAccountId": null,
"settlementBatchId": "1",
"crossBorderSettlementBatchId": null,
"createdAt": "2022-03-25 12:20:52",
"lastUpdatedAt": "2022-03-25 13:23:42"
},
"destinationAccount": null,
"destinationPaymentMethod": null,
"destinationTreasuryService": null,
"destinationTreasury": null,
"merchantId": "1",
"statusText": "pending"
}
],
"pageCount": [
1,
50
],
"pageSize": 20,
"totalItems": 1
},
"success": true,
"debugInfo": null,
"debug": {
"lang": "en-US",
"dateTime": "2022-03-25T14:29:01+00:00",
"hostname": "cortex01",
"serverIpAddress": "192.168.137.2",
"clientIpAddress": "192.168.137.1",
"duration": "0.056s",
"userId": "1",
"staffId": "1",
"staffFirstName": null
}
}
List Merchant Settlement Jobs
Settlement jobs are transactions that are pending settlement. Displays paginated list
Request Endpoint
GET /backoffice/merchant/settlement-jobs
Request Params
[['merchantId' ,'id', 'accountId', 'paymentId', 'settlementBatchId', 'amount'], 'safe'],
Response
{
"data": {
"currentPage": 1,
"hasMore": false,
"list": [
{
"id": "3",
"accountId": "41",
"paymentId": "6",
"settlementBatchId": "1",
"amount": -1000,
"createdAt": "2022-03-25 12:39:24",
"lastUpdatedAt": null,
"batch": {
"id": "1",
"_id": "MSBZI33LQ0FQTAT3",
"merchantUserId": "23",
"accountId": "41",
"isManualSettlement": null,
"isCrossBorder": "0",
"destinationAccountId": null,
"clearingTransactionId": null,
"amount": null,
"fee": null,
"status": "1",
"dueDate": "2022-03-26 00:00:00",
"createdAt": "2022-03-25 12:23:42",
"processingStartTime": null,
"processingEndTime": null,
"reportFilePath": null,
"lastUpdatedAt": null
},
"payment": {
"id": "6",
"_id": "REF220325ICZW4WYB2SK",
"parentId": "5",
"status": "30",
"type": "5",
"serviceType": "10",
"serviceId": "1",
"amount": "1000",
"currencyCode": "XAF",
"collectedCouponId": null,
"couponAmount": null,
"tipAmount": "0",
"inboundExternalPaymentId": null,
"recurringPaymentFlag": null,
"description": "Transfer to tz25",
"payerOrgUserId": "23",
"payerUserId": "23",
"payerName": "tz23",
"payerAccountId": "41",
"presPayerAmount": "1000",
"payerGiftCardAmount": "0",
"payerGiftCardAccountId": null,
"payerMembershipId": null,
"payerMembershipAmount": "0",
"payerBonusRewardId": null,
"payerBonusRewardAmount": "0",
"payerFee": "0",
"beneUserId": "25",
"beneAccountId": "55",
"beneName": "tz25",
"presBeneAmount": "1000",
"beneFee": "0",
"beneGiftCardDebitAmount": "0",
"beneMembershipDebitAmount": "0",
"isInitiatedByPayer": "1",
"createdAt": "2022-03-25 12:39:24.714306",
"creationStartTime": "2022-03-25 12:39:24.706462",
"executionStartTime": "2022-03-25 12:39:24.716061",
"processingAt": null,
"completedAt": "2022-03-25 13:39:24.723058"
},
"account": {
"id": "41",
"_id": "MSA4LDJ0LYRFWCXL29C8",
"userId": "23",
"currencyCode": "XAF",
"type": "5",
"balanceAmount": 1000,
"withheldBalanceAmount": 0,
"name": "",
"description": "",
"avatarUrl": "https://staging-api.tranzak.me/fapi/static/img/logos/tz-logo-btn-black.png",
"label": "TYPE_MERCHANT_DEFAULT",
"isCsaOverdraftAccount": "0",
"isActive": "1",
"createdAt": "2022-03-25 13:20:52",
"lastUpdatedAt": "2022-03-25 13:39:24",
"typeText": "Merchant account (Default)"
},
"merchant": {
"id": "1",
"userId": "23",
"commission": null,
"internalSettlementCommission": null,
"commissionCap": null,
"minSettlementAmount": null,
"settlementWindowId": null,
"settlementAccountId": null,
"enableManualSettlement": "0",
"maxActiveCoupons": null,
"maxCouponsPerPromotion": null,
"maxLuckyMoneyQuantity": null,
"maxLuckyMoneyAmount": null,
"enableGuestPayments": "0",
"enableInPersonPayment": "0",
"maxSubAccounts": null,
"enableGiftCard": "0",
"enablePreFinancedGiftCard": null,
"enableVirtualAccounts": "0",
"maxVirtualAccounts": null,
"gracePeriodEndsAt": "2022-04-24 12:20:52",
"enableMembershipService": "0",
"enableCrossBorderCollection": "0",
"enableCustomCouponCodes": "0",
"payoutAllowedIpAddressList": null,
"freezeSettlement": null,
"giftCardFundingAccountId": "42",
"membershipDebitAccountId": "43",
"createdAt": "2022-03-25 12:20:52",
"lastUpdatedAt": null,
"lastUpdatedByStaffId": null
},
"subAccount": {
"accountId": "41",
"createdByUserId": "23",
"enableManualSettlement": null,
"settlementAccountId": null,
"settlementBatchId": "1",
"crossBorderSettlementBatchId": null,
"createdAt": "2022-03-25 12:20:52",
"lastUpdatedAt": "2022-03-25 13:23:42"
},
"merchantId": "1"
},
{
"id": "2",
"accountId": "41",
"paymentId": "5",
"settlementBatchId": "1",
"amount": 1000,
"createdAt": "2022-03-25 12:38:51",
"lastUpdatedAt": null,
"batch": {
"id": "1",
"_id": "MSBZI33LQ0FQTAT3",
"merchantUserId": "23",
"accountId": "41",
"isManualSettlement": null,
"isCrossBorder": "0",
"destinationAccountId": null,
"clearingTransactionId": null,
"amount": null,
"fee": null,
"status": "1",
"dueDate": "2022-03-26 00:00:00",
"createdAt": "2022-03-25 12:23:42",
"processingStartTime": null,
"processingEndTime": null,
"reportFilePath": null,
"lastUpdatedAt": null
},
"payment": {
"id": "5",
"_id": "MP2203253SXXKQ1XDRZW",
"parentId": null,
"status": "-11",
"type": "3",
"serviceType": "24",
"serviceId": "4",
"amount": "1000",
"currencyCode": "XAF",
"collectedCouponId": null,
"couponAmount": null,
"tipAmount": "0",
"inboundExternalPaymentId": null,
"recurringPaymentFlag": null,
"description": "A transaction for the world",
"payerOrgUserId": "25",
"payerUserId": "25",
"payerName": "tz25",
"payerAccountId": "55",
"presPayerAmount": "1000",
"payerGiftCardAmount": "0",
"payerGiftCardAccountId": null,
"payerMembershipId": null,
"payerMembershipAmount": "0",
"payerBonusRewardId": null,
"payerBonusRewardAmount": "0",
"payerFee": "0",
"beneUserId": "23",
"beneAccountId": "41",
"beneName": "tz23",
"presBeneAmount": "1000",
"beneFee": "0",
"beneGiftCardDebitAmount": "0",
"beneMembershipDebitAmount": "0",
"isInitiatedByPayer": "1",
"createdAt": "2022-03-25 12:38:51.624635",
"creationStartTime": "2022-03-25 12:38:51.621631",
"executionStartTime": "2022-03-25 12:38:51.627295",
"processingAt": null,
"completedAt": "2022-03-25 13:38:51.633991"
},
"account": {
"id": "41",
"_id": "MSA4LDJ0LYRFWCXL29C8",
"userId": "23",
"currencyCode": "XAF",
"type": "5",
"balanceAmount": 1000,
"withheldBalanceAmount": 0,
"name": "",
"description": "",
"avatarUrl": "https://staging-api.tranzak.me/fapi/static/img/logos/tz-logo-btn-black.png",
"label": "TYPE_MERCHANT_DEFAULT",
"isCsaOverdraftAccount": "0",
"isActive": "1",
"createdAt": "2022-03-25 13:20:52",
"lastUpdatedAt": "2022-03-25 13:39:24",
"typeText": "Merchant account (Default)"
},
"merchant": {
"id": "1",
"userId": "23",
"commission": null,
"internalSettlementCommission": null,
"commissionCap": null,
"minSettlementAmount": null,
"settlementWindowId": null,
"settlementAccountId": null,
"enableManualSettlement": "0",
"maxActiveCoupons": null,
"maxCouponsPerPromotion": null,
"maxLuckyMoneyQuantity": null,
"maxLuckyMoneyAmount": null,
"enableGuestPayments": "0",
"enableInPersonPayment": "0",
"maxSubAccounts": null,
"enableGiftCard": "0",
"enablePreFinancedGiftCard": null,
"enableVirtualAccounts": "0",
"maxVirtualAccounts": null,
"gracePeriodEndsAt": "2022-04-24 12:20:52",
"enableMembershipService": "0",
"enableCrossBorderCollection": "0",
"enableCustomCouponCodes": "0",
"payoutAllowedIpAddressList": null,
"freezeSettlement": null,
"giftCardFundingAccountId": "42",
"membershipDebitAccountId": "43",
"createdAt": "2022-03-25 12:20:52",
"lastUpdatedAt": null,
"lastUpdatedByStaffId": null
},
"subAccount": {
"accountId": "41",
"createdByUserId": "23",
"enableManualSettlement": null,
"settlementAccountId": null,
"settlementBatchId": "1",
"crossBorderSettlementBatchId": null,
"createdAt": "2022-03-25 12:20:52",
"lastUpdatedAt": "2022-03-25 13:23:42"
},
"merchantId": "1"
},
{
"id": "1",
"accountId": "41",
"paymentId": "1",
"settlementBatchId": "1",
"amount": 1000,
"createdAt": "2022-03-25 12:23:42",
"lastUpdatedAt": null,
"batch": {
"id": "1",
"_id": "MSBZI33LQ0FQTAT3",
"merchantUserId": "23",
"accountId": "41",
"isManualSettlement": null,
"isCrossBorder": "0",
"destinationAccountId": null,
"clearingTransactionId": null,
"amount": null,
"fee": null,
"status": "1",
"dueDate": "2022-03-26 00:00:00",
"createdAt": "2022-03-25 12:23:42",
"processingStartTime": null,
"processingEndTime": null,
"reportFilePath": null,
"lastUpdatedAt": null
},
"payment": {
"id": "1",
"_id": "MP2203250I8OLG1DACVP",
"parentId": null,
"status": "30",
"type": "3",
"serviceType": "24",
"serviceId": "1",
"amount": "1000",
"currencyCode": "XAF",
"collectedCouponId": null,
"couponAmount": null,
"tipAmount": "0",
"inboundExternalPaymentId": null,
"recurringPaymentFlag": null,
"description": "A transaction for the world",
"payerOrgUserId": "25",
"payerUserId": "25",
"payerName": "tz25",
"payerAccountId": "55",
"presPayerAmount": "1000",
"payerGiftCardAmount": "0",
"payerGiftCardAccountId": null,
"payerMembershipId": null,
"payerMembershipAmount": "0",
"payerBonusRewardId": null,
"payerBonusRewardAmount": "0",
"payerFee": "0",
"beneUserId": "23",
"beneAccountId": "41",
"beneName": "tz23",
"presBeneAmount": "1000",
"beneFee": "0",
"beneGiftCardDebitAmount": "0",
"beneMembershipDebitAmount": "0",
"isInitiatedByPayer": "1",
"createdAt": "2022-03-25 12:23:42.611461",
"creationStartTime": "2022-03-25 12:23:42.608323",
"executionStartTime": "2022-03-25 12:23:42.614772",
"processingAt": null,
"completedAt": "2022-03-25 13:23:42.622870"
},
"account": {
"id": "41",
"_id": "MSA4LDJ0LYRFWCXL29C8",
"userId": "23",
"currencyCode": "XAF",
"type": "5",
"balanceAmount": 1000,
"withheldBalanceAmount": 0,
"name": "",
"description": "",
"avatarUrl": "https://staging-api.tranzak.me/fapi/static/img/logos/tz-logo-btn-black.png",
"label": "TYPE_MERCHANT_DEFAULT",
"isCsaOverdraftAccount": "0",
"isActive": "1",
"createdAt": "2022-03-25 13:20:52",
"lastUpdatedAt": "2022-03-25 13:39:24",
"typeText": "Merchant account (Default)"
},
"merchant": {
"id": "1",
"userId": "23",
"commission": null,
"internalSettlementCommission": null,
"commissionCap": null,
"minSettlementAmount": null,
"settlementWindowId": null,
"settlementAccountId": null,
"enableManualSettlement": "0",
"maxActiveCoupons": null,
"maxCouponsPerPromotion": null,
"maxLuckyMoneyQuantity": null,
"maxLuckyMoneyAmount": null,
"enableGuestPayments": "0",
"enableInPersonPayment": "0",
"maxSubAccounts": null,
"enableGiftCard": "0",
"enablePreFinancedGiftCard": null,
"enableVirtualAccounts": "0",
"maxVirtualAccounts": null,
"gracePeriodEndsAt": "2022-04-24 12:20:52",
"enableMembershipService": "0",
"enableCrossBorderCollection": "0",
"enableCustomCouponCodes": "0",
"payoutAllowedIpAddressList": null,
"freezeSettlement": null,
"giftCardFundingAccountId": "42",
"membershipDebitAccountId": "43",
"createdAt": "2022-03-25 12:20:52",
"lastUpdatedAt": null,
"lastUpdatedByStaffId": null
},
"subAccount": {
"accountId": "41",
"createdByUserId": "23",
"enableManualSettlement": null,
"settlementAccountId": null,
"settlementBatchId": "1",
"crossBorderSettlementBatchId": null,
"createdAt": "2022-03-25 12:20:52",
"lastUpdatedAt": "2022-03-25 13:23:42"
},
"merchantId": "1"
}
],
"pageCount": [
1,
50
],
"pageSize": 20,
"totalItems": 3
},
"success": true,
"debugInfo": null,
"debug": {
"lang": "en-US",
"dateTime": "2022-03-25T14:30:58+00:00",
"hostname": "cortex01",
"serverIpAddress": "192.168.137.2",
"clientIpAddress": "192.168.137.1",
"duration": "0.05s",
"userId": "1",
"staffId": "1",
"staffFirstName": null
}
}
Outbound Transactions
Transactions Leaving the system. Such transactions could be real-time (e.g transfer to mobile money) or delayed batch (bank transfer via file upload).
Real-Time Batch Jobs
Displays real-time (MOMO, OM) transactions and their statuses
Endpoint
GET /backoffice/outbound/list-real-time
Filter parameters
['paymentId', 'userId', 'accountId', 'batchId', 'clearingPaymentId', 'status', 'retryAttempts', 'errorCode' ,'partnerTransactionId', 'partnerTransactionTime', 'note', 'failMessage', 'startDateTime', 'endDateTime']
Response
List of Batch Jobs
{
"data": {
"currentPage": 1,
"hasMore": false,
"list": [
{
"paymentId": "22",
"userId": "23",
"accountId": "16",
"batchId": "1",
"clearingPaymentId": "26",
"status": "5",
"partnerTransactionId": "PP2203223DUF9CYZU1SP|",
"partnerTransactionTime": null,
"retryAttempts": null,
"note": "Hello salary|UBA",
"errorCode": null,
"failMessage": "PP2203223DUF9CYZU1SP|",
"createdAt": "2022-03-22 12:05:38",
"lastUpdatedAt": "2022-03-22 13:02:33",
"account": {
"id": "16",
"_id": "AC2E0CVVSI9WR47YQICP",
"userId": "5",
"currencyCode": "XAF",
"type": "3",
"balanceAmount": "0",
"withheldBalanceAmount": "0",
"name": "",
"description": "",
"avatarUrl": "https://staging-api.tranzak.me/fapi/static/img/logos/tz-logo-btn.png",
"label": "TYPE_TREASURY_SERVICE ",
"isCsaOverdraftAccount": "1",
"isActive": "1",
"createdAt": "2022-03-22 13:04:56",
"lastUpdatedAt": null
},
"payment": {
"id": "22",
"_id": "PP2203223DUF9CYZU1SP",
"parentId": "21",
"status": "30",
"type": "1",
"serviceType": "25",
"serviceId": "17",
"amount": "1000",
"currencyCode": "XAF",
"collectedCouponId": null,
"couponAmount": null,
"tipAmount": "0",
"inboundExternalPaymentId": null,
"recurringPaymentFlag": null,
"description": "Payment to UBA Cameroon",
"payerOrgUserId": "23",
"payerUserId": "23",
"payerName": "tz23",
"payerAccountId": "40",
"presPayerAmount": "1000",
"payerGiftCardAmount": "0",
"payerGiftCardAccountId": null,
"payerMembershipId": null,
"payerMembershipAmount": "0",
"payerBonusRewardId": null,
"payerBonusRewardAmount": "0",
"payerFee": "0",
"beneUserId": "5",
"beneAccountId": "16",
"beneName": "UBA Cameroon|10001111111111",
"presBeneAmount": "1000",
"beneFee": "0",
"beneGiftCardDebitAmount": "0",
"beneMembershipDebitAmount": "0",
"isInitiatedByPayer": "1",
"createdAt": "2022-03-22 12:05:37.992857",
"creationStartTime": "2022-03-22 12:05:37.983167",
"executionStartTime": "2022-03-22 12:05:37.995152",
"processingAt": "2022-03-22 13:05:37.999695",
"completedAt": "2022-03-22 13:02:33.703299"
},
"paymentMetaData": {
"paymentId": "22",
"disablePayerAccountSelection": null,
"mchTransactionRef": null,
"itemDetails": "",
"inboundAccountNumber": "",
"inboundAccountName": "",
"inboundAccountEmail": null,
"payerNote": "Transfer to user",
"beneNote": "",
"outboundTreasuryServiceId": "3",
"outboundOrgName": "UBA Cameroon",
"outboundAccountNumber": "10001111111111",
"outboundAccountName": "Paddy Wak Chuk",
"outboundBankCode": "10033",
"outboundBranchCode": "0005",
"outboundRibCode": "56",
"outboundPrepaidFirst6Digits": null,
"outboundPrepaidLast4Digits": null,
"outboundPrepaidCustomerId": null,
"payerLocationCoordinates": null,
"subscriptionId": null,
"subscriptionPlanId": null,
"appId": null,
"notifyUrl": "",
"returnUrl": "",
"createdAt": "2022-03-22 12:05:37",
"lastUpdatedAt": null
},
"treasuryService": {
"id": "3",
"countryCode": "CM",
"serviceName": null,
"treasuryId": "3",
"type": "2",
"accountId": "16",
"isPaymentMethod": "1",
"isEnabled": "1",
"externalBalance": "0",
"avatarUrl": null,
"createdByStaffId": null,
"createdAt": "2022-03-22 12:04:56",
"lastUpdatedAt": null
},
"treasury": {
"id": "3",
"userId": "5",
"countryCode": "CM",
"type": "1",
"shortName": "UBA Cameroon",
"name": "UBA Cameroon",
"description": "CM | UBA Cameroon",
"isOffline": "0",
"status": "1",
"isPaymentMethod": "1",
"bankCode": "10033",
"isOutboundPaymentProvider": "1",
"outboundRatePercentage": "3.9000",
"avatarUrl": "/static/img/partners/uba.png",
"cardAvatarUrl": "/static/img/partners/cards/",
"isSelectableByUsers": "1",
"isVerificationSource": "0",
"isExpressPaymentSupported": "1",
"paymentWebRedirectUrl": null,
"inboundMinAmount": "1",
"inboundMaxAmount": "1000000",
"inboundPercentageCharge": "2",
"inboundFixedCharge": "10",
"outboundMinAmount": "1",
"outboundMaxAmount": "100000",
"outboundFixedCharge": "10",
"outboundPercentageCharge": "2",
"outboundProcessingTimeInHours": null,
"outboundMaxJobPerBatch": null,
"ussdMobileMoneyDialCode": null,
"enableVisaPrepaidSettlement": "0",
"enableMastercardPrepaidSettlement": "0",
"isSettlementEntity": "1",
"settlementPriority": "100",
"maxPrepaidCardJobsPerBatch": "100",
"maxIntraBankJobsPerBatch": "100",
"maxInterBankJobsPerBatch": "100",
"settlementAccountId": "15",
"swiftCode": null,
"createdByStaffId": null,
"createdAt": "2022-03-22 12:04:56",
"updatedAt": null
},
"batch": {
"id": "1",
"_id": "OB4KMWIXKCKTYNO5",
"settlementTreasuryId": "3",
"type": "2",
"amount": "10000",
"currencyCode": "XAF",
"paymentId": "46",
"status": "50",
"bankSettlementId": "1",
"isPriority": "0",
"retryAttempts": null,
"requestFile": "@datastore/batch_request/2022-03/20220322_UBA_Cameroon_INTRA_BANK_batch_1_batch.txt",
"responseFile": "@datastore/batch_response/2022-03/batch_1.txt",
"errorCode": null,
"createdAt": "2022-03-22 12:08:54",
"lastUpdatedAt": "2022-03-22 13:02:33",
"submittedAt": "2022-03-22 12:14:44",
"partnerTransactionAmount": null,
"partnerFee": null,
"partnerTransactionId": null,
"partnerCompletedAt": null,
"partnerRequestReferenceId": "554ab97b-ca58-4b3c-b699-8687b289a871",
"partnerFileSequenceNumber": null,
"partnerNostroAccountNumber": null,
"partnerResponseData": null,
"completedAt": "2022-03-22 13:02:33"
},
"amount": 1000,
"statusTest": "completed",
"_paymentId": "PP2203223DUF9CYZU1SP"
},
{
"paymentId": "23",
"userId": "23",
"accountId": "16",
"batchId": "1",
"clearingPaymentId": "27",
"status": "5",
"partnerTransactionId": "PP22032200D8HN34PAJ9|",
"partnerTransactionTime": null,
"retryAttempts": null,
"note": "Hello salary|UBA",
"errorCode": null,
"failMessage": "PP22032200D8HN34PAJ9|",
"createdAt": "2022-03-22 12:05:38",
"lastUpdatedAt": "2022-03-22 13:02:33",
"account": {
"id": "16",
"_id": "AC2E0CVVSI9WR47YQICP",
"userId": "5",
"currencyCode": "XAF",
"type": "3",
"balanceAmount": "0",
"withheldBalanceAmount": "0",
"name": "",
"description": "",
"avatarUrl": "https://staging-api.tranzak.me/fapi/static/img/logos/tz-logo-btn.png",
"label": "TYPE_TREASURY_SERVICE ",
"isCsaOverdraftAccount": "1",
"isActive": "1",
"createdAt": "2022-03-22 13:04:56",
"lastUpdatedAt": null
},
"payment": {
"id": "23",
"_id": "PP22032200D8HN34PAJ9",
"parentId": "21",
"status": "30",
"type": "1",
"serviceType": "25",
"serviceId": "18",
"amount": "1000",
"currencyCode": "XAF",
"collectedCouponId": null,
"couponAmount": null,
"tipAmount": "0",
"inboundExternalPaymentId": null,
"recurringPaymentFlag": null,
"description": "Payment to UBA Cameroon",
"payerOrgUserId": "23",
"payerUserId": "23",
"payerName": "tz23",
"payerAccountId": "40",
"presPayerAmount": "1000",
"payerGiftCardAmount": "0",
"payerGiftCardAccountId": null,
"payerMembershipId": null,
"payerMembershipAmount": "0",
"payerBonusRewardId": null,
"payerBonusRewardAmount": "0",
"payerFee": "0",
"beneUserId": "5",
"beneAccountId": "16",
"beneName": "UBA Cameroon|100022222222",
"presBeneAmount": "1000",
"beneFee": "0",
"beneGiftCardDebitAmount": "0",
"beneMembershipDebitAmount": "0",
"isInitiatedByPayer": "1",
"createdAt": "2022-03-22 12:05:38.027645",
"creationStartTime": "2022-03-22 12:05:38.022388",
"executionStartTime": "2022-03-22 12:05:38.029336",
"processingAt": "2022-03-22 13:05:38.031106",
"completedAt": "2022-03-22 13:02:33.707912"
},
"paymentMetaData": {
"paymentId": "23",
"disablePayerAccountSelection": null,
"mchTransactionRef": null,
"itemDetails": "",
"inboundAccountNumber": "",
"inboundAccountName": "",
"inboundAccountEmail": null,
"payerNote": "Transfer to user",
"beneNote": "",
"outboundTreasuryServiceId": "3",
"outboundOrgName": "UBA Cameroon",
"outboundAccountNumber": "100022222222",
"outboundAccountName": "Jezz Tabac",
"outboundBankCode": "10033",
"outboundBranchCode": "0007",
"outboundRibCode": "56",
"outboundPrepaidFirst6Digits": null,
"outboundPrepaidLast4Digits": null,
"outboundPrepaidCustomerId": null,
"payerLocationCoordinates": null,
"subscriptionId": null,
"subscriptionPlanId": null,
"appId": null,
"notifyUrl": "",
"returnUrl": "",
"createdAt": "2022-03-22 12:05:38",
"lastUpdatedAt": null
},
"treasuryService": {
"id": "3",
"countryCode": "CM",
"serviceName": null,
"treasuryId": "3",
"type": "2",
"accountId": "16",
"isPaymentMethod": "1",
"isEnabled": "1",
"externalBalance": "0",
"avatarUrl": null,
"createdByStaffId": null,
"createdAt": "2022-03-22 12:04:56",
"lastUpdatedAt": null
},
"treasury": {
"id": "3",
"userId": "5",
"countryCode": "CM",
"type": "1",
"shortName": "UBA Cameroon",
"name": "UBA Cameroon",
"description": "CM | UBA Cameroon",
"isOffline": "0",
"status": "1",
"isPaymentMethod": "1",
"bankCode": "10033",
"isOutboundPaymentProvider": "1",
"outboundRatePercentage": "3.9000",
"avatarUrl": "/static/img/partners/uba.png",
"cardAvatarUrl": "/static/img/partners/cards/",
"isSelectableByUsers": "1",
"isVerificationSource": "0",
"isExpressPaymentSupported": "1",
"paymentWebRedirectUrl": null,
"inboundMinAmount": "1",
"inboundMaxAmount": "1000000",
"inboundPercentageCharge": "2",
"inboundFixedCharge": "10",
"outboundMinAmount": "1",
"outboundMaxAmount": "100000",
"outboundFixedCharge": "10",
"outboundPercentageCharge": "2",
"outboundProcessingTimeInHours": null,
"outboundMaxJobPerBatch": null,
"ussdMobileMoneyDialCode": null,
"enableVisaPrepaidSettlement": "0",
"enableMastercardPrepaidSettlement": "0",
"isSettlementEntity": "1",
"settlementPriority": "100",
"maxPrepaidCardJobsPerBatch": "100",
"maxIntraBankJobsPerBatch": "100",
"maxInterBankJobsPerBatch": "100",
"settlementAccountId": "15",
"swiftCode": null,
"createdByStaffId": null,
"createdAt": "2022-03-22 12:04:56",
"updatedAt": null
},
"batch": {
"id": "1",
"_id": "OB4KMWIXKCKTYNO5",
"settlementTreasuryId": "3",
"type": "2",
"amount": "10000",
"currencyCode": "XAF",
"paymentId": "46",
"status": "50",
"bankSettlementId": "1",
"isPriority": "0",
"retryAttempts": null,
"requestFile": "@datastore/batch_request/2022-03/20220322_UBA_Cameroon_INTRA_BANK_batch_1_batch.txt",
"responseFile": "@datastore/batch_response/2022-03/batch_1.txt",
"errorCode": null,
"createdAt": "2022-03-22 12:08:54",
"lastUpdatedAt": "2022-03-22 13:02:33",
"submittedAt": "2022-03-22 12:14:44",
"partnerTransactionAmount": null,
"partnerFee": null,
"partnerTransactionId": null,
"partnerCompletedAt": null,
"partnerRequestReferenceId": "554ab97b-ca58-4b3c-b699-8687b289a871",
"partnerFileSequenceNumber": null,
"partnerNostroAccountNumber": null,
"partnerResponseData": null,
"completedAt": "2022-03-22 13:02:33"
},
"amount": 1000,
"statusTest": "completed",
"_paymentId": "PP22032200D8HN34PAJ9"
},
{
"paymentId": "24",
"userId": "23",
"accountId": "18",
"batchId": "2",
"clearingPaymentId": "36",
"status": "5",
"partnerTransactionId": "PP2203220YWE3R64AYF2",
"partnerTransactionTime": null,
"retryAttempts": null,
"note": "Hello XiaLai|AFB",
"errorCode": null,
"failMessage": "PP2203220YWE3R64AYF2",
"createdAt": "2022-03-22 12:05:38",
"lastUpdatedAt": "2022-03-22 13:02:34",
"account": {
"id": "18",
"_id": "ACAC6KDP1GQZDJN57E2L",
"userId": "6",
"currencyCode": "XAF",
"type": "3",
"balanceAmount": "0",
"withheldBalanceAmount": "0",
"name": "",
"description": "",
"avatarUrl": "https://staging-api.tranzak.me/fapi/static/img/logos/tz-logo-btn.png",
"label": "TYPE_TREASURY_SERVICE ",
"isCsaOverdraftAccount": "1",
"isActive": "1",
"createdAt": "2022-03-22 13:04:56",
"lastUpdatedAt": null
},
"payment": {
"id": "24",
"_id": "PP2203220YWE3R64AYF2",
"parentId": "21",
"status": "30",
"type": "1",
"serviceType": "25",
"serviceId": "19",
"amount": "1000",
"currencyCode": "XAF",
"collectedCouponId": null,
"couponAmount": null,
"tipAmount": "0",
"inboundExternalPaymentId": null,
"recurringPaymentFlag": null,
"description": "Payment to Afriland First Bank (Cameroon)",
"payerOrgUserId": "23",
"payerUserId": "23",
"payerName": "tz23",
"payerAccountId": "40",
"presPayerAmount": "1000",
"payerGiftCardAmount": "0",
"payerGiftCardAccountId": null,
"payerMembershipId": null,
"payerMembershipAmount": "0",
"payerBonusRewardId": null,
"payerBonusRewardAmount": "0",
"payerFee": "0",
"beneUserId": "6",
"beneAccountId": "18",
"beneName": "Afriland First Bank (Cameroon)|2000222222222",
"presBeneAmount": "1000",
"beneFee": "0",
"beneGiftCardDebitAmount": "0",
"beneMembershipDebitAmount": "0",
"isInitiatedByPayer": "1",
"createdAt": "2022-03-22 12:05:38.043857",
"creationStartTime": "2022-03-22 12:05:38.038361",
"executionStartTime": "2022-03-22 12:05:38.046204",
"processingAt": "2022-03-22 13:05:38.047945",
"completedAt": "2022-03-22 13:02:34.115284"
},
"paymentMetaData": {
"paymentId": "24",
"disablePayerAccountSelection": null,
"mchTransactionRef": null,
"itemDetails": "",
"inboundAccountNumber": "",
"inboundAccountName": "",
"inboundAccountEmail": null,
"payerNote": "Transfer to XiaLai",
"beneNote": "",
"outboundTreasuryServiceId": "5",
"outboundOrgName": "Afriland First Bank (Cameroon)",
"outboundAccountNumber": "2000222222222",
"outboundAccountName": "XiaLai Tui",
"outboundBankCode": "10005",
"outboundBranchCode": "0005",
"outboundRibCode": "56",
"outboundPrepaidFirst6Digits": null,
"outboundPrepaidLast4Digits": null,
"outboundPrepaidCustomerId": null,
"payerLocationCoordinates": null,
"subscriptionId": null,
"subscriptionPlanId": null,
"appId": null,
"notifyUrl": "",
"returnUrl": "",
"createdAt": "2022-03-22 12:05:38",
"lastUpdatedAt": null
},
"treasuryService": {
"id": "5",
"countryCode": "CM",
"serviceName": null,
"treasuryId": "4",
"type": "2",
"accountId": "18",
"isPaymentMethod": "1",
"isEnabled": "1",
"externalBalance": "0",
"avatarUrl": null,
"createdByStaffId": null,
"createdAt": "2022-03-22 12:04:56",
"lastUpdatedAt": null
},
"treasury": {
"id": "4",
"userId": "6",
"countryCode": "CM",
"type": "1",
"shortName": "Afriland First Bank (Cameroon)",
"name": "Afriland First Bank (Cameroon)",
"description": "CM | Afriland First Bank (Cameroon)",
"isOffline": "0",
"status": "1",
"isPaymentMethod": "1",
"bankCode": "10005",
"isOutboundPaymentProvider": "1",
"outboundRatePercentage": "2.4000",
"avatarUrl": "/static/img/partners/afriland.png",
"cardAvatarUrl": "/static/img/partners/cards/",
"isSelectableByUsers": "1",
"isVerificationSource": "0",
"isExpressPaymentSupported": "1",
"paymentWebRedirectUrl": null,
"inboundMinAmount": "1",
"inboundMaxAmount": "1000000",
"inboundPercentageCharge": "2",
"inboundFixedCharge": "10",
"outboundMinAmount": "1",
"outboundMaxAmount": "100000",
"outboundFixedCharge": "10",
"outboundPercentageCharge": "2",
"outboundProcessingTimeInHours": null,
"outboundMaxJobPerBatch": null,
"ussdMobileMoneyDialCode": null,
"enableVisaPrepaidSettlement": "0",
"enableMastercardPrepaidSettlement": "0",
"isSettlementEntity": "0",
"settlementPriority": "10",
"maxPrepaidCardJobsPerBatch": "100",
"maxIntraBankJobsPerBatch": "100",
"maxInterBankJobsPerBatch": "100",
"settlementAccountId": null,
"swiftCode": null,
"createdByStaffId": null,
"createdAt": "2022-03-22 12:04:56",
"updatedAt": null
},
"batch": {
"id": "2",
"_id": "OBYHRQY2N4K329R4",
"settlementTreasuryId": "3",
"type": "3",
"amount": "10000",
"currencyCode": "XAF",
"paymentId": "47",
"status": "50",
"bankSettlementId": "1",
"isPriority": "0",
"retryAttempts": null,
"requestFile": "@datastore/batch_request/2022-03/20220322_UBA_Cameroon_ACH_batch_2_batch.txt",
"responseFile": "@datastore/batch_response/2022-03/batch_2.txt",
"errorCode": null,
"createdAt": "2022-03-22 12:08:54",
"lastUpdatedAt": "2022-03-22 13:02:34",
"submittedAt": "2022-03-22 12:14:44",
"partnerTransactionAmount": null,
"partnerFee": null,
"partnerTransactionId": null,
"partnerCompletedAt": null,
"partnerRequestReferenceId": "4553de26-48b4-42bf-b4bc-d880e7770aef",
"partnerFileSequenceNumber": null,
"partnerNostroAccountNumber": null,
"partnerResponseData": null,
"completedAt": "2022-03-22 13:02:34"
},
"amount": 1000,
"statusTest": "completed",
"_paymentId": "PP2203220YWE3R64AYF2"
},
],
"pageCount": [
1,
50
],
"pageSize": 20,
"totalItems": 20
},
"success": true,
"debugInfo": null,
"debug": {
"lang": "en-US",
"dateTime": "2022-03-22T17:39:16+00:00",
"hostname": "cortex01",
"serverIpAddress": "192.168.137.2",
"clientIpAddress": "192.168.137.1",
"duration": "0.051s",
"userId": "1",
"staffId": "1",
"staffFirstName": null
}
}
View O Job
Displays details of a job
Request Endpoint
GET /backoffice/outbound/view?id=TXN_ID
Request Param
Request Filter params
| Parameter | Type | required | Description |
|---|---|---|---|
| id | String | true | Transaction ID |
Response
{
"data": {
"accountId": 18,
"batchId": 2,
"clearingPaymentId": "37",
"createdAt": "2022-03-22 12:05:38",
"errorCode": null,
"failMessage": "PP2203227G9YWYPPXX3W",
"lastUpdatedAt": "2022-03-22 13:02:34",
"note": "Hello wizz|AFB",
"partnerTransactionId": "PP2203227G9YWYPPXX3W",
"partnerTransactionTime": null,
"payment": {
"id": "25",
"_id": "PP2203227G9YWYPPXX3W",
"parentId": "21",
"status": 30,
"type": 1,
"serviceType": "payment",
"serviceId": 20,
"amount": 1000,
"currencyCode": "XAF",
"collectedCouponId": null,
"couponAmount": 0,
"tipAmount": 0,
"inboundExternalPaymentId": null,
"recurringPaymentFlag": null,
"description": "Payment to Afriland First Bank (Cameroon)",
"payerOrgUserId": 23,
"payerUserId": 23,
"payerName": "tz23",
"payerAccountId": 40,
"presPayerAmount": 1000,
"payerGiftCardAmount": 0,
"payerGiftCardAccountId": null,
"payerMembershipId": null,
"payerMembershipAmount": 0,
"payerBonusRewardId": null,
"payerBonusRewardAmount": 0,
"payerFee": 0,
"beneUserId": 6,
"beneAccountId": 18,
"beneName": "Afriland First Bank (Cameroon)|3330000000000333",
"presBeneAmount": 1000,
"beneFee": 0,
"beneGiftCardDebitAmount": 0,
"beneMembershipDebitAmount": 0,
"isInitiatedByPayer": 1,
"createdAt": "2022-03-22 12:05:38.063811",
"creationStartTime": "2022-03-22 12:05:38.058287",
"executionStartTime": "2022-03-22 12:05:38.066853",
"processingAt": "2022-03-22 13:05:38.069270",
"completedAt": "2022-03-22 13:02:34.122648",
"payerNetAmount": 1000,
"beneNetAmount": 1000,
"statusText": "successful",
"typeText": "transfer",
"journals": [
{
"id": "55",
"paymentId": "25",
"isCredit": 1,
"accountId": 18,
"amount": 1000,
"currencyCode": "XAF",
"openingBalance": 0,
"closingBalance": 0,
"createdAt": "2022-03-22 13:05:38"
},
{
"id": "54",
"paymentId": "25",
"isCredit": 0,
"accountId": 40,
"amount": -1000,
"currencyCode": "XAF",
"openingBalance": 1000,
"closingBalance": 0,
"createdAt": "2022-03-22 13:05:38"
}
],
"outboundJob": {
"paymentId": "25",
"userId": 23,
"accountId": 18,
"batchId": 2,
"clearingPaymentId": "37",
"status": 5,
"partnerTransactionId": "PP2203227G9YWYPPXX3W",
"partnerTransactionTime": null,
"retryAttempts": null,
"note": "Hello wizz|AFB",
"errorCode": null,
"failMessage": "PP2203227G9YWYPPXX3W",
"createdAt": "2022-03-22 12:05:38",
"lastUpdatedAt": "2022-03-22 13:02:34"
},
"metaData": {
"paymentId": "25",
"disablePayerAccountSelection": null,
"mchTransactionRef": null,
"itemDetails": "",
"inboundAccountNumber": "",
"inboundAccountName": "",
"inboundAccountEmail": null,
"payerNote": "",
"beneNote": "",
"outboundTreasuryServiceId": 5,
"outboundOrgName": "Afriland First Bank (Cameroon)",
"outboundAccountNumber": "3330000000000333",
"outboundAccountName": "Wizzy Brown",
"outboundBankCode": "10005",
"outboundBranchCode": "0005",
"outboundRibCode": "56",
"outboundPrepaidFirst6Digits": null,
"outboundPrepaidLast4Digits": null,
"outboundPrepaidCustomerId": null,
"payerLocationCoordinates": null,
"subscriptionId": null,
"subscriptionPlanId": null,
"appId": null,
"notifyUrl": "",
"returnUrl": "",
"createdAt": "2022-03-22 12:05:38",
"lastUpdatedAt": null
}
},
"paymentId": "25",
"retryAttempts": null,
"status": 5,
"statusText": "completed",
"userId": 23
},
"success": true,
"debugInfo": null,
"debug": {
"lang": "en-US",
"dateTime": "2022-03-22T17:44:52+00:00",
"hostname": "cortex01",
"serverIpAddress": "192.168.137.2",
"clientIpAddress": "192.168.137.1",
"duration": "0.053s",
"userId": "1",
"staffId": "1",
"staffFirstName": null
}
}
Payout (Mass Payments ) - BO
Re-Launch Payouts
Re-Launch a stalled payout
Endpoint
POST /backoffice/payout/relaunch
Request Params
{
"id": 1
}
Response
See VIEW section
Re-launch ALL Stalled Payout jobs
Relaunches all stalled payout jobs. It's safe feature and only stalled payouts will be run. This should be run in case of failure that causes payout failure
Endpoint
POST /backoffice/payout/relaunch-stalled-requests
Request Params
{
"id": 1
}
List Payouts
Lists payouts
Endpoint
GET /backoffice/payout/list
Request Params
Filters
return [
[['id', 'orgUserId', 'createdByUserId', 'totalAmount', 'type', 'paymentId', 'refundId', 'feeIsPaidByReceiver', 'totalFee', 'priorityFee', 'isPriority', 'status', 'totalNumberOfReceivers', 'isCreatedViaFileUpload'], 'integer'],
[['_id', 'title', 'currencyCode', 'mchTransactionRef', 'description', 'spreadSheetReportFilePath', 'createdAt', 'executionStartTime', 'completedAt'], 'safe'],
];
Response
{
"data": {
"currentPage": 1,
"hasMore": false,
"list": [
{
"id": "1",
"_id": "PO1YYWB0SLKM64DNJ20O",
"title": "Payout cool title",
"orgUserId": "23",
"createdByUserId": "23",
"totalAmount": 1000,
"type": "2",
"currencyCode": "XAF",
"paymentId": "30",
"refundId": null,
"mchTransactionRef": "ref12345566666",
"description": null,
"feeIsPaidByReceiver": "1",
"totalFee": 0,
"priorityFee": "200",
"isPriority": "1",
"status": "4",
"totalNumberOfReceivers": "1",
"isCreatedViaFileUpload": "0",
"spreadSheetReportFilePath": null,
"createdAt": "2022-03-25 15:48:23",
"executionStartTime": "2022-03-25 15:48:23",
"completedAt": "2022-03-25 15:48:28",
"statusText": "completed",
"typeText": "mobile money transfer"
}
],
"pageCount": [
1,
50
],
"pageSize": 20,
"totalItems": 1
},
"success": true,
"debugInfo": null,
"debug": {
"lang": "en-US",
"dateTime": "2022-03-25T17:05:25+00:00",
"hostname": "cortex01",
"serverIpAddress": "192.168.137.2",
"clientIpAddress": "192.168.137.1",
"duration": "0.044s",
"userId": "1",
"staffId": "1",
"staffFirstName": null
}
}
View Payout
Displays payout details
Endpoint
GET /backoffice/payout/view?id=PAYOUT_ID
Request params
| Parameter | Type | required | Description |
|---|---|---|---|
| id | String(100) | true | payout ID |
Response
{
"data": {
"_id": "PO1YYWB0SLKM64DNJ20O",
"completedAt": "2022-03-25 15:48:28",
"createdAt": "2022-03-25 15:48:23",
"createdByUserId": 23,
"currencyCode": "XAF",
"description": null,
"executionStartTime": "2022-03-25 15:48:23",
"feeIsPaidByReceiver": 1,
"id": 1,
"isCreatedViaFileUpload": 0,
"isPriority": 1,
"mchTransactionRef": "ref12345566666",
"orgUserId": 23,
"paymentId": "30",
"payoutMetaData": {
"payoutId": 1,
"rawReceiverData": "[{\"mobileNumber\":\"+237674728670\",\"accountName\":\"Dan Momo\",\"amount\":\"1000\",\"beneficiaryNote\":\"Hello salary\",\"payerNote\":\"Transfer to user\",\"payerReferenceId\":\"111111\"}]",
"parsedReceiverData": "[{\"id\":null,\"payoutId\":null,\"beneAccountId\":null,\"treasuryServiceId\":1,\"paymentId\":null,\"amount\":\"1000\",\"beneAmount\":990,\"feeAmount\":\"10\",\"currencyCode\":\"XAF\",\"beneficiaryAccountNumber\":\"+237674728670\",\"beneficiaryAccountName\":\"Dan Momo\",\"beneficiaryBankCode\":null,\"beneficiaryBankName\":\"\",\"beneficiaryNote\":\"Hello salary\",\"beneficiaryBranchCode\":null,\"beneficiaryRibCode\":null,\"beneficiaryPrepaidFirst6Digits\":null,\"beneficiaryPrepaidLast4Digits\":null,\"beneficiaryPrepaidCustomerId\":null,\"partnerTransactionRefId\":null,\"payerNote\":\"Transfer to user\",\"payerReferenceId\":\"111111\",\"status\":null,\"errorCode\":null,\"message\":null,\"debugMessage\":null,\"createdAt\":null,\"lastUpdatedAt\":null}]"
},
"priorityFee": 200,
"receivers": [
{
"mobileNumber": "+237674728670",
"accountName": "Dan Momo",
"amount": "1000",
"beneficiaryNote": "Hello salary",
"payerNote": "Transfer to user",
"payerReferenceId": "111111"
}
],
"refund": null,
"refundId": null,
"spreadSheetReportFilePath": null,
"status": 4,
"statusText": "completed",
"title": "Payout cool title",
"totalAmount": 1000,
"totalFailedTransactionAmount": 0,
"totalFee": 0,
"totalNumberFailedTransactions": 0,
"totalNumberOfReceivers": 1,
"type": 2,
"typeText": "mobile money transfer"
},
"success": true,
"debugInfo": null,
"debug": {
"lang": "en-US",
"dateTime": "2022-03-25T17:07:52+00:00",
"hostname": "cortex01",
"serverIpAddress": "192.168.137.2",
"clientIpAddress": "192.168.137.1",
"duration": "0.059s",
"userId": "1",
"staffId": "1",
"staffFirstName": null
}
}
View Payout Job
Payout job is a transfer that belongs to a payout
Endpoint
GET /backoffice/payout/view?id=JOB_ID
Request params
| Parameter | Type | required | Description |
|---|---|---|---|
| id | String(100) | true | ID |
Response
{
"data": {
"amount": 1000,
"beneAccountId": 12,
"beneAmount": 990,
"beneficiaryAccountName": "Dan Momo",
"beneficiaryAccountNumber": "+237674728670",
"beneficiaryBankCode": null,
"beneficiaryBankName": "",
"beneficiaryBranchCode": null,
"beneficiaryNote": "Hello salary",
"beneficiaryPrepaidCustomerId": null,
"beneficiaryPrepaidFirst6Digits": null,
"beneficiaryPrepaidLast4Digits": null,
"beneficiaryRibCode": null,
"createdAt": "2022-03-25 15:48:23",
"currencyCode": "XAF",
"debugMessage": null,
"errorCode": null,
"feeAmount": 10,
"id": "1",
"lastUpdatedAt": "2022-03-25 15:48:28",
"message": null,
"partnerTransactionRefId": null,
"payerNote": "Transfer to user",
"payerReferenceId": "111111",
"paymentId": "31",
"payout": {
"id": 1,
"_id": "PO1YYWB0SLKM64DNJ20O",
"title": "Payout cool title",
"orgUserId": 23,
"createdByUserId": 23,
"totalAmount": 1000,
"type": 2,
"currencyCode": "XAF",
"paymentId": "30",
"refundId": null,
"mchTransactionRef": "ref12345566666",
"description": null,
"feeIsPaidByReceiver": 1,
"totalFee": 0,
"priorityFee": 200,
"isPriority": 1,
"status": 4,
"totalNumberOfReceivers": 1,
"isCreatedViaFileUpload": 0,
"spreadSheetReportFilePath": null,
"createdAt": "2022-03-25 15:48:23",
"executionStartTime": "2022-03-25 15:48:23",
"completedAt": "2022-03-25 15:48:28",
"statusText": "completed",
"typeText": "mobile money transfer"
},
"payoutId": 1,
"status": 4,
"statusText": "completed",
"treasuryServiceId": 1
},
"success": true,
"debugInfo": null,
"debug": {
"lang": "en-US",
"dateTime": "2022-03-25T17:09:33+00:00",
"hostname": "cortex01",
"serverIpAddress": "192.168.137.2",
"clientIpAddress": "192.168.137.1",
"duration": "0.046s",
"userId": "1",
"staffId": "1",
"staffFirstName": null
}
}
View Payout Job ID
Displays details of a payout job
Endpoint
GET /backoffice/payout/view-job?id=PAYOUT_ID
Request Params
| Parameter | Type | required | Description |
|---|---|---|---|
| ID | int | true | ID of job |
Response
{
"data": {
"amount": 1000,
"beneAccountId": 12,
"beneAmount": 990,
"beneficiaryAccountName": "Dan Momo",
"beneficiaryAccountNumber": "+237674728670",
"beneficiaryBankCode": null,
"beneficiaryBankName": "",
"beneficiaryBranchCode": null,
"beneficiaryNote": "Hello salary",
"beneficiaryPrepaidCustomerId": null,
"beneficiaryPrepaidFirst6Digits": null,
"beneficiaryPrepaidLast4Digits": null,
"beneficiaryRibCode": null,
"createdAt": "2022-03-25 15:48:23",
"currencyCode": "XAF",
"debugMessage": null,
"errorCode": null,
"feeAmount": 10,
"id": "1",
"lastUpdatedAt": "2022-03-25 15:48:28",
"message": null,
"partnerTransactionRefId": null,
"payerNote": "Transfer to user",
"payerReferenceId": "111111",
"paymentId": "31",
"payout": {
"id": 1,
"_id": "PO1YYWB0SLKM64DNJ20O",
"title": "Payout cool title",
"orgUserId": 23,
"createdByUserId": 23,
"totalAmount": 1000,
"type": 2,
"currencyCode": "XAF",
"paymentId": "30",
"refundId": null,
"mchTransactionRef": "ref12345566666",
"description": null,
"feeIsPaidByReceiver": 1,
"totalFee": 0,
"priorityFee": 200,
"isPriority": 1,
"status": 4,
"totalNumberOfReceivers": 1,
"isCreatedViaFileUpload": 0,
"spreadSheetReportFilePath": null,
"createdAt": "2022-03-25 15:48:23",
"executionStartTime": "2022-03-25 15:48:23",
"completedAt": "2022-03-25 15:48:28",
"statusText": "completed",
"typeText": "mobile money transfer"
},
"payoutId": 1,
"status": 4,
"statusText": "completed",
"treasuryServiceId": 1
},
"success": true,
"debugInfo": null,
"debug": {
"lang": "en-US",
"dateTime": "2022-03-25T17:09:33+00:00",
"hostname": "cortex01",
"serverIpAddress": "192.168.137.2",
"clientIpAddress": "192.168.137.1",
"duration": "0.046s",
"userId": "1",
"staffId": "1",
"staffFirstName": null
}
}
List Payout Jobs
List jobs
Endpoint
GET /backoffice/payout/list-payout-jobs
Request
return [
[['id', 'payoutId', 'beneAccountId', 'treasuryServiceId', 'paymentId', 'amount', 'beneAmount', 'feeAmount', 'status', 'errorCode'], 'safe'],
[['currencyCode', 'beneficiaryAccountNumber', 'beneficiaryAccountName', 'beneficiaryBankCode', 'beneficiaryBankName', 'beneficiaryNote', 'beneficiaryBranchCode', 'beneficiaryRibCode', 'beneficiaryPrepaidFirst6Digits', 'beneficiaryPrepaidLast4Digits', 'beneficiaryPrepaidCustomerId', 'partnerTransactionRefId', 'payerNote', 'payerReferenceId', 'message', 'debugMessage', 'createdAt', 'lastUpdatedAt'], 'safe'],
];
Response
{
"data": {
"currentPage": 1,
"hasMore": false,
"list": [
{
"id": "1",
"payoutId": "1",
"beneAccountId": "12",
"treasuryServiceId": "1",
"paymentId": "31",
"amount": 1000,
"beneAmount": 990,
"feeAmount": 10,
"currencyCode": "XAF",
"beneficiaryAccountNumber": "+237674728670",
"beneficiaryAccountName": "Dan Momo",
"beneficiaryBankCode": null,
"beneficiaryBankName": "",
"beneficiaryNote": "Hello salary",
"beneficiaryBranchCode": null,
"beneficiaryRibCode": null,
"beneficiaryPrepaidFirst6Digits": null,
"beneficiaryPrepaidLast4Digits": null,
"beneficiaryPrepaidCustomerId": null,
"partnerTransactionRefId": null,
"payerNote": "Transfer to user",
"payerReferenceId": "111111",
"status": "4",
"errorCode": null,
"message": null,
"debugMessage": null,
"createdAt": "2022-03-25 15:48:23",
"lastUpdatedAt": "2022-03-25 15:48:28",
"payout": {
"id": "1",
"_id": "PO1YYWB0SLKM64DNJ20O",
"title": "Payout cool title",
"orgUserId": "23",
"createdByUserId": "23",
"totalAmount": 1000,
"type": "2",
"currencyCode": "XAF",
"paymentId": "30",
"refundId": null,
"mchTransactionRef": "ref12345566666",
"description": null,
"feeIsPaidByReceiver": "1",
"totalFee": 0,
"priorityFee": "200",
"isPriority": "1",
"status": "4",
"totalNumberOfReceivers": "1",
"isCreatedViaFileUpload": "0",
"spreadSheetReportFilePath": null,
"createdAt": "2022-03-25 15:48:23",
"executionStartTime": "2022-03-25 15:48:23",
"completedAt": "2022-03-25 15:48:28",
"statusText": "completed",
"typeText": "mobile money transfer"
},
"statusText": "completed"
}
],
"pageCount": [
1,
50
],
"pageSize": 20,
"totalItems": 1
},
"success": true,
"debugInfo": null,
"debug": {
"lang": "en-US",
"dateTime": "2022-03-25T17:15:22+00:00",
"hostname": "cortex01",
"serverIpAddress": "192.168.137.2",
"clientIpAddress": "192.168.137.1",
"duration": "0.044s",
"userId": "1",
"staffId": "1",
"staffFirstName": null
}
}
Refund (BO)
Approve a Refund Request
Approve a refund request
Endpoint
GET /backoffice/refund/approve-refund
Request Params
| Parameter | Type | required | Description |
|---|---|---|---|
| id | String(100) | true | id / _id of refund request |
{
"id": 1
}
Response
See VIEW section
Cancel A Refund
Cancels/rejects a refund request.
Endpoint
GET /backoffice/refund/reject-refund
Request Params
| Parameter | Type | required | Description |
|---|---|---|---|
| id | String(100) | true | id / _id of refund request |
{
"id": 1
}
Response
See VIEW section
List Refunds
Endpoint
GET /backoffice/refund/list
Request Params
[['merchantId', 'id', 'refundedPaymentId', 'type', 'amount', 'status', 'payerUserId', 'payerOrgUserId', 'merchantUserId', 'lastUpdatedByUserId', 'paymentId', 'refundedActivityPoints', 'reasonCode', 'isFinalRefund', 'disputeId', 'isInitiatedBy', 'isCancelledBy', 'isApprovedBy'], 'integer'],
[['_id', 'currencyCode', 'dueDate', 'merchantRefundNumber', 'note', 'createdAt', 'cancelledAt', 'approvedAt', 'lastUpdatedAt'], 'safe'],
Response
{
"data": {
"currentPage": 1,
"hasMore": false,
"list": [
{
"id": "1",
"_id": "REFSBD5OV3RLLAXGW89Q",
"refundedPaymentId": "5",
"type": "2",
"currencyCode": "XAF",
"amount": 1000,
"dueDate": "2022-03-28 12:39:24",
"status": "3",
"payerUserId": "25",
"payerOrgUserId": "25",
"merchantUserId": "23",
"lastUpdatedByUserId": null,
"paymentId": null,
"refundedActivityPoints": "0",
"merchantRefundNumber": null,
"note": null,
"reasonCode": "5",
"isFinalRefund": "1",
"disputeId": null,
"isInitiatedBy": "2",
"isCancelledBy": "0",
"isApprovedBy": "1",
"createdAt": "2022-03-25 12:39:24",
"cancelledAt": null,
"approvedAt": "2022-03-25 12:39:24",
"lastUpdatedAt": "2022-03-25 13:39:24",
"lastUpdatedByStaffId": null,
"merchantUser": {
"id": "23",
"_id": "tz23",
"ufId": null,
"orgUserId": null,
"scopeId": null,
"roleId": "1000",
"primaryCurrencyCode": "XAF",
"residenceCountryCode": "CM",
"type": "3",
"firstName": null,
"lastName": null,
"displayName": "tz23",
"verifiedName": null,
"paymentPin": "$2y$05$UnwJHcr3sL9n34rWX/i2oO4OeLhJ4GeSUdZJNP6H72ouUAO4ZkpzO",
"phoneNumber": null,
"language": "en_GB",
"timeZone": "Africa/Douala",
"isRNVerified": "0",
"loginEnabled": "1",
"avatarUrl": null,
"defaultSendingAccountId": null,
"canReceivePayment": "1",
"canSendPayment": "1",
"createdAt": "2022-03-25 12:20:51",
"lastUpdatedAt": "2022-03-25 13:20:52"
},
"merchant": {
"id": "1",
"userId": "23",
"commission": null,
"internalSettlementCommission": null,
"commissionCap": null,
"minSettlementAmount": null,
"settlementWindowId": null,
"settlementAccountId": null,
"enableManualSettlement": "0",
"maxActiveCoupons": null,
"maxCouponsPerPromotion": null,
"maxLuckyMoneyQuantity": null,
"maxLuckyMoneyAmount": null,
"enableGuestPayments": "0",
"enableInPersonPayment": "0",
"maxSubAccounts": null,
"enableGiftCard": "0",
"enablePreFinancedGiftCard": null,
"enableVirtualAccounts": "0",
"maxVirtualAccounts": null,
"gracePeriodEndsAt": "2022-04-24 12:20:52",
"enableMembershipService": "0",
"enableCrossBorderCollection": "0",
"enableCustomCouponCodes": "0",
"payoutAllowedIpAddressList": null,
"freezeSettlement": null,
"giftCardFundingAccountId": "42",
"membershipDebitAccountId": "43",
"createdAt": "2022-03-25 12:20:52",
"lastUpdatedAt": null,
"lastUpdatedByStaffId": null
},
"payerUser": {
"id": "25",
"_id": "tz25",
"ufId": null,
"orgUserId": null,
"scopeId": null,
"roleId": "1000",
"primaryCurrencyCode": "XAF",
"residenceCountryCode": "CM",
"type": "3",
"firstName": null,
"lastName": null,
"displayName": "tz25",
"verifiedName": null,
"paymentPin": "$2y$05$znvVrEeDqhVlVdSPBidNrO3Hrc827GSRNY0.x0JWV9MBfnJO2/PUC",
"phoneNumber": null,
"language": "en_GB",
"timeZone": "Africa/Douala",
"isRNVerified": "0",
"loginEnabled": "1",
"avatarUrl": null,
"defaultSendingAccountId": null,
"canReceivePayment": "1",
"canSendPayment": "1",
"createdAt": "2022-03-25 12:20:52",
"lastUpdatedAt": "2022-03-25 13:20:52"
},
"refundedPayment": {
"id": "5",
"_id": "MP2203253SXXKQ1XDRZW",
"parentId": null,
"status": "-11",
"type": "3",
"serviceType": "24",
"serviceId": "4",
"amount": "1000",
"currencyCode": "XAF",
"collectedCouponId": null,
"couponAmount": null,
"tipAmount": "0",
"inboundExternalPaymentId": null,
"recurringPaymentFlag": null,
"description": "A transaction for the world",
"payerOrgUserId": "25",
"payerUserId": "25",
"payerName": "tz25",
"payerAccountId": "55",
"presPayerAmount": "1000",
"payerGiftCardAmount": "0",
"payerGiftCardAccountId": null,
"payerMembershipId": null,
"payerMembershipAmount": "0",
"payerBonusRewardId": null,
"payerBonusRewardAmount": "0",
"payerFee": "0",
"beneUserId": "23",
"beneAccountId": "41",
"beneName": "tz23",
"presBeneAmount": "1000",
"beneFee": "0",
"beneGiftCardDebitAmount": "0",
"beneMembershipDebitAmount": "0",
"isInitiatedByPayer": "1",
"createdAt": "2022-03-25 12:38:51.624635",
"creationStartTime": "2022-03-25 12:38:51.621631",
"executionStartTime": "2022-03-25 12:38:51.627295",
"processingAt": null,
"completedAt": "2022-03-25 13:38:51.633991"
},
"statusText": "completed",
"typeText": "reversal",
"reasonText": "other reasons",
"initiator": "merchant",
"approver": "merchant",
"cancelledBy": "",
"merchantId": "1"
}
],
"pageCount": [
1,
50
],
"pageSize": 20,
"totalItems": 1
},
"success": true,
"debugInfo": null,
"debug": {
"lang": "en-US",
"dateTime": "2022-03-25T18:00:47+00:00",
"hostname": "cortex01",
"serverIpAddress": "192.168.137.2",
"clientIpAddress": "192.168.137.1",
"duration": "0.054s",
"userId": "1",
"staffId": "1",
"staffFirstName": null
}
}
Reason codes
Displays lists of reason codes for refunds. Useful when requesting, approving and rejecting/cancelling requests for refunds
Endpoint
GET /backoffice/refund/reason-codes
Request params
Response
{
"data": {
"approval": {
"1": "Merchant response SLA breached",
"2": "mutual agreement between buyer and merchant"
},
"reject": {
"1": "insufficient evidence",
"2": "mutual agreement"
},
"request": {
"1": "mutual agreement between buyer and seller",
"2": "the order did not match the transaction agreement",
"3": "suspicious transaction",
"4": "disputed transaction",
"5": "other reasons",
"6": "Deficient product/service",
"7": "Duplicate transaction"
}
},
"success": true,
"debugInfo": null,
"debug": {
"lang": "en-US",
"dateTime": "2022-03-25T18:02:24+00:00",
"hostname": "cortex01",
"serverIpAddress": "192.168.137.2",
"clientIpAddress": "192.168.137.1",
"duration": "0.04s",
"userId": "1",
"staffId": "1",
"staffFirstName": null
}
}
View Refund
Displays refunds details
Endpoint
GET /backoffice/refund/view?id=REFUND_ID
| Parameter | Type | required | Description |
|---|---|---|---|
| id | String(100) | true | id or _id accepted (system is intelligent enough to know which is which ;) |
Response
{
"data": {
"_id": "REFSBD5OV3RLLAXGW89Q",
"amount": 1000,
"approvedAt": "2022-03-25 12:39:24",
"approver": "merchant",
"cancelledAt": null,
"cancelledBy": "",
"createdAt": "2022-03-25 12:39:24",
"currencyCode": "XAF",
"disputeId": null,
"dueDate": "2022-03-28 12:39:24",
"id": 1,
"initiator": "merchant",
"isApprovedBy": 1,
"isCancelledBy": 0,
"isFinalRefund": 1,
"isInitiatedBy": 2,
"lastUpdatedAt": "2022-03-25 13:39:24",
"lastUpdatedByStaffId": null,
"lastUpdatedByUserId": null,
"merchantId": 1,
"merchantRefundNumber": null,
"merchantUser": {
"id": 1,
"userId": 23,
"commission": null,
"internalSettlementCommission": null,
"commissionCap": null,
"minSettlementAmount": null,
"settlementWindowId": null,
"settlementAccountId": null,
"enableManualSettlement": 0,
"maxActiveCoupons": null,
"maxCouponsPerPromotion": null,
"maxLuckyMoneyQuantity": null,
"maxLuckyMoneyAmount": null,
"enableGuestPayments": 0,
"enableInPersonPayment": 0,
"maxSubAccounts": null,
"enableGiftCard": 0,
"enablePreFinancedGiftCard": null,
"enableVirtualAccounts": 0,
"maxVirtualAccounts": null,
"gracePeriodEndsAt": "2022-04-24 12:20:52",
"enableMembershipService": 0,
"enableCrossBorderCollection": 0,
"enableCustomCouponCodes": 0,
"payoutAllowedIpAddressList": null,
"freezeSettlement": null,
"giftCardFundingAccountId": 42,
"membershipDebitAccountId": 43,
"createdAt": "2022-03-25 12:20:52",
"lastUpdatedAt": null,
"lastUpdatedByStaffId": null
},
"merchantUserId": 23,
"note": null,
"payerOrgUserId": 25,
"payerUser": {
"id": 25,
"_id": "tz25",
"ufId": null,
"orgUserId": null,
"scopeId": null,
"roleId": 1000,
"primaryCurrencyCode": "XAF",
"residenceCountryCode": "CM",
"type": 3,
"firstName": null,
"lastName": null,
"displayName": "tz25",
"verifiedName": null,
"paymentPin": "$2y$05$znvVrEeDqhVlVdSPBidNrO3Hrc827GSRNY0.x0JWV9MBfnJO2/PUC",
"phoneNumber": null,
"language": "en_GB",
"timeZone": "Africa/Douala",
"isRNVerified": 0,
"loginEnabled": 1,
"avatarUrl": null,
"defaultSendingAccountId": null,
"canReceivePayment": 1,
"canSendPayment": 1,
"createdAt": "2022-03-25 12:20:52",
"lastUpdatedAt": "2022-03-25 13:20:52"
},
"payerUserId": 25,
"paymentId": null,
"reasonCode": 5,
"reasonText": "other reasons",
"refundedActivityPoints": 0,
"refundedPayment": {
"id": "5",
"_id": "MP2203253SXXKQ1XDRZW",
"parentId": null,
"status": -11,
"type": 3,
"serviceType": 24,
"serviceId": 4,
"amount": "1000",
"currencyCode": "XAF",
"collectedCouponId": null,
"couponAmount": null,
"tipAmount": 0,
"inboundExternalPaymentId": null,
"recurringPaymentFlag": null,
"description": "A transaction for the world",
"payerOrgUserId": 25,
"payerUserId": 25,
"payerName": "tz25",
"payerAccountId": 55,
"presPayerAmount": "1000",
"payerGiftCardAmount": 0,
"payerGiftCardAccountId": null,
"payerMembershipId": null,
"payerMembershipAmount": 0,
"payerBonusRewardId": null,
"payerBonusRewardAmount": 0,
"payerFee": 0,
"beneUserId": 23,
"beneAccountId": 41,
"beneName": "tz23",
"presBeneAmount": "1000",
"beneFee": 0,
"beneGiftCardDebitAmount": 0,
"beneMembershipDebitAmount": 0,
"isInitiatedByPayer": 1,
"createdAt": "2022-03-25 12:38:51.624635",
"creationStartTime": "2022-03-25 12:38:51.621631",
"executionStartTime": "2022-03-25 12:38:51.627295",
"processingAt": null,
"completedAt": "2022-03-25 13:38:51.633991"
},
"refundedPaymentId": "5",
"status": 3,
"statusText": "completed",
"type": 2,
"typeText": "reversal"
},
"success": true,
"debugInfo": null,
"debug": {
"lang": "en-US",
"dateTime": "2022-03-25T18:07:04+00:00",
"hostname": "cortex01",
"serverIpAddress": "192.168.137.2",
"clientIpAddress": "192.168.137.1",
"duration": "0.188s",
"userId": "1",
"staffId": "1",
"staffFirstName": null
}
}
List Refunds
Endpoints
GET /backoffice/refund/list
Request Params
return [
[['merchantId', 'id', 'refundedPaymentId', 'type', 'amount', 'status', 'payerUserId', 'payerOrgUserId', 'merchantUserId', 'lastUpdatedByUserId', 'paymentId', 'refundedActivityPoints', 'reasonCode', 'isFinalRefund', 'disputeId', 'isInitiatedBy', 'isCancelledBy', 'isApprovedBy'], 'integer'],
[['_id', 'currencyCode', 'dueDate', 'merchantRefundNumber', 'note', 'createdAt', 'cancelledAt', 'approvedAt', 'lastUpdatedAt'], 'safe'],
];
List Refund Activity Logs
Displays refund activities
Request Endpoint
GET /backoffice/refund/activity-logs?id=REFUND_ID
Request Params
Response
{
"data": [
{
"id": "1",
"refundId": "1",
"actionId": null,
"userId": null,
"comment": "",
"status": "1",
"staffId": null,
"oldStatus": "1",
"createdAt": "2022-03-25 12:39:24",
"statusText": "pending approval",
"oldStatusText": "pending approval"
},
{
"id": "2",
"refundId": "1",
"actionId": null,
"userId": null,
"comment": "",
"status": "3",
"staffId": null,
"oldStatus": "1",
"createdAt": "2022-03-25 12:39:24",
"statusText": "completed",
"oldStatusText": "pending approval"
}
],
"success": true,
"debugInfo": null,
"debug": {
"lang": "en-US",
"dateTime": "2022-03-25T18:09:03+00:00",
"hostname": "cortex01",
"serverIpAddress": "192.168.137.2",
"clientIpAddress": "192.168.137.1",
"duration": "0.045s",
"userId": "1",
"staffId": "1",
"staffFirstName": null
}
}
List Refund Transactions
Displays transactions run as part of refund process
Endpoint
GET /backoffice/refund/transactions?id=REFUND_ID
Params
| Parameter | Type | required | Description |
|---|---|---|---|
| id | String(100) | true | id or _id of refund |
Response
{
"data": [
{
"id": "1",
"amount": 1000,
"accountId": "55",
"refundId": "1",
"paymentId": "6",
"createdAt": "2022-03-25 12:39:24",
"lastUpdatedAt": "2022-03-25 12:39:24",
"payment": {
"id": "6",
"_id": "REF220325ICZW4WYB2SK",
"parentId": "5",
"status": "30",
"type": "5",
"serviceType": "10",
"serviceId": "1",
"amount": "1000",
"currencyCode": "XAF",
"collectedCouponId": null,
"couponAmount": null,
"tipAmount": "0",
"inboundExternalPaymentId": null,
"recurringPaymentFlag": null,
"description": "Transfer to tz25",
"payerOrgUserId": "23",
"payerUserId": "23",
"payerName": "tz23",
"payerAccountId": "41",
"presPayerAmount": "1000",
"payerGiftCardAmount": "0",
"payerGiftCardAccountId": null,
"payerMembershipId": null,
"payerMembershipAmount": "0",
"payerBonusRewardId": null,
"payerBonusRewardAmount": "0",
"payerFee": "0",
"beneUserId": "25",
"beneAccountId": "55",
"beneName": "tz25",
"presBeneAmount": "1000",
"beneFee": "0",
"beneGiftCardDebitAmount": "0",
"beneMembershipDebitAmount": "0",
"isInitiatedByPayer": "1",
"createdAt": "2022-03-25 12:39:24.714306",
"creationStartTime": "2022-03-25 12:39:24.706462",
"executionStartTime": "2022-03-25 12:39:24.716061",
"processingAt": null,
"completedAt": "2022-03-25 13:39:24.723058",
"statusText": "successful"
},
"refund": {
"id": "1",
"_id": "REFSBD5OV3RLLAXGW89Q",
"refundedPaymentId": "5",
"type": "2",
"currencyCode": "XAF",
"amount": "1000",
"dueDate": "2022-03-28 12:39:24",
"status": "3",
"payerUserId": "25",
"payerOrgUserId": "25",
"merchantUserId": "23",
"lastUpdatedByUserId": null,
"paymentId": null,
"refundedActivityPoints": "0",
"merchantRefundNumber": null,
"note": null,
"reasonCode": "5",
"isFinalRefund": "1",
"disputeId": null,
"isInitiatedBy": "2",
"isCancelledBy": "0",
"isApprovedBy": "1",
"createdAt": "2022-03-25 12:39:24",
"cancelledAt": null,
"approvedAt": "2022-03-25 12:39:24",
"lastUpdatedAt": "2022-03-25 13:39:24",
"lastUpdatedByStaffId": null
},
"currencyCode": "XAF"
}
],
"success": true,
"debugInfo": null,
"debug": {
"lang": "en-US",
"dateTime": "2022-03-25T18:10:53+00:00",
"hostname": "cortex01",
"serverIpAddress": "192.168.137.2",
"clientIpAddress": "192.168.137.1",
"duration": "0.047s",
"userId": "1",
"staffId": "1",
"staffFirstName": null
}
}
Bank Settlements
Settlement is the process of debiting our internal accounts and crediting the external accounts for funds destined to external treasuries (mobile money providers, banks, etc). Mobile wallets support automatic settlements, for in-flow and out-flows . For bank accounts (ATM) settlement will be carried out manually via file upload.
Status Codes
const STATUS_PENDING = 1;
const STATUS_FILE_GEN_IN_PROGRESS = 2;
const STATUS_FILE_GEN_COMPLETED = 3;
const STATUS_THIRD_PARTY_PROCESSING = 4;
const STATUS_RECON_FILE_GEN_IN_PROGRESS = 5;
const STATUS_RECON_REVIEW_PENDING = 6;
const STATUS_SETTLEMENT_EXECUTION_IN_PROGRESS = 7;
const STATUS_BATCH_FAILURE = -2; //At least one or more batches failed. Requires relaunch
const STATUS_COMPLETED = 8;
const STATUS_CANCELLED = -1 ;
List Settlement Types
Displays list of bank settlement types
Request URL
GET /backoffice/settlement/list-types
Response
{
"data": {
"2": "Intra-bank transfer",
"3": "inter-bank/ACH transfer",
"4": "pre-paid card transfer"
},
"success": true,
}
List of Settlement Banks
Displays available settlement treasuries (non-paginated). Sorted by Priority from high to low
Request Endpoint
GET /backoffice/settlement/list-settlement-banks
Response
{
"data": [
{
"id": "3",
"userId": "4",
"countryCode": "CM",
"type": "1",
"shortName": "UBA Cameroon",
"name": "UBA Cameroon",
"description": "CM | UBA Cameroon",
"isOffline": "0",
"status": "1",
"isPaymentMethod": "1",
"bankCode": "10033",
"isOutboundPaymentProvider": "1",
"outboundRatePercentage": "2.6000",
"avatarUrl": "/static/img/partners/uba.png",
"cardAvatarUrl": "/static/img/partners/cards/",
"isSelectableByUsers": "1",
"isVerificationSource": "0",
"isExpressPaymentSupported": "1",
"paymentWebRedirectUrl": null,
"inboundMinAmount": "1",
"inboundMaxAmount": "1000000",
"inboundPercentageCharge": "2",
"inboundFixedCharge": "10",
"outboundMinAmount": "1",
"outboundMaxAmount": "100000",
"outboundFixedCharge": "10",
"outboundPercentageCharge": "2",
"outboundProcessingTimeInHours": null,
"outboundMaxJobPerBatch": null,
"ussdMobileMoneyDialCode": null,
"enableVisaPrepaidSettlement": "0",
"enableMastercardPrepaidSettlement": "0",
"isSettlementEntity": "1",
"settlementPriority": "100",
"maxPrepaidCardJobsPerBatch": "100",
"maxIntraBankJobsPerBatch": "100",
"maxInterBankJobsPerBatch": "100",
"settlementAccountId": "13",
"swiftCode": null,
"createdByStaffId": null,
"createdAt": "2022-04-11 18:50:33",
"updatedAt": null
}
],
"success": true,
}
Create a Bank Settlement
Creates a settlement record using a bank as settlement entity.
Endpoint
POST /backoffice/settlement/create-bank-settlement
Request Body Parameters
| Parameter | Type | required | Description |
|---|---|---|---|
| name | String | true | An arbitrary name for this settlement |
| type | int | true | The type of settlement. CALL the GET /backoffice/settlement/list-types for list of types |
| settlementTreasuryId | int | true | Treasury ID. CALL the GET /backoffice/settlement/list-settlement-banks for list of sett banks. |
{
"name" : "today sett" ,
"settlementTreasuryId" : 3 ,
"type" : 2
}
Response
See VIEW settlement section
View a Bank Settlement
Displays record
Endpoint
GET /backoffice/settlement/view-settlement?id=SETT_ID
Request Body Parameters
| Parameter | Type | required | Description |
|---|---|---|---|
| id | String | true | ID of settlement object |
Response
See VIEW settlement section
{
"data": {
"approvedByStaffId": null,
"createdAt": "2022-03-22 09:03:22",
"createdByStaffId": "1",
"id": 1,
"name": "today sett",
"status": "1",
"statusText": "pending",
"tag": "220322_0903_Settlement"
},
"success": true
}
List Bank Settlements
Displays list of settlement records
Endpoint
GET /backoffice/settlement/list-settlements
Request Body Parameters
| Parameter | Type | required | Description |
|---|---|---|---|
| id | String | true | ID of settlement object |
| name | String | true | name filter |
| status | String | true | Filter by status id |
Response
{
"data": {
"currentPage": 1,
"hasMore": false,
"list": [
{
"id": "1",
"tag": "220322_0903_Settlement",
"name": "today sett",
"status": "1",
"createdByStaffId": "1",
"approvedByStaffId": null,
"createdAt": "2022-03-22 09:03:22",
"statusText": "pending",
"numberOfBatches": "0"
},
{
"id": "2",
"tag": "220322_0903_Settlement",
"name": "today sett",
"status": "1",
"createdByStaffId": "1",
"approvedByStaffId": null,
"createdAt": "2022-03-22 09:06:20",
"statusText": "pending",
"numberOfBatches": "0"
},
{
"id": "3",
"tag": "220322_0903_Settlement",
"name": "today sett",
"status": "1",
"createdByStaffId": "1",
"approvedByStaffId": null,
"createdAt": "2022-03-22 09:06:27",
"statusText": "pending",
"numberOfBatches": "0"
},
{
"id": "4",
"tag": "220322_0903_Settlement",
"name": "today sett",
"status": "1",
"createdByStaffId": "1",
"approvedByStaffId": null,
"createdAt": "2022-03-22 09:06:45",
"statusText": "pending",
"numberOfBatches": "0"
},
{
"id": "5",
"tag": "220322_0903_Settlement",
"name": "today sett",
"status": "1",
"createdByStaffId": "1",
"approvedByStaffId": null,
"createdAt": "2022-03-22 09:07:33",
"statusText": "pending",
"numberOfBatches": "0"
}
],
"pageCount": [
1,
50
],
"pageSize": 20,
"totalItems": 5
},
"success": true
}
Generates a Batch files
Generate batch files that will be submitted to settlement bank. Pay attention to the status code.
Endpoint
POST /backoffice/settlement/gen-batch-files
Request Body Parameters
| Parameter | Type | required | Description |
|---|---|---|---|
| id | String | true | ID of settlement object |
Response
See VIEW settlement section
View a single batch in a settlement
Generate batch files that will be submitted to settlement bank. Pay attention to the status code.
Endpoint
POST /backoffice/settlement/view-batch?id=BATCH_ID
Request Body Parameters
| Parameter | Type | required | Description |
|---|---|---|---|
| id | String | true | ID of settlement object |
Response
{
"data": {
"_id": "OB2203177NAM1KCU",
"amount": 100,
"bankSettlementId": null,
"completedAt": null,
"createdAt": "2022-03-17 08:47:39",
"currencyCode": "XAF",
"errorCode": 23,
"id": 1,
"isPriority": 0,
"lastUpdatedAt": "2022-03-17 09:48:14",
"partnerCompletedAt": null,
"partnerFee": null,
"partnerFileSequenceNumber": null,
"partnerNostroAccountNumber": null,
"partnerRequestReferenceId": "088e1a43-251c-48e0-923e-979af82699d0",
"partnerResponseData": null,
"partnerTransactionAmount": null,
"partnerTransactionId": null,
"paymentId": null,
"requestFile": null,
"responseFile": null,
"retryAttempts": 1,
"settlementTreasuryId": 1,
"status": -1,
"statusText": "partner communication error",
"submittedAt": null,
"treasury": {
"shortName": "MTN Momo",
"name": "MTN Momo",
"bankCode": null,
"type": 2,
"typeText": "Telecom operator",
"avatarUrl": "/static/img/partners/mtn.png"
},
"type": 1,
"typeText": "automated/real-time API transfer"
},
"success": true
}
List Batches (for single settlement or all)
Lists batches matching a settlement ID or all batches
Endpoint
POST /backoffice/settlement/list-batches
Request Body Parameters
| Parameter | Type | required | Description |
|---|---|---|---|
| id | String | true | ID of settlement object |
| _id | String | true | ID of settlement object |
| settlementTreasuryId | String | true | settlement Treasury ID |
| bankSettlementId | String | true | ID of settlement object |
| type | String | true | type |
| status | String | true | status |
Response
{
"data": {
"currentPage": 1,
"hasMore": false,
"list": [
{
"id": "6",
"batchId": "1",
"paymentId": "13",
"errorMessage": null,
"errorCode": "5",
"isFailed": "0",
"partnerRecordNumber": "PP220322FKOODF6A5BZT|",
"partnerRecordType": "PP220322FKOODF6A5BZT|",
"partnerBeneficiaryBankName": "PP220322FKOODF6A5BZT|",
"partnerBeneficiaryAccountNumber": "PP220322FKOODF6A5BZT|",
"partnerBeneficiaryName": "PP220322FKOODF6A5BZT|",
"partnerCurrencyCode": "XAF",
"partnerTransactionAmount": 1000,
"partnerTransactionTime": null,
"partnerNarration": "PP220322FKOODF6A5BZT|",
"partnerReferenceId": "PP220322FKOODF6A5BZT|",
"partnerTransactionStatus": "PP220322FKOODF6A5BZT|",
"partnerStatusMessage": "PP220322FKOODF6A5BZT|",
"partnerDebitAccountNumber": "PP220322FKOODF6A5BZT|",
"partnerBeneficiaryNickname": "PP220322FKOODF6A5BZT|",
"partnerValidationStatus": null,
"partnerPrepaidFirst6Digits": null,
"partnerPrepaidLast4Digits": null,
"partnerPrepaidCustomerId": null,
"createdAt": "2022-03-22 10:49:47",
"lastUpdatedAt": null,
"isSuccess": "0",
"batch": {
"id": "1",
"_id": "OBGUU3IMQTE6BT9T",
"settlementTreasuryId": "3",
"type": "2",
"amount": 10000,
"currencyCode": "XAF",
"paymentId": null,
"status": "31",
"bankSettlementId": "1",
"isPriority": "0",
"retryAttempts": null,
"requestFile": "@datastore/batch_request/2022-03/20220322_UBA_Cameroon_INTRA_BANK_batch_1_batch.txt",
"responseFile": "@datastore/batch_response/2022-03/batch_1.txt",
"errorCode": null,
"createdAt": "2022-03-22 10:40:20",
"lastUpdatedAt": "2022-03-22 11:54:30",
"submittedAt": "2022-03-22 10:41:43",
"partnerTransactionAmount": null,
"partnerFee": null,
"partnerTransactionId": null,
"partnerCompletedAt": null,
"partnerRequestReferenceId": "9042fe7f-400e-4a40-945c-fcb2ce0b7b2e",
"partnerFileSequenceNumber": null,
"partnerNostroAccountNumber": null,
"partnerResponseData": null,
"completedAt": null
}
},
{
"id": "10",
"batchId": "1",
"paymentId": "23",
"errorMessage": null,
"errorCode": "5",
"isFailed": "0",
"partnerRecordNumber": "PP220322L8YRWNKM1O8Z|",
"partnerRecordType": "PP220322L8YRWNKM1O8Z|",
"partnerBeneficiaryBankName": "PP220322L8YRWNKM1O8Z|",
"partnerBeneficiaryAccountNumber": "PP220322L8YRWNKM1O8Z|",
"partnerBeneficiaryName": "PP220322L8YRWNKM1O8Z|",
"partnerCurrencyCode": "XAF",
"partnerTransactionAmount": 1000,
"partnerTransactionTime": null,
"partnerNarration": "PP220322L8YRWNKM1O8Z|",
"partnerReferenceId": "PP220322L8YRWNKM1O8Z|",
"partnerTransactionStatus": "PP220322L8YRWNKM1O8Z|",
"partnerStatusMessage": "PP220322L8YRWNKM1O8Z|",
"partnerDebitAccountNumber": "PP220322L8YRWNKM1O8Z|",
"partnerBeneficiaryNickname": "PP220322L8YRWNKM1O8Z|",
"partnerValidationStatus": null,
"partnerPrepaidFirst6Digits": null,
"partnerPrepaidLast4Digits": null,
"partnerPrepaidCustomerId": null,
"createdAt": "2022-03-22 10:49:47",
"lastUpdatedAt": null,
"isSuccess": "0",
"batch": {
"id": "1",
"_id": "OBGUU3IMQTE6BT9T",
"settlementTreasuryId": "3",
"type": "2",
"amount": 10000,
"currencyCode": "XAF",
"paymentId": null,
"status": "31",
"bankSettlementId": "1",
"isPriority": "0",
"retryAttempts": null,
"requestFile": "@datastore/batch_request/2022-03/20220322_UBA_Cameroon_INTRA_BANK_batch_1_batch.txt",
"responseFile": "@datastore/batch_response/2022-03/batch_1.txt",
"errorCode": null,
"createdAt": "2022-03-22 10:40:20",
"lastUpdatedAt": "2022-03-22 11:54:30",
"submittedAt": "2022-03-22 10:41:43",
"partnerTransactionAmount": null,
"partnerFee": null,
"partnerTransactionId": null,
"partnerCompletedAt": null,
"partnerRequestReferenceId": "9042fe7f-400e-4a40-945c-fcb2ce0b7b2e",
"partnerFileSequenceNumber": null,
"partnerNostroAccountNumber": null,
"partnerResponseData": null,
"completedAt": null
}
},
{
"id": "1",
"batchId": "1",
"paymentId": "2",
"errorMessage": null,
"errorCode": "5",
"isFailed": "0",
"partnerRecordNumber": "PP2203226388QAGV8TS7|",
"partnerRecordType": "PP2203226388QAGV8TS7|",
"partnerBeneficiaryBankName": "PP2203226388QAGV8TS7|",
"partnerBeneficiaryAccountNumber": "PP2203226388QAGV8TS7|",
"partnerBeneficiaryName": "PP2203226388QAGV8TS7|",
"partnerCurrencyCode": "XAF",
"partnerTransactionAmount": 1000,
"partnerTransactionTime": null,
"partnerNarration": "PP2203226388QAGV8TS7|",
"partnerReferenceId": "PP2203226388QAGV8TS7|",
"partnerTransactionStatus": "PP2203226388QAGV8TS7|",
"partnerStatusMessage": "PP2203226388QAGV8TS7|",
"partnerDebitAccountNumber": "PP2203226388QAGV8TS7|",
"partnerBeneficiaryNickname": "PP2203226388QAGV8TS7|",
"partnerValidationStatus": null,
"partnerPrepaidFirst6Digits": null,
"partnerPrepaidLast4Digits": null,
"partnerPrepaidCustomerId": null,
"createdAt": "2022-03-22 10:49:47",
"lastUpdatedAt": null,
"isSuccess": "0",
"batch": {
"id": "1",
"_id": "OBGUU3IMQTE6BT9T",
"settlementTreasuryId": "3",
"type": "2",
"amount": 10000,
"currencyCode": "XAF",
"paymentId": null,
"status": "31",
"bankSettlementId": "1",
"isPriority": "0",
"retryAttempts": null,
"requestFile": "@datastore/batch_request/2022-03/20220322_UBA_Cameroon_INTRA_BANK_batch_1_batch.txt",
"responseFile": "@datastore/batch_response/2022-03/batch_1.txt",
"errorCode": null,
"createdAt": "2022-03-22 10:40:20",
"lastUpdatedAt": "2022-03-22 11:54:30",
"submittedAt": "2022-03-22 10:41:43",
"partnerTransactionAmount": null,
"partnerFee": null,
"partnerTransactionId": null,
"partnerCompletedAt": null,
"partnerRequestReferenceId": "9042fe7f-400e-4a40-945c-fcb2ce0b7b2e",
"partnerFileSequenceNumber": null,
"partnerNostroAccountNumber": null,
"partnerResponseData": null,
"completedAt": null
}
},
],
"pageCount": [
1,
50
],
"pageSize": 20,
"totalItems": 10
},
"success": true
}
Confirm Reconciliation and Execute Settlement
After confirming the reconciliation data, the settlement is executed. Before execution, the actor should ensure that ALL transaction files from the settlement bank(s) have been uploaded to their respective batches - otherwise, execution will fail (with an informative error) . During execution : 1. the status of the original transactions , batch , batchJobs are marked as completed (or FAILED in case of failure); 2. Payouts and payout job statuses are also updated; 3. Refund is performed (for failed transactions) ;
Endpoint
POST /backoffice/settlement/execute-settlement
Request Body Parameters
| Parameter | Type | required | Description |
|---|---|---|---|
| id | String | true | ID of settlement object |
{
"id" : 1
}
Response
See VIEW section of Bank settlement
List Bank Settlements
Displays list of settlements
Endpoint
POST /backoffice/settlement/list-settlements
Request Filter params
| Parameter | Type | required | Description |
|---|---|---|---|
| id | String | true | ID of settlement object |
| name | String | false | name |
| tag | String | false | tag |
| status | String | false | status |
| name | String | false | name |
| name | String | false | name |
const STATUS_PENDING = 1;
const STATUS_FILE_GEN_IN_PROGRESS = 2;
const STATUS_FILE_GEN_COMPLETED = 3;
const STATUS_THIRD_PARTY_PROCESSING = 4;
const STATUS_RECON_FILE_GEN_IN_PROGRESS = 5;
const STATUS_RECON_REVIEW_PENDING = 6;
const STATUS_SETTLEMENT_EXECUTION_IN_PROGRESS = 7;
const STATUS_BATCH_FAILURE = -2;
const STATUS_COMPLETED = 8;
const STATUS_CANCELLED = -1 ;
Response
Display paginated list
{
"data": {
"currentPage": 1,
"hasMore": false,
"list": [
{
"id": "1",
"tag": "220322_1203_Settlement",
"name": "today sett",
"status": "8",
"createdByStaffId": "1",
"approvedByStaffId": null,
"createdAt": "2022-03-22 12:05:44",
"statusText": "successful",
"numberOfBatches": "2"
},
{
"id": "2",
"tag": "220322_0103_Settlement",
"name": "today sett",
"status": "1",
"createdByStaffId": "1",
"approvedByStaffId": null,
"createdAt": "2022-03-22 13:03:32",
"statusText": "pending",
"numberOfBatches": "0"
}
],
"pageCount": [
1,
50
],
"pageSize": 20,
"totalItems": 2
},
"success": true
}
List Transactions
Displays paginated list of transactions
Endpoint
POST /backoffice/settlement/list-transactions
Request Filter params
| Parameter | Type | required | Description |
|---|---|---|---|
| id | String | false | ID of settlement object |
| _id | String | false | name |
| status | String | false | status |
| type | String | false | type |
| isInitiatedByPayer | String | false | isInitiatedByPayer |
| currencyCode | String | false | currencyCode |
| type | String | false | type |
| serviceType | String | false | serviceType |
Status code
const STATUS_PENDING = 10;
const STATUS_PAYMENT_IN_PROGRESS = 11 ; //useful for merchant qr payment
const STATUS_EXTPAY_PENDING = 12 ; // Awaiting confi
const STATUS_RE_AUTHO_REQUIRED = 13; // Re-authorization required
const STATUS_THIRD_PARTY_PROCESSING = 21 ;
const STATUS_COMPLETED = 30;
const STATUS_REVERSED = -10;
const STATUS_REFUNDED = -11 ;
const STATUS_CANCELLED = -20;
const STATUS_EXPIRED = -21; // used for expired pending transactions
const STATUS_FAILED = -30 ;
Types code
const TYPE_TRANSFER = 1; //Default service type TRANSFER for non-merchant p2p
const TYPE_PAYMENT = self::TYPE_TRANSFER ;
const TYPE_MERCHANT_PAYMENT = 3;
const TYPE_REFUND = 4;
const TYPE_REVERSAL = 5;
const TYPE_FEE = 6;
const TYPE_TOPUP = 7;
const TYPE_CASHOUT = 8;
Types code
const TYPE_TRANSFER = 1; //Default service type TRANSFER for non-merchant p2p
const TYPE_PAYMENT = self::TYPE_TRANSFER ;
const TYPE_MERCHANT_PAYMENT = 3;
const TYPE_REFUND = 4;
const TYPE_REVERSAL = 5;
const TYPE_FEE = 6;
const TYPE_TOPUP = 7;
const TYPE_CASHOUT = 8;
Service Type codes
// Generic payment
const SERVICE_TYPE_PAYMENT = 1;
const SERVICE_TYPE_INVOICE = 3;
const SERVICE_TYPE_LUCKYMONEY = 5; //For SENDING OUT LM
const SERVICE_TYPE_LUCKY_DRAW = 6;
const SERVICE_TYPE_CSA_TOPUP = 7 ;
const SERVICE_TYPE_OUTBOUND_BATCH_CLEARING = 8 ;
const SERVICE_TYPE_DISCOUNT_PROMO = 9 ;
const SERVICE_TYPE_REFUND = 10;
const SERVICE_TYPE_REVERSAL = 11;
const SERVICE_TYPE_INSTORE = 12 ;
const SERVICE_TYPE_TREASURY_TOPUP = 15 ;
const SERVICE_TYPE_PAYMENTLINK = 17;
const SERVICE_TYPE_QR_CODE_PAYMENT = 18;
const SERVICE_TYPE_GIFT_CARD_PACK = 19;
const SERVICE_TYPE_SETTLEMENT = 21;
const SERVICE_TYPE_TREASURY_INBOUND_PAYMENT = 22;
const SERVICE_TYPE_PAYOUT = 23;
const SERVICE_TYPE_PAYMENT_REQUEST = 24;
const SERVICE_TYPE_PAYOUT_JOB = 25;
const SERVICE_TYPE_FEE_CHARGE = 26; // For fee deduction
const SERVICE_TYPE_SPLITPAYMENT = 27 ;
const SERVICE_TYPE_BONUS_REWARD = 28 ;
const SERVICE_TYPE_GIFTCARD_ACTIVATION = 30;
const SERVICE_TYPE_INTRA_ACCOUNT_SETTLEMENT = 31;
const SERVICE_TYPE_MERCHANT_SETTLEMENT = 32;
const SERVICE_TYPE_OUTBOUND_BATCH_PAYMENT = 33;
const SERVICE_TYPE_PREAUTH_CAPTURE = 34;
const SERVICE_TYPE_SHADOW_REVERSAL = 35;
const SERVICE_TYPE_BALANCE_UPDATE = 36; //"refund" transaction that is run to update the balance of the payer in case the inbound ext pay fails (e.g due to duplicate payment or (parent) transaction timing out)
const SERVICE_TYPE_GIFT_CARD_PURCHASE = 37;
const SERVICE_TYPE_MANUAL_SETTLEMENT = 38; //merchant manual settlement
const SERVICE_TYPE_MANUAL_SETTLEMENT_CROSS_BORDER = 39; //merchant manual settlement
const SERVICE_TYPE_MEMBERSHIP_PAYMENT = 40; // payment for membership
Response
Display paginated list
{
"data": {
"currentPage": 1,
"hasMore": false,
"list": [
{
"id": "25",
"_id": "PP2203227G9YWYPPXX3W",
"currencyCode": "XAF",
"amount": 1000,
"status": "30",
"statusText": "successful",
"type": "1",
"typeText": "transfer",
"serviceType": "25",
"serviceTypeText": "payment",
"description": "",
"completedAt": "2022-03-22 13:02:34.122648",
"isInitiatedByPayer": "1",
"couponAmount": 0,
"tipAmount": 0,
"payerOrgUser": {
"merchantDiscountAmount": 0,
"currencyCode": "XAF",
"amount": 1000,
"fee": 0,
"bonusAmount": 0,
"giftCardAmount": 0,
"netAmount": 1000,
"_id": "tz23",
"displayName": "tz23",
"isVerified": "0",
"avatarUrl": null
},
"payerAccount": {
"_id": "ACB4YEAS0QX17MJZ5ETK",
"currencyCode": "XAF",
"avatarUrl": "https://staging-api.tranzak.me/fapi/static/img/logos/tz-logo-btn.png",
"name": "Transient account",
"description": "",
"type": "14",
"typeText": "Transient account"
},
"beneUser": {
"currencyCode": "XAF",
"amount": 1000,
"fee": 0,
"netAmount": 1000,
"_id": "sys4nm3u3mipfrkh",
"beneName": "Afriland First Bank (Cameroon)|3330000000000333",
"isVerified": "0",
"avatarUrl": "/static/img/partners/afriland.png",
"displayName": "Wizzy Brown"
},
"beneAccount": {
"_id": "ACAC6KDP1GQZDJN57E2L",
"currencyCode": "XAF",
"avatarUrl": "https://staging-api.tranzak.me/fapi/static/img/logos/tz-logo-btn.png",
"name": "Afriland First Bank (Cameroon) | 3330000000000333",
"description": "",
"type": "3",
"typeText": "Payment service provider account"
},
"service": {
"type": "25",
"typeText": "payment"
}
},
{
"id": "24",
"_id": "PP2203220YWE3R64AYF2",
"currencyCode": "XAF",
"amount": 1000,
"status": "30",
"statusText": "successful",
"type": "1",
"typeText": "transfer",
"serviceType": "25",
"serviceTypeText": "payment",
"description": "",
"completedAt": "2022-03-22 13:02:34.115284",
"isInitiatedByPayer": "1",
"couponAmount": 0,
"tipAmount": 0,
"payerOrgUser": {
"merchantDiscountAmount": 0,
"currencyCode": "XAF",
"amount": 1000,
"fee": 0,
"bonusAmount": 0,
"giftCardAmount": 0,
"netAmount": 1000,
"_id": "tz23",
"displayName": "tz23",
"isVerified": "0",
"avatarUrl": null
},
"payerAccount": {
"_id": "ACB4YEAS0QX17MJZ5ETK",
"currencyCode": "XAF",
"avatarUrl": "https://staging-api.tranzak.me/fapi/static/img/logos/tz-logo-btn.png",
"name": "Transient account",
"description": "",
"type": "14",
"typeText": "Transient account"
},
"beneUser": {
"currencyCode": "XAF",
"amount": 1000,
"fee": 0,
"netAmount": 1000,
"_id": "sys4nm3u3mipfrkh",
"beneName": "Afriland First Bank (Cameroon)|2000222222222",
"isVerified": "0",
"avatarUrl": "/static/img/partners/afriland.png",
"displayName": "XiaLai Tui"
},
"beneAccount": {
"_id": "ACAC6KDP1GQZDJN57E2L",
"currencyCode": "XAF",
"avatarUrl": "https://staging-api.tranzak.me/fapi/static/img/logos/tz-logo-btn.png",
"name": "Afriland First Bank (Cameroon) | 2000222222222",
"description": "",
"type": "3",
"typeText": "Payment service provider account"
},
"service": {
"type": "25",
"typeText": "payment"
}
},
],
"pageCount": [
1,
50
],
"pageSize": 20,
"totalItems": 20
},
"success": true
}
Cash Deposit/Topup
Adds funds into the ecosystem .
Create Cash deposit request
Launch a request for CD
Request Endpoint
GET /backoffice/topup/list-csa
Request Params
| Parameter | Type | required | Description |
|---|---|---|---|
| countryCode | String(100) | false | countryCode |
Response
{
"data": [
{
"id": "10",
"countryCode": "CM",
"type": "gift_card_pack",
"accountId": "10",
"createdAt": "2022-03-25 12:20:51",
"_accountId": "ACH6XWJEJLDHSJ9DU7G3",
"typeText": "gift_card_pack",
"balanceAmount": 0
},
{
"id": "9",
"countryCode": "CM",
"type": "guest_payment",
"accountId": "9",
"createdAt": "2022-03-25 12:20:51",
"_accountId": "ACQJOELHLKHKV2LJP707",
"typeText": "guest_payment",
"balanceAmount": 0
},
{
"id": "8",
"countryCode": "CM",
"type": "cross_border",
"accountId": "8",
"createdAt": "2022-03-25 12:20:51",
"_accountId": "AC8LSATEM4JABPYOL346",
"typeText": "cross_border",
"balanceAmount": 0
},
{
"id": "7",
"countryCode": "CM",
"type": "treasury",
"accountId": "7",
"createdAt": "2022-03-25 12:20:51",
"_accountId": "ACCA7QKPH2VRMFMOIZ3P",
"typeText": "treasury",
"balanceAmount": 0
},
{
"id": "6",
"countryCode": "CM",
"type": "account_payable",
"accountId": "6",
"createdAt": "2022-03-25 12:20:51",
"_accountId": "ACYDS97RU9GT1Q20BKYX",
"typeText": "account_payable",
"balanceAmount": 0
},
{
"id": "5",
"countryCode": "CM",
"type": "profit_loss",
"accountId": "5",
"createdAt": "2022-03-25 12:20:51",
"_accountId": "ACKEK3436WXOHF3GTRPX",
"typeText": "profit_loss",
"balanceAmount": 0
},
{
"id": "4",
"countryCode": "CM",
"type": "luckymoney",
"accountId": "4",
"createdAt": "2022-03-25 12:20:51",
"_accountId": "ACCMOMHS5G4PLN3FBMQJ",
"typeText": "luckymoney",
"balanceAmount": 0
},
{
"id": "3",
"countryCode": "CM",
"type": "bonus_credit",
"accountId": "3",
"createdAt": "2022-03-25 12:20:51",
"_accountId": "AC23X8236X45PE7ZTSYC",
"typeText": "bonus_credit",
"balanceAmount": 0
},
{
"id": "2",
"countryCode": "CM",
"type": "external",
"accountId": "2",
"createdAt": "2022-03-25 12:20:51",
"_accountId": "ACRGFOF1Q8ENGVH3OTHG",
"typeText": "external",
"balanceAmount": 0
},
{
"id": "1",
"countryCode": "CM",
"type": "internal",
"accountId": "1",
"createdAt": "2022-03-25 12:20:51",
"_accountId": "ACI66XBMZALRNZ7PETWA",
"typeText": "internal",
"balanceAmount": 0
}
],
"success": true,
"debugInfo": null,
"debug": {
"lang": "en-US",
"dateTime": "2022-03-25T15:53:19+00:00",
"hostname": "cortex01",
"serverIpAddress": "192.168.137.2",
"clientIpAddress": "192.168.137.1",
"duration": "0.043s",
"userId": "1",
"staffId": "1",
"staffFirstName": null
}
}
List Top-ups
Request Endpoint
GET /backoffice/topup/list-topups
Request Params
[['id', 'amount', 'beneAccountId', 'sourceTreasuryServiceId', 'type', 'staffId',
'approvedByStaffId', 'status', 'paymentId' ,'currencyCode', 'approvedAt', 'createdAt', 'lastUpdatedAt'], 'safe'],
Response
Create Cash deposit
Creates a deposit request
Endpoint URL
GET /backoffice/topup/create-treasury-topup-request
Request params
{
"beneAccountId": 10,
"amount": 111111 ,
"note" : "transfer for blah blah"
}
Response
See VIEW section
Update Cash deposit
Updates a deposit request
Endpoint URL
GET /backoffice/topup/update
Request params
{
"id" : 1,
"beneAccountId": 10,
"amount": 111111 ,
"note" : "transfer for blah blah"
}
Approve Cash deposit
Approves a deposit request
Endpoint URL
GET /backoffice/topup/update
Request params
{
"id": 1
}
Response
See VIEW section
View Cash Deposit
Displays cash deposit
Request URL
GET /backoffice/topup/view?id=TOPUP_ID
Response
{
"data": {
"amount": "111111",
"approvedAt": null,
"approvedByStaffId": null,
"beneAccountId": 10,
"createdAt": "2022-03-25 15:57:50",
"currencyCode": "XAF",
"id": 1,
"lastUpdatedAt": null,
"note": "transfer for blah blah",
"paymentId": null,
"sourceTreasuryServiceId": null,
"staffId": 1,
"status": 1,
"type": 2
},
"success": true,
"debugInfo": null,
"debug": {
"lang": "en-US",
"dateTime": "2022-03-25T16:01:46+00:00",
"hostname": "cortex01",
"serverIpAddress": "192.168.137.2",
"clientIpAddress": "192.168.137.1",
"duration": "0.047s",
"userId": "1",
"staffId": "1",
"staffFirstName": null
}
}
List CSA Types
Displays lists of CSA types that may be topped up
Endpoint
GET /backoffice/topup/list-topup-csa
Request params
Response
{
"data": [
{
"id": "30",
"countryCode": "NG",
"type": "gift_card_pack",
"accountId": "245",
"createdAt": "2022-03-25 14:44:49",
"_accountId": "ACD2WZI9U8S1KVPGCP0P",
"typeText": "gift_card_pack",
"balanceAmount": 0
},
{
"id": "27",
"countryCode": "NG",
"type": "treasury",
"accountId": "242",
"createdAt": "2022-03-25 14:44:49",
"_accountId": "ACBOSFFR7YXXWH4DHFMT",
"typeText": "treasury",
"balanceAmount": 0
},
{
"id": "24",
"countryCode": "NG",
"type": "luckymoney",
"accountId": "239",
"createdAt": "2022-03-25 14:44:49",
"_accountId": "ACIE0EQB5AWXBA321I4O",
"typeText": "luckymoney",
"balanceAmount": 0
},
{
"id": "23",
"countryCode": "NG",
"type": "bonus_credit",
"accountId": "238",
"createdAt": "2022-03-25 14:44:49",
"_accountId": "ACPF871S7AHZZBSXRP5R",
"typeText": "bonus_credit",
"balanceAmount": 0
},
{
"id": "20",
"countryCode": "CD",
"type": "gift_card_pack",
"accountId": "235",
"createdAt": "2022-03-25 14:44:43",
"_accountId": "ACVF80H2YASW1F4FVWCA",
"typeText": "gift_card_pack",
"balanceAmount": 0
},
{
"id": "17",
"countryCode": "CD",
"type": "treasury",
"accountId": "232",
"createdAt": "2022-03-25 14:44:43",
"_accountId": "AC81GD2ESEZ1K21FP294",
"typeText": "treasury",
"balanceAmount": 0
},
{
"id": "14",
"countryCode": "CD",
"type": "luckymoney",
"accountId": "229",
"createdAt": "2022-03-25 14:44:43",
"_accountId": "ACZOXIZO57DFHUM23R5Z",
"typeText": "luckymoney",
"balanceAmount": 0
},
{
"id": "13",
"countryCode": "CD",
"type": "bonus_credit",
"accountId": "228",
"createdAt": "2022-03-25 14:44:43",
"_accountId": "ACBAFO376VM3PIV9MRZF",
"typeText": "bonus_credit",
"balanceAmount": 0
},
{
"id": "10",
"countryCode": "CM",
"type": "gift_card_pack",
"accountId": "10",
"createdAt": "2022-03-25 12:20:51",
"_accountId": "ACH6XWJEJLDHSJ9DU7G3",
"typeText": "gift_card_pack",
"balanceAmount": 0
},
{
"id": "7",
"countryCode": "CM",
"type": "treasury",
"accountId": "7",
"createdAt": "2022-03-25 12:20:51",
"_accountId": "ACCA7QKPH2VRMFMOIZ3P",
"typeText": "treasury",
"balanceAmount": 0
},
{
"id": "4",
"countryCode": "CM",
"type": "luckymoney",
"accountId": "4",
"createdAt": "2022-03-25 12:20:51",
"_accountId": "ACCMOMHS5G4PLN3FBMQJ",
"typeText": "luckymoney",
"balanceAmount": 0
},
{
"id": "3",
"countryCode": "CM",
"type": "bonus_credit",
"accountId": "3",
"createdAt": "2022-03-25 12:20:51",
"_accountId": "AC23X8236X45PE7ZTSYC",
"typeText": "bonus_credit",
"balanceAmount": 0
}
],
"success": true,
"debugInfo": null,
"debug": {
"lang": "en-US",
"dateTime": "2022-03-25T16:40:05+00:00",
"hostname": "cortex01",
"serverIpAddress": "192.168.137.2",
"clientIpAddress": "192.168.137.1",
"duration": "0.046s",
"userId": "1",
"staffId": "1",
"staffFirstName": null
}
}
BO Transactions
Manage transactions
View transactions
Displays list of transactions
Endpoint
GET /backoffice/transaction/list
Filter parameters
Request Filter params
| Parameter | Type | required | Description |
|---|---|---|---|
| id | String | true | id |
| _id | String | false | _id |
| type | String | false | type |
| currencyCode | String | false | isPaymentMethod |
| type | String | false | type |
| status | String | false | status |
| serviceType | String | false | serviceType |
| description | String | false | description |
| isInitiatedByPayer | String | false | isInitiatedByPayer |
... See list below Filter params
['payerUserId' ,'beneUserId' , 'beneIdToken' , 'description', 'currencyCode', 'startDateTime' , 'endDateTime' , '_id', 'accountId' , 'payerAccountId' ,'beneAccountId' , 'customerId', 'status' ,'startDateTime', 'endDateTime' ] ;
Transaction Statuses
const STATUS_PENDING = 10;
const STATUS_PAYMENT_IN_PROGRESS = 11 ; //useful for merchant qr payment
const STATUS_EXTPAY_PENDING = 12 ; // Awaiting confi
const STATUS_RE_AUTHO_REQUIRED = 13; // Re-authorization required
const STATUS_THIRD_PARTY_PROCESSING = 21 ;
const STATUS_COMPLETED = 30;
const STATUS_REVERSED = -10;
const STATUS_REFUNDED = -11 ;
const STATUS_CANCELLED = -20;
const STATUS_EXPIRED = -21; // used for expired pending transactions
const STATUS_FAILED = -30 ;
Type
const TYPE_TRANSFER = 1; //Default service type TRANSFER for non-merchant p2p
const TYPE_PAYMENT = self::TYPE_TRANSFER ;
const TYPE_MERCHANT_PAYMENT = 3;
const TYPE_REFUND = 4;
const TYPE_REVERSAL = 5;
const TYPE_FEE = 6;
const TYPE_TOPUP = 7;
const TYPE_CASHOUT = 8;
Service Type ID
// Generic payment
const SERVICE_TYPE_PAYMENT = 1;
const SERVICE_TYPE_INVOICE = 3;
const SERVICE_TYPE_LUCKYMONEY = 5; //For SENDING OUT LM
const SERVICE_TYPE_LUCKY_DRAW = 6;
const SERVICE_TYPE_CSA_TOPUP = 7 ;
const SERVICE_TYPE_OUTBOUND_BATCH_CLEARING = 8 ;
const SERVICE_TYPE_DISCOUNT_PROMO = 9 ;
const SERVICE_TYPE_REFUND = 10;
const SERVICE_TYPE_REVERSAL = 11;
const SERVICE_TYPE_INSTORE = 12 ;
const SERVICE_TYPE_TREASURY_TOPUP = 15 ;
const SERVICE_TYPE_PAYMENTLINK = 17;
const SERVICE_TYPE_QR_CODE_PAYMENT = 18;
const SERVICE_TYPE_GIFT_CARD_PACK = 19;
const SERVICE_TYPE_SETTLEMENT = 21;
const SERVICE_TYPE_TREASURY_INBOUND_PAYMENT = 22;
const SERVICE_TYPE_PAYOUT = 23;
const SERVICE_TYPE_PAYMENT_REQUEST = 24;
const SERVICE_TYPE_PAYOUT_JOB = 25;
const SERVICE_TYPE_FEE_CHARGE = 26; // For fee deduction
const SERVICE_TYPE_SPLITPAYMENT = 27 ;
const SERVICE_TYPE_BONUS_REWARD = 28 ;
const SERVICE_TYPE_GIFTCARD_ACTIVATION = 30;
const SERVICE_TYPE_INTRA_ACCOUNT_SETTLEMENT = 31;
const SERVICE_TYPE_MERCHANT_SETTLEMENT = 32;
const SERVICE_TYPE_OUTBOUND_BATCH_PAYMENT = 33;
const SERVICE_TYPE_PREAUTH_CAPTURE = 34;
const SERVICE_TYPE_SHADOW_REVERSAL = 35;
const SERVICE_TYPE_BALANCE_UPDATE = 36; //"refund" transaction that is run to update the balance of the payer in case the inbound ext pay fails (e.g due to duplicate payment or (parent) transaction timing out)
const SERVICE_TYPE_GIFT_CARD_PURCHASE = 37;
const SERVICE_TYPE_MANUAL_SETTLEMENT = 38; //merchant manual settlement
const SERVICE_TYPE_MANUAL_SETTLEMENT_CROSS_BORDER = 39; //merchant manual settlement
const SERVICE_TYPE_MEMBERSHIP_PAYMENT = 40; // payment for membership
Response
Transaction list
{
"data": {
"currentPage": 1,
"hasMore": true,
"list": [
{
"id": "47",
"_id": "PP220322XWKKQECYJHGP",
"currencyCode": "XAF",
"amount": 10000,
"status": "30",
"statusText": "successful",
"type": "1",
"typeText": "transfer",
"serviceType": "33",
"serviceTypeText": "payment",
"description": "Batch payment | ID=2",
"completedAt": "2022-03-22 14:02:33.741109",
"isInitiatedByPayer": "1",
"couponAmount": 0,
"tipAmount": 0,
"payerOrgUser": {
"merchantDiscountAmount": 0,
"currencyCode": "XAF",
"amount": 10000,
"fee": 0,
"bonusAmount": 0,
"giftCardAmount": 0,
"netAmount": 10000,
"_id": "sysyhpjef1v5w0rd",
"displayName": "UBA Cameroon",
"isVerified": "0",
"avatarUrl": "/static/img/partners/uba.png"
},
"payerAccount": {
"_id": "ACOIC8XM0R4XK60N2JNM",
"currencyCode": "XAF",
"avatarUrl": "https://staging-api.tranzak.me/fapi/static/img/logos/tz-logo-btn.png",
"name": "10",
"description": "",
"type": "10",
"typeText": "10"
},
"beneUser": {
"currencyCode": "XAF",
"amount": 10000,
"fee": 0,
"netAmount": 10000,
"_id": "sys7a6t4ta3flb39",
"beneName": "Tranzak System Account | Cameroon",
"isVerified": "0",
"avatarUrl": null
},
"beneAccount": {
"_id": "ACCZS872EISPY6XWCT3L",
"currencyCode": "XAF",
"avatarUrl": "https://staging-api.tranzak.me/fapi/static/img/logos/tz-logo-btn.png",
"name": "CSA account",
"description": "",
"type": "2",
"typeText": "CSA account"
},
"service": {
"type": "33",
"typeText": "payment"
}
},
{
"id": "46",
"_id": "PP220322NT19Q3LCQ1W3",
"currencyCode": "XAF",
"amount": 10000,
"status": "30",
"statusText": "successful",
"type": "1",
"typeText": "transfer",
"serviceType": "33",
"serviceTypeText": "payment",
"description": "Batch payment | ID=1",
"completedAt": "2022-03-22 14:02:33.576162",
"isInitiatedByPayer": "1",
"couponAmount": 0,
"tipAmount": 0,
"payerOrgUser": {
"merchantDiscountAmount": 0,
"currencyCode": "XAF",
"amount": 10000,
"fee": 0,
"bonusAmount": 0,
"giftCardAmount": 0,
"netAmount": 10000,
"_id": "sysyhpjef1v5w0rd",
"displayName": "UBA Cameroon",
"isVerified": "0",
"avatarUrl": "/static/img/partners/uba.png"
},
"payerAccount": {
"_id": "ACOIC8XM0R4XK60N2JNM",
"currencyCode": "XAF",
"avatarUrl": "https://staging-api.tranzak.me/fapi/static/img/logos/tz-logo-btn.png",
"name": "10",
"description": "",
"type": "10",
"typeText": "10"
},
"beneUser": {
"currencyCode": "XAF",
"amount": 10000,
"fee": 0,
"netAmount": 10000,
"_id": "sys7a6t4ta3flb39",
"beneName": "Tranzak System Account | Cameroon",
"isVerified": "0",
"avatarUrl": null
},
"beneAccount": {
"_id": "ACCZS872EISPY6XWCT3L",
"currencyCode": "XAF",
"avatarUrl": "https://staging-api.tranzak.me/fapi/static/img/logos/tz-logo-btn.png",
"name": "CSA account",
"description": "",
"type": "2",
"typeText": "CSA account"
},
"service": {
"type": "33",
"typeText": "payment"
}
},
],
"pageCount": [
1,
50
],
"pageSize": 10,
"totalItems": 47
},
"success": true,
}
List Sales
Request Endpoint
GET /backoffice/transaction/sales
Request Filter params
['payerUserId' ,'beneUserId' , 'beneIdToken' , 'description', 'currencyCode', 'startDateTime' , 'endDateTime' , '_id', 'accountId' , 'payerAccountId' ,'beneAccountId' , 'customerId', 'status' , 'mchTransactionRef' , 'giftCardPackId' , 'couponId' , 'withTip' , 'membershipPlanId'] ;
Response
Same as in transaction list
View Transaction Details
Displays details of transaction
Request Endpoint
GET /backoffice/transaction/view?transactionId=TXN_ID
Request Filter params
| Parameter | Type | required | Description |
|---|---|---|---|
| id | String | true | txn ID |
| _id | String | true | _id |
Response
{
"data": {
"_id": "PP2203227G9YWYPPXX3W",
"amount": 1000,
"beneAccountId": 18,
"beneFee": 0,
"beneGiftCardDebitAmount": 0,
"beneMembershipDebitAmount": 0,
"beneName": "Afriland First Bank (Cameroon)|3330000000000333",
"beneNetAmount": 1000,
"beneUserId": 6,
"collectedCouponId": null,
"completedAt": "2022-03-22 13:02:34.122648",
"couponAmount": 0,
"createdAt": "2022-03-22 12:05:38.063811",
"creationStartTime": "2022-03-22 12:05:38.058287",
"currencyCode": "XAF",
"description": "Payment to Afriland First Bank (Cameroon)",
"executionStartTime": "2022-03-22 12:05:38.066853",
"id": "25",
"inboundExternalPaymentId": null,
"isInitiatedByPayer": 1,
"journals": [
{
"id": "55",
"paymentId": "25",
"isCredit": 1,
"accountId": 18,
"amount": 1000,
"currencyCode": "XAF",
"openingBalance": 0,
"closingBalance": 0,
"createdAt": "2022-03-22 13:05:38"
},
{
"id": "54",
"paymentId": "25",
"isCredit": 0,
"accountId": 40,
"amount": -1000,
"currencyCode": "XAF",
"openingBalance": 1000,
"closingBalance": 0,
"createdAt": "2022-03-22 13:05:38"
}
],
"metaData": {
"paymentId": "25",
"disablePayerAccountSelection": null,
"mchTransactionRef": null,
"itemDetails": "",
"inboundAccountNumber": "",
"inboundAccountName": "",
"inboundAccountEmail": null,
"payerNote": "",
"beneNote": "",
"outboundTreasuryServiceId": 5,
"outboundOrgName": "Afriland First Bank (Cameroon)",
"outboundAccountNumber": "3330000000000333",
"outboundAccountName": "Wizzy Brown",
"outboundBankCode": "10005",
"outboundBranchCode": "0005",
"outboundRibCode": "56",
"outboundPrepaidFirst6Digits": null,
"outboundPrepaidLast4Digits": null,
"outboundPrepaidCustomerId": null,
"payerLocationCoordinates": null,
"subscriptionId": null,
"subscriptionPlanId": null,
"appId": null,
"notifyUrl": "",
"returnUrl": "",
"createdAt": "2022-03-22 12:05:38",
"lastUpdatedAt": null
},
"outboundJob": {
"paymentId": "25",
"userId": 23,
"accountId": 18,
"batchId": 2,
"clearingPaymentId": "37",
"status": 5,
"partnerTransactionId": "PP2203227G9YWYPPXX3W",
"partnerTransactionTime": null,
"retryAttempts": null,
"note": "Hello wizz|AFB",
"errorCode": null,
"failMessage": "PP2203227G9YWYPPXX3W",
"createdAt": "2022-03-22 12:05:38",
"lastUpdatedAt": "2022-03-22 13:02:34"
},
"parentId": "21",
"payerAccountId": 40,
"payerBonusRewardAmount": 0,
"payerBonusRewardId": null,
"payerFee": 0,
"payerGiftCardAccountId": null,
"payerGiftCardAmount": 0,
"payerMembershipAmount": 0,
"payerMembershipId": null,
"payerName": "tz23",
"payerNetAmount": 1000,
"payerOrgUserId": 23,
"payerUserId": 23,
"presBeneAmount": 1000,
"presPayerAmount": 1000,
"processingAt": "2022-03-22 13:05:38.069270",
"recurringPaymentFlag": null,
"serviceId": 20,
"serviceType": "payment",
"status": 30,
"statusText": "successful",
"tipAmount": 0,
"type": 1,
"typeText": "transfer"
},
"success": true,
"debugInfo": null,
"debug": {
"lang": "en-US",
"dateTime": "2022-03-22T17:27:00+00:00",
"hostname": "cortex01",
"serverIpAddress": "192.168.137.2",
"clientIpAddress": "192.168.137.1",
"duration": "0.048s",
"userId": "1",
"staffId": "1",
"staffFirstName": null
}
}
BO Treasury Management
A treasury is where funds (money) are stored. They include banks, wallets, credit issuing entities (Visa, Mastercard)
Add a Treasury
Adds a treasury into the system
Endpoint
POST /backoffice/treasury/add
Request Filter params
| Parameter | Type | required | Description |
|---|---|---|---|
| countryCode | String | true | ID of settlement object |
| name | String | false | name |
| shortName | String | false | shortName |
| description | String | false | description |
| type | String | false | type |
| avatarUrl | String | false | avatarUrl |
| isSelectableByUsers | String | false | isSelectableByUsers |
| isSettlementEntity | String | false | isSettlementEntity |
| isPaymentMethod | String | false | isPaymentMethod |
{
"countryCode" : "CM" ,
"name" : "Tranzak 1Bank Corporation" ,
"shortName" : "Tranzak 1Bank" ,
"description" : "Tranzak OneBank" ,
"type" : 1,
"avatarUrl" : "https://tranzak.me/assets/img/hero-img.png" ,
"isSelectableByUsers" : 1 ,
"isSettlementEntity" : 1 ,
"isPaymentMethod" : 1
}
Response
See the VIEW section
Updates a Treasury
Updates treasury properties
Endpoint
POST /backoffice/treasury/update
Request Filter params
| Parameter | Type | required | Description |
|---|---|---|---|
| id | String | true | ID of treasury |
| name | String | false | name |
| shortName | String | false | shortName |
| description | String | false | description |
| type | String | false | type |
| avatarUrl | String | false | avatarUrl |
| isSelectableByUsers | String | false | isSelectableByUsers |
| isSettlementEntity | String | false | isSettlementEntity |
| isPaymentMethod | String | false | isPaymentMethod |
{
"id": 1,
"name" : "Tranzak 1Bank Corporation" ,
"shortName" : "Tranzak 1Bank" ,
"description" : "Tranzak OneBank" ,
"type" : 1,
"avatarUrl" : "https://tranzak.me/assets/img/hero-img.png" ,
"isSelectableByUsers" : 1 ,
"isSettlementEntity" : 1 ,
"isPaymentMethod" : 1
}
Response
See the VIEW section
View Treasury
Displays treasury details
Endpoint
POST /backoffice/treasury/view?id=TREASURY_ID
Request Filter params
| Parameter | Type | required | Description |
|---|---|---|---|
| id | String | true | ID of settlement object |
Response
{
"data": {
"avatarUrl": "/static/img/partners/mtn.png",
"bankCode": null,
"cardAvatarUrl": "/static/img/partners/cards/",
"countryCode": "CM",
"createdAt": "2022-03-22 12:04:56",
"createdByStaffId": null,
"description": "CM | MTN Momo",
"enableMastercardPrepaidSettlement": 0,
"enableVisaPrepaidSettlement": 0,
"id": 1,
"inboundFixedCharge": 10,
"inboundMaxAmount": "1000000",
"inboundMinAmount": "1",
"inboundPercentageCharge": "2",
"isExpressPaymentSupported": 1,
"isOffline": 0,
"isOutboundPaymentProvider": 1,
"isPaymentMethod": 1,
"isSelectableByUsers": 1,
"isSettlementEntity": 1,
"isVerificationSource": 0,
"maxInterBankJobsPerBatch": null,
"maxIntraBankJobsPerBatch": null,
"maxPrepaidCardJobsPerBatch": null,
"name": "MTN Momo",
"outboundFixedCharge": 10,
"outboundMaxAmount": "100000",
"outboundMaxJobPerBatch": null,
"outboundMinAmount": "1",
"outboundPercentageCharge": "2",
"outboundProcessingTimeInHours": null,
"outboundRatePercentage": "2.2000",
"paymentWebRedirectUrl": null,
"settlementAccountId": 11,
"settlementPriority": 10,
"shortName": "MTN Momo",
"status": 1,
"swiftCode": null,
"type": 2,
"updatedAt": null,
"userId": 3,
"ussdMobileMoneyDialCode": "*126#"
},
"success": true
}
List treasuries
Displays paginated list of treasuries
Endpoint
POST /backoffice/treasury/list?id=TREASURY_ID
Request Filter params
| Parameter | Type | required | Description |
|---|---|---|---|
| id | String | true | ID of settlement object |
| countryCode | String | true | countryCode |
| type | String | true | type |
| shortName | String | true | shortName |
| name | String | true | name |
| description | String | true | description |
| bankCode | String | true | bankCode |
| status | String | true | status |
Response
{
"data": {
"currentPage": 1,
"hasMore": true,
"list": [
{
"id": 1,
"userId": 3,
"countryCode": "CM",
"type": 2,
"shortName": "MTN Momo",
"name": "MTN Momo",
"description": "CM | MTN Momo",
"isOffline": 0,
"status": 1,
"isPaymentMethod": 1,
"bankCode": null,
"isOutboundPaymentProvider": 1,
"outboundRatePercentage": "2.2000",
"avatarUrl": "/static/img/partners/mtn.png",
"cardAvatarUrl": "/static/img/partners/cards/",
"isSelectableByUsers": 1,
"isVerificationSource": 0,
"isExpressPaymentSupported": 1,
"paymentWebRedirectUrl": null,
"inboundMinAmount": "1",
"inboundMaxAmount": "1000000",
"inboundPercentageCharge": "2",
"inboundFixedCharge": 10,
"outboundMinAmount": "1",
"outboundMaxAmount": "100000",
"outboundFixedCharge": 10,
"outboundPercentageCharge": "2",
"outboundProcessingTimeInHours": null,
"outboundMaxJobPerBatch": null,
"ussdMobileMoneyDialCode": "*126#",
"enableVisaPrepaidSettlement": 0,
"enableMastercardPrepaidSettlement": 0,
"isSettlementEntity": 1,
"settlementPriority": 10,
"maxPrepaidCardJobsPerBatch": null,
"maxIntraBankJobsPerBatch": null,
"maxInterBankJobsPerBatch": null,
"settlementAccountId": 11,
"swiftCode": null,
"createdByStaffId": null,
"createdAt": "2022-03-22 12:04:56",
"updatedAt": null
},
{
"id": 2,
"userId": 4,
"countryCode": "CM",
"type": 2,
"shortName": "Orange Money",
"name": "Orange Money",
"description": "CM | Orange Money",
"isOffline": 0,
"status": 1,
"isPaymentMethod": 1,
"bankCode": null,
"isOutboundPaymentProvider": 1,
"outboundRatePercentage": "1.8000",
"avatarUrl": "/static/img/partners/orange.png",
"cardAvatarUrl": "/static/img/partners/cards/",
"isSelectableByUsers": 1,
"isVerificationSource": 0,
"isExpressPaymentSupported": 1,
"paymentWebRedirectUrl": null,
"inboundMinAmount": "1",
"inboundMaxAmount": "1000000",
"inboundPercentageCharge": "2",
"inboundFixedCharge": 10,
"outboundMinAmount": "1",
"outboundMaxAmount": "100000",
"outboundFixedCharge": 10,
"outboundPercentageCharge": "2",
"outboundProcessingTimeInHours": null,
"outboundMaxJobPerBatch": null,
"ussdMobileMoneyDialCode": "#150#",
"enableVisaPrepaidSettlement": 0,
"enableMastercardPrepaidSettlement": 0,
"isSettlementEntity": 1,
"settlementPriority": 10,
"maxPrepaidCardJobsPerBatch": null,
"maxIntraBankJobsPerBatch": null,
"maxInterBankJobsPerBatch": null,
"settlementAccountId": 13,
"swiftCode": null,
"createdByStaffId": null,
"createdAt": "2022-03-22 12:04:56",
"updatedAt": null
},
],
"pageCount": [
1,
50
],
"pageSize": 20,
"totalItems": 21
},
"success": true
}
List Settlement Treasuries
Endpoint
GET /backoffice/treasury/list-settlement-banks
Response
See the treasury list under the LIST section
Add a Treasury Service
A treasury may offer one or more services. e.g a Visa issues Credit cards and pre-paid cards
Endpoint
POST /backoffice/treasury/add-service-account
Request Filter params
| Parameter | Type | required | Description |
|---|---|---|---|
| countryCode | String | true | countryCode |
| serviceName | String | false | serviceName |
| type | String | false | type |
| isPaymentMethod | String | false | isPaymentMethod |
| type | String | false | type |
| treasuryId | String | true | treasuryId |
| avatarUrl | String | false | avatarUrl |
{
"countryCode": "CM",
"serviceName": "Tz 1Bank Wallet",
"type": 1,
"isPaymentMethod": "Tranzak OneBank",
"treasuryId": 10,
"avatarUrl": "https://tranzak.me/assets/img/hero-img.png"
}
Response
See the VIEW Treasury Service section
Update a Treasury Service
Updates a TS
Endpoint
POST /backoffice/treasury/update-service-account
Request Filter params
| Parameter | Type | required | Description |
|---|---|---|---|
| id | String | true | countryCode |
| serviceName | String | false | serviceName |
| type | String | false | type |
| isPaymentMethod | String | false | isPaymentMethod |
| type | String | false | type |
| avatarUrl | String | false | avatarUrl |
| isEnabled | String | false | isEnabled |
| isOffline | String | false | isOffline |
{
"countryCode": "CM",
"serviceName": "Tz 1Bank Wallet",
"type": 1,
"isPaymentMethod": "Tranzak OneBank",
"treasuryId": 10,
"avatarUrl": "https://tranzak.me/assets/img/hero-img.png"
}
Response
See the VIEW Treasury Service section
View a Treasury Service
View treasury service details
Endpoint
GET /backoffice/treasury/view-service-account?id=SERVICE_ID
Request Filter params
| Parameter | Type | required | Description |
|---|---|---|---|
| id | String | true | countryCode |
Response
See the VIEW Treasury Service section
{
"data": {
"_accountId": "ACP03M6UJ95UTSYNBOAJ",
"accountId": 12,
"avatarUrl": "https://staging-api.tranzak.me/fapi/static/img/partners/mtn.png",
"countryCode": "CM",
"countryName": "Cameroon",
"createdAt": "2022-03-22 12:04:56",
"createdByStaffId": null,
"externalBalance": 0,
"id": 1,
"isEnabled": 1,
"isOffline": 0,
"isPaymentMethod": 1,
"lastUpdatedAt": null,
"serviceName": "",
"serviceTypeText": "telecom wallet",
"treasuryId": 1,
"treasuryName": "MTN Momo",
"treasuryShortName": "MTN Momo",
"treasuryType": 2,
"treasuryTypeText": "Telecom operator",
"type": 4
},
"success": true,
}
User (BO)
User management
List Users
Lists users with filter options
Request Endpoint
GET /backoffice/user/list
Request Params
[['residenceCountryCode' , 'merchantId' , 'id', 'orgUserId', 'roleId', 'type', 'isRNVerified', 'loginEnabled', 'defaultSendingAccountId', 'canReceivePayment', 'canSendPayment'], 'safe'],
[['_id', 'ufId', 'scopeId', 'primaryCurrencyCode', 'residenceCountryCode', 'firstName', 'lastName', 'displayName', 'verifiedName', 'paymentPin', 'phoneNumber', 'language', 'timeZone', 'avatarUrl', 'createdAt', 'lastUpdatedAt'], 'safe'],
Response
{
"data": {
"currentPage": 1,
"hasMore": true,
"list": [
{
"id": "43",
"_id": "tz43",
"ufId": null,
"orgUserId": null,
"scopeId": null,
"roleId": "1000",
"primaryCurrencyCode": "XAF",
"residenceCountryCode": "CM",
"type": "3",
"firstName": null,
"lastName": null,
"displayName": "tz43",
"verifiedName": null,
"paymentPin": "$2y$05$rzEUcrWUyKnqY8ccMBejYOnISzontDQsbNPWpDOPwdW.NyQoe15PC",
"phoneNumber": null,
"language": "en_GB",
"timeZone": "Africa/Douala",
"isRNVerified": "0",
"loginEnabled": "1",
"avatarUrl": null,
"defaultSendingAccountId": null,
"canReceivePayment": "1",
"canSendPayment": "1",
"createdAt": "2022-03-25 12:20:53",
"lastUpdatedAt": "2022-03-25 13:20:53",
"merchant": {
"id": "21",
"userId": "43",
"commission": null,
"internalSettlementCommission": null,
"commissionCap": null,
"minSettlementAmount": null,
"settlementWindowId": null,
"settlementAccountId": null,
"enableManualSettlement": "0",
"maxActiveCoupons": null,
"maxCouponsPerPromotion": null,
"maxLuckyMoneyQuantity": null,
"maxLuckyMoneyAmount": null,
"enableGuestPayments": "0",
"enableInPersonPayment": "0",
"maxSubAccounts": null,
"enableGiftCard": "0",
"enablePreFinancedGiftCard": null,
"enableVirtualAccounts": "0",
"maxVirtualAccounts": null,
"gracePeriodEndsAt": "2022-04-24 12:20:53",
"enableMembershipService": "0",
"enableCrossBorderCollection": "0",
"enableCustomCouponCodes": "0",
"payoutAllowedIpAddressList": null,
"freezeSettlement": null,
"giftCardFundingAccountId": "222",
"membershipDebitAccountId": "223",
"createdAt": "2022-03-25 12:20:53",
"lastUpdatedAt": null,
"lastUpdatedByStaffId": null
},
"typeText": "business account",
"roleText": "owner",
"merchantId": "21"
},
{
"id": "42",
"_id": "tz42",
"ufId": null,
"orgUserId": null,
"scopeId": null,
"roleId": "1000",
"primaryCurrencyCode": "XAF",
"residenceCountryCode": "CM",
"type": "3",
"firstName": null,
"lastName": null,
"displayName": "tz42",
"verifiedName": null,
"paymentPin": "$2y$05$HbxqR13prOrFDcBiDTOPOeN4BBKP8pN3SrdtVysbjJLfGA4BAGvYy",
"phoneNumber": null,
"language": "en_GB",
"timeZone": "Africa/Douala",
"isRNVerified": "0",
"loginEnabled": "1",
"avatarUrl": null,
"defaultSendingAccountId": null,
"canReceivePayment": "1",
"canSendPayment": "1",
"createdAt": "2022-03-25 12:20:53",
"lastUpdatedAt": "2022-03-25 13:20:53",
"merchant": {
"id": "20",
"userId": "42",
"commission": null,
"internalSettlementCommission": null,
"commissionCap": null,
"minSettlementAmount": null,
"settlementWindowId": null,
"settlementAccountId": null,
"enableManualSettlement": "0",
"maxActiveCoupons": null,
"maxCouponsPerPromotion": null,
"maxLuckyMoneyQuantity": null,
"maxLuckyMoneyAmount": null,
"enableGuestPayments": "0",
"enableInPersonPayment": "0",
"maxSubAccounts": null,
"enableGiftCard": "0",
"enablePreFinancedGiftCard": null,
"enableVirtualAccounts": "0",
"maxVirtualAccounts": null,
"gracePeriodEndsAt": "2022-04-24 12:20:53",
"enableMembershipService": "0",
"enableCrossBorderCollection": "0",
"enableCustomCouponCodes": "0",
"payoutAllowedIpAddressList": null,
"freezeSettlement": null,
"giftCardFundingAccountId": "213",
"membershipDebitAccountId": "214",
"createdAt": "2022-03-25 12:20:53",
"lastUpdatedAt": null,
"lastUpdatedByStaffId": null
},
"typeText": "business account",
"roleText": "owner",
"merchantId": "20"
},
{
"id": "41",
"_id": "tz41",
"ufId": null,
"orgUserId": null,
"scopeId": null,
"roleId": "1000",
"primaryCurrencyCode": "XAF",
"residenceCountryCode": "CM",
"type": "3",
"firstName": null,
"lastName": null,
"displayName": "tz41",
"verifiedName": null,
"paymentPin": "$2y$05$YNpO8ab8tRnmwzyeqig0eeMrQUByR7J2ir0jgkuJASP82w1yTgJDi",
"phoneNumber": null,
"language": "en_GB",
"timeZone": "Africa/Douala",
"isRNVerified": "0",
"loginEnabled": "1",
"avatarUrl": null,
"defaultSendingAccountId": null,
"canReceivePayment": "1",
"canSendPayment": "1",
"createdAt": "2022-03-25 12:20:53",
"lastUpdatedAt": "2022-03-25 13:20:53",
"merchant": {
"id": "19",
"userId": "41",
"commission": null,
"internalSettlementCommission": null,
"commissionCap": null,
"minSettlementAmount": null,
"settlementWindowId": null,
"settlementAccountId": null,
"enableManualSettlement": "0",
"maxActiveCoupons": null,
"maxCouponsPerPromotion": null,
"maxLuckyMoneyQuantity": null,
"maxLuckyMoneyAmount": null,
"enableGuestPayments": "0",
"enableInPersonPayment": "0",
"maxSubAccounts": null,
"enableGiftCard": "0",
"enablePreFinancedGiftCard": null,
"enableVirtualAccounts": "0",
"maxVirtualAccounts": null,
"gracePeriodEndsAt": "2022-04-24 12:20:53",
"enableMembershipService": "0",
"enableCrossBorderCollection": "0",
"enableCustomCouponCodes": "0",
"payoutAllowedIpAddressList": null,
"freezeSettlement": null,
"giftCardFundingAccountId": "204",
"membershipDebitAccountId": "205",
"createdAt": "2022-03-25 12:20:53",
"lastUpdatedAt": null,
"lastUpdatedByStaffId": null
},
"typeText": "business account",
"roleText": "owner",
"merchantId": "19"
},
{
"id": "40",
"_id": "tz40",
"ufId": null,
"orgUserId": null,
"scopeId": null,
"roleId": "1000",
"primaryCurrencyCode": "XAF",
"residenceCountryCode": "CM",
"type": "3",
"firstName": null,
"lastName": null,
"displayName": "tz40",
"verifiedName": null,
"paymentPin": "$2y$05$BIxny0oZLOKpSMVAsqVc0eHRYL1LdAR8qb39iGoyW1i89Q3fw.5O.",
"phoneNumber": null,
"language": "en_GB",
"timeZone": "Africa/Douala",
"isRNVerified": "0",
"loginEnabled": "1",
"avatarUrl": null,
"defaultSendingAccountId": null,
"canReceivePayment": "1",
"canSendPayment": "1",
"createdAt": "2022-03-25 12:20:53",
"lastUpdatedAt": "2022-03-25 13:20:53",
"merchant": {
"id": "18",
"userId": "40",
"commission": null,
"internalSettlementCommission": null,
"commissionCap": null,
"minSettlementAmount": null,
"settlementWindowId": null,
"settlementAccountId": null,
"enableManualSettlement": "0",
"maxActiveCoupons": null,
"maxCouponsPerPromotion": null,
"maxLuckyMoneyQuantity": null,
"maxLuckyMoneyAmount": null,
"enableGuestPayments": "0",
"enableInPersonPayment": "0",
"maxSubAccounts": null,
"enableGiftCard": "0",
"enablePreFinancedGiftCard": null,
"enableVirtualAccounts": "0",
"maxVirtualAccounts": null,
"gracePeriodEndsAt": "2022-04-24 12:20:53",
"enableMembershipService": "0",
"enableCrossBorderCollection": "0",
"enableCustomCouponCodes": "0",
"payoutAllowedIpAddressList": null,
"freezeSettlement": null,
"giftCardFundingAccountId": "195",
"membershipDebitAccountId": "196",
"createdAt": "2022-03-25 12:20:53",
"lastUpdatedAt": null,
"lastUpdatedByStaffId": null
},
"typeText": "business account",
"roleText": "owner",
"merchantId": "18"
},
{
"id": "39",
"_id": "tz39",
"ufId": null,
"orgUserId": null,
"scopeId": null,
"roleId": "1000",
"primaryCurrencyCode": "XAF",
"residenceCountryCode": "CM",
"type": "3",
"firstName": null,
"lastName": null,
"displayName": "tz39",
"verifiedName": null,
"paymentPin": "$2y$05$DhdvLuEkHLzMFHFQIh1Qn.gpt.4OspKrkRtilT0vfOLe646VUCykq",
"phoneNumber": null,
"language": "en_GB",
"timeZone": "Africa/Douala",
"isRNVerified": "0",
"loginEnabled": "1",
"avatarUrl": null,
"defaultSendingAccountId": null,
"canReceivePayment": "1",
"canSendPayment": "1",
"createdAt": "2022-03-25 12:20:53",
"lastUpdatedAt": "2022-03-25 13:20:53",
"merchant": {
"id": "17",
"userId": "39",
"commission": null,
"internalSettlementCommission": null,
"commissionCap": null,
"minSettlementAmount": null,
"settlementWindowId": null,
"settlementAccountId": null,
"enableManualSettlement": "0",
"maxActiveCoupons": null,
"maxCouponsPerPromotion": null,
"maxLuckyMoneyQuantity": null,
"maxLuckyMoneyAmount": null,
"enableGuestPayments": "0",
"enableInPersonPayment": "0",
"maxSubAccounts": null,
"enableGiftCard": "0",
"enablePreFinancedGiftCard": null,
"enableVirtualAccounts": "0",
"maxVirtualAccounts": null,
"gracePeriodEndsAt": "2022-04-24 12:20:53",
"enableMembershipService": "0",
"enableCrossBorderCollection": "0",
"enableCustomCouponCodes": "0",
"payoutAllowedIpAddressList": null,
"freezeSettlement": null,
"giftCardFundingAccountId": "186",
"membershipDebitAccountId": "187",
"createdAt": "2022-03-25 12:20:53",
"lastUpdatedAt": null,
"lastUpdatedByStaffId": null
},
"typeText": "business account",
"roleText": "owner",
"merchantId": "17"
},
{
"id": "38",
"_id": "tz38",
"ufId": null,
"orgUserId": null,
"scopeId": null,
"roleId": "1000",
"primaryCurrencyCode": "XAF",
"residenceCountryCode": "CM",
"type": "3",
"firstName": null,
"lastName": null,
"displayName": "tz38",
"verifiedName": null,
"paymentPin": "$2y$05$8piP03dwHIQh9Fz7.DteM.2PqIV8BemwsIRETz6GpJmRR3rDwJsKC",
"phoneNumber": null,
"language": "en_GB",
"timeZone": "Africa/Douala",
"isRNVerified": "0",
"loginEnabled": "1",
"avatarUrl": null,
"defaultSendingAccountId": null,
"canReceivePayment": "1",
"canSendPayment": "1",
"createdAt": "2022-03-25 12:20:52",
"lastUpdatedAt": "2022-03-25 13:20:52",
"merchant": {
"id": "16",
"userId": "38",
"commission": null,
"internalSettlementCommission": null,
"commissionCap": null,
"minSettlementAmount": null,
"settlementWindowId": null,
"settlementAccountId": null,
"enableManualSettlement": "0",
"maxActiveCoupons": null,
"maxCouponsPerPromotion": null,
"maxLuckyMoneyQuantity": null,
"maxLuckyMoneyAmount": null,
"enableGuestPayments": "0",
"enableInPersonPayment": "0",
"maxSubAccounts": null,
"enableGiftCard": "0",
"enablePreFinancedGiftCard": null,
"enableVirtualAccounts": "0",
"maxVirtualAccounts": null,
"gracePeriodEndsAt": "2022-04-24 12:20:52",
"enableMembershipService": "0",
"enableCrossBorderCollection": "0",
"enableCustomCouponCodes": "0",
"payoutAllowedIpAddressList": null,
"freezeSettlement": null,
"giftCardFundingAccountId": "177",
"membershipDebitAccountId": "178",
"createdAt": "2022-03-25 12:20:52",
"lastUpdatedAt": null,
"lastUpdatedByStaffId": null
},
"typeText": "business account",
"roleText": "owner",
"merchantId": "16"
},
{
"id": "37",
"_id": "tz37",
"ufId": null,
"orgUserId": null,
"scopeId": null,
"roleId": "1000",
"primaryCurrencyCode": "XAF",
"residenceCountryCode": "CM",
"type": "3",
"firstName": null,
"lastName": null,
"displayName": "tz37",
"verifiedName": null,
"paymentPin": "$2y$05$NGDjJXhAH6tF6ufj1CaEdORVyYXSf8s6Bd9//6/lIhWksU.REdN9i",
"phoneNumber": null,
"language": "en_GB",
"timeZone": "Africa/Douala",
"isRNVerified": "0",
"loginEnabled": "1",
"avatarUrl": null,
"defaultSendingAccountId": null,
"canReceivePayment": "1",
"canSendPayment": "1",
"createdAt": "2022-03-25 12:20:52",
"lastUpdatedAt": "2022-03-25 13:20:52",
"merchant": {
"id": "15",
"userId": "37",
"commission": null,
"internalSettlementCommission": null,
"commissionCap": null,
"minSettlementAmount": null,
"settlementWindowId": null,
"settlementAccountId": null,
"enableManualSettlement": "0",
"maxActiveCoupons": null,
"maxCouponsPerPromotion": null,
"maxLuckyMoneyQuantity": null,
"maxLuckyMoneyAmount": null,
"enableGuestPayments": "0",
"enableInPersonPayment": "0",
"maxSubAccounts": null,
"enableGiftCard": "0",
"enablePreFinancedGiftCard": null,
"enableVirtualAccounts": "0",
"maxVirtualAccounts": null,
"gracePeriodEndsAt": "2022-04-24 12:20:52",
"enableMembershipService": "0",
"enableCrossBorderCollection": "0",
"enableCustomCouponCodes": "0",
"payoutAllowedIpAddressList": null,
"freezeSettlement": null,
"giftCardFundingAccountId": "168",
"membershipDebitAccountId": "169",
"createdAt": "2022-03-25 12:20:52",
"lastUpdatedAt": null,
"lastUpdatedByStaffId": null
},
"typeText": "business account",
"roleText": "owner",
"merchantId": "15"
},
{
"id": "36",
"_id": "tz36",
"ufId": null,
"orgUserId": null,
"scopeId": null,
"roleId": "1000",
"primaryCurrencyCode": "XAF",
"residenceCountryCode": "CM",
"type": "3",
"firstName": null,
"lastName": null,
"displayName": "tz36",
"verifiedName": null,
"paymentPin": "$2y$05$.pbN5KwKnGtiuqKtRTlmWuxKad2hNAIZDc0hjlP75B2ljWP11LLim",
"phoneNumber": null,
"language": "en_GB",
"timeZone": "Africa/Douala",
"isRNVerified": "0",
"loginEnabled": "1",
"avatarUrl": null,
"defaultSendingAccountId": null,
"canReceivePayment": "1",
"canSendPayment": "1",
"createdAt": "2022-03-25 12:20:52",
"lastUpdatedAt": "2022-03-25 13:20:52",
"merchant": {
"id": "14",
"userId": "36",
"commission": null,
"internalSettlementCommission": null,
"commissionCap": null,
"minSettlementAmount": null,
"settlementWindowId": null,
"settlementAccountId": null,
"enableManualSettlement": "0",
"maxActiveCoupons": null,
"maxCouponsPerPromotion": null,
"maxLuckyMoneyQuantity": null,
"maxLuckyMoneyAmount": null,
"enableGuestPayments": "0",
"enableInPersonPayment": "0",
"maxSubAccounts": null,
"enableGiftCard": "0",
"enablePreFinancedGiftCard": null,
"enableVirtualAccounts": "0",
"maxVirtualAccounts": null,
"gracePeriodEndsAt": "2022-04-24 12:20:52",
"enableMembershipService": "0",
"enableCrossBorderCollection": "0",
"enableCustomCouponCodes": "0",
"payoutAllowedIpAddressList": null,
"freezeSettlement": null,
"giftCardFundingAccountId": "159",
"membershipDebitAccountId": "160",
"createdAt": "2022-03-25 12:20:52",
"lastUpdatedAt": null,
"lastUpdatedByStaffId": null
},
"typeText": "business account",
"roleText": "owner",
"merchantId": "14"
},
{
"id": "35",
"_id": "tz35",
"ufId": null,
"orgUserId": null,
"scopeId": null,
"roleId": "1000",
"primaryCurrencyCode": "XAF",
"residenceCountryCode": "CM",
"type": "3",
"firstName": null,
"lastName": null,
"displayName": "tz35",
"verifiedName": null,
"paymentPin": "$2y$05$Cyw7Meo5om96wyDi7s5CcefZ2q5r/YDVtxW/BdIfg.MURgiKjfwgG",
"phoneNumber": null,
"language": "en_GB",
"timeZone": "Africa/Douala",
"isRNVerified": "0",
"loginEnabled": "1",
"avatarUrl": null,
"defaultSendingAccountId": null,
"canReceivePayment": "1",
"canSendPayment": "1",
"createdAt": "2022-03-25 12:20:52",
"lastUpdatedAt": "2022-03-25 13:20:52",
"merchant": {
"id": "13",
"userId": "35",
"commission": null,
"internalSettlementCommission": null,
"commissionCap": null,
"minSettlementAmount": null,
"settlementWindowId": null,
"settlementAccountId": null,
"enableManualSettlement": "0",
"maxActiveCoupons": null,
"maxCouponsPerPromotion": null,
"maxLuckyMoneyQuantity": null,
"maxLuckyMoneyAmount": null,
"enableGuestPayments": "0",
"enableInPersonPayment": "0",
"maxSubAccounts": null,
"enableGiftCard": "0",
"enablePreFinancedGiftCard": null,
"enableVirtualAccounts": "0",
"maxVirtualAccounts": null,
"gracePeriodEndsAt": "2022-04-24 12:20:52",
"enableMembershipService": "0",
"enableCrossBorderCollection": "0",
"enableCustomCouponCodes": "0",
"payoutAllowedIpAddressList": null,
"freezeSettlement": null,
"giftCardFundingAccountId": "150",
"membershipDebitAccountId": "151",
"createdAt": "2022-03-25 12:20:52",
"lastUpdatedAt": null,
"lastUpdatedByStaffId": null
},
"typeText": "business account",
"roleText": "owner",
"merchantId": "13"
},
{
"id": "34",
"_id": "tz34",
"ufId": null,
"orgUserId": null,
"scopeId": null,
"roleId": "1000",
"primaryCurrencyCode": "XAF",
"residenceCountryCode": "CM",
"type": "3",
"firstName": null,
"lastName": null,
"displayName": "tz34",
"verifiedName": null,
"paymentPin": "$2y$05$SPEjLsVzUMsSHmnr7JNgPe441TwJ5JGYzPhFfjUWbu54WAzp3O5n.",
"phoneNumber": null,
"language": "en_GB",
"timeZone": "Africa/Douala",
"isRNVerified": "0",
"loginEnabled": "1",
"avatarUrl": null,
"defaultSendingAccountId": null,
"canReceivePayment": "1",
"canSendPayment": "1",
"createdAt": "2022-03-25 12:20:52",
"lastUpdatedAt": "2022-03-25 13:20:52",
"merchant": {
"id": "12",
"userId": "34",
"commission": null,
"internalSettlementCommission": null,
"commissionCap": null,
"minSettlementAmount": null,
"settlementWindowId": null,
"settlementAccountId": null,
"enableManualSettlement": "0",
"maxActiveCoupons": null,
"maxCouponsPerPromotion": null,
"maxLuckyMoneyQuantity": null,
"maxLuckyMoneyAmount": null,
"enableGuestPayments": "0",
"enableInPersonPayment": "0",
"maxSubAccounts": null,
"enableGiftCard": "0",
"enablePreFinancedGiftCard": null,
"enableVirtualAccounts": "0",
"maxVirtualAccounts": null,
"gracePeriodEndsAt": "2022-04-24 12:20:52",
"enableMembershipService": "0",
"enableCrossBorderCollection": "0",
"enableCustomCouponCodes": "0",
"payoutAllowedIpAddressList": null,
"freezeSettlement": null,
"giftCardFundingAccountId": "141",
"membershipDebitAccountId": "142",
"createdAt": "2022-03-25 12:20:52",
"lastUpdatedAt": null,
"lastUpdatedByStaffId": null
},
"typeText": "business account",
"roleText": "owner",
"merchantId": "12"
},
{
"id": "33",
"_id": "tz33",
"ufId": null,
"orgUserId": null,
"scopeId": null,
"roleId": "1000",
"primaryCurrencyCode": "XAF",
"residenceCountryCode": "CM",
"type": "3",
"firstName": null,
"lastName": null,
"displayName": "tz33",
"verifiedName": null,
"paymentPin": "$2y$05$pAnMeu/ZU2/dnR0e9t73W.Khm4T8rvkfj.CETKOLdnwune6QHyvHW",
"phoneNumber": null,
"language": "en_GB",
"timeZone": "Africa/Douala",
"isRNVerified": "0",
"loginEnabled": "1",
"avatarUrl": null,
"defaultSendingAccountId": null,
"canReceivePayment": "1",
"canSendPayment": "1",
"createdAt": "2022-03-25 12:20:52",
"lastUpdatedAt": "2022-03-25 13:20:52",
"merchant": {
"id": "11",
"userId": "33",
"commission": null,
"internalSettlementCommission": null,
"commissionCap": null,
"minSettlementAmount": null,
"settlementWindowId": null,
"settlementAccountId": null,
"enableManualSettlement": "0",
"maxActiveCoupons": null,
"maxCouponsPerPromotion": null,
"maxLuckyMoneyQuantity": null,
"maxLuckyMoneyAmount": null,
"enableGuestPayments": "0",
"enableInPersonPayment": "0",
"maxSubAccounts": null,
"enableGiftCard": "0",
"enablePreFinancedGiftCard": null,
"enableVirtualAccounts": "0",
"maxVirtualAccounts": null,
"gracePeriodEndsAt": "2022-04-24 12:20:52",
"enableMembershipService": "0",
"enableCrossBorderCollection": "0",
"enableCustomCouponCodes": "0",
"payoutAllowedIpAddressList": null,
"freezeSettlement": null,
"giftCardFundingAccountId": "132",
"membershipDebitAccountId": "133",
"createdAt": "2022-03-25 12:20:52",
"lastUpdatedAt": null,
"lastUpdatedByStaffId": null
},
"typeText": "business account",
"roleText": "owner",
"merchantId": "11"
},
{
"id": "32",
"_id": "tz32",
"ufId": null,
"orgUserId": null,
"scopeId": null,
"roleId": "1000",
"primaryCurrencyCode": "XAF",
"residenceCountryCode": "CM",
"type": "3",
"firstName": null,
"lastName": null,
"displayName": "tz32",
"verifiedName": null,
"paymentPin": "$2y$05$Bb29b2odhEt5GPQMMwJOUuMB/9naxZ8q3hs3ga.ZCSMeYZpmoladO",
"phoneNumber": null,
"language": "en_GB",
"timeZone": "Africa/Douala",
"isRNVerified": "0",
"loginEnabled": "1",
"avatarUrl": null,
"defaultSendingAccountId": null,
"canReceivePayment": "1",
"canSendPayment": "1",
"createdAt": "2022-03-25 12:20:52",
"lastUpdatedAt": "2022-03-25 13:20:52",
"merchant": {
"id": "10",
"userId": "32",
"commission": null,
"internalSettlementCommission": null,
"commissionCap": null,
"minSettlementAmount": null,
"settlementWindowId": null,
"settlementAccountId": null,
"enableManualSettlement": "0",
"maxActiveCoupons": null,
"maxCouponsPerPromotion": null,
"maxLuckyMoneyQuantity": null,
"maxLuckyMoneyAmount": null,
"enableGuestPayments": "0",
"enableInPersonPayment": "0",
"maxSubAccounts": null,
"enableGiftCard": "0",
"enablePreFinancedGiftCard": null,
"enableVirtualAccounts": "0",
"maxVirtualAccounts": null,
"gracePeriodEndsAt": "2022-04-24 12:20:52",
"enableMembershipService": "0",
"enableCrossBorderCollection": "0",
"enableCustomCouponCodes": "0",
"payoutAllowedIpAddressList": null,
"freezeSettlement": null,
"giftCardFundingAccountId": "123",
"membershipDebitAccountId": "124",
"createdAt": "2022-03-25 12:20:52",
"lastUpdatedAt": null,
"lastUpdatedByStaffId": null
},
"typeText": "business account",
"roleText": "owner",
"merchantId": "10"
},
{
"id": "31",
"_id": "tz31",
"ufId": null,
"orgUserId": null,
"scopeId": null,
"roleId": "1000",
"primaryCurrencyCode": "XAF",
"residenceCountryCode": "CM",
"type": "3",
"firstName": null,
"lastName": null,
"displayName": "tz31",
"verifiedName": null,
"paymentPin": "$2y$05$IfZaEWekyqiP6l6iISLXkuN8Z9vktmp9/UZrxvge5GjYH48IU9Kj6",
"phoneNumber": null,
"language": "en_GB",
"timeZone": "Africa/Douala",
"isRNVerified": "0",
"loginEnabled": "1",
"avatarUrl": null,
"defaultSendingAccountId": null,
"canReceivePayment": "1",
"canSendPayment": "1",
"createdAt": "2022-03-25 12:20:52",
"lastUpdatedAt": "2022-03-25 13:20:52",
"merchant": {
"id": "9",
"userId": "31",
"commission": null,
"internalSettlementCommission": null,
"commissionCap": null,
"minSettlementAmount": null,
"settlementWindowId": null,
"settlementAccountId": null,
"enableManualSettlement": "0",
"maxActiveCoupons": null,
"maxCouponsPerPromotion": null,
"maxLuckyMoneyQuantity": null,
"maxLuckyMoneyAmount": null,
"enableGuestPayments": "0",
"enableInPersonPayment": "0",
"maxSubAccounts": null,
"enableGiftCard": "0",
"enablePreFinancedGiftCard": null,
"enableVirtualAccounts": "0",
"maxVirtualAccounts": null,
"gracePeriodEndsAt": "2022-04-24 12:20:52",
"enableMembershipService": "0",
"enableCrossBorderCollection": "0",
"enableCustomCouponCodes": "0",
"payoutAllowedIpAddressList": null,
"freezeSettlement": null,
"giftCardFundingAccountId": "114",
"membershipDebitAccountId": "115",
"createdAt": "2022-03-25 12:20:52",
"lastUpdatedAt": null,
"lastUpdatedByStaffId": null
},
"typeText": "business account",
"roleText": "owner",
"merchantId": "9"
},
{
"id": "30",
"_id": "tz30",
"ufId": null,
"orgUserId": null,
"scopeId": null,
"roleId": "1000",
"primaryCurrencyCode": "XAF",
"residenceCountryCode": "CM",
"type": "3",
"firstName": null,
"lastName": null,
"displayName": "tz30",
"verifiedName": null,
"paymentPin": "$2y$05$8kk6FNC2wBUDZRAu2yQ7yuv6xAVDV7IJBMHNY9LQuPiXUJBu01hRW",
"phoneNumber": null,
"language": "en_GB",
"timeZone": "Africa/Douala",
"isRNVerified": "0",
"loginEnabled": "1",
"avatarUrl": null,
"defaultSendingAccountId": null,
"canReceivePayment": "1",
"canSendPayment": "1",
"createdAt": "2022-03-25 12:20:52",
"lastUpdatedAt": "2022-03-25 13:20:52",
"merchant": {
"id": "8",
"userId": "30",
"commission": null,
"internalSettlementCommission": null,
"commissionCap": null,
"minSettlementAmount": null,
"settlementWindowId": null,
"settlementAccountId": null,
"enableManualSettlement": "0",
"maxActiveCoupons": null,
"maxCouponsPerPromotion": null,
"maxLuckyMoneyQuantity": null,
"maxLuckyMoneyAmount": null,
"enableGuestPayments": "0",
"enableInPersonPayment": "0",
"maxSubAccounts": null,
"enableGiftCard": "0",
"enablePreFinancedGiftCard": null,
"enableVirtualAccounts": "0",
"maxVirtualAccounts": null,
"gracePeriodEndsAt": "2022-04-24 12:20:52",
"enableMembershipService": "0",
"enableCrossBorderCollection": "0",
"enableCustomCouponCodes": "0",
"payoutAllowedIpAddressList": null,
"freezeSettlement": null,
"giftCardFundingAccountId": "105",
"membershipDebitAccountId": "106",
"createdAt": "2022-03-25 12:20:52",
"lastUpdatedAt": null,
"lastUpdatedByStaffId": null
},
"typeText": "business account",
"roleText": "owner",
"merchantId": "8"
},
{
"id": "29",
"_id": "tz29",
"ufId": null,
"orgUserId": null,
"scopeId": null,
"roleId": "1000",
"primaryCurrencyCode": "XAF",
"residenceCountryCode": "CM",
"type": "3",
"firstName": null,
"lastName": null,
"displayName": "tz29",
"verifiedName": null,
"paymentPin": "$2y$05$GGx9slw3CAB7db17Vi9pNehe9alwb6Tvi9ybL2Z9Cz4R6MCcZdgg.",
"phoneNumber": null,
"language": "en_GB",
"timeZone": "Africa/Douala",
"isRNVerified": "0",
"loginEnabled": "1",
"avatarUrl": null,
"defaultSendingAccountId": null,
"canReceivePayment": "1",
"canSendPayment": "1",
"createdAt": "2022-03-25 12:20:52",
"lastUpdatedAt": "2022-03-25 13:20:52",
"merchant": {
"id": "7",
"userId": "29",
"commission": null,
"internalSettlementCommission": null,
"commissionCap": null,
"minSettlementAmount": null,
"settlementWindowId": null,
"settlementAccountId": null,
"enableManualSettlement": "0",
"maxActiveCoupons": null,
"maxCouponsPerPromotion": null,
"maxLuckyMoneyQuantity": null,
"maxLuckyMoneyAmount": null,
"enableGuestPayments": "0",
"enableInPersonPayment": "0",
"maxSubAccounts": null,
"enableGiftCard": "0",
"enablePreFinancedGiftCard": null,
"enableVirtualAccounts": "0",
"maxVirtualAccounts": null,
"gracePeriodEndsAt": "2022-04-24 12:20:52",
"enableMembershipService": "0",
"enableCrossBorderCollection": "0",
"enableCustomCouponCodes": "0",
"payoutAllowedIpAddressList": null,
"freezeSettlement": null,
"giftCardFundingAccountId": "96",
"membershipDebitAccountId": "97",
"createdAt": "2022-03-25 12:20:52",
"lastUpdatedAt": null,
"lastUpdatedByStaffId": null
},
"typeText": "business account",
"roleText": "owner",
"merchantId": "7"
},
{
"id": "28",
"_id": "tz28",
"ufId": null,
"orgUserId": null,
"scopeId": null,
"roleId": "1000",
"primaryCurrencyCode": "XAF",
"residenceCountryCode": "CM",
"type": "3",
"firstName": null,
"lastName": null,
"displayName": "tz28",
"verifiedName": null,
"paymentPin": "$2y$05$9bSkDyobt3388DnPVUOFW.sO.ZqsEde0BBD3GH1J6D9lmDMCVMBgS",
"phoneNumber": null,
"language": "en_GB",
"timeZone": "Africa/Douala",
"isRNVerified": "0",
"loginEnabled": "1",
"avatarUrl": null,
"defaultSendingAccountId": null,
"canReceivePayment": "1",
"canSendPayment": "1",
"createdAt": "2022-03-25 12:20:52",
"lastUpdatedAt": "2022-03-25 13:20:52",
"merchant": {
"id": "6",
"userId": "28",
"commission": null,
"internalSettlementCommission": null,
"commissionCap": null,
"minSettlementAmount": null,
"settlementWindowId": null,
"settlementAccountId": null,
"enableManualSettlement": "0",
"maxActiveCoupons": null,
"maxCouponsPerPromotion": null,
"maxLuckyMoneyQuantity": null,
"maxLuckyMoneyAmount": null,
"enableGuestPayments": "0",
"enableInPersonPayment": "0",
"maxSubAccounts": null,
"enableGiftCard": "0",
"enablePreFinancedGiftCard": null,
"enableVirtualAccounts": "0",
"maxVirtualAccounts": null,
"gracePeriodEndsAt": "2022-04-24 12:20:52",
"enableMembershipService": "0",
"enableCrossBorderCollection": "0",
"enableCustomCouponCodes": "0",
"payoutAllowedIpAddressList": null,
"freezeSettlement": null,
"giftCardFundingAccountId": "87",
"membershipDebitAccountId": "88",
"createdAt": "2022-03-25 12:20:52",
"lastUpdatedAt": null,
"lastUpdatedByStaffId": null
},
"typeText": "business account",
"roleText": "owner",
"merchantId": "6"
},
{
"id": "27",
"_id": "tz27",
"ufId": null,
"orgUserId": null,
"scopeId": null,
"roleId": "1000",
"primaryCurrencyCode": "XAF",
"residenceCountryCode": "CM",
"type": "3",
"firstName": null,
"lastName": null,
"displayName": "tz27",
"verifiedName": null,
"paymentPin": "$2y$05$ySTE/mh7q1xL6imVxHIine6Iy9gwXLuPd8Amg/0eytOvFH1nsfJF2",
"phoneNumber": null,
"language": "en_GB",
"timeZone": "Africa/Douala",
"isRNVerified": "0",
"loginEnabled": "1",
"avatarUrl": null,
"defaultSendingAccountId": null,
"canReceivePayment": "1",
"canSendPayment": "1",
"createdAt": "2022-03-25 12:20:52",
"lastUpdatedAt": "2022-03-25 13:20:52",
"merchant": {
"id": "5",
"userId": "27",
"commission": null,
"internalSettlementCommission": null,
"commissionCap": null,
"minSettlementAmount": null,
"settlementWindowId": null,
"settlementAccountId": null,
"enableManualSettlement": "0",
"maxActiveCoupons": null,
"maxCouponsPerPromotion": null,
"maxLuckyMoneyQuantity": null,
"maxLuckyMoneyAmount": null,
"enableGuestPayments": "0",
"enableInPersonPayment": "0",
"maxSubAccounts": null,
"enableGiftCard": "0",
"enablePreFinancedGiftCard": null,
"enableVirtualAccounts": "0",
"maxVirtualAccounts": null,
"gracePeriodEndsAt": "2022-04-24 12:20:52",
"enableMembershipService": "0",
"enableCrossBorderCollection": "0",
"enableCustomCouponCodes": "0",
"payoutAllowedIpAddressList": null,
"freezeSettlement": null,
"giftCardFundingAccountId": "78",
"membershipDebitAccountId": "79",
"createdAt": "2022-03-25 12:20:52",
"lastUpdatedAt": null,
"lastUpdatedByStaffId": null
},
"typeText": "business account",
"roleText": "owner",
"merchantId": "5"
},
{
"id": "26",
"_id": "tz26",
"ufId": null,
"orgUserId": null,
"scopeId": null,
"roleId": "1000",
"primaryCurrencyCode": "XAF",
"residenceCountryCode": "CM",
"type": "3",
"firstName": null,
"lastName": null,
"displayName": "tz26",
"verifiedName": null,
"paymentPin": "$2y$05$1HtrOwLNU7xdfu1dbUs1GeXzhQXZ6UraCYjRJlaUnbrzmnX/UtSVa",
"phoneNumber": null,
"language": "en_GB",
"timeZone": "Africa/Douala",
"isRNVerified": "0",
"loginEnabled": "1",
"avatarUrl": null,
"defaultSendingAccountId": null,
"canReceivePayment": "1",
"canSendPayment": "1",
"createdAt": "2022-03-25 12:20:52",
"lastUpdatedAt": "2022-03-25 13:20:52",
"merchant": {
"id": "4",
"userId": "26",
"commission": null,
"internalSettlementCommission": null,
"commissionCap": null,
"minSettlementAmount": null,
"settlementWindowId": null,
"settlementAccountId": null,
"enableManualSettlement": "0",
"maxActiveCoupons": null,
"maxCouponsPerPromotion": null,
"maxLuckyMoneyQuantity": null,
"maxLuckyMoneyAmount": null,
"enableGuestPayments": "0",
"enableInPersonPayment": "0",
"maxSubAccounts": null,
"enableGiftCard": "0",
"enablePreFinancedGiftCard": null,
"enableVirtualAccounts": "0",
"maxVirtualAccounts": null,
"gracePeriodEndsAt": "2022-04-24 12:20:52",
"enableMembershipService": "0",
"enableCrossBorderCollection": "0",
"enableCustomCouponCodes": "0",
"payoutAllowedIpAddressList": null,
"freezeSettlement": null,
"giftCardFundingAccountId": "69",
"membershipDebitAccountId": "70",
"createdAt": "2022-03-25 12:20:52",
"lastUpdatedAt": null,
"lastUpdatedByStaffId": null
},
"typeText": "business account",
"roleText": "owner",
"merchantId": "4"
},
{
"id": "25",
"_id": "tz25",
"ufId": null,
"orgUserId": null,
"scopeId": null,
"roleId": "1000",
"primaryCurrencyCode": "XAF",
"residenceCountryCode": "CM",
"type": "3",
"firstName": null,
"lastName": null,
"displayName": "tz25",
"verifiedName": null,
"paymentPin": "$2y$05$znvVrEeDqhVlVdSPBidNrO3Hrc827GSRNY0.x0JWV9MBfnJO2/PUC",
"phoneNumber": null,
"language": "en_GB",
"timeZone": "Africa/Douala",
"isRNVerified": "0",
"loginEnabled": "1",
"avatarUrl": null,
"defaultSendingAccountId": null,
"canReceivePayment": "1",
"canSendPayment": "1",
"createdAt": "2022-03-25 12:20:52",
"lastUpdatedAt": "2022-03-25 13:20:52",
"merchant": {
"id": "3",
"userId": "25",
"commission": null,
"internalSettlementCommission": null,
"commissionCap": null,
"minSettlementAmount": null,
"settlementWindowId": null,
"settlementAccountId": null,
"enableManualSettlement": "0",
"maxActiveCoupons": null,
"maxCouponsPerPromotion": null,
"maxLuckyMoneyQuantity": null,
"maxLuckyMoneyAmount": null,
"enableGuestPayments": "0",
"enableInPersonPayment": "0",
"maxSubAccounts": null,
"enableGiftCard": "0",
"enablePreFinancedGiftCard": null,
"enableVirtualAccounts": "0",
"maxVirtualAccounts": null,
"gracePeriodEndsAt": "2022-04-24 12:20:52",
"enableMembershipService": "0",
"enableCrossBorderCollection": "0",
"enableCustomCouponCodes": "0",
"payoutAllowedIpAddressList": null,
"freezeSettlement": null,
"giftCardFundingAccountId": "60",
"membershipDebitAccountId": "61",
"createdAt": "2022-03-25 12:20:52",
"lastUpdatedAt": null,
"lastUpdatedByStaffId": null
},
"typeText": "business account",
"roleText": "owner",
"merchantId": "3"
},
{
"id": "24",
"_id": "tz24",
"ufId": null,
"orgUserId": null,
"scopeId": null,
"roleId": "1000",
"primaryCurrencyCode": "XAF",
"residenceCountryCode": "CM",
"type": "3",
"firstName": null,
"lastName": null,
"displayName": "tz24",
"verifiedName": null,
"paymentPin": "$2y$05$WzaOVlZnrb2MoMqDjDC1vO8pm0/rEsGvCcS7ygl7WIZ/F40tC4jva",
"phoneNumber": null,
"language": "en_GB",
"timeZone": "Africa/Douala",
"isRNVerified": "0",
"loginEnabled": "1",
"avatarUrl": null,
"defaultSendingAccountId": null,
"canReceivePayment": "1",
"canSendPayment": "1",
"createdAt": "2022-03-25 12:20:52",
"lastUpdatedAt": "2022-03-25 13:20:52",
"merchant": {
"id": "2",
"userId": "24",
"commission": null,
"internalSettlementCommission": null,
"commissionCap": null,
"minSettlementAmount": null,
"settlementWindowId": null,
"settlementAccountId": null,
"enableManualSettlement": "0",
"maxActiveCoupons": null,
"maxCouponsPerPromotion": null,
"maxLuckyMoneyQuantity": null,
"maxLuckyMoneyAmount": null,
"enableGuestPayments": "0",
"enableInPersonPayment": "0",
"maxSubAccounts": null,
"enableGiftCard": "0",
"enablePreFinancedGiftCard": null,
"enableVirtualAccounts": "0",
"maxVirtualAccounts": null,
"gracePeriodEndsAt": "2022-04-24 12:20:52",
"enableMembershipService": "0",
"enableCrossBorderCollection": "0",
"enableCustomCouponCodes": "0",
"payoutAllowedIpAddressList": null,
"freezeSettlement": null,
"giftCardFundingAccountId": "51",
"membershipDebitAccountId": "52",
"createdAt": "2022-03-25 12:20:52",
"lastUpdatedAt": null,
"lastUpdatedByStaffId": null
},
"typeText": "business account",
"roleText": "owner",
"merchantId": "2"
}
],
"pageCount": [
1,
50
],
"pageSize": 20,
"totalItems": 43
},
"success": true,
"debugInfo": null,
"debug": {
"lang": "en-US",
"dateTime": "2022-03-25T15:39:08+00:00",
"hostname": "cortex01",
"serverIpAddress": "192.168.137.2",
"clientIpAddress": "192.168.137.1",
"duration": "0.044s",
"userId": "1",
"staffId": "1",
"staffFirstName": null
}
}
List Accounts
Displays paginated list of the accounts
Endpoint
GET /backoffice/user/list-accounts
Request Params
[['id', 'userId', 'type', 'balanceAmount', 'withheldBalanceAmount', 'isCsaOverdraftAccount', 'isActive'], 'safe'],
[['_id', 'currencyCode', 'name', 'description', 'avatarUrl', 'label', 'createdAt', 'lastUpdatedAt'], 'safe'],
Response
Paginated list of the accounts
{
"data": {
"currentPage": 1,
"hasMore": true,
"list": [
{
"id": "245",
"_id": "ACD2WZI9U8S1KVPGCP0P",
"userId": "46",
"currencyCode": "NGN",
"type": "2",
"balanceAmount": 0,
"withheldBalanceAmount": 0,
"name": "",
"description": "",
"avatarUrl": "https://staging-api.tranzak.me/fapi/static/img/logos/tz-logo-btn.png",
"label": "TYPE_CSA",
"isCsaOverdraftAccount": "1",
"isActive": "1",
"createdAt": "2022-03-25 15:44:49",
"lastUpdatedAt": null,
"user": {
"id": "46",
"_id": "syska4f7adg8ro5e",
"ufId": null,
"orgUserId": null,
"scopeId": null,
"roleId": "1000",
"primaryCurrencyCode": "NGN",
"residenceCountryCode": "NG",
"type": "30",
"firstName": null,
"lastName": null,
"displayName": "Tranzak System Account | Nigeria",
"verifiedName": null,
"paymentPin": null,
"phoneNumber": null,
"language": null,
"timeZone": "Africa/Douala",
"isRNVerified": "0",
"loginEnabled": "0",
"avatarUrl": null,
"defaultSendingAccountId": null,
"canReceivePayment": "1",
"canSendPayment": "1",
"createdAt": "2022-03-25 14:44:49",
"lastUpdatedAt": null
},
"typeText": "CSA account"
},
{
"id": "244",
"_id": "AC0OXI6A7D7GFVO7MZFY",
"userId": "46",
"currencyCode": "NGN",
"type": "2",
"balanceAmount": 0,
"withheldBalanceAmount": 0,
"name": "",
"description": "",
"avatarUrl": "https://staging-api.tranzak.me/fapi/static/img/logos/tz-logo-btn.png",
"label": "TYPE_CSA",
"isCsaOverdraftAccount": "1",
"isActive": "1",
"createdAt": "2022-03-25 15:44:49",
"lastUpdatedAt": null,
"user": {
"id": "46",
"_id": "syska4f7adg8ro5e",
"ufId": null,
"orgUserId": null,
"scopeId": null,
"roleId": "1000",
"primaryCurrencyCode": "NGN",
"residenceCountryCode": "NG",
"type": "30",
"firstName": null,
"lastName": null,
"displayName": "Tranzak System Account | Nigeria",
"verifiedName": null,
"paymentPin": null,
"phoneNumber": null,
"language": null,
"timeZone": "Africa/Douala",
"isRNVerified": "0",
"loginEnabled": "0",
"avatarUrl": null,
"defaultSendingAccountId": null,
"canReceivePayment": "1",
"canSendPayment": "1",
"createdAt": "2022-03-25 14:44:49",
"lastUpdatedAt": null
},
"typeText": "CSA account"
},
{
"id": "243",
"_id": "ACEO821OCHA1WDKN2VKT",
"userId": "46",
"currencyCode": "NGN",
"type": "2",
"balanceAmount": 0,
"withheldBalanceAmount": 0,
"name": "",
"description": "",
"avatarUrl": "https://staging-api.tranzak.me/fapi/static/img/logos/tz-logo-btn.png",
"label": "TYPE_CSA",
"isCsaOverdraftAccount": "1",
"isActive": "1",
"createdAt": "2022-03-25 15:44:49",
"lastUpdatedAt": null,
"user": {
"id": "46",
"_id": "syska4f7adg8ro5e",
"ufId": null,
"orgUserId": null,
"scopeId": null,
"roleId": "1000",
"primaryCurrencyCode": "NGN",
"residenceCountryCode": "NG",
"type": "30",
"firstName": null,
"lastName": null,
"displayName": "Tranzak System Account | Nigeria",
"verifiedName": null,
"paymentPin": null,
"phoneNumber": null,
"language": null,
"timeZone": "Africa/Douala",
"isRNVerified": "0",
"loginEnabled": "0",
"avatarUrl": null,
"defaultSendingAccountId": null,
"canReceivePayment": "1",
"canSendPayment": "1",
"createdAt": "2022-03-25 14:44:49",
"lastUpdatedAt": null
},
"typeText": "CSA account"
},
{
"id": "242",
"_id": "ACBOSFFR7YXXWH4DHFMT",
"userId": "46",
"currencyCode": "NGN",
"type": "2",
"balanceAmount": 0,
"withheldBalanceAmount": 0,
"name": "",
"description": "",
"avatarUrl": "https://staging-api.tranzak.me/fapi/static/img/logos/tz-logo-btn.png",
"label": "TYPE_CSA",
"isCsaOverdraftAccount": "1",
"isActive": "1",
"createdAt": "2022-03-25 15:44:49",
"lastUpdatedAt": null,
"user": {
"id": "46",
"_id": "syska4f7adg8ro5e",
"ufId": null,
"orgUserId": null,
"scopeId": null,
"roleId": "1000",
"primaryCurrencyCode": "NGN",
"residenceCountryCode": "NG",
"type": "30",
"firstName": null,
"lastName": null,
"displayName": "Tranzak System Account | Nigeria",
"verifiedName": null,
"paymentPin": null,
"phoneNumber": null,
"language": null,
"timeZone": "Africa/Douala",
"isRNVerified": "0",
"loginEnabled": "0",
"avatarUrl": null,
"defaultSendingAccountId": null,
"canReceivePayment": "1",
"canSendPayment": "1",
"createdAt": "2022-03-25 14:44:49",
"lastUpdatedAt": null
},
"typeText": "CSA account"
},
{
"id": "241",
"_id": "ACAEUWL0Y4E3IAPAAULB",
"userId": "46",
"currencyCode": "NGN",
"type": "2",
"balanceAmount": 0,
"withheldBalanceAmount": 0,
"name": "",
"description": "",
"avatarUrl": "https://staging-api.tranzak.me/fapi/static/img/logos/tz-logo-btn.png",
"label": "TYPE_CSA",
"isCsaOverdraftAccount": "1",
"isActive": "1",
"createdAt": "2022-03-25 15:44:49",
"lastUpdatedAt": null,
"user": {
"id": "46",
"_id": "syska4f7adg8ro5e",
"ufId": null,
"orgUserId": null,
"scopeId": null,
"roleId": "1000",
"primaryCurrencyCode": "NGN",
"residenceCountryCode": "NG",
"type": "30",
"firstName": null,
"lastName": null,
"displayName": "Tranzak System Account | Nigeria",
"verifiedName": null,
"paymentPin": null,
"phoneNumber": null,
"language": null,
"timeZone": "Africa/Douala",
"isRNVerified": "0",
"loginEnabled": "0",
"avatarUrl": null,
"defaultSendingAccountId": null,
"canReceivePayment": "1",
"canSendPayment": "1",
"createdAt": "2022-03-25 14:44:49",
"lastUpdatedAt": null
},
"typeText": "CSA account"
},
{
"id": "240",
"_id": "ACXQ92KW6CEJFJJQJI8K",
"userId": "46",
"currencyCode": "NGN",
"type": "2",
"balanceAmount": 0,
"withheldBalanceAmount": 0,
"name": "",
"description": "",
"avatarUrl": "https://staging-api.tranzak.me/fapi/static/img/logos/tz-logo-btn.png",
"label": "TYPE_CSA",
"isCsaOverdraftAccount": "1",
"isActive": "1",
"createdAt": "2022-03-25 15:44:49",
"lastUpdatedAt": null,
"user": {
"id": "46",
"_id": "syska4f7adg8ro5e",
"ufId": null,
"orgUserId": null,
"scopeId": null,
"roleId": "1000",
"primaryCurrencyCode": "NGN",
"residenceCountryCode": "NG",
"type": "30",
"firstName": null,
"lastName": null,
"displayName": "Tranzak System Account | Nigeria",
"verifiedName": null,
"paymentPin": null,
"phoneNumber": null,
"language": null,
"timeZone": "Africa/Douala",
"isRNVerified": "0",
"loginEnabled": "0",
"avatarUrl": null,
"defaultSendingAccountId": null,
"canReceivePayment": "1",
"canSendPayment": "1",
"createdAt": "2022-03-25 14:44:49",
"lastUpdatedAt": null
},
"typeText": "CSA account"
},
{
"id": "239",
"_id": "ACIE0EQB5AWXBA321I4O",
"userId": "46",
"currencyCode": "NGN",
"type": "2",
"balanceAmount": 0,
"withheldBalanceAmount": 0,
"name": "",
"description": "",
"avatarUrl": "https://staging-api.tranzak.me/fapi/static/img/logos/tz-logo-btn.png",
"label": "TYPE_CSA",
"isCsaOverdraftAccount": "0",
"isActive": "1",
"createdAt": "2022-03-25 15:44:49",
"lastUpdatedAt": null,
"user": {
"id": "46",
"_id": "syska4f7adg8ro5e",
"ufId": null,
"orgUserId": null,
"scopeId": null,
"roleId": "1000",
"primaryCurrencyCode": "NGN",
"residenceCountryCode": "NG",
"type": "30",
"firstName": null,
"lastName": null,
"displayName": "Tranzak System Account | Nigeria",
"verifiedName": null,
"paymentPin": null,
"phoneNumber": null,
"language": null,
"timeZone": "Africa/Douala",
"isRNVerified": "0",
"loginEnabled": "0",
"avatarUrl": null,
"defaultSendingAccountId": null,
"canReceivePayment": "1",
"canSendPayment": "1",
"createdAt": "2022-03-25 14:44:49",
"lastUpdatedAt": null
},
"typeText": "CSA account"
},
{
"id": "238",
"_id": "ACPF871S7AHZZBSXRP5R",
"userId": "46",
"currencyCode": "NGN",
"type": "2",
"balanceAmount": 0,
"withheldBalanceAmount": 0,
"name": "",
"description": "",
"avatarUrl": "https://staging-api.tranzak.me/fapi/static/img/logos/tz-logo-btn.png",
"label": "TYPE_CSA",
"isCsaOverdraftAccount": "0",
"isActive": "1",
"createdAt": "2022-03-25 15:44:49",
"lastUpdatedAt": null,
"user": {
"id": "46",
"_id": "syska4f7adg8ro5e",
"ufId": null,
"orgUserId": null,
"scopeId": null,
"roleId": "1000",
"primaryCurrencyCode": "NGN",
"residenceCountryCode": "NG",
"type": "30",
"firstName": null,
"lastName": null,
"displayName": "Tranzak System Account | Nigeria",
"verifiedName": null,
"paymentPin": null,
"phoneNumber": null,
"language": null,
"timeZone": "Africa/Douala",
"isRNVerified": "0",
"loginEnabled": "0",
"avatarUrl": null,
"defaultSendingAccountId": null,
"canReceivePayment": "1",
"canSendPayment": "1",
"createdAt": "2022-03-25 14:44:49",
"lastUpdatedAt": null
},
"typeText": "CSA account"
},
{
"id": "237",
"_id": "ACAP25LFKULUM9XWY3B9",
"userId": "46",
"currencyCode": "NGN",
"type": "2",
"balanceAmount": 0,
"withheldBalanceAmount": 0,
"name": "",
"description": "",
"avatarUrl": "https://staging-api.tranzak.me/fapi/static/img/logos/tz-logo-btn.png",
"label": "TYPE_CSA",
"isCsaOverdraftAccount": "1",
"isActive": "1",
"createdAt": "2022-03-25 15:44:49",
"lastUpdatedAt": null,
"user": {
"id": "46",
"_id": "syska4f7adg8ro5e",
"ufId": null,
"orgUserId": null,
"scopeId": null,
"roleId": "1000",
"primaryCurrencyCode": "NGN",
"residenceCountryCode": "NG",
"type": "30",
"firstName": null,
"lastName": null,
"displayName": "Tranzak System Account | Nigeria",
"verifiedName": null,
"paymentPin": null,
"phoneNumber": null,
"language": null,
"timeZone": "Africa/Douala",
"isRNVerified": "0",
"loginEnabled": "0",
"avatarUrl": null,
"defaultSendingAccountId": null,
"canReceivePayment": "1",
"canSendPayment": "1",
"createdAt": "2022-03-25 14:44:49",
"lastUpdatedAt": null
},
"typeText": "CSA account"
},
{
"id": "236",
"_id": "ACBVLJ9Z11GIYV276DKT",
"userId": "46",
"currencyCode": "NGN",
"type": "2",
"balanceAmount": 0,
"withheldBalanceAmount": 0,
"name": "",
"description": "",
"avatarUrl": "https://staging-api.tranzak.me/fapi/static/img/logos/tz-logo-btn.png",
"label": "TYPE_CSA",
"isCsaOverdraftAccount": "1",
"isActive": "1",
"createdAt": "2022-03-25 15:44:49",
"lastUpdatedAt": null,
"user": {
"id": "46",
"_id": "syska4f7adg8ro5e",
"ufId": null,
"orgUserId": null,
"scopeId": null,
"roleId": "1000",
"primaryCurrencyCode": "NGN",
"residenceCountryCode": "NG",
"type": "30",
"firstName": null,
"lastName": null,
"displayName": "Tranzak System Account | Nigeria",
"verifiedName": null,
"paymentPin": null,
"phoneNumber": null,
"language": null,
"timeZone": "Africa/Douala",
"isRNVerified": "0",
"loginEnabled": "0",
"avatarUrl": null,
"defaultSendingAccountId": null,
"canReceivePayment": "1",
"canSendPayment": "1",
"createdAt": "2022-03-25 14:44:49",
"lastUpdatedAt": null
},
"typeText": "CSA account"
},
{
"id": "235",
"_id": "ACVF80H2YASW1F4FVWCA",
"userId": "44",
"currencyCode": "CDF",
"type": "2",
"balanceAmount": 0,
"withheldBalanceAmount": 0,
"name": "",
"description": "",
"avatarUrl": "https://staging-api.tranzak.me/fapi/static/img/logos/tz-logo-btn.png",
"label": "TYPE_CSA",
"isCsaOverdraftAccount": "1",
"isActive": "1",
"createdAt": "2022-03-25 15:44:43",
"lastUpdatedAt": null,
"user": {
"id": "44",
"_id": "sysesdbubsjcmi3i",
"ufId": null,
"orgUserId": null,
"scopeId": null,
"roleId": "1000",
"primaryCurrencyCode": "CDF",
"residenceCountryCode": "CD",
"type": "30",
"firstName": null,
"lastName": null,
"displayName": "Tranzak System Account | Democratic Republic of the Congo",
"verifiedName": null,
"paymentPin": null,
"phoneNumber": null,
"language": null,
"timeZone": "Africa/Douala",
"isRNVerified": "0",
"loginEnabled": "0",
"avatarUrl": null,
"defaultSendingAccountId": null,
"canReceivePayment": "1",
"canSendPayment": "1",
"createdAt": "2022-03-25 14:44:43",
"lastUpdatedAt": null
},
"typeText": "CSA account"
},
{
"id": "234",
"_id": "ACFAH4F28EDZF22ZDG5J",
"userId": "44",
"currencyCode": "CDF",
"type": "2",
"balanceAmount": 0,
"withheldBalanceAmount": 0,
"name": "",
"description": "",
"avatarUrl": "https://staging-api.tranzak.me/fapi/static/img/logos/tz-logo-btn.png",
"label": "TYPE_CSA",
"isCsaOverdraftAccount": "1",
"isActive": "1",
"createdAt": "2022-03-25 15:44:43",
"lastUpdatedAt": null,
"user": {
"id": "44",
"_id": "sysesdbubsjcmi3i",
"ufId": null,
"orgUserId": null,
"scopeId": null,
"roleId": "1000",
"primaryCurrencyCode": "CDF",
"residenceCountryCode": "CD",
"type": "30",
"firstName": null,
"lastName": null,
"displayName": "Tranzak System Account | Democratic Republic of the Congo",
"verifiedName": null,
"paymentPin": null,
"phoneNumber": null,
"language": null,
"timeZone": "Africa/Douala",
"isRNVerified": "0",
"loginEnabled": "0",
"avatarUrl": null,
"defaultSendingAccountId": null,
"canReceivePayment": "1",
"canSendPayment": "1",
"createdAt": "2022-03-25 14:44:43",
"lastUpdatedAt": null
},
"typeText": "CSA account"
},
{
"id": "233",
"_id": "ACL8TXZJ1FCPQV1H0SYT",
"userId": "44",
"currencyCode": "CDF",
"type": "2",
"balanceAmount": 0,
"withheldBalanceAmount": 0,
"name": "",
"description": "",
"avatarUrl": "https://staging-api.tranzak.me/fapi/static/img/logos/tz-logo-btn.png",
"label": "TYPE_CSA",
"isCsaOverdraftAccount": "1",
"isActive": "1",
"createdAt": "2022-03-25 15:44:43",
"lastUpdatedAt": null,
"user": {
"id": "44",
"_id": "sysesdbubsjcmi3i",
"ufId": null,
"orgUserId": null,
"scopeId": null,
"roleId": "1000",
"primaryCurrencyCode": "CDF",
"residenceCountryCode": "CD",
"type": "30",
"firstName": null,
"lastName": null,
"displayName": "Tranzak System Account | Democratic Republic of the Congo",
"verifiedName": null,
"paymentPin": null,
"phoneNumber": null,
"language": null,
"timeZone": "Africa/Douala",
"isRNVerified": "0",
"loginEnabled": "0",
"avatarUrl": null,
"defaultSendingAccountId": null,
"canReceivePayment": "1",
"canSendPayment": "1",
"createdAt": "2022-03-25 14:44:43",
"lastUpdatedAt": null
},
"typeText": "CSA account"
},
{
"id": "232",
"_id": "AC81GD2ESEZ1K21FP294",
"userId": "44",
"currencyCode": "CDF",
"type": "2",
"balanceAmount": 0,
"withheldBalanceAmount": 0,
"name": "",
"description": "",
"avatarUrl": "https://staging-api.tranzak.me/fapi/static/img/logos/tz-logo-btn.png",
"label": "TYPE_CSA",
"isCsaOverdraftAccount": "1",
"isActive": "1",
"createdAt": "2022-03-25 15:44:43",
"lastUpdatedAt": null,
"user": {
"id": "44",
"_id": "sysesdbubsjcmi3i",
"ufId": null,
"orgUserId": null,
"scopeId": null,
"roleId": "1000",
"primaryCurrencyCode": "CDF",
"residenceCountryCode": "CD",
"type": "30",
"firstName": null,
"lastName": null,
"displayName": "Tranzak System Account | Democratic Republic of the Congo",
"verifiedName": null,
"paymentPin": null,
"phoneNumber": null,
"language": null,
"timeZone": "Africa/Douala",
"isRNVerified": "0",
"loginEnabled": "0",
"avatarUrl": null,
"defaultSendingAccountId": null,
"canReceivePayment": "1",
"canSendPayment": "1",
"createdAt": "2022-03-25 14:44:43",
"lastUpdatedAt": null
},
"typeText": "CSA account"
},
{
"id": "231",
"_id": "ACPJ9CMFLSPUSV4I7H6Y",
"userId": "44",
"currencyCode": "CDF",
"type": "2",
"balanceAmount": 0,
"withheldBalanceAmount": 0,
"name": "",
"description": "",
"avatarUrl": "https://staging-api.tranzak.me/fapi/static/img/logos/tz-logo-btn.png",
"label": "TYPE_CSA",
"isCsaOverdraftAccount": "1",
"isActive": "1",
"createdAt": "2022-03-25 15:44:43",
"lastUpdatedAt": null,
"user": {
"id": "44",
"_id": "sysesdbubsjcmi3i",
"ufId": null,
"orgUserId": null,
"scopeId": null,
"roleId": "1000",
"primaryCurrencyCode": "CDF",
"residenceCountryCode": "CD",
"type": "30",
"firstName": null,
"lastName": null,
"displayName": "Tranzak System Account | Democratic Republic of the Congo",
"verifiedName": null,
"paymentPin": null,
"phoneNumber": null,
"language": null,
"timeZone": "Africa/Douala",
"isRNVerified": "0",
"loginEnabled": "0",
"avatarUrl": null,
"defaultSendingAccountId": null,
"canReceivePayment": "1",
"canSendPayment": "1",
"createdAt": "2022-03-25 14:44:43",
"lastUpdatedAt": null
},
"typeText": "CSA account"
},
{
"id": "230",
"_id": "ACAJEPOGWHLX4H8XT0MD",
"userId": "44",
"currencyCode": "CDF",
"type": "2",
"balanceAmount": 0,
"withheldBalanceAmount": 0,
"name": "",
"description": "",
"avatarUrl": "https://staging-api.tranzak.me/fapi/static/img/logos/tz-logo-btn.png",
"label": "TYPE_CSA",
"isCsaOverdraftAccount": "1",
"isActive": "1",
"createdAt": "2022-03-25 15:44:43",
"lastUpdatedAt": null,
"user": {
"id": "44",
"_id": "sysesdbubsjcmi3i",
"ufId": null,
"orgUserId": null,
"scopeId": null,
"roleId": "1000",
"primaryCurrencyCode": "CDF",
"residenceCountryCode": "CD",
"type": "30",
"firstName": null,
"lastName": null,
"displayName": "Tranzak System Account | Democratic Republic of the Congo",
"verifiedName": null,
"paymentPin": null,
"phoneNumber": null,
"language": null,
"timeZone": "Africa/Douala",
"isRNVerified": "0",
"loginEnabled": "0",
"avatarUrl": null,
"defaultSendingAccountId": null,
"canReceivePayment": "1",
"canSendPayment": "1",
"createdAt": "2022-03-25 14:44:43",
"lastUpdatedAt": null
},
"typeText": "CSA account"
},
{
"id": "229",
"_id": "ACZOXIZO57DFHUM23R5Z",
"userId": "44",
"currencyCode": "CDF",
"type": "2",
"balanceAmount": 0,
"withheldBalanceAmount": 0,
"name": "",
"description": "",
"avatarUrl": "https://staging-api.tranzak.me/fapi/static/img/logos/tz-logo-btn.png",
"label": "TYPE_CSA",
"isCsaOverdraftAccount": "0",
"isActive": "1",
"createdAt": "2022-03-25 15:44:43",
"lastUpdatedAt": null,
"user": {
"id": "44",
"_id": "sysesdbubsjcmi3i",
"ufId": null,
"orgUserId": null,
"scopeId": null,
"roleId": "1000",
"primaryCurrencyCode": "CDF",
"residenceCountryCode": "CD",
"type": "30",
"firstName": null,
"lastName": null,
"displayName": "Tranzak System Account | Democratic Republic of the Congo",
"verifiedName": null,
"paymentPin": null,
"phoneNumber": null,
"language": null,
"timeZone": "Africa/Douala",
"isRNVerified": "0",
"loginEnabled": "0",
"avatarUrl": null,
"defaultSendingAccountId": null,
"canReceivePayment": "1",
"canSendPayment": "1",
"createdAt": "2022-03-25 14:44:43",
"lastUpdatedAt": null
},
"typeText": "CSA account"
},
{
"id": "228",
"_id": "ACBAFO376VM3PIV9MRZF",
"userId": "44",
"currencyCode": "CDF",
"type": "2",
"balanceAmount": 0,
"withheldBalanceAmount": 0,
"name": "",
"description": "",
"avatarUrl": "https://staging-api.tranzak.me/fapi/static/img/logos/tz-logo-btn.png",
"label": "TYPE_CSA",
"isCsaOverdraftAccount": "0",
"isActive": "1",
"createdAt": "2022-03-25 15:44:43",
"lastUpdatedAt": null,
"user": {
"id": "44",
"_id": "sysesdbubsjcmi3i",
"ufId": null,
"orgUserId": null,
"scopeId": null,
"roleId": "1000",
"primaryCurrencyCode": "CDF",
"residenceCountryCode": "CD",
"type": "30",
"firstName": null,
"lastName": null,
"displayName": "Tranzak System Account | Democratic Republic of the Congo",
"verifiedName": null,
"paymentPin": null,
"phoneNumber": null,
"language": null,
"timeZone": "Africa/Douala",
"isRNVerified": "0",
"loginEnabled": "0",
"avatarUrl": null,
"defaultSendingAccountId": null,
"canReceivePayment": "1",
"canSendPayment": "1",
"createdAt": "2022-03-25 14:44:43",
"lastUpdatedAt": null
},
"typeText": "CSA account"
},
{
"id": "227",
"_id": "ACESRQGEQPKE4C6QPVWO",
"userId": "44",
"currencyCode": "CDF",
"type": "2",
"balanceAmount": 0,
"withheldBalanceAmount": 0,
"name": "",
"description": "",
"avatarUrl": "https://staging-api.tranzak.me/fapi/static/img/logos/tz-logo-btn.png",
"label": "TYPE_CSA",
"isCsaOverdraftAccount": "1",
"isActive": "1",
"createdAt": "2022-03-25 15:44:43",
"lastUpdatedAt": null,
"user": {
"id": "44",
"_id": "sysesdbubsjcmi3i",
"ufId": null,
"orgUserId": null,
"scopeId": null,
"roleId": "1000",
"primaryCurrencyCode": "CDF",
"residenceCountryCode": "CD",
"type": "30",
"firstName": null,
"lastName": null,
"displayName": "Tranzak System Account | Democratic Republic of the Congo",
"verifiedName": null,
"paymentPin": null,
"phoneNumber": null,
"language": null,
"timeZone": "Africa/Douala",
"isRNVerified": "0",
"loginEnabled": "0",
"avatarUrl": null,
"defaultSendingAccountId": null,
"canReceivePayment": "1",
"canSendPayment": "1",
"createdAt": "2022-03-25 14:44:43",
"lastUpdatedAt": null
},
"typeText": "CSA account"
},
{
"id": "226",
"_id": "ACZUPIC5XCKUP8MFE0B2",
"userId": "44",
"currencyCode": "CDF",
"type": "2",
"balanceAmount": 0,
"withheldBalanceAmount": 0,
"name": "",
"description": "",
"avatarUrl": "https://staging-api.tranzak.me/fapi/static/img/logos/tz-logo-btn.png",
"label": "TYPE_CSA",
"isCsaOverdraftAccount": "1",
"isActive": "1",
"createdAt": "2022-03-25 15:44:43",
"lastUpdatedAt": null,
"user": {
"id": "44",
"_id": "sysesdbubsjcmi3i",
"ufId": null,
"orgUserId": null,
"scopeId": null,
"roleId": "1000",
"primaryCurrencyCode": "CDF",
"residenceCountryCode": "CD",
"type": "30",
"firstName": null,
"lastName": null,
"displayName": "Tranzak System Account | Democratic Republic of the Congo",
"verifiedName": null,
"paymentPin": null,
"phoneNumber": null,
"language": null,
"timeZone": "Africa/Douala",
"isRNVerified": "0",
"loginEnabled": "0",
"avatarUrl": null,
"defaultSendingAccountId": null,
"canReceivePayment": "1",
"canSendPayment": "1",
"createdAt": "2022-03-25 14:44:43",
"lastUpdatedAt": null
},
"typeText": "CSA account"
}
],
"pageCount": [
1,
50
],
"pageSize": 20,
"totalItems": 245
},
"success": true,
"debugInfo": null,
"debug": {
"lang": "en-US",
"dateTime": "2022-03-25T15:40:47+00:00",
"hostname": "cortex01",
"serverIpAddress": "192.168.137.2",
"clientIpAddress": "192.168.137.1",
"duration": "0.046s",
"userId": "1",
"staffId": "1",
"staffFirstName": null
}
}
mapi
Account (mapi)
Info
Displays basic account info
Endpoint
GET /mapi/v1/account/info
Filter parameters
None
Response
Account list
{
"data": {
"merchant": {
"balance": 0,
"totalBalance": 0,
"currencyCode": "XAF",
"name": "merchant (default) account",
"description": "merchant default account"
},
"primary": {
"balance": 996000,
"currencyCode": "XAF",
"name": "primary account",
"description": "primary account"
}
},
"success": true,
"dateTime": "2022-02-16T12:01:03+00:00",
"lang": "en-US",
"debugInfo": null,
"debug": {
"hostname": "cortex01",
"serverIpAddress": "192.168.137.2",
"clientIpAddress": "192.168.137.1",
"duration": "0.066s",
"userId": "ff1ruzi3vz5o"
}
}
Merchant Sub-accounts
Displays list of sub-accounts (with pagination)
Endpoint
GET /mapi/v1/account/list-subaccounts
{
"data": {
"currentPage": 1,
"hasMore": false,
"list": [
{
"_id": "MSATSOWXLL7CP5T5OW1Q",
"enableManualSettlement": null,
"apiKeyId": null,
"withheldBalanceAmount": "0",
"lastUpdatedAt": null,
"createdAt": "2022-02-16 11:31:23",
"name": "Default merchant account",
"description": "",
"avatarUrl": "http://staging-api.tranzak.me/fapi/static/img/logos/tz-logo-btn-black.png",
"balanceAmount": 0,
"currencyCode": "XAF",
"type": "5",
"typeText": "Merchant account (Default)",
"isActive": "1"
}
],
"pageCount": [
1,
50
],
"pageSize": 20,
"totalItems": 1
},
"success": true,
"dateTime": "2022-02-16T12:08:38+00:00",
"lang": "en-US",
"debugInfo": null,
"debug": {
"hostname": "cortex01",
"serverIpAddress": "192.168.137.2",
"clientIpAddress": "192.168.137.1",
"duration": "0.052s",
"userId": "ff1ruzi3vz5o"
}
}
Merchant Sub-accounts
Displays details of a merchant account
Endpoint
GET /mapi/v1/account/view-subaccount?accountId=<ID>
{
"data": {
"accountId": "MSATSOWXLL7CP5T5OW1Q",
"apiKeyId": null,
"avatarUrl": "http://staging-api.tranzak.me/fapi/static/img/logos/tz-logo-btn-black.png",
"balanceAmount": 0,
"createdAt": "2022-02-16 11:31:23",
"createdByUserId": 42,
"description": "",
"enableManualSettlement": null,
"isActive": 1,
"lastUpdatedAt": null,
"name": "",
"withheldBalanceAmount": 0
},
"success": true,
"dateTime": "2022-02-16T12:10:11+00:00",
"lang": "en-US",
"debugInfo": null,
"debug": {
"hostname": "cortex01",
"serverIpAddress": "192.168.137.2",
"clientIpAddress": "192.168.137.1",
"duration": "0.05s",
"userId": "ff1ruzi3vz5o"
}
}
Introduction to MAPI
MAPI = Merchant API . This API describes how external agents and systems hosted outside Tranzak ecosystem can consume resources on Tranzak.
Base URL
The Base URL is staging-api.tranzak.me/mapi/v1/
Request Method
For consistency, all requests that will create/update data in the backend shall be accessed via https POST requests. Read access will be carried out via https GET .
Authentication
Authentication will be carried out using the merchant API authentication guidelines using keys. The following attributes will be used for authentication
App ID- used for identifying the appCollection Key- Used to authorize the app to perform collection functionsDisbursement key- used to authorize the to access DISBURSEMENT functionsEnvironment- Environment may besandboxorproduction: sets the target environment to use
Header param
The following authentication parameters MUST be specified in all requests:
| Parameter | Type | required | Description |
|---|---|---|---|
| X-APP-ID | String | true | The App ID |
| X-APP-KEY | String | true | The key to be used .Two kinds of keys exists : collections (receiving money) and disbursement (outbound payments) keys. |
| X-APP-ENV | String | true | The target environment . Options : sandbox or production |
Receiving Money
Use appId + collection key + environment
Sending money from account
Use appId + disbursement key + environment
Keys are managed in the user center
Authentication
Authentication headers are used. The following headers are required for authentication to succeed
- X-APP-ID - AppId
- X-APP-KEY - the key (collection/disbursement)
- environment :
sandboxorprod
Invoice (mapi)
Merchant invoice
Create (from scratch)
Creates an invoice from scratch
Endpoint
POST /mapi/v1/invoice/create
Request Body Parameters
| Parameter | Type | required | Description |
|---|---|---|---|
| title | String | true | Invoice title |
| currencyCode | String | true | the invoice currency code. Defaults to user's currency code |
| userInvoiceRef | String | false | custom invoice ref |
| totalTax | String | false | tax if applicable. default : 0 |
| billToName | String | false | Name of invoice |
| billToAddress | String | false | custom invoice ref |
| billToEmail | String | false | custom invoice ref |
| memo | String | false | Memo |
| activateUponCreation | String | false | Make invoice available for payment |
| clientNote | String | false | payer's note |
| items | String | true | JSON representation of the items (see request body) |
| receivingAccountId | String | false | The MERCHANT account type account ID that the invoice will be paid into. Default : merchant default account |
| issueDate | String | false | Invoice date of issue |
| dueDate | String | false | Invoice due date |
| acceptPartialPayments | Boolean | false | Partial payments accepted? |
{
"invoiceId" : "IVQSNEN39CSIKUAVYKD7",
"userInvoiceRef" : "5555" ,
"title" : "invoice tiles" ,
"totalTax" : 100,
"billToName" : "Tranzak Descriptinaria" ,
"billToAddress" : "Rue Drouot" ,
"billToEmail" : "trrr@tranzak.net" ,
"memo" : "Memo for schoolmo for schoolmo for schoolmo for schoolmo for s" ,
"type" : 1,
"clientNote" : "Client note is cool" ,
"acceptPartialPayments" : 1,
"activateUponCreation" : 1,
"receivingAccountId" : "MSAQM5SZWXUMAJANC78J",
"items" : [
{
"itemDescription" : "some item" ,
"unitPrice" : 1000,
"quantity" : 2
},
{
"itemDescription" : "some item2" ,
"unitPrice" : 100,
"quantity" : 2
},
{
"itemDescription" : "some item2" ,
"unitPrice" : 100,
"quantity" : 2
},
{
"itemDescription" : "some item3" ,
"unitPrice" : 100,
"quantity" : 2
}
]
}
Response
See VIEW section
Upload an invoice
Uploads an invoice file
Request body
| Parameter | Type | required | Description |
|---|---|---|---|
| title | String | true | Invoice title |
| fileUrl | String | true | file URL |
| amount | String | true | the amount (as shown in the invoice file) |
| currencyCode | String | true | the invoice currency code. Defaults to user's currency code |
| userInvoiceRef | String | false | custom invoice ref |
| totalTax | String | false | tax if applicable. default : 0 |
| billToName | String | false | Name of invoice |
| billToAddress | String | false | custom invoice ref |
| billToEmail | String | false | custom invoice ref |
| memo | String | false | Memo |
| activateUponCreation | String | false | Make invoice available for payment |
| clientNote | String | false | payer's note |
| receivingAccountId | Number | false | The MERCHANT account type account ID that the invoice will be paid into. Default : merchant default account |
| issueDate | String | false | Invoice date of issue |
| dueDate | String | false | Invoice due date |
| acceptPartialPayments | Boolean | false | Partial payments accepted? |
Response
The response is described in the VIEW section
Edit/Update Invoice
Updates an invoice model
Endpoint
POST /v1/invoice/update
Request Body Parameters
| Parameter | Type | required | Description |
|---|---|---|---|
| _id | String | true | GC code |
See [[CREATE]] for other params
Response
See the VIEW section
View
Shows invoice data
Endpoint
GET /v1/invoice/view?_id=INVOICE_ID
Request Body Parameters
Issues a GET request
Response
{
"data": {
"_id": "IV220216C7IX5KJNZFXM",
"acceptPartialPayments": 1,
"billToAddress": "Rue Drouot",
"billToEmail": "trrr@tranzak.net",
"billToName": "Tranzak Descriptinaria",
"billToUserId": null,
"cancellationNote": "",
"clientNote": "Client note is cool",
"createdAt": "2022-02-16 12:20:13",
"createdByUserId": 42,
"currencyCode": "XAF",
"dueDate": "2022-02-16",
"fileUrl": null,
"hasExternalPayment": null,
"hasInternalPayment": null,
"issueDate": "2022-02-16",
"jsonData": [
{
"itemDescription": "some item",
"quantity": 2,
"unitPrice": 1000
},
{
"itemDescription": "some item2",
"quantity": 2,
"unitPrice": 100
},
{
"itemDescription": "some item2",
"quantity": 2,
"unitPrice": 100
},
{
"itemDescription": "some item3",
"quantity": 2,
"unitPrice": 100
}
],
"memo": "Memo for schoolmo for schoolmo for schoolmo for schoolmo for s",
"orgUserId": 42,
"status": "unpaid",
"submittedAt": null,
"subtotal": 2600,
"title": "invoice tiles",
"totalExternalPaymentAmount": null,
"totalPaid": 0,
"totalTax": 100,
"type": 1,
"updatedAt": null,
"userInvoiceRef": "5555"
},
"success": true,
"dateTime": "2022-02-16T12:20:13+00:00",
"lang": "en-US",
"debugInfo": null,
"debug": {
"hostname": "cortex01",
"serverIpAddress": "192.168.137.2",
"clientIpAddress": "192.168.137.1",
"duration": "0.051s",
"userId": "ff1ruzi3vz5o"
}
}
List
List items
Endpoint
GET /v1/invoice/list
Filter parameters
| Parameter | Type | required | Description |
|---|---|---|---|
| status | Number | true | [1 - draft, 2- pending , 3-active , 4-closed , 5-cancelled , 6-suspended] |
Response
Listing
{
"data": {
"currentPage": 1,
"hasMore": false,
"list": [
{
"_id": "IV220216HB6561BKF6I1",
"receivingAccountId": "MSATSOWXLL7CP5T5OW1Q",
"userInvoiceRef": "5555",
"title": "invoice tiles",
"totalTax": 100,
"subtotal": 2600,
"totalPaid": 0,
"currencyCode": "XAF",
"issueDate": "2022-02-16",
"dueDate": "2022-02-16",
"billToName": "Tranzak Descriptinaria",
"billToAddress": "Rue Drouot",
"billToEmail": "trrr@tranzak.net",
"billToUserId": null,
"memo": "Memo for schoolmo for schoolmo for schoolmo for schoolmo for s",
"clientNote": "Client note is cool",
"acceptPartialPayments": "1",
"status": "unpaid",
"cancellationNote": "",
"hasInternalPayment": "0",
"hasExternalPayment": "0",
"totalExternalPaymentAmount": "0",
"jsonData": "[{\"itemDescription\":\"some item\",\"quantity\":2,\"unitPrice\":1000},{\"itemDescription\":\"some item2\",\"quantity\":2,\"unitPrice\":100},{\"itemDescription\":\"some item2\",\"quantity\":2,\"unitPrice\":100},{\"itemDescription\":\"some item3\",\"quantity\":2,\"unitPrice\":100}]",
"fileUrl": null,
"submittedAt": null,
"createdAt": "2022-02-16 12:20:52",
"updatedAt": null,
"receivingAccount": {
"_id": "MSATSOWXLL7CP5T5OW1Q",
"name": "",
"description": ""
}
},
{
"_id": "IV220216C7IX5KJNZFXM",
"receivingAccountId": "MSATSOWXLL7CP5T5OW1Q",
"userInvoiceRef": "5555",
"title": "invoice tiles",
"totalTax": 100,
"subtotal": 2600,
"totalPaid": 0,
"currencyCode": "XAF",
"issueDate": "2022-02-16",
"dueDate": "2022-02-16",
"billToName": "Tranzak Descriptinaria",
"billToAddress": "Rue Drouot",
"billToEmail": "trrr@tranzak.net",
"billToUserId": null,
"memo": "Memo for schoolmo for schoolmo for schoolmo for schoolmo for s",
"clientNote": "Client note is cool",
"acceptPartialPayments": "1",
"status": "unpaid",
"cancellationNote": "",
"hasInternalPayment": "0",
"hasExternalPayment": "0",
"totalExternalPaymentAmount": "0",
"jsonData": "[{\"itemDescription\":\"some item\",\"quantity\":2,\"unitPrice\":1000},{\"itemDescription\":\"some item2\",\"quantity\":2,\"unitPrice\":100},{\"itemDescription\":\"some item2\",\"quantity\":2,\"unitPrice\":100},{\"itemDescription\":\"some item3\",\"quantity\":2,\"unitPrice\":100}]",
"fileUrl": null,
"submittedAt": null,
"createdAt": "2022-02-16 12:20:13",
"updatedAt": null,
"receivingAccount": {
"_id": "MSATSOWXLL7CP5T5OW1Q",
"name": "",
"description": ""
}
}
],
"pageCount": [
1,
50
],
"pageSize": 20,
"totalItems": 2
},
"success": true,
"dateTime": "2022-02-16T12:22:32+00:00",
"lang": "en-US",
"debugInfo": null,
"debug": {
"hostname": "cortex01",
"serverIpAddress": "192.168.137.2",
"clientIpAddress": "192.168.137.1",
"duration": "0.056s",
"userId": "ff1ruzi3vz5o"
}
}
Add a payment
Adds a non-Tranzak payment using some other source
Endpoint
POST /v1/invoice/add-payment
Filter parameters
| Parameter | Type | required | Description |
|---|---|---|---|
| _id | Number | true | invoice ID |
| amount | Number | true | amount in invoice currency |
| paymentSourceId | Number | true | payment source ID 2 => PAYMENT_SOURCE_CASH , 3 => PAYMENT_SOURCE_OTHER_MEANS |
| note | Number | true | a note |
{
"_id" : "IV375WEJ3BEBPRJ4ZBS3",
"amount" : 1 ,
"paymentSourceId" : 2,
"note" : "We added payment !"
}
Response
See VIEW-PAYMENT section
View Payment
Views an invoice payment
Endpoint GET /invoice/view-payment?id=PAYMENT_ID
{
"data": {
"_id": "IPPHLF5FABCVF2STE1AJ",
"amount": 1,
"createdAt": "2022-02-16 12:34:29",
"createdByUserId": 42,
"invoiceId": "IV220216HB6561BKF6I1",
"note": "We added payment !",
"paymentId": null,
"paymentSource": "paid via cash",
"paymentSourceId": 2
},
"success": true,
"dateTime": "2022-02-16T12:35:58+00:00",
"lang": "en-US",
"debugInfo": null,
"debug": {
"hostname": "cortex01",
"serverIpAddress": "192.168.137.2",
"clientIpAddress": "192.168.137.1",
"duration": "0.049s",
"userId": "ff1ruzi3vz5o"
}
}
List Payments
List payments made to invoices. Use filters to filter through list
Endpoint GET /invoice/list-payments
Request Body (filters)
| Parameter | Type | required | Description |
|---|---|---|---|
| _id | String | false | Payment ID |
| invoiceId | String | false | _id of invoice |
| paymentId | String | false | payment Id |
| paymentSourceId | String | false | source ID |
RESPONSE
{
"data": {
"currentPage": 1,
"hasMore": false,
"list": [
{
"_id": "IPPHLF5FABCVF2STE1AJ",
"invoiceId": "IV220216HB6561BKF6I1",
"amount": 1,
"paymentId": null,
"paymentSourceId": "2",
"note": "We added payment !",
"createdAt": "2022-02-16 12:34:29",
"currencyCode": "XAF",
"paymentSource": "paid via cash"
},
{
"_id": "IPELPT7YVSEVOMVUQ85F",
"invoiceId": "IV220216HB6561BKF6I1",
"amount": 1,
"paymentId": null,
"paymentSourceId": "2",
"note": "We added payment !",
"createdAt": "2022-02-16 12:33:37",
"currencyCode": "XAF",
"paymentSource": "paid via cash"
},
{
"_id": "IPL8Y0YZRDXOIMG67RDJ",
"invoiceId": "IV220216HB6561BKF6I1",
"amount": 1,
"paymentId": null,
"paymentSourceId": "2",
"note": "We added payment !",
"createdAt": "2022-02-16 12:33:29",
"currencyCode": "XAF",
"paymentSource": "paid via cash"
},
{
"_id": "IPPVRVIJI59TVLFQ6PKM",
"invoiceId": "IV220216HB6561BKF6I1",
"amount": 1,
"paymentId": null,
"paymentSourceId": "2",
"note": "We added payment !",
"createdAt": "2022-02-16 12:33:10",
"currencyCode": "XAF",
"paymentSource": "paid via cash"
}
],
"pageCount": [
1,
50
],
"pageSize": 20,
"totalItems": 4
},
"success": true,
"dateTime": "2022-02-16T12:44:07+00:00",
"lang": "en-US",
"debugInfo": null,
"debug": {
"hostname": "cortex01",
"serverIpAddress": "192.168.137.2",
"clientIpAddress": "192.168.137.1",
"duration": "0.044s",
"userId": "ff1ruzi3vz5o"
}
}
Other actions
Cancel
Cancels an invoice
Endpoint
POST /v1/invoice/cancel
Request Body
{
"invoiceId": "IV220216HB6561BKF6I1"
}
Submit
Submits an invoice in draft status and make it available to receive payment
Endpoint
POST /v1/invoice/submit
Request Body
{
"invoiceId": "IV220216HB6561BKF6I1"
}
Create Transaction
Creates a transaction - to be called by the payer
Endpoint
POST /v1/invoice/create-transaction
Request Body
{
"invoiceId": "IV220216HB6561BKF6I1"
}
Mark as paid
Marks the invoice as paid
Endpoint
POST /v1/invoice/mark-as-paid
Request body params
| Parameter | Type | required | Description |
|---|---|---|---|
| _id | String | true | Payment ID |
| paymentSourceId | String | true | _id of invoice |
| note | String | true | payment Id |
{
"_id": "IVRYCSMGIEW2OO6TMUPY",
"paymentSourceId" : 1,
"note" : "We closed this invoice !"
}
Move to draft
Moves an UNPAID invoice to draft status so that it can be edited
Endpoint
POST /v1/invoice/move-to-draft
Request Body
{
"invoiceId": "IV220216HB6561BKF6I1"
}
Payout | Mass Payment (mapi)
Payout or mass payment is a service that enables making payments to one or more users. The beneficiaries can be INTERNAL or EXTERNAL (bank, MWP, Visa Prepaid cards etc) ; There are two ways of creating payouts:
- By manually adding recipients via JSON payload;
- By uploading a payout file using the relevant Payout template (MWP, internal, Bank transfer, prepaid card transfer)
Four services , using different templates are supported :
- Internal transfer - transfer funds to one or more tranzak internal users. Users will be searched ufId
- Mobile wallet transfer - send money to one or more mobile wallet users
- Bank transfer - send funds to bank accounts
- Pre-paid card transfer - top-up pre-paid cards
Each of the 4 types listed above supports either creating a request via JSON or via file upload using separate endpoints.
IMPORTANT NOTES
- Note that the user's default currency code will be used for the transaction
- The update endpoints are to be used exclusively by the service types created via JSON config.
- For requests created via file upload, all changes to the content must be done in the uploaded file by the user and re-uploaded.
Create Internal Transfer (JSON)
Request endpoint
POST /mapi/v1/payout/transfer
Request body params
| Parameter | Type | required | Description |
|---|---|---|---|
| title | String | true | Title of this PO |
| feeIsPaidByReceiver | int | false | whether fee is paid by receiver |
| isPriority | int | false | Whether priority queue should be used. Paid service |
| receivers | array | true | Array list of recipients (see payload) |
| mchTransactionRef | array | false | The creator's custom reference ID. If set, it must be UNIQUE |
{
"title": "Payout cool title",
"currencyCode" : "USD" ,
"feeIsPaidByReceiver": 1,
"isPriority": 1,
"mchTransactionRef" : "ref12345566666",
"receivers" : [
{
"tranzakId" : "tz13",
"accountName" : "Dan Internal",
"amount" : "1000",
"beneficiaryNote" : "Hello salary",
"payerNote" : "Transfer to user",
"payerReferenceId" : "111111"
},
{
"tranzakId" : "tz14",
"accountName" : "Dan Internal",
"amount" : "1000",
"beneficiaryNote" : "Hello salary2",
"payerNote" : "Transfer to user2",
"payerReferenceId" : "22222"
},
{
"tranzakId" : "tz15",
"accountName" : "Dan Internal",
"amount" : "1000",
"beneficiaryNote" : "Hello salary3",
"payerNote" : "Transfer to user3",
"payerReferenceId" : "33333"
}
]
}
Response
The response is a payout object . See the VIEW section.
UPLOAD Internal Transfer FILE
This endpoint creates an internal transfer via file upload
Endpoint
POST /mapi/v1/payout/upload-transfer-file
Request body params
Only the file (created from the relevant template) shall be uploaded. All changes to the details of the payout shall be amended in the file and re-submitted (in case of changes);
Response
See the VIEW section for the response
Creates a MOBILE MONEY TRANSFER via JSON
This endpoint creates an mobile money transfer via JSON configuration
Request endpoint
POST /mapi/v1/payout/transfer-to-mobile-wallet
Request body params
| Parameter | Type | required | Description |
|---|---|---|---|
| title | String | true | Title of this PO |
| feeIsPaidByReceiver | int | false | whether fee is paid by receiver |
| isPriority | int | false | Whether priority queue should be used. Paid service |
| receivers | array | true | Array list of recipients (see payload) |
| mchTransactionRef | array | false | The creator's custom reference ID |
{
"title": "Payout cool title",
"currencyCode" : "XAF" ,
"feeIsPaidByReceiver": 1,
"isPriority": 1,
"mchTransactionRef" : "ref12345566666",
"receivers" : [
{
"mobileNumber" : "+23767 4728670",
"accountName" : "Dan Momo",
"amount" : "1000",
"beneficiaryNote" : "Hello salary",
"payerNote" : "Transfer to user",
"payerReferenceId" : "111111"
}
]
}
Response
The response is a payout object . See the VIEW section.
UPLOAD Mobile Money Transfer FILE
This endpoint creates an mobile wallet transfer via file upload
Endpoint
POST /mapi/v1/payout/upload-mobile-wallet-file
Request body params
Only the file (created from the relevant template) shall be uploaded. All changes to the details of the payout shall be amended in the file and re-submitted (in case of changes);
Response
See the VIEW section for the response
Creates a BANK DEBIT TRANSFER via JSON
This endpoint creates an bank transfer via JSON configuration
Request endpoint
POST /mapi/v1/payout/transfer-to-bank-account
Request body params
| Parameter | Type | required | Description |
|---|---|---|---|
| title | String | true | Title of this PO |
| feeIsPaidByReceiver | int | false | whether fee is paid by receiver |
| isPriority | int | false | Whether priority queue should be used. Paid service |
| receivers | array | true | Array list of recipients (see payload) |
| mchTransactionRef | array | false | The creator's custom reference ID |
{
"title": "Payout cool title",
"currencyCode" : "XAF" ,
"feeIsPaidByReceiver": 1,
"isPriority": 1,
"mchTransactionRef" : "ref12345566666",
"receivers" : [
{
"accountNumber" : "10001111111111",
"accountName" : "Paddy Wak Chuk",
"bankCode" : "10033",
"branchCode" : "0005",
"ribCode" : "56" ,
"amount" : "1000",
"beneficiaryNote" : "Hello salary|UBA",
"payerNote" : "Transfer to user",
"payerReferenceId" : "111111"
},
{
"accountNumber" : "100022222222",
"accountName" : "Jezz Tabac",
"bankCode" : "10033",
"branchCode" : "0007",
"ribCode" : "56" ,
"amount" : "1000",
"beneficiaryNote" : "Hello salary|UBA",
"payerNote" : "Transfer to user",
"payerReferenceId" : "22222"
},
{
"accountNumber" : "2000222222222",
"accountName" : "XiaLai Tui",
"bankCode" : "10005",
"branchCode" : "0005",
"ribCode" : "56" ,
"amount" : "1000",
"beneficiaryNote" : "Hello XiaLai|AFB",
"payerNote" : "Transfer to XiaLai",
"payerReferenceId" : "2222222"
},
{
"accountNumber" : "3330000000000333",
"accountName" : "Wizzy Brown",
"bankCode" : "10005",
"branchCode" : "0005",
"ribCode" : "56" ,
"amount" : "1000",
"beneficiaryNote" : "Hello wizz|AFB",
"payerMessage" : "Transfer to wizz",
"payerReferenceId" : "3333333"
}
]
}
Response
The response is a payout object . See the VIEW section.
UPLOAD Bank Transfer FILE
This endpoint creates an mobile wallet transfer via file upload
Endpoint
POST /mapi/v1/payout/upload-bank-transfer-file
Request body params
Only the file (created from the relevant template) shall be uploaded. All changes to the details of the payout shall be amended in the file and re-submitted (in case of changes);
Response
See the VIEW section for the response
Creates a PREPAID CARD TOPUP via JSON
This endpoint creates an prepaid card topup via JSON configuration
Request endpoint
POST /mapi/v1/payout/transfer-to-prepaid-card
Request body params
| Parameter | Type | required | Description |
|---|---|---|---|
| title | String | true | Title of this PO |
| feeIsPaidByReceiver | int | false | whether fee is paid by receiver |
| isPriority | int | false | Whether priority queue should be used. Paid service |
| receivers | array | true | Array list of recipients (see payload) |
| mchTransactionRef | array | false | The creator's custom reference ID |
{
"title": "Payout cool title",
"currencyCode" : "XAF" ,
"feeIsPaidByReceiver": 1,
"isPriority": 1,
"mchTransactionRef" : "ref12345566666",
"receivers" : [
{
"accountName" : "Prepaid Cookie Monster",
"prepaidCardFirst6Digits" : "111111",
"prepaidCardLast4Digits" : "1111",
"prepaidCardCustomerId" : "111100111",
"amount" : "1000",
"beneficiaryNote" : "Hello salary",
"payerNote" : "Transfer to user",
"payerReferenceId" : "111111"
},
{
"accountName" : "Prepaid Cookie Monster",
"prepaidCardFirst6Digits" : "111111",
"prepaidCardLast4Digits" : "1111",
"prepaidCardCustomerId" : "111100111",
"amount" : "1000",
"beneficiaryNote" : "Hello salary",
"payerNote" : "Transfer to user",
"payerReferenceId" : "111111"
},
{
"accountName" : "Prepaid Cookie Monster",
"prepaidCardFirst6Digits" : "111111",
"prepaidCardLast4Digits" : "1111",
"prepaidCardCustomerId" : "111100111",
"amount" : "1000",
"beneficiaryNote" : "Hello salary",
"payerNote" : "Transfer to user",
"payerReferenceId" : "111111"
}
]
}
Response
The response is a payout object . See the VIEW section.
UPLOAD Prepaid Card Topup FILE
This endpoint creates an pre-paid card topup via file upload
Endpoint
POST /mapi/v1/payout/upload-prepaid-card-transfer-file
Request body params
Only the file (created from the relevant template) shall be uploaded. All changes to the details of the payout shall be amended in the file and re-submitted (in case of changes);
Response
See the VIEW section for the response
View
View the details of a PO
Request body params
GET /fapi/payout/view?payoutId=<payoutId>
Params
Either payoutId or mchTransactionRef may be used to obtain the payout object\
| Parameter | Type | required | Description |
|---|---|---|---|
| payoutId | String | false | ID of the PO |
| mchTransactionRef | String | false | custom transaction reference |
TYPES
const TYPE_INTERNAL_TRANSFER = 1;
const TYPE_MOBILE_WALLET_TRANSFER = 2;
const TYPE_BANK_DEBIT_TRANSFER = 3; //
const TYPE_VISA_PREPAID_TRANSFER = 4; //
STATUSES
const STATUS_PENDING = 1 ;
const STATUS_PAID = 2 ; // The payout has been paid to
const STATUS_PROCESSING = 3; // Batch job launched
const STATUS_COMPLETED = 4 ; //Completed
const STATUS_CANCELLED = 5 ; //Cancelled
const STATUS_FAILED = 6 ; // Failed
const STATUS_INTERNAL_TRANSFER_COMPLETED = 7 ; // internal transfer completed
Response
The following is response for a sample internal transfer
{
"data": {
"_id": "POK0G5FQAQE8H124Y5TH",
"completedAt": null,
"createdAt": "2022-02-16 14:10:28",
"currencyCode": "XAF",
"description": null,
"feeIsPaidByReceiver": 1,
"isCreatedViaFileUpload": 0,
"isPriority": 1,
"mchTransactionRef": "ref12345566666",
"priorityFee": 200,
"receivers": [
{
"mobileNumber": "+23767 4728670",
"accountName": "Dan Momo",
"amount": "1000",
"beneficiaryNote": "Hello salary",
"payerNote": "Transfer to user",
"payerReferenceId": "111111"
}
],
"spreadSheetReportFilePath": null,
"status": "pending",
"title": "Payout cool title",
"totalAmount": 1000,
"totalFailedTransactionAmount": 0,
"totalFee": 0,
"totalNumberFailedTransactions": 0,
"totalNumberOfReceivers": 1,
"type": "mobile money transfer"
},
"success": true,
"dateTime": "2022-02-16T14:10:39+00:00",
"lang": "en-US",
"debugInfo": null,
"debug": {
"hostname": "cortex01",
"serverIpAddress": "192.168.137.2",
"clientIpAddress": "192.168.137.1",
"duration": "0.045s",
"userId": "ff1ruzi3vz5o"
}
}
List
Paginated list of PO
Response
{
"data": {
"currentPage": 1,
"hasMore": false,
"list": [
{
"_id": "POK0G5FQAQE8H124Y5TH",
"title": "Payout cool title",
"createdByUserId": "42",
"totalAmount": 1000,
"type": "2",
"currencyCode": "XAF",
"mchTransactionRef": "ref12345566666",
"description": null,
"feeIsPaidByReceiver": "1",
"totalFee": 0,
"priorityFee": "200",
"isPriority": "1",
"status": "1",
"totalNumberOfReceivers": "1",
"isCreatedViaFileUpload": "0",
"spreadSheetReportFilePath": null,
"createdAt": "2022-02-16 14:10:28",
"completedAt": null,
"payment": null,
"statusText": "pending",
"typeText": "mobile money transfer"
},
{
"_id": "POZ8U7CYV2HYD0Y4YTSM",
"title": "This is a mass payment request",
"createdByUserId": "42",
"totalAmount": 10000,
"type": "3",
"currencyCode": "XAF",
"mchTransactionRef": "ABC10001",
"description": null,
"feeIsPaidByReceiver": "0",
"totalFee": 100,
"priorityFee": "0",
"isPriority": "0",
"status": "1",
"totalNumberOfReceivers": "10",
"isCreatedViaFileUpload": "1",
"spreadSheetReportFilePath": null,
"createdAt": "2022-02-16 14:07:13",
"completedAt": null,
"payment": null,
"statusText": "pending",
"typeText": "bank transfer"
},
{
"_id": "PO6BGO1KKB4L3LGGPG0G",
"title": "This is a mass payment request",
"createdByUserId": "42",
"totalAmount": 10000,
"type": "2",
"currencyCode": "XAF",
"mchTransactionRef": "ABC10001",
"description": null,
"feeIsPaidByReceiver": "0",
"totalFee": 100,
"priorityFee": "0",
"isPriority": "0",
"status": "1",
"totalNumberOfReceivers": "10",
"isCreatedViaFileUpload": "1",
"spreadSheetReportFilePath": null,
"createdAt": "2022-02-16 14:03:34",
"completedAt": null,
"payment": null,
"statusText": "pending",
"typeText": "mobile money transfer"
},
{
"_id": "POY4IKERPA66PT59TZ2D",
"title": "This is a mass payment request",
"createdByUserId": "42",
"totalAmount": 10000,
"type": "1",
"currencyCode": "XAF",
"mchTransactionRef": "ABC10001",
"description": null,
"feeIsPaidByReceiver": "0",
"totalFee": 10,
"priorityFee": "0",
"isPriority": "0",
"status": "1",
"totalNumberOfReceivers": "10",
"isCreatedViaFileUpload": "1",
"spreadSheetReportFilePath": null,
"createdAt": "2022-02-16 14:01:02",
"completedAt": null,
"payment": null,
"statusText": "pending",
"typeText": "internal transfer"
}
],
"pageCount": [
1,
50
],
"pageSize": 20,
"totalItems": 4
},
"success": true,
"dateTime": "2022-02-16T14:11:18+00:00",
"lang": "en-US",
"debugInfo": null,
"debug": {
"hostname": "cortex01",
"serverIpAddress": "192.168.137.2",
"clientIpAddress": "192.168.137.1",
"duration": "0.042s",
"userId": "ff1ruzi3vz5o"
}
}
List Transfers (jobs) for a payout
List all the transfers that have been made for a particular Payout request (if payoutId has been set) or for ALL payout requests. Filter by payoutId
request body params
GET /payout/list-jobs?payoutId=POAMB0GRBDWPMYCVMKNN
Filters
| Parameter | Type | required | Description |
|---|---|---|---|
| id | String | false | transfer iD |
| payoutId | String | false | ID of the PO |
| status | int | false | job status e.g 1-pending, 2-processing, 3-pending-settlement, 4-completed , 5-failed |
| type | int | false | Filter by type (See above) |
The following params may be used for filtering :
currencyCode, beneficiaryBankName, beneficiaryAccountNumber,
beneficiaryAccountName, partnerTransactionRefId, payerNote, beneficiaryNote,
beneficiaryRibCode, beneficiaryPrepaidFirst6Digits, beneficiaryPrepaidLast4Digits, beneficiaryPrepaidCustomerId{
"data": {
"currentPage": 1,
"hasMore": false,
"list": [
{
"id": "12",
"payoutId": "PO5TQWPZJ4C4KT80SCJ7",
"amount": 1000,
"beneAmount": 999,
"feeAmount": 1,
"currencyCode": "XAF",
"beneficiaryAccountNumber": "tz25",
"beneficiaryAccountName": "Dan Internal",
"beneficiaryBankCode": null,
"beneficiaryBankName": "",
"beneficiaryNote": "Hello salary3",
"beneficiaryBranchCode": null,
"beneficiaryRibCode": null,
"beneficiaryPrepaidFirst6Digits": null,
"beneficiaryPrepaidLast4Digits": null,
"beneficiaryPrepaidCustomerId": null,
"partnerTransactionRefId": null,
"payerNote": "Transfer to user3",
"payerReferenceId": "33333",
"status": "failed",
"errorCode": "2",
"message": "Tranzak user tz25 was not found.",
"debugMessage": "core\\models\\payment\\payout\\PayoutJob::generateInternalBeneAccount | user tz25 was not found. search was performed using login and _id attributes",
"createdAt": "2022-02-16 14:24:44",
"lastUpdatedAt": "2022-02-16 15:24:44",
"errorText": "user not found"
},
{
"id": "11",
"payoutId": "PO5TQWPZJ4C4KT80SCJ7",
"amount": 1000,
"beneAmount": 999,
"feeAmount": 1,
"currencyCode": "XAF",
"beneficiaryAccountNumber": "tz24",
"beneficiaryAccountName": "Dan Internal",
"beneficiaryBankCode": null,
"beneficiaryBankName": "",
"beneficiaryNote": "Hello salary2",
"beneficiaryBranchCode": null,
"beneficiaryRibCode": null,
"beneficiaryPrepaidFirst6Digits": null,
"beneficiaryPrepaidLast4Digits": null,
"beneficiaryPrepaidCustomerId": null,
"partnerTransactionRefId": null,
"payerNote": "Transfer to user2",
"payerReferenceId": "22222",
"status": "failed",
"errorCode": "2",
"message": "Tranzak user tz24 was not found.",
"debugMessage": "core\\models\\payment\\payout\\PayoutJob::generateInternalBeneAccount | user tz24 was not found. search was performed using login and _id attributes",
"createdAt": "2022-02-16 14:24:44",
"lastUpdatedAt": "2022-02-16 15:24:44",
"errorText": "user not found"
},
],
"pageCount": [
1,
50
],
"pageSize": 20,
"totalItems": 12
},
"success": true,
"dateTime": "2022-02-16T14:56:22+00:00",
"lang": "en-US",
"debugInfo": null,
"debug": {
"hostname": "cortex01",
"serverIpAddress": "192.168.137.2",
"clientIpAddress": "192.168.137.1",
"duration": "0.044s",
"userId": "ff1ruzi3vz5o"
}
}
View a Transfer Job
Displays details of the job. A job is a single transaction inside a mass payment request.
Request Endpoint
```GET /payout/view-transfer?jobId=3 `
Filters
| Parameter | Type | required | Description |
|---|---|---|---|
| id | int | false | job iD |
Response
{
"data": {
"amount": 1000,
"beneAmount": 999,
"beneficiaryAccountName": "Dan Internal",
"beneficiaryAccountNumber": "tz25",
"beneficiaryBankCode": null,
"beneficiaryBankName": "",
"beneficiaryBranchCode": null,
"beneficiaryNote": "Hello salary3",
"beneficiaryPrepaidCustomerId": null,
"beneficiaryPrepaidFirst6Digits": null,
"beneficiaryPrepaidLast4Digits": null,
"beneficiaryRibCode": null,
"createdAt": "2022-02-16 14:24:44",
"currencyCode": "XAF",
"errorCode": 2,
"errorCodeText": "user not found",
"feeAmount": 1,
"id": "12",
"lastUpdatedAt": "2022-02-16 15:24:44",
"message": "Tranzak user tz25 was not found.",
"partnerTransactionRefId": null,
"payerNote": "Transfer to user3",
"payerReferenceId": "33333",
"payoutId": "PO5TQWPZJ4C4KT80SCJ7",
"reportUrl": "http://staging-api.tranzak.me/fapi/mapi/payout/download-csv?_id=PO5TQWPZJ4C4KT80SCJ7",
"status": 5,
"statusText": "failed"
},
"success": true,
"dateTime": "2022-02-16T14:57:32+00:00",
"lang": "en-US",
"debugInfo": null,
"debug": {
"hostname": "cortex01",
"serverIpAddress": "192.168.137.2",
"clientIpAddress": "192.168.137.1",
"duration": "0.047s",
"userId": "ff1ruzi3vz5o"
}
}
Payment Request(mapi)
Primary interface for collection (receiving funds)
Status Codes
const MAPI_STATUS_PENDING = 'PENDING' ;
const MAPI_STATUS_COMPLETED = 'SUCCESSFUL' ;
const MAPI_STATUS_CANCELLED = 'CANCELLED' ;
const MAPI_STATUS_CANCELLED_BY_PAYER = 'CANCELLED_BY_PAYER' ;
const MAPI_STATUS_FAILED = 'FAILED' ;
const MAPI_STATUS_PAYMENT_IN_PROGRESS = 'PAYMENT_IN_PROGRESS' ;
const MAPI_STATUS_VOIDED = 'CANCELLED/REFUNDED' ;
const MAPI_STATUS_UNKNOWN = 'UNKNOWN' ;
Status Code for Payouts
const MAPI_PAYOUT_STATUS_PENDING = 'PENDING';
const MAPI_PAYOUT_STATUS_PROCESSING = 'PROCESSING';
const MAPI_PAYOUT_STATUS_FAILED = 'FAILED';
const MAPI_PAYOUT_STATUS_COMPLETED = 'SUCCESSFUL';
Create
Creates a PP request
Endpoint
POST /mapi/v1/platform/create
Request Params
Request Body Parameters
A request may be searched by either a requestId (cortex-generated) or using a merchant customer mchTransactionRef.
| Parameter | Type | required | Description |
|---|---|---|---|
| currencyCode | String(3) | true | The currency code |
| description | String(255) | true | Description of request |
| currencyCode | String(3) | true | The currency code |
| platformTransactionRef | String(32) | true | A custom transaction reference to track this payment |
| returnUrl | String(500) | false | URL where the payer will be redirected after payment |
| recipients | array | true | List of recipients (merchants) |
| autoPayout | array | false | Where to automatically disburse funds to the recipients after payment capture. Default = TRUE |
| payoutHoldTimeInHours | array | true | The hold time for disbursing funds to recipients. Default = NULL = immediately ; |
Recipient details
| Parameter | Type | required | Description |
|---|---|---|---|
| recipientType | String() | true | the merchant ID type |
| recipientId | String() | true | the recipient Identification |
| amount | String() | true | amount |
| description | String() | true | description of this payment |
| platformCommission | String() | true | the commission paid to the platform owner. |
| mchTransactionRef | String() | true | a custom transaction reference |
recipientTypes
const RECEIVER_TYPE_TRANZAK_APP_ID = 'app_id' ;
const RECEIVER_TYPE_TRANZAK_ID = 'tranzak_id';
const RECEIVER_TYPE_MOBILE_WALLET = 'mobile_wallet' ;
const RECEIVER_TYPE_MERCHANT_ID = 'merchant_id' ;
{
"currencyCode": "XAF",
"description": "Merchant Payment",
"platformTransactionRef": "2333333",
"returnUrl" : "https://pay.tranzak.me/platform/PFX6FYY7MUCNCD86TTMZ" ,
"recipients": [
{
"recipientType": "mobile_wallet",
"recipientId": "237674728670",
"amount": "1000",
"description": "Hello salary",
"platformCommission" : 100,
"mchTransactionRef": "1111111111"
},
{
"recipientType": "mobile_wallet",
"recipientId": "237674728670",
"amount": "1000",
"description": "Hello salary",
"platformCommission" : 100,
"mchTransactionRef": "1111111111"
},
{
"recipientType": "mobile_wallet",
"recipientId": "237674728670",
"amount": "1000",
"description": "Hello salary",
"platformCommission" : 100,
"mchTransactionRef": "1111111111"
},
{
"recipientType": "tranzak_id",
"recipientId": "tz23",
"amount": "1000",
"platformCommission" : 100,
"description": "Hello salary",
"mchTransactionRef": "22222222222"
},
{
"recipientType": "app_id",
"recipientId": "apayjpfyl4jeqg",
"amount": "1000",
"description": "Hello salary",
"mchTransactionRef": "3333333333333",
"platformCommission" : 100
}
]
}
Response
See the VIEW section
Create In-person payment request
Uses authCode to automatically authorize a platform payment
Request endpoint
POST /mapi/v1/platform/create-in-person-request
Request body params
See the body requires under Create section. All the params in CREATE plus the following :
| Parameter | Type | required | Description |
|---|---|---|---|
| authCode | String() | true | the pre-authorization code |
| mchTransactionRef | String() | true | a custom transaction reference |
Response
See the VIEW section
Create Mobile Money payment request
Uses authCode to automatically authorize a platform payment
Request endpoint
POST /mapi/v1/platform/create-mobile-wallet-request
Request body params
See the body requires under Create section. All the params in CREATE plus the following :
| Parameter | Type | required | Description |
|---|---|---|---|
| mobileWalletNumber | String() | true | the mobile wallet number |
| mchTransactionRef | String() | true | a custom transaction reference |
Response
See the VIEW section
VIEW details
Displays details of PR request
URL Endpoint
GET mapi/v1/platform/details?platformRequestId=PF10I70MF69A99TN9T81
Request URL
| Parameter | Type | required | Description |
|---|---|---|---|
| platformRequestId | String() | true | request ID |
Response
{
"data": {
"platformRequestId": "PFZI3B18TDBOFLI1164Y",
"description": "Merchant Payment",
"totalAmount": 5000,
"totalPlatformCommission": 500,
"autoPayout": 1,
"totalReceiverFee": 54,
"currencyCode": "XAF",
"status": "PENDING",
"delayPaymentUntilDate": null,
"hostAppId": "21",
"createdAt": "2022-05-18 12:08:05",
"totalNumberOfReceivers": 5,
"platformTransactionRef": "2333333"
},
"success": true,
}
VIEW with Recipient Details
Displays details of PR request + recipient info
URL Endpoint
GET /mapi/v1/platform/details?platformRequestId=PFP43HJR3489O9JUIE26
Request URL
| Parameter | Type | required | Description |
|---|---|---|---|
| platformRequestId | String() | true | request ID |
| withRecipients | String() | false | whether/not to display recipients |
Response
{
"data": {
"platformRequestId": "PFZI3B18TDBOFLI1164Y",
"description": "Merchant Payment",
"totalAmount": 5000,
"totalPlatformCommission": 500,
"autoPayout": 1,
"totalReceiverFee": 54,
"currencyCode": "XAF",
"status": "PENDING",
"delayPaymentUntilDate": null,
"hostAppId": "21",
"createdAt": "2022-05-18 12:08:05",
"totalNumberOfReceivers": 5,
"platformTransactionRef": "2333333",
"recipients": [
{
"recipientType": "mobile_wallet",
"recipientId": "237674728670",
"amount": "1000",
"description": "Hello salary",
"platformCommission": 100,
"mchTransactionRef": "1111111111"
},
{
"recipientType": "mobile_wallet",
"recipientId": "237674728670",
"amount": "1000",
"description": "Hello salary",
"platformCommission": 100,
"mchTransactionRef": "1111111111"
},
{
"recipientType": "mobile_wallet",
"recipientId": "237674728670",
"amount": "1000",
"description": "Hello salary",
"platformCommission": 100,
"mchTransactionRef": "1111111111"
},
{
"recipientType": "tranzak_id",
"recipientId": "tz23",
"amount": "1000",
"platformCommission": 100,
"description": "Hello salary",
"mchTransactionRef": "22222222222"
},
{
"recipientType": "app_id",
"recipientId": "apayjpfyl4jeqg",
"amount": "1000",
"description": "Hello salary",
"mchTransactionRef": "3333333333333",
"platformCommission": 100
}
]
},
"success": true
}
List
Lists requests
URL Endpoint
GET /mapi/v1/platform/list
Request URL
| Parameter | Type | required | Description |
|---|---|---|---|
| platformRequestId | String() | true | request ID |
| withRecipients | String() | false | whether/not to display recipients |
Response
{
"data": {
"list": [
{
"platformRequestId": "PFZI3B18TDBOFLI1164Y",
"description": "Merchant Payment",
"totalAmount": 5000,
"totalPlatformCommission": 500,
"autoPayout": 1,
"totalReceiverFee": 54,
"currencyCode": "XAF",
"status": "PENDING",
"delayPaymentUntilDate": null,
"hostAppId": "21",
"createdAt": "2022-05-18 12:08:05",
"totalNumberOfReceivers": 5,
"platformTransactionRef": "2333333"
},
{
"platformRequestId": "PFVA1CX8FY2YSP9C5958",
"description": "Merchant Payment",
"totalAmount": 5000,
"totalPlatformCommission": 500,
"autoPayout": 1,
"totalReceiverFee": 54,
"currencyCode": "XAF",
"status": "PENDING",
"delayPaymentUntilDate": null,
"hostAppId": "21",
"createdAt": "2022-05-18 10:20:46",
"totalNumberOfReceivers": 5,
"platformTransactionRef": "2333333"
},
{
"platformRequestId": "PFEDSQ2BIAUS18Z0TOWZ",
"description": "Merchant Payment",
"totalAmount": 5000,
"totalPlatformCommission": 500,
"autoPayout": 1,
"totalReceiverFee": 54,
"currencyCode": "XAF",
"status": "PENDING",
"delayPaymentUntilDate": null,
"hostAppId": "21",
"createdAt": "2022-05-18 10:19:15",
"totalNumberOfReceivers": 5,
"platformTransactionRef": "2333333"
},
{
"platformRequestId": "PFWPP38NFP7CQI0M2EGZ",
"description": "Merchant Payment",
"totalAmount": 5000,
"totalPlatformCommission": 500,
"autoPayout": 1,
"totalReceiverFee": 54,
"currencyCode": "XAF",
"status": "PENDING",
"delayPaymentUntilDate": null,
"hostAppId": "21",
"createdAt": "2022-05-18 10:18:43",
"totalNumberOfReceivers": 5,
"platformTransactionRef": "2333333"
},
{
"platformRequestId": "PFT02FW9KO2AMVAKTW4K",
"description": "Merchant Payment",
"totalAmount": 5000,
"totalPlatformCommission": 500,
"autoPayout": 1,
"totalReceiverFee": 54,
"currencyCode": "XAF",
"status": "PENDING",
"delayPaymentUntilDate": null,
"hostAppId": "21",
"createdAt": "2022-05-18 10:09:56",
"totalNumberOfReceivers": 5,
"platformTransactionRef": "2333333"
},
{
"platformRequestId": "PFEKZ3N43LJKP3SDVMYN",
"description": "Platform payment is cool",
"totalAmount": 30,
"totalPlatformCommission": 3,
"autoPayout": 1,
"totalReceiverFee": 0.18,
"currencyCode": "USD",
"status": "SUCCESSFUL",
"delayPaymentUntilDate": null,
"hostAppId": "21",
"createdAt": "2022-05-18 10:07:00",
"transactionId": "PP220518I0OWVMEAAVOQ",
"payoutStatus": "SUCCESSFUL",
"transactionTime": "2022-05-18 11:07:00.822000",
"totalNumberOfReceivers": 3,
"platformTransactionRef": "2333333"
},
{
"platformRequestId": "PFNQVVNPG96YSEIULX00",
"description": "Platform payment is cool",
"totalAmount": 30,
"totalPlatformCommission": 3,
"autoPayout": 1,
"totalReceiverFee": 0.18,
"currencyCode": "USD",
"status": "SUCCESSFUL",
"delayPaymentUntilDate": null,
"hostAppId": "21",
"createdAt": "2022-05-18 10:05:16",
"transactionId": "PP220518D4XXWRQV4C9O",
"payoutStatus": "SUCCESSFUL",
"transactionTime": "2022-05-18 11:05:16.377638",
"totalNumberOfReceivers": 3,
"platformTransactionRef": "2333333"
},
{
"platformRequestId": "PF43XSWJL7R18E8DBGAE",
"description": "Platform payment is cool",
"totalAmount": 30,
"totalPlatformCommission": 3,
"autoPayout": 1,
"totalReceiverFee": 0.18,
"currencyCode": "USD",
"status": "SUCCESSFUL",
"delayPaymentUntilDate": null,
"hostAppId": "21",
"createdAt": "2022-05-18 10:03:13",
"transactionId": "PP220518PRTPKXVUD6IM",
"payoutStatus": "SUCCESSFUL",
"transactionTime": "2022-05-18 11:03:13.350246",
"totalNumberOfReceivers": 3,
"platformTransactionRef": "2333333"
},
{
"platformRequestId": "PFM8IQ48GGB60OZBPJ1Z",
"description": "Platform payment is cool",
"totalAmount": 30,
"totalPlatformCommission": 3,
"autoPayout": 1,
"totalReceiverFee": 0.18,
"currencyCode": "USD",
"status": "SUCCESSFUL",
"delayPaymentUntilDate": null,
"hostAppId": "21",
"createdAt": "2022-05-18 10:02:59",
"transactionId": "PP220518HR6GLYF5DRAF",
"payoutStatus": "SUCCESSFUL",
"transactionTime": "2022-05-18 11:02:59.407227",
"totalNumberOfReceivers": 3,
"platformTransactionRef": "2333333"
},
{
"platformRequestId": "PF6HQLB8SBWTRSNCFED1",
"description": "Platform payment is cool",
"totalAmount": 30,
"totalPlatformCommission": 3,
"autoPayout": 1,
"totalReceiverFee": 0.18,
"currencyCode": "USD",
"status": "SUCCESSFUL",
"delayPaymentUntilDate": null,
"hostAppId": "21",
"createdAt": "2022-05-18 10:02:16",
"transactionId": "PP220518O298KNU4697L",
"payoutStatus": "SUCCESSFUL",
"transactionTime": "2022-05-18 11:02:16.473476",
"totalNumberOfReceivers": 3,
"platformTransactionRef": "2333333"
},
{
"platformRequestId": "PFPE0VSM4WL9JQ8SDPC4",
"description": "Platform payment is cool",
"totalAmount": 30,
"totalPlatformCommission": 3,
"autoPayout": 1,
"totalReceiverFee": 0.18,
"currencyCode": "USD",
"status": "SUCCESSFUL",
"delayPaymentUntilDate": null,
"hostAppId": "21",
"createdAt": "2022-05-18 10:02:03",
"transactionId": "PP220518QOTQZJCT6MGT",
"payoutStatus": "SUCCESSFUL",
"transactionTime": "2022-05-18 11:02:03.083506",
"totalNumberOfReceivers": 3,
"platformTransactionRef": "2333333"
},
{
"platformRequestId": "PFZL562NHX6IF8QZ4V4R",
"description": "Platform payment is cool",
"totalAmount": 30,
"totalPlatformCommission": 3,
"autoPayout": 1,
"totalReceiverFee": 0.18,
"currencyCode": "USD",
"status": "SUCCESSFUL",
"delayPaymentUntilDate": null,
"hostAppId": "21",
"createdAt": "2022-05-18 10:01:39",
"transactionId": "PP220518WC3ZFYAC5LDY",
"payoutStatus": "SUCCESSFUL",
"transactionTime": "2022-05-18 11:01:39.666322",
"totalNumberOfReceivers": 3,
"platformTransactionRef": "2333333"
},
{
"platformRequestId": "PFOKOD26PDFZFNBJC7LS",
"description": "Platform payment is cool",
"totalAmount": 30,
"totalPlatformCommission": 3,
"autoPayout": 1,
"totalReceiverFee": 0.18,
"currencyCode": "USD",
"status": "SUCCESSFUL",
"delayPaymentUntilDate": null,
"hostAppId": "21",
"createdAt": "2022-05-18 09:58:31",
"transactionId": "PP2205180X8D7T8EDH1H",
"payoutStatus": "SUCCESSFUL",
"transactionTime": "2022-05-18 10:58:31.331204",
"totalNumberOfReceivers": 3,
"platformTransactionRef": "2333333"
},
{
"platformRequestId": "PFY3EJ5ZAZHBSQFI3933",
"description": "Platform payment is cool",
"totalAmount": 30,
"totalPlatformCommission": 3,
"autoPayout": 1,
"totalReceiverFee": 0.18,
"currencyCode": "USD",
"status": "SUCCESSFUL",
"delayPaymentUntilDate": null,
"hostAppId": "21",
"createdAt": "2022-05-18 09:54:27",
"transactionId": "PP220518CKIFK362E9PZ",
"payoutStatus": "SUCCESSFUL",
"transactionTime": "2022-05-18 10:54:27.233326",
"totalNumberOfReceivers": 3,
"platformTransactionRef": "2333333"
},
{
"platformRequestId": "PFGD8ZXU3WD345H6951I",
"description": "Platform payment is cool",
"totalAmount": 30,
"totalPlatformCommission": 3,
"autoPayout": 1,
"totalReceiverFee": 0.18,
"currencyCode": "USD",
"status": "SUCCESSFUL",
"delayPaymentUntilDate": null,
"hostAppId": "21",
"createdAt": "2022-05-18 09:53:34",
"transactionId": "PP220518HVIMBSYLDSF0",
"payoutStatus": "SUCCESSFUL",
"transactionTime": "2022-05-18 10:53:34.254753",
"totalNumberOfReceivers": 3,
"platformTransactionRef": "2333333"
},
{
"platformRequestId": "PFHKWT98KZEXR5ZJB8P1",
"description": "Platform payment is cool",
"totalAmount": 30,
"totalPlatformCommission": 3,
"autoPayout": 1,
"totalReceiverFee": 0.18,
"currencyCode": "USD",
"status": "SUCCESSFUL",
"delayPaymentUntilDate": null,
"hostAppId": "21",
"createdAt": "2022-05-18 09:52:33",
"transactionId": "PP220518YLAAS8QVPC7N",
"payoutStatus": "SUCCESSFUL",
"transactionTime": "2022-05-18 10:52:33.465621",
"totalNumberOfReceivers": 3,
"platformTransactionRef": "2333333"
},
{
"platformRequestId": "PF6527EL4QPM2OGV8UUD",
"description": "Platform payment is cool",
"totalAmount": 30,
"totalPlatformCommission": 3,
"autoPayout": 1,
"totalReceiverFee": 0.18,
"currencyCode": "USD",
"status": "SUCCESSFUL",
"delayPaymentUntilDate": null,
"hostAppId": "21",
"createdAt": "2022-05-18 09:50:20",
"transactionId": "PP2205189VYXANHEF7E1",
"payoutStatus": "SUCCESSFUL",
"transactionTime": "2022-05-18 10:50:20.363072",
"totalNumberOfReceivers": 3,
"platformTransactionRef": "2333333"
},
{
"platformRequestId": "PF5HIGKSFT0A0ZWWSGAG",
"description": "Platform payment is cool",
"totalAmount": 30,
"totalPlatformCommission": 3,
"autoPayout": 1,
"totalReceiverFee": 0.18,
"currencyCode": "USD",
"status": "SUCCESSFUL",
"delayPaymentUntilDate": null,
"hostAppId": "21",
"createdAt": "2022-05-18 09:48:05",
"transactionId": "PP220518NM8SNKX4TSPQ",
"payoutStatus": "SUCCESSFUL",
"transactionTime": "2022-05-18 10:48:05.374216",
"totalNumberOfReceivers": 3,
"platformTransactionRef": "2333333"
},
{
"platformRequestId": "PF8SWMPN29KW5VRUY7YN",
"description": "Platform payment is cool",
"totalAmount": 30,
"totalPlatformCommission": 3,
"autoPayout": 1,
"totalReceiverFee": 0.18,
"currencyCode": "USD",
"status": "SUCCESSFUL",
"delayPaymentUntilDate": null,
"hostAppId": "21",
"createdAt": "2022-05-18 09:46:32",
"transactionId": "PP2205180AXD9DPJF8AJ",
"payoutStatus": "SUCCESSFUL",
"transactionTime": "2022-05-18 10:46:33.017652",
"totalNumberOfReceivers": 3,
"platformTransactionRef": "2333333"
},
{
"platformRequestId": "PFRZRQQXXE7HUVA4DW3L",
"description": "Platform payment is cool",
"totalAmount": 30,
"totalPlatformCommission": 3,
"autoPayout": 1,
"totalReceiverFee": 0.18,
"currencyCode": "USD",
"status": "SUCCESSFUL",
"delayPaymentUntilDate": null,
"hostAppId": "21",
"createdAt": "2022-05-18 09:45:27",
"transactionId": "PP2205180TTJJDZHHC7Y",
"payoutStatus": "SUCCESSFUL",
"transactionTime": "2022-05-18 10:45:27.460832",
"totalNumberOfReceivers": 3,
"platformTransactionRef": "2333333"
}
],
"totalItems": 37,
"pageCount": [
1,
50
],
"pageSize": 20,
"currentPage": 1,
"hasMore": true
},
"success": true,
}
Transfer
Manual disburse funds to recipients. This is applicable if autoPayout = false .
Endpoint
POST /mapi/v1/platform/transfer
Request Params
Request URL
| Parameter | Type | required | Description |
|---|---|---|---|
| platformRequestId | String() | true | request ID |
{
"platformRequestId" : "PFNXTMUAIHXE1TOUOPBD"
}
Response
See VIEW section
Payment Request(mapi)
Primary interface for collection (receiving funds)
Status Codes
const MAPI_STATUS_PENDING = 'PENDING' ;
const MAPI_STATUS_COMPLETED = 'SUCCESSFUL' ;
const MAPI_STATUS_CANCELLED = 'CANCELLED' ;
const MAPI_STATUS_FAILED = 'FAILED' ;
const MAPI_STATUS_PAYMENT_IN_PROGRESS = 'PAYMENT_IN_PROGRESS' ;
const MAPI_STATUS_VOIDED = 'CANCELLED/REFUNDED' ;
const MAPI_STATUS_UNKNOWN = 'UNKNOWN' ;
Create a request
Initiates a payment request to collect from a mobile wallet Upon creation, the mobile user will be required to authorize the payment.
Endpoint
POST /v1/request/create
Request Body Parameters
| Parameter | Type | required | Description |
|---|---|---|---|
| amount | String(100) | true | Amount of transaction |
| currencyCode | String(3) | true | 3-digit currency code |
| description | String(255) | true | Description of payment |
| mchTransactionRef | String | false | mch customer reference |
| itemDetails | String | false | details of transaction |
| returnUrl | String | false | return URL (payer will be redirected to URL after payment) |
| notifyUrl | String | false | Notification URL |
| payerNote | int | false | note to payer |
| receivingAccountId | String | false | the receiving account (defaults to merchant defaullt account) |
| invoiceId | String | false | invoice ID if this is for invoice payment |
| mobileWalletNumber | String | false | The mobile wallet that will be used to authorize payment |
{
"amount": 1,
"currencyCode" : "XAF",
"description" : "This is a noty note",
"receivingAccountId" : "MSAZTFNJSNA1S0VEJPIX" ,
"mobileWalletNumber" : "23768067567"
}
Response
See the VIEW section
Create an in-person/in-store request
Initiates an in-person /in-store payment request.
Endpoint
POST /v1/request/create-in-person-request
Request Body Parameters
| Parameter | Type | required | Description |
|---|---|---|---|
| amount | String(100) | true | Amount of transaction |
| currencyCode | String(3) | true | 3-digit currency code |
| description | String(255) | true | Description of payment |
| authCode | String | TRUE | REQUIRED Payer authorization code (for in-person payment) |
| mchTransactionRef | string | TRUE | REQUIRED mch customer reference |
| itemDetails | String | false | details of transaction |
| returnUrl | String | false | return URL (payer will be redirected to URL after payment) |
| notifyUrl | String | false | Notification URL |
| payerNote | int | false | note to payer |
| receivingAccountId | String | false | the receiving account (defaults to merchant default account) |
| invoiceId | String | false | invoice ID if this is for invoice payment |
{
"amount": 10000,
"currencyCode": "USD",
"description": "A transaction for the world",
"authCode": "tz2k9w1gs2xx655p8c824cb",
"mchTransactionRef": "sssssshssssssss"
}
Response
See the VIEW section
View a request
Initiates a payment request to collect from a mobile wallet Upon creation, the mobile user will be required to authorize the payment.
Endpoint
GET /v1/request/view?requestId=REQ_ID
GET /v1/request/details?requestId=REQ_ID
Request Body Parameters
A request may be searched by either a requestId (cortex-generated) or using a merchant customer mchTransactionRef.
| Parameter | Type | required | Description |
|---|---|---|---|
| requestId | String(32) | true | Amount of transaction - requestId or mchTransactionRef must be specified |
| mchTransactionRef | String(32) | optional | Merchant transaction reference - requestId or mchTransactionRef must be specified |
Response
Transaction in PENDING state
{
"data": {
"amount": 10000,
"creationTime": "2022-02-16T17:56:51+00:00",
"currencyCode": "USD",
"description": "A transaction for the world",
"itemDetails": "",
"links": {
"notifyUrl": "",
"paymentUrl": "http://staging-api.tranzak.me/fapi/mapi/request/pay?id=REQ220216CB3CDPJGIFH",
"returnUrl": ""
},
"mchTransactionRef": "sssssshssssssss",
"requestId": "REQ220216CB3CDPJGIFH",
"transactionStatus": "pending"
},
"success": true,
"debugInfo": null,
"debug": {
"lang": "en-US",
"dateTime": "2022-02-16T17:56:51+00:00",
"hostname": "cortex01",
"serverIpAddress": "192.168.137.2",
"clientIpAddress": "192.168.137.1",
"duration": "0.176s",
"userId": "ff1ruzi3vz5o",
"appId": "ff1ruzi3vz5o"
}
}
Completed request in local currency
{
"data": {
"amount": 10,
"appId": "apayjpfyl4jeqg",
"creationTime": "2022-05-12T20:07:09+00:00",
"currencyCode": "XAF",
"description": "A transaction for the world",
"itemDetails": "",
"mchTransactionRef": "sssssshssssssss",
"payer": {
"ref": "***id23",
"paymentServiceProvider": "tranzak",
"userId": "tz23",
"customerId": "CUSPH6J4U9OGT4GE"
},
"requestId": "REQ2205124C966S5KBDL",
"transactionId": "MP2205121DMY64GQ0G68",
"transactionStatus": "SUCCESSFUL",
"transactionTime": "2022-05-12T20:07:09+00:00"
},
"success": true,
}
Transaction in COMPLETED (successful) state with FOREX
{
"data": {
"amount": 10,
"appId": "apayjpfyl4jeqg",
"creationTime": "2022-05-12T20:05:51+00:00",
"currencyCode": "USD",
"description": "A transaction for the world",
"forex": {
"rate": 632300000,
"divisor": 100000000,
"amount": 6323,
"currencyCode": "XAF"
},
"itemDetails": "",
"mchTransactionRef": "112345566666",
"payer": {
"ref": "***id23",
"paymentServiceProvider": "tranzak",
"userId": "tz23",
"customerId": "CUSPH6J4U9OGT4GE"
},
"requestId": "REQ220512L08IPWTB2NK",
"transactionId": "MP22051287LQXCWT0WKN",
"transactionStatus": "SUCCESSFUL",
"transactionTime": "2022-05-12T20:05:53+00:00"
},
"success": true,
}
Send Message to Payer
This interface is used to send message to the payer after completing a transaction.
Endpoint
POST /v1/request/send-payment-message
Request Body Parameters
| Parameter | Type | required | Description |
|---|---|---|---|
| requestId | String | true | requestId |
| mchTransactionRef | String(32) | true | mchTransactionRef (either requestId or mchTransactionRef is required) |
| title | String(40) | true | Title of message. |
| messageBody | String(250) | true | Title of message. |
Params
{
"title": "Thank you for your purchase purchase 234",
"messageBody": "Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lo n an unknown printer took a galley of type and scrambas versions of Lorem Ipsum",
"requestId": "REQ2204010LNGOC4AJMH"
}
{
"title": "Thank you for your purchase purchase 234",
"messageBody": "Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lo n an unknown printer took a galley of type and scrambas versions of Lorem Ipsum",
"mchTransactionRef": "ref12345566666"
}
Response
Success or failure message
{
"data": {
"message": "success"
},
"success": true,
}
List Requests
Paginated list of requests
Endpoint
GET /request/list
Response
{
"data": {
"currentPage": 1,
"hasMore": true,
"list": [
{
"requestId": "REQ220512JUJ9VVRTGTW",
"status": "pending",
"amount": 1000,
"currencyCode": "XAF",
"description": "Merchant Payment",
"itemDetails": "",
"mchTransactionRef": "2333333",
"creationTime": "2022-05-12 19:49:48"
},
{
"requestId": "REQ2205126SURX2ZS0EF",
"status": "pending",
"amount": 1000,
"currencyCode": "XAF",
"description": "Merchant Payment",
"itemDetails": "",
"mchTransactionRef": "2333333",
"creationTime": "2022-05-12 19:49:47"
}
],
"pageCount": [
1,
50
],
"pageSize": 2,
"totalItems": 18
},
"success": true,
}
Test API (mapi)
Tests that the API is functional. Send a PING request and get a PONG response
Endpoint
GET /mapi/v1/test/ping
Filter parameters
None
Response
Account list
{
"data": {
"response": "pong"
},
"success": true,
"dateTime": "2022-02-16T12:01:19+00:00",
"lang": "fr-FR",
"debugInfo": null,
"debug": {
"hostname": "cortex01",
"serverIpAddress": "192.168.137.2",
"clientIpAddress": "192.168.137.1",
"duration": "0.055s",
"userId": "ff1ruzi3vz5o"
}
}
Transaction (mapi)
View, update, capture a transaction
Update a transaction
This call is for updating a transaction in pending state in preparation for during the capture process.
Endpoint
POST /v1/transaction/update
Request Body Parameters
| Parameter | Type | required | Description |
|---|---|---|---|
| payerAccountId | Number | false | The payment method account ID |
| collectedCouponId | Number | false | the coupon ID (for merchant payments) |
| tipAmount | Number | false | the tip amount in transaction currency. Applicable only to merchant transactions |
| giftCardId | Number | false | Apply the gift card ID if applicable . The gift card amount will be automatically calculated based on available balance |
Response
The response is a standard TRANSACTION response payload. See the transaction response section
See Transaction VIEW page
Capture a transaction
Capturing is the process of authorizing/confirming a transaction.
Endpoint
POST /v1/transaction/capture
Request Body Parameters
| Parameter | Type | required | Description |
|---|---|---|---|
| payerAccountId | Number | false | The payment method account ID (Set if the payer uses a diff PM) |
| paymentPin | Number | true | the user's 6-digit payment PIN used for authorizing transactions |
Response
Response is standard Transaction payload response.
View transaction
Views transaction details. The details of a transaction will vary slightly depending on :
- Whether the current user is the payer or beneficiary.
- Whether the transaction is PENDING or in TERMINAL (completed/refunded/failed) state .
GET /v1/transaction/view?id=_TRANSACTION_ID
Request Body Parameters
| Parameter | Type | required | Description |
|---|---|---|---|
| _id | String | true | The transaction ID |
Response
Response is standard Transaction payload response. The payload for PAYER and BENEFICIARY are slightly different. the resulting payload will be generated based on the current user
PAYER's payload for transaction in PENDING State
{
"data": {
"_id": "MP2202161MOESVEUKUJ3",
"amount": 1,
"co": 1,
"completedAt": "2022-02-16 19:00:59.111505",
"couponDiscount": 0,
"createdAt": "2022-02-16 18:00:59.102474",
"currencyCode": "USD",
"description": "A transaction for the world",
"isInitiatiatedByPayer": true,
"itemDetails": "",
"mchTransactionRef": "sssssshssssssss",
"payee": {
"_id": "dadb46c4d7a04a4ebf8717eecfdba825",
"displayName": null,
"beneficiaryAccountNumber": null,
"isVerified": null,
"avatarUrl": null,
"note": "",
"netAmount": 565
},
"payer": {
"_id": "tz21",
"displayName": "tz21",
"avatarUrl": null
},
"returnUrl": "",
"service": {
"type": "payment",
"_id": 43
},
"status": "successful",
"tipAmount": 0,
"type": "merchant payment"
},
"success": true,
"debugInfo": null,
"debug": {
"lang": "en-US",
"dateTime": "2022-02-16T18:02:53+00:00",
"hostname": "cortex01",
"serverIpAddress": "192.168.137.2",
"clientIpAddress": "192.168.137.1",
"duration": "0.05s",
"userId": "ff1ruzi3vz5o",
"appId": "ff1ruzi3vz5o"
}
}
Payer's payload For transaction in TERMINAL (completed) state
{
"data": {
"_id": "MP220120POU1NRP84W0O",
"amount": 1000,
"bene": {
"displayName": "tz12",
"beneficiaryAccountId": "tz12",
"isVerified": 0,
"avatarUrl": null,
"note": null,
"netAmount": 900
},
"completedAt": "2022-01-20 01:39:29.664083",
"createdAt": "2022-01-20 00:16:51.808261",
"currencyCode": "XAF",
"currentUser": {
"_id": "syswkz2y65ugrmto",
"displayName": "tz13",
"countryCode": "CM",
"verifiedName": null,
"avatarUrl": null,
"primaryCurrencyCode": "XAF"
},
"description": "Payment to tz12",
"disablePayerAccountSelection": null,
"isInitiatiatedByPayer": true,
"itemDetails": null,
"mchTransactionRef": null,
"membership": {
"planId": "MEMSHOSURRCOVX58",
"_id": "CMDIJ6S3QAGO84Y6",
"name": "VIP membership",
"description": "buy at half price!",
"avatarUrl": "https://avatar.com/image.png",
"payerAmount": 100,
"payerCurrencyCode": "XAF",
"beneAmount": 100,
"beneCurrencyCode": "XAF"
},
"merchantCouponAmount": 0,
"payer": {
"displayName": "tz13",
"avatarUrl": null,
"currencyCode": "XAF",
"amount": 1000,
"fee": 0,
"bonusAmount": 0,
"merchantDiscountAmount": 0,
"giftCardAmount": 0,
"membershipAmount": 100,
"netAmount": 900,
"isVerified": 0,
"account": {
"_id": "ACWO7CG5KTSLE7FPL1Z8",
"name": "Primary balance",
"description": "",
"balance": 99999999100,
"currencyCode": "XAF",
"isExternal": false,
"openingBalance": 100000000000,
"closingBalance": 99999999100
}
},
"requirePinForTransaction": 1,
"returnUrl": null,
"status": 2,
"statusText": "completed",
"tipAmount": 0,
"type": 3,
"typeText": "merchant payment"
},
"success": true,
"dateTime": "2022-01-20T11:10:10+00:00",
"duration": "0.061s",
"lang": "en-US",
"userId": 13,
"orgUserId": 13,
"roleId": 1000,
"roleLabel": "super admin/owner",
"hostname": "cortex01",
"serverIpAddress": "192.168.137.2"
}
BENEFICIARY Payload in TERMINAL state
{
"data": {
"_id": "MP220120POU1NRP84W0O",
"amount": 1000,
"bene": {
"displayName": "Merchant account (Default)",
"beneficiaryAccountId": "tz12",
"isVerified": 0,
"avatarUrl": "http://staging-api.tranzak.me/fapi/static/img/logos/tz-logo-btn-black.png",
"note": null,
"netAmount": 900,
"currencyCode": "XAF",
"amount": 1000,
"fee": 0,
"giftCardDiscountAmount": 0,
"membershipDiscountAmount": 100,
"account": {
"name": "Merchant account (Default)",
"currencyCode": "XAF",
"_id": "MSAEDQL3H3UBK40L5H23",
"openingBalance": 0,
"closingBalance": 900
}
},
"completedAt": "2022-01-20 01:39:29.664083",
"createdAt": "2022-01-20 00:16:51.808261",
"currencyCode": "XAF",
"currentUser": {
"_id": "sysk4ml12hm856e9",
"displayName": "tz12",
"countryCode": "CM",
"verifiedName": null,
"avatarUrl": null,
"primaryCurrencyCode": "XAF"
},
"description": "Payment to tz12",
"disablePayerAccountSelection": null,
"isInitiatiatedByPayer": true,
"itemDetails": null,
"mchTransactionRef": null,
"membership": {
"planId": "MEMSHOSURRCOVX58",
"_id": "CMDIJ6S3QAGO84Y6",
"name": "VIP membership",
"description": "buy at half price!",
"avatarUrl": "https://avatar.com/image.png",
"payerAmount": 100,
"payerCurrencyCode": "XAF",
"beneAmount": 100,
"beneCurrencyCode": "XAF"
},
"merchantCouponAmount": 0,
"payer": {
"displayName": "tz13",
"avatarUrl": null
},
"requirePinForTransaction": 1,
"returnUrl": null,
"status": 2,
"statusText": "completed",
"tipAmount": 0,
"type": 3,
"typeText": "merchant payment"
},
"success": true,
"dateTime": "2022-01-20T11:10:35+00:00",
"duration": "0.055s",
"lang": "en-US",
"userId": 12,
"orgUserId": 12,
"roleId": 1000,
"roleLabel": "super admin/owner",
"hostname": "cortex01",
"serverIpAddress": "192.168.137.2"
}
Poll Transaction
Polls the transaction to obtain the status. Useful for payments that use external funding sources.
Endpoint
GET /v1/transaction/poll?_id=TXN_ID
Response
{
"status": 1,
"statusText": "pending"
}
Refresh Inbound External Payment Status
For payments using external payment methods. If the payment too long without status update, the payer may be asked to "refresh" the status of the payment to obtain the latest status from the service provider. The delay may be caused by payment not being sent/received or provider internal issues.
Request Endpoint
GET /transaction/refresh-inbound-payment-status
{
"_id" : "MP2202070XD9JIW6FBZS"
}
Response
Success/failure message
"data": {
"message": "success"
},
List transaction history
Displays Transaction history
Endpoint
POST /v1/transaction/list
Search Filter params
| Parameter | Type | required | Description |
|---|---|---|---|
| _id | string | false | transaction ID |
| accountId | string | false | Any account ID (could be payer or benef) |
| startDateTime | Date | false | start date time |
| endDateTime | Date | false | end date time |
| payerAccountId | Number | false | payer's (source) account ID |
| beneAccountId | Number | false | beneficiary's (destination) account ID |
| payerUserId | String | false | payer UserId |
| beneUserId | String | false | beneficiary's user ID |
| payerOrgUserId | String | false | payer's org User ID |
| customerId | String | false | Transactions involving this customer (for merchants) |
| payerUserId | String | false | Filter by SID of the authorizing user |
| beneIdToken | String | false | the beneficiary token (e.g mobile number, bank account number) e.g 237683160662 |
| description | String | false | transaction narration |
Response
{
"data": {
"currentPage": 1,
"hasMore": false,
"list": [
{
"_id": "MP220120HZ8YSECOBMV0",
"currencyCode": "USD",
"amount": 100,
"status": "2",
"statusText": "completed",
"type": "3",
"typeText": "merchant payment",
"serviceType": "1",
"serviceTypeText": "payment",
"description": "backdoor | demo data",
"completedAt": "2022-01-20 13:24:29.978583",
"isInitiatiatedByPayer": "1",
"couponAmount": 0,
"tipAmount": 0,
"payerOrgUser": {
"merchantDiscountAmount": 0,
"currencyCode": "XAF",
"amount": 56461,
"fee": 0,
"bonusAmount": 0,
"giftCardAmount": 0,
"netAmount": 56461,
"_id": "sysmk14qw1xwj5ys",
"displayName": " ",
"isVerified": "0",
"avatarUrl": null
},
"payerAccount": {
"_id": "ACJRIPS25TL7290AR7XX",
"currencyCode": "XAF",
"avatarUrl": "http://staging-api.tranzak.me/fapi/static/img/logos/tz-logo-btn.png",
"name": "Primary account",
"description": "",
"type": "1",
"typeText": "Primary account"
},
"beneUser": {
"currencyCode": "XAF",
"amount": 56461,
"fee": 0,
"netAmount": 56461,
"_id": "sysk4ml12hm856e9",
"displayName": "tz12",
"isVerified": "0",
"avatarUrl": null
},
"beneAccount": {
"_id": "MSAAQNHR8OVSDGAKVPJ6",
"currencyCode": "XAF",
"avatarUrl": "http://staging-api.tranzak.me/fapi/static/img/logos/tz-logo-btn-black.png",
"name": "m3",
"description": "Party scatter m3",
"type": "6",
"typeText": "Merchant account"
},
"service": {
"type": "1",
"typeText": "payment"
}
},
],
"pageCount": [
1,
50
],
"pageSize": 10,
"totalItems": 10
},
"success": true,
"dateTime": "2022-01-18T21:50:49+00:00",
"duration": "0.077s",
"lang": "en-US",
"userId": 34,
"orgUserId": 33,
"roleId": 1000,
"roleLabel": "super admin/owner",
"hostname": "cortex01",
"serverIpAddress": "192.168.137.2"
}
List SALES
Sales or sale transactions are a type of inbound transactions where :
- The current user is a merchant and the beneficiary ; And
- The receiving account type = merchant (sub)account
Request Endpoint
GET /v1/transaction/sales
Filter params
All filters applicable to transactions may be applied to sales. The following are extra filters supported by sales:
| Parameter | Type | required | Description |
|---|---|---|---|
| mchTransactionRef | String | false | merchant custom transaction ref |
| giftCardPackId | String | false | gift card pack ID |
| couponId | String | false | coupon ID |
| withTip | String | false | whether to filter by transactions with tips |
| membershipPlanId | String | false | membership plan ID |
Response
List of sale transactions The response payload is same as in transaction plus a few extra attributes
{
"data": {
"currentPage": 1,
"hasMore": false,
"list": [
{
"giftCard": {
"_id": "GPYZXQ2IZNF3JW83",
"name": "Save on purchasesSave on purchasesSave on! 100F off!",
"description": "Big things popping. Small things stopping it.",
"avatarUrl": null,
"valueAmount": "10000",
"currencyCode": "XAF",
"payerAmount": 100,
"payerCurrencyCode": "XAF",
"beneAmount": 100,
"beneCurrencyCode": "XAF",
},
"coupon": {
"_id": "CPMRLNVKR065WXB8",
"name": "Save on purchasesSave on purchasesSave on! 100F off!",
"description": "Big things popping. Small things stopping it.",
"amountOff": "100",
"currencyCode": "XAF",
"percentageOff": null,
"code": "VF48JK"
},
"membership": {
"_id": "CMA90I7XG7BQPXOV",
"planId": "MEMSHOSURRCOVX58",
"name": "VIP membership",
"description": "buy at half price!",
"payerAmount": 100,
"payerCurrencyCode": "XAF",
"beneAmount": 100,
"beneCurrencyCode": "XAF",
"avatarUrl": "https://avatar.com/image.png"
}
},
],
"pageCount": [
1,
50
],
"pageSize": 10,
"totalItems": 10
},
"success": true,
"dateTime": "2022-01-18T21:50:49+00:00",
"duration": "0.077s",
"lang": "en-US",
"userId": 34,
"orgUserId": 33,
"roleId": 1000,
"roleLabel": "super admin/owner",
"hostname": "cortex01",
"serverIpAddress": "192.168.137.2"
}
List OUTbound transactions
Outbound transactions are transactions where the current user is the payer .
GET /v1/transaction/outbound
Filter params
See list transactions
Response
Same as list transactions response
List INbound transactions
Outbound transactions are transactions where the current user is the payer
GET /v1/transaction/inbound
Filter params
See list transactions
Response
Same as list transactions response
View Inbound External Transactions
Inbound External transactions are transaction funded by external payment methods (e.g MWP) ; If an ext payment method is used to fund a transaction, then while waiting for the ext payment to finalize, then status of the ext payment can be tracked by calling this interface
Request body
GET /v1/transaction/view-inbound-ext-payment?_id=IBXXXX
Response
The transaction payload is returned with inboundExternalPayment data Sample transaction showing inbound payment data. The status of the inbound extPay can be tracked using this interface.
{
"data": {
"_id": "PP20211110G41L6O6866",
"amount": 1694,
"bene": {
"displayName": "MTN Momo | 655237546",
"isVerified": 0,
"avatarUrl": "http://rest.tranzak.me/static/img/partners/mtn.png",
"currencyCode": "XAF",
"amount": 1694,
"fee": 0,
"netAmount": 1694,
"account": {
"name": "MTN Momo | 655237546",
"currencyCode": "XAF"
}
},
"completedAt": "2021-11-10 18:26:45.801312",
"createdAt": "2021-11-10 17:26:43.641522",
"currencyCode": "XAF",
"currentUser": {
"_id": "sysn887xszvk8coz",
"displayName": "tz87",
"countryCode": "CM",
"verifiedName": null,
"avatarUrl": null
},
"description": "Payment to tz87",
"inboundExternalPayment": {
"_id": "IB20211110URNT2O",
"serviceProviderShortName": "MTN Momo",
"serviceProviderName": "MTN Momo",
"serviceProviderCountryCode": "CM",
"partnerAccountHolderId": "655237546",
"partnerAccountHolderName": null,
"avatarUrl": "/static/img/partners/mtn.png",
"providerType": "telecom wallet",
"status": 2,
"statusText": "completed"
},
"payer": {
"displayName": "Tranzak System Account | Cameroon",
"avatarUrl": null
},
"status": 2,
"statusText": "completed",
"type": 1,
"typeText": "transfer"
},
"success": true,
"dateTime": "2021-11-10T17:33:00+00:00",
"duration": "0.052s",
"lang": "en-US",
"userId": 87,
"orgUserId": 87,
"roleId": 1000,
"roleLabel": "owner",
"hostname": "cortex01",
"serverIpAddress": "192.168.137.2"
}
Cancel Inbound External Payment
Cancels an ongoing inbound ext payment . Upon cancelling the inbound ext payment, the user should be redirected to the payment authorization page
Request body
POST /v1/transaction/cancel-inbound-ext-payment
{
"_id" : "IB20211110Z2SVGY"
}
Response
The transaction payload is returned with inboundExternalPayment data. The status of the inboundExtPayment to confirm
{
"data": {
"_id": "PP20211110890QCQW90N",
"amount": 1694,
"bene": {
"displayName": "MTN Momo | 655237546",
"isVerified": 0,
"avatarUrl": "http://rest.tranzak.me/static/img/partners/mtn.png",
"currencyCode": "XAF",
"amount": 1694,
"fee": 0,
"netAmount": 1694,
"account": {
"name": "MTN Momo | 655237546",
"currencyCode": "XAF"
}
},
"completedAt": null,
"createdAt": "2021-11-10 17:46:14.051510",
"currencyCode": "XAF",
"currentUser": {
"_id": "sysn887xszvk8coz",
"displayName": "tz87",
"countryCode": "CM",
"verifiedName": null,
"avatarUrl": null
},
"description": "Payment to tz87",
"inboundExternalPayment": {
"_id": "IB20211110MM1VOB",
"serviceProviderShortName": "MTN Momo",
"serviceProviderName": "MTN Momo",
"serviceProviderCountryCode": "CM",
"partnerAccountHolderId": "655237546",
"partnerAccountHolderName": null,
"avatarUrl": "/static/img/partners/mtn.png",
"providerType": "telecom wallet",
"status": 5,
"statusText": "cancelled"
},
"payer": {
"displayName": "Tranzak System Account | Cameroon",
"avatarUrl": null
},
"paymentMethods": [],
"status": 1,
"statusText": "pending",
"type": 1,
"typeText": "transfer"
},
"success": true,
"dateTime": "2021-11-10T17:46:26+00:00",
"duration": "0.057s",
"lang": "en-US",
"userId": 87,
"orgUserId": 87,
"roleId": 1000,
"roleLabel": "owner",
"hostname": "cortex01",
"serverIpAddress": "192.168.137.2"
}
Webhooks (mapi)
Webhooks are automated messages sent from apps when something happens. They have a message—or payload—and are sent to a unique URL—essentially the app's phone number or address. Webhooks are almost always faster than polling, and require less work on your end. They're much like SMS notifications.
Event Types
Displays list of supported events and their respective description.
Endpoint
GET /webhook/event-types
Request Params
N/A
Response
{
"data": [
{
"name": "*",
"description": "all events."
},
{
"name": "REQUEST.COMPLETED",
"description": "a payment request is completed."
},
{
"name": "REQUEST.CANCELLED",
"description": "a payment request is cancelled or voided"
},
{
"name": "PAYOUT.COMPLETED",
"description": "a payout (mass payment) is completed."
},
{
"name": "PAYOUT.PROCESSING",
"description": "a payout (mass payment) is enters processing state."
},
{
"name": "INVOICE.CANCELLED",
"description": "invoice is cancelled."
},
{
"name": "INVOICE.PAID",
"description": "invoice is partially or fully paid."
},
{
"name": "REFUND.CREATED",
"description": "a refund/reversal/chargeback is created."
},
{
"name": "REFUND.COMPLETED",
"description": "a refund/reversal/chargeback is completed"
},
{
"name": "REFUND.CANCELLED",
"description": "a refund/reversal/chargeback is cancelled"
},
{
"name": "PAYMENTLINK.PAID",
"description": "a payment link is paid"
}
],
"success": true,
}
Create a webhook
Registers a webhook
Endpoint
POST /webhook/create
Request Body Parameters
| Parameter | Type | required | Description |
|---|---|---|---|
| url | String(100) | true | The callback URL |
| eventTypes | Array | true | List of event types that event types to receive notification. |
{
"url": "https://local-api.tranzak.me/tranzak-callback",
"eventTypes": [
"REQUEST.COMPLETED",
"PAYOUT.COMPLETED",
"PAYOUT.PROCESSING",
"REQUEST.CANCELLED",
"REFUND.CANCELLED",
"REFUND.COMPLETED",
"REFUND.CREATED",
"INVOICE.PAID","INVOICE.CANCELLED" ,
"PAYMENTLINK.PAID"
]
}
To listen to all event types , use the '*' as event type.
{
"url": "https://local-api.tranzak.me/tranzak-callback",
"eventTypes": [ "*" ]
Response
See the VIEW section
View webhook details
Initiates a payment request to collect from a mobile wallet Upon creation, the mobile user will be required to authorize the payment.
Endpoint
GET /webhook/details?id=WHJ11VT8SIZU0QARVJXL48
Request Body Parameters
A request may be searched by either a requestId (cortex-generated) or using a merchant customer mchTransactionRef.
| Parameter | Type | required | Description |
|---|---|---|---|
| id | String(32) | true | webhook ID |
Response
{
"data": {
"createdAt": "2022-05-12 19:31:59",
"eventTypes": [
"*"
],
"webhookId": "WHJ11VT8SIZU0QARVJXL48",
"url": "https://local-api.tranzak.me/tranzak-callback"
},
"success": true,
}
Delete Webhook
Deletes a webhook
Endpoint
POST /webhook/delete
Request Body Parameters
A request may be searched by either a requestId (cortex-generated) or using a merchant customer mchTransactionRef.
| Parameter | Type | required | Description |
|---|---|---|---|
| webhookId | String(32) | true | webhook ID |
{
"webhookId": "WH99UROLUCQ1T7N7DTRRND"
}
Response
{
"data": {
"message": "success"
},
"success": true,
}
Webhook List
Displays paginated list of registered webhooks
forex
GET latest exchange rates
POST https://fx.tranzak.me/v1/rates/latest
Request Body Parameters
None
Header Parameters
| Parameter | Type | required | Description |
|---|---|---|---|
| x-app-key | String | false | access key |
Response
Exchange rates relative to the US Dollar
{
"data": {
"rates": {
"AED": 3.673005,
"AFN": 88.333614,
"ALL": 111.018619,
"AMD": 488.092713,
"ANG": 1.80142,
"AOA": 455.6195,
"ARS": 110.375954,
"AUD": 1.331422,
"AWG": 1.8005,
"AZN": 1.7,
"BAM": 1.779054,
"BBD": 2,
"BDT": 86.187313,
"BGN": 1.7846,
"BHD": 0.376982,
"BIF": 2050.049631,
"BMD": 1,
"BND": 1.359446,
"BOB": 6.86206,
"BRL": 4.7434,
"BSD": 1,
"BTC": 0.000021181504,
"BTN": 76.092397,
"BWP": 11.46948,
"BYN": 3.255516,
"BZD": 2.014836,
"CAD": 1.249585,
"CDF": 1998.400503,
"CHF": 0.936014,
"CLF": 0.028174,
"CLP": 777.37,
"CNH": 6.386015,
"CNY": 6.3705,
"COP": 3803.334922,
"CRC": 655.090006,
"CUC": 1,
"CUP": 25.75,
"CVE": 100.675,
"CZK": 22.4769,
"DJF": 177.956147,
"DKK": 6.785532,
"DOP": 55.014988,
"DZD": 143.022,
"EGP": 18.306,
"ERN": 15.000003,
"ETB": 51.333901,
"EUR": 0.912122,
"FJD": 2.0899,
"FKP": 0.762518,
"GBP": 0.762518,
"GEL": 3.21,
"GGP": 0.762518,
"GHS": 7.572254,
"GIP": 0.762518,
"GMD": 54.1,
"GNF": 8933.71733,
"GTQ": 7.685576,
"GYD": 209.129287,
"HKD": 7.829685,
"HNL": 24.536429,
"HRK": 6.9075,
"HTG": 106.451507,
"HUF": 341.336552,
"IDR": 14353.95,
"ILS": 3.221145,
"IMP": 0.762518,
"INR": 76.121504,
"IQD": 1458.844238,
"IRR": 42300,
"ISK": 130.26,
"JEP": 0.762518,
"JMD": 153.202608,
"JOD": 0.709,
"JPY": 124.05416667,
"KES": 114.8,
"KGS": 99.0642,
"KHR": 4048.232137,
"KMF": 447.849773,
"KPW": 900,
"KRW": 1224.294332,
"KWD": 0.304573,
"KYD": 0.832958,
"KZT": 481.178112,
"LAK": 11679.765136,
"LBP": 1511.390739,
"LKR": 284.868997,
"LRD": 153.049991,
"LSL": 14.56722,
"LYD": 4.665233,
"MAD": 9.687956,
"MDL": 18.295002,
"MGA": 4042.169475,
"MKD": 56.128189,
"MMK": 1777.733196,
"MNT": 2897.751396,
"MOP": 8.060709,
"MRU": 36.374304,
"MUR": 44.956841,
"MVR": 15.4,
"MWK": 816.602372,
"MXN": 20.037099,
"MYR": 4.2165,
"MZN": 63.83,
"NAD": 14.55,
"NGN": 415.597357,
"NIO": 35.748562,
"NOK": 8.673335,
"NPR": 121.750139,
"NZD": 1.444409,
"OMR": 0.384531,
"PAB": 1,
"PEN": 3.735946,
"PGK": 3.521974,
"PHP": 52.033504,
"PKR": 182.42528,
"PLN": 4.30433,
"PYG": 6963.441783,
"QAR": 3.652324,
"RON": 4.5136,
"RSD": 107.388239,
"RUB": 98.250016,
"RWF": 1023.336238,
"SAR": 3.75147,
"SBD": 8.035388,
"SCR": 14.416848,
"SDG": 447,
"SEK": 9.505507,
"SGD": 1.360527,
"SHP": 0.762518,
"SLL": 11755.499907,
"SOS": 578.258397,
"SRD": 20.678,
"SSP": 130.26,
"STD": 21443.240504,
"STN": 22.55,
"SVC": 8.746117,
"SYP": 2512,
"SZL": 14.567219,
"THB": 33.756567,
"TJS": 12.97018,
"TMT": 3.51,
"TND": 2.953,
"TOP": 2.250084,
"TRY": 14.841587,
"TTD": 6.799049,
"TWD": 28.818501,
"TZS": 2320,
"UAH": 29.511128,
"UGX": 3593.700634,
"USD": 1,
"UYU": 41.785789,
"UZS": 11481.883887,
"VES": 4.33645,
"VND": 22870.214241,
"VUV": 113.148302,
"WST": 2.603668,
"XAF": 598.312857,
"XAG": 0.0400088,
"XAU": 0.00051809,
"XCD": 2.70255,
"XDR": 0.720272,
"XOF": 598.312857,
"XPD": 0.00044132,
"XPF": 108.845116,
"XPT": 0.00101318,
"YER": 250.249937,
"ZAR": 14.583922,
"ZMW": 17.896767,
"ZWL": 322
}
},
"success": true
}
Get time series for a specific currency
https Request
POST https://fx.tranzak.me/v1/rates/time-series
Request Body Parameters
| Parameter | Type | required | Description |
|---|---|---|---|
| startDate | String | true | eg: 2021-01-01 |
| endDate | String | true | eg: 2021-01-30 |
Response
{{
"data": {
"currencies": {
"motd": {
"msg": "If you or your company use this project or like what we doing, please consider backing us so we can continue maintaining and evolving this project.",
"url": "https://exchangerate.host/#/donate"
},
"success": true,
"timeseries": true,
"base": "USD",
"start_date": "2021-01-01",
"end_date": "2021-01-05",
"rates": {
"2021-01-01": {
"AED": 3.6732,
"AFN": 77.571731,
"ALL": 101.322185,
"AMD": 522.909949,
"ANG": 1.794679,
"AOA": 654.159937,
"ARS": 85.115425,
"AUD": 1.29985,
"AWG": 1.8,
"AZN": 1.7025,
"BAM": 1.601236,
"BBD": 2,
"BDT": 84.632448,
"BGN": 1.601211,
"BHD": 0.377011,
"BIF": 1941.945201,
"BMD": 1,
"BND": 1.328012,
"BOB": 6.919071,
"BRL": 5.1934,
"BSD": 1,
"BTC": 0.000034,
"BTN": 73.428784,
"BWP": 10.802856,
"BYN": 2.612258,
"BZD": 2.015329,
"CAD": 1.273005,
"CDF": 1971.040189,
"CHF": 0.89,
"CLF": 0.025749,
"CLP": 710.499322,
"CNH": 6.50503,
"CNY": 6.532999,
"COP": 3461.474932,
"CRC": 610.275845,
"CUC": 0.999805,
"CUP": 25.749997,
"CVE": 90.549991,
"CZK": 21.470199,
"DJF": 178.902108,
"DKK": 6.0929,
"DOP": 58.17725,
"DZD": 132.070378,
"EGP": 15.842603,
"ERN": 15.001451,
"ETB": 39.551919,
"EUR": 0.8213,
"FJD": 2.0392,
"FKP": 0.731368,
"GBP": 0.731368,
"GEL": 3.284999,
"GGP": 0.731368,
"GHS": 5.899054,
"GIP": 0.731368,
"GMD": 51.754995,
"GNF": 10001.799669,
"GTQ": 7.793424,
"GYD": 209.171262,
"HKD": 7.753249,
"HNL": 24.201213,
"HRK": 6.179399,
"HTG": 72.620412,
"HUF": 296.919972,
"IDR": 14213.691127,
"ILS": 3.21302,
"IMP": 0.731368,
"INR": 73.092243,
"IQD": 1468.227675,
"IRR": 42104.995933,
"ISK": 127.809987,
"JEP": 0.731368,
"JMD": 142.971622,
"JOD": 0.709,
"JPY": 103.239971,
"KES": 109.73999,
"KGS": 83.169848,
"KHR": 4057.956903,
"KMF": 403.000178,
"KPW": 899.999913,
"KRW": 1085.729895,
"KWD": 0.304145,
"KYD": 0.833157,
"KZT": 421.359506,
"LAK": 9341.068686,
"LBP": 1519.510734,
"LKR": 186.166807,
"LRD": 164.233287,
"LSL": 14.681039,
"LYD": 1.344386,
"MAD": 8.927094,
"MDL": 17.269064,
"MGA": 3931.398367,
"MKD": 50.444142,
"MMK": 1334.572289,
"MNT": 2852.592985,
"MOP": 7.983465,
"MRO": 356.999966,
"MRU": 36.179997,
"MUR": 39.699571,
"MVR": 15.399999,
"MWK": 774.654882,
"MXN": 19.882198,
"MYR": 4.050499,
"MZN": 74.809993,
"NAD": 14.689999,
"NGN": 396.70047,
"NIO": 34.873725,
"NOK": 8.63301,
"NPR": 117.485764,
"NZD": 1.412085,
"OMR": 0.384976,
"PAB": 1,
"PEN": 3.637889,
"PGK": 3.539268,
"PHP": 48.338892,
"PKR": 160.992856,
"PLN": 3.753769,
"PYG": 6951.071768,
"QAR": 3.64125,
"RON": 3.983099,
"RSD": 96.249991,
"RUB": 73.944993,
"RWF": 990.813104,
"SAR": 3.751083,
"SBD": 8.002048,
"SCR": 21.204536,
"SDG": 55.224994,
"SEK": 8.269289,
"SGD": 1.321615,
"SHP": 0.731368,
"SLL": 10099.475354,
"SOS": 581.358293,
"SRD": 14.153999,
"SSP": 130.259987,
"STD": 20389.995485,
"STN": 20.324998,
"SVC": 8.748594,
"SYP": 513.419561,
"SZL": 14.677732,
"THB": 30.1953,
"TJS": 11.325198,
"TMT": 3.5,
"TND": 2.694499,
"TOP": 2.274086,
"TRY": 7.439199,
"TTD": 6.795284,
"TWD": 28.068998,
"TZS": 2318.536776,
"UAH": 28.475253,
"UGX": 3655.261967,
"USD": 1,
"UYU": 42.360888,
"UZS": 10474.794265,
"VEF": 248487.618237,
"VES": 1105425.195719,
"VND": 23344.598819,
"VUV": 109.239895,
"WST": 2.518034,
"XAF": 538.737432,
"XAG": 0.037901,
"XAU": 0.000526,
"XCD": 2.70255,
"XDR": 0.696046,
"XOF": 538.737432,
"XPD": 0.000407,
"XPF": 98.00715,
"XPT": 0.000932,
"YER": 250.408323,
"ZAR": 14.662594,
"ZMW": 21.165798,
"ZWL": 321.999969
},
"2021-01-02": {
"AED": 3.6732,
"AFN": 77.571727,
"ALL": 101.32218,
"AMD": 522.909923,
"ANG": 1.794679,
"AOA": 654.159904,
"ARS": 85.115422,
"AUD": 1.29985,
"AWG": 1.8,
"AZN": 1.702499,
"BAM": 1.601236,
"BBD": 2,
"BDT": 84.632443,
"BGN": 1.601211,
"BHD": 0.377011,
"BIF": 1941.945103,
"BMD": 1,
"BND": 1.328012,
"BOB": 6.91907,
"BRL": 5.193399,
"BSD": 1,
"BTC": 0.000031,
"BTN": 73.42878,
"BWP": 10.802856,
"BYN": 2.612258,
"BZD": 2.015328,
"CAD": 1.273005,
"CDF": 1971.040089,
"CHF": 0.890075,
"CLF": 0.025749,
"CLP": 710.499286,
"CNH": 6.505029,
"CNY": 6.532999,
"COP": 3461.474757,
"CRC": 610.275814,
"CUC": 0.999805,
"CUP": 25.749996,
"CVE": 90.549987,
"CZK": 21.470198,
"DJF": 178.902099,
"DKK": 6.092899,
"DOP": 58.177248,
"DZD": 132.070372,
"EGP": 15.842602,
"ERN": 15.001451,
"ETB": 39.551917,
"EUR": 0.824063,
"FJD": 2.0392,
"FKP": 0.731368,
"GBP": 0.731368,
"GEL": 3.285,
"GGP": 0.731368,
"GHS": 5.899053,
"GIP": 0.731368,
"GMD": 51.754992,
"GNF": 10001.799163,
"GTQ": 7.793424,
"GYD": 209.171252,
"HKD": 7.753248,
"HNL": 24.201211,
"HRK": 6.179399,
"HTG": 72.620409,
"HUF": 296.919956,
"IDR": 14213.690409,
"ILS": 3.213019,
"IMP": 0.731368,
"INR": 73.092239,
"IQD": 1468.227601,
"IRR": 42213.378965,
"ISK": 127.809981,
"JEP": 0.731368,
"JMD": 142.971616,
"JOD": 0.709,
"JPY": 103.239965,
"KES": 109.739984,
"KGS": 83.169843,
"KHR": 4057.956698,
"KMF": 403.000157,
"KPW": 899.999867,
"KRW": 1085.72984,
"KWD": 0.304144,
"KYD": 0.833157,
"KZT": 421.359485,
"LAK": 9341.068214,
"LBP": 1519.510657,
"LKR": 186.166798,
"LRD": 164.233279,
"LSL": 14.681038,
"LYD": 1.344386,
"MAD": 8.927094,
"MDL": 17.269063,
"MGA": 3931.398169,
"MKD": 50.444139,
"MMK": 1334.572222,
"MNT": 2854.185863,
"MOP": 7.983464,
"MRO": 356.999947,
"MRU": 36.179995,
"MUR": 39.699569,
"MVR": 15.399998,
"MWK": 774.654843,
"MXN": 19.882197,
"MYR": 4.050499,
"MZN": 74.809989,
"NAD": 14.689998,
"NGN": 396.700451,
"NIO": 34.873723,
"NOK": 8.633009,
"NPR": 117.485759,
"NZD": 1.412085,
"OMR": 0.384976,
"PAB": 1,
"PEN": 3.637889,
"PGK": 3.539267,
"PHP": 48.33889,
"PKR": 160.992848,
"PLN": 3.753769,
"PYG": 6951.071417,
"QAR": 3.641249,
"RON": 3.983099,
"RSD": 96.249986,
"RUB": 73.944989,
"RWF": 990.813054,
"SAR": 3.751083,
"SBD": 8.002047,
"SCR": 21.204534,
"SDG": 55.224992,
"SEK": 8.269289,
"SGD": 1.321615,
"SHP": 0.731368,
"SLL": 10099.474844,
"SOS": 581.358263,
"SRD": 14.153998,
"SSP": 130.259981,
"STD": 20389.994455,
"STN": 20.324997,
"SVC": 8.748593,
"SYP": 513.419529,
"SZL": 14.677731,
"THB": 30.170541,
"TJS": 11.325197,
"TMT": 3.499999,
"TND": 2.694499,
"TOP": 2.274086,
"TRY": 7.439199,
"TTD": 6.795283,
"TWD": 28.068996,
"TZS": 2318.536659,
"UAH": 28.475253,
"UGX": 3655.261782,
"USD": 1,
"UYU": 42.360886,
"UZS": 10474.793736,
"VEF": 248487.605682,
"VES": 1105425.139867,
"VND": 23344.597639,
"VUV": 108.952001,
"WST": 2.536797,
"XAF": 540.54965,
"XAG": 0.0379,
"XAU": 0.000527,
"XCD": 2.70255,
"XDR": 0.696046,
"XOF": 540.54965,
"XPD": 0.000407,
"XPF": 98.336829,
"XPT": 0.000932,
"YER": 250.408311,
"ZAR": 14.662593,
"ZMW": 21.165797,
"ZWL": 321.999953
},
"2021-01-03": {
"AED": 3.672958,
"AFN": 77.571721,
"ALL": 101.322173,
"AMD": 522.909882,
"ANG": 1.803922,
"AOA": 654.159853,
"ARS": 84.427008,
"AUD": 1.299453,
"AWG": 1.8,
"AZN": 1.702499,
"BAM": 1.601236,
"BBD": 1.999999,
"BDT": 85.068958,
"BGN": 1.601687,
"BHD": 0.37701,
"BIF": 1949.897093,
"BMD": 1,
"BND": 1.328011,
"BOB": 6.91907,
"BRL": 5.202339,
"BSD": 1,
"BTC": 0.00003,
"BTN": 73.428775,
"BWP": 10.858486,
"BYN": 2.625731,
"BZD": 2.025707,
"CAD": 1.27332,
"CDF": 1981.252451,
"CHF": 0.883964,
"CLF": 0.025749,
"CLP": 710.499647,
"CNH": 6.495958,
"CNY": 6.532998,
"COP": 3433.491377,
"CRC": 613.417924,
"CUC": 1.004953,
"CUP": 25.749994,
"CVE": 90.54998,
"CZK": 21.450257,
"DJF": 178.902086,
"DKK": 6.082472,
"DOP": 58.428083,
"DZD": 132.070361,
"EGP": 15.714463,
"ERN": 15.001303,
"ETB": 39.551914,
"EUR": 0.817388,
"FJD": 2.039199,
"FKP": 0.731935,
"GBP": 0.731935,
"GEL": 3.282305,
"GGP": 0.731935,
"GHS": 5.899053,
"GIP": 0.731935,
"GMD": 51.709988,
"GNF": 10044.592653,
"GTQ": 7.833557,
"GYD": 210.250012,
"HKD": 7.753029,
"HNL": 24.230212,
"HRK": 6.179632,
"HTG": 72.994379,
"HUF": 297.113433,
"IDR": 14097.083324,
"ILS": 3.211123,
"IMP": 0.731935,
"INR": 73.086997,
"IQD": 1468.227486,
"IRR": 42104.990514,
"ISK": 127.804406,
"JEP": 0.731935,
"JMD": 143.707826,
"JOD": 0.709,
"JPY": 103.218727,
"KES": 109.740281,
"KGS": 83.174138,
"KHR": 4057.956381,
"KMF": 403.000126,
"KPW": 899.999797,
"KRW": 1087.236331,
"KWD": 0.304144,
"KYD": 0.837447,
"KZT": 423.529359,
"LAK": 9341.067484,
"LBP": 1519.510538,
"LKR": 186.166783,
"LRD": 164.233266,
"LSL": 14.747634,
"LYD": 1.344385,
"MAD": 8.927093,
"MDL": 17.187434,
"MGA": 3885.698498,
"MKD": 50.444132,
"MMK": 1334.572118,
"MNT": 2854.537719,
"MOP": 8.024641,
"MRO": 356.99992,
"MRU": 36.680986,
"MUR": 39.69978,
"MVR": 15.399942,
"MWK": 774.654783,
"MXN": 19.908945,
"MYR": 4.022499,
"MZN": 74.809983,
"NAD": 14.689997,
"NGN": 388.950167,
"NIO": 35.022302,
"NOK": 8.555925,
"NPR": 117.485738,
"NZD": 1.390936,
"OMR": 0.384973,
"PAB": 1,
"PEN": 3.637888,
"PGK": 3.573784,
"PHP": 47.941593,
"PKR": 160.992836,
"PLN": 3.728814,
"PYG": 6951.070874,
"QAR": 3.659011,
"RON": 3.979019,
"RSD": 96.249979,
"RUB": 74.108816,
"RWF": 995.914372,
"SAR": 3.751574,
"SBD": 8.002048,
"SCR": 21.20444,
"SDG": 55.249988,
"SEK": 8.210508,
"SGD": 1.322359,
"SHP": 0.731935,
"SLL": 10099.473488,
"SOS": 581.358218,
"SRD": 14.153997,
"SSP": 130.25997,
"STD": 20389.992862,
"STN": 20.249996,
"SVC": 8.793645,
"SYP": 512.90949,
"SZL": 14.745094,
"THB": 29.950949,
"TJS": 11.383517,
"TMT": 3.5,
"TND": 2.692633,
"TOP": 2.276155,
"TRY": 7.442299,
"TTD": 6.795283,
"TWD": 28.068994,
"TZS": 2325.698449,
"UAH": 28.47525,
"UGX": 3674.072127,
"USD": 1,
"UYU": 42.365445,
"UZS": 10528.689812,
"VEF": 248487.586259,
"VES": 1071507.361322,
"VND": 23158.122057,
"VUV": 108.949903,
"WST": 2.536905,
"XAF": 536.171468,
"XAG": 0.037883,
"XAU": 0.000529,
"XCD": 2.702549,
"XDR": 0.696046,
"XOF": 536.171468,
"XPD": 0.000407,
"XPF": 97.54035,
"XPT": 0.000932,
"YER": 250.408291,
"ZAR": 14.665696,
"ZMW": 21.274791,
"ZWL": 321.999927
},
"2021-01-04": {
"AED": 3.673022,
"AFN": 77.402794,
"ALL": 100.7227,
"AMD": 523.32501,
"ANG": 1.794158,
"AOA": 568.193456,
"ARS": 84.69438,
"AUD": 1.304009,
"AWG": 1.799999,
"AZN": 1.700855,
"BAM": 1.590247,
"BBD": 1.999999,
"BDT": 84.766018,
"BGN": 1.595605,
"BHD": 0.376962,
"BIF": 1942.138558,
"BMD": 1,
"BND": 1.316594,
"BOB": 6.881834,
"BRL": 5.2972,
"BSD": 1,
"BTC": 0.000032,
"BTN": 72.988885,
"BWP": 10.753648,
"BZD": 2.01483,
"CAD": 1.278366,
"CDF": 1970.491149,
"CHF": 0.881139,
"CLF": 0.025524,
"CLP": 704.299659,
"CNH": 6.454759,
"CNY": 6.461598,
"COP": 3433.960225,
"CRC": 610.149913,
"CUP": 25.749994,
"CVE": 90.124979,
"CZK": 21.373278,
"DJF": 177.944175,
"DKK": 6.073148,
"DOP": 58.167738,
"DZD": 132.182626,
"EGP": 15.739597,
"ERN": 15.001317,
"ETB": 39.199991,
"EUR": 0.816286,
"FJD": 2.04083,
"FKP": 0.73662,
"GBP": 0.73662,
"GEL": 3.289999,
"GGP": 0.73662,
"GHS": 5.867319,
"GIP": 0.73662,
"GMD": 51.749988,
"GNF": 10157.770875,
"GTQ": 7.79149,
"GYD": 208.935662,
"HKD": 7.753559,
"HNL": 24.210776,
"HRK": 6.172698,
"HUF": 295.427369,
"IDR": 13938.696729,
"ILS": 3.208919,
"IMP": 0.73662,
"INR": 73.08543,
"IQD": 1459.324896,
"IRR": 42104.990121,
"ISK": 127.41997,
"JEP": 0.73662,
"JMD": 142.38656,
"JOD": 0.709,
"JPY": 103.125833,
"KES": 109.271435,
"KGS": 83.170067,
"KHR": 4047.141593,
"KMF": 402.224836,
"KPW": 899.999789,
"KRW": 1086.359745,
"KWD": 0.304084,
"KYD": 0.83292,
"KZT": 421.248703,
"LAK": 9286.867798,
"LBP": 1512.972283,
"LKR": 186.914005,
"LRD": 164.399998,
"LSL": 14.577761,
"LYD": 1.335632,
"MAD": 8.856096,
"MDL": 17.159654,
"MGA": 3905.033082,
"MKD": 50.097965,
"MMK": 1327.389656,
"MNT": 2852.300312,
"MOP": 7.981363,
"MRO": 356.999745,
"MRU": 36.708231,
"MUR": 39.400133,
"MVR": 15.409996,
"MWK": 773.095243,
"MXN": 19.96402,
"MYR": 4.006499,
"NAD": 14.599996,
"NGN": 386.114338,
"NIO": 34.930689,
"NOK": 8.553064,
"NPR": 116.7859,
"NZD": 1.394446,
"OMR": 0.38497,
"PAB": 1,
"PEN": 3.620222,
"PGK": 3.554689,
"PHP": 48.074989,
"PKR": 160.108784,
"PLN": 3.719672,
"PYG": 6913.672109,
"QAR": 3.640681,
"RON": 3.975499,
"RSD": 95.959978,
"RUB": 73.532982,
"RWF": 990.567777,
"SAR": 3.751654,
"SBD": 8.047134,
"SCR": 21.203825,
"SEK": 8.245331,
"SGD": 1.319785,
"SHP": 0.73662,
"SLL": 10099.473572,
"SOS": 580.362855,
"SSP": 130.259969,
"STD": 20389.992671,
"SVC": 8.745495,
"SYP": 512.842441,
"SZL": 14.583462,
"THB": 29.907493,
"TJS": 11.32231,
"TMT": 3.509999,
"TND": 2.686999,
"TOP": 2.273577,
"TRY": 7.424914,
"TTD": 6.758733,
"TWD": 28.087992,
"TZS": 2318.156067,
"UGX": 3678.259624,
"USD": 1,
"UYU": 42.338675,
"UZS": 10448.538676,
"VES": 1105425.293155,
"VND": 23158.121841,
"VUV": 109.238219,
"WST": 2.519178,
"XAF": 535.448439,
"XAG": 0.036715,
"XAU": 0.000515,
"XCD": 2.70255,
"XDR": 0.694005,
"XOF": 535.448439,
"XPD": 0.00042,
"XPF": 97.408816,
"XPT": 0.000922,
"YER": 250.349902,
"ZAR": 14.719061,
"ZWL": 321.999924
},
"2021-01-05": {
"AED": 3.673003,
"AFN": 77.469288,
"ALL": 100.72445,
"AMD": 522.310224,
"ANG": 1.797109,
"AOA": 655.515163,
"ARS": 84.795721,
"AUD": 1.289565,
"AWG": 1.8,
"AZN": 1.700805,
"BAM": 1.594176,
"BBD": 2.000001,
"BDT": 84.906274,
"BGN": 1.589526,
"BHD": 0.376998,
"BIF": 1944.01661,
"BMD": 1,
"BND": 1.320118,
"BOB": 6.893209,
"BRL": 5.286001,
"BSD": 1,
"BTC": 0.000029,
"BTN": 73.32012,
"BWP": 10.8944,
"BYN": 2.586767,
"BZD": 2.018079,
"CAD": 1.267445,
"CDF": 1972.077662,
"CHF": 0.878418,
"CLF": 0.02522,
"CLP": 695.901734,
"CNH": 6.437347,
"CNY": 6.456301,
"COP": 3445.727057,
"CRC": 612.824613,
"CUC": 1.004953,
"CUP": 25.750007,
"CVE": 90.350022,
"CZK": 21.26782,
"DJF": 178.198465,
"DKK": 6.049919,
"DOP": 58.243856,
"DZD": 132.240551,
"EGP": 15.696904,
"ERN": 15.001256,
"ETB": 39.273555,
"EUR": 0.813219,
"FJD": 2.027201,
"FKP": 0.734071,
"GBP": 0.734071,
"GEL": 3.300001,
"GGP": 0.734071,
"GHS": 5.868208,
"GIP": 0.734071,
"GMD": 51.700012,
"GNF": 10249.613285,
"GTQ": 7.804315,
"GYD": 209.36383,
"HKD": 7.753242,
"HNL": 24.234549,
"HRK": 6.149301,
"HTG": 72.349755,
"HUF": 292.326041,
"IDR": 13905.947451,
"ILS": 3.203771,
"IMP": 0.734071,
"INR": 73.14176,
"IQD": 1461.64241,
"IRR": 42105.01045,
"ISK": 126.940032,
"JEP": 0.734071,
"JMD": 142.009716,
"JOD": 0.709,
"JPY": 102.717609,
"KES": 109.478409,
"KGS": 83.204799,
"KHR": 4054.892183,
"KMF": 401.150199,
"KPW": 900.000224,
"KRW": 1087.205072,
"KWD": 0.303558,
"KYD": 0.834325,
"KZT": 422.04506,
"LAK": 9301.237802,
"LBP": 1513.732374,
"LKR": 188.725126,
"LRD": 165.150014,
"LSL": 14.808895,
"LYD": 3.512199,
"MAD": 8.827908,
"MDL": 17.182079,
"MGA": 3887.809953,
"MKD": 50.221718,
"MMK": 1322.077144,
"MNT": 2853.865486,
"MOP": 7.994965,
"MRO": 356.999916,
"MRU": 36.488018,
"MUR": 39.400007,
"MVR": 15.400005,
"MWK": 771.275517,
"MXN": 19.880005,
"MYR": 4.017501,
"MZN": 74.960011,
"NAD": 15.010003,
"NGN": 388.310055,
"NIO": 34.906917,
"NOK": 8.467137,
"NPR": 117.312525,
"NZD": 1.379292,
"OMR": 0.384938,
"PAB": 1,
"PEN": 3.629253,
"PGK": 3.520239,
"PHP": 48.120012,
"PKR": 160.667083,
"PLN": 3.688605,
"PYG": 6926.448977,
"QAR": 3.641001,
"RON": 3.961601,
"RSD": 95.615024,
"RUB": 74.170118,
"RWF": 983.334645,
"SAR": 3.75071,
"SBD": 8.016039,
"SCR": 21.203698,
"SDG": 55.300014,
"SEK": 8.182468,
"SGD": 1.31763,
"SHP": 0.734071,
"SLL": 10106.227122,
"SOS": 579.920898,
"SRD": 14.154003,
"SSP": 130.260032,
"STD": 20390.002515,
"STN": 20.100005,
"SVC": 8.760578,
"SYP": 512.85118,
"SZL": 14.94931,
"THB": 29.935508,
"TJS": 11.341069,
"TMT": 3.500001,
"TND": 2.680501,
"TOP": 2.27513,
"TRY": 7.39133,
"TTD": 6.801675,
"TWD": 27.967006,
"TZS": 2321.769158,
"UAH": 28.339005,
"UGX": 3699.427573,
"USD": 1,
"UYU": 42.30654,
"UZS": 10463.052108,
"VES": 1112243.83159,
"VND": 23064.716159,
"VUV": 108.911804,
"WST": 2.525273,
"XAF": 533.436721,
"XAG": 0.036278,
"XAU": 0.000513,
"XCD": 2.70255,
"XDR": 0.693463,
"XOF": 533.436721,
"XPD": 0.000405,
"XPF": 97.042844,
"XPT": 0.000896,
"YER": 250.425034,
"ZAR": 14.988084,
"ZMW": 21.212776,
"ZWL": 322.00008
}
}
}
},
"success": true
}
Convert currency to another
POST https://fx.tranzak.me/v1/rates/convert
Request Body Parameters
| Parameter | Type | required | Description |
|---|---|---|---|
| from | String | true | eg: USD |
| to | String | true | eg: CNY |
| amount | Number | true | eg: 1 |
Response
| Parameter | Type | Description |
|---|---|---|
| result | Number | conversion result |
| rate | Number | conversion rate |
{
"data": {
"result": 6.3705,
"rate": 6.3705
},
"success": true
}
Get currencies
https Request
POST https://fx.tranzak.me/v1/rates/currencies
Request Body Parameters
None
Response
{
"data": {
"currencies": {
"AED": "United Arab Emirates Dirham",
"AFN": "Afghan Afghani",
"ALL": "Albanian Lek",
"AMD": "Armenian Dram",
"ANG": "Netherlands Antillean Guilder",
"AOA": "Angolan Kwanza",
"ARS": "Argentine Peso",
"AUD": "Australian Dollar",
"AWG": "Aruban Florin",
"AZN": "Azerbaijani Manat",
"BAM": "Bosnia-Herzegovina Convertible Mark",
"BBD": "Barbadian Dollar",
"BDT": "Bangladeshi Taka",
"BGN": "Bulgarian Lev",
"BHD": "Bahraini Dinar",
"BIF": "Burundian Franc",
"BMD": "Bermudan Dollar",
"BND": "Brunei Dollar",
"BOB": "Bolivian Boliviano",
"BRL": "Brazilian Real",
"BSD": "Bahamian Dollar",
"BTC": "Bitcoin",
"BTN": "Bhutanese Ngultrum",
"BWP": "Botswanan Pula",
"BYN": "Belarusian Ruble",
"BZD": "Belize Dollar",
"CAD": "Canadian Dollar",
"CDF": "Congolese Franc",
"CHF": "Swiss Franc",
"CLF": "Chilean Unit of Account (UF)",
"CLP": "Chilean Peso",
"CNH": "Chinese Yuan (Offshore)",
"CNY": "Chinese Yuan",
"COP": "Colombian Peso",
"CRC": "Costa Rican Colón",
"CUC": "Cuban Convertible Peso",
"CUP": "Cuban Peso",
"CVE": "Cape Verdean Escudo",
"CZK": "Czech Republic Koruna",
"DJF": "Djiboutian Franc",
"DKK": "Danish Krone",
"DOP": "Dominican Peso",
"DZD": "Algerian Dinar",
"EGP": "Egyptian Pound",
"ERN": "Eritrean Nakfa",
"ETB": "Ethiopian Birr",
"EUR": "Euro",
"FJD": "Fijian Dollar",
"FKP": "Falkland Islands Pound",
"GBP": "British Pound Sterling",
"GEL": "Georgian Lari",
"GGP": "Guernsey Pound",
"GHS": "Ghanaian Cedi",
"GIP": "Gibraltar Pound",
"GMD": "Gambian Dalasi",
"GNF": "Guinean Franc",
"GTQ": "Guatemalan Quetzal",
"GYD": "Guyanaese Dollar",
"HKD": "Hong Kong Dollar",
"HNL": "Honduran Lempira",
"HRK": "Croatian Kuna",
"HTG": "Haitian Gourde",
"HUF": "Hungarian Forint",
"IDR": "Indonesian Rupiah",
"ILS": "Israeli New Sheqel",
"IMP": "Manx pound",
"INR": "Indian Rupee",
"IQD": "Iraqi Dinar",
"IRR": "Iranian Rial",
"ISK": "Icelandic Króna",
"JEP": "Jersey Pound",
"JMD": "Jamaican Dollar",
"JOD": "Jordanian Dinar",
"JPY": "Japanese Yen",
"KES": "Kenyan Shilling",
"KGS": "Kyrgystani Som",
"KHR": "Cambodian Riel",
"KMF": "Comorian Franc",
"KPW": "North Korean Won",
"KRW": "South Korean Won",
"KWD": "Kuwaiti Dinar",
"KYD": "Cayman Islands Dollar",
"KZT": "Kazakhstani Tenge",
"LAK": "Laotian Kip",
"LBP": "Lebanese Pound",
"LKR": "Sri Lankan Rupee",
"LRD": "Liberian Dollar",
"LSL": "Lesotho Loti",
"LYD": "Libyan Dinar",
"MAD": "Moroccan Dirham",
"MDL": "Moldovan Leu",
"MGA": "Malagasy Ariary",
"MKD": "Macedonian Denar",
"MMK": "Myanma Kyat",
"MNT": "Mongolian Tugrik",
"MOP": "Macanese Pataca",
"MRU": "Mauritanian Ouguiya",
"MUR": "Mauritian Rupee",
"MVR": "Maldivian Rufiyaa",
"MWK": "Malawian Kwacha",
"MXN": "Mexican Peso",
"MYR": "Malaysian Ringgit",
"MZN": "Mozambican Metical",
"NAD": "Namibian Dollar",
"NGN": "Nigerian Naira",
"NIO": "Nicaraguan Córdoba",
"NOK": "Norwegian Krone",
"NPR": "Nepalese Rupee",
"NZD": "New Zealand Dollar",
"OMR": "Omani Rial",
"PAB": "Panamanian Balboa",
"PEN": "Peruvian Nuevo Sol",
"PGK": "Papua New Guinean Kina",
"PHP": "Philippine Peso",
"PKR": "Pakistani Rupee",
"PLN": "Polish Zloty",
"PYG": "Paraguayan Guarani",
"QAR": "Qatari Rial",
"RON": "Romanian Leu",
"RSD": "Serbian Dinar",
"RUB": "Russian Ruble",
"RWF": "Rwandan Franc",
"SAR": "Saudi Riyal",
"SBD": "Solomon Islands Dollar",
"SCR": "Seychellois Rupee",
"SDG": "Sudanese Pound",
"SEK": "Swedish Krona",
"SGD": "Singapore Dollar",
"SHP": "Saint Helena Pound",
"SLL": "Sierra Leonean Leone",
"SOS": "Somali Shilling",
"SRD": "Surinamese Dollar",
"SSP": "South Sudanese Pound",
"STD": "São Tomé and Príncipe Dobra (pre-2018)",
"STN": "São Tomé and Príncipe Dobra",
"SVC": "Salvadoran Colón",
"SYP": "Syrian Pound",
"SZL": "Swazi Lilangeni",
"THB": "Thai Baht",
"TJS": "Tajikistani Somoni",
"TMT": "Turkmenistani Manat",
"TND": "Tunisian Dinar",
"TOP": "Tongan Pa'anga",
"TRY": "Turkish Lira",
"TTD": "Trinidad and Tobago Dollar",
"TWD": "New Taiwan Dollar",
"TZS": "Tanzanian Shilling",
"UAH": "Ukrainian Hryvnia",
"UGX": "Ugandan Shilling",
"USD": "United States Dollar",
"UYU": "Uruguayan Peso",
"UZS": "Uzbekistan Som",
"VEF": "Venezuelan Bolívar Fuerte (Old)",
"VES": "Venezuelan Bolívar Soberano",
"VND": "Vietnamese Dong",
"VUV": "Vanuatu Vatu",
"WST": "Samoan Tala",
"XAF": "CFA Franc BEAC",
"XAG": "Silver Ounce",
"XAU": "Gold Ounce",
"XCD": "East Caribbean Dollar",
"XDR": "Special Drawing Rights",
"XOF": "CFA Franc BCEAO",
"XPD": "Palladium Ounce",
"XPF": "CFP Franc",
"XPT": "Platinum Ounce",
"YER": "Yemeni Rial",
"ZAR": "South African Rand",
"ZMW": "Zambian Kwacha",
"ZWL": "Zimbabwean Dollar"
}
},
"success": true
}
git
Summary
Git is a free and open source distributed version control system that's responsible for everything that happens locally remotely on your computer or remotely on your server.
This cheat sheet features the most important and commonly used Git commands for easy reference.
SETUP
Configuring user information used across all local repositories.
> git config --global user.name “[firstname lastname]”
## set a name that is identifiable for credit when review version history> git config --global user.email “[valid-email]”
## set an email address that will be associated with each history marker> git config --global credential.helper cache
## cache your login credentials in Git.> git config -l
## list all git current configuration.> git config --global color.ui auto
## set automatic command line coloring for Git for easy reviewing
SETUP & INIT
> git init
## initialize an existing directory as a Git repository> git clone [url]
## retrieve an entire repository from a hosted location via URL
STAGE & SNAPSHOT
Working with snapshots and the Git staging area.
> git status
## show modified files in working directory, staged for your next commit> git add [file]
## add a file as it looks now to your next commit (stage)> git diff
## diff of what is changed but not staged.> git diff --staged
## didiff of what is staged but not yet commited.> git commit -m “[descriptive message]”
## commit your staged content as a new commit snapshot.
BRANCH & MERGE
Isolating work in branches, changing context, and integrating changes.
> git branch
## list your branches. a * will appear next to the currently active branch.> git branch [branch-name]
## create a new branch at the current commit.> git checkout
## switch to another branch and check it out into your working directory.> git merge [branch]
## merge the specified branch’s history into the current one.> git log
## show all commits in the current branch’s history.
INSPECT & COMPARE
Examining logs, diffs and object information.
> git log
## show the commit history for the currently active branch.> git log branchB..branchA
## show the commits on branchA that are not on branchB.> git log --follow [file]
## show the commits that changed file, even across renames.> git diff branchB...branchA
## show the diff of what is in branchA that is not in branchB.> git show [SHA]
## show any object in Git in human-readable format.
SHARE & UPDATE
Retrieving updates from another repository and updating local repos.
> git remote add [alias] [url]
## add a git URL as an alias.> git fetch [alias]
## fetch down all the branches from that Git remote.> git merge [alias]/[branch]
## merge a remote branch into your current branch to bring it up to date.> git push [alias] [branch]
## Transmit local branch commits to the remote repository branche.> git pull
## fetch and merge any commits from the tracking remote branch.
REWRITE HISTORY
Rewriting branches, updating commits and clearing history.
> git rebase [branch]
## apply any commits of current branch ahead of specified one.> git reset --hard [commit]
## clear staging area, rewrite working tree from specified commit.
TEMPORARY COMMITS
Temporarily store modified, tracked files in order to change branches.
> git stash
## Save modified and staged changes.> git stash list
## list stack-order of stashed file changes.> git stash pop
## write working from top of stash stack.> git stash drop
## discard the changes from top of stash stack.
TRACKING PATH CHANGES
Versioning file removes and path changes.
> git rm [file]
## delete the file from project and stage the removal for commit.> git mv [existing-path] [new-path]
## change an existing file path and stage the move.> git log --stat -M
## show all commit logs with indication of any paths that moved.
TRACKING PATH CHANGES
Preventing unintentional staging or commiting of files.
logs/
*.notes
pattern*/
## Save a file with desired paterns as .gitignore with either direct string matches or wildcard globs.> git config --global core.excludesfile [file]
## system wide ignore patern for all local repositories.
Summary
The following section presents some conventions to respect when committing on different projects.
These will facilitate the understanding of each commit and the traceability when necessary.
1. Commit messages conventions
1.1. Goals
Generally, commit messages conventions has many advantages. But herein and for now, we just retain three main goals for our conventions :
- Allow generating CHANGELOG.md by script.
- Allow ignoring commits by git bisect (not important commits like formatting).
- Provide better information when browsing the history.
1.1.1. Generating CHANGELOG.md
We could use these three sections in changelog: new features, bug fixes, breaking changes. This list could be generated by script when doing a release. Along with links to related commits. Of course you can edit this change log before actual release, but it could generate the skeleton.
List of all subjects (first lines in commit message) since last release:
> git log <last tag> HEAD --pretty=format:%s
New features in this release
> git log <last release> HEAD --grep feature1.1.2. Recognizing unimportant commits
These are formatting changes (adding/removing spaces/empty lines, indentation), missing semi colons, comments. So when you are looking for some change, you can ignore these commits - no logic change inside this commit.
When bisecting, you can ignore these by:
> git bisect skip $(git rev-list --grep irrelevant <good place> HEAD)1.1.3. Provide more information when browsing the history
This would add kinda “context” information. Look at these messages :
- Fix small typo in docs widget (tutorial instructions)
- Fix test for scenario.Application - should remove old iframe
- docs - various doc fixes
- docs - stripping extra new lines
- Replaced double line break with single when text is fetched - from Google
- Added support for properties in documentation
All of these messages try to specify where is the change. But they don’t share any convention...
Now, look at these messages:
- fix comment stripping
- fixing broken links
- Bit of refactoring
- Check whether links do exist and throw exception
- Fix sitemap include (to work on case sensitive linux)
Are you able to guess what’s inside ? These messages miss place specification... So maybe something like parts of the code: docs, docs-parser, compiler, scenario-runner, …
Of course, you can find this information by checking which files had been changed, but that’s slow. And when looking in git history I can see all of us tries to specify the place, only missing the convention.
1.2. Format of the commit message
<type>(<scope>): <subject>
<!-- <BLANK LINE> -->
<body>
<!-- <BLANK LINE> -->
<footer>
Note : Any line of the commit message cannot be longer 100 characters! This allows the message to be easier to read on gitlab as well as in various git tools.
A commit message consists of a header, a body and a footer, each separated by a blank line.
1.2.1. Message header
The message header is a single line that contains succinct description of the change containing a type, an optional scope and a subject.
1.2.1.1. Allowed <type>
This describes the kind of change that this commit is providing.
- ci : Changes to our CI configuration files and scripts (docker files, ...)
- build : Changes that affect the build system or external dependencies (gulp, npm, ...)
- feat : A new feature
- fix : A bug fix
- docs : Documentation only changes
- refactor : A code change that neither fixes a bug nor adds a feature
- test : Adding missing tests or correcting existing tests
- perf : perf: A code change that improves performance
- style : Anything that doesn't affect the code but always its visual styles (formatting, missing semi colons, …)
- chore (maintain)
1.2.1.2. Allowed <scope>
Scope can be anything specifying place of the commit change. It can be a module or a specific folder, if the project is organized in that way. For example in trec, we can list chat, notifications, invoice as modules. Therefore, they define some valid scopes.
In case some module/folders exists many times but nested in different modules/folders, just use a double semi-column to specify the module from the parent to the child.
Look at the image above. If your work only affect the child-module in products module, your scope will then be products::child-module.
Additionnaly, You can use * if there isn't a more fitting scope.
1.2.1.3. <subject> text
This is a very short description of the change.
- Use imperative, present tense: “change” not “changed” nor “changes”
- Don't capitalize first letter
- No dot (.) at the end
1.2.2. Message body
Explain the motivation for the change in the commit message body. This commit message should explain why you are making the change. You can include a comparison of the previous behavior with the new behavior in order to illustrate the impact of the change.
Just as in <subject> use imperative, present tense: “change” not “changed” nor “changes”
Resources :
1.2.3. Message footer
1.2.3.1. Referencing issues
Closed bugs should be listed on a separate line in the footer prefixed with "Closes" keyword like this:
Closes #234
or in case of multiple issues:
Closes #123, #245, #992
1.2.3.2. Breaking changes
All breaking changes have to be mentioned as a breaking change block in the footer, which should start with the word BREAKING CHANGE: with a space or two newlines. The rest of the commit message is then the description of the change, justification and migration notes.
The following code shows an expanded breaking change description.
BREAKING CHANGE: isolate scope bindings definition has changed and
the inject option for the directive controller injection was removed.
To migrate the code follow the example below:
Before:
scope: {
myAttr: 'attribute',
myBind: 'bind',
myExpression: 'expression',
myEval: 'evaluate',
myAccessor: 'accessor'
}
After:
scope: {
myAttr: '@',
myBind: '@',
myExpression: '&',
// myEval - usually not useful, but in cases where the expression is assignable, you can use '='
myAccessor: '=' // in directive's template change myAccessor() to myAccessor
}
The removed `inject` wasn't generaly useful for directives so there should be no code using it.1.2.3.3. Depreciated
Similarly, a Deprecation section should start with "DEPRECATED: " followed by a short description of what is deprecated, a blank line, and a detailed description of the deprecation that also mentions the recommended update path.
DEPRECATED: <what is deprecated>
<!-- <BLANK LINE> -->
<deprecation description + recommended update path>
<!-- <BLANK LINE> -->
<!-- <BLANK LINE> -->
Closes #<pr number>1.2.4. Revert a commit
If the commit reverts a previous commit, its header should begin with revert: , followed by the header of the reverted commit. In the body it should say: This reverts commit <hash>., where the hash is the SHA of the commit being reverted.
1.3. Examples
1. New feature on module $browser breaks another one.
feat($browser): onUrlChange event (popstate/hashchange/polling)
Added new event to $browser:
- forward popstate event if available
- forward hashchange event if popstate not available
- do polling when neither popstate nor hashchange available
Breaks $browser.onHashChange, which was removed (use onUrlChange instead)
2. Bug fix on module $compile breaks some others and closes an issue.
fix($compile): couple of unit tests for IE9
Older IEs serialize html uppercased, but IE9 does not...
Would be better to expect case insensitive, unfortunately jasmine does
not allow to user regexps for throw expectations.
Closes #392
Breaks foo.bar api, foo.baz should be used instead
3. Beautifying code
style($location): add couple of missing semi colons
4. Documentation
docs(guide): update fixed docs from Google Docs
Couple of typos fixed:
- indentation
- batchLogbatchLog -> batchLog
- start periodic checking
- missing brace
5. New feature with full described breaking change
feat($compile): simplify isolate scope bindings
Changed the isolate scope binding options to:
- @attr - attribute binding (including interpolation)
- =model - by-directional model binding
- &expr - expression execution binding
This change simplifies the terminology as well as
number of choices available to the developer. It
also supports local name aliasing from the parent.
BREAKING CHANGE: isolate scope bindings definition has changed and
the inject option for the directive controller injection was removed.
To migrate the code follow the example below:
Before:
scope: {
myAttr: 'attribute',
myBind: 'bind',
myExpression: 'expression',
myEval: 'evaluate',
myAccessor: 'accessor'
}
After:
scope: {
myAttr: '@',
myBind: '@',
myExpression: '&',
// myEval - usually not useful, but in cases where the expression is assignable, you can use '='
myAccessor: '=' // in directive's template change myAccessor() to myAccessor
}
The removed `inject` wasn't generaly useful for directives so there should be no code using it.
Coding style conventions
See Google JavaScript Style Guide
infra
Common API PATH Convention
Intro
- All API requests will be made through the same domain, and will be routed based on the uri prefix(service type code)
- The URI prefix of our APIs will based on an internal code,hence not exposing the service name(or business line's name)。if you need a new URI prefix, please send an email to rolland.ntague@tranzak.net to request one.
API Convention
| environment | domain |
|---|---|
| production | api.tranzak.me |
| staging | staging-api.tranzak.me |
| dev | dev-api.tranzak.me |
Prefix allocation
Naming convention:service type code+(random value+1-digit index number)
Service Type/Module Code
| Service Type | api prefix |
|---|---|
| main | aa |
| user | ba |
| users behavior | bb |
| monitoring | be |
| chat | af |
| education | ji |
| orders | da |
| ecomm | mg |
| file management | cb |
| product | da |
| notification | co |
| activities | ea |
| payment | tz |
routing table: available services
| service type | module/service | api prefix | maintainer | remark |
|---|---|---|---|---|
| main aa | mini apps, App | /aa038 | Rolland | APP's main API prefix |
| user ba | user-center | /ba021 | Rolland | |
| user-api | /ba038 | Rolland | ||
| chat | chat service | /af028 | Rolland | |
| edu | edu mp backend | /ji036 | Rolland | |
| file management | fms | /cb068 | Rolland | port 3003 |
| notification | notification service | /co018 | Rolland | |
| monitoring | tracing service | /be139 | Rolland | |
| ecomm | Trec | /mg210 | Rolland | |
| payment | cortex merchant APIs | /mapi | Rolland | external use, exposed to third party |
| payment | cortex APIs | /fapi | Rolland | internal only |
| payment | merchant solutions | /tz988 | Rolland | |
| Yannick shopping | /mg211 | Rolland | Appartments |
| forwarding aliases | service name |
|---|
userCenter
Role Based Access Control
The section is for all access control related API, such creating users and assigning them a role. Then managing those using.
CREATE NEW STAFF USER API
https Request
POST https://staging-api.tranzak.me/ba021/v1/merchant/new
Request Body Parameters
| Parameter | Type | required | Description |
|---|---|---|---|
| firstName | String | true | first name |
| lastName | String | true | last name |
| phone | String | true | phone eg: +237672998876 |
| role | Number | true | 100: 'Non Staff', 105: "Other Staff", 110: "IT/ Developer", 115: "Auditor", 120: "Support" , 125: "Analyst",130: "Manager", 1000: 'Super Admin/ Owner' |
| orgId | String | true | Organization Id. That's the orgId of the person creating this user. |
| avatar | String | false | profile picture |
| remark | String | false | remark from the user creating |
| String | false | user email | |
| sex | number | false | user gender 0 unknown(user didn't choose), 1 male , 2 female, 3 other |
| address | String | false | user address |
Response
{
"data": {
"user": {
"sex": 0,
"role": 130,
"firstName": "Ansel",
"lastName": "Ayuk",
"orgId": "345666",
"phone": "+237678727139",
"openId": "a4533f96f8fd4cb1936319e9fb1d622b345666",
"ufID": "z758twy8g8ywg3",
"userId": "a4533f96f8fd4cb1936319e9fb1d622b"
}
},
"success": true
}
GET LIST OF STAFF API(Including Search)
https Request
POST https://staging-api.tranzak.me/ba021/v1/merchant/list
Request Body Parameters
| Parameter | Type | required | Description |
|---|---|---|---|
| pageNum | Number | false | current page, default 1, starts from 1 |
| pageSize | Number | false | page size, default 10 |
| searchParams | Object | false | an object containing one or more key:value pair or the fields to search. Almost every field on the user object is searchable. Note: for date range search: startDate and endDate are both quired |
Example body params:
// Example get list(search) request body params:
{
"pageNum":1,
"pageSize":10,
"searchParams": {
"startDate":"2021-10-11",
"endDate":"2021-10-15",
"firstName":"Ansel",
"status": 1
}
}
Response
//sample list response (with pagination info)
{
"data": {
"list": [
{
"sex": 0,
"role": 110,
"firstName": "Test3",
"lastName": "Test3",
"orgId": "6efccb9633964441a03914fb48f63e30",
"phone": "+237678722149",
"openId": "561f21c43bcd409c83d53ae667c200516efccb9633964441a03914fb48f63e30",
"ufID": "yq0j2nfqflq02g",
"userId": "561f21c43bcd409c83d53ae667c20051"
},
{
"sex": 0,
"role": 110,
"firstName": "Test2",
"lastName": "Test2",
"orgId": "6efccb9633964441a03914fb48f63e30",
"phone": "+237678723149",
"openId": "de91d5bdd7964b978ca8f7d6d5d10de46efccb9633964441a03914fb48f63e30",
"ufID": "5kgze1swkuk2sf",
"userId": "de91d5bdd7964b978ca8f7d6d5d10de4"
},
{
"sex": 0,
"role": 130,
"firstName": "Test",
"lastName": "Test User Updated",
"orgId": "6efccb9633964441a03914fb48f63e30",
"phone": "+237678727149",
"openId": "5faf22dc38604df0ae47254703ea217e6efccb9633964441a03914fb48f63e30",
"ufID": "c5lyby31ss2aju",
"userId": "5faf22dc38604df0ae47254703ea217e"
}
],
"total": 3,
"totalPages": 1,
"hasMore": false
},
"success": true
}
UPDATE STAFF USER API
https Request
PUT https://staging-api.tranzak.me/ba021/v1/merchant/user
Request Body Parameters
| Parameter | Type | required | Description |
|---|---|---|---|
| userId | String | true | userId of the user being edited |
any other field |
N/A | false | or or more fields to update |
Response
{
"data": {
"user": {
"sex": 0,
"role": 130,
"firstName": "Test",
"lastName": "Test User Updated",
"orgId": "6efccb9633964441a03914fb48f63e30",
"phone": "+237678727149",
"openId": "5faf22dc38604df0ae47254703ea217e6efccb9633964441a03914fb48f63e30",
"ufID": "c5lyby31ss2aju",
"userId": "5faf22dc38604df0ae47254703ea217e"
}
},
"success": true
}
DELETE STAFF USER API
https Request
POST https://staging-api.tranzak.me/ba021/v1/merchant/delete/:userId
eg: POST https://staging-api.tranzak.me/ba021/v1/merchant/delete/5faf22dc38604df0ae47254703ea217e
Request Body Parameters
None
Request URL Parameters
| Parameter | Type | required | Description |
|---|---|---|---|
| userId | String | true | userId of the user being deleted |
Response
{
"data": {
"deleted": true
},
"success": true
}
ORG/MERCHANT AUTHENTICATION
User login using JWT token
Org/Merchant user
POST https://staging-api.tranzak.me/ba021/v1/org/login
Request Header Parameters
| Parameter | Type | required | Description |
|---|---|---|---|
| x-platform-id | String | true | eg: 9rem6jwjc3a5 |
Request Body Parameters
| Parameter | Type | required | Description |
|---|---|---|---|
| String | true | ||
| password | String | true | password |
| phone | String | true | phone eg: +237672998876 |
Response
{
"data": {
"user": {
"userId": "743fbb81a7d4490f8b22f026c7c769ab",
"firstName": "Rolland Cortex",
"lastName": "Admin",
"ufId": "o5knwhsvtlejxr",
"userType": 2,
"role": 1000,
"orgId": "fpq0lbb0qqy6z8",
"scopeId": "9rem6jwjc3a5",
"phone": "+237691115489"
},
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOiI3NDNmYmI4MWE3ZDQ0OTBmOGIyMmYwMjZjN2M3NjlhYiIsImZpcnN0TmFtZSI6IlJvbGxhbmQgQ29ydGV4IiwibGFzdE5hbWUiOiJBZG1pbiIsInVmSWQiOiJvNWtud2hzdnRsZWp4ciIsInVzZXJUeXBlIjoyLCJyb2xlIjoxMDAwLCJvcmdJZCI6ImZwcTBsYmIwcXF5Nno4Iiwic2NvcGVJZCI6IjlyZW02andqYzNhNSIsInBob25lIjoiKzIzNzY5MTExNTQ4OSIsImlhdCI6MTY0NzI4MzQ5OSwiZXhwIjoxNjQ5MzU3MDk5fQ.jtZer_L4_fFzPVZQfvA6tcUmoguWVCD2NpWdsYmZjeY"
},
"success": true
}
ORG/Edit profile
The user can edit displayName,firstName,lastName,sex,dob,avatar,role,address, password
PUT https://staging-api.tranzak.me/ba021/v1/org/user
Request Body Parameters
| Parameter | Type | required | Description |
|---|---|---|---|
| userId | String | true | Id of the user we want to edit |
| displayName | String | false | |
| firstName | String | false | firstName |
| lastName | String | false | lastName |
| address | String | false | address |
| avatar | String | false | avatar |
| sex | Number | false | 0 unknown, 1 male , 2 female, 3 other |
| role | String | false | role, can only be changed by user with role admin |
| phone | String | false | phone eg: +237672998876 |
| dob | String | false | date of birth eg: 2020-03-19 |
Response
{
"data": {},
"success": true
}
Reset password
POST https://staging-api.tranzak.me/ba021/v1/org/reset-password
Request Body Parameters
| Parameter | Type | required | Description |
|---|---|---|---|
| oldPassword | String | true | oldPassword |
| newPassword | String | true | newPassword |
Response
{
"data": {
"completed": true
},
"success": true
}
Reset Payment Pin
POST https://staging-api.tranzak.me/ba021/v1/org/payment/reset-pin
Request Body Parameters
| Parameter | Type | required | Description |
|---|---|---|---|
| oldPin | String | true | old pin |
| newPin | String | true | new pin |
Response
{
"data": {
"completed": true
},
"success": true
}
Set Payment Pin
POST https://staging-api.tranzak.me/ba021/v1/org/payment/set-pin
Request Body Parameters
| Parameter | Type | required | Description |
|---|---|---|---|
| pin | String | true | user's pin |
Response
{
"data": {
"completed": true
},
"success": true
}
Service Token Auth
https Request
POST https://staging-api.tranzak.me/ba021/v1/services/userInfo
Request Body Parameters
None
Header Parameters
| Parameter | Type | required | Description |
|---|---|---|---|
| Authorization | String | true | user' Bearer token, as sent from the front-end (eg: Bearer <userToken>) |
Response
| Parameter | Type | Description |
|---|---|---|
| ufID | String | User friendly Id(unique) |
| userId | String | User Mongo Id (unique) |
| phone | String | User phone |
| firstName | String | First Name |
| lastName | String | Last Name |
| role | Int | user role |
{
"data": {
"userInfo": {
"userId": "38b73cb0e50d4872805fe82e0b171f55",
"firstName": "",
"lastName": "",
"ufId": "4szmwnjwt7mwm0",
"role": 101,
"phone": "+237692098168"
}
},
"success": true
}
// will be called by other services to check token validity
validateToken: async (req, res, next) => {
try {
const userServiceResp = await new Request(req).post(config.serviceUrls.user.checkToken, {});
if (userServiceResp && userServiceResp.userInfo && userServiceResp.userInfo.userId) {
req.ufId = userServiceResp.userInfo.ufId;
req.userId = userServiceResp.userInfo.userId;
return next();
} else {
console.log('====Invalid token------');
return APIResponse.failResponse(res, "Invalid token", 40001);
}
} catch (error) {
console.log('decode error----|||||||---', error);
throw error;
}
}
Service Org Token Auth/For merchant BO and Sanaga
https Request
POST https://staging-api.tranzak.me/ba021/v1/services/org/userInfo
Request Body Parameters
None
Header Parameters
| Parameter | Type | required | Description |
|---|---|---|---|
| Authorization | String | true | user' Bearer token, as sent from the front-end (eg: Bearer <userToken>) |
Response
| Parameter | Type | Description |
|---|---|---|
| ufID | String | User friendly Id(unique) |
| userId | String | User Mongo Id (unique) |
| phone | String | User phone |
| firstName | String | First Name |
| lastName | String | Last Name |
| role | Int | user role |
{
"data": {
"userInfo": {
"userId": "38b73cb0e50d4872805fe82e0b171f55",
"firstName": "",
"lastName": "",
"ufId": "4szmwnjwt7mwm0",
"role": 101,
"phone": "+237692098168"
}
},
"success": true
}
// will be called by other services to check token validity
validateToken: async (req, res, next) => {
try {
const userServiceResp = await new Request(req).post(config.serviceUrls.user.checkToken, {});
if (userServiceResp && userServiceResp.userInfo && userServiceResp.userInfo.userId) {
req.ufId = userServiceResp.userInfo.ufId;
req.userId = userServiceResp.userInfo.userId;
return next();
} else {
console.log('====Invalid token------');
return APIResponse.failResponse(res, "Invalid token", 40001);
}
} catch (error) {
console.log('decode error----|||||||---', error);
throw error;
}
}
Get appId By User ScopeId
https Request
POST https://staging-api.tranzak.me/ba021/v1/services/user/appId
Request Body Parameters
Query Parameters
| Parameter | Type | required | Description |
|---|---|---|---|
| appType | String | true | the application type to which the user belongs to mp, bo(back office), app (tranzak app) |
| scopeId | String | true | The scope Id of the user |
Response
| Parameter | Type | Description |
|---|---|---|
| appId | String | app Id |
{
"data": {
"appId": "4szmwnjwt7mwm0",
"success": true
}
Validate/Verify User Pin
https Request
POST https://staging-api.tranzak.me/ba021/v1/services/validate-pin
Request Body Parameters
| Parameter | Type | required | Description |
|---|---|---|---|
| pin | String | true | User's 6 digit pin |
| userId | String | true | userId |
Response
| Parameter | Type | Description |
|---|---|---|
| isValidPin | Bool | Whether Pin is valid or not |
{
"data": {
},
"success": true
}
Base Url
https://[staging-]api.tranzak.me/ba021
Get User By Phone
https Request
POST /v1/org/auByPhone
Request Body Parameters
| Parameter | Type | required | Description |
|---|---|---|---|
| phone | String | true | phone number to search by |
Header Parameters
| Parameter | Type | required | Description |
|---|---|---|---|
| Authorization | String | true | user' Bearer token, as sent from the front-end (eg: Bearer <userToken>) |
Response
| Parameter | Type | Description |
|---|---|---|
| ufID | String | User friendly Id(unique) |
| userId | String | User Mongo Id (unique) |
| phone | String | User phone |
| String | ||
| firstName | String | First Name |
| lastName | String | Last Name |
| role | Int | user role |
{
"data": {
"userInfo": {
"userId": "38b73cb0e50d4872805fe82e0b171f55",
"firstName": "",
"lastName": "",
"ufId": "4szmwnjwt7mwm0",
"role": 101,
"phone": "+237692098168"
}
},
"success": true
}
User List
https Request
POST /v1/sanaga/list
Get all org users regardless of their types.
Request Body Parameters
| Parameter | Type | required | Description |
|---|---|---|---|
| pageNum | Number | false | current page, default 1, starts from 1 |
| pageSize | Number | false | page size, default 10 |
| searchParams | Object | false | an object containing one or more key:value pair or the fields to search. Almost every field on the user object is searchable. Note: for date range search: startDate and endDate are both quired |
Example body params:
// Example get list(search) request body params:
{
"pageNum":1,
"pageSize":10,
"searchParams": {
"startDate":"2021-10-11",
"endDate":"2021-10-15",
"userType":2,
"status": 1,
"email": "email@example.com",
"phone":"+237671922822"
}
}
Response
//sample list response (with pagination info)
{
"data": {
"list": [
{
"sex": 0,
"role": 1000,
"firstName": "Test2",
"lastName": "Test2",
"orgId": "tzgze1swkuk2sf",
"phone": "+237678723149",
"openId": "de91d5bdd7964b978ca8f7d6d5d10de46efccb9633964441a03914fb48f63e30",
"ufID": "tzgze1swkuk2sf",
"userId": "de91d5bdd7964b978ca8f7d6d5d10de4"
},
{
"sex": 1,
"role": 1000,
"firstName": "Test",
"lastName": "Test User Updated",
"orgId": "tzgze1sw1uk2sf",
"phone": "+237678727149",
"openId": "5faf22dc38604df0ae47254703ea217e6efccb9633964441a03914fb48f63e30",
"ufID": "tzgze1sw1uk2sf",
"userId": "5faf22dc38604df0ae47254703ea217e"
}
],
"total": 3,
"totalPages": 1,
"hasMore": false
},
"success": true
}
invoices
Invoices
Merchant invoice
BaseUrl
https://{staging-}api.tranzak.me/tz988
Create (from scratch)
Creates an invoice from scratch
Endpoint
POST /v1/invoice/service/create
Request Body Parameters
| Parameter | Type | required | Description |
|---|---|---|---|
| orgId | String | true | Merchant's transaction orgId |
| title | String | true | Invoice title |
| currencyCode | String | false | default XAF the invoice currency code. Defaults to user's currency code |
| mchInvoiceRef | String | false | user's custom invoice ref |
| serviceId | String | false | calling service's ref id. Used to track invoices and do a one to one mapping between the calling service and the invoice service |
| appId | String | false | additional filtering parameter besides serviceId |
| totalTax | String | false | tax if applicable. default : 0 |
| billToName | String | false | Name of invoice |
| billToAddress | String | false | payer address |
| billToEmail | String | false | payer email address |
| createdByUserId | String | false | Tranzak userId of the person creating the invoice from the bo |
| memo | String | false | Memo |
| activateUponCreation | Boolean | false | the invoice will start immediately from status pending instead of draft |
| items | List | true | JSON representation of the items (see request body) |
| receivingAccountId | String | false | The MERCHANT account type account ID that the invoice will be paid into. Default : merchant default account |
| issueDate | String | false | Invoice date of issue |
| dueDate | String | false | Invoice due date |
| acceptPartialPayments | Boolean | false | Partial payments accepted . default: true |
| serviceCallbackUrl | String | false | endpoint to call when ever there is a new payment |
Sample request body
{
"serviceId": "eaouoda38d0dhadfd",
"userInvoiceRef" : "5555" ,
"title" : "invoice tiles" ,
"totalTax" : 100,
"billToName" : "Tranzak Descriptinaria" ,
"billToAddress" : "Rue Drouot" ,
"billToEmail" : "trrr@tranzak.net" ,
"memo" : "Memo for schoolmo for schoolmo for schoolmo for schoolmo for s" ,
"acceptPartialPayments" : true,
"receivingAccountId" : "MSAQM5SZWXUMAJANC78J",
"items" : [
{
"itemDescription" : "some item1" ,
"unitPrice" : 1000,
"quantity" : 2
},
{
"itemDescription" : "some item2" ,
"unitPrice" : 100,
"quantity" : 1
},
{
"itemDescription" : "some item3" ,
"unitPrice" : 300,
"quantity" : 5
},
]
}
Response
See VIEW section
Upload an invoice
Uploads an invoice file
Request body
| Parameter | Type | required | Description |
|---|---|---|---|
| orgId | String | true | Merchant's transaction orgId |
| title | String | true | Invoice title |
| currencyCode | String | false | default XAF the invoice currency code. Defaults to user's currency code |
| mchInvoiceRef | String | false | user's custom invoice ref |
| serviceId | String | false | calling service's ref id. Used to track invoices and do a one to one mapping between the calling service and the invoice service |
| totalTax | String | false | tax if applicable. default : 0 |
| billToName | String | false | Name of invoice |
| billToAddress | String | false | payer address |
| billToEmail | String | false | payer email address |
| createdByUserId | String | false | Tranzak userId of the person creating the invoice from the bo |
| memo | String | false | Memo |
| items | List | true | JSON representation of the items (see request body) |
| receivingAccountId | String | false | The MERCHANT account type account ID that the invoice will be paid into. Default : merchant default account |
| issueDate | String | false | Invoice date of issue |
| dueDate | String | false | Invoice due date |
| acceptPartialPayments | Boolean | false | Partial payments accepted? |
Response
The response is described in the VIEW section
Edit/Update Invoice
Updates an invoice model
Endpoint
POST /v1/invoice/service/update
Request Body Parameters
| Parameter | Type | required | Description |
|---|---|---|---|
| _id | String | true | GC code |
See [[CREATE]] for other params
Response
See the VIEW section
View
Shows invoice data
Endpoint
POST /v1/invoice/service/get-by-invoiceId
| Parameter | Type | required | Description |
|---|---|---|---|
| id | String | true | invoiceId eg: IVN3GZ8U9RP6M0QMLP |
Request Body Parameters
Issues a GET request
Response
{
"data": {
"statusText": "Partially Paid",
"type": 1,
"status": 3,
"totalPaid": 300,
"totalTax": 300,
"subtotal": 0,
"amountWithoutTax": 3000,
"mchInvoiceRef": "",
"serviceId": "",
"acceptPartialPayments": true,
"isDeleted": false,
"_id": "64e36398343f9167a7821807",
"billToName": "Ansel Ayk",
"clientNote": "",
"dueDate": "2023-08-31T00:00:00.000Z",
"items": [
{
"unitPrice": 1000,
"quantity": 3,
"itemDescription": "One item",
"_id": "64e353efc9d76861681073fgh"
},
{
"unitPrice": 300,
"quantity": 3,
"itemDescription": "Another item",
"_id": "64e353efc9d7686168107lk9"
}
],
"fileUrl": null,
"receivingAccountId": null,
"title": "New invoice",
"createdByUserId": "6c08587665c94c0c88bcf95f56b3ff39",
"orgDisplayName": "Liverpool Org updated",
"orgName": "Anseloh org",
"orgLogo": "https://staging-fms.tranzak.me/cdn/pf/arjtsg3t286q4dga_103445.87978898482imagepicker6A937A5A52374579B7D0060C98DD1F55166540000094398F4E27C.jpg",
"currencyCode": "XAF",
"orgId": "tz32elknz06ic8el",
"invoiceId": "IVX0BQTY7FRAH28Q2E",
"issueDate": "2023-08-21T13:16:08.727Z",
"createdAt": "2023-08-21T13:16:08.728Z",
"updatedAt": "2023-08-21T13:18:36.269Z",
"__v": 0,
"links": {
"payerUrl": "https://staging-collections.tranzak.me/pay/invoice/IVX0BQTY7FRAH28Q2E",
"payerShortUrl": "https://link.tranzak.net/Wg8zXiHbcZvByLVUA"
}
},
"success": true
}
List
Get all invoices with filters
Endpoint
GET /v1/invoice/service/all-by-org
Filter parameters
| Parameter | Type | required | Description |
|---|---|---|---|
| orgId | String | true | orgId of the organization |
| pageNum | Number | false | default 1 |
| pageSize | Number | false | default 20 |
| startDate | String | false | date filter |
| endDate | String | false | date filter |
| status | String | false | status filter |
| title | String | false | title fuzzy search filter |
Response
{
"data": {
"currentPage": 1,
"hasMore": false,
"list": [
{
"statusText": "Partially Paid",
"type": 1,
"status": 3,
"totalPaid": 300,
"totalTax": 300,
"subtotal": 0,
"amountWithoutTax": 3000,
"mchInvoiceRef": "",
"serviceId": "",
"acceptPartialPayments": true,
"isDeleted": false,
"_id": "64e36398343f9167a7821807",
"billToName": "Ansel Ayk",
"clientNote": "",
"dueDate": "2023-08-31T00:00:00.000Z",
"items": [
{
"unitPrice": 1000,
"quantity": 3,
"itemDescription": "One item",
"_id": "64e353efc9d76861681073fgh"
},
{
"unitPrice": 300,
"quantity": 3,
"itemDescription": "Another item",
"_id": "64e353efc9d7686168107lk9"
}
],
"fileUrl": null,
"receivingAccountId": null,
"title": "New invoice",
"createdByUserId": "6c08587665c94c0c88bcf95f56b3ff39",
"orgDisplayName": "Liverpool Org updated",
"orgName": "Anseloh org",
"orgLogo": "https://staging-fms.tranzak.me/cdn/pf/arjtsg3t286q4dga_103445.87978898482imagepicker6A937A5A52374579B7D0060C98DD1F55166540000094398F4E27C.jpg",
"currencyCode": "XAF",
"orgId": "tz32elknz06ic8el",
"invoiceId": "IVX0BQTY7FRAH28Q2E",
"issueDate": "2023-08-21T13:16:08.727Z",
"createdAt": "2023-08-21T13:16:08.728Z",
"updatedAt": "2023-08-21T13:18:36.269Z",
"__v": 0,
"links": {
"payerUrl": "https://staging-collections.tranzak.me/pay/invoice/IVX0BQTY7FRAH28Q2E",
"payerShortUrl": "https://link.tranzak.net/Wg8zXiHbcZvByLVUA"
}
}
],
"pageSize": 20,
"totalItems": 2
},
"success": true
}
Add a payment
Adds a non-Tranzak payment using some other source
Endpoint
POST /v1/invoice/service/add-payment
Filter parameters
| Parameter | Type | required | Description |
|---|---|---|---|
| _id | Number | true | invoice ID |
| amount | Number | true | amount in invoice currency |
| paymentSourceId | Number | true | payment source ID 2 => PAYMENT_SOURCE_CASH , 3 => PAYMENT_SOURCE_OTHER_MEANS |
| note | Number | true | a note |
{
"_id" : "IV375WEJ3BEBPRJ4ZBS3",
"amount" : 1 ,
"paymentSourceId" : 2,
"note" : "We added payment !"
}
List Payments
List payments made to invoices. Use filters to filter through list
Endpoint GET /v1/invoice/service/payments/all-by-org
Request Body (filters)
| Parameter | Type | required | Description |
|---|---|---|---|
| _id | String | false | Payment ID |
| invoiceId | String | false | _id of invoice |
| paymentId | String | false | payment Id |
| paymentSourceId | String | false | source ID |
RESPONSE
{
"data": {
"currentPage": 1,
"hasMore": false,
"list": [
{
"_id": "IPPHLF5FABCVF2STE1AJ",
"invoiceId": "IV220216HB6561BKF6I1",
"amount": 1,
"paymentId": null,
"paymentSourceId": "2",
"note": "We added payment !",
"createdAt": "2022-02-16 12:34:29",
"currencyCode": "XAF",
"paymentSource": "paid via cash"
},
{
"_id": "IPELPT7YVSEVOMVUQ85F",
"invoiceId": "IV220216HB6561BKF6I1",
"amount": 1,
"paymentId": null,
"paymentSourceId": "2",
"note": "We added payment !",
"createdAt": "2022-02-16 12:33:37",
"currencyCode": "XAF",
"paymentSource": "paid via cash"
},
{
"_id": "IPL8Y0YZRDXOIMG67RDJ",
"invoiceId": "IV220216HB6561BKF6I1",
"amount": 1,
"paymentId": null,
"paymentSourceId": "2",
"note": "We added payment !",
"createdAt": "2022-02-16 12:33:29",
"currencyCode": "XAF",
"paymentSource": "paid via cash"
},
{
"_id": "IPPVRVIJI59TVLFQ6PKM",
"invoiceId": "IV220216HB6561BKF6I1",
"amount": 1,
"paymentId": null,
"paymentSourceId": "2",
"note": "We added payment !",
"createdAt": "2022-02-16 12:33:10",
"currencyCode": "XAF",
"paymentSource": "paid via cash"
}
],
"pageCount": [
1,
50
],
"pageSize": 20,
"totalItems": 4
},
"success": true,
"dateTime": "2022-02-16T12:44:07+00:00",
"lang": "en-US",
"debugInfo": null,
"debug": {
"hostname": "cortex01",
"serverIpAddress": "192.168.137.2",
"clientIpAddress": "192.168.137.1",
"duration": "0.044s",
"userId": "ff1ruzi3vz5o"
}
}
Other actions
Cancel
Cancels an invoice
Endpoint
POST /v1/invoice/service/cancel
Request Body
{
"id": "IV220216HB6561BKF6I1"
}
Submit
Submits an invoice in draft status and make it available to receive payment
Endpoint
POST /v1/invoice/service/submit
Request Body
{
"id": "IV220216HB6561BKF6I1"
}
Mark as paid
Marks the invoice as paid
Endpoint
POST /v1/invoice/service/mark-as-paid
Request body params
| Parameter | Type | required | Description |
|---|---|---|---|
| id | String | true | invoiceId eg. IVXXX |
| paymentSourceId | String | true | _id of invoice |
| note | String | true | payment Id |
{
"_id": "IVRYCSMGIEW2OO6TMUPY",
"paymentSourceId" : 1,
"note" : "We closed this invoice !"
}
jobScheduler
Scheduler
https Request
POST https://agenda.tranzak.me/v1/schedule
{
"url":"https://staging-api.tranzak.me/aa038/v1/mps",
"jobName":"name_space-job_name-ref_1id34",
"time": 5,
"params":{
"name":"App Name",
"desc":"description",
"categories":["business"],
"tags":["shopping"],
"businessName":"test biz name",
"qrCodeUrl":"https://qrcode.png",
"logo":"https://logo.png"
}
}
Query Parameters
| Parameter | Type | required | Description |
|---|---|---|---|
| url | String | true | Url that will be queried by the scheduler |
| jobName | String | true | A name to uniquely identify your job. The jobName can also be used for searching through schedule jobs |
| time | Int | true | The number of seconds from now until executing the job |
| params | Object | false | The parameters that will be passed as body while calling the url |
merchantSolutions
Create payroll
HTTP Request
POST https://host/~/v1/pay-rolls/create
Request Header Parameters
| Parameter | Type | required | Description |
|---|---|---|---|
| Authorization | String | true | user' Bearer token, as sent from the front-end (eg: Bearer <userToken>) |
Request Body Parameters
| Parameter | Type | required | Description |
|---|---|---|---|
| name | String | false | Label used to describe the group. |
| receivers | PayRollMember[] | true | Set of user involved in the current payroll. See PayRollMember described above. |
Sample request body
{
"name": "Sample payroll three",
"receivers": [
{"scopeId": "xxxxxxxxxxxxx", "name": "Freddy Kamgang"},
{"scopeId": "yyyyyyyyyyyyy", "name": "Rebecca Sutter"}
]
}
Response
Success Response
{
"data": {
"_id": "62015ce7bc07dd182487a317",
"name": "Sample payroll three",
"ownerUserId": "e7bc07dd182487a",
"ownerUserScopeId": "e7bc07dd182487a",
"users": [
{
"_id": "62015ce7bc07dd182487a318",
"name": "Freddy Kamgang",
"userScopeId": "xxxxxxxxxxxxx"
},
{
"_id": "62015ce7bc07dd182487a319",
"name": "Rebecca Sutter",
"userScopeId": "yyyyyyyyyyyyy"
}
],
"status": 5,
"createdAt": "2022-02-07T17:54:47.912Z",
"updatedAt": "2022-02-07T17:54:47.912Z"
},
"success": true
}
Error Response
- No member provided for the group (receivers is null, undefined not an array or an empty one) :
{
"errorMsg": "At least one receiver is needed to create a pay roll",
"errorCode": 0,
"success": false
}
- Some of the members of the
receiversarray is null or undefined :
{
"errorMsg": "Invalid receiver provided",
"errorCode": 0,
"success": false
}
Important notes
If duplicates (in term of scopeId and id) are present in the receivers array, the api will only consider the last occurrence of the duo [scopeId + id].
Types description
/**
* Describes a user involved in a .
*/
class PayRollMember {
/**
* `Required`.
*
* ScopeId of the targeted user.
*/
scopeId!: String;
/**
* Exact id of the targeted user.
*/
id?: String | null | undefined;
/**
* FullName of the targeted user.
*/
name?: String | null | undefined;
}
/**
* Defines available payroll statuses.
*/
enum PayRollStatus {
/**
* By default, only active payroll are returned when querying.
*/
Active: 5,
/**
* The `Archived` state transcript the fact that the payroll is not deleted,
* but it is no more returned when performing normal queries.
*
* You can still decide to show archived payrolls.
* But even in that way, they would not be in top of the results.
*/
Archived: 1,
/**
* The `Inactive` state is not yet used.
* But if you set a payroll as inactive, it will be shown after `Active` and `Archived` payrolls.
*/
Inactive: -1
}
LIST PAY ROLLS
HTTP Request
POST https://host/~/v1/pay-rolls/all
Request Header Parameters
| Parameter | Type | required | Description |
|---|---|---|---|
| Authorization | String | true | user' Bearer token, as sent from the front-end (eg: Bearer <userToken>) |
Request Body Parameters
| Parameter | Type | required | Description |
|---|---|---|---|
| name | String | false | Name pattern. Used to filter in name-like way. |
| status | PayRollStatus[] | false | See PayRollStatus described above. |
Request Route Parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
| limit | Number | 20 | Number of items to return in single call. |
| page | Number | 1 | Defines the number of element to offset while querying the storage. |
Response
{
"data": {
"list": [
{
"_id": "62015c6cbc07dd182487a313",
"name": "Sample payroll two",
"ownerUserId": "efka",
"ownerUserScopeId": "efka",
"users": [
{
"_id": "62015c6cbc07dd182487a314",
"name": "Plam Luvifer Morningstar",
"userScopeId": "morningstar"
},
{
"_id": "62015c6cbc07dd182487a315",
"name": "Raimond Red Reddington",
"userScopeId": "reddington"
},
{
"_id": "62015c6cbc07dd182487a316",
"name": "Wess Gibbings",
"userScopeId": "gibbings"
}
],
"status": 5,
"createdAt": "2022-02-07T17:52:44.896Z",
"updatedAt": "2022-02-07T17:52:44.896Z"
},
{
"_id": "62015ce7bc07dd182487a317",
"name": "Sample payroll three",
"ownerUserId": "efka",
"ownerUserScopeId": "efka",
"users": [
{
"_id": "62015ce7bc07dd182487a318",
"name": "Freddy Kmagang",
"userScopeId": "freddy"
},
{
"_id": "62015ce7bc07dd182487a319",
"name": "Rebecca sutter",
"userScopeId": "sutter"
}
],
"status": 1,
"createdAt": "2022-02-07T17:54:47.912Z",
"updatedAt": "2022-02-07T17:54:57.110Z"
}
],
"total": 3,
"totalPages": 2,
"hasMore": true
},
"success": true
}
MARK AS ARCHIVED
HTTP Request
PUT https://host/~/v1/pay-rolls/archive
Request Header Parameters
| Parameter | Type | required | Description |
|---|---|---|---|
| Authorization | String | true | user' Bearer token, as sent from the front-end (eg: Bearer <userToken>) |
Request Body Parameters
| Parameter | Type | required | Description |
|---|---|---|---|
| id | String | false | Single id of the pay roll to archive. |
| ids | String[] | false | Collection of pay roll identifiers. If id is also defined, it will be added to this collection. |
If both id and ids are not provided, an error message will be returned.
Response
{
"data": {
"done": true
},
"success": true
}
MARK AS ACTIVE
HTTP Request
PUT https://host/~/v1/pay-rolls/un-archive
Request Header Parameters
| Parameter | Type | required | Description |
|---|---|---|---|
| Authorization | String | true | user' Bearer token, as sent from the front-end (eg: Bearer <userToken>) |
Request Body Parameters
| Parameter | Type | required | Description |
|---|---|---|---|
| id | String | false | Single id of the pay roll to archive. |
| ids | String[] | false | Collection of pay roll identifiers. If id is also defined, it will be added to this collection. |
If both id and ids are not provided, an error message will be returned.
Response
{
"data": {
"done": true
},
"success": true
}
NB : Note that all error response shown here are returned in handled error scenario. In case of unhandled error, a dedicated response will be sent.
notifications
Send Notification
HTTP Request
POST https://host/~/co018/v1/notification/send
Request Body Parameters
| Parameter | Type | required | Description |
|---|---|---|---|
| appId | String | true | Sending application unique identifier. |
| platformId | String | true | Sending platform unique identifier. |
| message | String | true | Content of the notification. |
| recipient | String or String[] or EmailRecipients |
true | Who is the notification intended to. If the notification is an email, it holds the recipient's email. In case it is an SMS, put the phone numbers here. Otherwise, send the target user's scope id. |
| type | NotificationType | true | Logical type of the sending notification. |
| platform | TargetPlatform | true | Logical type of the receiving platform. |
| priority | NotificationPriority | false | Logical level value of the notification's urgency. Default value is NotificationPriority.Regular. |
| recipientAppType | mp or app or bo |
true | Indicates if the notification is for the back office, a mini program or the app itself. |
| title | String | true | Main title of the notification. In case of email, it represent the subject of the email. |
| roles | Number or Number[] |
false | List of user's roles targeted by the notification. |
| subTitle | String | false | Additional subject of the notification. In case of email, this will be ignored. |
| targetUrl | String | false | Url to redirect to, when the user clicks on this notification. In case of email, this will be ignored. |
| callbackUrl | String | false | POST Url to call once the notification is delivered. Used for Mail and SMS. |
| sender | String | false | Name of the sender (Mainly used for the website in the contact form). |
Types description
/**
* Email recipient format.
*/
class EmailRecipients {
/**
* Recipients Email addresses.
*/
to: String[];
/**
* Email addresses to add as cc.
*/
cc: String[] | null | undefined;
}
enum NotificationType {
/**
* Notifications related to Tranzak supporting customers.
*/
Support = 1,
/**
* Incoming mail from website (eg: contact us form).
*/
Website = 10,
/**
* OTP verification code notification.
*/
VerificationCode = 20,
/**
* Payment related notification from Tranzak including payments in mps.
*/
Payment = 30,
/**
* Non payment messages from mini-programs.
*/
Services = 40,
/**
* Generic system's notification.
*/
System = 100
} enum TargetPlatform {
/**
* Generic sms.
*/
Sms = 1,
/**
* Generic mail.
*/
Mail = 10,
/**
* Sent to the mobile application.
*/
App = 20,
/**
* Sent to in app mini-programs.
*/
MP = 21,
/**
* Sent to back office app.
*/
Bo = 30
} enum NotificationPriority {
/**
* Normal notification. Delivery delayed to max 5 minutes.
*/
Regular = 1,
/**
* Urgent. Will be delivered as soon as possible.
*/
Urgent = 10
}
Sample request body
Sends App notification to user identified by scope id fpq0lbb0qqy6z8
{
"type": 40,
"platform": 20,
"message": "Payment done by Ni's Kitchen. Amount : 1350 XAF. New balance : 2000 XAF.",
"appId":"g7o84wzypf64",
"platformId": "u1d6yppv1uwx",
"recipient": "fpq0lbb0qqy6z8",
"title": "New payment received",
"subTitle": "SchoolFees",
"recipientAppType": "app",
"targetUrl": "trec.tranzak.me",
"roles": [1,2,3]
}
Response
Success Response
{
"data": {
"notification": {
"appId": "g7o84wzypf64",
"title": "New payment received",
"subTitle": "SchoolFees",
"platformId": "u1d6yppv1uwx",
"_id": "e27354831d234c579b8178f7e297fa9f",
"createdAt": "2022-01-14T19:13:32.242Z",
"updatedAt": "2022-01-14T19:13:32.242Z",
"recipientAppName": "Sanaga",
"recipientAppLogo": "https://fms.tranzak.me/cdn/ia/4jo20xfrvcglt6r8_undefined105740.7951086897.png",
"message": "Payment done by Ni's Kitchen. Amount : 1350 XAF. New balance : 2000 XAF.",
"recipient": "fpq0lbb0qqy6z8",
"recipientAppId": "qyhnul9mqiph",
"type": 20,
"priority": 1,
"roles": [1,2,3],
"platform": 20,
"recipientAppType": "app",
"status": 1,
"redirectTo": "http://trec.tranzak.me",
"appName": "ANsel Trec",
"appLogo": "https://fms.tranzak.me/cdn/ia/n6dixu958vg1mykz_wy8cvocq1jew67108976.77335343431.jpg"
}
},
"success": true,
"errorMsg": "",
"errorCode": 0
}
Error Responses
- Parameters validation errors : Key-value objects array is returned inside the
data. For each object, the key is the name of the property that has an error, and the value is the error description.
{
"data": [
{
"type": "Invalid notification type"
},
{
"appId": "Invalid appId input"
},
{
"platformId": "Invalid platformId input"
},
{
"message": "Invalid message input"
},
{
"title": "Invalid title input"
},
{
"recipient": "Invalid recipient input"
}
],
"errorMsg": "Invalid params",
"errorCode": 400,
"success": false
}
- Unidentified application : Two scenarios can generate this error.
- The system was unable to identify the application provided in the
appIdkey. - In case your target platform is either
App,MPorBO, the recipient should be a scopeId. The system will then try ro identify the application bounded to that scopeId. When identification fails, you get this error.
- The system was unable to identify the application provided in the
{
"errorMsg": "Unknown APP",
"errorCode": 0,
"success": false
}
- Notification limit reached : Each user can receive a limited number of notifications per app per month (See your administrator to get quotas). When this limit is reached, then no notification will be sent again. The response will look like following.
{
"errorMsg": "Notification count max value reached",
"errorCode": 0,
"success": false
}
Data keys description
| Key | Type | Description |
|---|---|---|
| _id | String | Notification's unique identifier. |
| status | Number | Status of the notification. 1 = unread; 2 = read. |
| type | Number | Notification's type. See NotificationType described above. |
| priority | Number | Notification's priority. See NotificationPriority described above. |
| platform | Number | Logical type of the receiving platform. See TargetPlatform described above. |
| message | String | Notification's content. |
| title | String | Main subject of the notification. |
| roles | Number[] | false |
| subTitle | String | Auxiliary subject of the notification. Will be undefined if the sender doesn't provide it. |
| redirectTo | String | Url to redirect to, when the user clicks on this notification. Valid only for platform BO, InApp & InAppMiniProgram. Will be undefined if the sender doesn't provide it. |
| callbackUrl | String | POST url to call once the notification delivery attempt is complete. Note that this url is called only one time whether the delivery is successful or not. Will be undefined if the sender doesn't provide it. |
| recipient | String | Who is the notification intended to. |
| recipientAppId | String | Identifier of the receiving application. |
| recipientAppType | String | Nature of the receiving application. |
| recipientAppName | String | Name of the receiving application. |
| recipientAppLogo | String | Logo path of the receiving application. |
| appId | String | Id of the app sending the notification. |
| platformId | String | Platform identifier of the app sending the notification. |
| appName | String | Name of the app sending the notification. |
| appLogo | String | Log path of the app sending the notification. |
| time | DateTime | Date and time at which the record was saved. |
Important notes
In case of emails and sms, receiving this response payload doesn't mean the message has been delivered. You must provide a callbackUrl (served on a POST method) to be notified once the message is delivered to its recipient(s).
The payload sent to the callback looks like following :
{
/**
* Indicates whether the delivery was successful or not.
*/
"status": true,
/**
* Same as the notification object you got in the previous response.
*/
"notification": {...}
}
MARK SINGLE NOTIFICATION AS READ
Toggles notification's read status. Callable only on non Email or SMS notifications.
HTTP Request
PUT https://host/~/co018/v1/notification/mark-read/:notificationId
Request Header Parameters
| Parameter | Type | required | Description |
|---|---|---|---|
| Authorization | String | true | user' Bearer token, as sent from the front-end (eg: Bearer <userToken>) |
Request Route Parameters
| Parameter | Type | required | Description |
|---|---|---|---|
| notificationId | String | true | Unique identifier of the target notification. |
Response
Success response
{
"data": {
"read": true
},
"success": true,
"errorMsg": "",
"errorCode": 0
}
Errors responses
Notification is an email or SMS, was already read, or just not exists.
{
"data": null,
"success": true,
"errorCode": 0,
"errorMsg": "Notification not found"
}
Trying to read non owned notification.
{
"data": null,
"success": true,
"errorCode": 0,
"errorMsg": "Unauthorized action"
}
MARK MANY NOTIFICATIONS AS READ
Toggles multiple notification's read status. Callable only on non Email or SMS notifications.
HTTP Request
PUT https://host/~/co018/v1/notification/mark-read-many
Request Header Parameters
| Parameter | Type | required | Description |
|---|---|---|---|
| Authorization | String | true | user' Bearer token, as sent from the front-end (eg: Bearer <userToken>) |
Request Route Parameters
| Parameter | Type | required | Description |
|---|---|---|---|
| ids | String[] | true | Array of notifications unique identifiers. |
Response
Success response
{
"data": {
"read": true
},
"success": true,
"errorMsg": "",
"errorCode": 0
}
Errors responses
Notification is an email or SMS, was already read, or just not exists.
{
"data": null,
"success": true,
"errorCode": 0,
"errorMsg": "Notification not found"
}
Trying to read non owned notification.
{
"data": null,
"success": true,
"errorCode": 0,
"errorMsg": "Unauthorized action"
}
MARK ALL NOTIFICATIONS AS READ
Toggles all multiple notification's read status according to request parameters. Callable only on non Email or SMS notifications.
HTTP Request
PUT https://host/~/co018/v1/notification/mark-read-all
Request Header Parameters
| Parameter | Type | required | Description |
|---|---|---|---|
| Authorization | String | true | user' Bearer token, as sent from the front-end (eg: Bearer <userToken>) |
Request Route Parameters
| Parameter | Type | required | Default | Description |
|---|---|---|---|---|
| appId | String | true | null | Receiving application unique identifier. |
| appType | bo or mp or app |
true | null | Recipient app type. |
| type | NotificationType or NotificationType[] |
false | null | See NotificationType described above. |
Response
{
"data": {
"read": true,
"total": 1
},
"success": true,
"errorMsg": "",
"errorCode": 0
}
GET UNREAD NOTIFICATIONS
Retrieves unread notifications intended to particular a user/group of users according to its scope id. Returns only non Email or SMS notifications.
HTTP Request
POST https://host/~/co018/v1/notification/get-unread
Request Header Parameters
| Parameter | Type | required | Description |
|---|---|---|---|
| Authorization | String | true | user' Bearer token, as sent from the front-end (eg: Bearer <userToken>) |
Request Body Parameters
| Parameter | Type | required | Default | Description |
|---|---|---|---|---|
| appId | String | true | null | Sending application unique identifier. |
| appType | bo or mp or app |
true | null | Recipient app type. |
| type | NotificationType or NotificationType[] |
false | null | See NotificationType described above. |
| platformId | String | false | null | Sending platform unique identifier. |
| roles | Number or Number[] |
false | null | Use this parameter to fetch only the notifications where the given roles are involved. If not specified, returned notifications are those that are not concerned by any role. |
Request Query String Parameters
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| limit | Number | false | 20 | Number of items to return in single call. |
| page | Number | false | 1 | Defines the number of element to offset while querying the storage. |
Response
Returns a list of notifications inside the data.notifications.list key.
{
"data": {
"list": [
{
"_id": "e27354831d234c579b8178f7e297fa9f",
"appId": "g7o84wzypf64",
"title": "Salem",
"subTitle": "Le procès de la mort",
"platformId": "u1d6yppv1uwx",
"createdAt": "2022-01-14T19:13:32.242Z",
"updatedAt": "2022-01-14T19:13:32.242Z",
"recipientAppName": "Sanaga",
"recipientAppLogo": "https://fms.tranzak.me/cdn/ia/4jo20xfrvcglt6r8_undefined105740.7951086897.png",
"message": "Hot fix in live coding",
"recipient": "fpq0lbb0qqy6z8",
"recipientAppId": "qyhnul9mqiph",
"type": 20,
"roles": [1,2,3],
"priority": 1,
"platform": 20,
"recipientAppType": "app",
"status": 0,
"redirectTo": "http://trec.tranzak.me",
"sender": "Efka",
"appName": "ANsel Trec",
"appLogo": "https://fms.tranzak.me/cdn/ia/n6dixu958vg1mykz_wy8cvocq1jew67108976.77335343431.jpg"
}
],
"total": 1,
"totalPages": 1,
"hasMore": false
},
"success": true,
"errorMsg": "",
"errorCode": 0
}
GET ALL NOTIFICATIONS
Retrieves notifications intended to particular a user/group of users according to its scope id. Returns only non Email or SMS notifications.
HTTP Request
POST https://host/~/co018/v1/notification/get
Request Header Parameters
| Parameter | Type | required | Description |
|---|---|---|---|
| Authorization | String | true | user' Bearer token, as sent from the front-end (eg: Bearer <userToken>) |
Request Body Parameters
| Parameter | Type | required | Default | Description |
|---|---|---|---|---|
| appId | String | true | null | Receiving application unique identifier. |
| appType | bo or mp or app |
true | null | Recipient app type. |
| status | r (read), u (unread), * (all) |
false | * | Notification's read status. If a non awaited value is provided, * is considered. |
| type | NotificationType or NotificationType[] |
false | null | See NotificationType described above. |
| platformId | String | false | null | Sending platform unique identifier. |
| roles | Number or Number[] |
false | null | Use this parameter to fetch only the notifications where the given roles are involved. If not specified, returned notifications are those that are not concerned by any role. |
Request Query String Parameters
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| limit | Number | false | 20 | Number of items to return in single call. |
| page | Number | false | 1 | Defines the number of element to offset while querying the storage. |
Response
Returns a list of notifications inside the data.notifications.list key.
{
"data": {
"list": [
{
"_id": "e27354831d234c579b8178f7e297fa9f",
"appId": "g7o84wzypf64",
"title": "Salem",
"subTitle": "Le procès de la mort",
"platformId": "u1d6yppv1uwx",
"createdAt": "2022-01-14T19:13:32.242Z",
"updatedAt": "2022-01-14T19:13:32.242Z",
"recipientAppName": "Sanaga",
"recipientAppLogo": "https://fms.tranzak.me/cdn/ia/4jo20xfrvcglt6r8_undefined105740.7951086897.png",
"message": "Hot fix in live coding",
"recipient": "fpq0lbb0qqy6z8",
"recipientAppId": "qyhnul9mqiph",
"type": 20,
"roles": [1,2,3],
"priority": 1,
"platform": 20,
"recipientAppType": "app",
"status": 0,
"redirectTo": "http://trec.tranzak.me",
"sender": "Efka",
"appName": "ANsel Trec",
"appLogo": "https://fms.tranzak.me/cdn/ia/n6dixu958vg1mykz_wy8cvocq1jew67108976.77335343431.jpg"
}
],
"total": 1,
"totalPages": 1,
"hasMore": false
},
"success": true,
"errorMsg": "",
"errorCode": 0
}
GET UNDELIVERED NOTIFICATIONS
Deletes all elements in the identified user's cart.
HTTP Request
POST https://host/~/co018/v1/notification/undelivered
Request Header Parameters
| Parameter | Type | required | Description |
|---|---|---|---|
| Authorization | String | true | user' Bearer token, as sent from the front-end (eg: Bearer <userToken>) |
Response
Returns a list of notifications inside the data.notifications.list key.
Success Response
{
"data": {
"list": [
{
"_id": "e27354831d234c579b8178f7e297fa9f",
"appId": "g7o84wzypf64",
"title": "Salem",
"subTitle": "Le procès de la mort",
"platformId": "u1d6yppv1uwx",
"createdAt": "2022-01-14T19:13:32.242Z",
"updatedAt": "2022-01-14T19:13:32.242Z",
"recipientAppName": "Sanaga",
"recipientAppLogo": "https://fms.tranzak.me/cdn/ia/4jo20xfrvcglt6r8_undefined105740.7951086897.png",
"message": "Hot fix in live coding",
"recipient": "fpq0lbb0qqy6z8",
"recipientAppId": "qyhnul9mqiph",
"type": 20,
"roles": [],
"priority": 1,
"platform": 20,
"recipientAppType": "app",
"status": 0,
"redirectTo": "http://trec.tranzak.me",
"sender": "Efka",
"appName": "ANsel Trec",
"appLogo": "https://fms.tranzak.me/cdn/ia/n6dixu958vg1mykz_wy8cvocq1jew67108976.77335343431.jpg"
}
],
"total": 1,
"totalPages": 1,
"hasMore": false
},
"success": true,
"errorMsg": "",
"errorCode": 0
}
NB : Note that all error response shown here are returned in handled error scenario. In case of unhandled error, a dedicated response will be sent.
partners
Bill Payment
This section resumes all endpoints about bill payment services. Concerned services here are :
- ENEO (post-pay)
- CANAL +
- CAM WATER
Get bills for a service
GET https://host/~/v1/services/billing/{service_path}/find/:account
Request Header Parameters
| Parameter | Type | required | Description |
|---|---|---|---|
| Authorization | String | true | user' Bearer token, as sent from the front-end (eg: Bearer <userToken>) |
Request Route Parameters
| Parameter | Type | required | Description |
|---|---|---|---|
| account | String | true | Customer service account. |
Response
{
"data": [
{
"payItemId": "S-112-950-CAMWATER-90007-CAMWATER_NEW0101781812201012205-f07486cb2e8c4970998541c52e222eac",
"serviceNumber": null,
"billNumber": "025458558555",
"billMonth": "05",
"billYear": "2022",
"billDate": "2022-05-24T13:59:51+00:00",
"billDueDate": "2025-05-12T23:15:34+00:00",
"penaltyAmount": 0,
"amount": 1000,
"currency": "XAF",
"service": {
"deleted": false,
"_id": "628ce260d09bcc9c0823903a",
"serviceType": 3999,
"serviceName": "Cam water",
"partnerMerchantCode": "CAMWATER",
"partnerServiceId": "90007"
}
}
],
"success": true
}
Pay one bill for a service
GET https://host/~/v1/services/billing/{service_path}/pay-bill/:billNumber
Request Header Parameters
| Parameter | Type | required | Description |
|---|---|---|---|
| Authorization | String | true | user' Bearer token, as sent from the front-end (eg: Bearer <userToken>) |
Request Route Parameters
| Parameter | Type | required | Description |
|---|---|---|---|
| billNumber | String | true | Target bill number. |
Request Body Parameters
| Parameter | Type | required | Description |
|---|---|---|---|
| amount | Float | false | Amount you intend to pay. Use this parameter when dealing with services supporting partial payments |
Response
{
"data": {
"amount": 1000,
"transactionType": 1,
"serviceType": 3999,
"state": "pending",
"version": 0,
"partnerFees": 1300,
"fees": 0,
"paidAmount": 0,
"_id": "628ce462f6999432442097bf",
"userId": "efka",
"currency": "XAF",
"serviceName": "Cam water",
"accountNumber": "025458558555",
"payItemId": "S-112-950-CAMWATER-90007-CAMWATER_NEW0254585585552205-a464ef4ff6254addb6f602421b40c758",
"ctxRequestId": "REQ220524P8AYBI1GY2T",
"ctxPaymentUrl": "https://pay.tranzak.me/request/REQ220524P8AYBI1GY2T",
"noteFromPayer": "Period : 05-2022",
"transactionNo": "A1S8L0K63I",
"createdAt": "2022-05-24T13:57:54.952Z",
"updatedAt": "2022-05-24T13:57:54.952Z",
"__v": 0
},
"success": true
}
Confirm payment [callback]
PUT https://host/~/v1/txn/confirm-payment/:transactionId
Request Header Parameters
| Parameter | Type | required | Description |
|---|---|---|---|
| Authorization | String | true | user' Bearer token, as sent from the front-end (eg: Bearer <userToken>) |
Request Route Parameters
| Parameter | Type | required | Description |
|---|---|---|---|
| transactionId | String | true | Target transaction unique identifier. |
Response
{
"data": {
"transaction": {
"amount": 1000,
"transactionType": 1,
"serviceType": 3999,
"state": "pending",
"version": 0,
"partnerFees": 1300,
"fees": 0,
"paidAmount": 0,
"_id": "628ce462f6999432442097bf",
"userId": "efka",
"currency": "XAF",
"serviceName": "Cam water",
"accountNumber": "025458558555",
"payItemId": "S-112-950-CAMWATER-90007-CAMWATER_NEW0254585585552205-a464ef4ff6254addb6f602421b40c758",
"ctxRequestId": "REQ220524P8AYBI1GY2T",
"ctxPaymentUrl": "https://pay.tranzak.me/request/REQ220524P8AYBI1GY2T",
"noteFromPayer": "Period : 05-2022",
"transactionNo": "A1S8L0K63I",
"createdAt": "2022-05-24T13:57:54.952Z",
"updatedAt": "2022-05-24T13:57:54.952Z"
},
"message": "Payment successful"
},
"success": true
}
User profiles
POST https://host/~/v1/profile/read
Get user accounts for services.
Request Header Parameters
| Parameter | Type | required | Description |
|---|---|---|---|
| Authorization | String | true | user' Bearer token, as sent from the front-end (eg: Bearer <userToken>) |
Request body Parameters
| Parameter | Type | required | Description |
|---|---|---|---|
| serviceId | String | false | Target service unique identifier. If provided, only profiles accounts related to this service will be returned. |
Response
Fetch system available services.
POST https://host/~/v1/srv/find
Request body Parameters
| Parameter | Type | required | Description |
|---|---|---|---|
| serviceId | String | false | Target service unique identifier. If provided, only profiles accounts related to this service will be returned. |
Request Query String Parameters
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| limit | Number | false | 20 | Number of items to return in single call. |
| page | Number | false | 1 | Defines the number of element to offset while querying the storage. |
Response
{
"data": {
"list": [
{
"deleted": false,
"_id": "628b8f475117ec5e5435e5de",
"serviceType": 28038,
"serviceName": "Eneo Post payment",
"partnerMerchantCode": "ENEO",
"partnerServiceId": "10039",
}
],
"limit": 20,
"total": 1,
"currentPage": 1,
"hasMore": false,
"totalPages": 1
},
"success": true
}
trec
Cart API
GET CART ITEMS
Returns all items in the identified user's cart according to a specific MP.
https Request
GET https://host/~/cartitem/list
Request Header Parameters
| Parameter | Type | required | Description |
|---|---|---|---|
| Authorization | String | true | user' Bearer token, as sent from the front-end (eg: Bearer <userToken>) |
Response
{
"data": {
"list": [
{
"cartId": "3",
"status": "1",
"itemId": "12",
"userId": "e457572597c94da5a35ffcf15c23661e",
"qty": "1",
"scopeId": "2abnjls9no8pe6",
"createdAt": "2021-11-12 06:38:09",
"updatedAt": "2021-11-12 13:49:55",
"itemName": "Ndole",
"itemPrice": "3000",
"itemCoverImage": ""
}
],
"total": 1
},
"success": true,
"errorCode": 0,
"errorMsg": ""
}
Data keys description
| Key | Type | Description |
|---|---|---|
| cartId | String | Cart item Id(unique) |
| itemId | String | Product Id(unique) |
| status | String number | Cart item Id(unique) |
| qty | Float | Quantity of item/product ordered |
| scopeId | String | Queried application Id |
| createdAt | DateTime | Date and time at wich the record was saved. |
| updatedAt | DateTime | Date and time at wich the record was updated for the last time. |
| itemName | String | Product/item's name. |
| itemPrice | String number | Product/item's price. |
| itemCoverImage | String | Product/item's cover image. |
ADD OR UPDATE CART ITEM
Adds or updates a single item in the identified user's cart according to a specific MP.
https Request
POST https://host/~/cartitem/setItem
Request Header Parameters
| Parameter | Type | required | Description |
|---|---|---|---|
| Authorization | String | true | user' Bearer token, as sent from the front-end (eg: Bearer <userToken>) |
Request Body Parameters
| Parameter | Type | required | Description |
|---|---|---|---|
| itemId | String | true | Product Id (unique) |
| qty | number | true | Quantity of item/product ordered (min value: 1) |
Response
Returns the created/updated item.
Success response
{
"data": {
"cartId": "7",
"status": "1",
"itemId": "16",
"userId": "e457572597c94da5a35ffcf15c23661e",
"qty": "3",
"scopeId": "2abnjls9no8pe6",
"createdAt": "2021-11-12 09:09:57",
"updatedAt": "2021-11-12 09:09:57"
},
"success": true,
"errorCode": 0,
"errorMsg": ""
}
Errors reponses
None of all required params provided
{
"data": null,
"success": true,
"errorCode": 0,
"errorMsg": "Invalid Params"
}
Some required params are missing
{
"data": null,
"success": true,
"errorCode": 0,
"errorMsg": "No item id given"
}{
"data": null,
"success": true,
"errorCode": 0,
"errorMsg": "No quantity given"
}
Quantity lower or equals to 0
{
"data": null,
"success": true,
"errorCode": 0,
"errorMsg": "Invalid quantity provided"
}
Unknown handled issue
{
"data": null,
"success": true,
"errorCode": 0,
"errorMsg": "Something went wrong while processing. Please retry in few minutes"
}
DELETE CART ITEM
Drop one item in the identified user's cart.
https Request
1. Delete by cart identifier
POST https://host/~/cartitem/deleteItem
2. Delete by product/item identifier
POST https://host/~/cart/deleteItemByItemId
Request Header Parameters
| Parameter | Type | required | Description |
|---|---|---|---|
| Authorization | String | true | user' Bearer token, as sent from the front-end (eg: Bearer <userToken>) |
Request Body Parameters
1. Delete by cart identifier
| Parameter | Type | required | Description |
|---|---|---|---|
| cartId | Number | true | Card item Id |
2. Delete by product/item identifier
| Parameter | Type | required | Description |
|---|---|---|---|
| itemId | Number/String | true | Product / Item Id |
Response
Returns true if well done or false if something went wrong.
Success Response
{
"data": true,
"success": true,
"errorCode": 0,
"errorMsg": ""
}
Error Response
{
"data": false,
"success": true,
"errorCode": 0,
"errorMsg": ""
}
DELETE CART
Deletes all elements in the identified user's cart.
https Request
DELETE|POST https://host/~/cartitem/delete
Request Header Parameters
| Parameter | Type | required | Description |
|---|---|---|---|
| Authorization | String | true | user' Bearer token, as sent from the front-end (eg: Bearer <userToken>) |
Response
Returns true if well done or false if something went wrong.
Success Response
{
"data": true,
"success": true,
"errorCode": 0,
"errorMsg": ""
}
Error Response
{
"data": false,
"success": true,
"errorCode": 0,
"errorMsg": ""
}
SET FULL CART
Adds, Updates and Deletes cart items in the identified user's cart.
https Request
POST|PUT https://host/~/cartitem/setFullCart
Request Header Parameters
| Parameter | Type | required | Description |
|---|---|---|---|
| Authorization | String | true | user' Bearer token, as sent from the front-end (eg: Bearer <userToken>) |
Body Parameters
| Parameter | Type | required | Description |
|---|---|---|---|
| items | Array<{itemId: number; qty: number}> | true | Full cart items that will overrides the existing ones. |
Response
Returns all items in the identified user's cart.
Success Response
{
"data": {
"list": [
{
"cartId": "3",
"status": "1",
"itemId": "12",
"userId": "e457572597c94da5a35ffcf15c23661e",
"qty": "1",
"scopeId": "2abnjls9no8pe6",
"createdAt": "2021-11-12 06:38:09",
"updatedAt": "2021-11-12 13:49:55",
"itemName": "Ndole",
"itemPrice": "3000",
"itemCoverImage": ""
}
],
"total": 1
},
"success": true,
"errorCode": 0,
"errorMsg": ""
}
Errors reponses
None of all required params provided
{
"data": null,
"success": true,
"errorCode": 0,
"errorMsg": "Invalid Params"
}
Required param items is missing
{
"data": null,
"success": true,
"errorCode": 0,
"errorMsg": "No items given"
}
Required param items is not an array
{
"data": null,
"success": true,
"errorCode": 0,
"errorMsg": "Invalid param : items"
}
Some items in items doesn't have the itemId key
{
"data": null,
"success": true,
"errorCode": 0,
"errorMsg": "Missinng required value for itemId"
}
Some items in items doesn't have the qty key or its value is either not an integer or <= 0
{
"data": null,
"success": true,
"errorCode": 0,
"errorMsg": "Bad value provided for qty"
}
Some items are duplicated
{
"data": null,
"success": true,
"errorCode": 0,
"errorMsg": "Some items are duplicated"
}
NB : Note that all error response shown here are returned in handled error scenario. Incase of unhandled error, a dedicated response will be sent.
reviews
Summary
The Reviews API is designed to help create a back-end for desktop workers (maybe customer support or analysts) be able to just view the reviews submitted by the users, reviewing their their merchants.
**CASL actions**: Read **Resource**: Review **API Service code**: aa038
Usage
POST https://staging-api.tranzak.me/aa038/v1/reviews
An example on how to consume the api to get all reviews
funcName: (params = {}) => request.post("https://staging-api.tranzak.me/aa038/v1/reviews/all", params)
Visit the reviews.route.js file in the backend for more details on how to retrieve and post data of different types.
Query response
{
"comment": "This is a comment",
"ratings": 4,
"ratingsProduct": 4,
"ratingsService": 4,
"ratingsEnvironment": 4,
"ratingScene": 1,
"userId": "xdy12y3",
"merchantId": "fd1234",
"transactionId": "21334534",
"appId": "id2131",
"status": 1,
"createdAt": "2021-12-12TZ12:03"
},
Parameter Details
| Parameter | Type | required | Description |
|---|---|---|---|
| page | Number | true | The current page starting from 1 |
| pageSize | Number | true | The limit to how many rows of reviews can be downloaded per page (Default is 10) |
| searchParams | Object | false | These are the parameters used when searching for content in the database. They are currently set to search for data by; Date range (String) when the entry was created. Merchant name (String). Status (Number) |
components
##Merchant Settings

