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 | string | The amount of the credit transfer. |
currency | string | The currency of the credit transfer. Must be EUR. |
supportingFileLink | string | The HTTPS link to supporting documents, required for any SCTE exceeding €10,000. The protocol must be secure (HTTPS). See processing for more information. |
label | string | The payout label that will be displayed on the receiver's bank account. |
endToEndId | string | Unique identification assigned by the final client to unambiguously identify the transaction. |
accessTag | string | A unique identifier used to enforce Idempotency. In this specific case, the value can't exceed 245 characters. |
API – API Reference available
For more details regarding the Payout attributes, check the Payouts section of the API Reference.
Best practice – Enforce Idempotency to avoid duplicates
This allows you to avoid the costs of handling duplicated requests.
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.43",
"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.create | The SCTE is created. | PENDING status and 160001 codeStatus |
payout.update | The SCTE is sent to the SEPA network. | PENDING status and 160014 codeStatus |
payout.update | 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.43",
"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,
"quoteId": 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:30 AM).
For any SCTE exceeding €10,000, you must provide support documents in the supportingFileLink 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 from a single wallet.
Mass Payout initiation
Mass Payout is only available for the following Users:
- Legal entities (
userTypeIdother than1), and - Self-employed individuals
VoP handling
Use the vopOptOut attribute to control whether Verification of Payee (VoP) applies to the batch:
vopOptOut: true— The batch is exempt from VoP checks. You must have collected each end user's consent to opt out of the VoP service before sending the request.vopOptOut: false— VoP verification applies to the batch. You must provide abeneficiaryValidationIdfor each payout in thepayoutsarray.
Parameters
| Attribute | Type | Description |
|---|---|---|
vopOptOut | boolean | Indicates whether VoP applies to the batch. See VoP handling above. |
massPayoutTag | string | Custom field which value must be unique, as Treezor uses this field to verify the uniqueness of the request. |
payouts | array of objects | The list of payouts to include in the batch, with the following mandatory parameters: payoutTag, walletId (the same wallet for all the payouts of the batch), beneficiaryId, amount, and currency. Max. 1,000 items. |
payouts[].beneficiaryValidationId | string | Required if vopOptOut is false. The unique identifier of the prior VoP verification obtained for the beneficiary. Must be provided for every payout in the batch — a batch where at least 1 payout is missing this field is rejected with a 400 error. |
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} with vopOptOut: true:
json
{
"massPayoutTag": "ref-pay-nov-2026",
"vopOptOut": true,
"payouts": [
{
"payoutTag": "aaa",
"walletId": 123456,
"beneficiaryId": 789012,
"beneficiaryValidationId": "",
"amount": "100.28",
"currency": "EUR"
},
{
"payoutTag": "bbb",
"walletId": 123456,
"beneficiaryId": 789013,
"beneficiaryValidationId": "",
"amount": "101.29",
"currency": "EUR"
}
]
}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
Here is an example of {payload} with vopOptOut: false. Each payout must include a beneficiaryValidationId:
json
{
"massPayoutTag": "ref-pay-vop-nov-2026",
"vopOptOut": false,
"payouts": [
{
"payoutTag": "aaa",
"walletId": 123456,
"beneficiaryId": 789012,
"beneficiaryValidationId": "f8e4a7b2-c1d3-4e5a-8b0f-9c2d1e0a3b5c",
"amount": "100.28",
"currency": "EUR"
},
{
"payoutTag": "bbb",
"walletId": 123456,
"beneficiaryId": 789013,
"beneficiaryValidationId": "e9f5b8c3-d2e4-5f6b-9c0a-1d4e3f2b5c7e",
"amount": "101.29",
"currency": "EUR"
}
]
}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
Returns the following information about the Mass Payout if successful:
json
{
"massPayoutId": "8b9dacf4-6acf-407b-953c-fcbb21355c1c",
"massPayoutTag": "ref-pay-vop-nov-2026",
"vopOptOut": false,
"createdDate": "2026-11-06 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-vop-nov-2026",
"vopOptOut": false,
"createdDate": "2026-11-06 08:55:26",
"processedDate": "2026-11-06 09:55:26",
"createdPayouts": {
"count": 2,
"payouts": [
{
"payoutId": "123456",
"beneficiaryValidationId": "f8e4a7b2-c1d3-4e5a-8b0f-9c2d1e0a3b5c"
},
{
"payoutId": "789012",
"beneficiaryValidationId": "e9f5b8c3-d2e4-5f6b-9c0a-1d4e3f2b5c7e"
}
]
},
"failedPayoutCreations": {
"count": 0,
"payouts": []
}
}1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24