DeFi Intel API PRIVATE BETA
Programmatic access to the digital-asset entity graph. Query the same data that powers our 11,787 entity profiles, 26,104 typed relations, 3,354 dated events, 1,800 entity-tagged news items and 237 long-form research entries.
Overview
The DeFi Intel API exposes our curated digital-asset entity graph over a small, conventional REST surface. Six v1 endpoints cover the four main object types — entities, relations, events, news — plus dedicated search and incident endpoints. Every response is JSON, every list is cursor-paginated, every request is authenticated via a Bearer token. The schema is stable; breaking changes are versioned with a leading /v1/ path component.
The API is bundled with our paid plans. Pro ($49/mo) includes 10,000 requests per month — enough for an analyst dashboard, a Slack-bot integration, or a small client-side widget. Business ($99/mo) includes 100,000 requests per month — enough for a public-facing site that surfaces entity context next to ticker pages, or a quantitative research pipeline that polls daily. Enterprise is custom volume with an SLA, contractual data-rights, IP-allowlisted access, and a dedicated technical contact; contact sales.
Authentication uses an opaque API key passed as a Bearer token in the Authorization header. Keys are issued from your account dashboard once you upgrade to Pro or Business. Sample header: Authorization: Bearer di_live_a1b2c3d4e5f6.... Test keys (di_test_*) are scoped to a separate sandbox dataset of ~150 demo entities and do not count against your monthly quota; they are useful for CI pipelines and integration smoke tests. Never embed a live key in client-side JavaScript or a public Git repository — rotate compromised keys via the dashboard.
Base URL & conventions
- Base URL:
https://api.defi-intel.com/v1/ - Content type: all responses are
application/json; charset=utf-8 - Identifiers: entities are identified by
slug(kebab-case, e.g.protocol-aave,company-coinbase,person-stani-kulechov) - Timestamps: ISO-8601, UTC, e.g.
2026-03-30T14:00:00Z - Cursor pagination: opaque
?cursor=token returned inmeta.next_cursorwhen more results exist - Errors: JSON body with
error.codeanderror.message, mapped to standard HTTP status codes
Endpoints
Six v1 endpoints. Every endpoint accepts an Authorization header and returns JSON. Optional query parameters are documented per endpoint.
Single entity profile + relations
Returns a single entity record with its full set of typed outbound relations (founder-of, audited-by, deployed-on, holds-token, etc.), tagged news, and event timeline.
Path params
slug(string, required) — entity slug, e.g.protocol-aave
Query params
include(string, optional) — comma-separated:relations,news,events,research. Default:relations.news_limit(int, optional, max 100) — how many news items to embed. Default: 10.
Response (200) — abbreviated
{
"data": {
"slug": "protocol-aave",
"type": "protocol",
"name": "Aave",
"description": "Largest decentralized lending protocol in DeFi.",
"tvl_usd": 24800000000,
"chains": ["ethereum","arbitrum","optimism","base","polygon"],
"founded": "2017-11-01",
"first_seen": "2017-10-04T00:00:00Z",
"last_modified": "2026-04-28T11:43:00Z",
"relations": [
{"type":"founded-by","target":"person-stani-kulechov"},
{"type":"audited-by","target":"company-trail-of-bits"},
{"type":"issues-token","target":"token-aave"},
{"type":"issues-stablecoin","target":"token-gho"}
],
"tags": ["lending","ethereum","blue-chip","governance-token"]
},
"meta": {"request_id":"req_01HTZ...","plan":"pro"}
}
curl
curl https://api.defi-intel.com/v1/entities/protocol-aave \
-H "Authorization: Bearer di_live_xxx"
JavaScript (fetch)
const r = await fetch(
"https://api.defi-intel.com/v1/entities/protocol-aave",
{ headers: { Authorization: `Bearer ${process.env.DI_KEY}` } }
);
const { data } = await r.json();
console.log(data.tvl_usd);
Python (requests)
import os, requests
r = requests.get(
"https://api.defi-intel.com/v1/entities/protocol-aave",
headers={"Authorization": f"Bearer {os.environ['DI_KEY']}"},
)
print(r.json()["data"]["tvl_usd"])
Rate-limit response headers
X-RateLimit-Limit: 10000
X-RateLimit-Remaining: 9234
X-RateLimit-Reset: 1714521600
Search across entities
Full-text search across entity name, description and tags. Supports filtering by entity type.
Query params
q(string, required) — search query, e.g.aavetype(string, optional) — filter by type:protocol,company,token,person,chain,dao,event,incident,productlimit(int, optional, max 100) — default 25cursor(string, optional) — pagination cursor
Response (200) — abbreviated
{
"data": [
{"slug":"protocol-aave","type":"protocol","name":"Aave","score":0.98},
{"slug":"protocol-aave-v3","type":"protocol","name":"Aave v3","score":0.92},
{"slug":"token-aave","type":"token","name":"AAVE","score":0.88}
],
"meta": {"total":12,"next_cursor":null}
}
curl
curl "https://api.defi-intel.com/v1/entities/search?q=aave&type=protocol&limit=10" \
-H "Authorization: Bearer di_live_xxx"
Typed graph traversal
Return the typed relations originating from a given entity. Use this to walk the graph — e.g. find every protocol audited by Trail of Bits, or every token issued by Aave.
Query params
from(string, required) — source entity slugtype(string, optional) — relation type, e.g.audited-by,founded-by,deployed-on,holds-token,backed-by,integrated-withdirection(string, optional) —out(default),in,bothlimit(int, optional, max 200) — default 50
Response (200) — abbreviated
{
"data": [
{"type":"audited-by","from":"protocol-aave","to":"company-trail-of-bits","first_seen":"2020-09-01"},
{"type":"audited-by","from":"protocol-aave","to":"company-openzeppelin","first_seen":"2020-12-03"},
{"type":"audited-by","from":"protocol-aave","to":"company-certora","first_seen":"2022-03-16"}
],
"meta": {"next_cursor":null}
}
curl
curl "https://api.defi-intel.com/v1/relations?from=protocol-aave&type=audited-by" \
-H "Authorization: Bearer di_live_xxx"
Entity-tagged news
Return news items tagged to a given entity, ordered most recent first.
Query params
entity(string, required) — entity sluglimit(int, optional, max 100) — default 25since(ISO-8601, optional) — only return news after this timestampcursor(string, optional)
Response (200) — abbreviated
{
"data": [
{
"id": "news_01HTZX...",
"title": "Aave v4 launches on Ethereum mainnet with hub-and-spoke architecture",
"url": "https://defi-intel.com/news/aave-v4-launch-2026/",
"source": "DeFi Intel",
"published_at": "2026-03-30T14:00:00Z",
"entities": ["protocol-aave","protocol-aave-v4","token-gho"]
}
],
"meta": {"next_cursor":"eyJrIjoxMjM0NX0..."}
}
Python
r = requests.get(
"https://api.defi-intel.com/v1/news",
params={"entity":"protocol-aave","limit":50,"since":"2026-04-01T00:00:00Z"},
headers={"Authorization": f"Bearer {os.environ['DI_KEY']}"},
)
for item in r.json()["data"]:
print(item["published_at"], item["title"])
Incident post-mortem data
Returns a single incident record with structured post-mortem fields: scope, root cause, loss in USD, affected entities, remediation timeline.
Path params
slug(string, required) — incident slug, e.g.incident-curve-reentrancy-2023
Response (200) — abbreviated
{
"data": {
"slug": "incident-curve-reentrancy-2023",
"title": "Curve Vyper compiler reentrancy",
"occurred_at": "2023-07-30T12:00:00Z",
"loss_usd": 73500000,
"loss_recovered_usd": 52800000,
"root_cause": "Vyper 0.2.15-0.3.0 reentrancy guard mis-compiled",
"affected_entities": [
"protocol-curve","pool-curve-aleth","pool-curve-mseth","pool-curve-peth"
],
"remediation": "Vyper 0.3.7+, frozen pools migrated, white-hat returns",
"post_mortem_url": "https://defi-intel.com/incidents/curve-reentrancy-2023/"
}
}
curl
curl https://api.defi-intel.com/v1/incidents/incident-curve-reentrancy-2023 \
-H "Authorization: Bearer di_live_xxx"
Dated events
Return dated events filtered by date range and (optionally) by entity. Events include token launches, version upgrades, hack/incident dates, governance votes, regulatory rulings.
Query params
from(ISO-8601 date, required) — inclusive lower bound, e.g.2026-01-01to(ISO-8601 date, required) — inclusive upper boundentity(string, optional) — restrict to events tagged to this entitycategory(string, optional) —launch,upgrade,incident,governance,regulatory,partnershiplimit(int, optional, max 200) — default 50
Response (200) — abbreviated
{
"data": [
{
"id": "event_aave_v4_launch",
"title": "Aave v4 launches on Ethereum mainnet",
"date": "2026-03-30",
"category": "launch",
"entities": ["protocol-aave","protocol-aave-v4"]
},
{
"id": "event_kelp_lrt_depeg",
"title": "KelpDAO LRT depeg → Aave $8.45B 48h withdrawal",
"date": "2026-04-12",
"category": "incident",
"entities": ["protocol-aave","protocol-kelpdao"]
}
],
"meta": {"next_cursor":null}
}
Errors
Errors use standard HTTP status codes plus a JSON body with a stable error.code. Always handle 429 (rate limit) and 5xx (server) gracefully with exponential backoff.
| Status | error.code | Meaning |
|---|---|---|
| 400 | invalid_request | Malformed query, missing required param, invalid date format |
| 401 | unauthorized | Missing or malformed Authorization header |
| 403 | plan_required | Endpoint requires Business or Enterprise plan |
| 404 | not_found | Slug does not exist in the entity graph |
| 422 | unprocessable_slug | Slug format is valid but resolves to a deprecated record |
| 429 | rate_limited | Monthly quota exceeded or burst rate-limit hit; retry after Retry-After seconds |
| 500 | internal_error | Server-side fault; retry with backoff |
| 503 | maintenance | Scheduled maintenance window |
Sample error body:
{
"error": {
"code": "not_found",
"message": "No entity with slug 'protocol-doesnotexist'",
"request_id": "req_01HTZX..."
}
}
Pagination
Every list endpoint supports cursor pagination. The first request returns up to limit records plus a meta.next_cursor string when more records exist; pass that cursor back as the cursor query param on the next request. The cursor is opaque — do not parse it. When meta.next_cursor is null, you have reached the end.
We deliberately do not support offset-style pagination (?page=N) because it does not survive concurrent inserts cleanly. Cursors are stable across the lifetime of a single iteration; if you need to re-iterate from the start, simply omit cursor.
# first page
curl "https://api.defi-intel.com/v1/news?entity=protocol-aave&limit=50" \
-H "Authorization: Bearer di_live_xxx"
# next page
curl "https://api.defi-intel.com/v1/news?entity=protocol-aave&limit=50&cursor=eyJrIjoxMjM0NX0..." \
-H "Authorization: Bearer di_live_xxx"
Rate limits
Two limits apply: a monthly quota (10,000 on Pro, 100,000 on Business, custom on Enterprise) and a burst limit of 20 requests per second per key. Both apply to every endpoint and every key. The current window is reflected in the response headers on every request:
X-RateLimit-Limit— your monthly quotaX-RateLimit-Remaining— requests remaining in the current monthX-RateLimit-Reset— unix timestamp at which the monthly counter resetsRetry-After— seconds to wait before retrying (only on 429)
If you need higher burst or monthly volume than Business provides, contact sales for Enterprise. We typically size Enterprise contracts to the customer's actual peak QPS plus 30% headroom; common Enterprise tiers are 1M, 5M and 25M requests per month.
Get an API key
The API is in private beta. Pro ($49/mo) and Business ($99/mo) subscribers can apply for early access through the account dashboard once subscribed. Enterprise customers should contact sales directly. We onboard new beta accounts in weekly batches; expect a 2-5 business day turnaround.
Get on the API beta waitlist
Subscribe to Pro or Business and email us your intended use case. We're prioritising analyst dashboards, fintech integrations, and quantitative research pipelines for the first cohort.
Roadmap
The v1 REST surface is stable; we will not break it. Past v1, we are working on:
- GraphQL — single-endpoint query layer for clients that need to pull related entities in one round-trip. Targeting H2 2026.
- Webhooks — push notifications for entity changes, new news/events tagged to entities you care about, incident alerts. Targeting H2 2026.
- Bulk Parquet export — daily and monthly Parquet snapshots of the full entity graph for Business and Enterprise customers, delivered to S3 or GCS buckets. Targeting Q4 2026.
- OpenAPI 3.1 spec — machine-readable spec for client-code generation, alongside Postman and Insomnia collections.
Have a use case we should prioritise? Tell us at [email protected] or via the contact form.
Last updated 2026-05-03. The DeFi Intel API is independent of any individual data source and assembles the entity graph from on-chain telemetry, public filings, primary research and curated editorial. See our methodology for the curation process. Questions: [email protected].