Appearance
Are you an LLM? You can read better optimized documentation at /guide/transfers/credit-transfer.md for this page in Markdown format
SEPA Credit Transfers (SCT)
SEPA Credit Transfers (SCT) allow the initiator of the transfer (sender) to make Euro-denominated payments to SEPA countries accounts.
At Treezor, SCT can be used in two directions:
SCTRare Received into a Wallet and mapped to Payin objectsSCTEare Emitted from a Wallet and mapped to Payout objects
Received Credit Transfers (SCTR)
When an SCTR is received, a Payin object is created, along with a payin.create webhook.
Treezor receives batches of SCTR from other banks every worked day between 6:30 and 19:00 Paris local time. They are handled and Wallets are credited as they are received.
Tip – You can also provide Virtual IBANs to receive SCTR
Virtual IBANs have many benefits over your main IBAN (restriction in the direction they can be used, restriction in validity period, easier funds movements categorization, etc.).
The SCTR Payin object
json
{
"payins": [
{
"payinId": "12345",
"payinTag": null,
"walletId": "34567",
"userId": "852741", // Valued to 3 initially in Production. DO NOT USE.
"payinStatus": "VALIDATED", // Funds are available to the Wallet owner
"paymentMethodId": "20",
"messageToUser": "Transfer to my Wallet",
"subtotalItems": "100.00",
"subtotalServices": "0.00",
"subtotalTax": "0.00",
"amount": "100.00",
"currency": "EUR",
"createdDate": "2018-01-01 17:00:00",
"walletEventName": "Wallet Test",
"walletAlias": "test-wallet-abcd",
"userFirstname": "CMA",
"userLastname": "",
"codeStatus": "140005",
"informationStatus": "",
"refundAmount": null,
"ibanFullname": "ALEX OAK",
"DbtrIBAN": "FR763000401544999999999123",
"ibanBic": "BNPAFRPP",
"ibanTxEndToEndId": "XXXXXXXXX",
"ibanTxId": "180799999990123",
"forwardUrl": null,
"paymentAcceptedUrl": null,
"paymentRefusedUrl": null,
"paymentWaitingUrl": null,
"paymentExceptionUrl": null,
"paymentCanceledUrl": null,
"payinDate": null,
"mandateId": null,
"creditorName": "WILL OAK",
"creditorAddressLine": null,
"creditorCountry": null,
"creditorIban": "FR761679999999999999011456",
"creditorBIC": "TRZOFR21XXX",
"virtualIbanId": null,
"virtualIbanReference": null,
"ibanId": "995d69d1839999999999a6935979ea8110d3"
}
]
}1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
Caution – UserId initial value in Production
In Production environment, all SCTR are initially received with userId attribute valued to 3. It is strictly forbidden to use this value, this is a technical user for Treezor use only.
Rejection of an SCTR
Immediate rejection
An SCTR can be immediately rejected for multiple reasons.
In this case, a sepa.return_sctr webhook is sent with the reason code provided in the return_reason_code attribute.
Delayed rejection
Treezor enforces AML/CFT checks before validating an SCTR.
When a suspicious SCTR is encountered, the SCTR funds are frozen and Treezor sends you:
- A
payinrefund.createwebhook withreasonTmsattribute set tonullandpayinrefundStatusattribute set toPENDING(which freezes the funds). - A
payinrefund.updatewebhook withreasonTmsattribute populated by an explanation.
Upon further inspection by Treezor, the following occurs depending on whether the anomaly is confirmed:
- No anomaly – A
payinrefund.cancelwebhook is sent (the wallet can be credited by the SCTR). - Anomaly confirmed – A
payinrefund.updatewebhook is sent, with aVALIDATEDpayinrefundStatus(which refunds the SCTR).
Information – AML/CFT inspection by Treezor can last up to 48h
Therefore, an SCTR can be delayed by up to 48 hours.
Emitted Credit Transfers (SCTE)
Treezor allows you to send funds from wallets to external accounts using SCTE.
Requirements
- The sender's Wallet must be valid and not frozen
- The sender's User must be valid
- You have the IBAN of the recipient
- You have created an active Beneficiary using this IBAN
- You have requested a Beneficiary Validation
Although SCTE can be created an any time, they will only take place on a SEPA Open Banking Day.
Parameters
| Attribute | Type | Description |
|---|---|---|
walletId | integer | The unique identifier of the debited Wallet. |
beneficiaryId | integer | The unique identifier of the Beneficiary of the Transfer. You must have created the Beneficiary object beforehand. |
beneficiaryValidationId | string | The unique identifier of the Beneficiary Validation. |
amount | number | The amount of the credit transfer. |
currency | string | The currency of the credit transfer. Must be EUR. |
supportFileLink | string | The HTTPS link to the supporting documents file, which is mandatory if the payout exceeds €10,000 (B2C) or €50,000 (B2B). The protocol must be secure (HTTPS). See processing for more information. |
Request
Endpoint: /v1/payouts
bash
curl -X POST {baseUrl}/v1/payouts \
--header 'Authorization: Bearer {accessToken}' \
--header 'Content-Type: application/json' \
-d '{payload}'1
2
3
4
2
3
4
Here is an example of {payload}:
json
{
"walletId": {walletId},
"beneficiaryId": {beneficiaryId},
"beneficiaryValidationId": "{beneficiaryValidationId}",
"amount": 1000,
"currency": "EUR"
}1
2
3
4
5
6
7
2
3
4
5
6
7
Returns the Payout object, with its payoutStatus set to PENDING at first. You will then receive sequentially the following webhooks.
| Webhook | When | Specific attributes |
|---|---|---|
payout.update | When the SCTE is sent to the SEPA network. | PENDING status and 160014 codeStatus |
payout.update | When the SCTE sender's wallet is debited. | VALIDATED status |
json
{
"payouts":[
{
"payoutId": "2XX40",
"payoutTag": "25XXXXXXXXXXXXXXXX86f5cb",
"payoutStatus": "VALIDATED",
"payoutTypeId": 1,
"payoutType": "Credit Transfer",
"walletId": "85090",
"label": "Remboursement",
"payoutDate": "2017-10-04",
"amount": "1000.00",
"currency": "EUR",
"partnerFee": "0",
"createdDate": "2017-10-04 09:37:34",
"modifiedDate": "2017-10-04 09:55:57",
"walletEventName": "XXXXXXXAB",
"walletAlias": "XXXXXXXXXX",
"userLastname": "",
"userFirstname": "",
"userId": "636338",
"bankaccountIBAN": "XXXXXXXXXXXXXXXXXXXXXXXX",
"codeStatus": "160004",
"informationStatus": "",
"supportingFileLink": "",
"endToEndId": "2dbb81b26db94db3b530988b4189aad7",
"reasonCode": null,
"reasonDescription": null,
"internationalBeneficiaryId": null,
"quotationId": null,
"metadata": null,
"totalRows": null,
"beneficiaryValidationId": "f8e4a7b2-c1d3-4e5a-8b0f-9c2d1e0a3b5c"
}
]
}1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
Please note that to retrieve the beneficiary IBAN, you can fetch the Beneficiary object using the beneficiaryId.
Processing
Emitted SEPA Credit Transfers (SCTE) are executed the next working day when requested after the cut-off time (10:30AM).
When the SCTE exceeds €10,000 (B2C) or €50,000 (B2B), you must provide support documents in the supportFileLink parameter:
- An invoice, bill, contract, or similar document.
- A RIB of the creditor, edited by the creditor's bank.
Support documents may be required for additional controls if Treezor deems the transaction of interest.
Treezor is entitled to refuse an SCTE when the aforementioned requirements are not met, or upon suspicion of fraudulent activity.
Rejection of an SCTE
A beneficiary's bank can reject an SCTE for multiple reasons.
In this situation a payoutrefund.create webhook is sent, with the reasonCode for the rejection provided.
Recalling an SCTE
To recall an SCTE, please check out the dedicated article.
Mass Payouts Beta
The Mass Payout feature allows you to request up to 1,000 SEPA Credit Transfer emissions at once.
Because of the Verification of Payee (VoP) obligation, the Mass Payouts only apply for non-consumers end users who have explicitly opted out of the VoP service.
Mass Payout initiation
Mass Payout is only available for the following Users:
- Legal entities (
userTypeIdother than1), and - Self-employed individuals
You must ensure you collect their approval for opting out of VoP.
Parameters
| Attribute | Type | Description |
|---|---|---|
vopOptOut | boolean | Upon setting this value to true, you declare that you have collected the end users' consent to opt out of the VoP service. |
payouts | array of objects | The list of payouts to include in the batch, with the following mandatory parameters: payoutTag, walletId, beneficiaryId, amount, and currency. Max. 1,000 items. |
API – API Reference available
For a complete list of Mass Payout attributes, check the Payouts section of the API Reference.
Request example
Endpoint: /v1/massPayouts
bash
curl -X POST '{baseUrl}/v1/massPayouts' \
--header 'Authorization: Bearer {accessToken}' \
--header 'Content-Type: application/json' \
-d '{payload}'1
2
3
4
2
3
4
Here is an example of {payload}:
json
{
"massPayoutTag": "ref-pay-nov-2024",
"vopOptOut": true,
"payouts": [
{
"payoutTag": "aaa",
"accessTag": "aaa",
"walletId": 1,
"payoutTypeId": 1,
"beneficiaryId": 1,
"label": "aaa",
"endToEndId": "123",
"amount": "100.28",
"currency": "EUR",
"supportFileLink": ""
},
{
"payoutTag": "bbb",
"accessTag": "bbb",
"walletId": 1,
"payoutTypeId": 1,
"beneficiaryId": 1,
"label": "bbb",
"endToEndId": "456",
"amount": "101.29",
"currency": "EUR",
"supportFileLink": ""
}
]
}1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
Returns the following information about the Mass Payout if successful:
json
{
"massPayoutId": "8b9dacf4-6acf-407b-953c-fcbb21355c1c",
"massPayoutTag": "ref-pay-nov-2024",
"vopOptOut": true,
"createdDate": "2024-04-24 08:55:26"
}1
2
3
4
5
6
2
3
4
5
6
Treezor also sends a payout.create webhook for each successfully created payout in the batch.
Retrieve Mass Payout
You can retrieve a Mass Payout object to get information regarding the batch, including successful and failed payout creations.
Request example
Endpoint: /v1/massPayouts/{massPayoutId}
bash
curl -X GET '{baseUrl}/v1/massPayouts/{massPayoutId}' \
--header 'Authorization: Bearer {accessToken}'1
2
2
Returns the following Mass Payout:
json
{
"massPayoutId": "8b9dacf4-6acf-407b-953c-fcbb21355c1c",
"massPayoutTag": "ref-pay-nov-2024",
"vopOptOut": true,
"createdDate": "2024-04-24 08:55:26",
"processedDate": "2024-04-24 09:55:26",
"createdPayouts": {
"count": 20,
"payoutIds": [
"12345"
]
},
"failedPayoutCreations": {
"count": 5,
"payouts": [
{
"tag": "string",
"reason": "AUTHENTICATION_ERROR"
}
]
}
}1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22