ClearBank

SEPA Instant Credit Transfer

SEPA Instant Credit Transfer

SEPA Instant Credit Transfer (SCT Inst) is a pan-European payment scheme that enables real-time euro transfers, delivering funds to the recipient within 10 seconds, 24 hours a day, 365 days a year.

You can:

Sending an SCT Inst payment

To send an SCT Inst payment, use the POST /v1/payments/sepa-instant endpoint.

The SCT Inst scheme does not have a limit for maximum payment amounts, and ClearBank does not impose one. Instead, our clients are responsible for provisioning and managing transaction limits for their underlying customers in accordance with their own operational and risk requirements.

Transactions must be settled within a normal maximum of 5 seconds, with an upper limit of 10 seconds permitted only in exceptional circumstances, as mandated by SCT Inst 2025 rulebook.

You will receive the SEPA Instant Outbound Payment Created webhook. If 10 seconds pass without settlement, you'll receive the SEPA Instant Outbound Payment Delayed webhook. Once the payment has settled, you will receive the SEPA Instant Outbound Payment Settled webhook and the Customer Accounts Transaction Completed webhook.

A message flow diagram explaining how to send an SCT Inst payment

Send an SCT Inst payment

post/v1/payments/sepa-instant

This endpoint is used to create an outbound SCT Inst payment. No limit for external payments, limit of up to €999,999,999.99 for your internal ClearBank accounts. If you make an error on an internal payment, this can only be corrected with a new payment request: you cannot recall payments made to your own accounts.

Parameters

  • Authorization string, header, Required

    Your API Token, obtained from the ClearBank Portal.

  • DigitalSignature string, header, Required

    Signed hash of the body of the request. The hash is signed by your private key.

  • X-Request-Id string, header, Required

    A unique identifier for the request; valid for 24 hours, max length 83.

Request Payload (application/json)

  • amount number, Required

    Amount of money to be moved between the debtor and creditor, before deduction of charges, expressed in the currency (EUR).

    Minimum
    0
  • creditor object, Required

  • creditorAgent object

  • debtor object, Required

  • endToEndId string, Required

    Unique identification, as assigned by the originating party, to unambiguously identify the transaction. This identification is passed on, unchanged, throughout the entire end-to-end chain.

    Minimum length
    1
    Maximum length
    35
    Pattern
    ^[0-9a-zA-Z/\-\?:\(\)\.,'\+ ]+$
  • reference string

    Information supplied to enable the matching of an entry with the items that the transfer is intended to settle, such as commercial invoices in an accounts' receivable system.

    Minimum length
    1
    Maximum length
    140
  • ultimateCreditor object

  • ultimateDebtor object

request

{
"amount": 10,
"creditor": {
"name": "John Doe",
"accountIban": "DE75512108001245126199",
"postalAddress": {
"streetName": "Morissette Union",
"buildingNumber": "99",
"townName": "Sipesville",
"postCode": "RV7 4IS",
"countrySubdivision": "Buckinghamshire",
"country": "GB"
},
"identification": {
"organisationIdentification": {
"bic": "CLRBNL2AXXX"
}
}
},
"creditorAgent": {
"bic": "CLRBNL2AXXX"
},
"debtor": {
"name": "John Doe",
"accountIban": "NL73ABNA0529451824",
"postalAddress": {
"streetName": "Morissette Union",
"buildingNumber": "99",
"townName": "Sipesville",
"postCode": "RV7 4IS",
"countrySubdivision": "Buckinghamshire",
"country": "GB"
},
"identification": {
"organisationIdentification": {
"bic": "CLRBNL2AXXX",
"lei": "724500EAW1MTCM9M1X68",
"genericIdentification": {
"id": "string",
"schemeName": {
"item": "string",
"itemElementName": 0
},
"issuer": "string"
}
}
}
},
"endToEndId": "0947eaf6-2b51-496b-afba-969a0a712d1",
"reference": "INV-00002 2020-01-21",
"ultimateCreditor": {
"name": "John Doe",
"identification": {
"organisationIdentification": {
"bic": "CLRBNL2AXXX"
}
}
},
"ultimateDebtor": {
"name": "John Doe",
"identification": {
"organisationIdentification": {
"bic": "CLRBNL2AXXX",
"lei": "724500EAW1MTCM9M1X68",
"genericIdentification": {
"id": "string",
"schemeName": {
"item": "string",
"itemElementName": 0
},
"issuer": "string"
}
}
}
}
}
Code copied

Response (application/json)

  • 202 Accepted
  • 400 Bad Request

Accepted

{
"paymentId": "1fd63af1-83e2-3a8a-1014-3daa0e1c5f28"
}
Code copied

Bad Request

{
"type": "string",
"title": "string",
"status": 0,
"detail": "string",
"instance": "string",
"property1": null,
"property2": null
}
Code copied

Associated Webhooks

Cancellation reason codes

Outbound payments may be cancelled due to internal validation failure (the payment did not pass our internal validation rules) or external validation failure (the payment did not pass SEPA scheme or beneficiary bank validation rules). Cancelled payments return a reason code which is reflected in the CancellationCode field of the SEPA Instant Outbound Payment Cancelled webhook. The cancellation codes include, but are not limited to:

Reason codeDescriptionInternal validation failureExternal validation failure
AB05Timeout Creditor AgentX
AB08Offline Creditor AgentX
AB09Error Creditor AgentX
AB10Error Instructed AgentX
AB15Account Is Held Suspense Account / Account Is Repair Suspense AccountX
AC01Account identifier invalid or incorrectXX
AC04Account Not Active / ClosedXX
AC06Blocked AccountXX
AG01Transaction ForbiddenX
AG10Agent SuspendedX
AG11Creditor Agent SuspendedX
AM03EUR Currency Not EnabledX
AM04Insufficient FundsXX
AM05DuplicationX
BE01Account Does Not Belong To InstitutionX
BE04Missing Creditor AddressX
CB01Unknown ErrorXX
CB02A valid creditor agent BIC cannot be derived from the supplied IBANX
CB05Payment delayedX
CNORCreditor Bank Is Not RegisteredXX
DNORDebtor Bank Is Not RegisteredX
MD07End Customer DeceasedX
MS02Not Specified Reason Customer GeneratedX
MS03Payment failed screening, re-send via SCTX
RC01Bank Identifier IncorrectX
RC05Invalid BIC IdentifierX
RR03Missing Creditor’s Name Or AddressX
RR04Regulatory ReasonX
TM01Invalid Cut Off TimeX

Example Customer Accounts Transaction Completed webhook request body for inbound SCT Inst payment

{
"Type":"CustomerAccounts.TransactionCompleted",
"Version":1,
"Payload":{
"TransactionId":"e05bfe3b-3187-28b1-340d-57d57a8739fa",
"EndToEndIdentification":"12345678",
"CreatedDateTime":"2025-02-10T12:52:43.7433333Z",
"CompletedDateTime":"2025-02-10T12:52:43.7666667Z",
"ClearingChannel":"SEPA-Instant",
"DebitCreditCode":"Credit",
"Amount":1000.0,
"Currency":"EUR",
"RemittanceInformation":"e05bfe3b-3187-28b1-340d-57d57a8739fa",
"DebtorAccount":{
"AccountId":null,
"Iban":"GB68INST20182441739477",
"Bban":null,
"Descriptor":null
},
"CreditorAccount":{
"AccountId":"5602a737-675f-4c85-bbc1-d5d4b4478e64",
"Iban":"NL25CLRB0066110527",
"Bban":null,
"Descriptor":null
}
},
"Nonce":263934935
}

Example webhook response

{
"Nonce": 263934935
}

Example Customer Accounts Transaction Completed webhook request body for outbound SCT Inst payment

{
"Type":"CustomerAccounts.TransactionCompleted",
"Version":1,
"Payload":{
"TransactionId":"8fa1ceea-e592-480c-26fa-1fd040c89df1",
"EndToEndIdentification":"0947eaf6-2b51-496b-afba-969a0a72f38",
"CreatedDateTime":"2025-02-10T15:54:09.97Z",
"CompletedDateTime":"2025-02-10T15:54:14.29Z",
"ClearingChannel":"SEPA-Instant",
"DebitCreditCode":"Debit",
"Amount":100.0,
"Currency":"EUR",
"RemittanceInformation":"testing instant",
"DebtorAccount":{
"AccountId":"5602a737-675f-4c85-bbc1-d5d4b4478e64",
"Iban":"NL25CLRB0066110527",
"Bban":null,
"Descriptor":null
},
"CreditorAccount":{
"AccountId":null,
"Iban":"DE25370502991000122343",
"Bban":null,
"Descriptor":null
}
},
"Nonce":1778087803
}

Example webhook response

{
"Nonce": 1778087803
}

Testable IBANs

When you call our endpoints in simulation, any IBANs you provide are validated. To support your testing, the below tables list valid and invalid IBANs for your use:

Valid IBANCountry
NL73ABNA0529451824Netherlands
FR7630006000011234567890189France
GB33BUKB20201555555555UK
DE75512108001245126199Germany
DK9520000123456789Denmark
IE07BOFI900017556967Ireland
PT88003506514393326125714Portugal
ES7921000813610123456789Spain
AT483200000012345864Austria

Invalid IBANCountry
GB20FMFX42731695687653UK
NL51IKXV1050288017Netherlands
BE66173933352443Belgium
LT089128849492191749Lithuania

Receive an SCT Inst payment

Receipt of an SCT Inst payment can be confirmed by subscribing to the SEPA Instant Inbound Payment Settled webhook.

Request an SCT Inst recall

Send a recall request

You can send SCT Inst recall requests using the POST /v1/payments/sepa-instant/{paymentId}/recall endpoint. You will receive confirmation via the SEPA Instant Recall Payment Created webhook, and a response via either the SEPA Instant Recall Payment Settled or SEPA Instant Recall Request Rejected webhooks.

Recall requests remain valid for a maximum of 15 business days. If after 15 business days the receiving party has not responded, the recall request is automatically rejected and the SEPA Instant Recall Request Rejected webhook is sent.

A message flow diagram explaining a successful SCT Inst recall which results in receiving a SEPA Instant Recall Payment Settled webhook

A message flow diagram explaining a rejected SCT Inst recall which results in receiving a SEPA Instant Recall Request Rejected webhook

If the receiving party rejects the recall request, a rejection code will be provided and populated in the RejectionCode field of the SEPA Instant Recall Request Rejected webhook. The recall rejection codes include, but are not limited to:

Reason CodeDescription
AC04Closed Account Number
AM04Insufficient Funds
ARDTThe Transaction Has Already Been Returned
ARJTAlready rejected original SCT (SEPA Credit Transfer)
CUSTRequested By Customer
LEGLLegal Decision
NOASNo Answer From Customer
NOORNo Original Transaction Received
RNPROriginal credit transfer was received but is not processable
RR04Regulatory reason

External code sets can be downloaded from iso20022.org

Recall an SCT Inst payment

post/v1/payments/sepa-instant/{paymentId}/recall

This endpoint is used to create a recall request for an outbound payment.

Parameters

  • paymentId string, path, Required
  • Authorization string, header, Required

    Your API Token, obtained from the ClearBank Portal.

  • DigitalSignature string, header, Required

    Signed hash of the body of the request. The hash is signed by your private key.

  • X-Request-Id string, header, Required

    A unique identifier for the request; valid for 24 hours, max length 83.

Request Payload (application/json)

  • originalInstructedAmount number, Required

    Amount of money moved between the debtor and creditor (EUR).

    Minimum
    0
  • reasonCodeForRecall string, Required

    Value must be one of "DUPL, FRAD, TECH, CUST, AC03, AM09". DUPL = Duplicate, FRAD = Fraud, TECH = Technical problem, AC03 = Invalid creditor number, CUST = Requested by customer, AM09 = Wrong amount

    Minimum length
    1
  • additionalInformation string

    Can only be used for "FRAD, CUST, AC03, AM09". Further details on the cancellation request reason.

    Maximum length
    105
  • originalInstructedDate string, Required

    Original date of transaction.

    Pattern
    YYYY-MM-DD

request

{
"originalInstructedAmount": "1000",
"reasonCodeForRecall": "DUPL",
"additionalInformation": "Lorem ipsum",
"originalInstructedDate": "2024-08-23"
}
Code copied

Response (application/json)

  • 202 Accepted
  • 400 Bad Request
  • 409 Conflict

Bad Request

{
"type": "string",
"title": "string",
"status": 0,
"detail": "string",
"instance": "string",
"property1": null,
"property2": null
}
Code copied

Conflict

{
"type": "string",
"title": "string",
"status": 0,
"detail": "string",
"instance": "string",
"property1": null,
"property2": null
}
Code copied

Associated Webhooks

Recall reason codes

Recalls can be requested using the following reason codes:

ReasonDescriptionTime limit to send recall request
DUPLDuplicate sending10 business days
TECHTechnical problems resulting in an erroneous SCT Inst Transaction10 business days
FRADFraudulent originated SCT Inst Instruction13 months
AC03Wrong account number in original transfer13 months
AM09Wrong amount in original transfer13 months
CUSTRequested by customer13 months

Receive and respond to a recall request

If you receive a recall request, you will be notified via the SEPA Instant Recall Request Received webhook. You can review the details of the request by referring to the OriginalTransactionId for details of the original payment received and ReasonCode for the reason the sending party is requesting the recall (see Recall reason codes)

To respond to the recall request, use the POST /v1/payments/sepa-instant/{paymentId}/recall-response endpoint. Set the approve boolean true to accept the request or false to reject it.

Following your approval of a recall request, the amount of the original payment is ring-fenced and returned to the sending party. You can be notified of the status of the status of the return payment via the SEPA Instant Recall Payment Created webhook, SEPA Instant Recall Payment Settled webhook, and SEPA Instant Recall Payment Cancelled webhook.

Recall requests should be responded to within 15 business days. If after 15 business days you do not accept or reject the recall, ClearBank will automatically reject the request.

A message flow diagram explaining receiving a recall request, being notified via the SEPA Instant Recall Request Received webhook, responding with 'approve' set to 'true' using the POST /v1/payments/sepa-instant/{paymentId}/recall-response endpoint and receiving the SEPA Instant Recall Payment Created webhook and SEPA Instant Recall Payment Settled webhook following the return of the recalled amount.

A message flow diagram explaining receiving a recall request, being notified via the SEPA Instant Recall Request Received webhook and responding with 'approve' set to 'false' with a valid 'rejectionCode' using the POST /v1/payments/sepa-instant/{paymentId}/recall-response endpoint

Respond to an SCT Inst recall request

post/v1/payments/sepa-instant/{paymentId}/recall-response

This endpoint is used to accept or reject an incoming SEPA ICT recall request.

Parameters

  • paymentId string, path, Required
  • Authorization string, header, Required

    Your API Token, obtained from the ClearBank Portal.

  • DigitalSignature string, header, Required

    Signed hash of the body of the request. The hash is signed by your private key.

  • X-Request-Id string, header, Required

    A unique identifier for the request; valid for 24 hours, max length 83.

Request Payload (application/json)

  • approve boolean, Required

    To accept a recall, set the value to true. To reject a recall, set the value to false. If set to false, rejectionCode is required.

  • rejectionCode string

    Value must be one of "AC04, NOOR, AM04, ARDT, NOAS, LEGL, CUST". AC04 = Closed account, NOOR = No Original Transaction Received, AM04 = insufficient funds, ARDT = The transaction has already been returned, NOAS = No answer from customer, LEGL = Legal decision, CUST = Requested by customer. Rejection codes should only be set when rejecting the recall. In order to reject a recall, please set the the value of the Approve field to false.

request

{
"approve": "false",
"rejectionCode": "AM04"
}
Code copied

Response (application/json)

  • 202 Accepted
  • 400 Bad Request
  • 409 Conflict

Bad Request

{
"type": "string",
"title": "string",
"status": 0,
"detail": "string",
"instance": "string",
"property1": null,
"property2": null
}
Code copied

Conflict

{
"type": "string",
"title": "string",
"status": 0,
"detail": "string",
"instance": "string",
"property1": null,
"property2": null
}
Code copied

Associated Webhooks

The following diagram outlines the process following the unlikely event that there is an issue with the pacs.004 payment that is sent following your approval of an inbound recall request.

A message flow diagram explaining responding to a recall request with 'approve' followed by the pacs.004 payment being rejected at RT1 resulting in receiving a SEPA Instant Recall Payment Cancelled webhook

Following a rejected pacs.004 and receipt of the SEPA Instant Recall Payment Cancelled webhook, the ring-fence is removed from the recall amount and you must re-initiate the recall response using the POST /v1/payments/sepa-instant/{paymentId}/recall-response endpoint.

Simulate SCT Inst payment scenarios

Simulate a delayed outbound SCT Inst payment

To test the SEPA Instant Outbound Payment Delayed webhook, you can provide one of the following values in the reference field of a Send SCT Inst Payment request:

Reference field valueSimulated behavior
--DelayPayment--Delays the payment by 10 seconds, then proceeds as normal - validation still applies.
--CancelDelayedPayment--Delays the payment by 10 seconds, then cancels the payment with cancellation code CB05.

Simulate an inbound SCT Inst payment

post/v1/sepa-instant-emulator/inbound-payment

Generates an inbound SCT Inst payment for testing purposes in our simulation environment for testing purposes.

Parameters

  • Authorization string, header, Required

    Your API Token, obtained from the ClearBank Portal.

  • DigitalSignature string, header, Required

    Signed hash of the body of the request. The hash is signed by your private key.

  • X-Request-Id string, header, Required

    A unique identifier for the request; valid for 24 hours, max length 83.

Request Payload (application/json)

  • PaymentId string, Required

    Unique identification, as assigned by the original first instructing agent, to unambiguously identify the transaction.

    Minimum length
    1
    Maximum length
    35
    Pattern
    ^[0-9a-zA-Z/\-\?:\(\)\.,'\+ ]+$
  • EndToEndId string, Required

    Unique identification, as assigned by the originating party, to unambiguously identify the transaction. This identification is passed on, unchanged, throughout the entire end-to-end chain.

    Minimum length
    1
    Maximum length
    35
    Pattern
    ^[0-9a-zA-Z/\-\?:\(\)\.,'\+ ]+$
  • Reference string

    Information supplied to enable the matching of an entry with the items that the transfer is intended to settle, such as commercial invoices in an accounts' receivable system

  • Amount number

    Amount of money to be moved between the debtor and creditor, before deduction of charges, expressed in the currency (EUR).

    Minimum
    0
    Maximum
    100000
  • Debtor object, Required

  • UltimateDebtor object

  • Creditor object, Required

  • UltimateCreditor object

request

{
"PaymentId": "0947eaf62b51496bafba969a0a712d12",
"EndToEndId": "0947eaf62b51496bafba969a0a712d12",
"Reference": "INV-00002 2020-01-21",
"Amount": "10.00",
"Debtor": {
"Name": "John Doe",
"AccountIban": "NL45INGB4887467303",
"AgentBic": "CLRBNL2AXXX",
"OrganisationBic": "CLRBNL2AXXX",
"PostalAddress": {
"StreetName": "Morissette Union",
"BuildingNumber": "99",
"TownName": "Sipesville",
"PostCode": "RV7 4IS",
"CountrySubdivision": "Buckinghamshire",
"Country": "GB"
}
},
"UltimateDebtor": {
"Name": "John Doe",
"OrganisationBic": "CLRBNL2AXXX"
},
"Creditor": {
"Name": "John Doe",
"AccountIban": "NL01CLRB0123456789",
"AgentBic": "CLRBNL2AXXX",
"OrganisationBic": "CLRBNL2AXXX",
"PostalAddress": {
"StreetName": "Morissette Union",
"BuildingNumber": "99",
"TownName": "Sipesville",
"PostCode": "RV7 4IS",
"CountrySubdivision": "Buckinghamshire",
"Country": "GB"
}
},
"UltimateCreditor": {
"Name": "John Doe",
"OrganisationBic": "CLRBNL2AXXX"
}
}
Code copied

Response (application/json)

  • 202 Accepted
  • 400 Bad Request
  • 404 Not Found

Bad Request

{
"type": "string",
"title": "string",
"status": 0,
"detail": "string",
"instance": "string",
"errors": {
"property1": [
"string"
],
"property2": [
"string"
]
},
"property1": null,
"property2": null
}
Code copied

Not Found

{
"type": "string",
"title": "string",
"status": 0,
"detail": "string",
"instance": "string",
"property1": null,
"property2": null
}
Code copied

Associated Webhooks

Simulate an inbound SCT Inst recall request

post/v2/sepa-instant-emulator/inbound-payment/recall

Generates an inbound SCT Inst recall request in our simulation environment for testing purposes.

Parameters

  • Authorization string, header, Required

    Your API Token, obtained from the ClearBank Portal.

  • DigitalSignature string, header, Required

    Signed hash of the body of the request. The hash is signed by your private key.

  • X-Request-Id string, header, Required

    A unique identifier for the request; valid for 24 hours, max length 83.

Request Payload (application/json)

  • Reference string

    Information supplied to enable the matching of an entry with the items that the transfer is intended to settle, such as commercial invoices in an accounts' receivable system

  • ReasonForRecall string, Required

    The reason code used to recall the payment.

    Enum array
    DUPL, FRAD, TECH, CUST, AC03, AM09
  • Amount number, Required

    Amount of money moved between the debtor and creditor (EUR).

    Minimum
    0
    Maximum
    100000
  • PaymentId string, Required

    Original payment ID used in the inbound payment to be recalled.

    Minimum length
    1
    Maximum length
    35
    Pattern
    ^[0-9a-zA-Z/\-\?:\(\)\.,'\+ ]+$
  • EndToEndId string, Required

    Original endToEndId used in the inbound payment to be recalled.

    Minimum length
    1
    Maximum length
    35
    Pattern
    ^[0-9a-zA-Z/\-\?:\(\)\.,'\+ ]+$

request

{
"Reference": "INV-00002 2020-01-21",
"ReasonForRecall": "DUPL",
"Amount": "1000",
"PaymentId": "0947eaf62b51496bafba969a0a712d12",
"EndToEndId": "0947eaf62b51496bafba969a0a712d12"
}
Code copied

Response (application/json)

  • 202 Accepted
  • 400 Bad Request
  • 404 Not Found
  • 500 Server Error

Bad Request

{
"type": "string",
"title": "string",
"status": 0,
"detail": "string",
"instance": "string",
"errors": {
"property1": [
"string"
],
"property2": [
"string"
]
},
"property1": null,
"property2": null
}
Code copied

Not Found

{
"type": "string",
"title": "string",
"status": 0,
"detail": "string",
"instance": "string",
"property1": null,
"property2": null
}
Code copied

Server Error

{
"type": "string",
"title": "string",
"status": 0,
"detail": "string",
"instance": "string",
"property1": null,
"property2": null
}
Code copied

Associated Webhooks