Crypto Enforcement
See who US regulators are charging over digital assets, what they alleged, which tokens were involved, and what it cost the defendant. Every SEC, CFTC, and DOJ action since 2024, normalized to one schema and exploded to one row per named respondent.
Measure the pressure, not the headlines.
Count distinct action_key values per week by source_agency and primary_allegation to get an enforcement-intensity series you can trade against.
Follow one matter to its end.
respondent_key plus followup_action_key chains complaint to consent order, or indictment to plea, without hand-matching names across releases.
Weight cases by what they cost.
monetary_relief_usd with monetary_relief_basis separates a token penalty from a billion-dollar judgment at the same action count.
Has US regulatory pressure on crypto been getting heavier or lighter this year, and what kind of cases are driving it? Show me the biggest actions behind the trend.
Your agent translates this into per-agency counts, allegation categories, and action-level relief totals across your date range.
Three agencies, one row per defendant.
An action here is one public announcement by one of the three US agencies that bring digital asset cases, normalized so that a DOJ indictment and an SEC complaint can be filtered, grouped, and counted the same way.
Every action is exploded to one row per named respondent: a complaint against a company and its two founders is three rows sharing one action_key, each carrying that respondent's own name and kind. Follow-up linkage then chains successive actions by the same agency against the same party, so one matter reads as a sequence instead of scattered releases.
Each row includes:
- The agency, the document kind, and what the release announces: complaint, settled order, indictment, plea, or verdict.
- One named respondent, verbatim from the document, plus whether the document called it a person or a company.
- Every allegation category pled, which one leads, and the statutes cited.
- The tokens and assets the document names, as the document wrote them.
- Monetary relief in USD with a plain description of what the number covered, and a three-state settled flag.
- Links to the source document and to the next stage of the same matter.
monetary_relief_usd repeats on every respondent row of one action, so summing rows double-counts. A single CFTC action carries the same $12.7bn on both its FTX Trading and Alameda Research rows. Aggregate over distinct (action_key, monetary_relief_usd) pairs before you total anything.
Turn enforcement into a measurable pressure series.
The most direct use is regime tracking. Pressure on crypto is not constant: agencies rotate between fraud sweeps, unregistered-offering campaigns, and AML actions as administrations and market cycles change. Counting distinct actions per week by agency and allegation category turns that into a measurable series to position crypto-exposed equity and token books against, instead of a vibe read off headlines.
There are event-level angles too. When a document itself names a listed issuer, listed_issuer_ticker supports an event study on the announcement date. And relief, deduplicated by action, works as a severity weight: a quarter of small settled orders reads very differently from one holding several billion-dollar judgments.
- Build a weekly regulatory-pressure index for crypto by counting distinct actions per agency and allegation category
- Condition exposure to crypto-linked equities (exchanges, miners, treasury companies) on enforcement intensity shifts
- Event-study actions that name a listed issuer via listed_issuer_ticker
- Use action-level monetary relief as a severity weight instead of treating all actions equally
- Measure time from complaint to resolution along each follow-up chain with days_to_followup
Straight from the agency indexes, updated as cases move.
Everything comes from the agencies' own indexes and press feeds, never from a secondary aggregator. Facts about each action are extracted from the document's own words, and a field is left null where the document did not say rather than guessed.
New releases are picked up daily, and a separate daily sweep maintains the follow-up links and rewrites rows already served. Poll updated_since to catch a case that has moved, not only new publication dates.
The fields that identify the party and size the case.
The headline fields below are a subset. Every field, with exact types and semantics, is documented in the API reference.
| Field | Type | What it tells you |
|---|---|---|
| source_agency | string | Which agency brought the action: sec, cftc, or doj. |
| action_type | string | What the document announces: civil complaint, settled order, criminal indictment, criminal plea, trial verdict, and more. |
| respondent_name | string | The named respondent, verbatim from the document. One row per respondent. |
| respondent_kind | string | null | Person or company. Null when the document did not say. |
| primary_allegation | string | null | The leading legal theory, from an 8-category enum (fraud, unregistered offering, AML/BSA, and more). |
| assets_involved | array of strings | Tokens and assets named in the document, as the document wrote them. |
| monetary_relief_usd | float | null | Total stated relief in USD. Repeats on every respondent row of an action. |
| has_monetary_relief | integer (0/1) | Whether the document stated a dollar amount at all. Never null, so it is the safe way to ask the relief question. |
| settled_flag | integer | null | Three-state: 1 settled, 0 did not settle, null the document did not say. |
| listed_issuer_ticker | string | null | Ticker of a listed issuer when the document itself names one. Sparse today, fills in over time. |
| published_date | string | The date the agency published the release. Structural, never inferred; the default sort key. |
One call returns the charge, the assets, and the relief.
One key works across the REST API, the hosted MCP server, and this dashboard. Every response is JSON with a { count, data } envelope.
import requests
url = "https://api.alphanume.com/v1/crypto/enforcement"
params = {
"agency": "sec",
"allegation": "fraud",
"date_gte": "2026-06-01",
"date_lte": "2026-06-30",
"api_key": "alp_abc123",
}
r = requests.get(url, params=params)
print(r.json())curl "https://api.alphanume.com/v1/crypto/enforcement?agency=sec&allegation=fraud&date_gte=2026-06-01&date_lte=2026-06-30&api_key=alp_abc123"{
"count": 1,
"has_more": false,
"next_cursor": null,
"data": [
{
"record_id": "sec-lr:LR-26312#1",
"action_key": "sec-lr:LR-26312",
"source_agency": "sec",
"source_index": "litigation-release",
"release_number": "LR-26312",
"published_date": "2026-06-18",
"action_date": "2026-06-17",
"action_date_precision": "day",
"action_type": "civil_complaint",
"respondent_index": 1,
"respondent_count": 2,
"respondent_name": "Meridian Digital Capital LLC",
"respondent_kind": "company",
"respondent_key": "meridian digital capital",
"assets_involved": ["Bitcoin", "ETH"],
"allegation_categories": ["fraud", "unregistered_offering"],
"primary_allegation": "fraud",
"monetary_relief_usd": 4500000.0,
"monetary_relief_basis": "$3.2 million in disgorgement and $1.3 million in civil penalties",
"has_monetary_relief": 1,
"settled_flag": null,
"listed_issuer_ticker": null,
"title": "SEC Charges Crypto Asset Manager With Fraudulent Digital Asset Offering",
"document_url": "https://www.sec.gov/litigation/litreleases/lr-26312",
"is_followup": 0,
"followup_action_key": null
}
]
}What this data does not claim.
- Monetary relief mixes penalty, disgorgement, prejudgment interest, restitution, and forfeiture, because the agencies report them differently. monetary_relief_basis says what each number covered, and amounts describing the size of the scheme are excluded.
- respondent_key is a name normalization, not an entity resolution: different parties with the same name share a key, and the same party under a different name does not.
- assets_involved holds unnormalized document literals, so Bitcoin, bitcoin, and BTC are three distinct strings. Search it by substring, not exact match.
- published_date is structural and is what the date filters act on. action_date is extracted from the document and carries a precision that can be as coarse as a year.
- Coverage starts January 2024. Earlier enforcement history is out of scope.
Asked by researchers, answered plainly.
Which agencies are covered?
The SEC, through its litigation releases and administrative proceedings; the CFTC, through its enforcement press releases; and the DOJ, through its criminal announcements. source_index keeps the document kinds apart, which matters because a press release can come from either the CFTC or the DOJ.
Why does the same case show up more than once?
Nothing links across agencies, by design. An SEC complaint and a DOJ indictment over the same conduct are separate actions brought under different law, and merging them would destroy the per-agency counts. Within one agency, the stages of a matter chain by followup_action_key instead.
Does this include actions against public companies?
Yes, when a public company is a respondent, and listed_issuer_name and listed_issuer_ticker carry it where the document names one. Both are sparse today because most respondents are private companies and individuals, so do not build a broad ticker join on them.
What does settled mean in this dataset?
settled_flag records what the document stated: 1 settled, 0 not settled, null where it said nothing either way. Roughly a quarter of rows are null, often because a complaint is announced long before any resolution, so reading null as unsettled overstates how many cases were fought.
Free to evaluate. Full history with Pro.
A free key returns a rolling 30-day window of delayed data, enough to test the workflow end to end. Pro unlocks the full point-in-time history, real-time access, and every standard dataset as it launches.