# Account closure guide

This guide describes the automated account closure process. This mandatory feature applies to all Solaris branches, products, and customer segments. Review the [Exceptional cases](#exceptional-cases) section for specific deviations.

This guide covers:

* The automated account closure workflow.
* Types of account closure requests (ACRs).
* Initiating account closure requests for your customers.


## Introduction

### Summary of the process

At a high level, the account closure process works as follows:

1. **Initiation:** You (via your frontend) or Solaris initiates an **account closure request** (ACR).
  * If **Solaris** initiates the ACR, you receive a notification on the `ACCOUNT_CLOSURE_REQUEST` webhook. **Note:** You must notify the customer immediately about the closure.
  * If a **customer** initiates the ACR, your application must validate the request before calling the account closure endpoint.
2. **Calculation:** Solaris triggers an account closure job and calculates a **legal closure date**.
3. **Updates:** Solaris sends status updates via the `ACCOUNT_CLOSURE_REQUEST_UPDATE` webhook for specific transitions.
4. **Completion:** If the job succeeds, the account is closed, and you receive an `ACCOUNT_CLOSURE` webhook notification.
  * If the job fails, Solaris Customer Support will assist.


### Types of account closure requests

There are three types of ACRs:

1. **Customer-initiated:** A customer requests closure through your solution.
2. **Partner-initiated:** You terminate the business relationship with a customer.
  * Consult Solaris before initiating an ACR with a reason other than `CUSTOMER_WISH`.
  * You cannot create ACRs for accounts with a compliance block.
3. **Solaris-initiated:** Solaris terminates the business relationship with a customer.
  * You will receive a notification via the `ACCOUNT_CLOSURE_REQUEST` webhook.


### Types of account closures

Regardless of the initiator, an account closure (AC) is either **ordinary** or **immediate**.

#### Ordinary closures

**Ordinary account closures** apply when a customer account closes according to the notice period specified in the Terms and Conditions. For digital banking accounts, this notice period is typically **two months**.

When an ordinary ACR is initiated (by you or the customer), the **legal closure date** is calculated as the end of the contractual notice period. The account closure job executes on Solaris' backend on this date.

The following table outlines possible `closure_reason` values for ordinary closures:

| Internal (Solaris) closure reasons | External (partner) closure reasons |
|  --- | --- |
| - `COMPLIANCE_ORDINARY_INTERNAL`
  - `FATCA_STATUS_INELIGIBLE_ORDINARY`
  - `INSOLVENCY_ORDINARY_INTERNAL`
  - `KYC_ORDINARY_INTERNAL`
  - `RELATIONSHIP_TERMINATION_INTERNAL`
  - `SEIZURES_ORDINARY_INTERNAL`
  - `TAX_ID_CHANGE_ORDINARY`
  - `TERMS_AND_CONDITIONS_BREACH_ORDINARY`
  - `WRONG_ACCOUNT_TYPE`

 | `RELATIONSHIP_TERMINATION` |


#### Immediate closures

**Immediate account closures** apply when you or Solaris cannot continue the relationship and must terminate the account immediately (e.g., for compliance reasons).

When an immediate ACR is initiated, the **legal closure date** is set to the current date, and the account closure job runs immediately.

note
You may only close a customer's account with the reason `ACCOUNT_REVOCATION` within the first **14 days** after the account opening.

| Internal (Solaris) closure reasons | External (partner) closure reasons |
|  --- | --- |
| - `ACCOUNT_REVOCATION_INTERNAL`
  - `COMPLIANCE_IMMEDIATE_INTERNAL`
  - `CUSTOMER_WISH_INTERNAL`
  - `DUNNING_DECOUPLED_CARD_INTERNAL` (only for decoupled debit card accounts)
  - `FATCA_STATUS_INELIGIBLE_IMMEDIATE`
  - `INSOLVENCY_IMMEDIATE_INTERNAL`
  - `TERMS_AND_CONDITIONS_BREACH_IMMEDIATE`

 | - `ACCOUNT_REVOCATION`
  - `COMPLIANCE_IMMEDIATE_PARTNER`
  - `CUSTOMER_WISH`

 |


### Customer communication

When notifying a customer of an account closure, you must include specific information based on your setup (e.g., legal closure date, fund payout rights). Your Partner Manager will define the mandatory information for this communication.

### Exceptional cases

* **Multi-account Products:** If your solution includes a product with multiple bank accounts (e.g., multi-accounts, sub-accounts), you must issue a separate ACR for **each** account.
* **Branching Requirements:** Depending on your **branching country**, additional steps may be required. Contact your Partner Manager for details.
* **Splitpay:** If a customer closes their account, any associated Splitpay credit line is also terminated. Solaris manages this process internally. Contact your Partner Manager for details.


### Webhooks

You must subscribe to the following webhooks for compliance:

* [`ACCOUNT_CLOSURE_REQUEST`](/api-reference/onboarding/webhooks/webhook-events/paths/account_closure_request/post): Notifies you when **Solaris** initiates an ACR. (Customer- and partner-initiated ACRs are **not** reported here).
* [`ACCOUNT_CLOSURE_REQUEST_UPDATE`](/api-reference/onboarding/webhooks/webhook-events/paths/account_closure_request_update/post): Notifies you when an ACR status changes. See [ACR Status Updates](#account_closure_request_update).
* [`ACCOUNT_CLOSURE`](/api-reference/onboarding/webhooks/webhook-events/paths/account_closure/post): Notifies you when a customer account is **technically closed** (may occur after the **legal closure**).


### ACR endpoints

#### POST Create ACR

Call the `POST /account_closure_requests` endpoint to initiate an ACR.

[View full API reference](/api-reference/digital-banking/account-management#operation/Create%20account_closure_request)

#### GET Retrieve info about an ACR

The `GET /account_closure_requests/{account_closure_request_id}` method returns information about a specific ACR.

[View full API reference](/api-reference/digital-banking/account-management#operation/Get%20account_closure_request%20by%20Id)

#### GET List all ACRs

The `GET /account_closure_requests` method returns a list of all ACRs.

[View full API reference](/api-reference/digital-banking/account-management#operation/Index%20account_closure_requests)

## Customer-initiated ACRs

Your solution must enable customers to request account closure.

1. **Validation:** Perform the following checks before creating the ACR:
  * Account `status` must be `ACTIVE`.
  * Account balance must be 0.
  * No active **compliance block**.
2. **Creation:** Call the [POST Create an ACR endpoint](#post-create-acr) with the `closure_reason`. For customer-initiated ACRs, use `CUSTOMER_WISH` or `ACCOUNT_REVOCATION`.
3. **Blocking:** Upon initiation, Solaris fully blocks the account. Pay-ins and pay-outs are disabled. The account is considered **legally closed**.
4. **Processing:** Solaris runs the [account closure job](#account-closure-job). If technical checks fail, **technical closure** may be delayed.
5. **Updates:** Solaris sends status updates via webhooks. See [Checking ACR Status](#checking-the-status-of-the-account-closure-request).


![Diagram: Customer-initiated ACR flow](/assets/acr-customer-flow.408f76d49b7ccb646b192d9bfaf334cff00d62b259808c2c1a2560e2179887b3.71dde5d8.svg)

## Solaris-initiated ACRs

Solaris may initiate an ACR for a customer (e.g., for compliance).

1. **Notification:** Solaris sends a notification on the `ACCOUNT_CLOSURE_REQUEST` webhook.
2. **Communication:** You must immediately notify the customer. See [Customer communication](#customer-communication).
3. **Calculation:** The legal closure date is calculated based on the closure type ([immediate](#immediate-closures) or [ordinary](#ordinary-closures)).
4. **Processing:** Solaris runs the [account closure job](#account-closure-job).
5. **Updates:** Solaris sends status updates via webhooks. See [Checking ACR Status](#checking-the-status-of-the-account-closure-request).


![Diagram: Solaris-initiated ACR flow](/assets/acr-solaris-flow.6a136585a469e0d41da99c025bb05f5f707a8790c81a1dfcd28d9a930b585ed3.71dde5d8.svg)

## Partner-initiated ACRs

To terminate a business relationship with a customer:

1. **Consultation:** Consult Solaris before initiating an ACR with a reason other than `CUSTOMER_WISH`.
2. **Validation:** Once agreed, perform the following checks:
  * Account `status` must be `ACTIVE`.
  * Account balance must be 0.
  * No active **compliance block**.
3. **Creation:** Call the [POST Create an ACR endpoint](#post-create-acr) with the `closure_reason`.
4. **Calculation:** The legal closure date is calculated based on the closure type.
5. **Processing:** Solaris runs the [account closure job](#account-closure-job).
6. **Communication:** Notify the customer about the closure. See [Customer communication](#customer-communication).
7. **Updates:** Solaris sends status updates via webhooks. See [Checking ACR Status](#checking-the-status-of-the-account-closure-request).


![Diagram: Partner-initiated ACR flow](/assets/acr-partner-flow.e89642c4e3dfc7618398c3e97eaf621e925ea569e804dd5de73545aba4bc0f4b.71dde5d8.svg)

## Account closure job

The account closure job executes the following steps:

1. Checks if the account is active. (Fails if `INACTIVE`).
2. Blocks the account.
3. Blocks all cards associated with the account.
4. Cancels [standing orders](/guides/digital-banking/sepa-transfers/standing-orders) and [timed orders](/guides/digital-banking/sepa-transfers/timed-orders).
5. Checks for card settlements in the last 45 days.
  * If `CARD_TRANSACTION` or `CARD_DIRECT_DEBIT` bookings exist in the last 45 days, closure is delayed until 45 days have elapsed since the last booking.
6. Checks for open reservations.
7. Checks for bookings with value dates in the future.
8. Checks the account balance. (Fails if negative).
9. Checks for active seizures.
10. Checks for a reference account (Decoupled Debit Cards only). (Fails if missing).
11. Checks for SEPA Direct Debits (SDDs) in the last 56 days. (Delays processing to the next day if found; relevant for Decoupled/Credit Cards).
12. Checks for insolvency closure type. (Fails if `INSOLVENCY_ORDINARY_INTERNAL` or `INSOLVENCY_IMMEDIATE_INTERNAL`).
13. Pays out remaining funds to the reference account (Decoupled Cards only).
14. Closes the account.


## Checking the status of the account closure request

Solaris notifies you of status changes via two webhook events.

### ACCOUNT_CLOSURE_REQUEST_UPDATE

Notifications are sent for the following transitions:

| From status | To status |
|  --- | --- |
| `CONFIRMED` | `IN_PROGRESS` |
| `CONFIRMED` | `REVOKED` |
| `IN_PROGRESS` | `COMPLETED` |
| `IN_PROGRESS` | `FAILED` |


### ACCOUNT_CLOSURE

Notifications are sent upon **successful** account closure.

### Possible ACR status values

| Status | Description |
|  --- | --- |
| `INITIATED` | The ACR has been created. (Solaris-initiated only). |
| `CONFIRMED` | Solaris accepted the Partner ACR, or Partner accepted the Solaris ACR. |
| `IN_PROGRESS` | The account closure job is running. |
| `COMPLETED` | The account is closed. |
| `FAILED` | The account closure job failed. |
| `REVOKED` | The ACR was revoked. (Only Solaris can revoke before `IN_PROGRESS`). |


### Failure reasons

If an ACR fails, the `failure_reason` object contains a `code` and `detail`.

| `code` value | `detail` value |
|  --- | --- |
| `account_inactive` | Account already technically closed. |
| `negative_balance` | Account balance is negative; cannot perform technical closure. |
| `positive_balance` | Account balance is positive; cannot perform technical closure. |
| `accrued_interest` | Accrued interest found; cannot perform technical closure. |
| `forced_failure` | Account Closure was manually stopped. Contact Solaris Customer Support. |