---
title: "3.7.5 MiCA and crypto-asset service providers in the EU"
description: "Regulation (EU) 2023/1114 from primary sources: scope, dates, transitional period, services, capital, the ESMA register and how to check a CASP."
url: "https://pythonparatrading.com/en/python-trading-course/level-3/mica-casp-eu-crypto-regulation/"
lang: "en"
image: "https://pythonparatrading.com/og/en/python-trading-course/level-3/mica-casp-eu-crypto-regulation.png"
---

# 3.7.5 · MiCA: the EU framework for crypto-assets and their service providers (CASPs)

> Since July 1, 2026, nobody can provide crypto-asset services in Spain without authorization under MiCA. This lesson reads the regulation and the documents of ESMA and of the CNMV (Spain's securities market regulator), turns their dates, their services and their minimum capital into code, and processes an extract in the format of the ESMA register to check a provider before trading with it. It is not legal advice.

- Course: [Level 3: Derivatives: futures, spreads, forex and options](https://pythonparatrading.com/en/python-trading-course/level-3/)
- Module: 3.7 · Crypto derivatives and specific strategies
- Duration: 55 min
- Prerequisites: [1.2.6 · Crypto: spot, perpetuals, funding and custody](https://pythonparatrading.com/en/python-trading-course/level-1/crypto-spot-perpetuals-and-funding/), [3.7.4 · ccxt for trading on multiple exchanges](https://pythonparatrading.com/en/python-trading-course/level-3/ccxt-multi-exchange-trading/)

## By the end of this lesson

- Place a token in its regime: other crypto-assets, asset-referenced tokens, e-money tokens or outside MiCA (financial instruments, derivatives, unique NFTs).
- Compute the MiCA application dates and the end of the CASP transitional regime in each State from the primary sources.
- Relate the ten crypto-asset services to their minimum capital class and to the authorization deadlines of Article 63.
- Read and clean the ESMA interim register (CSV) and check with code whether a provider can provide a service in Spain.
- Identify what MiCA changes for a systematic trader: custody, market abuse and the place of derivatives under MiFID II.

<aside class="callout" data-kind="aviso">

This lesson explains a regulation with its primary sources in order to understand the market in which a trading
system operates. It is not legal or tax advice: for a specific decision you have to read the text in force, the
implementing rules and, if needed, consult a professional. The figures and registers cited are those published as of
October 22, 2026.

</aside>

## What MiCA regulates and what it leaves out

Regulation (EU) 2023/1114 of the European Parliament and of the Council of May 31, 2023 on markets in crypto-assets
(MiCA) was published in the Official Journal of the EU on June 9, 2023 (OJ L 150)[^1]. It applies to those who issue,
offer to the public or seek admission to trading of crypto-assets, and to those who provide services related to them
in the Union (Art. 2(1)). It defines a **crypto-asset** as “a digital representation of a value or of a right that is
able to be transferred and stored electronically using distributed ledger technology or similar technology”
(Art. 3(1)(5)) and distinguishes three types:

- **E-money token (EMT)**: purports to maintain a stable value by referencing the value of one official currency
  (Art. 3(1)(7)). This is the case of stablecoins in dollars or in euros. Title IV.
- **Asset-referenced token (ART)**: purports to maintain a stable value by referencing another value or right, or a
  combination thereof, including one or more official currencies (Art. 3(1)(6)). Title III.
- **Other crypto-assets**: the rest, such as the native coins of a network. Offering them requires a white paper
  (Title II).

And it leaves out, among others, crypto-assets that are unique and non-fungible (Art. 2(3)) and those that are
financial instruments, deposits or funds (Art. 2(4)). For a trader, the important exclusion is that of financial
instruments: ESMA, in its guidelines on the qualification of crypto-assets as financial instruments, asks for
**perpetual futures** to be treated as derivative contracts and assessed against the criteria of Annex I, Section C,
points (4) to (10), of MiFID II (guideline 5)[^2]. The perpetuals, futures and options of lessons 3.7.1 to 3.7.3 are not
MiCA services: they are MiFID II instruments.

```mermaid
flowchart TB
  T[Token] --> F{MiFID?}
  F -- yes --> M[MiFID II]
  F -- no --> U{Unique and NFT?}
  U -- yes --> X[Outside MiCA]
  U -- no --> E{Ref. 1 currency?}
  E -- yes --> EMT[EMT Title IV]
  E -- no --> A{Ref. assets?}
  A -- yes --> ART[ART Title III]
  A -- no --> O[Title II]
```

The tree is a simplification of Articles 2 and 3. In code, with fictitious tokens:

```python
def regimen(t):
    """Simplified tree of Arts. 2 and 3 of MiCA and ESMA guideline 5.
    Indicative only: it is not a substitute for a legal analysis."""
    if t.get("derivado") or t.get("instrumento_financiero"):
        return "outside MiCA: MiFID II (financial instrument)"
    if t.get("unico_no_fungible"):
        return "outside MiCA (Art. 2(3))"
    ref = t.get("referencia")
    if ref == "one official currency":
        return "e-money token (EMT, Title IV)"
    if ref is not None:
        return "asset-referenced token (ART, Title III)"
    return "other crypto-asset (Title II: white paper)"

tokens = {
    "XBQ (native coin of its network)": {},
    "USDQ (stable against the dollar)":
        {"referencia": "one official currency"},
    "basket gold + euro + dollar": {"referencia": "basket"},
    "unique digital artwork": {"unico_no_fungible": True},
    "tokenized share": {"instrumento_financiero": True},
    "perpetual on XBQ": {"derivado": True},
}
for nombre, t in tokens.items():
    print(f"{nombre:<32} -> {regimen(t)}")
```
```output
XBQ (native coin of its network) -> other crypto-asset (Title II: white paper)
USDQ (stable against the dollar) -> e-money token (EMT, Title IV)
basket gold + euro + dollar      -> asset-referenced token (ART, Title III)
unique digital artwork           -> outside MiCA (Art. 2(3))
tokenized share                  -> outside MiCA: MiFID II (financial instrument)
perpetual on XBQ                 -> outside MiCA: MiFID II (financial instrument)
```

The truly hard answers (whether a specific token is a financial instrument, whether an algorithmic stablecoin is an
EMT or an ART) depend on the rights it grants and on the case-by-case analysis that the ESMA guidelines call for; the
tree is for getting your bearings, not for deciding.

## The timeline

Article 149 sets the dates: the regulation enters into force 20 days after its publication, Titles III and IV (ARTs
and EMTs) apply from June 30, 2024 and the rest from December 30, 2024[^1]. Article 143 adds two transitional periods:
providers that were providing services under national law before December 30, 2024 may continue “until 1 July 2026 or
until they are granted or refused an authorisation […], whichever is sooner” (Art. 143(3)), and operators of trading
platforms have until December 31, 2027 for a white paper to exist for the crypto-assets that were already being traded
(Art. 143(2)(b)). The figure at the top places them in time:

```python
import io
import numpy as np
import pandas as pd

publicacion = pd.Timestamp("2023-06-09")      # OJ L 150
fechas = pd.Series({
    "entry into force (Art. 149(1))":
        publicacion + pd.Timedelta(days=20),
    "Titles III and IV: ART and EMT (Art. 149(3))":
        pd.Timestamp("2024-06-30"),
    "rest of the regulation (Art. 149(2))": pd.Timestamp("2024-12-30"),
    "end of the transitional regime (Art. 143(3))":
        pd.Timestamp("2026-07-01"),
    "white papers, already traded (Art. 143(2)(b))":
        pd.Timestamp("2027-12-31"),
})
hoy = pd.Timestamp("2026-10-22")
pd.DataFrame({"date": fechas.dt.date,
              "days until today": (hoy - fechas).dt.days})
```
```output
                                                     date  days until today
entry into force (Art. 149(1))                 2023-06-29              1211
Titles III and IV: ART and EMT (Art. 149(3))   2024-06-30               844
rest of the regulation (Art. 149(2))           2024-12-30               661
end of the transitional regime (Art. 143(3))   2026-07-01               113
white papers, already traded (Art. 143(2)(b))  2027-12-31              -435
```

The computed entry into force (June 9, 2023 plus 20 days) is June 29, 2023, the same date from which Article 149(4)
applies the empowerments for implementing measures. Today, October 22, 2026, the regulation has been applying in full
for 661 days and the transitional regime ended 113 days ago.

### The transitional regime, State by State

Article 143(3) allows each State not to apply the transitional regime or to shorten it if its national framework was
less strict. ESMA publishes the list of what each one notified[^3]:

```python
meses = {"BE": 18, "BG": 18, "CZ": 18, "DK": 18, "DE": 12, "EE": 18,
         "IE": 12, "GR": 18, "ES": 18, "FR": 18, "HR": 18, "IT": 18,
         "CY": 18, "LV": 6, "LT": 12, "LU": 18, "HU": 6, "MT": 18,
         "NL": 6, "AT": 12, "PL": 6, "PT": 18, "RO": 18, "SI": 6,
         "SK": 12, "FI": 6, "SE": 9, "IS": 18, "LI": 18, "NO": 12}
inicio, tope = pd.Timestamp("2024-12-30"), pd.Timestamp("2026-07-01")
fin = {p: tope if m >= 18 else inicio + pd.DateOffset(months=m)
       for p, m in meses.items()}
tr = pd.DataFrame({"meses": meses, "fin": fin})
print(tr.groupby("meses").size().rename("países").to_dict())
print("Spain ends:", tr.loc["ES", "fin"].date())
dia = pd.Timestamp("2025-10-01")
print("no transitional regime left on", dia.date(), ":",
      sorted(tr.index[tr["fin"] <= dia]))
```
```output
{6: 6, 9: 1, 12: 6, 18: 17}
Spain ends: 2026-07-01
no transitional regime left on 2025-10-01 : ['FI', 'HU', 'LV', 'NL', 'PL', 'SE', 'SI']
```

*Fig. — Length of the transitional regime for crypto-asset service providers chosen by each EEA state.* Four bars from 30/12/2024. Six months (to about 30/06/2025): Finland, Hungary, Latvia, the Netherlands, Poland and Slovenia. Nine months: Sweden. Twelve months: Austria, Germany, Ireland, Lithuania, Slovakia and Norway. Eighteen months, the maximum, to 01/07/2026: Spain, highlighted, and 16 other states.

Seventeen EEA States, Spain among them, chose the maximum of 18 months; six set it at 6 months, one at 9 and six at 12.
The end dates in the cell for the short periods are approximate (December 30, 2024 plus n months): the exact date is set
by each national law, and the ESMA list itself warns that some durations are those the authorities expected and might
not yet be in the law. For Spain, the CNMV is explicit: “Since July 1, 2026, only providers authorized by the CNMV or
other European authorities may operate in Spain” (translated from the Spanish)[^4].

## Ten services and three capital classes

Article 3(1)(16) lists the crypto-asset services, from point (a) to (j): custody and administration on behalf of
clients, operation of a trading platform, exchange for funds, exchange for other crypto-assets, execution of orders,
placing, reception and transmission of orders, advice, portfolio management and transfer services on behalf of
clients[^1]. The same letters appear in the ESMA register.

Annex IV groups the services into three minimum capital classes: class 1 (EUR 50,000) for execution, placing,
transfer, reception and transmission, advice and portfolio management; class 2 (EUR 125,000) if there is also custody
or exchange; class 3 (EUR 150,000) if a trading platform is operated. Article 67 requires the greater of that minimum
and one quarter of the fixed overheads of the preceding year:

```python
SERVICIOS = {
    "a": "custody and administration on behalf of clients",
    "b": "operation of a trading platform",
    "c": "exchange of crypto-assets for funds",
    "d": "exchange of crypto-assets for other crypto-assets",
    "e": "execution of orders on behalf of clients",
    "f": "placing of crypto-assets",
    "g": "reception and transmission of orders",
    "h": "providing advice on crypto-assets",
    "i": "providing portfolio management on crypto-assets",
    "j": "providing transfer services on behalf of clients",
}

def capital_minimo(servicios, gastos_fijos_anuales):
    if "b" in servicios:
        clase, base = 3, 150_000
    elif set(servicios) & {"a", "c", "d"}:
        clase, base = 2, 125_000
    else:
        clase, base = 1, 50_000
    return clase, max(base, gastos_fijos_anuales / 4)

casos = {"independent adviser": ("h", 120_000),
         "broker that transmits orders": ("eg", 900_000),
         "exchange with custody": ("abcdej", 6_000_000)}
for quien, (srv, gastos) in casos.items():
    clase, k = capital_minimo(srv, gastos)
    print(f"{quien:<29} class {clase}: {k:>12,.0f} EUR")
```
```output
independent adviser           class 1:       50,000 EUR
broker that transmits orders  class 1:      225,000 EUR
exchange with custody         class 3:    1,500,000 EUR
```

For an intermediary with a real structure, the quarter of fixed overheads almost always prevails: the broker in the
cell needs EUR 225,000 even though its class is 1, and the exchange, 1.5 million. Capital is a cushion, not a guarantee
for the client: as the CNMV points out, there is no investor compensation scheme if a provider goes bust[^4].

## Authorization, notification and passport

Article 59 only allows two types of entities to provide crypto-asset services in the Union: those authorized as CASPs
under Article 63, and already supervised entities (credit institutions, central securities depositories, investment
firms, market operators, electronic money institutions, UCITS management companies and AIFMs) that notify their
authority under Article 60, in general at least 40 working days in advance[^1]. An authorization is valid throughout the
Union, through establishment or the free provision of services, without a physical presence in the host State
(Art. 59(7)), after notifying the States and the services in advance (Art. 65).

```mermaid
flowchart TB
  S[Application Art. 62] --> A[Acknowledgment: 5 days]
  A --> C[Complete: 25 days]
  C --> E[Assessment: 40 days]
  E --> D[Decision]
  D --> N[Notification: 5]
  D --> R[ESMA register]
```

The deadlines of Article 63 are in working days: acknowledgment of receipt within 5, checking that the application is
complete within 25, assessment within 40 from when it is complete (with a suspension of up to 20 if information is
requested) and notification of the decision within 5 more[^1]. With `numpy.busday_offset` and three 2026 public
holidays as an example (the real list depends on the State and, in Spain, on the autonomous community):

```python
def plazos(presentada, suspension_dias=0, festivos=()):
    hab = lambda d, n: np.busday_offset(
        np.datetime64(d.date()), n, roll="forward",
        holidays=list(festivos))
    acuse = hab(presentada, 5)
    completa = hab(presentada, 25)
    decision = hab(pd.Timestamp(completa), 40 + suspension_dias)
    return {"acknowledgment": acuse, "completeness": completa,
            "decision": decision,
            "notification": hab(pd.Timestamp(decision), 5)}

festivos = ["2026-04-02", "2026-04-03", "2026-05-01"]
for susp in (0, 20):
    p = plazos(pd.Timestamp("2026-02-02"), susp, festivos)
    print(f"suspension {susp:>2} days:",
          {k: str(v) for k, v in p.items()})
```
```output
suspension  0 days: {'acknowledgment': '2026-02-09', 'completeness': '2026-03-09', 'decision': '2026-05-07', 'notification': '2026-05-14'}
suspension 20 days: {'acknowledgment': '2026-02-09', 'completeness': '2026-03-09', 'decision': '2026-06-04', 'notification': '2026-06-11'}
```

An application submitted on February 2, 2026 would get the decision, in the worst case allowed by the regulation, on
June 4 and the notification on June 11, days before the end of the transitional regime. That is why many Spanish
authorizations in the register are dated June and July 2026. Companies from outside the EU can only serve without
authorization clients who come to them on the client's **own exclusive initiative**, without soliciting them in any
way in the Union (Art. 61), and ESMA has published guidelines to delimit that case.

## The ESMA register

Articles 109 and 110 task ESMA with a register of white papers, ART and EMT issuers and CASPs, and another,
non-exhaustive one, of entities that provide services without complying with the rules[^1]. While it is being
integrated into its systems, ESMA publishes it as an **interim register** in five CSV files (`OTHER.csv`, `ARTZZ.csv`,
`EMTWP.csv`, `CASPS.csv` and `NCASP.csv`) along with a file describing each field[^5]. Downloading and summarizing the
CASP file is straightforward:

```python skip title="registro_esma.py"
import io
import urllib.request
import pandas as pd

URL = ("https://www.esma.europa.eu/sites/default/files/2024-12/"
       "CASPS.csv")
with urllib.request.urlopen(URL, timeout=30) as r:
    casps = pd.read_csv(io.BytesIO(r.read()), dtype=str,
                        encoding="utf-8-sig")
pais = casps["ae_homeMemberState"].str.strip()
print(len(casps), casps["ae_lei"].nunique(), pais.nunique())
print(pais.value_counts().head(8))
print(casps["ac_legal_basis"].fillna("(empty)").value_counts())
```

With the version of October 19, 2026, the file has 379 entries from 376 distinct LEIs and 27 home States; the 16
Spanish ones have the CNMV as competent authority. Germany accounts for more than a quarter:

*Fig. — Entries in ESMA's interim register of crypto-asset service providers by home state, as of 19 October 2026.* Horizontal bars: Germany 109, France 36, Netherlands 29, Cyprus 25, Malta 23, Spain 16 (highlighted), Luxembourg 13 and 20 other states 128; 379 entries in total.

The real file also shows why it has to be cleaned before use: a country code with a trailing space (`NL `), a legal
basis that is empty in 180 entries and in the rest appears as `Article 60`, `Article 60 -
Notification`, `Article 63` or `Article 63 - CASP authorisation`, and a list of services in which the letters of the
regulation (“a. providing custody…”) coexist with texts without a letter. To run the code without a network, the next
cell builds a **fictitious** extract with the same columns and the same defects:

```python
CSV = """﻿ae_competentAuthority,ae_homeMemberState,ae_lei_name,\
ae_lei,ae_lei_cou_code,ae_commercial_name,ae_address,ae_website,\
ae_website_platform,ac_authorisationNotificationDate,\
ac_authorisationEndDate,ac_serviceCode,ac_serviceCode_cou,\
ac_comments,ac_lastupdate,ac_legal_basis
Fictitious Authority of Malta,MT,Alfa Cripto Europa Ltd,\
5299000ALFA0CRIPTO79,MT,Alfa,"Street 1, Valletta",\
https://alfa.example,https://pro.alfa.example,14/03/2025,,\
a. providing custody and administration of crypto-assets on \
behalf of clients | b. operation of a trading platform for \
crypto-assets | c. exchange of crypto-assets for funds | \
d. exchange of crypto-assets for other crypto-assets,\
AT|DE|ES|FR|IT|NL,,02/04/2025,Article 63 - CASP authorisation
Fictitious Authority of Germany,DE ,Banco Cenit AG,\
529900CENIT0BANCO076,DE,Cenit,"Platz 2, Frankfurt",\
https://cenit.example,,05/06/2025,,\
e. execution of orders for crypto-assets on behalf of clients|\
g. reception and transmission of orders for crypto-assets on \
behalf of clients,DE|AT,,05/06/2025,Article 60
Fictitious Authority of Spain,ES,Dedalo Digital SL,\
5299000DEDALO0SL0062,ES,Dedalo,"Calle 3, Madrid",\
https://dedalo.example,,30/06/2026,15/09/2026,\
exchange of crypto-assets for funds | providing transfer services \
for crypto-assets on behalf of clients,ES,withdrawn,15/09/2026,
"""
reg = pd.read_csv(io.StringIO(CSV), dtype=str, encoding="utf-8-sig")
print(reg.shape)
reg[["ae_homeMemberState", "ae_commercial_name",
     "ac_authorisationNotificationDate", "ac_authorisationEndDate"]]
```
```output
(3, 16)
  ae_homeMemberState ae_commercial_name ac_authorisationNotificationDate ac_authorisationEndDate
0                 MT               Alfa                       14/03/2025                     NaN
1                DE               Cenit                       05/06/2025                     NaN
2                 ES             Dedalo                       30/06/2026              15/09/2026
```

The dates come as `dd/mm/yyyy` text and the withdrawal date (`ac_authorisationEndDate`) is only present for entities
that have lost their authorization. The cleaning trims the country codes, converts the services to letters (by the
letter if there is one and, if not, by the text), splits the passport States on the vertical bar, converts the dates
and extracts the legal basis (60 or 63):

```python
import re

TEXTOS = {
    "a": "custody", "b": "trading platform",
    "c": "for funds", "d": "for other crypto",
    "e": "execution of orders", "f": "placing",
    "g": "reception and transmission", "h": "advice",
    "i": "portfolio management", "j": "transfer services"}

def codigos(texto):
    salida = set()
    for parte in re.split(r"\s*\|\s*", texto or ""):
        m = re.match(r"\(?([a-j])[.)]\s", parte.strip())
        if m:
            salida.add(m.group(1))
            continue
        for k, clave in TEXTOS.items():
            if clave in parte.lower():
                salida.add(k)
    return "".join(sorted(salida))

def limpiar(r):
    r = r.copy()
    r["pais"] = r["ae_homeMemberState"].str.strip()
    r["servicios"] = r["ac_serviceCode"].map(codigos)
    r["pasaporte"] = r["ac_serviceCode_cou"].fillna("").str.split("|")
    for c in ["ac_authorisationNotificationDate",
              "ac_authorisationEndDate"]:
        r[c] = pd.to_datetime(r[c], format="%d/%m/%Y")
    r["via"] = r["ac_legal_basis"].fillna("").str.extract(
        r"(60|63)", expand=False)
    return r

limpio = limpiar(reg)
limpio[["pais", "ae_commercial_name", "servicios", "via",
        "ac_authorisationEndDate"]]
```
```output
  pais ae_commercial_name servicios  via ac_authorisationEndDate
0   MT               Alfa      abcd   63                     NaT
1   DE              Cenit        eg   60                     NaT
2   ES             Dedalo        cj  NaN              2026-09-15
```

Alfa (Malta) is authorized under Article 63 for custody, platform and both exchanges; Cenit is a bank that notified
under Article 60 for execution and transmission of orders; Dedalo had exchange and transfers, and its authorization was
withdrawn on September 15, 2026. Each entity carries its **LEI** (Legal Entity Identifier, ISO 17442), a 20-character
code whose last two digits are check digits: with the ISO 7064 standard (MOD 97-10), the number formed by its
characters (letters as 10 to 35) must leave a remainder of 1 when divided by 97:

```python
def lei_valido(lei):
    """ISO 17442: 20 characters and MOD 97-10 (ISO 7064) equal to 1."""
    if not re.fullmatch(r"[0-9A-Z]{18}[0-9]{2}", lei or ""):
        return False
    return int("".join(str(int(c, 36)) for c in lei)) % 97 == 1

def con_control(base18):
    n = int("".join(str(int(c, 36)) for c in base18 + "00"))
    return base18 + f"{98 - n % 97:02d}"

print(con_control("5299000ALFA0CRIPTO"),
      lei_valido("5299000ALFA0CRIPTO79"))
print({n: lei_valido(x) for n, x in
       zip(limpio["ae_commercial_name"], limpio["ae_lei"])})
print("one digit changed:", lei_valido("5299000ALFA0CRIPTO78"))
```
```output
5299000ALFA0CRIPTO79 True
{'Alfa': True, 'Cenit': True, 'Dedalo': False}
one digit changed: False
```

Dedalo's LEI has a typo and fails the check; the algorithm also validates the real LEIs in the register. When joining
registers (ESMA, the CNMV, a data vendor), the LEI is the reliable key; the commercial name is not.

## Checking a provider before trading

The CNMV recommends verifying in the ESMA and CNMV registers that the provider is authorized, checking which legal
entity provides the service (MiCA protections only cover the entity authorized in the EU, not other group companies
even if they use the same brand) and consulting its list of unauthorized entities[^4]. Turned into a list of checks on
the cleaned extract, with a fictitious list of non-compliant entities:

```python
NCASP = pd.DataFrame({"ae_commercial_name": ["Icaro Trade"],
                      "ae_website": ["https://icaro.example"]})

def comprobar(nombre, necesito, pais="ES", dia=hoy):
    fila = limpio[limpio["ae_commercial_name"] == nombre]
    r = {"in the CASP register": not fila.empty,
         "not listed as non-compliant":
             nombre not in set(NCASP["ae_commercial_name"])}
    if fila.empty:
        return r
    f = fila.iloc[0]
    fin = f["ac_authorisationEndDate"]
    r["authorization in force"] = pd.isna(fin) or fin > dia
    r["services " + necesito] = set(necesito) <= set(f["servicios"])
    r[f"operates in {pais}"] = (f["pais"] == pais
                                or pais in f["pasaporte"])
    r["valid LEI"] = lei_valido(f["ae_lei"])
    return r

for nombre, necesito in [("Alfa", "cd"), ("Cenit", "cd"),
                         ("Dedalo", "c"), ("Icaro Trade", "c")]:
    res = comprobar(nombre, necesito)
    fallos = [k for k, ok in res.items() if not ok]
    print(f"{nombre:<11} {'OK' if not fallos else 'NO'}  {fallos}")
```
```output
Alfa        OK  []
Cenit       NO  ['services cd', 'operates in ES']
Dedalo      NO  ['authorization in force', 'valid LEI']
Icaro Trade NO  ['in the CASP register', 'not listed as non-compliant']
```

Alfa passes all of them for exchanging for funds and for other crypto-assets in Spain (it is authorized in Malta and has
Spain in its passport). Cenit is registered, but not for those services nor with a passport to Spain. Dedalo is no
longer authorized and, in addition, its LEI does not add up, a sign that the register being used has typos. Icaro Trade
is not in the register and is on the list of non-compliant entities. The check is not a substitute for reading the
contract and consulting the CNMV register, but it does avoid the most frequent mistake: trading with a well-known brand
through a company that is not the authorized one.

## What changes for a systematic trader

- **Custody.** A CASP that holds clients' crypto-assets must protect their ownership, especially against its own
  insolvency, and cannot use them on its own account (Art. 70(1)); client funds other than EMTs are placed with a
  credit institution or a central bank by the end of the following business day, in segregated accounts
  (Art. 70(3)). The custodian is liable for the loss of crypto-assets due to an incident attributable to it, up to
  their market value (Art. 75(8)). This is what was missing in the dedalo case of lesson 3.7.2.
- **Market abuse.** Title VI (Arts. 86 to 92) prohibits market manipulation and insider dealing in crypto-assets
  admitted to trading, on and off trading platforms and from inside or outside the Union. A strategy that gives false
  signals about supply or demand (Art. 91(2)(a)) is manipulation in crypto too: be careful with orders you do not intend
  to execute and with trades against yourself.
- **Derivatives.** Perpetuals, futures and options are MiFID II instruments (ESMA guideline 5). Whoever offers them to
  EU clients needs the corresponding MiFID II authorization, the CASP one is not enough, and for a retail client the
  MiFID II product and leverage rules apply.
- **Supervision in Spain.** The CNMV is the competent authority for supervising compliance with MiCA, and the Banco de
  España (the Spanish central bank) carries out the supervision of EMT and ART issuers[^4].
- **Taxation.** It is not a MiCA matter; lesson 7.4.6 covers taxation and the information that providers send to the
  Spanish tax agency (Hacienda).

## Exercises

1. With the table of transitional periods, compute which States were still in the transitional regime on January 1,
   2026 and how many days each group had left.

**Solution.**

```python
dia = pd.Timestamp("2026-01-01")
vivos = tr[tr["fin"] > dia].copy()
vivos["dias_restantes"] = (vivos["fin"] - dia).dt.days
print(len(vivos), "States")
print(vivos.groupby("meses")["dias_restantes"].first().to_dict())
print(sorted(set(tr.index) - set(vivos.index)))
```
```output
17 States
{18: 181}
['AT', 'DE', 'FI', 'HU', 'IE', 'LT', 'LV', 'NL', 'NO', 'PL', 'SE', 'SI', 'SK']
```

On January 1, 2026 only the 17 States with 18 months were still in the transitional regime, with 181 days ahead until
July 1. Those with 6, 9 and 12 months had already ended: those with 12, on December 30, 2025, two days earlier. For a
system that traded on several European exchanges, this means that during the first half of 2026 the same provider could
already be required to hold an authorization in one country and not in another.

2. Add to the extract a fictitious entity “Faro Custodia” authorized in France for custody and transfers (letters
   a and j) with a passport to Spain, Italy and Portugal, with a valid LEI generated by you, and check it for custody
   (`a`) and for exchange for funds (`c`).

**Solution.**

```python
faro = pd.DataFrame([{
    "ae_competentAuthority": "Fictitious Authority of France",
    "ae_homeMemberState": "FR",
    "ae_lei_name": "Faro Custodia SAS",
    "ae_lei": con_control("969500FARO00CUSTOD"),
    "ae_commercial_name": "Faro",
    "ac_authorisationNotificationDate": "01/07/2026",
    "ac_serviceCode": "a. providing custody and administration of "
                      "crypto-assets on behalf of clients | "
                      "j. providing transfer services for "
                      "crypto-assets on behalf of clients",
    "ac_serviceCode_cou": "ES|IT|PT",
    "ac_legal_basis": "Article 63 - CASP authorisation"}])
limpio = limpiar(pd.concat([reg, faro], ignore_index=True))
print(limpio.loc[limpio["ae_commercial_name"] == "Faro",
                 ["ae_lei", "servicios", "pasaporte"]].to_string())
for necesito in ["a", "c"]:
    res = comprobar("Faro", necesito)
    print(necesito, [k for k, ok in res.items() if not ok])
```
```output
                 ae_lei servicios     pasaporte
3  969500FARO00CUSTOD66        aj  [ES, IT, PT]
a []
c ['services c']
```

The generated LEI passes the check and the cleaning turns the two services into `aj`. For custody in Spain, Faro passes
all the checks; for exchange for funds it fails the services check: with that authorization it can hold in custody and
transfer, but not buy or sell crypto-assets to its clients. The register says which services each entity can provide,
not just whether it is authorized.

3. A system wants to trade XBQ perpetuals from Spain on an exchange authorized as a CASP in another EU State. List
   what you would check and why the CASP authorization is not enough.

**Solution.**

First, that the entity you contract with is the authorized one (LEI and legal name in the contract, not the brand) and
that it appears in the ESMA register with no withdrawal date, with Spain in its passport and outside the list of
non-compliant entities and the CNMV's list. Then, that the authorized services cover what is going to be done with the
spot market and custody (letters a, c, d or e, depending on the case). But the perpetual is not a MiCA crypto-asset:
according to ESMA guideline 5 it is a MiFID II derivative, so the entity also needs a MiFID II authorization to offer it
to EU clients (and, if the client is retail, the MiFID II product and leverage rules). If it only has the CASP one,
offering perpetuals to Spanish clients falls outside what that authorization allows. Finally, counterparty risk does
not go away: MiCA requires segregation and custody, but there is no investor guarantee fund, and lesson 3.7.2 shows what
is lost when an exchange suspends withdrawals.

[^1]: Regulation (EU) 2023/1114 of the European Parliament and of the Council of May 31, 2023 (OJ L 150 of 9.6.2023),
    Articles 2, 3, 59 to 63, 65, 67, 70, 75, 86 to 92, 109, 110, 143 and 149, and Annex IV, English version on
    [EUR-Lex](https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:32023R1114), accessed on October 22, 2026.
[^2]: ESMA, “Final Report. Guidelines on the conditions and criteria for the qualification of crypto-assets as
    financial instruments”, ESMA75453128700-1323, December 17, 2024, guideline 5, paragraph 47,
    [esma.europa.eu](https://www.esma.europa.eu/sites/default/files/2024-12/ESMA75453128700-1323_Final_Report_Guidelines_on_the_conditions_and_criteria_for_the_qualification_of_CAs_as_FIs.pdf).
[^3]: ESMA, “List of grandfathering periods decided by Member States under Article 143 of Regulation (EU) 2023/1114”
    (PDF of May 19, 2026), [esma.europa.eu](https://www.esma.europa.eu/sites/default/files/2024-12/List_of_MiCA_grandfathering_periods_art._143_3.pdf),
    accessed on October 22, 2026.
[^4]: CNMV, “MiCA: Nueva regulación de criptoactivos” (“MiCA: new crypto-asset regulation”, in Spanish),
    [cnmv.es](https://www.cnmv.es/portal/MiCA/Regulacion-Criptoactivos), accessed on October 22, 2026.
[^5]: ESMA, MiCA page, section “Interim MiCA Register” (five CSV files, last updated on October 19, 2026, and
    description of the fields),
    [esma.europa.eu](https://www.esma.europa.eu/esmas-activities/digital-finance-and-innovation/markets-crypto-assets-regulation-mica),
    accessed on October 22, 2026.

## Self-assessment

1. An exchange that was already operating in Spain under national law before December 30, 2024 has no MiCA authorization on July 15, 2026. Can it keep providing services to clients in Spain?

   - A. Yes, while its application is being processed
   - B. No: the transitional regime ends on July 1, 2026 at the latest, and the CNMV says that from that date only authorized providers can operate
   - C. Yes, if it is headquartered outside the EU
   - D. Yes, until December 31, 2027

   *Answer B: No: the transitional regime ends on July 1, 2026 at the latest, and the CNMV says that from that date only authorized providers can operate.* Article 143(3) allows it to continue until July 1, 2026 or until authorization is granted or refused, whichever is sooner. Spain chose the maximum period of 18 months. December 31, 2027 is something else: the deadline for white papers of crypto-assets already traded (Art. 143(2)(b)).

2. Which regime applies to a perpetual future on bitcoin offered to EU clients?

   - A. MiFID II: the ESMA guidelines ask for perpetuals to be treated as derivative contracts, and MiCA does not apply to crypto-assets that are financial instruments
   - B. MiCA, because the underlying is a crypto-asset
   - C. None
   - D. The e-money token regime

   *Answer A: MiFID II: the ESMA guidelines ask for perpetuals to be treated as derivative contracts, and MiCA does not apply to crypto-assets that are financial instruments.* Article 2(4) excludes financial instruments from MiCA, and ESMA guideline 5 (December 17, 2024) says perpetuals should be treated as derivatives and assessed against Annex I, Section C, points (4) to (10), of MiFID II. A CASP authorization does not, on its own, cover offering derivatives.

3. A provider offers custody, exchange for funds and operates a trading platform. Its fixed overheads for the previous year were EUR 400,000. What minimum capital does MiCA require of it?

   - A. EUR 50,000
   - B. EUR 125,000
   - C. EUR 150,000 (class 3), because it is greater than a quarter of its fixed overheads (100,000)
   - D. EUR 400,000

   *Answer C: EUR 150,000 (class 3), because it is greater than a quarter of its fixed overheads (100,000).* Operating a trading platform puts it in class 3 of Annex IV (EUR 150,000), and Article 67 requires the greater of that minimum and one quarter of the fixed overheads: max(150,000, 100,000) = 150,000.

4. In the ESMA interim register, a provider is listed with `ac_authorisationEndDate` = 15/09/2026. What does it mean?

   - A. That its authorization starts on that day
   - B. That it is the last update of the register
   - C. That it has to renew it on that day
   - D. That it is the date the authorization was withdrawn: from then on it can no longer provide the services

   *Answer D: That it is the date the authorization was withdrawn: from then on it can no longer provide the services.* According to the field description published by ESMA, `ac_authorisationEndDate` is the date of withdrawal of the authorization, if any. The authorization date is `ac_authorisationNotificationDate` and the update date, `ac_lastupdate`.

5. What does MiCA protect when a client trades with a brand that has several companies around the world?

   - A. All the companies in the group
   - B. Only the legal entity authorized in the EU; that is why you have to check in the contract which company provides the service
   - C. None
   - D. The companies with the most volume

   *Answer B: Only the legal entity authorized in the EU; that is why you have to check in the contract which company provides the service.* The CNMV warns about it explicitly: MiCA protections only apply to the legal entity authorized in the EU, not to other group companies or to entities outside the EU, even if they use the same brand. In addition, there is no investor compensation scheme if the provider goes bust.

## Key points

- MiCA (Regulation (EU) 2023/1114) regulates the issuance and offering of crypto-assets (white papers, ARTs and EMTs) and their service providers (CASPs); it leaves out financial instruments, deposits and unique, non-fungible crypto-assets.
- Dates: entry into force on June 29, 2023, Titles III and IV from June 30, 2024, full application from December 30, 2024 and a CASP transitional regime until July 1, 2026 at most (Spain chose the maximum, 18 months).
- There are ten crypto-asset services (points (a) to (j) of Art. 3(1)(16)) and three minimum capital classes: EUR 50,000, 125,000 and 150,000, or a quarter of fixed overheads if greater.
- Providing services requires authorization as a CASP (Art. 63) or, for banks, investment firms and other already supervised entities, a notification (Art. 60); the authorization is valid throughout the EU with the passport of Art. 65.
- The ESMA interim register is five CSV files; reading it requires cleaning country codes, services in mixed formats and dd/mm/yyyy dates, and checking the withdrawal date, the passport and the list of non-compliant entities.
- Perpetuals and other crypto-asset derivatives are MiFID II instruments according to ESMA; Title VI of MiCA prohibits market manipulation and insider dealing also on and off trading platforms.

## Resources

### Documentation

- [EUR-Lex: Regulation (EU) 2023/1114 on markets in crypto-assets (English text)](https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:32023R1114) · eur-lex.europa.eu
- [ESMA: Markets in Crypto-Assets Regulation (interim register, transitional periods and guidelines)](https://www.esma.europa.eu/esmas-activities/digital-finance-and-innovation/markets-crypto-assets-regulation-mica) · esma.europa.eu
- [ESMA: list of transitional periods decided by Member States (Art. 143(3))](https://www.esma.europa.eu/sites/default/files/2024-12/List_of_MiCA_grandfathering_periods_art._143_3.pdf) · esma.europa.eu
- [ESMA: guidelines on the qualification of crypto-assets as financial instruments (December 17, 2024)](https://www.esma.europa.eu/sites/default/files/2024-12/ESMA75453128700-1323_Final_Report_Guidelines_on_the_conditions_and_criteria_for_the_qualification_of_CAs_as_FIs.pdf) · esma.europa.eu
- [CNMV (Spanish securities regulator): MiCA, new crypto-asset regulation (in Spanish)](https://www.cnmv.es/portal/MiCA/Regulacion-Criptoactivos) · cnmv.es

### Data

- [ESMA: description of the fields of the interim MiCA register (CSV)](https://www.esma.europa.eu/sites/default/files/2024-12/Description_of_the_fields_in_the_interim_MiCA_register.csv) · esma.europa.eu

Previous lesson: [3.7.4 · ccxt for trading on multiple exchanges](https://pythonparatrading.com/en/python-trading-course/level-3/ccxt-multi-exchange-trading/)
