Developer reference

Risk score API

Mintread's composite risk score for every tracked stablecoin, served as JSON. No auth, no SDK, no rate limits on the public endpoint.

Endpoint contract

GET /api/risk/<slug>

Method
GET
URL
/api/risk/<slug> — where slug is one of usdc usdt dai pyusd frax usde.
Auth
None. The endpoint is fully public.
Content type
application/json
Cache control
public, max-age=600 — a 10-minute browser / CDN cache window.
ETag
Deterministic strong ETag (sha1 over the parsed envelope). Revalidate with If-None-Match to avoid re-downloading an unchanged payload.

200 response

Response shape

A single envelope under risk: the headline composite, the four sub-scores, the issuer's most-recent attestation date, the MiCA / GENIUS jurisdiction badge, and the wall-clock as_of at which the JSON was frozen.

200 · GET /api/risk/usdcapplication/json
{
  "risk": {
    "slug": "usdc",
    "composite": 94,
    "tier": "strong",
    "subScores": {
      "reserves": 24,
      "redemption": 25,
      "jurisdiction": 24,
      "counterparty": 21
    },
    "attestationDate": "2026-08-20",
    "jurisdictionBadge": "Both",
    "as_of": "2026-08-24T18:30:00.000Z"
  }
}

Field reference

What every key means

compositeinteger · 0–100

The headline risk score. Independent of subScores in spirit — the four sub-scores add to 100 by construction, but the published composite does not enforce equality.

tier"strong" | "moderate" | "watch"

Public band derived from composite: strong ≥ 80, moderate ≥ 50, else watch.

subScoresobject · four 0–25 cells

Reserves, Redemption, Jurisdiction, Counterparty — each on a 0–25 band. Detail of every dimension below.

attestationDateISO date · YYYY-MM-DD

The issuer's most-recent attested reserve report. Distinct from as_of— the first is the issuer's claim, the second is when this JSON was frozen.

jurisdictionBadge"MiCA" | "GENIUS" | "Both" | "None"

Where the issuer stands under applicable regulatory regimes. Both = highest; None = lowest.

as_ofISO-8601 UTC timestamp

When this JSON payload was frozen. Because the route is statically generated, this is the build-time value — a fresh deploy produces a new as_of and a new ETag. Revalidate against the ETag to detect a new build.

Sub-scores

The four named dimensions

Every sub-score sits on a 0–25 band. Each dimension has the same healthy / watch floor (healthy ≥ 21, watch ≤ 12).

subScores.reserves

0–25

Reserves

Quality and backing of the issuer's reserve assets — T-bills, cash, repo, MMF, and attestation cadence. Drift into non-cash or non-T-bill buckets, or missed attestations, drops this.

subScores.redemption

0–25

Redemption

Reliability of the issuer's redemption / mint-burn process. Open-to-redeemers is the floor; gating or pause drops the score.

subScores.jurisdiction

0–25

Jurisdiction

Standing of the issuer under applicable regulatory regimes — MiCA, the GENIUS Act, national frameworks. Dual coverage scores highest; offshore non-aligned scores lowest.

subScores.counterparty

0–25

Counterparty

Concentration and credit standing of the issuer's banking and custody counterparties — prime-broker rails, exchange listings, and OFAC exposure.

cURL

Call it yourself

One command, no flags beyond -sS (silent + show errors on failure). Paste it into a terminal and the response matches the example above.

shell
curl -sS https://mintread.app/api/risk/usdc

Badge

Embed it on your own page

Drop a coin's risk badge onto your site, README, or dashboard with a single <img> tag. The image is a server-rendered SVG that updates on every Mintread deploy — no JavaScript, no SDK, no CORS dance.

live preview · GET /api/risk/<slug>/badgeimage/svg+xml

Each badge above is a real fetch of /api/risk/<slug>/badge — the same URL you would embed. Open in a new tab to see the raw SVG, or try ?format=html for a standalone HTML wrapper suitable for <iframe> embeds.

markdown
![USDC risk: 94/100, strong tier](https://mintread.app/api/risk/usdc/badge)
html
<img src="https://mintread.app/api/risk/usdc/badge"
     alt="USDC risk: 94/100, strong tier"
     height="20">

Replace usdc with any tracked slug — usdt, dai, pyusd, frax, or usde. Cache is public, max-age=600 — a 10-minute CDN edge window — and the endpoint returns HTTP 404 for untracked slugs so <img> renders cleanly as a broken image rather than a hot link to a stale icon.

200 vs 404

When a slug isn't tracked

Anything outside usdc usdt dai pyusd frax usde returns HTTP 404 with the bare { "error": "Not found" } body — same shape for every untracked slug.

200 · tracked slug
curl -sS https://mintread.app/api/risk/usdc

{
  "risk": {
    "slug": "usdc",
    "composite": 94,
    "tier": "strong",
    "subScores": {
      "reserves": 24,
      "redemption": 25,
      "jurisdiction": 24,
      "counterparty": 21
    },
    "attestationDate": "2026-08-20",
    "jurisdictionBadge": "Both",
    "as_of": "2026-08-24T18:30:00.000Z"
  }
}
404 · untracked slug
curl -sS -i https://mintread.app/api/risk/nope

HTTP/2 404
content-type: application/json

{ "error": "Not found" }

Next step

Need it at enterprise scale, with alerts and team seats?

The Enterprise plan unlocks every slug in batch, webhook-style alerts, and seats for your treasury and risk teams.