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.

api interfaces payee side

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).

p2p e2e detailed multi stage
Figure 1. Peer-to-peer transfer

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 to true

  • RESOURCE_VERSIONS must contain the string transfers=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,"