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,"