ClearBank

Hub accounts

Hub accounts overview

Hub accounts are FSCS protected bank accounts held with ClearBank that enable innovative financial products. Use cases for hub accounts typically involve making payments to and from a defined set of accounts.

To ensure regulatory compliance, hub accounts may be subject to one or more of the following constraints:

  • Payments may only be made for specific purposes.
  • Payments may only be made to and from designated bank accounts.
  • Payment frequency may be restricted.

Exact details will be agreed with your institution directly.

Hub accounts are available by prior agreement with ClearBank; if you're interested in using these, please speak with your Client Director.

Creating hub accounts

Hub accounts can be created using the POST /accounts/sterling/v1/hub-accounts endpoint. Before creating a hub account, you'll need the following information:

  • The account-holding customer's details.
  • Your sort code, provided to you by ClearBank.
  • A productId, also provided to you by ClearBank.
  • Optionally, if your hub accounts are interest bearing, an interestConfigurationId.

Account holding customer
Each hub account must be held by a retail customer or business customer. The holder of a hub account is entitled to its funds. Refer to our retail customers page, or contact your Client Director for guidance on creating business customers.

Once you've created a retail or business customer, take note of their customerId and legal name - you'll need these to associate the customer with their new hub account.

Sort code
A sort code will have been assigned to you as part of your onboarding process.

Product identity
The productId you should use will be provided to you as part of onboarding. This ID determines how your hub account behaves.

Interest configuration (optional)
Hub accounts may be interest bearing. This will have been agreed between your institution and ClearBank. If your hub accounts are interest bearing, you can set up their interest configuration profile. Once created, the profile's interestConfigurationId may be reused across subsequent hub accounts to refer to the same configuration profile.

Create a hub account

post/accounts/sterling/v1/hub-accounts

Use this endpoint to create a new hub account.

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)

  • ownerName string, Required

    The name used to identify the legal owner of the hub account.

    Minimum length
    0
    Maximum length
    140
    Pattern
    ^[^\|_\[\]<>^`~\\$]*$
  • sortCode string, Required

    The sort code that the account should be created under. Should not include hyphens.

    Pattern
    ^\d{6}$
  • productId string, Required

    The product identifier of the account. It is used to determine the behaviour of the account.

    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}$
  • customers array, Required

    The customers who hold the account.

  • interestConfigurationId string

    The unique identifier of the interest configuration. This determines the how interest is accrued on the account.

    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}$

request

{
"ownerName": "John Smith",
"sortCode": "010203",
"productId": "74b00ccf-c4ad-470c-ac29-ce57cb658527",
"customers": [
{
"customerId": "5b9beca1-d9a8-40d0-bd65-0747d5959cff"
}
],
"interestConfigurationId": "d20b2c84-6c9e-4ebb-84ad-be9d5be97188"
}
Code copied

Response (application/json)

  • 201 Success
  • 400 Bad Request
  • 404 Not Found
  • 422 Client Error

Success

{
"account": {
"accountId": "232d0a3c-0933-4894-9fbc-230cf183c7ed",
"productId": "b4f9853e-40c0-4203-97e0-7a42075d6dda",
"customers": [
{
"customerId": "5b9beca1-d9a8-40d0-bd65-0747d5959cff"
}
],
"interestConfigurationId": "24df1e52-24d9-4bda-86af-c81a7d1932b1",
"accountName": "Hub Account",
"ownerName": "John Smith",
"iban": "GB12CLBK01020312345678",
"bban": "CLBK01020312345678",
"createdDateTime": "2024-01-01T12:34:56.789+00:00"
},
"halLinks": [
{
"name": "string",
"href": "string",
"templated": true
}
]
}
Code copied

Bad Request

{
"type": "../dictionary",
"title": "string",
"status": 100,
"detail": "string",
"instance": "../dictionary",
"errors": {
"property1": [
"string"
],
"property2": [
"string"
]
}
}
Code copied

Client Error

{
"type": "../dictionary",
"title": "string",
"status": 100,
"detail": "string",
"instance": "../dictionary",
"errors": {
"property1": [
"string"
],
"property2": [
"string"
]
}
}
Code copied

Associated Webhooks

Funding a hub account

A hub account can be funded and defunded via a nominated account that you assign, or via certain designated accounts.
Nominated accounts do not have to be provided by ClearBank: they can be from another external provider. However, the nominated account must be owned by the same account holder as the hub account. To set or replace the nominated account for a hub account, you can use the PUT /v1/accounts/{accountId}/nominated-account endpoint.

You can make payments from a hub account to its nominated account via Faster Payments. To receive updates about transactions for a hub account, you can subscribe to the Transaction Settled webhook.

If your hub accounts are configured to accrue interest, you can subscribe to the Interest Paid webhook to be notified when interest is paid into the account.

Set a nominated account

put/v1/accounts/{accountId}/nominated-account

This endpoint is used to set a nominated account.

Parameters

  • accountId string, path, Required

    The unique identifier for the real account associated with the nominated account. This can be retrieved from GET /v3/Accounts.

  • 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)

  • identifier string, Required

    The identifier for the nominated account. IBAN is the preferred format.

    Minimum length
    0
    Maximum length
    50
  • identifierKind string, Required

    The type of identifier for the nominated account. Supported values are 'IBAN', 'BBAN' and 'SCAN' (Sort Code and Account Number).

  • ownerName string, Required

    The name used to identify the legal owner of the nominated account.

    Minimum length
    1
    Maximum length
    140
    Pattern
    ^[0-9a-zA-Z\/\-\?:\(\)\.,’'\+ !#$%&\*=^_`\{\|\}~"";<>@\[\\\]]+$

request

{
"identifier": "GB29NWBK60161331926819 (IBAN), NWBK60161331926819 (BBAN) or 60161331926819 (SCAN)",
"identifierKind": "IBAN",
"ownerName": "John Smith"
}
Code copied

Response (application/json)

  • 200 OK
  • 400 Bad Request
  • 404 Not Found

OK

{
"nominatedAccount": {
"identifier": "GB12CLBK01020312345678",
"identifierKind": "IBAN",
"ownerName": "John Smith"
},
"halLinks": [
{
"name": "string",
"href": "string",
"templated": true
}
]
}
Code copied

Bad Request

{
"type": "../dictionary",
"title": "string",
"status": 100,
"detail": "string",
"instance": "../dictionary",
"errors": {
"property1": [
"string"
],
"property2": [
"string"
]
}
}
Code copied

Get a nominated account

get/v1/accounts/{accountId}/nominated-account

This endpoint is used to get the details of a nominated account.

Parameters

  • accountId string, path, Required

    The unique identifier for the real account associated with the nominated account. This can be retrieved from GET /v3/Accounts.

  • Authorization string, header, Required

    Your API Token, obtained from the ClearBank Portal.

Response (application/json)

  • 200 OK
  • 404 Not Found

OK

{
"nominatedAccount": {
"accountId": "01234567-89ab-cdef-0123-456789abcdef",
"identifier": "GB12CLBK01020312345678",
"identifierKind": "IBAN",
"ownerName": "John Smith",
"createdDateTime": "2024-05-01T00:00:00+01:00",
"modifiedDateTime": "2024-05-01T00:00:00+01:00"
},
"halLinks": [
{
"name": "string",
"href": "string",
"templated": true
}
]
}
Code copied

Retrieve and update hub account information

You can retrieve information on all hub accounts by using the GET /v3/accounts endpoint and filtering for hub accounts.
To retrieve information about a specific hub account, you can use the GET /v3/Accounts/{accountId} endpoint.

To make any updates to an existing hub account, you can use the PATCH /v1/accounts/{accountId} endpoint.

Get all real accounts, including hub accounts

get/v3/Accounts

Gets all accounts associated with your institution.

All accounts are returned except those which have been disabled or where the account is a virtual account.

Parameters

  • pageNumber integer, query

    The page number to control returned results into manageable sets. Default if not supplied: 1.

  • pageSize integer, query

    The page size to control returned results into manageable sets. Default if not supplied: 50.

  • Authorization string, header, Required

    Your API Token, obtained from the ClearBank Portal.

Response (application/json)

  • 200 OK
  • 400 Bad Request

OK

{
"accounts": [
{
"id": "01234567-89ab-cdef-0123-456789abcdef",
"name": "Sample Account Type Name",
"label": "John Smith",
"type": "CACC",
"currency": "GBP",
"balances": [
{
"name": "Current Account",
"amount": "2310.55",
"currency": "GBP",
"status": "VALU",
"balanceLastUpdatedAt": "2025-04-19T10:02:00.964Z"
}
],
"minimumBalance": {
"name": "Current Account",
"amount": "-200",
"currency": "GBP",
"status": "VALU"
},
"productType": "Segregated",
"accountSubType": "SafeguardedPooled",
"legalOwnerType": "Personal",
"relationshipType": "Single",
"status": "Enabled",
"statusReason": "Other",
"timestampCreated": "2025-02-19T11:32:10.934Z",
"timestampModified": "2025-05-25T18:27:12.524Z",
"iban": "GB12CLBK01020312345678",
"bban": "CLBK01020312345678",
"upic": "string",
"cuid": "string"
}
],
"halLinks": [
{
"name": "string",
"href": "string",
"templated": true
}
]
}
Code copied

Bad Request

{
"type": "../dictionary",
"title": "string",
"status": 100,
"detail": "string",
"instance": "../dictionary",
"errors": {
"property1": [
"string"
],
"property2": [
"string"
]
}
}
Code copied

Get information for a hub account

get/v3/Accounts/{accountId}

Gets a detailed view of an account.

Parameters

  • accountId string, path, Required

    The unique identifier for the account. This can be retrieved from GET /v3/Accounts.

  • Authorization string, header, Required

    Your API Token, obtained from the ClearBank Portal.

Response (application/json)

  • 200 OK
  • 400 Bad Request
  • 403 Forbidden
  • 404 Not Found

OK

{
"account": {
"id": "01234567-89ab-cdef-0123-456789abcdef",
"name": "Sample Account Type Name",
"label": "John Smith",
"type": "CACC",
"currency": "GBP",
"balances": [
{
"name": "Current Account",
"amount": "2310.55",
"currency": "GBP",
"status": "VALU",
"balanceLastUpdatedAt": "2025-04-19T10:02:00.964Z"
}
],
"minimumBalance": {
"name": "Current Account",
"amount": "-200",
"currency": "GBP",
"status": "VALU"
},
"productType": "Segregated",
"accountSubType": "SafeguardedPooled",
"legalOwnerType": "Personal",
"relationshipType": "Single",
"status": "Enabled",
"statusReason": "Other",
"timestampCreated": "2025-02-19T11:32:10.934Z",
"timestampModified": "2025-05-25T18:27:12.524Z",
"iban": "GB12CLBK01020312345678",
"bban": "CLBK01020312345678",
"upic": "string",
"cuid": "string"
},
"halLinks": [
{
"name": "string",
"href": "string",
"templated": true
}
]
}
Code copied

Bad Request

{
"type": "../dictionary",
"title": "string",
"status": 100,
"detail": "string",
"instance": "../dictionary",
"errors": {
"property1": [
"string"
],
"property2": [
"string"
]
}
}
Code copied

You can use the endpoint below to update the details of a hub account.

Amend a hub account

patch/v1/accounts/{accountId}

This endpoint is used to amend the properties of an existing real account.

Parameters

  • accountId string, path, Required

    The unique identifier for the real account.

  • 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)

  • status string

    Use this field to set the status of the account. If closing or suspending the account, you should provide a StatusReason. If you are not updating the account's status, either use 'NotProvided' or omit this field.

    Enum array
    NotProvided, Enabled, Closed, Suspended
  • statusReason string

    If the account Status is Closed or Suspended, use this field to provide a reason. Use 'Other' if no other options apply. Do not provide this field if you are updating the status to 'Enabled'.

    Enum array
    AccountHolderBankrupt, AccountHolderDeceased, AccountSwitched, CompanyNoLongerTrading, DissatisfiedCustomer, DuplicateSoleTraderAccount, FinancialCrime, FraudFirstParty, FraudThirdParty, FraudConfirmed, InternallyDormant, KYCRequired, LegallyDisputed, PotentialSanctionedIndividual, SanctionedIndividual, SuspectMoneyLaundering, TransactionDispute, Other
  • ownerName string

    The name used to identify the legal owner of the account.

    Minimum length
    0
    Maximum length
    70
    Pattern
    ^[^\|_\[\]<>^`~\\$]*$
  • legalOwnerType string

    Nature of funds held in the account. Valid options include: Personal, Business.

    Enum array
    Personal, Business
  • relationshipType string

    Operating nature of the account. Valid options include Single, Joint. If legalOwnerType is Business, then the relationshipType cannot be Joint.

    Enum array
    Single, Joint
  • minimumBalance number

    The minimum allowable balance of the account (example: -£1000). Note that you must send a negative number to create an overdraft. This field can only be used if your organisation is an embedded banking client with an overdraft agreement in place; otherwise the request will be rejected.

request

{
"status": "Closed",
"statusReason": "AccountHolderDeceased",
"ownerName": "John Smith",
"legalOwnerType": "Personal",
"relationshipType": "Single",
"minimumBalance": 0
}
Code copied

Response (application/json)

  • 204 No content
  • 400 Bad Request
  • 403 Forbidden
  • 409 Conflict

Bad Request

{
"type": "../dictionary",
"title": "string",
"status": 100,
"detail": "string",
"instance": "../dictionary",
"errors": {
"property1": [
"string"
],
"property2": [
"string"
]
}
}
Code copied

Conflict

{
"type": "../dictionary",
"title": "string",
"status": 100,
"detail": "string",
"instance": "../dictionary",
"errors": {
"property1": [
"string"
],
"property2": [
"string"
]
}
}
Code copied

Hub account closure

Before attempting to close a hub account, you should ensure you are subscribed to both the Account Closure Completed and Account Closure Failed webhooks.

To close a hub account, follow these steps:

  1. Withdraw all funds from the account.
  2. Use the POST /v1/accounts/{id}/closure endpoint to request closure.

    Note: If the hub account is interest bearing, it must have a nominated account before it can be closed. If there is no interest to be paid, then you can close the account without defining a nominated account.

  3. OPTIONAL You can check the closure status of a hub account using the GET /v1/accounts/{id}/closure endpoint.
  4. You'll receive an Account Closure Completed webhook once the account has closed.

Account closure may fail due to the nominated account details being incorrect. If this happens, you'll be notified via the ClosureFailureReason field in the Account Closure Failed webhook.

If account closure fails and isn't resolved before the end of the month, then any accrued interest will be paid into the account. You'll need to fully withdraw these funds from the account again before reattempting closure.

Close a hub account

post/v1/accounts/{accountId}/closure

This endpoint is used to create an account closure request.

Parameters

  • accountId string, path, Required

    The unique identifier for the account.

  • 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)

  • closureReason string, Required

    The reason for closing the account. Use 'Other' if no other options apply.

    Enum array
    AccountHolderBankrupt, AccountHolderDeceased, AccountSwitched, CompanyNoLongerTrading, DissatisfiedCustomer, DuplicateSoleTraderAccount, FinancialCrime, FraudFirstParty, FraudThirdParty, FraudConfirmed, InternallyDormant, KYCRequired, LegallyDisputed, PotentialSanctionedIndividual, SanctionedIndividual, SuspectMoneyLaundering, TransactionDispute, Other

request

{
"closureReason": "AccountHolderDeceased"
}
Code copied

Response (application/json)

  • 202 Accepted
  • 400 Bad Request
  • 404 Not Found
  • 409 Conflict

Accepted

{
"accountClosure": {
"accountId": "01234567-89ab-cdef-0123-456789abcdef",
"closureReason": "AccountHolderDeceased",
"closureStatus": "Pending"
},
"halLinks": [
{
"name": "string",
"href": "string",
"templated": true
}
]
}
Code copied

Bad Request

{
"type": "../dictionary",
"title": "string",
"status": 100,
"detail": "string",
"instance": "../dictionary",
"errors": {
"property1": [
"string"
],
"property2": [
"string"
]
}
}
Code copied

Conflict

{
"type": "../dictionary",
"title": "string",
"status": 100,
"detail": "string",
"instance": "../dictionary",
"errors": {
"property1": [
"string"
],
"property2": [
"string"
]
}
}
Code copied

Associated Webhooks

Get account closure status

get/v1/accounts/{accountId}/closure

Get current status of the account closure request.

Parameters

  • accountId string, path, Required

    The unique identifier for the account.

  • Authorization string, header, Required

    Your API Token, obtained from the ClearBank Portal.

Response (application/json)

  • 200 OK
  • 400 Bad Request
  • 404 Not Found

OK

{
"accountClosure": {
"accountId": "01234567-89ab-cdef-0123-456789abcdef",
"accountStatus": "Closed",
"closureStatus": "Complete",
"closureFailureReasons": [
"string"
],
"accountModifiedDateTime": "2024-01-01T12:34:56.789+00:00"
},
"halLinks": [
{
"name": "string",
"href": "string",
"templated": true
}
]
}
Code copied

Bad Request

{
"type": "../dictionary",
"title": "string",
"status": 100,
"detail": "string",
"instance": "../dictionary",
"errors": {
"property1": [
"string"
],
"property2": [
"string"
]
}
}
Code copied

You can receive the following combinations of accountStatus and closureStatus from the GET /v1/accounts/{accountId}/closure endpoint:

accountStatusclosureStatusDescription
EnabledNoneNo closure request submitted
EnabledPendingClosure requested, interest being calculated
EnabledFailedClosure request failed, see closureFailureReasons field for details
SuspendedPendingClosure requested for suspended account, interest being calculated
ClosedCompleteClosure completed successfully