Skip to content
seqlense.com ↗ APISign in
MICA API · v1

Every MiCA-registered actor in Europe, as JSON.

Authorised CASPs, e-money and asset-referenced token issuers, and the ESMA non-compliant warning list — aggregated from ESMA and every national EU/EEA register, deduplicated, LEI-verified and served from one endpoint. It is free. Sign in, generate a key, start querying.

No credit card. No trial. No sales call. 60 requests/minute and 10,000 requests/day per key, which is more than any dashboard needs.

One call, twenty-seven registers

ESMA publishes a consolidated register; each national authority publishes its own, in its own format, on its own schedule. We reconcile all of them so you query one shape instead of writing twenty-seven scrapers.

Early detection

/early returns entities that appeared in a national register but have not reached the consolidated ESMA list yet. That gap is often weeks long — long enough to matter for onboarding and competitive monitoring.

A real changelog

/events is a timestamped record of every observed change: new authorisations, withdrawals, status flips, warning-list additions. Poll it and you have a compliance feed, not a nightly diff of your own.

LEI-verified identity

Every LEI is checked against GLEIF, and entity detail carries the full company record: legal form, registered address, corporate parents, geocoded coordinates. You get the legal entity, not just a trading name.

Filter server-side

Register type, status, jurisdiction, competent authority, MiCA service A–J, passporting rights, LEI validity — combined, faceted and counted. Facet counts come back with the results, so you can build a real search UI on top.

Honest freshness

Every response carries data_version, generated_at and refreshed_at. You always know how old the answer is, and /health is open so your monitoring never needs a key.

Quickstart

Two minutes: get a key from your account page, then send it as a bearer token.

# Every authorised CASP in France that can custody crypto-assets (service A)
curl -s "https://mica.seqlense.com/api/v1/entities?country=FR&register=CASP&service=A" \
  -H "Authorization: Bearer sk_mica_your_key_here"

If a proxy on your side rewrites Authorization, send the key as X-API-Key instead — both are accepted.

Response shape

Every successful call returns data and meta. Every failure returns error with a stable machine-readable code. Write your handling once.

{
  "data": [
    {
      "id": "esma:12345",
      "legal_name": "Example Digital Assets SAS",
      "register_type": "CASP",      // CASP | EMT | ART | NCASP | OTHER
      "register_label": "Crypto-Asset Service Provider",
      "status": "authorised",
      "home_member_state": "FR",
      "country_label": "France",
      "competent_authority": "Autorité des marchés financiers",
      "lei": "969500XXXXXXXXXXXX00",
      "lei_valid": true,
      "services": ["A", "C", "E"],
      "passporting": ["DE", "IT", "ES"],
      "preview": false          // true = national register only, not yet in ESMA
    }
  ],
  "meta": {
    "total": 42, "page": 1, "page_size": 20, "pages": 3, "has_more": true,
    "data_version": "2026-08-16",
    "generated_at": "2026-08-16T04:12:00Z",  // upstream snapshot
    "refreshed_at": "2026-08-17T09:30:11Z"   // our last pull
  }
}

Endpoints

Base URL https://mica.seqlense.com/api/v1. Everything is GET. The full machine-readable contract is at /api/v1/openapi.json.

EndpointReturnsKey
GET /entities Faceted search over the whole register. Accepts every filter below, paginated. Required
GET /entities.csv The current filter set as a CSV download. Paging is ignored — you get every matching row. Required
GET /entities/{id} One entity in full: the register record, the upstream sources and events, and the GLEIF company record behind its LEI. Required
GET /facets Bucket counts for the current filter set, plus the MiCA service legend (A–J). Required
GET /early Entities detected in a national register before ESMA consolidated them. Required
GET /events The timestamped register changelog. Required
GET /stats Totals by register, status and country across the whole dataset. Required
GET /registers The register types present, with labels and counts. Required
GET /countries The jurisdictions present, with labels and counts. Required
GET /me Your key, what it has spent today, and its quota. Required
GET /health Snapshot status and upstream health. Open, so your monitoring never needs a key. Open
GET /openapi.json The OpenAPI specification, so you can generate a client before signing up. Open

Filters

Apply to /entities, /entities.csv and /facets. Multi-value filters accept repeated keys (register=CASP&register=EMT) or a comma-separated list (register=CASP,EMT) — identically.

ParameterValuesNotes
qFree textMatches legal name, commercial name, LEI, authority and country. Accent-insensitive.
registerCASP EMT ART NCASP OTHERMulti-value.
statusauthorised non_compliant withdrawn publishedMulti-value.
countryISO-3166 alpha-2Home member state. Multi-value.
authorityExact authority nameUse /facets to discover the exact spellings.
serviceAJMiCA Article 3(1)(16) services. Matches any of the listed codes.
passportingISO-3166 alpha-2Entities allowed to passport into any of these host states.
sourcee.g. esmaWhich register the record came from.
lei_validtrue / falseWhether the LEI verified against GLEIF.
sortrelevance name country registerDefaults to relevance.
page≥ 1Defaults to 1.
page_size1–200Defaults to 20. Out-of-range values are clamped, never rejected.

Limits & errors

Every response carries the current counters, so you can back off before you are told to.

StatusCodeWhat happened
400bad_requestA parameter was unusable. The message says which.
401unauthorizedNo key, an unknown key, or a revoked one. Revocation takes effect on the next request.
404not_foundNo such entity or no such route.
429rate_limitedOver quota. Retry-After tells you how long to wait.
503service_unavailableTemporary. Retry with backoff.

Headers on every response: X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Limit-Day, X-RateLimit-Remaining-Day. Current quota: 60 requests/minute and 10,000 requests/day per key, up to 5 keys per account.

Questions

Why is it free, and what's the catch?

This is public regulator data. Charging for access to a public register would be indefensible, and we would rather it be used. The key exists so we can keep the service healthy, tell abuse from a busy dashboard, and reach you if something we serve turns out to be wrong. There is no upsell attached to it.

Can I use it commercially?

Yes — in products, in research, in internal tooling. Attribution is appreciated, not required. The data is aggregated from public registers and is not legal advice; for a decision that carries consequences, verify against the competent authority's own register, which every entity page links to.

How fresh is it?

The upstream aggregator rebuilds roughly every 30 minutes and this service polls it continuously. Every response tells you exactly which snapshot answered it, so you never have to guess.

Will v1 break under me?

No. Fields get added, never removed or repurposed, and a breaking change would ship as /api/v2 with the old version still running. That is what the version in the path is for.

What about the older /api/… endpoints?

They still work and still power this website, but they are deprecated, carry a Deprecation header, and get no new features. Build on /api/v1.

I need more than the quota.

Write to [email protected] with what you are building. Raising a limit for a real use case is a conversation, not a pricing page.

Get your key

Sign in with your Seqlense account and generate one. It takes about ten seconds.

Get your free API key