SCT & SCT Instant Payments workflow


The flow for SCT Payments and SCT Instant Payments follows the generic guidelines shown in the Payment Workflow page.

In addition, SCT Instant Payments have one more API to call: the /execution/status API to get the actual execution status of the payment (i.e. the verification that the funds have been deliveder to the creditor account). This API should be called in polling mode.

The Verification of Payee (VoP), instead, is obligation of the PISP, so it won't be integrated into our SCT Instant API flow (see Article 5c/2 of the REGULATION (EU) 2024/886 and Question 135 in Clarification of requirements of the Instant Payments Regulation).

SCT Instant Payment flow diagram

Here's a complete schema of a login + SCT Instant Payment flow:

Instant payment flow

SCT Payment flow diagram

Here's a complete schema of a standard SCT Payment flow:

SCT payment flow

Complete example - instant payment

Here you will find a complete workflow for the SCT Instant operation, with all the requests and responses that a TPP should manage.

The authorization phase (what happens between the /private/auth/security/sca/{resourceId}/approach and the TPP_CALLBACK_AFTER_SCA) is a blackbox for the TPP, since it's managed completely by Mediobanca Premier systems.

This example refers to the Instant Payment case, which has one additional step at the end of the flow (in respect to other payment operations) to obtain the actual execution status for the operation.

Prepare data (optional)

This API is used to obtain some generic information about the payment operation (e.g. the allowed dates, holidays, the available currencies, etc.)

GET https://external-api.mediobancapremier.io/private/customers/1134596/products/0001486570/moneyTransfer/prepare

Response:
{
    "data": {
        "abi": "03058",
        "sepa": true,
        "swift": true,
        "swiftcontractSigned": true,
        "initialData": {

        },
        "executionDateMinimumWireTransferAtBank": "03/09/2019",
        "executionDateMinimumWireTransferInternal": "03/09/2019",
        "flagUrgency": false,
        "ABI": "03058",
        "addBeneficiary": true,
        "editBeneficiary": true,
        "today": "03/09/2019",
        "executionDateLimit": "03/09/2020",
        "holidays": ["01/01/2020",
        "25/12/2019",
        "01/05/2020",
        "13/04/2020",
        "26/12/2019"],
        "currency": {
            "currencyList": [{
                "label": "Euro - EUR",
                "value": "EUR",
                "rate": ""
            },
            {
                "label": "Dollaro americano - USD",
                "value": "USD",
                "rate": ""
            },
            ...
            {
                "label": "Zloty polacco - PLN",
                "value": "PLN",
                "rate": ""
            }],
            "updated": {
                "date": "03/09/2019",
                "hour": "17:56"
            },
            "selected": "EUR"
        },
        "SEPA": true,
        "SWIFT": true,
        "SWIFTContractSigned": true,
        "countries": [{
            "label": "ABU DHABI",
            "value": "0238"
        },
        {
            "label": "AFGHANISTAN",
            "value": "0002"
        }
        ...
        ]
    },
    "result": {
        "requestId": "XW6NIgrZ5gsAAG@Cr04AAABV",
        "outcome": "SUCCESS",
        "flushMessages": false,
        "messages": []
    },
    "_links": {
        "next": {
            "href": "verify",
            "method": "POST"
        },
        "self": {
            "href": "prepare",
            "method": "GET"
        },
        "curies": [{
            "href": "https://external-api.mediobancapremier.io/private/customers/1134596/products/0001486570/moneyTransfer/{rel}",
            "name": "moneyTransfer"
        }]
    },
    "_embedded": {

    }
}
Insert and validate data

With this API, you can insert the data for the payment; note that this API does not actually execute the payment, which still has to be authorized.

POST https://external-api.mediobancapremier.io/private/customers/1134596/products/0001486570/moneyTransfer/verify

Request:
{
    "data": {
        "moneyTransferAmount": {
            "currency": "EUR",
            "amount": "1.00"
        },
        "flagUrgency": false,
        "type": "INSTANT",
        "moneyTransferExecutionDate": "03/09/2019",
        "ibanBeneficiary": "IT78Q0347551609CC0099237243",
        "beneficiaryName": "Mario Rossi",
        "description": "payment to Mario Rossi"
    }
}
Response:
{
    "data": {
        "totalAmount": {
            "amount": "1.00",
            "currency": "EUR"
        },
        "commissions": {
            "commissions": "0.00",
            "currency": "EUR"
        },
        "equivalentAmount": {
            "amount": "",
            "currency": ""
        },
        "bankName": "UNICREDIT BANCA DI ROMA SPA",
        "branchName": "ROMA 80 - PIAZZA MONTE",
        "address": "PIAZZA MONTE DI PIETA, 3 - 00186 ROMA (RM)",
        "moneyTransferOffline": false,
        "holdersEnabled": false,
        "additionalChecks":[]
    },
    "result": {
        "requestId": "XW6O4grZ5gsAAG@Css4AAABd",
        "outcome": "SUCCESS",
        "flushMessages": true,
        "messages": []
    },
    "_links": {
        "next": {
            "href": "5c99d862-6917-4006-b9a6-e5677e8a867b/execute",
            "method": "PUT"
        },
        "self": {
            "href": "verify",
            "method": "POST"
        },
        "curies": [{
            "href": "https://external-api.mediobancapremier.io/private/customers/1134596/products/0001486570/moneyTransfer/{rel}",
            "name": "moneyTransfer"
        }]
    },
    "_embedded": {},
    "resources": {
        "resourceId": "5c99d862-6917-4006-b9a6-e5677e8a867b"
    }
}
Start authorization flow

GET https://external-api.mediobancapremier.io/private/auth/security/sca/5c99d862-6917-4006-b9a6-e5677e8a867b/approach

Response
{
  "resources": {
    "resourceId": "5c99d862-6917-4006-b9a6-e5677e8a867b"
  },
  "result": {
    "result": {
        "requestId": "XW6O4grZ5gqXAG@Css4AAACZ",
        "outcome": "SUCCESS",
        "flushMessages": true,
        "messages": []
    },
    "_links": {},
    "_embedded": {},
    "data": {
        "scaRedirectURL": "https://clienti.mediobancapremier.com/sca-authorize/?resourceId=5c99d862-6917-4006-b9a6-e5677e8a867b",
        "chosenScaApproach": "REDIRECT"
    }
}
Check authorization status

GET https://external-api.mediobancapremier.io/private/operations/5c99d862-6917-4006-b9a6-e5677e8a867b/status

Response
{
    "data": {
        "creationTimestamp": "2019-09-03T18:14:25",
        "authorizationStatus": "AUTHORIZED",
        "executionStatus": "PENDING"
    },
    "result": {
        "requestId": "XW6RYgra5AsAAO6Nv94AAABY",
        "outcome": "SUCCESS",
        "flushMessages": true,
        "messages": []
    },
    "_embedded": {  },
    "resources": {
        "resourceId": "5c99d862-6917-4006-b9a6-e5677e8a867b"
    }
}
Execute operation

This API actually executes the payment, with the data the customer already inserted before.

The operation with those data has been authorized with a SCA (if not, the /execute API will fail).

PUT https://external-api.mediobancapremier.io/private/customers/1134596/products/0001486570/moneyTransfer/5c99d862-6917-4006-b9a6-e5677e8a867b/execute

Response:
{
    "data": {
        "cro": "1909031807313004480160433140IT12470",
        "moneyTransferOffline": false,
        "sendEmailEnabled": true
    },
    "result": {
        "requestId": "XW6PwgrZ5gsAAG@CtFYAAABY",
        "outcome": "SUCCESS",
        "flushMessages": true,
        "messages": [{
            "code": "BONIFICO24",
            "message": "Hai effettuato un bonifico a Mario Rossi!",
            "type": "SUCCESS"
        },
        {
            "code": "BONIFICO23",
            "message": "Una volta prodotta, troverai la contabile delle tue operazioni nell'Archivio presente nel menù di destra. Seleziona il conto e le date di riferimento. La troverai in un click!",
            "type": "INFO"
        }]
    },
    "_links": {
        "self": {
            "href": "5c99d862-6917-4006-b9a6-e5677e8a867b/execute",
            "method": "PUT"
        },
        "curies": [{
            "href": "https://external-api.mediobancapremier.io/private/customers/1134596/products/0001486570/moneyTransfer/{rel}",
            "name": "moneyTransfer"
        }]
    },
    "_embedded": {
        "polling": {
            "href": "https://external-api.mediobancapremier.com/private/customers/1134596/products/0001486570/moneyTransfer/5c99d862-6917-4006-b9a6-e5677e8a867b/execution/status",
            "method": "GET"
        }
    },
    "resources": {
        "resourceId": "5c99d862-6917-4006-b9a6-e5677e8a867b"
    }
}
Retrieve execution status

The SCT Instant payment operation should finish in maximum 10 seconds; so you can invoke the following endpoint, in polling mode, to get the actual execution status (i.e. to know if the funds have been delivered to the creditor account).

This API should be called only if the previous /execute API finished with a success status (200).

Our advice is to call this endpoint every 3/5 seconds, with a delay of at least one second since the end of the /execute API call. The final status of the payment should be available after a maximum of 10 seconds; to have a margin, in case of any problem, we suggest to schedule the last call in polling mode after 15 seconds.

Note that this API should be called only if the payment is for immediate execution, not in case of future-dated payments.

GET https://external-api.mediobancapremier.io/private/customers/1134596/products/0001486570/moneyTransfer/5c99d862-6917-4006-b9a6-e5677e8a867b/execution/status

Response:
{
    "data": {
        "executionStatus": "OK|KO|PENDING",
        "executionStatusDescription": "Description in case of error occurred"
    },
    "result": {
        "requestId": "XW6PwgrZ5gsAAG@CtFYAAABY",
        "outcome": "SUCCESS",
        "flushMessages": true,
        "messages": [{
            "code": "BONIFICO24",
            "message": "Hai effettuato un bonifico a Mario Rossi!",
            "type": "SUCCESS"
        },
        {
            "code": "BONIFICO23",
            "message": "Una volta prodotta, troverai la contabile delle tue operazioni nell'Archivio presente nel menù di destra. Seleziona il conto e le date di riferimento. La troverai in un click!",
            "type": "INFO"
        }]
    },
    "_links": {
        "self": {
            "href": "5c99d862-6917-4006-b9a6-e5677e8a867b/execution/status",
            "method": "PUT"
        },
        "curies": [{
            "href": "https://external-api.mediobancapremier.io/private/customers/1134596/products/0001486570/moneyTransfer/{rel}",
            "name": "moneyTransfer"
        }]
    },
    "_embedded": {},
    "resources": {
        "resourceId": "5c99d862-6917-4006-b9a6-e5677e8a867b"
    }
}