> For a complete page index, fetch https://docs.transak.com/llms.txt

# How to Submit FCA Requirements (For UK Users only)

**FCA (Financial Conduct Authority)** compliance is required for all UK users before they can complete a crypto purchase.

## Why is it required?

UK's Financial Conduct Authority extended its **Financial Promotions regime** to cryptoassets under the [Financial Services and Markets Act 2000 (Financial Promotion) (Amendment) Order 2023](https://www.legislation.gov.uk/uksi/2023/612/contents/made). This means any business communicating or approving crypto-related promotions to UK retail consumers must comply with strict FCA rules regardless of where that business is based.

The regulation introduces three mandatory requirements before a UK user can complete a crypto purchase:

<table>
  <tbody>
    <tr>
      <td>
        <strong>
          Investor Categorization
        </strong>

        Users must be classified as a <strong>High Net Worth Investor</strong> or <strong>Self-Certified Sophisticated Investor</strong>. Retail consumers who do not meet either threshold are restricted from purchasing high-risk investments.
      </td>
    </tr>

    <tr>
      <td>
        <strong>
          Risk Disclosure Agreement
        </strong>

        Users must read and acknowledge a compliance agreement that clearly sets out the risks of investing in cryptoassets, including the possibility of losing their entire investment.
      </td>
    </tr>

    <tr>
      <td>
        <strong>
          Appropriateness Assessment
        </strong>

        Users must pass a short knowledge quiz to demonstrate they understand the risks before they are permitted to proceed. The FCA also mandates a <strong>24-hour cooling-off period</strong> for first-time investors before they can place an order.
      </td>
    </tr>
  </tbody>
</table>

## How it works?

## Different FCA Status

| Status                    | Meaning                                                                                                                     |
| ------------------------- | --------------------------------------------------------------------------------------------------------------------------- |
| `CATEGORIZATION_PENDING`  | The user has not yet completed investor categorization. Render and submit the categorization quiz.                          |
| `AGREEMENT_PENDING`       | Categorization passed. The user must now read and sign the compliance agreement.                                            |
| `RISK_ASSESSMENT_PENDING` | Agreement accepted. The user must complete the risk knowledge quiz before proceeding.                                       |
| `RISK_ASSESSMENT_FAILED`  | The user failed the risk assessment. They can retry as long as the maximum number of attempts has not been reached.         |
| `BLOCKED_RETRY`           | The user has exceeded the maximum number of retry attempts. No submission is allowed until the 24-hour wait period expires. |
| `COOLING_PERIOD`          | The user has passed all steps. A mandatory FCA cooling-off period is now active before the first order can be placed.       |

## When to integrate?

If a user requires FCA compliance, [Get Additional Requirements](/api/whitelabel/kyc/get-additional-requirements) API will include `"type": "FCA"` in the response alongside any other pending KYC requirements. The `status` in response indicates the next pending FCA step awaiting completion.

```json
{
  "data": {
    "formsRequired": [
      {
        "type": "FCA",
        "metadata": {
          "status": "AGREEMENT_PENDING"
        }
      }
    ]
  }
}
```

## How to Integrate?

Call [Get Additional Requirements](/api/whitelabel/kyc/get-additional-requirements) API with the `quoteId`. If the response includes a form entry with `type: FCA`, the user must complete the FCA flow.

```json
{
  "data": {
    "formsRequired": [
      {
        "type": "FCA",
        "metadata": {
          "status": "CATEGORIZATION_PENDING"
        }
      }
    ]
  }
}
```

Call [Get FCA Requirements](/api/whitelabel/fca/get-fca-requirements) API with the current status to fetch the FCA requirements of the step.

Using the data returned from the previous step, render the appropriate UI for the current FCA status.

| Status                    | What to show                                                                        |
| ------------------------- | ----------------------------------------------------------------------------------- |
| `CATEGORIZATION_PENDING`  | Render the investor categorization quiz and collect answers                         |
| `AGREEMENT_PENDING`       | Display the compliance agreement and collect the user's signature                   |
| `RISK_ASSESSMENT_PENDING` | Render the risk knowledge quiz and collect answers                                  |
| `RISK_ASSESSMENT_FAILED`  | Inform the user they failed and present the quiz again for retry                    |
| `BLOCKED_RETRY`           | Show a waiting screen with the `canRetryAfter` timestamp                            |
| `COOLING_PERIOD`          | Inform the user that FCA is complete and they are in a mandatory cooling-off period |

Call [Submit FCA Requirements](/api/whitelabel/fca/submit-fca-requirements) API with the user's input for the current status.

After every successful submission, call [Get FCA Status](/api/whitelabel/fca/get-fca-status) API to retrieve the updated status.

| Status             | Action                                                 |
| ------------------ | ------------------------------------------------------ |
| `COMPLETED`        | FCA flow is complete                                   |
| `Any other status` | Go back to **Step 2** with the new status and continue |

## API Overview

Fetches the data for the current FCA step.

Submits the user's input for the current FCA step - categorization answers, agreement signature, or risk assessment responses.

Retrieves the updated FCA status after each submission, indicating the next pending step.

## API Errors

| HTTP Status | Error Code | Message                  |
| ----------- | ---------- | ------------------------ |
| 400         | 2002       | Failed to get FCA status |

| HTTP Status | Error Code | Message                                                                            |
| ----------- | ---------- | ---------------------------------------------------------------------------------- |
| 400         | 2002       | Failed to get FCA status                                                           |
| 400         | 2003       | Failed to get categorization quiz                                                  |
| 400         | 2006       | User has already completed categorization stage                                    |
| 400         | 2007       | User is not eligible for FCA categorization                                        |
| 400         | 2016       | Failed to get risk assessment                                                      |
| 400         | 2018       | Failed to get cooling period status / Unable to retrieve blocked retry information |
| 400         | 2019       | Failed to get agreement                                                            |
| 400         | 2023       | Invalid status for current FCA status                                              |
| 400         | 2024       | Invalid status parameter                                                           |
| 400         | 2025       | User is not eligible for FCA flow                                                  |
| 400         | 2026       | FCA process already completed                                                      |
| 400         | 9999       | User has attempted maximum SETs available                                          |
| 400         | 9999       | First complete user categorization                                                 |
| 400         | 9999       | User has already completed categorization                                          |
| 400         | 9999       | User has completed assessment                                                      |

| HTTP Status | Error Code | Message                                                    |
| ----------- | ---------- | ---------------------------------------------------------- |
| 400         | 2002       | Failed to get FCA status                                   |
| 400         | 2004       | Failed to submit categorization answers                    |
| 400         | 2005       | Failed to submit compliance agreement                      |
| 400         | 2006       | User has already completed categorization stage            |
| 400         | 2007       | User is not eligible for FCA categorization                |
| 400         | 2008       | Invalid user state for categorization submission           |
| 400         | 2009       | Answers must be a non-empty array                          |
| 400         | 2010       | Each answer must have questionId and answerId              |
| 400         | 2011       | Answer ID must be `'A'` or `'B'`                           |
| 400         | 2012       | Duplicate answers provided for same question               |
| 400         | 2013       | Signature is required                                      |
| 400         | 2014       | User must complete categorization before signing agreement |
| 400         | 2015       | Agreement already signed                                   |
| 400         | 2017       | Failed to submit risk assessment                           |
| 400         | 2023       | Invalid status for current FCA status                      |
| 400         | 2024       | Invalid status parameter / Missing required fields         |
| 400         | 2025       | User is not eligible for FCA flow                          |
| 400         | 2026       | FCA process already completed                              |
| 400         | 9999       | User has attempted maximum SETs available                  |
| 400         | 9999       | User cannot attempt `SET_A` (or `SET_B`) consecutively     |
| 400         | 9999       | User has already completed categorization                  |
| 400         | 9999       | Assessment set not found                                   |
| 400         | 9999       | Question with ID `<id>` not found                          |
| 400         | 9999       | Answer with ID `<id>` for question `<id>` not found        |
| 400         | 9999       | Question `<id>` not valid for current set `<set>`          |
| 400         | 9999       | Missing answers for questions: `<ids>`                     |
| 400         | 9999       | User has completed assessment                              |