Back to Docs

Documentation

API Reference

The full customer-callable endpoint catalogue. Public read endpoints need no API key and are browser-callable cross-origin. Pro and Enterprise endpoints take an Authorization: Bearer <key> header.

Base URL

https://api.verdict.finance/api/v1

Machine-readable spec at /openapi.json. Agent index at /llms.txt. Full API reference for agents at /llms-full.txt.

Identifiers

Entity detail and scorecard endpoints accept either the slug or the UUID id; the per-entity data endpoints (domains, questions, rubric, evidence, history) take the slug. Slugs can change when an entity is renamed. An entity keeps its external_ids and its id across a rename, so integrations that store Verdict data long-term should key on external_ids or id, not on slug.

A provider key that is absent has simply not been mapped. Where we have checked and no counterpart exists, the entity carries a <provider>_note key explaining why, with the provider key itself still absent. So defillama_note present and defillama missing means "checked, there is nothing to link to", not "not yet done". Treat any unrecognised key as free-form metadata and pass it through.

Protocols

  • GEThttps://api.verdict.finance/api/v1/protocolsPublic

    List rated protocols

  • GEThttps://api.verdict.finance/api/v1/protocols/{slug}Public

    Get one protocol (slug or UUID)

  • GEThttps://api.verdict.finance/api/v1/protocols/{slug}/scorecardsPublic

    Grade + composite; domain breakdowns stripped for anon/Free (full version history on Pro). Per-answer detail and computed gates are not on this list route; use the by-id scorecard route below.

  • GEThttps://api.verdict.finance/api/v1/protocols/{slug}/domainsPro

    Domain scores breakdown

  • GEThttps://api.verdict.finance/api/v1/protocols/{slug}/questionsEnterprise

    Per-question scores + rationale, plus each question's weight, the top-level domain_weights map, and scorecard_version / scorecard_published_at

  • GEThttps://api.verdict.finance/api/v1/protocols/{slug}/historyPro

    Full rating history with reasoning

  • GEThttps://api.verdict.finance/api/v1/protocols/{slug}/rubricEnterprise

    Full rubric (per-question criteria), with per-question weight + domain_weights

  • GEThttps://api.verdict.finance/api/v1/protocols/{slug}/evidenceEnterprise

    Evidence + reasoning trails, with per-question weight + domain_weights

  • GEThttps://api.verdict.finance/api/v1/scorecards/{scorecard_id}Enterprise

    One scorecard by its UUID, carrying the full per-answer array (the per-answer detail omitted from the list route above)

Chains

  • GEThttps://api.verdict.finance/api/v1/chainsPublic

    List rated chains

  • GEThttps://api.verdict.finance/api/v1/chains/{slug}Public

    Get one chain (slug or UUID)

  • GEThttps://api.verdict.finance/api/v1/chains/{slug}/scorecardsPublic

    Grade + composite; domain breakdowns stripped for anon/Free (full version history on Pro). Per-answer detail and computed gates are not on this list route; use the by-id scorecard route below.

  • GEThttps://api.verdict.finance/api/v1/chains/{slug}/domainsPro

    Domain scores breakdown

  • GEThttps://api.verdict.finance/api/v1/chains/{slug}/questionsEnterprise

    Per-question scores + rationale, plus each question's weight, the top-level domain_weights map, and scorecard_version / scorecard_published_at

  • GEThttps://api.verdict.finance/api/v1/chains/{slug}/historyPro

    Full rating history with reasoning

  • GEThttps://api.verdict.finance/api/v1/chains/{slug}/rubricEnterprise

    Full rubric (per-question criteria), with per-question weight + domain_weights

  • GEThttps://api.verdict.finance/api/v1/chains/{slug}/evidenceEnterprise

    Evidence + reasoning trails, with per-question weight + domain_weights

  • GEThttps://api.verdict.finance/api/v1/chain-scorecards/{scorecard_id}Enterprise

    One scorecard by its UUID, carrying the full per-answer array (the per-answer detail omitted from the list route above)

mvc_gates populate for chains only; the other entity types return null for that field.

Tokens

  • GEThttps://api.verdict.finance/api/v1/tokensPublic

    List rated tokens

  • GEThttps://api.verdict.finance/api/v1/tokens/{slug}Public

    Get one token (slug or UUID)

  • GEThttps://api.verdict.finance/api/v1/tokens/{slug}/scorecardsPublic

    Grade + composite; domain breakdowns stripped for anon/Free (full version history on Pro). Per-answer detail and computed gates are not on this list route; use the by-id scorecard route below.

  • GEThttps://api.verdict.finance/api/v1/tokens/{slug}/domainsPro

    Domain scores breakdown

  • GEThttps://api.verdict.finance/api/v1/tokens/{slug}/questionsEnterprise

    Per-question scores + rationale, plus each question's weight, the top-level domain_weights map, and scorecard_version / scorecard_published_at

  • GEThttps://api.verdict.finance/api/v1/tokens/{slug}/historyPro

    Full rating history with reasoning

  • GEThttps://api.verdict.finance/api/v1/tokens/{slug}/rubricEnterprise

    Full rubric (per-question criteria), with per-question weight + domain_weights

  • GEThttps://api.verdict.finance/api/v1/tokens/{slug}/evidenceEnterprise

    Evidence + reasoning trails, with per-question weight + domain_weights

  • GEThttps://api.verdict.finance/api/v1/token-scorecards/{scorecard_id}Enterprise

    One scorecard by its UUID, carrying the full per-answer array (the per-answer detail omitted from the list route above)

Oracles

  • GEThttps://api.verdict.finance/api/v1/oraclesPublic

    List rated oracles

  • GEThttps://api.verdict.finance/api/v1/oracles/{slug}Public

    Get one oracle (slug or UUID)

  • GEThttps://api.verdict.finance/api/v1/oracles/{slug}/scorecardsPublic

    Grade + composite; domain breakdowns stripped for anon/Free (full version history on Pro). Per-answer detail and computed gates are not on this list route; use the by-id scorecard route below.

  • GEThttps://api.verdict.finance/api/v1/oracles/{slug}/domainsPro

    Domain scores breakdown

  • GEThttps://api.verdict.finance/api/v1/oracles/{slug}/questionsEnterprise

    Per-question scores + rationale, plus each question's weight, the top-level domain_weights map, and scorecard_version / scorecard_published_at

  • GEThttps://api.verdict.finance/api/v1/oracles/{slug}/historyPro

    Full rating history with reasoning

  • GEThttps://api.verdict.finance/api/v1/oracles/{slug}/rubricEnterprise

    Full rubric (per-question criteria), with per-question weight + domain_weights

  • GEThttps://api.verdict.finance/api/v1/oracles/{slug}/evidenceEnterprise

    Evidence + reasoning trails, with per-question weight + domain_weights

  • GEThttps://api.verdict.finance/api/v1/oracle-scorecards/{scorecard_id}Enterprise

    One scorecard by its UUID, carrying the full per-answer array (the per-answer detail omitted from the list route above)

Vaults

  • GEThttps://api.verdict.finance/api/v1/vaultsPublic

    List rated vaults

  • GEThttps://api.verdict.finance/api/v1/vaults/{slug}Public

    Get one vault (slug or UUID)

  • GEThttps://api.verdict.finance/api/v1/vaults/{slug}/scorecardsPublic

    Grade + composite; domain breakdowns stripped for anon/Free (full version history on Pro). Per-answer detail and computed gates are not on this list route; use the by-id scorecard route below.

  • GEThttps://api.verdict.finance/api/v1/vaults/{slug}/domainsPro

    Domain scores breakdown

  • GEThttps://api.verdict.finance/api/v1/vaults/{slug}/questionsEnterprise

    Per-question scores + rationale, plus each question's weight, the top-level domain_weights map, and scorecard_version / scorecard_published_at

  • GEThttps://api.verdict.finance/api/v1/vaults/{slug}/historyPro

    Full rating history with reasoning

  • GEThttps://api.verdict.finance/api/v1/vaults/{slug}/rubricEnterprise

    Full rubric (per-question criteria), with per-question weight + domain_weights

  • GEThttps://api.verdict.finance/api/v1/vaults/{slug}/evidenceEnterprise

    Evidence + reasoning trails, with per-question weight + domain_weights

  • GEThttps://api.verdict.finance/api/v1/vault-scorecards/{scorecard_id}Enterprise

    One scorecard by its UUID, carrying the full per-answer array (the per-answer detail omitted from the list route above)

Organisations

  • GEThttps://api.verdict.finance/api/v1/organisationsPublic

    List rated organisations (curators, etc.)

  • GEThttps://api.verdict.finance/api/v1/organisations/{slug}Public

    Get one organisations (curators, etc.) (slug or UUID)

  • GEThttps://api.verdict.finance/api/v1/organisations/{slug}/scorecardsPublic

    Grade + composite; domain breakdowns stripped for anon/Free (full version history on Pro). Per-answer detail and computed gates are not on this list route; use the by-id scorecard route below.

  • GEThttps://api.verdict.finance/api/v1/organisations/{slug}/domainsPro

    Domain scores breakdown

  • GEThttps://api.verdict.finance/api/v1/organisations/{slug}/questionsEnterprise

    Per-question scores + rationale, plus each question's weight, the top-level domain_weights map, and scorecard_version / scorecard_published_at

  • GEThttps://api.verdict.finance/api/v1/organisations/{slug}/historyPro

    Full rating history with reasoning

  • GEThttps://api.verdict.finance/api/v1/organisations/{slug}/rubricEnterprise

    Full rubric (per-question criteria), with per-question weight + domain_weights

  • GEThttps://api.verdict.finance/api/v1/organisations/{slug}/evidenceEnterprise

    Evidence + reasoning trails, with per-question weight + domain_weights

  • GEThttps://api.verdict.finance/api/v1/organisation-scorecards/{scorecard_id}Enterprise

    One scorecard by its UUID, carrying the full per-answer array (the per-answer detail omitted from the list route above)

Bridges

  • GEThttps://api.verdict.finance/api/v1/bridgesPublic

    List rated bridges

  • GEThttps://api.verdict.finance/api/v1/bridges/{slug}Public

    Get one bridge (slug or UUID)

  • GEThttps://api.verdict.finance/api/v1/bridges/{slug}/scorecardsPublic

    Grade + composite; domain breakdowns stripped for anon/Free (full version history on Pro). Per-answer detail and computed gates are not on this list route; use the by-id scorecard route below.

  • GEThttps://api.verdict.finance/api/v1/bridges/{slug}/domainsPro

    Domain scores breakdown

  • GEThttps://api.verdict.finance/api/v1/bridges/{slug}/questionsEnterprise

    Per-question scores + rationale, plus each question's weight, the top-level domain_weights map, and scorecard_version / scorecard_published_at

  • GEThttps://api.verdict.finance/api/v1/bridges/{slug}/historyPro

    Full rating history with reasoning

  • GEThttps://api.verdict.finance/api/v1/bridges/{slug}/rubricEnterprise

    Full rubric (per-question criteria), with per-question weight + domain_weights

  • GEThttps://api.verdict.finance/api/v1/bridges/{slug}/evidenceEnterprise

    Evidence + reasoning trails, with per-question weight + domain_weights

  • GEThttps://api.verdict.finance/api/v1/bridge-scorecards/{scorecard_id}Enterprise

    One scorecard by its UUID, carrying the full per-answer array (the per-answer detail omitted from the list route above)

A bridge is rated on its own domain set: four universal domains plus one per category it carries, so domain_weights on the Enterprise routes returns that bridge's active domains renormalised to 100. Two bridges with different categories are scored on different rubrics, and neither is scored on the full catalogue. On external data: DefiLlama TVL resolves for roughly 9 of our 14 rated bridges, because bridge-specific volume sits behind DefiLlama's paid bridges API, so deployment breadth (the chains array) is the more reliable display metric. Bridge payloads also carry structured security fields, served on the public tier on both the list and the single-bridge route. signer_count is the size of the signing set, signing_threshold the number of signatures a message requires, and has_message_attestation a boolean for whether messages carry an attestation step. pause_mechanism is a prose description of the emergency-pause path and who holds it, so treat it as text to display rather than an enum to switch on. validator_set_owner embeds the organisation operating the validator set as {id, slug, name}. Null on the signer fields is a fact about the design rather than missing data: a bridge with no fixed signing set has nothing to report there, since IBC verifies with light clients and Across settles against a HubPool owner rather than a signing committee. Where validator_set_owner is populated it points at an organisation record staged for publication, so the embedded id and slug do not resolve against /organisations yet; they will once that family publishes.

Methodology

  • GEThttps://api.verdict.finance/api/v1/methodologyPublic

    Methodology metadata + question / domain counts + grade ladder

Score composition (Enterprise), level 1: within a domain, each SCORED question contributes weight_i x (score_i / max_score_i), and the domain_score is that total divided by the sum of those same weights. Questions served with a null score are excluded and the remaining weights renormalise, so a domain whose questions do not all apply is still scored out of what does. A null score with confidence not_applicable is the marker: the question was ruled out for this entity, and it is excluded exactly as a whole non-firing domain is. Level 2: composite = sum over domains of domain_score_d x domain_weight_d, where domain_score_d is the 0-to-1 fraction from level 1 and domain_weight_d is the percentage-point weight read from the domain_weights map on the same response. (If you carry domain scores as percentages instead, divide the result by 100.) That map is per-entity, not per-type: it is the set that entity was actually scored on, and it always sums to 100. Bridges are the case where this matters most, since each one fires only the category domains it carries; a stablecoin token and an LST or LRT vault likewise carry an extra domain and rebalanced weights. The headline composite_score and grade may then be reduced by dependency drag (D2); the intrinsic pair carries the un-notched values.

Quantum Readiness

  • GEThttps://api.verdict.finance/api/v1/quantum-readinessPublic

    Post-quantum readiness league table for 70+ chains: QRI score, band 1-7 with label, migration stage, hybrid-signature status and danger flag per row, plus rows_skipped. Each row carries matched_chain_slug: the Verdict chain slug when we track that chain, else null.

  • GEThttps://api.verdict.finance/api/v1/chains/{slug}/quantum-readinessPublic

    One chain's quantum readiness by Verdict chain slug. Availability is data: unknown chains and chains the source has not assessed return HTTP 200 with available: false and a reason.

Companion data sourced from LayerQu (https://layerqu.com/dashboard/), re-served with attribution on every payload; it never feeds Verdict grades. matched_chain_slug means the chain exists in Verdict's database (drafts included), not that it is rated. Every available payload carries as_of (snapshot time). stale: true appears only when the upstream refresh failed and an expired snapshot is served; available: false with a reason means nothing could be served.

Incidents

  • GEThttps://api.verdict.finance/api/v1/incidentsPublic

    Hack incidents, newest first by detected_at. Filters: slug (exact), since (ISO datetime), min_status (rumored, corroborated or confirmed; default confirmed), limit (default 50, max 200), offset. Returns items plus total.

A feed of hack incidents aggregated from public hack-reporting sources, with each item carrying the sources it was corroborated from. Incidents carry a confidence tier in status: corroborated, then confirmed. The feed serves confirmed only by default, so it lags the first rumour of an exploit by design and reads exactly as it did before tiers existed. Pass min_status=corroborated to opt into multi-source leads that have not yet reached confirmation; the floor of two independent sources applies at every served tier, and any other value of min_status is a 422. Scope is protocols. Every incident at or above the requested tier is listed, including ones at protocols Verdict does not rate: matched_protocol tells you which is which, and slug is null where there is no matching rated protocol. Matching happens when the incident is received and re-runs when an incident escalates and its payload improves, a slug arriving with the confirmation being the common case, so matched_protocol is true as of the incident's current tier. It is still never retroactive the other way: an incident stored before its protocol was rated is not re-matched because Verdict's coverage grew. An escalating incident keeps its incident_id and refreshes its detected_at, so it reappears at the top of a since poll at its new tier. Key on incident_id, expect the same id at successive tiers, and treat the tier as monotonic: it never goes down in the feed. Where an incident does match a rated protocol, that entity may be flagged under review on its own record. A rating change is never automatic. Re-rating is always a human decision, so treat an incident as a signal to look rather than as a downgrade that has already happened. Two stored fields are never served: the ingest nonce and any victim addresses. Filtering with since is how a polling consumer catches up without re-reading the feed; percent-encode the timestamp if it carries a +00:00 offset.

Pro Utility

  • GEThttps://api.verdict.finance/api/v1/export.csvPro

    Bulk CSV export. Required params: entity (singular or plural, e.g. chain or chains; one of protocol, chain, token, oracle, vault, organisation, bridge) and fields (comma-separated from: slug, name, grade, letter_grade, composite_score, domain_scores, last_rated_at). Published entities only. Includes a hidden __export_id watermark column.

  • GEThttps://api.verdict.finance/api/v1/export.jsonPro

    Bulk JSON export. Same params as export.csv: entity (singular or plural) and fields (slug, name, grade, letter_grade, composite_score, domain_scores, last_rated_at). Published entities only. Returns an array of records with the requested fields plus __export_id.

  • GEThttps://api.verdict.finance/api/v1/compareEnterprise

    Multi-entity comparison. Required params: entity, ids (each id a slug OR a UUID), fields. Returns each entity's grade, composite_score, domain_scores and last_rated_at from its latest published scorecard.

  • GEThttps://api.verdict.finance/api/v1/alert-rulesPro

    List alert rules

  • POSThttps://api.verdict.finance/api/v1/alert-rulesPro

    Create alert rule

  • DELETEhttps://api.verdict.finance/api/v1/alert-rules/{rule_id}Pro

    Delete alert rule

The bulk export quota is 5 per rolling 24 hours at every tier, including Enterprise; it does not scale. Standard request rate limits do scale with tier: 300 per minute (Free), 1,000 (Pro), 10,000 (Enterprise).