Integration as a Payee DFSP
The following diagram illustrates how a Payee DFSP interacts with Payment Manager and the Mojaloop Switch at the level of API calls.
![]() The interface between the Mojaloop Switch and the Mojaloop Connector is the asynchronous Mojaloop FSPIOP API. The simplified API between the Mojaloop Connector and the Core Connector is a synchronous HTTP API (Payment Manager OSS API). |
Example GET /parties/{idType}/{idValue}
request
The following example shows a GET /parties/{idType}/{idValue}
request (Step 14 in the diagram above).
GET /parties/MSISDN/987654321 HTTP/1.1
Content-Type: application/json
Example error response to GET /parties/{idType}/{idValue}
The following example shows a response to a GET /parties/{idType}/{idValue}
request when the Payee is not found (Step 18 in the diagram above).
The DFSP backend must set an HTTP error status code in the response. |
For a detailed list of Mojaloop error codes and their description, see API Definition v1.1 (Open API for FSP Interoperability Specification). |
HTTP/1.1 500 Internal Server Error
Content-Type: application/json
{
"statusCode": "3204",
"message": "Party not found"
}
Example success response to GET /parties/{idType}/{idValue}
The following example shows a response to a GET /parties/{idType}/{idValue}
request when the request is successful (Step 25 in the diagram above).
HTTP/1.1 200 OK
Content-Type: application/json
{
"type": "CONSUMER",
"idType": "MSISDN",
"idValue": "987654321",
"displayName": "Aamir Fakhir",
"firstName": "Aamir",
"middleName": "Abdel",
"lastName": "Fakhir"
}
Example POST /quoterequests
request
The following example shows a POST /quoterequests
request (Step 38 in the diagram above).
POST /quoterequests
Content-Type: application/json
Accept: application/json
{
"quoteId": "7c23e80c-d078-4077-8263-2c047876fcf6",
"transactionId": "85feac2f-39b2-491b-817e-4a03203d4f14",
"to": {
"type": "CONSUMER",
"idType": "MSISDN",
"idValue": "987654321",
"displayName": "Aamir Fakhir",
"firstName": "Aamir",
"middleName": "Abdel",
"lastName": "Fakhir"
},
"from": {
"type": "CONSUMER",
"idType": "MSISDN",
"idValue": "123456789",
"displayName": "Antoine Dujardin",
"firstName": "Antoine",
"middleName": "Paul",
"lastName": "Dujardin"
},
"amountType": "SEND",
"amount": "50",
"currency": "EUR",
"feesAmount": "0",
"feesCurrency": "EUR",
"transactionType": "TRANSFER",
"initiator": "PAYER",
"initiatorType": "CONSUMER",
"geoCode": {
"latitude": "43.6047",
"longitude": "1.4442"
},
"note": "from Antoine",
"expiration": "2021-06-15T13:31:11.500Z"
}
Example error response to POST /quoterequests
The following example shows a response to a POST /quoterequests
request when the request returns an error due to a temporary failure (Step 41 in the diagram above).
The DFSP backend must set an HTTP error status code in the response. |
For a detailed list of Mojaloop error codes and their description, see API Definition v1.1 (Open API for FSP Interoperability Specification). |
HTTP/1.1 500 Internal Server Error
Content-Type: application/json
{
"statusCode": "2003",
"message": "Service currently unavailable"
}
Example success response to POST /quoterequests
The following example shows a response to a POST /quoterequests
request when the request is successful (Step 49 in the diagram above).
HTTP/1.1 200 OK
Content-Type: application/json
{
"quoteId": "7c23e80c-d078-4077-8263-2c047876fcf6",
"transactionId": "85feac2f-39b2-491b-817e-4a03203d4f14",
"transferAmount": "50",
"transferAmountCurrency": "EUR",
"payeeFspFeeAmount": "0",
"payeeFspFeeAmountCurrency": "EUR",
"payeeFspCommissionAmount": "0",
"payeeFspCommissionAmountCurrency": "EUR",
"expiration": "2021-06-15T13:31:11.500Z",
"geoCode": {
"latitude": "43.6047",
"longitude": "1.4442"
}
}
Example POST /transfers
request
The following example shows a POST /transfers
request (Step 69 in the diagram above).
POST /transfers
Content-Type: application/json
Accept: application/json
{
"transferId": "85feac2f-39b2-491b-817e-4a03203d4f14",
"quote": {
"quoteId": "7c23e80c-d078-4077-8263-2c047876fcf6",
"transactionId": "85feac2f-39b2-491b-817e-4a03203d4f14",
"transferAmount": "50",
"transferAmountCurrency": "EUR",
"payeeFspFeeAmount": "0",
"payeeFspFeeAmountCurrency": "EUR",
"payeeFspCommissionAmount": "0",
"payeeFspCommissionAmountCurrency": "EUR",
"expiration": "2021-06-15T13:31:11.500Z",
"geoCode": {
"latitude": "43.6047",
"longitude": "1.4442"
}
},
"from": {
"type": "CONSUMER",
"idType": "MSISDN",
"idValue": "123456789",
"displayName": "Antoine Dujardin",
"firstName": "Antoine",
"middleName": "Paul",
"lastName": "Dujardin"
},
"to": {
"type": "CONSUMER",
"idType": "MSISDN",
"idValue": "987654321",
"displayName": "Aamir Fakhir",
"firstName": "Aamir",
"middleName": "Abdel",
"lastName": "Fakhir"
},
"amountType": "SEND",
"currency": "EUR",
"amount": "50",
"transactionType": "TRANSFER",
"note": "from Antoine"
}
Example error response to POST /transfers
The following example shows a response to a POST /transfers
request when the request fails in the Payee DFSP (for example, a check to ensure that the customer does not receive money above a certain amount per transfer fails) (Step 73 in the diagram above).
The DFSP backend must set an HTTP error status code in the response. |
For a detailed list of Mojaloop error codes and their description, see API Definition v1.1 (Open API for FSP Interoperability Specification). |
HTTP/1.1 500 Internal Server Error
Content-Type: application/json
{
"statusCode": "5200",
"message": "Payee limit error"
}
Example success response to POST /transfers
The following example shows a response to a POST /transfers
request when the request is successful (Step 84 in the diagram above).
When the Payee DFSP is informed about the incoming transfer request, it performs internal checks (for example, a check to ensure that the customer does not receive money above a certain amount per transfer). If all checks pass, it reserves funds and confirms that they are OK to go ahead with the transfer.
HTTP/1.1 200 OK
Content-Type: application/json
{
"homeTransactionId": "53979be2-3bfe-45aa-ade7-92ea4ce4e74e"
}
Example PUT /transfers/{transferId}
notification
The following example shows a PUT /transfers/{transferId}
notification (Step 93 in the diagram above) when:
-
the Payee DFSP has confirmed that they are OK to go ahead with the transfer, and
-
the transfer fails validation of the fulfilment and expiry timestamp in the Switch
The notification acts as a failure notice, indicating to the Payee DFSP that they should not release funds to their customer’s account as the transfer did not happen.
HTTP/1.1 200 OK
Content-Type: application/json
{
"transferId":"85feac2f-39b2-491b-817e-4a03203d4f14",
"direction":"INBOUND",
"quoteRequest":{
"headers":{
"content-type":"application/vnd.interoperability.quotes+json;version=1.0",
"date":"Tue, 15 Jun 2021 13:30:11 GMT",
"fspiop-source":"walletABC",
"fspiop-destination":"walletXYZ",
"authorization":"Bearer 74b241a2-4200-3938-8dfc-0e26ba21dc22",
"accept":"application/vnd.interoperability.quotes+json;version=1",
"content-length":685,
"host":"walletXYZ-mojaloop-connector:4000",
"connection":"close"
},
"body":{
"quoteId":"7c23e80c-d078-4077-8263-2c047876fcf6",
"transactionId":"85feac2f-39b2-491b-817e-4a03203d4f14",
"amountType":"SEND",
"amount":{
"currency":"EUR",
"amount":"50"
},
"expiration":"2021-06-15T13:31:11.456Z",
"payer":{
"partyIdInfo":{
"partyIdType":"MSISDN",
"partyIdentifier":"123456789",
"fspId":"walletABC"
},
"name":"Antoine Dujardin"
},
"payee":{
"partyIdInfo":{
"partyIdType":"MSISDN",
"partyIdentifier":"987654321",
"fspId":"walletXYZ"
},
"personalInfo":{
"complexName":{
"firstName":"Aamir",
"middleName":"Abdel",
"lastName":"Fakhir"
}
}
},
"transactionType":{
"scenario":"TRANSFER",
"initiator":"PAYER",
"initiatorType":"CONSUMER"
}
}
},
"currentState":"COMPLETED",
"initiatedTimestamp":"2021-06-15T13:30:11.470Z",
"quote":{
"request":{
"quoteId":"7c23e80c-d078-4077-8263-2c047876fcf6",
"transactionId":"85feac2f-39b2-491b-817e-4a03203d4f14",
"amountType":"SEND",
"amount":{
"currency":"EUR",
"amount":"50"
},
"expiration":"2021-06-15T13:31:11.456Z",
"payer":{
"partyIdInfo":{
"partyIdType":"MSISDN",
"partyIdentifier":"123456789",
"fspId":"walletABC"
},
"name":"Antoine Dujardin"
},
"payee":{
"partyIdInfo":{
"partyIdType":"MSISDN",
"partyIdentifier":"987654321",
"fspId":"walletXYZ"
},
"personalInfo":{
"complexName":{
"firstName":"Aamir",
"middleName":"Abdel",
"lastName":"Fakhir"
}
}
},
"transactionType":{
"scenario":"TRANSFER",
"initiator":"PAYER",
"initiatorType":"CONSUMER"
}
},
"internalRequest":{
"quoteId":"7c23e80c-d078-4077-8263-2c047876fcf6",
"transactionId":"85feac2f-39b2-491b-817e-4a03203d4f14",
"to":{
"idType":"MSISDN",
"idValue":"987654321",
"fspId":"walletXYZ",
"firstName":"Aamir",
"middleName":"Abdel",
"lastName":"Fakhir"
},
"from":{
"idType":"MSISDN",
"idValue":"123456789",
"fspId":"walletABC"
},
"amountType":"SEND",
"amount":"50",
"currency":"EUR",
"transactionType":"TRANSFER",
"initiator":"PAYER",
"initiatorType":"CONSUMER",
"expiration":"2021-06-15T13:31:11.456Z"
},
"response":{
"quoteId":"7c23e80c-d078-4077-8263-2c047876fcf6",
"transactionId":"85feac2f-39b2-491b-817e-4a03203d4f14",
"transferAmount":"50",
"transferAmountCurrency":"EUR",
"payeeFspFeeAmount":"0",
"payeeFspFeeAmountCurrency":"EUR",
"payeeFspCommissionAmount":"0",
"payeeFspCommissionAmountCurrency":"EUR",
"expiration":"2021-06-15T13:31:11.500Z"
},
"mojaloopResponse":{
"transferAmount":{
"amount":"50",
"currency":"EUR"
},
"expiration":"2021-06-15T13:31:11.500Z",
"ilpPacket":"AYIDUgAAAAAAAAPoIWcucGF5ZWVmc3Au
YWNjb3VudF9pZC4xNzAzOTgxMTkwN4IDJGV5SjBjbUZ1YzJGamRHbHZia2xrSWpvaU4ySTRNbUZoT0RrdE0yTTNOeTAwWmpFNUxXSTFPRFl0TlRFNU5USXlaVEJtT0RNNUlpd2ljWFZ2ZEdWSlpDSTZJamxpTWpWbFlqYzRMV05rWVRrdE5HUXhaaTFoWkRVM0xXRmlOV1pqWVdObU
1EaGtaU0lzSW5CaGVXVmxJanA3SW5CaGNuUjVTV1JKYm1adklqcDdJbkJoY25SNVNXUlVlWEJsSWpvaVFVTkRUMVZPVkY5SlJDSXNJbkJoY25SNVNXUmxiblJwWm1sbGNpSTZJakUzTURNNU9ERXhPVEEzSWl3aVpuTndTV1FpT2lKd1lYbGxaV1p6Y0NKOUxDSndaWEp6YjI1aGJF
bHVabThpT25zaVkyOXRjR3hsZUU1aGJXVWlPbnNpWm1seWMzUk9ZVzFsSWpvaVUybHRSbWx5YzNRaUxDSnRhV1JrYkdWT1lXMWxJam9pVTJsdFRXbGtaR3hsSWl3aWJHRnpkRTVoYldVaU9pSlRhVzFNWVhOMEluMHNJbVJoZEdWUFprSnBjblJvSWpvaU1qQXhNQzB4TUMweE1DSj
lmU3dpY0dGNVpYSWlPbnNpY0dGeWRIbEpaRWx1Wm04aU9uc2ljR0Z5ZEhsSlpGUjVjR1VpT2lKQlEwTlBWVTVVWDBsRUlpd2ljR0Z5ZEhsSlpHVnVkR2xtYVdWeUlqb2lNVGM0TlRVMU1ERTVNVFFpTENKbWMzQkpaQ0k2SW5CaGVXVnlabk53SW4wc0ltNWhiV1VpT2lKUVlYbGxj
a1pwY25OMElGQmhlV1Z5VEdGemRDSjlMQ0poYlc5MWJuUWlPbnNpWVcxdmRXNTBJam9pTVRBaUxDSmpkWEp5Wlc1amVTSTZJbFZUUkNKOUxDSjBjbUZ1YzJGamRHbHZibFI1Y0dVaU9uc2ljMk5sYm1GeWFXOGlPaUpVVWtGT1UwWkZVaUlzSW1sdWFYUnBZWFJ2Y2lJNklsQkJXVV
ZTSWl3aWFXNXBkR2xoZEc5eVZIbHdaU0k2SWtOUFRsTlZUVVZTSW4xOQA",
"condition":"FravH43bz3pO3AOwuaC5wo26Gv3p_rQiASsREK_ueoQ",
"payeeFspFee":{
"amount":"0",
"currency":"EUR"
},
"payeeFspCommission":{
"amount":"0",
"currency":"EUR"
}
},
"fulfilment":"ZhrKmchS4bCpaGIcu5fuLOsIFDZqTpJeYf4Q9HOYF0c"
},
"quoteResponse":{
"headers":{
"content-type":"application/vnd.interoperability.quotes+json;version=1.0",
"date":"Tue, 15 Jun 2021 13:30:11 GMT",
"fspiop-source":"walletABC",
"fspiop-destination":"walletXYZ",
"Authorization":"Bearer 74b241a2-4200-3938-8dfc-0e26ba21dc22",
"content-length":1402
},
"body":{
"transferAmount":{
"amount":"50",
"currency":"EUR"
},
"expiration":"2021-06-15T13:31:11.500Z",
"ilpPacket":"AYIDUgAAAAAAAAPoIWcucGF5ZWVmc3AuYWNjb3VudF9pZC4xNzAzOTgxM
TkwN4IDJGV5SjBjbUZ1YzJGamRHbHZia2xrSWpvaU4ySTRNbUZoT0RrdE0yTTNOeTAwWmpFNUxXSTFPRFl0TlRFNU5USXlaVEJtT0RNNUlpd2ljWFZ2ZEdWSlpDSTZJamxpTWpWbFlqYzRMV05rWVRrdE5HUXhaaTFoWkRVM0xXRmlOV1pqWVdObU1EaGtaU0lzSW5CaGVXVmxJanA
3SW5CaGNuUjVTV1JKYm1adklqcDdJbkJoY25SNVNXUlVlWEJsSWpvaVFVTkRUMVZPVkY5SlJDSXNJbkJoY25SNVNXUmxiblJwWm1sbGNpSTZJakUzTURNNU9ERXhPVEEzSWl3aVpuTndTV1FpT2lKd1lYbGxaV1p6Y0NKOUxDSndaWEp6YjI1aGJFbHVabThpT25zaVkyOXRjR3hsZ
UU1aGJXVWlPbnNpWm1seWMzUk9ZVzFsSWpvaVUybHRSbWx5YzNRaUxDSnRhV1JrYkdWT1lXMWxJam9pVTJsdFRXbGtaR3hsSWl3aWJHRnpkRTVoYldVaU9pSlRhVzFNWVhOMEluMHNJbVJoZEdWUFprSnBjblJvSWpvaU1qQXhNQzB4TUMweE1DSjlmU3dpY0dGNVpYSWlPbnNpY0d
GeWRIbEpaRWx1Wm04aU9uc2ljR0Z5ZEhsSlpGUjVjR1VpT2lKQlEwTlBWVTVVWDBsRUlpd2ljR0Z5ZEhsSlpHVnVkR2xtYVdWeUlqb2lNVGM0TlRVMU1ERTVNVFFpTENKbWMzQkpaQ0k2SW5CaGVXVnlabk53SW4wc0ltNWhiV1VpT2lKUVlYbGxja1pwY25OMElGQmhlV1Z5VEdGe
mRDSjlMQ0poYlc5MWJuUWlPbnNpWVcxdmRXNTBJam9pTVRBaUxDSmpkWEp5Wlc1amVTSTZJbFZUUkNKOUxDSjBjbUZ1YzJGamRHbHZibFI1Y0dVaU9uc2ljMk5sYm1GeWFXOGlPaUpVVWtGT1UwWkZVaUlzSW1sdWFYUnBZWFJ2Y2lJNklsQkJXVVZTSWl3aWFXNXBkR2xoZEc5eVZ
IbHdaU0k2SWtOUFRsTlZUVVZTSW4xOQA",
"condition": "FravH43bz3pO3AOwuaC5wo26Gv3p_rQiASsREK_ueoQ",
"payeeFspFee":{
"amount":"0",
"currency":"EUR"
},
"payeeFspCommission ":
"amount":"0",
"currency":"EUR"
},
"prepare":{
"body":{
"transferId":"85feac2f-39b2-491b-817e-4a03203d4f14",
"payeeFsp":"walletXYZ",
"payerFsp":"walletABC",
"amount":{
"currency":"EUR",
"amount":"50"
},
"ilpPacket":"AYIDUgAAAAAAAAPoIWcucGF5ZWVmc3AuYWNjb3VudF9pZC4xNzAzOTgxMTkwN4IDJGV5SjBjbUZ1YzJGamRHbHZia2xrSWpvaU4ySTRNbUZoT0RrdE0yTTNOeTAwWmpFNUxXSTFPRFl0TlRFNU5USXlaVEJtT0RNN
Ulpd2ljWFZ2ZEdWSlpDSTZJamxpTWpWbFlqYzRMV05rWVRrdE5HUXhaaTFoWkRVM0xXRmlOV1pqWVdObU1EaGtaU0lzSW5CaGVXVmxJanA3SW5CaGNuUjVTV1JKYm1adklqcDdJbkJoY25SNVNXUlVlWEJsSWpvaVFVTkRUMVZPVkY5SlJDSXNJbkJoY25SNVNXUmxiblJwWm1sbGN
pSTZJakUzTURNNU9ERXhPVEEzSWl3aVpuTndTV1FpT2lKd1lYbGxaV1p6Y0NKOUxDSndaWEp6YjI1aGJFbHVabThpT25zaVkyOXRjR3hsZUU1aGJXVWlPbnNpWm1seWMzUk9ZVzFsSWpvaVUybHRSbWx5YzNRaUxDSnRhV1JrYkdWT1lXMWxJam9pVTJsdFRXbGtaR3hsSWl3aWJHR
npkRTVoYldVaU9pSlRhVzFNWVhOMEluMHNJbVJoZEdWUFprSnBjblJvSWpvaU1qQXhNQzB4TUMweE1DSjlmU3dpY0dGNVpYSWlPbnNpY0dGeWRIbEpaRWx1Wm04aU9uc2ljR0Z5ZEhsSlpGUjVjR1VpT2lKQlEwTlBWVTVVWDBsRUlpd2ljR0Z5ZEhsSlpHVnVkR2xtYVdWeUlqb2l
NVGM0TlRVMU1ERTVNVFFpTENKbWMzQkpaQ0k2SW5CaGVXVnlabk53SW4wc0ltNWhiV1VpT2lKUVlYbGxja1pwY25OMElGQmhlV1Z5VEdGemRDSjlMQ0poYlc5MWJuUWlPbnNpWVcxdmRXNTBJam9pTVRBaUxDSmpkWEp5Wlc1amVTSTZJbFZUUkNKOUxDSjBjbUZ1YzJGamRHbHZib
FI1Y0dVaU9uc2ljMk5sYm1GeWFXOGlPaUpVVWtGT1UwWkZVaUlzSW1sdWFYUnBZWFJ2Y2lJNklsQkJXVVZTSWl3aWFXNXBkR2xoZEc5eVZIbHdaU0k2SWtOUFRsTlZUVVZTSW4xOQA",
"condition":"FravH43bz3pO3AOwuaC5wo26Gv3p_rQiASsREK_ueoQ",
"expiration":"2021-06-15T13:31:19.879Z"
},
"headers":{
"content-type":"application/vnd.interoperability.transfers+json;version=1.0",
"date":"Tue, 15 Jun 2021 13:30:19 GMT",
"fspiop-source":"walletABC",
"fspiop-destination":"walletXYZ",
"authorization":"Bearer 74b241a2-4200-3938-8dfc-0e26ba21dc22",
"accept":"application/vnd.interoperability.transfers+json;version=1",
"content-length":1391,
"host":"walletXYZ-mojaloop-connector:4000",
"connection":"close"
}
},
"fulfil":{
"headers":{
"content-type":"application/vnd.interoperability.transfers+json;version=1.0",
"date":"Tue, 15 Jun 2021 13:30:19 GMT",
"fspiop-source":"walletABC",
"fspiop-destination":"walletXYZ",
"Authorization":"Bearer 74b241a2-4200-3938-8dfc-0e26ba21dc22",
"content-length":135
},
"body":{
"completedTimestamp":"2021-06-15T13:30:19.912Z",
"transferState":"RESERVED",
"fulfilment":"ZhrKmchS4bCpaGIcu5fuLOsIFDZqTpJeYf4Q9HOYF0c"
}
},
"finalNotification":{
"completedTimestamp":"2021-06-15T13:30:19.920Z",
"transferState":"ABORTED"
}
}
The following example shows a PUT /transfers/{transferId}
notification (Step 102 in the diagram above) when:
-
the Payee DFSP has confirmed that they are OK to go ahead with the transfer, and
-
the transfer passes validation of the fulfilment and expiry timestamp in the Switch
The notification acts as a success confirmation, indicating to the Payee DFSP that they can go ahead and release funds to their customer’s account.
HTTP/1.1 200 OK
Content-Type: application/json
{
"transferId":"85feac2f-39b2-491b-817e-4a03203d4f14",
"direction":"INBOUND",
"quoteRequest":{
"headers":{
"content-type":"application/vnd.interoperability.quotes+json;version=1.0",
"date":"Tue, 15 Jun 2021 13:30:11 GMT",
"fspiop-source":"walletABC",
"fspiop-destination":"walletXYZ",
"authorization":"Bearer 74b241a2-4200-3938-8dfc-0e26ba21dc22",
"accept":"application/vnd.interoperability.quotes+json;version=1",
"content-length":685,
"host":"walletXYZ-mojaloop-connector:4000",
"connection":"close"
},
"body":{
"quoteId":"7c23e80c-d078-4077-8263-2c047876fcf6",
"transactionId":"85feac2f-39b2-491b-817e-4a03203d4f14",
"amountType":"SEND",
"amount":{
"currency":"EUR",
"amount":"50"
},
"expiration":"2021-06-15T13:31:11.456Z",
"payer":{
"partyIdInfo":{
"partyIdType":"MSISDN",
"partyIdentifier":"123456789",
"fspId":"walletABC"
},
"name":"Antoine Dujardin"
},
"payee":{
"partyIdInfo":{
"partyIdType":"MSISDN",
"partyIdentifier":"987654321",
"fspId":"walletXYZ"
},
"personalInfo":{
"complexName":{
"firstName":"Aamir",
"middleName":"Abdel",
"lastName":"Fakhir"
}
}
},
"transactionType":{
"scenario":"TRANSFER",
"initiator":"PAYER",
"initiatorType":"CONSUMER"
}
}
},
"currentState":"COMPLETED",
"initiatedTimestamp":"2021-06-15T13:30:11.470Z",
"quote":{
"request":{
"quoteId":"7c23e80c-d078-4077-8263-2c047876fcf6",
"transactionId":"85feac2f-39b2-491b-817e-4a03203d4f14",
"amountType":"SEND",
"amount":{
"currency":"EUR",
"amount":"50"
},
"expiration":"2021-06-15T13:31:11.456Z",
"payer":{
"partyIdInfo":{
"partyIdType":"MSISDN",
"partyIdentifier":"123456789",
"fspId":"walletABC"
},
"name":"Antoine Dujardin"
},
"payee":{
"partyIdInfo":{
"partyIdType":"MSISDN",
"partyIdentifier":"987654321",
"fspId":"walletXYZ"
},
"personalInfo":{
"complexName":{
"firstName":"Aamir",
"middleName":"Abdel",
"lastName":"Fakhir"
}
}
},
"transactionType":{
"scenario":"TRANSFER",
"initiator":"PAYER",
"initiatorType":"CONSUMER"
}
},
"internalRequest":{
"quoteId":"7c23e80c-d078-4077-8263-2c047876fcf6",
"transactionId":"85feac2f-39b2-491b-817e-4a03203d4f14",
"to":{
"idType":"MSISDN",
"idValue":"987654321",
"fspId":"walletXYZ",
"firstName":"Aamir",
"middleName":"Abdel",
"lastName":"Fakhir"
},
"from":{
"idType":"MSISDN",
"idValue":"123456789",
"fspId":"walletABC"
},
"amountType":"SEND",
"amount":"50",
"currency":"EUR",
"transactionType":"TRANSFER",
"initiator":"PAYER",
"initiatorType":"CONSUMER",
"expiration":"2021-06-15T13:31:11.456Z"
},
"response":{
"quoteId":"7c23e80c-d078-4077-8263-2c047876fcf6",
"transactionId":"85feac2f-39b2-491b-817e-4a03203d4f14",
"transferAmount":"50",
"transferAmountCurrency":"EUR",
"payeeFspFeeAmount":"0",
"payeeFspFeeAmountCurrency":"EUR",
"payeeFspCommissionAmount":"0",
"payeeFspCommissionAmountCurrency":"EUR",
"expiration":"2021-06-15T13:31:11.500Z"
},
"mojaloopResponse":{
"transferAmount":{
"amount":"50",
"currency":"EUR"
},
"expiration":"2021-06-15T13:31:11.500Z",
"ilpPacket":"AYIDUgAAAAAAAAPoIWcucGF5ZWVmc3Au
YWNjb3VudF9pZC4xNzAzOTgxMTkwN4IDJGV5SjBjbUZ1YzJGamRHbHZia2xrSWpvaU4ySTRNbUZoT0RrdE0yTTNOeTAwWmpFNUxXSTFPRFl0TlRFNU5USXlaVEJtT0RNNUlpd2ljWFZ2ZEdWSlpDSTZJamxpTWpWbFlqYzRMV05rWVRrdE5HUXhaaTFoWkRVM0xXRmlOV1pqWVdObU
1EaGtaU0lzSW5CaGVXVmxJanA3SW5CaGNuUjVTV1JKYm1adklqcDdJbkJoY25SNVNXUlVlWEJsSWpvaVFVTkRUMVZPVkY5SlJDSXNJbkJoY25SNVNXUmxiblJwWm1sbGNpSTZJakUzTURNNU9ERXhPVEEzSWl3aVpuTndTV1FpT2lKd1lYbGxaV1p6Y0NKOUxDSndaWEp6YjI1aGJF
bHVabThpT25zaVkyOXRjR3hsZUU1aGJXVWlPbnNpWm1seWMzUk9ZVzFsSWpvaVUybHRSbWx5YzNRaUxDSnRhV1JrYkdWT1lXMWxJam9pVTJsdFRXbGtaR3hsSWl3aWJHRnpkRTVoYldVaU9pSlRhVzFNWVhOMEluMHNJbVJoZEdWUFprSnBjblJvSWpvaU1qQXhNQzB4TUMweE1DSj
lmU3dpY0dGNVpYSWlPbnNpY0dGeWRIbEpaRWx1Wm04aU9uc2ljR0Z5ZEhsSlpGUjVjR1VpT2lKQlEwTlBWVTVVWDBsRUlpd2ljR0Z5ZEhsSlpHVnVkR2xtYVdWeUlqb2lNVGM0TlRVMU1ERTVNVFFpTENKbWMzQkpaQ0k2SW5CaGVXVnlabk53SW4wc0ltNWhiV1VpT2lKUVlYbGxj
a1pwY25OMElGQmhlV1Z5VEdGemRDSjlMQ0poYlc5MWJuUWlPbnNpWVcxdmRXNTBJam9pTVRBaUxDSmpkWEp5Wlc1amVTSTZJbFZUUkNKOUxDSjBjbUZ1YzJGamRHbHZibFI1Y0dVaU9uc2ljMk5sYm1GeWFXOGlPaUpVVWtGT1UwWkZVaUlzSW1sdWFYUnBZWFJ2Y2lJNklsQkJXVV
ZTSWl3aWFXNXBkR2xoZEc5eVZIbHdaU0k2SWtOUFRsTlZUVVZTSW4xOQA",
"condition":"FravH43bz3pO3AOwuaC5wo26Gv3p_rQiASsREK_ueoQ",
"payeeFspFee":{
"amount":"0",
"currency":"EUR"
},
"payeeFspCommission":{
"amount":"0",
"currency":"EUR"
}
},
"fulfilment":"ZhrKmchS4bCpaGIcu5fuLOsIFDZqTpJeYf4Q9HOYF0c"
},
"quoteResponse":{
"headers":{
"content-type":"application/vnd.interoperability.quotes+json;version=1.0",
"date":"Tue, 15 Jun 2021 13:30:11 GMT",
"fspiop-source":"walletABC",
"fspiop-destination":"walletXYZ",
"Authorization":"Bearer 74b241a2-4200-3938-8dfc-0e26ba21dc22",
"content-length":1402
},
"body":{
"transferAmount":{
"amount":"50",
"currency":"EUR"
},
"expiration":"2021-06-15T13:31:11.500Z",
"ilpPacket":"AYIDUgAAAAAAAAPoIWcucGF5ZWVmc3AuYWNjb3VudF9pZC4xNzAzOTgxM
TkwN4IDJGV5SjBjbUZ1YzJGamRHbHZia2xrSWpvaU4ySTRNbUZoT0RrdE0yTTNOeTAwWmpFNUxXSTFPRFl0TlRFNU5USXlaVEJtT0RNNUlpd2ljWFZ2ZEdWSlpDSTZJamxpTWpWbFlqYzRMV05rWVRrdE5HUXhaaTFoWkRVM0xXRmlOV1pqWVdObU1EaGtaU0lzSW5CaGVXVmxJanA
3SW5CaGNuUjVTV1JKYm1adklqcDdJbkJoY25SNVNXUlVlWEJsSWpvaVFVTkRUMVZPVkY5SlJDSXNJbkJoY25SNVNXUmxiblJwWm1sbGNpSTZJakUzTURNNU9ERXhPVEEzSWl3aVpuTndTV1FpT2lKd1lYbGxaV1p6Y0NKOUxDSndaWEp6YjI1aGJFbHVabThpT25zaVkyOXRjR3hsZ
UU1aGJXVWlPbnNpWm1seWMzUk9ZVzFsSWpvaVUybHRSbWx5YzNRaUxDSnRhV1JrYkdWT1lXMWxJam9pVTJsdFRXbGtaR3hsSWl3aWJHRnpkRTVoYldVaU9pSlRhVzFNWVhOMEluMHNJbVJoZEdWUFprSnBjblJvSWpvaU1qQXhNQzB4TUMweE1DSjlmU3dpY0dGNVpYSWlPbnNpY0d
GeWRIbEpaRWx1Wm04aU9uc2ljR0Z5ZEhsSlpGUjVjR1VpT2lKQlEwTlBWVTVVWDBsRUlpd2ljR0Z5ZEhsSlpHVnVkR2xtYVdWeUlqb2lNVGM0TlRVMU1ERTVNVFFpTENKbWMzQkpaQ0k2SW5CaGVXVnlabk53SW4wc0ltNWhiV1VpT2lKUVlYbGxja1pwY25OMElGQmhlV1Z5VEdGe
mRDSjlMQ0poYlc5MWJuUWlPbnNpWVcxdmRXNTBJam9pTVRBaUxDSmpkWEp5Wlc1amVTSTZJbFZUUkNKOUxDSjBjbUZ1YzJGamRHbHZibFI1Y0dVaU9uc2ljMk5sYm1GeWFXOGlPaUpVVWtGT1UwWkZVaUlzSW1sdWFYUnBZWFJ2Y2lJNklsQkJXVVZTSWl3aWFXNXBkR2xoZEc5eVZ
IbHdaU0k2SWtOUFRsTlZUVVZTSW4xOQA",
"condition": "FravH43bz3pO3AOwuaC5wo26Gv3p_rQiASsREK_ueoQ",
"payeeFspFee":{
"amount":"0",
"currency":"EUR"
},
"payeeFspCommission ":
"amount":"0",
"currency":"EUR"
},
"prepare":{
"body":{
"transferId":"85feac2f-39b2-491b-817e-4a03203d4f14",
"payeeFsp":"walletXYZ",
"payerFsp":"walletABC",
"amount":{
"currency":"EUR",
"amount":"50"
},
"ilpPacket":"AYIDUgAAAAAAAAPoIWcucGF5ZWVmc3AuYWNjb3VudF9pZC4xNzAzOTgxMTkwN4IDJGV5SjBjbUZ1YzJGamRHbHZia2xrSWpvaU4ySTRNbUZoT0RrdE0yTTNOeTAwWmpFNUxXSTFPRFl0TlRFNU5USXlaVEJtT0RNN
Ulpd2ljWFZ2ZEdWSlpDSTZJamxpTWpWbFlqYzRMV05rWVRrdE5HUXhaaTFoWkRVM0xXRmlOV1pqWVdObU1EaGtaU0lzSW5CaGVXVmxJanA3SW5CaGNuUjVTV1JKYm1adklqcDdJbkJoY25SNVNXUlVlWEJsSWpvaVFVTkRUMVZPVkY5SlJDSXNJbkJoY25SNVNXUmxiblJwWm1sbGN
pSTZJakUzTURNNU9ERXhPVEEzSWl3aVpuTndTV1FpT2lKd1lYbGxaV1p6Y0NKOUxDSndaWEp6YjI1aGJFbHVabThpT25zaVkyOXRjR3hsZUU1aGJXVWlPbnNpWm1seWMzUk9ZVzFsSWpvaVUybHRSbWx5YzNRaUxDSnRhV1JrYkdWT1lXMWxJam9pVTJsdFRXbGtaR3hsSWl3aWJHR
npkRTVoYldVaU9pSlRhVzFNWVhOMEluMHNJbVJoZEdWUFprSnBjblJvSWpvaU1qQXhNQzB4TUMweE1DSjlmU3dpY0dGNVpYSWlPbnNpY0dGeWRIbEpaRWx1Wm04aU9uc2ljR0Z5ZEhsSlpGUjVjR1VpT2lKQlEwTlBWVTVVWDBsRUlpd2ljR0Z5ZEhsSlpHVnVkR2xtYVdWeUlqb2l
NVGM0TlRVMU1ERTVNVFFpTENKbWMzQkpaQ0k2SW5CaGVXVnlabk53SW4wc0ltNWhiV1VpT2lKUVlYbGxja1pwY25OMElGQmhlV1Z5VEdGemRDSjlMQ0poYlc5MWJuUWlPbnNpWVcxdmRXNTBJam9pTVRBaUxDSmpkWEp5Wlc1amVTSTZJbFZUUkNKOUxDSjBjbUZ1YzJGamRHbHZib
FI1Y0dVaU9uc2ljMk5sYm1GeWFXOGlPaUpVVWtGT1UwWkZVaUlzSW1sdWFYUnBZWFJ2Y2lJNklsQkJXVVZTSWl3aWFXNXBkR2xoZEc5eVZIbHdaU0k2SWtOUFRsTlZUVVZTSW4xOQA",
"condition":"FravH43bz3pO3AOwuaC5wo26Gv3p_rQiASsREK_ueoQ",
"expiration":"2021-06-15T13:31:19.879Z"
},
"headers":{
"content-type":"application/vnd.interoperability.transfers+json;version=1.0",
"date":"Tue, 15 Jun 2021 13:30:19 GMT",
"fspiop-source":"walletABC",
"fspiop-destination":"walletXYZ",
"authorization":"Bearer 74b241a2-4200-3938-8dfc-0e26ba21dc22",
"accept":"application/vnd.interoperability.transfers+json;version=1",
"content-length":1391,
"host":"walletXYZ-mojaloop-connector:4000",
"connection":"close"
}
},
"fulfil":{
"headers":{
"content-type":"application/vnd.interoperability.transfers+json;version=1.0",
"date":"Tue, 15 Jun 2021 13:30:19 GMT",
"fspiop-source":"walletABC",
"fspiop-destination":"walletXYZ",
"Authorization":"Bearer 74b241a2-4200-3938-8dfc-0e26ba21dc22",
"content-length":135
},
"body":{
"completedTimestamp":"2021-06-15T13:30:19.912Z",
"transferState":"RESERVED",
"fulfilment":"ZhrKmchS4bCpaGIcu5fuLOsIFDZqTpJeYf4Q9HOYF0c"
}
},
"finalNotification":{
"completedTimestamp":"2021-06-15T13:30:19.920Z",
"transferState":"COMMITTED"
}
}
To ensure that the Switch does send a notification, the following environment variables must be configured in Mojaloop Connector:
-
RESERVE_NOTIFICATION
must be set totrue
-
RESOURCE_VERSIONS
must contain the stringtransfers=1.1,
RESOURCE_VERSIONS
is used to assign API versions to Content-Type
and Accept
headers dynamically. Given that the Switch notification is a feature that was introduced in Mojaloop FSPIOP API version 1.1, and that it is a feature of the /transfers
resource, Payment Manager must be set so that it uses version 1.1. of the /transfers
resource. Here is how to set resource versions:
RESOURCE_VERSIONS="resouceOneName=1.0,resourceTwoName=1.1,"
For example:
RESOURCE_VERSIONS="parties=1.0,transfers=1.1,"