Flexible cash ISAs
Flexible cash ISAs overview
A cash ISA (Individual Savings Account) is a real savings deposit account held with ClearBank that is subject to tax benefits defined by the UK government. It can be used to send and/or receive payments once a nominated account has also been defined.
The balance of a cash ISA is held by ClearBank and can only be viewed via our API. Cash ISAs are reconciled for you by ClearBank. To open a cash ISA, your customer must provide you with their national insurance number and confirm they are a UK resident.
Because cash ISAs are structured differently to other GBP account types, you must use the endpoints defined on this page to interact with them. Do not use the endpoints listed on the Manage sterling accounts page.
You can create and manage customers with cash ISAs using the endpoints listed on the Retail customers page.
The sections below explain how to:
- Set up a cash ISA
- Close, cancel, or discontinue a cash ISA
- Manually transfer in a cash ISA
- Manually transfer out a cash ISA
- Automatically transfer in a cash ISA
- Automatically transfer out cash ISA
Set up a cash ISA
When creating a new cash ISA, you need to first create the account, then set up the nominated account.
To set up a cash ISA:
- Use the POST /v1/isas endpoint to create the account
You cannot deposit funds into the cash ISA before the nominated account has been defined.
- After receiving the Account Created webhook, use the PUT /v1/accounts/{accountId}/nominated-account endpoint to define the nominated account for the cash ISA
You can now deposit funds into the cash ISA.
The process is shown in this message flow diagram:
The account is now open and fully operational. You can retrieve information on all ISAs by using the GET /v3/accounts endpoint and filtering for ISAs. You can also retrieve details on a specific cash ISA using the GET /v1/isas/{accountId} endpoint.
You can amend the details or the status of a cash ISA using the PATCH /v1/accounts/{accountId} endpoint.
To retrieve end of day balances for a cash ISA, use the camt.053 endpoints.
End of life for a cash ISA
There are several ways you can close a cash ISA. You need to choose the appropriate one based on what's happened in the account journey so far and what the customer wants to do with the account next.
Action | What this does |
---|---|
Close | Closes the account. |
Cancel | Cancels and closes the account without registering the account with the UK government. The account must be under 14 days old and must have had funds deposited. |
Transfer out | Allows you to transfer the account to another provider. Once transfer out has been successful, you then need to close the account. |
Discontinue | Only applicable where the ISA holder is deceased. Triggers the payment of unpaid interest to allow for account closure. |
You can use this diagram to validate if the account should be closed, cancelled or transferred out:
The sections below explain how to:
Close
When closing a cash ISA, you must first withdraw funds before closing the account.
Before an account closure can be requested, the account balance must be zero. Funds can be withdrawn to a nominated account or another ClearBank account. If any interest has been accrued, it will be paid to the nominated account.
If the account balance is not zero, the request will be rejected. Account closure requests cannot be undone.
To close a cash ISA:
- Withdraw all funds from the cash ISA.
- Use the POST /v1/accounts/{accountId}/closure endpoint to request the account closure.
This process is asynchronous. The cash ISA is now frozen. Once the request is accepted, the account closure is pending until, if the account has accrued interest, the last interest payment is calculated and paid. This interest payment will be made to the nominated account. Once the payment has completed, the account will be closed.
- OPTIONAL Use the GET /v1/accounts/{accountId}/closure endpoint to check whether the account has been closed.
- You will receive either the Account Closure Completed or Account Closure Failed webhook once the account closure process has completed.
If the account closure fails, re-request the closure.
The process is shown in this message flow diagram:
Cancel
When cancelling a cash ISA, the account must be under fourteen days old. This endpoint also closes the account.
The cancellation period is based on the acceptance date field. For example, an account with the acceptance date of the 1st of the month can be cancelled up to 23:59 on the 14th day of the month.
Money must have already been deposited into the cash ISA. If no money has been deposited, or the account is over 14 days old, use the POST /v1/accounts/{accountId}/closure endpoint instead.
To cancel a cash ISA:
- Withdraw all funds from the cash ISA.
- Use the POST /v1/isas/{accountId}/cancellation to request the cancellation.
This process is asynchronous. The cash ISA is now frozen. Once the request is accepted, the account closure is pending until, if the account has accrued interest, the last interest payment is calculated and paid. This interest payment will be made to the nominated account. Once the payment has completed, the account will be closed.
- OPTIONAL Use the GET /v1/accounts/{accountId}/closure endpoint to check whether the account has been cancelled.
- You will receive either the Account Closure Completed or Account Closure Failed webhook once the account cancellation process has completed.
The process is shown in this message flow diagram:
Discontinue
The process to discontinue a cash ISA begins with the notification that the account holder is deceased. Once you have received the notification, use the PATCH /v1/accounts/{accountId} to update the status
to Suspended
using the statusReason
of AccountHolderDeceased
.
As per HMRC rules, if an ISA investor passes away, their account must be treated as 'continuing account of a deceased investor'. This allows the account to continue to accrue interest and benefit from the tax advantages of an ISA for the period beginning with the death of the account holder and ending either:
- On the completion of the administration of the deceased's estate
- 3 years since the date of death
Once either of these conditions are met, you will need to mark the account as discontinued. To do so, use the PATCH /v1/isas/{accountId}/discontinue endpoint to trigger the payment of any unpaid interest into the account.
The account can then be closed as normal using the POST /v1/accounts/{accountId}/closure endpoint using the closureReason
of AccountHolderDeceased
.
The process is shown in this flow diagram:
Manage customer ISA eligibility
Customers can be made ineligible for cash ISAs. While a customer is ineligible, they cannot pay funds into their cash ISA.
Ineligible customers should still be able to withdraw funds from their cash ISA.
Customers can be made ineligible for cash ISA subscriptions for these reasons:
- You notified us that the customer's address is now outside the UK
- You notified us that the customer's place of residence is now outside the UK
- You provided us an invalid date of birth for the customer
- You provided us an invalid National Insurance (NI) number for the customer
When a customer moves their address out of the UK, they can continue making subscriptions until the current tax year ends.
You should notify us of customer address changes via the PUT /v1/customers/retail/{customerId}/currentaddress endpoint.
If the customer's address returns to the UK in the next tax year, you should submit a new declaration of ISA eligibility.
When a customer moves their place of residence out of the UK, no further subscriptions can be made.
You should notify us of customer country of residence changes via the PATCH /v1/customers/retail/{customerId} endpoint.
If the customer's place of residence returns to the UK, you should notify us of this then submit a new declaration of ISA eligibility.
When a customer's date of birth or NI number is found to be invalid, no further subscriptions can be made.
Once you have obtained a corrected NI or date of birth for the customer, use the PATCH /v1/customers/retail/{customerId} endpoint to notify us of this then submit a new declaration of ISA eligibility.
You can submit a declaration of ISA eligibility using the POST /isas/{accountId}/declaration endpoint. Verify the customerEligibilityStatus
field in the response has been set to Eligible
.
You can also use the GET /v1/isas/{accountId} endpoint to check the customer's eligibility status at any time.
Setting up a cash ISA
Subscribe to or withdraw from a cash ISA
You can use the Faster Payments endpoint to subscribe to or withdraw from a cash ISA.
Closing a cash ISA
Account Closure Completed webhook
This webhook confirms the account has been closed.
Request body
{"Type":"AccountClosureCompleted","Version":1,"Payload": {...},"Nonce":}
Payload
Element | Description |
---|---|
AccountId | Account identifier used to uniquely identify the account. Type: string Format: GUID Length: 36 Pattern: ^[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}$ |
ClosureReason | Reason that the account was closed. Type: string Min. length: 1 Max. length: 100 |
AccountModifiedDateTime | Date and time the account was last modified. Type: string Time Zone: UTC Format: DateTime |
Nonce | Cryptographically secure number generated by ClearBank for every single webhook. A nonce number is generated randomly and should not be used as a check for duplication. |
Example Account Closure Completed webhook request body
{"Type":"AccountClosureCompleted","Version":1,"Payload":{"AccountId":"56de3483-a569-42eb-90cc-acf59661356f","ClosureReason":"AccountSwitched","TimestampCreated":"2024-07-19T13:31:30.8789344Z"},"Nonce":1082937279}
Example webhook response
{"Nonce": 1082937279}
Account Closure Failed webhook
This webhook confirms the account has not been closed. If you receive this webhook, you should check the ClosureFailureReason
field for more information on why the account closure has failed.
Account closure may fail due to the nominated account details being incorrect. In this scenario, you should retry the account closure through the relevant endpoint, ensuring that the correct nominated account details are submitted in the closure request.
- Obtain details of the currently configured nominated account using the GET /v1/accounts/{accountId}/nominated-account endpoint.
- OPTIONAL Correct the nominated account details using the PUT /v1/accounts/{accountId}/nominated-account endpoint.
- Resend the account closure request.
Request body
{"Type":"AccountClosureFailed","Version":1,"Payload": {...},"Nonce":}
Payload
Element | Description |
---|---|
AccountId | Account identifier used to uniquely identify the account. Type: string Format: GUID |
ClosureReason | Reason that the account was closed. Type: string , null Min. length: 1 Max. length: 100 |
ClosureFailureReasons | List of reasons the account failed to close. Type: array Min items: 1 Item type: string Min length: 1 |
AccountModifiedDateTime | Date and time the account was last modified. Type: string Time Zone: UTC Format: DateTime |
Nonce | Cryptographically secure number generated by ClearBank for every single webhook. A nonce number is generated randomly and should not be used as a check for duplication. |
Example account created webhook request body
{"Type":"AccountClosureFailed","Version":1,"Payload":{"AccountId":"45b542a0-1915-49de-96d8-f2dc906d5cc9","ClosureReason":"AccountHolderBankrupt","ClosureFailureReasons":{"Account 45b542a0-1915-49de-96d8-f2dc906d5cc9 does not have a nominated account set"},"AccountModifiedDateTime":"2024-09-23T13:31:30.8789344Z"},"Nonce":108246778}
Example webhook response
{"Nonce": 1082946778}
Cash ISA transfers
ClearBank offers two methods of transferring a cash ISA in or out:
Manual transfer: Transfers are initiated and managed manually via ClearBank’s API and email workflows. The process involves coordination between the new and old ISA providers using forms like the Transfer Authority Form (TAF) and Transfer History Form (THF).
Timeline: Governed by HMRC’s SLA (Service Level Agreement) of 15 working days.
Automated transfer: Transfers are initiated and tracked via ClearBank’s API endpoints integrated with Pay.UK’s automated service. This includes POST, PUT, and PATCH endpoints for initiating, resubmitting, and updating transfer requests.
Timeline: Voluntary SLA under Pay.UK of 7 working days.
Automated transfers are only available when both ISA providers are accredited participants of the Pay.UK scheme. If one provider is not a participant, the manual transfer process must be used.
Each transfer is assigned a Unique Reference Number (URN), which is a system-generated identifier used to track and manage a transfer throughout its lifecycle. Key functions of the URN include:
- Identification - The URN uniquely identifies a specific transfer request, allowing both the ceding and acquiring ISA providers to reference the same transaction
- Lifecycle tracking - Various systems allow for the tracking of the current transfer state using the URN
- Exception handling - In cases of escalation or failure, the URN helps determine whether the issue lies with the originating provider or the receiving institution
- Validation - The ceding or acquiring ISA provider uses the URN to match incoming messages to its records and validate transfer details such as account info, subscription limits, and customer identity
Manually transfer a cash ISA in
ClearBank supports full or partial transfers in of cash ISAs.
During the transfer in process, the previous ISA manager will transfer the cash ISA funds to a transfer in hub account created during onboarding. Once you have received the transfer history form from them and submitted it to us, you can then move funds from the hub account to the cash ISA.
If you want to reject an existing transfer in request, use the POST /v1/isas/{accountId}/transfer-in/{transferInId}/rejection endpoint.
To transfer in a cash ISA:
- If a cash ISA doesn't already exist, you'll need to set up a cash ISA first.
- Use the POST /v1/isas/{accountId}/transfer-in endpoint.
You must provide a unique payment reference in the
PaymentReference
field when calling this endpoint. This reference will be used for reconciliation when the funds enter the transfer in or leave the transfer out hub. - When the previous manager of the cash ISA moves funds into the transfer hub, you will receive the Transaction Settled webhook. They will also send you the transfer history form.
- Use the PUT /v1/isas/{accountId}/transfer-in/{transferInId}/transfer-history-form endpoint to submit the transfer history form to us.
OPTIONAL To check the status of a transfer in, use the GET /v1/isas/{accountId}/transfer-in/{transferInId} endpoint.
- Once the transfer in has been approved, move the funds from the transfer hub to the cash ISA.
Transaction Settled webhook
This webhook confirms the transaction has settled. For Bacs payments, this is sent on Day 3 of Bacs processing cycle.
Request body
{"Type":"TransactionSettled","Version":6,"Payload": {...},"Nonce":}
Payload
Element | Description |
---|---|
TransactionId | Unique Identification of the Transaction. Type: GUID Max. Length: 36 Special Character: Hyphen - Example format of a typical TransactionId: CE25B426-9430-4A82-8EB8-9311DA2D3E12 |
Status | Transaction status. Type: string Settled |
Scheme | Optional The Scheme type. Transfer FasterPayments Bacs Chaps |
EndToEndTransactionId | For outbound Faster Payments and CHAPS transactions, this is the unique identifier you supplied in the endToEndIdentification field in your API request. For inbound CHAPS payments, this is the prefix "II-" followed by the Instruction Identification, which is unique. For outbound cheque transactions, this is the unique identifier you supplied in the MessageId value in your submit a cheque API request. For internal transfers, this will not be unique, as the value specified in the two webhooks describing the transactions applied to the debtor and creditor accounts will match. Type: string Max. length: 35 |
Amount | Transaction amount. Type: decimal |
TimestampSettled | Date and time the transaction settled. Time Zone: UTC Type: DateTime |
TimestampCreated | Date and time the transaction was created. Time Zone: UTC Type: DateTime |
CurrencyCode | Optional Code of transaction currency. GBP |
DebitCreditCode | Movement of transaction. Type: string Options: Credit , Debit |
Reference | (optional) Payment transaction reference. Max. length: 140 |
IsReturn | Is the Transaction returned from Scheme?True False |
Account | Account information object Type: object It contains the IBAN , BBAN , OwnerName , TransactionOwner , InstitutionName and transactions against real accounts, Balance and BalanceLastUpdatedAt .IBAN : International Bank Account Number associated with the account.Type: string Max. length: 34 BBAN : Basic Bank Account number associated with the account.Type: string Max. length: 30 Depending on Scheme Type OwnerName : name of the beneficiary account holder registered with ClearBank®.Type: string Max. length: 128 - Faster Payments = Sender’s Account Name - Chaps = Ordering Customer’s Name TransactionOwnerName Type: string Max. length: 128 - Beneficiary Account Holder, as specified by the remitter in the payment message. - For outbound payments, as specified by ClearBank® as the remitter name in the payment message. InstitutionName : The institution name. Max. length: 128 - Chaps = Ordering Institution Balance Type: decimal The amount available in the specified currency, excluding any earmarked funds (for example, held or pending payments). Only available for transactions against real accounts. BalanceLastUpdatedAt Time Zone: UTC Type: DateTime The timestamp in UTC specifying when the balance value was last changed. Only available for transactions against real accounts. |
CounterpartAccount | The account which is not held at ClearBank. It contains the IBAN , BBAN , OwnerName , TransactionOwner and InstitutionName .IBAN (Optional): International Bank Account Number associated with the account.Type: string Max. length: 34 BBAN (Optional): Basic Bank Account number associated with the account.Type: string Max. length: 30 Depending on Scheme Type OwnerName : name of the beneficiary account.Type: string Max. length: 128 - Populated with either the same name as TransactionOwnerName , or with “Not Provided” depending on what is provided in the payment message.- Faster Payments = Beneficiary's Account Name TransactionOwnerName Type: string Max. length: 128 Populated by Scheme with the name provided in the payment message. - For outbound payments, this is populated as the Beneficiary Name which is provided by you. InstitutionName : The institution name. Max. length: 128 - Chaps = Beneficiary Institution |
ActualEndToEndTransactionId | Unique payment Identifier depending on Scheme Type. Maximum Field Length: 255 Faster Payments = FPID Chaps = Instruction Identification Cheques = CreditItemId FPID is the unique payment identifier generated by Faster Payments. Instruction Identification is the unique payment identifier generated by the remitting bank. ICS Credit Item Identification is the unique payment identifier generated by the cheque scheme. |
DirectDebitMandateId | (Optional) Unique Identification of a Direct Debit Instruction. Type: GUID Max. length: 36 |
TransactionCode | (Optional) Direct Debit Transaction code: "01" - First collection"17" - Regular collection"18" - Re-presented collection"19" - Final collection(Optional) Direct Credit Transaction code: "99" - Standard Bank Giro Credit"86" - Bank to bank settlement"Z4" - Interest payment"Z5" - Dividend payment |
ServiceUserNumber | (Optional) Service User's Unique Identifier registered with Bacs. Max. length: 6 |
BacsTransactionId | (Optional) Type: GUID Max. length: 36 |
BacsTransactionDescription | (Optional)CreditTransactionSettled DebitContraTransactionSettled DebitTransactionSettled CreditContraTransactionSettled DirectDebitReceivedIndemnityClaimSettled |
TransactionType | (Optional) DirectCredit DirectDebit DirectDebitIndemnityClaim |
TransactionSource | (Optional) Origination of the Transaction : Max. length: 50 Example: CardProcessor , Cheques |
SupplementaryData | (Optional) Transaction supplementary data It is an array with the a Name and Value . Name : Field Number/Name for an inbound CHAPS or FPS message. Max. length: 33 Name options: 20 , 13C , 23B , 23E , 26T , 32A , 33B , 36 , 50a , 51A , 52a , 53a , 54a , 55a , 56a , 57a , 59a , 70 , 71A , 71F , 71G , 72 , 77B , SendingFpsInstitution , Currency , DateSent , PaymentType , TransactionReferenceNumber , Amount , OriginatingCreditInstitution , OriginatingCustomerAccountNumber , OriginatingCustomerAccountName , OriginatingCustomerAccountAddress , EndToEndReference , BeneficiaryCreditInstitution , BeneficiaryCustomerAccountNumber , BeneficiaryCustomerAccountName , BeneficiaryCustomerAccountAddress , ReturnedPaymentFpId , PaymentReturnCode , PaymentSubTypeCode , PurposeTransactionType , TypeOfAccountCode , NumericReference , ReferenceInformation , RemittanceInformation , RegulatoryReporting , OriginalCurrency , OriginalAmount , ExchangeRate , ChargingInformation , SubmittingMember , ReceivingMember , SettlementCycleId , FileId , ProcessedAsynchronously , AgencyAccountWithMember , AgencySortCodeWithMember , RedirectedBeneficiaryCreditInstitution , RedirectedBeneficiaryCustomerAccountNumber , AbusiveMessageScreeningResult , AbusiveMessageScreeningIdentifiers Value Max. length: 500 There could be more than one Name and Value pair. |
Iso20022XmlDocument | (Optional) Only appears if Scheme is Chaps and the message type sent or received is in ISO 20022 (MX) format. Content of the Document node (payload) of the received payment message, to enable processing of ISO 20022 messages for CHAPS. This value can be very long, so we recommend checking your firewall settings to ensure they will not prevent you from receiving the webhook. See below for examples. Type: string Min. Length: 0 Max. Length: 80000 |
Nonce | Cryptographically secure number generated by ClearBank® for every single webhook. A nonce number is generated randomly and should not be used as a check for duplication. |
Example transaction settled webhook request body for Transfer scheme type
{"Type":"TransactionSettled","Version":6,"Payload":{"TransactionId":"d9162680-7d35-7994-4e38-fa80716899a2","Status":"Settled","Scheme":"Transfer","EndToEndTransactionId":"05726acd06dc","Amount":88.52,"TimestampSettled":"2025-04-19T10:03:00.964Z","TimestampCreated":"2025-04-19T10:01:05.101Z","CurrencyCode":"GBP","DebitCreditCode":"Credit","Reference":"51dcf7ba480e61c5a60bbb6c6b774d17","IsReturn":false,"Account":{"IBAN":"GB00CUBK11223312345678","BBAN":"CUBK11223312345678","OwnerName":"JOHN DOE","TransactionOwnerName":"JOHN DOE","InstitutionName":"CustomerBank","Balance":"8754.48","BalanceLastUpdatedAt":"2025-04-19T10:04:00.964Z"},"CounterpartAccount":{"IBAN":"GB00CUBK44556687654321","BBAN":"CUBK44556687654321","OwnerName":"JANE DOE","TransactionOwnerName":"JANE DOE","InstitutionName":"CustomerBank"},"ActualEndToEndTransactionId":"e6e7ab2a97d1","DirectDebitMandateId":"cbf17eb8-9e49-2043-2eca-0dae05e27fe5","TransactionCode":"99","ServiceUserNumber":"030201","BacsTransactionId":"3ec6f5b0-0e6b-a30b-7dc4-cdcc0751d448","BacsTransactionDescription":"CreditContraTransactionSettled","TransactionType":"DirectCredit","TransactionSource":"CardProcessor","SupplementaryData":[{"Name":"20","Value":"AJF9384DGSB48Sd"},{"Name":"23B","Value":"CRED"}],"Nonce":949893874}
Example webhook response
{"Nonce": 949893874}
Example transaction settled webhook request body for CHAPS scheme type, Iso20022XmlDocument field present - populated for an inbound credit CHAPS payment of pacs.008 type
{"Type": "TransactionSettled","Version": 6,"Payload": {"TransactionId": "fbb84b68-fb67-4532-bfd6-2b540e341a21","Status": "Settled","Scheme": "Chaps","EndToEndTransactionId": "EndToEndId8","Amount": 9.09,"TimestampSettled": "2023-02-15T15:32:52.773Z","TimestampCreated": "2023-02-15T15:32:52.437Z","CurrencyCode": "GBP","DebitCreditCode": "Credit","Reference": "Reference17","IsReturn": false,"Account": {"IBAN": "GB57CLRB04040100057354","BBAN": "CLRB04040100057354","OwnerName": "Fictional - Name","TransactionOwnerName": "Some Other Name","InstitutionName": "ClearBank"},"CounterpartAccount": {"IBAN": "GB58CLRB04040009547509","OwnerName": "GB58CLRB04040009547509","TransactionOwnerName": "GB58CLRB04040009547509","InstitutionName": "LOYDGB22XXX"},"ActualEndToEndTransactionId": "EndToEndId8","SupplementaryData": [{"Name": "20","Value": "InstrId7"},{"Name": "32A","Value": "1909-11-1\r\n9.09"},{"Name": "33B","Value": ""},{"Name": "50K","Value": "DebtorName16\r\nGB58CLRB04040009547509"},{"Name": "52A","Value": "LOYDGB22XXX"},{"Name": "57A","Value": "CLRBGB20XXX"},{"Name": "59","Value": "GB57CLRB04040100057354"},{"Name": "70","Value": "EndToEndId8\r\nReference17"},{"Name": "71A","Value": "DEBT"}],"Iso20022XmlDocument": "<Document xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns=\"urn:iso:std:iso:20022:tech:xsd:pacs.008.001.08\"><FIToFICstmrCdtTrf><GrpHdr><CreDtTm>1900-02-03T04:00:30+00:00</CreDtTm><NbOfTxs>1</NbOfTxs></GrpHdr><CdtTrfTxInf><PmtId><InstrId>InstrId7</InstrId><EndToEndId>EndToEndId8</EndToEndId><UETR>c2f6a588-8d1a-44cb-af87-4741bf2812a3</UETR></PmtId><IntrBkSttlmAmt Ccy=\"GBP\">9.09</IntrBkSttlmAmt><IntrBkSttlmDt>1909-11-12</IntrBkSttlmDt><ChrgBr>DEBT</ChrgBr><Dbtr><Nm>DebtorName16</Nm></Dbtr><DbtrAcct><Id><IBAN>GB58CLRB04040009547509</IBAN></Id></DbtrAcct><DbtrAgt><FinInstnId><BICFI>LOYDGB22XXX</BICFI></FinInstnId></DbtrAgt><CdtrAgt><FinInstnId><BICFI>CLRBGB20XXX</BICFI></FinInstnId></CdtrAgt><CdtrAcct><Id><IBAN>GB57CLRB04040100057354</IBAN></Id></CdtrAcct><RmtInf><Ustrd>Reference17</Ustrd></RmtInf></CdtTrfTxInf></FIToFICstmrCdtTrf></Document>"},"Nonce": 1772448763}
Manually transfer a cash ISA out
You can also transfer a cash ISA to another provider. Once the transfer out is successful and the waiting period has completed, you'll need to close the account using the POST /v1/accounts/{accountId}/closure endpoint.
During the transfer out process, you move funds to a transfer out hub account created during onboarding. The cash ISA is then frozen. If the transfer out is successful, you can then move the funds from the transfer out hub to the new provider's account. There is a mandatory 15 working day waiting period before you can close the account. For example: if you requested a transfer out on Tuesday in week 1, the waiting period would end at 00:00 on Wednesday morning in week 4 (assuming there are no bank holidays). After that, you can close the account.
If the transfer out fails, the new provider will provide you a reason the transfer failed and they will return funds to the transfer out hub. Use the POST /v1/isas/{accountId}/transfer-outs/rejection endpoint to let ClearBank know the transfer out was unsuccessful and to unfreeze the account and return the account to the state it was before you requested the transfer out. Once the account is unfrozen, transfer the funds back into the cash ISA. The cash ISA will now continue to exist.
To transfer out a cash ISA:
- Use the POST /v1/isas/{accountId}/transfer-outs.
The cash ISA is now frozen. Only accrued interest, if any, can be credited to the account, and only the full balance can be withdrawn from the account.
- Once the account has been credited the final interest payment, withdraw the full balance of the account to the transfer out hub account created during onboarding. From there, you can send the funds to the new provider.
- Wait at least the remainder of the 15 working day waiting period to ensure the transfer out has been successful.
- Once the transfer has successfully completed, use the POST /v1/accounts/{accountId}/closure endpoint to request the account closure.
- OPTIONAL Use the GET /v1/accounts/{accountId}/closure endpoint to check whether the account has been closed.
- You will receive either the Account Closure Completed or Account Closure Failed webhook once the account closure process has completed.
The process is shown in this message flow diagram:
Automated cash ISA transfer in
An automated transfer in occurs when a customer approaches you to transfer their ISA from another ISA Manager (the ceding party) to ClearBank via Pay.UK's ISA transfer service.
To complete an automated transfer in:
- The customer requests you to transfer the cash ISA from the current institution holding the account (the ceding party).
- You call the POST /v1/isas/{accountId}/automated-transfer-in endpoint providing the necessary details.
- The transfer request is validated and submitted to the Pay.UK transfer service for further validation.
- You receive the Transfer Request webhook confirming the transfer request has been sent.
- The ceding party receives a Transfer Request message, validates the details and responds with a Transfer Acceptance message.
- You receive the Transfer Request Accepted webhook.
- The ceding party is sent a Ready For Payment Request message.
- You receive the Transfer Status Update webhook with the
State
ofReadyForPayment
. - The ceding party sends the funds to your ClearBank transfer hub account (created during onboarding).
- You receive the Transfer Status Update webhook with the
State
ofPaymentReceived
. - You call the POST /v3/payments/fps endpoint to move the funds from your transfer hub account to the customers new account.
- You receive the Transaction Settled webhook.
- The ceding party receives a Transfer Complete message.
- You receive the Transfer Status Update webhook with the State of
Completed
.
Tisa Transfer Request webhook
This webhook notifies that a cash ISA transfer request has been sent to the ceding party for a transfer in, or has been received from the acquiring party for a transfer out.
Request body
{"Type":"TisaTransferRequest","Version":1,"Payload": {...},"Nonce":}
Payload
Element | Description |
---|---|
MessageId | Required The unique message reference from the XML. Type: string Min length: 1 Pattern: ^[A-Z0-9\\-]{35}$ |
TimestampCreation | Required Timestamp created. Type: string Min length: 1 Format: date-time |
TransferDateRequested | Required The date the transfer request was received by the acquirer. Type: string Min length: 1 Format: date-time |
EffectiveDateOfTransfer | Required The effective date of the transfer. Type: string Min length: 1 Format: date-time |
Surname | Required Surname of the customer. Type: string Min length: 1 |
GivenName | Required Given name (first name) of customer. Type: string Min length: 1 |
BirthDate | Required Birth date of the customer. Type: string Min length: 1 Format: date-time |
NINumber | Required National Insurance number of the customer. Type: string Min length: 1 |
AddressLines | Required Address of the customer. Type: array Min length: 1 |
PostCode | Required Post code of the customer. Type: string Min length: 1 |
Country | Required Country of the customer. Must be a Valid ISO Country Code, for example, GB for the United Kingdom. Use ISO 3166-1 alpha-2 codes. Type: string Min length: 1 Pattern: ^[A-Z]{2}$ |
CedingPartyClientAccountIdentification | Required Sort Code, Account number of the investor in the ceding party's system, or alternative account identifier (Roll Number). Type: string Min length: 1 |
AcquiringPartyClientAccountIdentification | Required Sort Code, Account number of the investor in the acquiring party's system, or alternative account identifier (Roll Number)". Type: string Min length: 1 |
CedingPartySun | Required Ceding party's SUN (Service User Number), a unique identifier for the ISA manager in the Pay.UK service. Type: string Min length: 1 Pattern: ^[0-9]{6}$ |
AcquiringPartyCollectionAccount | Required Sort code and account number of the account the ceding party is to send the transfer funds to. Type: string Min length: 1 |
AcquiringPartySun | Required Acquiring party's SUN (Service User Number), a unique identifier for the ISA manager in the Pay.UK service. Type: string Min length: 1 Pattern: ^[0-9]{6}$ |
Urn | Required Unique reference number. Type: string Min length: 1 Max length: 18 Pattern: ^[A-Z0-9]{18}$ |
ResidualCashIndicator | Optional Indicates whether the ISA contains a residual cash asset for transfer. This is an optional field as it is only relevant for stocks and shares ISA transfers. Type: boolean |
CashComponentIndicator | Optional Indicates whether the ISA contains a residual cash asset for transfer. This is an optional field as it is only relevant for stocks and shares ISA transfers. Type: boolean |
ExtendedCurrentYearType | Required Include or exclude the current year subscriptions from the transfer. Valid options include: DEFAULT , INCLUDECURRENT , EXCLUDECURRENT Type: string Min length: 1 |
IncludeAllPreviousYears | Optional Indicates whether investor wants to transfer all previous years. Type: boolean |
AmountFromPreviousYearsSubscription | Optional Partial amount that can be made up of previous years subscriptions only or a combination of the current and previous years subscriptions. Type: number Format: decimal |
EarlyClosureWaiver | Optional Idicates whether the customer has acknowledged and agreed to pay a fee to exit a fixed-term product early. Type: boolean |
DateOfFirstSubscription | Required The date of the first subscription made by the customer in the current tax year. Type: string Min length: 1 Format: date-time |
LatestPaymentDate | Optional The date by which payment must be made. Type: string Format: date-time |
AcquiringPartyProductType | Optional Used to indicate the class of assets permitted by the acquiring party's product. Valid options include: CASH , STCK Type: string |
TotalAmountYearToDate | Required Maximum amount (excluding interest and withdrawals) that could be transferred by ceding party under current year subscription. Type: number Format: decimal |
Example Tisa Transfer Request webhook request body
{"Type":"TisaTransferRequest","Version":1,"Payload":{"MessageId":"CC539800B25E0128-260406A25248TA0001","TimestampCreation":"2025-09-05T17:19:01.3292634Z","TransferDateRequested":"2025-09-05T17:19:01.3292634Z","EffectiveDateOfTransfer":"2025-09-05T17:18:56.931104Z","Surname":"Green","GivenName":"Mary","BirthDate":"1977-08-22","NINumber":"QQ123456C","AddressLines": ["84 Fairview Close","London"],"PostCode":"SW1A 1AA","Country":"GB","CedingPartyClientAccountIdentification":"04044485574996","AcquiringPartyClientAccountIdentification":"04772265339175","CedingPartySun":"118647","AcquiringPartyCollectionAccount":"45512287","AcquiringPartySun":"163599","Urn":"54dazwsgv4moi3qbvf","ResidualCashIndicator":"true","CashComponentIndicator":"false","ExtendedCurrentYearType":"DEFAULT","IncludeAllPreviousYears":"true","AmountFromPreviousYearsSubscription":"4550.00","EarlyClosureWaiver":"true","DateOfFirstSubscription":"2024-01-01","LatestPaymentDate":"2025-10-01","AcquiringPartyProductType":"CASH","TotalAmountYearToDate":"14550.00",},"Nonce": 178642722}
Example webhook response
{"Nonce": 178642722}
Tisa Transfer Status Update webhook
This webhook notifies you that the status of an automated cash ISA transfer has been updated.
Request body
{"Type":"TisaTransferStatusUpdate","Version":1,"Payload": {...},"Nonce":}
Payload
Element | Description |
---|---|
MessageId | Required The unique message reference from the Swift message. Type: string Min length: 1 Max length: 35 Pattern: ^[A-Z0-9\\-]{35}$ |
TimestampCreated | Required Timestamp created. Type: string Min length: 1 Format: date-time |
ReceiverSun | Required The SUN (Service User Number) of the party receiving the status. Type: string Min length: 1 Max length: 6 Pattern: ^[0-9]{6}$ |
InitiatorSun | Required The SUN (Service User Number) of the party issuing the status. Type: string Min length: 1 Max length: 6 Pattern: ^[0-9]{6}$ |
Reference | Required This will normally be set to NA. If TECHREJECT, the ID of the rejected message will be inserted into this field. Type: string Min length: 1 |
Urn | Required Unique Reference Number(URN). Type: string Min length: 1 Max length: 18 Pattern: ^[A-Z0-9]{18}$ |
State | Required The updated state of the transfer. Valid options include: Default , Completed , Abandoned , Pending , Referred , Rejected , ReadyForPayment , Failure , TechnicalRejection , PaymentReceived , InvalidPaymentReceived Type: string |
Reason | Optional The reason for the updated state of the transfer. Valid options include: None , AbandonCustomerChangedMind , AbandonNoResponse , AbandonPendTooLong , AbandonTermsOfIsaBreached , FailAccountClosedOrBlocked , FailLatePayment , FailPaymentAmountIncorrect , RejectedAccountBalanceChanged , RejectedAccountClosed , RejectedAccountHolderDeceased , RejectedAccountNotFound , RejectedAccountStatusTransferError , RejectedCannotMakePaymentForDate , RejectedCustomerDeniedRequest , RejectedCurrentYearTransferLimit , RejectedFixedTermAccountTooLong , RejectedInsufficientFunds , RejectedMismatchInformation , RejectedNotCisaAccount , RejectedPaymentDateTooLate , AcquiringPartyAccountSortCodeAndAccountNumberModulusCheckFailed , AcquiringPartyAccountMismatchTransferRequest , MandatoryIfRollNumberExists , AcquiringPartyInvalidAccountSortCode , AcquiringPartyCustomerAccountSortCodeAndAccountNumberModulusCheckFailed , AcquiringPartyCustomerAccountMismatchTransferRequest , AcquiringPartyInvalidCustomerAccountSortCode , AcquiringPartyServiceUserNumberMismatchTransferRequest , SubmitterNotAuthorized , ServiceUserNumberNotAuthorized , NotAuthorizedForAccountType , JisaRules , AmountFromPreviousYearsSubscriptionNotAllowed , BirthDateInFuture , BirthDateTooOld , BirthDateTooOldForProductType , BirthDateTooYoungForProductType , CedingPartyAccountSortCodeAndAccountNumberModulusCheckFailed , CedingPartyInvalidCustomerAccountSortCode , CedingPartyServiceUserNumberMismatchTransferRequest , CedingPartyServiceUserNumberIsAssociatedWithStocksAndSharesOnly , CedingPartySubmitterNotAuthorized , CedingPartyServiceUserNumberNotAuthorized , CreationDateTimeInFuture , MismatchLastPaymentDate , CreationDateTimeTooOld , InvalidCountryCode , DateOfFirstSubscriptionInFuture , DateOfFirstSubscriptionInvalidForCurrentTaxYear , DateTransferRequestReceivedInFuture , DateTransferRequestReceivedTooOld , EffectiveDateInFuture , EffectiveDateTooOld , GroupHeaderCreationDateTimeInvalid , GroupHeaderMessageIdDayOfYearMismatch , GroupHeaderIdNotUnique , GroupHeaderIdSunMismatch , GroupHeaderIdYearMismatch , GroupHeaderSubmitterSunMismatch , GroupHeaderNumberOfTransactionsMismatch , LastPaymentDateInPast , LastPaymentDateTooFarInFuture , LegalGuardianSurnameIsMandatory , LegalGuardianGivenNameIsMandatory , LegalGuardianAddressLineIsMandatory , LegalGuardianPostCodeIsMandatory , LegalGuardianCountryCodeIsMandatory , LegalGuardianBirthDate , LegalGuardianSocialSecurityNumberMustNotBePresent , LegalGuardianNameAndAddressAreProhibited , LegalGuardianPostCodeMissingForGbCountry , LegalGuardianPostCodeProhibited , MessageIdentifierInvalidSystemType , MessageIdentifierInvalidProductClassificationCode , MessageIdentifierCedingPartySunMismatch , MessageIdentifierDayNumberMismatchWithCreationDateTime , MessageIdentifierYearMismatchWithCreationDateTime , MessageIdentifierOriginatorInvalid , MessageIdentifierMessageTypeInvalid , MessageIdentifierNotUnique , MessageIdentifierProductTypeInvalid , OriginatingPartyServiceUserNumberMismatchAcquiringPartyServiceUserNumber , OriginatingPartyServiceUserNumberMismatchCedingPartyServiceUserNumber , OriginatingPartyServiceUserNumberSubmitterNotAuthorized , PostCodeMandatoryForGbCountry , PostCodeMustNotBePresentForNonGbCountries , ReceivingPartyServiceUserNumberMismatchAcquiringPartyServiceUserNumber , ReceivingPartyServiceUserNumberMismatchCedingPartyServiceUserNumber , ReasonContainsInvalidDate , ReasonIsMandatoryForCertainStates , ReasonDateIsNotInFuture , TotalAmountYearToDateIsMandatory , TotalAmountYearToDateProhibited , TotalAmountYearToDateExceedTransferLimit , UrnServiceUserNumberMismatchAcquiringPartySun , UrnServiceUserNumberMismatchMessageId , UrnMismatchOriginatingSun , UrnMismatchTransferRequestUrn , UrnNotUnique , UrnContainsInvalidProductType , UrnMessageNotInCorrectStateForStatusChange , UrnMessageNotInCorrectStateForAcceptTransfer , InvalidExtendedCurrentYearTypeForJisa Type: string |
Example Tisa Transfer Status Update webhook request body
{"Type":"TisaTransferStatusUpdate","Version":1,"Payload":{"MessageId":"CC539800B25E0128-260406A25251SA0004","TimestampCreated":"2025-10-20T09:54:44.000209Z","ReceiverSun":"118647","InitiatorSun":"163599","Reference":"NA","Urn":"CISA539800B25E0128","State":"Abandoned","Reason":"AbandonCustomerChangedMind",},"Nonce": 108246778}
Example webhook response
{"Nonce": 1082946778}
Tisa Transfer Accepted webhook
This webhook notifies that a cash ISA transfer request has been accepted by the ceding party for a transfer in, or acceptance has been sent to the acquiring party for a transfer out.
Request body
{"Type":"TisaTransferAccepted","Version":1,"Payload": {...},"Nonce":}
Payload
Element | Description |
---|---|
MessageId | Required The unique message reference from the XML. Type: string Min length: 1 Pattern: ^[A-Z0-9\\-]{35}$ |
TimestampCreation | Required Timestamp created. Type: string Min length: 1 Format: date-time |
Surname | Required Surname of the customer. Type: string Min length: 1 |
GivenName | Required Given name (first name) of customer. Type: string Min length: 1 |
BirthDate | Required Birth date of the customer. Type: string Min length: 1 Format: date-time |
NINumber | Required National Insurance number of the customer. Type: string Min length: 1 |
AddressLines | Required Address of the customer. Type: array Min length: 1 |
PostCode | Required Post code of the customer. Type: string Min length: 1 |
Country | Required Country of the customer. Must be a Valid ISO Country Code. Use GB for the United Kingdom. Use ISO 3166-1 alpha-2 codes, for example, GB. Type: string Min length: 1 Pattern: ^[A-Z]{2}$ |
CedingPartyClientAccountIdentification | Required Sort code and account number of the investor in the ceding party's system, or alternative account identifier (Roll Number)". Type: string Min length: 1 |
AcquiringPartyClientAccountIdentification | Required Sort code and account number of the investor in the acquiring party's system, or alternative account identifier (Roll Number)". Type: string Min length: 1 |
CedingPartySun | Required Ceding party's SUN (Service User Number), a unique identifier for the ISA manager in the Pay.UK service. Type: string Min length: 1 Pattern: ^[0-9]{6}$ |
AcquiringPartyCollectionAccount | Required Sort code and account number of the account the ceding party is to send the transfer funds to. Type: string Min length: 1 |
AcquiringPartySun | Required Acquiring party's SUN (Service User Number), a unique identifier for the ISA manager in the Pay.UK service. Type: string Min length: 1 Pattern: ^[0-9]{6}$ |
Urn | Required Unique reference number. Type: string Min length: 1 Max length: 18 Pattern: ^[A-Z0-9]{18}$ |
ActualTransferDate | Required Mandatory element but currently not used. It has default value of 2000-01-01. Type: string Min length: 1 Format: date-time |
ActualTransferAmount | Optional The total amount transferred. Type: number Format: decimal |
ActualTransferMethod | Required The method used to transfer the funds. Valid options include: BACS , CHAPS , FPS . Type: string |
ResidualCashIndicator | Optional Indicates whether the ISA contains a residual cash asset for transfer. This is an optional field as it is only relevant for stocks and shares ISA transfers. Type: boolean |
CashComponentIndicator | Optional Indicates whether the ISA contains a residual cash asset for transfer. This is an optional field as it is only relevant for stocks and shares ISA transfers. Type: boolean |
ExtendedCurrentYearType | Required Include or exclude the current year subscriptions from the transfer. Valid options include: DEFAULT , INCLUDECURRENT , EXCLUDECURRENT Type: string Min length: 1 |
DateOfFirstSubscription | Required The date of the first subscription made by the customer in the current tax year. Type: string Min length: 1 Format: date-time |
TotalAmountYearToDate | Required Maximum amount (excluding interest and withdrawals) that could be transferred by ceding party under current year subscription. Type: number Format: decimal |
AcquiringPartyProductType | Optional Used to indicate the class of assets permitted by the acquiring party's product. Valid options include: CASH , STCK . Type: string |
Example Tisa Transfer Request webhook request body
{"Type":"TisaTransferRequest","Version":1,"Payload":{"MessageId":"CC539800B25E0128-260406C25251AA0001","TimestampCreation":"2025-10-20T09:54:44.000209Z","Surname":"Green","GivenName":"Mary","BirthDate":"1977-08-22","NINumber":"QQ123456C","AddressLines": ["84 Fairview Close","London"],"PostCode":"SW1A 1AA","Country":"GB","CedingPartyClientAccountIdentification":"SC040444AC85574996","AcquiringPartyClientAccountIdentification":"SC047722AC65339175","CedingPartySun":"118647","AcquiringPartyCollectionAccount":"45512287","AcquiringPartySun":"163599","Urn":"54dazwsgv4moi3qbvf","ActualTransferDate":"2000-01-01T00:00:00","ActualTransferAmount":"14550.00","ActualTransferMethod":"FPS","ResidualCashIndicator":"true","CashComponentIndicator":"false","ExtendedCurrentYearType":"DEFAULT","DateOfFirstSubscription":"2024-01-01","TotalAmountYearToDate":"14550.00","AcquiringPartyProductType":"CASH",},"Nonce": 122672772}
Example webhook response
{"Nonce": 122672772}
Automated transfer in referred
When the ceding party receives the Transfer Request message, they may respond advising the request has been referred. This typically means that the transfer request has encountered a condition that prevents it from proceeding automatically and requires manual review or intervention. For example, they may contact the customer who holds the ISA to confirm that they requested the transfer.
Following the referral, the ceding party can:
Accept the transfer:
or reject the transfer:
If the transfer is rejected, the customer should decide how they wish to proceed, either:
- Resubmit the transfer request - you can do this by calling the PUT /v1/isas/{accountId}/automated-transfer-in/{urn} and providing the URN of the existing transfer, or
- Abandon the transfer request - you can update the existing transfer request to abandoned by calling the PATCH /v1/isas/{accountId}/automated-transfer-in/{urn}, providing the URN of the existing transfer, and update the
State
toAbandoned
.
Automated cash ISA transfer out
To complete an automated transfer out:
- The customer contacts the acquiring party (the financial institution they want to transfer their current cash ISA to).
- The acquiring party sends a Transfer Request message to ClearBank through the Pay.UK transfer service.
- You receive the Transfer Request webhook.
- The transfer request is validated and a Transfer Acceptance message is sent to the acquiring party.
- You receive the Transfer Accepted webhook.
- Before transferring the funds, you can contact the customer to confirm the transfer.
- The acquiring party sends a Ready For Payment Request message.
- You receive the Transfer Status Update webhook with the
State
ofReadyForPayment
. - You call the POST /v3/payments/fps endpoint to move the funds from the cash ISA to your transfer hub account (created during onboarding).
- You receive the Transaction Settled webhook.
- You call the POST /v3/payments/fps endpoint to move the funds from your transfer hub account to the account details provided by the acquiring party.
- You receive the Transaction Settled webhook.
- The acquiring party sends a Transfer Completed message.
- You receive the Transfer Status Update webhook with the
State
ofCompleted
.
Automated transfer out referred or rejected
When the Transfer Request message is received from the acquiring party, the provided details are validated against the following which can result in the transfer request being referred or rejected:
Referred:
- Fuzzy match check on the customer's given name, surname, address, date of birth, National Insurance number, and account details returns a close but not exact match.
- Balance of the ISA is £50,000.00 or more .
If the transfer is referred, a Transfer Referral message is sent to the acquiring party. Once referred:
- You can contact the customer to confirm if they requested the transfer. Depending on their answer, you can then use the PATCH /v1/isas/{accountId}/automated-transfer-out/{urn} to update the
State
toAccept
orRejected
and provide a reason. - The acquiring party can choose to abandon the transfer by sending a Transfer Abandoned message or take no action if they want to continue with the transfer.
Rejected:
- A fuzzy match check on the customer's given name, surname, address, date of birth, National Insurance number, or account details returns no match or too fuzzy.
- The request is for a partial transfer out (not currently supported).
- Account has insufficient funds to meet the transfer request.
- The amount to transfer would result in the ISA exceeding the annual allowance.
If the transfer is rejected, a Transfer Rejected message is sent to the acquiring party. Once rejected, the acquiring party can choose to:
- Amend the transfer request and resubmit using the existing or a new URN.
- Abandon the transfer by sending a Transfer Abandoned message.