Version Date Description Author
1 22-10-2021 Sprint 3 req based on BRD Saurabh
Contents
Upesi<>Fable Sprint 3:...........................................................................................................................1
Send Money:.........................................................................................................................................1
Exchange Rate calculation:....................................................................................................................2
Get APIs for Countries, Currencies & Purposes:....................................................................................3
Transaction review:...............................................................................................................................6
Transaction Confirmation:.....................................................................................................................8
Failure of Make Payment:......................................................................................................................9
Upesi<>Fable Sprint 3:
Sprint 3 will cover transaction booking journey which has:
o Send Money page - Exchange rate
o Transaction booking – review and confirmation page
Send Money:
Customer will land on send money page as shown above
1. Receiving country dropdown will be populated by calling.
/api/Utility/GetOperationalCountries
2. Simultaneously /api/Utility/GetAvailableCurrencies/{countryId} will be called to get the FCY
of the country selected
3. Local currency will always be KES
4. Payment option will always be mPesa
5. Send To dropdown will be populated by: /api/Beneficiary/GetBeneficiaries
6. Amount Dropdown will have KES and FCY which was received from Get Available Currencies
7. Purpose of sending dropdown will be populated by:
/api/Transaction/GetPurposeofRemittance
Exchange Rate calculation:
1. When customer enters the value in amount parameter call the following API based on the
currency type selected
2. If LCY is selected and amount is entered, then call: /api/Transaction/GetSenderAmount
3. If FCY is selected and amount is entered, then call: /api/Transaction/GetReceiverAmount
4. Populate Total amount field based on LCY response field: receiverAmount
5. Populate Fees with: fees
6. Populate Exchange Rate field from response: exchangeRate
7. Populate Receiving amount field based on FCY response field: receiverAmount
API:
/api/Transaction/GetReceiverAmount - if FCY is entered
{
"fromCountryID": 0,
"fromCurrencyID": 0,
"toCountryID": 0,
"toCurrencyID": 0,
"serviceTypeID": 0,
"amount": 0
}
res:
{
"sendAmount": 0,
"fees": 0,
"exciseDutyRate": 0,
"exciseDutyAmount": 0,
"exchangeRate": 0,
"recieverAmount": 0
}
/api/Transaction/GetSenderAmount - if LCY is entered
req:
{
"fromCountryID": 0,
"fromCurrencyID": 0,
"toCountryID": 0,
"toCurrencyID": 0,
"serviceTypeID": 0,
"amount": 0
}
res:
{
"sendAmount": 0,
"fees": 0,
"exciseDutyRate": 0,
"exciseDutyAmount": 0,
"exchangeRate": 0,
"recieverAmount": 0
}
Get APIs for Countries, Currencies & Purposes:
/api/Utility/GetOperationalCountries
req: no params
res:
[
{
"name": "string",
"capital": "string",
"code": "string",
"currencyID": 0,
"id": 0,
"createdOnStr": "string",
"createdAtStr": "string",
"createdOn": "2021-10-22T06:46:48.944Z",
"createdBy": "string",
"updatedBy": "string",
"approvedBy": "string",
"updatedOn": "2021-10-22T06:46:48.945Z",
"approvedOn": "2021-10-
22T06:46:48.945Z",
"active": true,
"hasError": true,
"errorMessage": "string",
"paginationInfo": {
"currentPage": 0,
"pageSize": 0,
"total": 0,
"nextPageText": "string",
"prevPageText": "string",
"text": "string"
}
}
]
/api/Utility/GetAvailableCurrencies/
{countryId}
req:
countryId
res:
[
{
"name": "string",
"code": "string",
"symbol": "string",
"nameCode": "string",
"id": 0,
"createdOnStr": "string",
"createdAtStr": "string",
"createdOn": "2021-10-22T06:49:03.931Z",
"createdBy": "string",
"updatedBy": "string",
"approvedBy": "string",
"updatedOn": "2021-10-22T06:49:03.931Z",
"approvedOn": "2021-10-
22T06:49:03.931Z",
"active": true,
"hasError": true,
"errorMessage": "string",
"paginationInfo": {
"currentPage": 0,
"pageSize": 0,
"total": 0,
"nextPageText": "string",
"prevPageText": "string",
"text": "string"
}
}
]
/api/Transaction/GetPurposeofRemittance
req: No params
res:
{
"items": [
{
"name": "string",
"description": "string",
"systemCategoryContext": "string",
"systemCategoryType": "string",
"id": 0,
"createdOnStr": "string",
"createdAtStr": "string",
"createdOn": "2021-10-
22T06:55:21.427Z",
"createdBy": "string",
"updatedBy": "string",
"approvedBy": "string",
"updatedOn": "2021-10-
22T06:55:21.427Z",
"approvedOn": "2021-10-
22T06:55:21.427Z",
"active": true,
"hasError": true,
"errorMessage": "string",
"paginationInfo": {
"currentPage": 0,
"pageSize": 0,
"total": 0,
"nextPageText": "string",
"prevPageText": "string",
"text": "string"
}
}
],
"paginationInfo": {
"currentPage": 0,
"pageSize": 0,
"total": 0,
"nextPageText": "string",
"prevPageText": "string",
"text": "string"
}
}
Transaction review:
Customer will land on transaction review page after adding/selecting a bene and completing KYC.
Customer will enter their mPesa mobile number and submit.
API to call:
1. /api/Transaction/AddCustomerTransaction
2. /api/Transaction/MakeOnlinePayment
/api/Transaction/AddCustomerTransaction Values to send
req:
{
"transactionReferenceNumber": "string", blank
"documentUploadID": 0, 0
"sourceofFundID": 0, 0
"purposeofRemittance": "string", Family Maintainence
"beneficiaryID": 0, Id of bene selected
"principalID": 0, 0
"serviceTypeID": 0, 0
Bank ID received for the beneficiary(only for bank
"beneficiaryBankDetailID": 0, bene)
"beneficiaryLocationID": 0, 0
"beneficiaryMobileWalletDetailID": 0, 0
"fromCountryID": 0, Upesi to confirm
"fromCurrencyID": 0, Upesi to confirm
"toCountryID": 0, To country ID received from operational countries
"toCurrencyID": 0, To currency ID received from available curriences
"amount": 0, Upesi to confirm
"city": "string", Null
"state": "string", Null
"address": "string", Null
"id": 0, 1-bank, 2-cash pickup, 3-Wallet
"createdOn": "2021-10-22T07:05:35.935Z",
"createdBy": "string",
"updatedBy": "string",
"approvedBy": "string",
"updatedOn": "2021-10-22T07:05:35.935Z",
"approvedOn": "2021-10-
22T07:05:35.935Z",
"active": true,
"errorMessage": "string",
"paginationInfo": {
"currentPage": 0,
"pageSize": 0,
"total": 0,
"nextPageText": "string",
"prevPageText": "string"
}
}
res:
{
"transactionReferenceNumber": "string",
"documentUploadID": 0,
"sourceofFundID": 0,
"purposeofRemittance": "string",
"beneficiaryID": 0,
"principalID": 0,
"serviceTypeID": 0,
"beneficiaryBankDetailID": 0,
"beneficiaryLocationID": 0,
"beneficiaryMobileWalletDetailID": 0,
"fromCountryID": 0,
"fromCurrencyID": 0,
"toCountryID": 0,
"toCurrencyID": 0,
"amount": 0,
"city": "string",
"state": "string",
"address": "string",
"id": 0,
"createdOnStr": "string",
"createdAtStr": "string",
"createdOn": "2021-10-22T07:06:33.423Z",
"createdBy": "string",
"updatedBy": "string",
"approvedBy": "string",
"updatedOn": "2021-10-22T07:06:33.423Z",
"approvedOn": "2021-10-
22T07:06:33.423Z",
"active": true,
"hasError": true,
"errorMessage": "string",
"paginationInfo": {
"currentPage": 0,
"pageSize": 0,
"total": 0,
"nextPageText": "string",
"prevPageText": "string",
"text": "string"
}
}
/api/Transaction/
MakeOnlinePayment Values
req:
{
Reference number received in previous
"transactionID": 0, API
"msisdn": "string", Sender Mobile number
"mpesaCode": "string" blank
}
res:
success code 200
string
Transaction Confirmation:
Display the reference number in Upesi transaction no.
Failure of Make Payment:
In case the MakeOnlinePayment fails due to any reason the transaction will be displayed on status
tracker and dashboard with a CTA to make the payment.
System will call API to get transactions
When the customer clicks on Make payment a popup will open to enter the mobile number.
Once the mobile is entered and submitted system will call MakeOnlinePayment API if the action is
taken within 24 hours.
If the action is taken after 24 hours then first call
getSenderAmount where we send the receiving amount in request.
After getting the revised amount call the MakeOnlinePayment.