Build against the EthIntel REST API without guessing what any endpoint returns.
This page documents the complete EthIntel surface: transaction explainers, address intelligence, validator and network analytics, operational utility endpoints, API key management, and the Telegram webhook. Every example is hardcoded and interactive, with no live API calls.
Interactive GET /api/explain/{txHash} playground
The controls below update the example request and mock response without making any network calls. The same state also drives the explain examples in the right-hand rail.
curl "https://ethintel.io/api/explain/0x8f3d0f63b3a948321f1b2291e5a8dd3c3df5cc9fd0c8ff9d132d91b2c1e9bc45" \
--header "Authorization: Bearer ei_live_demo_A9x32kLmQz" \
--header "Accept: application/json"Bearer token auth with public fallback
All public endpoints accept an optional Authorization: Bearer ei_live_... header. When omitted, the request still works under the anonymous rate window. The protected /api/user/api-key endpoint requires authentication.
Public routes include explain, address, scan, validator, network, and utility reads.
Without a bearer token, requests fall back to the anonymous rate window.
The API key CRUD endpoint returns 401 when the token is missing or invalid.
Secrets should be stored server-side or injected through a trusted client environment.
curl "https://ethintel.io/api/explain/0x8f3d0f63b3a948321f1b2291e5a8dd3c3df5cc9fd0c8ff9d132d91b2c1e9bc45" \
--header "Authorization: Bearer ei_live_demo_A9x32kLmQz" \
--header "Accept: application/json"Plan-aware request windows
| Plan | Minute window | Daily allowance | Notes |
|---|---|---|---|
| Anonymous | 10/min | — | Shared unauthenticated pool for public exploration. |
| Free | 10/min | 5/day | Good for quick wallet and dashboard prototypes. |
| Consumer | 60/min | Unlimited | For personal monitoring and embedded client apps. |
| Pro | 120/min | Unlimited | For serious operators with higher sustained concurrency. |
| API | 600/min | Unlimited | Best for production backends and partner integrations. |
Headers worth surfacing in your own tooling
| Header | Example | Meaning |
|---|---|---|
| X-Request-Id | req_01JTV2QG6M3R1S1A | Stable support correlation id for logs, tracing, and tickets. |
| X-RateLimit-Limit | 60 | Requests allowed in the current rolling window. |
| X-RateLimit-Remaining | 17 | Remaining requests in the current rate-limit window. |
| X-RateLimit-Reset | 1741981020 | Unix timestamp when the minute window resets. |
| X-Chain | ethereum | Resolved chain for explain, address, and risk workflows. |
| Cache-Control | public, immutable, max-age=31536000 | Immutable explain responses can be cached aggressively. |
Standard HTTP error semantics
| Status | Code | Meaning |
|---|---|---|
| 400 | BAD_REQUEST | Malformed hash, address, query, or JSON payload. |
| 404 | NOT_FOUND | The requested transaction, address, validator, or resource was not found. |
| 429 | RATE_LIMITED | The caller exhausted the current minute window. |
| 500 | INTERNAL_ERROR | Unexpected server-side exception in the request pipeline. |
| 503 | SERVICE_UNAVAILABLE | Upstream RPC, AI, or data dependencies are temporarily unavailable. |
/api/explain/{txHash}
AI transaction explanation
Explain any supported EVM transaction with decoded actions, asset flows, and safety context.
Explain a transaction
Returns a structured transaction narrative with protocol labeling, asset movement summaries, gas detail, and risk signals.
curl "https://ethintel.io/api/explain/0x8f3d0f63b3a948321f1b2291e5a8dd3c3df5cc9fd0c8ff9d132d91b2c1e9bc45" \
--header "Authorization: Bearer ei_live_demo_A9x32kLmQz" \
--header "Accept: application/json"| Name | Type | Required | Description |
|---|---|---|---|
| txHash | string | Required | 0x-prefixed transaction hash. |
| Name | Type | Required | Description |
|---|---|---|---|
| chain | "ethereum" | "base" | "arbitrum" | "optimism" | "polygon" | Optional | Optional chain override or enrichment context. |
| level | "simple" | "standard" | "technical" | Optional | Controls the detail level of the narration. Default: "standard" |
{
"txHash": "0x8f3d0f63b3a948321f1b2291e5a8dd3c3df5cc9fd0c8ff9d132d91b2c1e9bc45",
"chain": "ethereum",
"level": "standard",
"status": "success",
"classification": {
"category": "swap",
"protocol": "Uniswap V3",
"action": "Swap ETH for USDC"
},
"summary": {
"headline": "Swapped 1.2 ETH for 3,861.44 USDC.",
"detail": "The signer sent 1.2 ETH into the Uniswap V3 router, which wrapped the asset into WETH and traded it for 3,861.44 USDC. The trade completed normally, paid 0.0080 ETH in gas, and returned the USDC to the originating wallet."
},
"assets": {
"sent": [
{
"symbol": "ETH",
"amount": "1.2",
"destination": "Uniswap V3 Router"
}
],
"received": [
{
"symbol": "USDC",
"amount": "3861.44",
"source": "Uniswap V3 Pool"
}
]
},
"gas": {
"used": "192843",
"totalFeeEth": "0.008021",
"totalFeeUsd": 27.01
},
"risk": {
"score": 21,
"level": "low",
"signals": [
{
"severity": "info",
"code": "KNOWN_PROTOCOL",
"message": "The primary contract is a labeled Uniswap V3 router."
},
{
"severity": "info",
"code": "STANDARD_SWAP_FLOW",
"message": "The transaction flow matches a common single-hop swap path."
}
]
},
"requestId": "req_01JTV2QG6M3R1S1A",
"cached": true
}| Status | Code | Meaning |
|---|---|---|
| 400 | BAD_REQUEST | The request payload or parameters are invalid. |
| 404 | NOT_FOUND | The transaction hash was not found on the requested or auto-detected chain. |
| 429 | RATE_LIMITED | Too many requests for the current minute window. |
| 500 | INTERNAL_ERROR | Unexpected server-side exception. |
| 503 | SERVICE_UNAVAILABLE | One or more upstream dependencies are unavailable. |
/api/explain/{txHash}/stream
Explain stream
Subscribe to pipeline progress over SSE while the explanation is being assembled.
Stream explanation progress
Use SSE when you want visible progress updates for decoding, safety analysis, narration, and completion.
curl -N "https://ethintel.io/api/explain/0x8f3d0f63b3a948321f1b2291e5a8dd3c3df5cc9fd0c8ff9d132d91b2c1e9bc45/stream" \
--header "Authorization: Bearer ei_live_demo_A9x32kLmQz" \
--header "Accept: text/event-stream"| Name | Type | Required | Description |
|---|---|---|---|
| txHash | string | Required | 0x-prefixed transaction hash. |
| Name | Type | Required | Description |
|---|---|---|---|
| chain | "ethereum" | "base" | "arbitrum" | "optimism" | "polygon" | Optional | Optional chain override or enrichment context. |
| level | "simple" | "standard" | "technical" | Optional | Controls the detail level of the narration. Default: "standard" |
| Event | Meaning |
|---|---|
| status | Initial progress update for the request. |
| decoded | Decoded calldata and first structural facts. |
| safety | Risk analysis and labeled counterparties. |
| narration | Human-readable explanation segments. |
| complete | Terminal event containing the full explanation. |
| error | Terminal failure event with an error payload. |
{
"event": "decoded",
"data": {
"stage": "decode",
"progress": 42,
"message": "Decoded calldata and mapped the router call.",
"payload": {
"function": "exactInputSingle",
"protocol": "Uniswap V3"
}
}
}| Status | Code | Meaning |
|---|---|---|
| 400 | BAD_REQUEST | The request payload or parameters are invalid. |
| 429 | RATE_LIMITED | Too many requests for the current minute window. |
| 500 | INTERNAL_ERROR | Unexpected server-side exception. |
| 503 | SERVICE_UNAVAILABLE | One or more upstream dependencies are unavailable. |
/api/address/{address}
Address profile
Resolve an address or ENS name into an enriched profile with labels, activity, and safety context.
Fetch an address profile
Returns identity, balance context, activity snapshots, top interactions, and a compact risk assessment.
curl "https://ethintel.io/api/address/0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045?chain=ethereum" \
--header "Authorization: Bearer ei_live_demo_A9x32kLmQz" \
--header "Accept: application/json"| Name | Type | Required | Description |
|---|---|---|---|
| address | string | Required | 0x-prefixed address or ENS name where supported. |
| Name | Type | Required | Description |
|---|---|---|---|
| chain | "ethereum" | "base" | "arbitrum" | "optimism" | "polygon" | Optional | Optional chain override or enrichment context. |
{
"address": "0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045",
"chain": "ethereum",
"ens": "vitalik.eth",
"label": "Vitalik Buterin",
"category": "individual",
"balancesUsd": 2528613.68,
"activity30d": {
"txCount": 31,
"activeDays": 11,
"lastTxHash": "0x29f1a5c4f612329c38ef2d3b67bc912f84f6f458f9ae34ef6dcd8e01b7145bb8"
},
"topInteractions": [
{
"address": "0xE592427A0AEce92De3Edee1F18E0157C05861564",
"label": "Uniswap V3 Router",
"count": 7
}
],
"tags": [
"public-figure",
"dao-participant",
"contract-deployer"
],
"risk": {
"score": 11,
"level": "low",
"signals": [
{
"severity": "info",
"code": "KNOWN_ENTITY",
"message": "This address matches a known public identity."
}
]
}
}| Status | Code | Meaning |
|---|---|---|
| 400 | BAD_REQUEST | The request payload or parameters are invalid. |
| 404 | NOT_FOUND | The requested resource does not exist. |
| 429 | RATE_LIMITED | Too many requests for the current minute window. |
| 500 | INTERNAL_ERROR | Unexpected server-side exception. |
| 503 | SERVICE_UNAVAILABLE | One or more upstream dependencies are unavailable. |
/api/address/{address}/stream
Address stream
Receive address enrichment stages as SSE events while the profile is assembled.
Stream address analysis progress
Designed for interfaces that want progressive address enrichment updates instead of waiting on a single response.
curl -N "https://ethintel.io/api/address/0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045/stream?chain=ethereum" \
--header "Authorization: Bearer ei_live_demo_A9x32kLmQz" \
--header "Accept: text/event-stream"| Name | Type | Required | Description |
|---|---|---|---|
| address | string | Required | 0x-prefixed address or ENS name where supported. |
| Name | Type | Required | Description |
|---|---|---|---|
| chain | "ethereum" | "base" | "arbitrum" | "optimism" | "polygon" | Optional | Optional chain override or enrichment context. |
| Event | Meaning |
|---|---|
| status | Request accepted and profiling started. |
| profile | Core identity and balance enrichment completed. |
| risk | Risk and labeling analysis completed. |
| activity | Recent activity snapshot completed. |
| complete | Final consolidated profile payload. |
| error | Terminal error event. |
{
"event": "risk",
"data": {
"stage": "risk",
"progress": 76,
"message": "Risk and labeling analysis completed.",
"payload": {
"score": 11,
"level": "low"
}
}
}| Status | Code | Meaning |
|---|---|---|
| 400 | BAD_REQUEST | The request payload or parameters are invalid. |
| 404 | NOT_FOUND | The requested resource does not exist. |
| 429 | RATE_LIMITED | Too many requests for the current minute window. |
| 500 | INTERNAL_ERROR | Unexpected server-side exception. |
| 503 | SERVICE_UNAVAILABLE | One or more upstream dependencies are unavailable. |
/api/scan
Pre-signing simulation
Simulate a transaction before signing and return a verdict, approvals, and risk signals.
Scan an unsigned transaction
Useful for wallet confirmation screens, browser extensions, and automated transaction review pipelines.
curl -X POST "https://ethintel.io/api/scan" \
--header "Authorization: Bearer ei_live_demo_A9x32kLmQz" \
--header "Accept: application/json" \
--header "Content-Type: application/json" \
--data '{
"transaction": {
"from": "0x742d35Cc6634C0532925a3b844Bc454e4438f44e",
"to": "0x4F5fB3cA6dE8E5F39bC4174d5Dd5C0F5F135F4A1",
"data": "0x095ea7b30000000000000000000000004f5fb3ca6de8e5f39bc4174d5dd5c0f5f135f4a1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
"value": "0",
"chainId": 1
},
"typedData": null
}'{
"transaction": {
"from": "0x742d35Cc6634C0532925a3b844Bc454e4438f44e",
"to": "0x4F5fB3cA6dE8E5F39bC4174d5Dd5C0F5F135F4A1",
"data": "0x095ea7b30000000000000000000000004f5fb3ca6de8e5f39bc4174d5dd5c0f5f135f4a1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
"value": "0",
"chainId": 1
},
"typedData": null
}{
"verdict": "warn",
"summary": "This approval grants unlimited USDC spend to an unlabeled contract.",
"simulation": {
"success": true,
"nativeDiffEth": "0",
"gasEstimate": "68421",
"assetChanges": [],
"approvals": [
{
"token": "USDC",
"spender": "0x4F5fB3cA6dE8E5F39bC4174d5Dd5C0F5F135F4A1",
"allowance": "unlimited"
}
]
},
"risk": {
"score": 72,
"level": "high",
"signals": [
{
"severity": "critical",
"code": "UNLIMITED_APPROVAL_UNKNOWN_SPENDER",
"message": "The spender receives an unlimited approval and is not confidently labeled."
}
]
},
"recommendations": [
"Verify the spender contract independently before signing.",
"Prefer a bounded allowance instead of an unlimited approval."
]
}| Status | Code | Meaning |
|---|---|---|
| 400 | BAD_REQUEST | The request payload or parameters are invalid. |
| 429 | RATE_LIMITED | Too many requests for the current minute window. |
| 500 | INTERNAL_ERROR | Unexpected server-side exception. |
| 503 | SERVICE_UNAVAILABLE | One or more upstream dependencies are unavailable. |
/api/search?q={query}
Search
Normalize a user input into a canonical transaction, address, ENS, or validator target.
Search by common onchain identifiers
Accepts transaction hashes, addresses, ENS names, and validator indexes and returns a canonical API target.
curl "https://ethintel.io/api/search?q=vitalik.eth" \
--header "Authorization: Bearer ei_live_demo_A9x32kLmQz" \
--header "Accept: application/json"| Name | Type | Required | Description |
|---|---|---|---|
| q | string | Required | Search text to normalize and route. |
{
"query": "vitalik.eth",
"normalized": "vitalik.eth",
"type": "ens",
"chain": "ethereum",
"result": {
"id": "0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045",
"label": "Vitalik Buterin",
"href": "/api/address/vitalik.eth"
},
"suggestions": [
{
"type": "address",
"label": "Resolve as a wallet profile"
}
]
}| Status | Code | Meaning |
|---|---|---|
| 400 | BAD_REQUEST | The request payload or parameters are invalid. |
| 404 | NOT_FOUND | The requested resource does not exist. |
| 429 | RATE_LIMITED | Too many requests for the current minute window. |
| 500 | INTERNAL_ERROR | Unexpected server-side exception. |
| 503 | SERVICE_UNAVAILABLE | One or more upstream dependencies are unavailable. |
/api/risk/{address}
Risk assessment
Return a compact risk score and machine-readable signals for an address.
Assess address safety
A lightweight endpoint for badges, banners, approval warnings, and policy engines.
curl "https://ethintel.io/api/risk/0x4F5fB3cA6dE8E5F39bC4174d5Dd5C0F5F135F4A1" \
--header "Authorization: Bearer ei_live_demo_A9x32kLmQz" \
--header "Accept: application/json"| Name | Type | Required | Description |
|---|---|---|---|
| address | string | Required | 0x-prefixed address or ENS name where supported. |
{
"address": "0x4F5fB3cA6dE8E5F39bC4174d5Dd5C0F5F135F4A1",
"score": 87,
"level": "high",
"category": "unknown",
"lastUpdated": "2026-03-14T19:32:04Z",
"signals": [
{
"severity": "critical",
"code": "UNLABELED_APPROVAL_TARGET",
"message": "This address commonly appears as an unlabeled approval spender."
},
{
"severity": "warning",
"code": "RECENT_COMPLAINT_CLUSTER",
"message": "User complaints referencing this address increased in the last 7 days."
}
]
}| Status | Code | Meaning |
|---|---|---|
| 400 | BAD_REQUEST | The request payload or parameters are invalid. |
| 404 | NOT_FOUND | The requested resource does not exist. |
| 429 | RATE_LIMITED | Too many requests for the current minute window. |
| 500 | INTERNAL_ERROR | Unexpected server-side exception. |
| 503 | SERVICE_UNAVAILABLE | One or more upstream dependencies are unavailable. |
/api/validator/{id}
Validator detail
Inspect a validator’s status, balances, uptime, and withdrawal address.
Fetch validator detail
Returns identity and operational metadata for a single beacon validator.
curl "https://ethintel.io/api/validator/204321" \
--header "Authorization: Bearer ei_live_demo_A9x32kLmQz" \
--header "Accept: application/json"| Name | Type | Required | Description |
|---|---|---|---|
| id | string | number | Required | Validator index or canonical validator identifier. |
{
"validatorIndex": 204321,
"pubkey": "0x8cdd9d3cb8f1c7f1d4784d1cfd019ba9226c0b7617daef0dca7c41e9e28f7030",
"status": "active_ongoing",
"activationEpoch": 174322,
"withdrawalAddress": "0x91bB2aBC4459d1F21f5c8A7cA2B22A2aF1B0e5D1",
"effectiveBalanceEth": 32,
"uptime30d": 99.63,
"apr": 3.74,
"mevRelay": "ultrasound",
"slashed": false
}| Status | Code | Meaning |
|---|---|---|
| 400 | BAD_REQUEST | The request payload or parameters are invalid. |
| 404 | NOT_FOUND | The requested resource does not exist. |
| 429 | RATE_LIMITED | Too many requests for the current minute window. |
| 500 | INTERNAL_ERROR | Unexpected server-side exception. |
| 503 | SERVICE_UNAVAILABLE | One or more upstream dependencies are unavailable. |
/api/validator/{id}/rewards
Epoch rewards
Return recent epoch-by-epoch rewards for a validator.
Fetch validator rewards
Useful for performance dashboards, accounting exports, and operator summaries.
curl "https://ethintel.io/api/validator/204321/rewards?fromEpoch=248300&toEpoch=248302" \
--header "Authorization: Bearer ei_live_demo_A9x32kLmQz" \
--header "Accept: application/json"| Name | Type | Required | Description |
|---|---|---|---|
| id | string | number | Required | Validator index or canonical validator identifier. |
| Name | Type | Required | Description |
|---|---|---|---|
| fromEpoch | number | Optional | Inclusive starting epoch. |
| toEpoch | number | Optional | Inclusive ending epoch. |
| limit | number | Optional | Max rows to return. Default: 10 |
{
"validatorIndex": 204321,
"currency": "ETH",
"rows": [
{
"epoch": 248300,
"proposer": 0,
"attestation": 0.00318,
"sync": 0,
"total": 0.00318
},
{
"epoch": 248301,
"proposer": 0,
"attestation": 0.00321,
"sync": 0,
"total": 0.00321
},
{
"epoch": 248302,
"proposer": 0,
"attestation": 0.00342,
"sync": 0,
"total": 0.00342
}
],
"total30d": 0.9124
}| Status | Code | Meaning |
|---|---|---|
| 400 | BAD_REQUEST | The request payload or parameters are invalid. |
| 404 | NOT_FOUND | The requested resource does not exist. |
| 429 | RATE_LIMITED | Too many requests for the current minute window. |
| 500 | INTERNAL_ERROR | Unexpected server-side exception. |
| 503 | SERVICE_UNAVAILABLE | One or more upstream dependencies are unavailable. |
/api/validator/{id}/score
Validator scoring
Return a composite operator score with human-readable reasons.
Fetch validator score
Designed for ranking views, trust surfaces, and operator comparison tools.
curl "https://ethintel.io/api/validator/204321/score" \
--header "Authorization: Bearer ei_live_demo_A9x32kLmQz" \
--header "Accept: application/json"| Name | Type | Required | Description |
|---|---|---|---|
| id | string | number | Required | Validator index or canonical validator identifier. |
{
"validatorIndex": 204321,
"score": 91,
"grade": "A",
"breakdown": {
"performance": 93,
"reliability": 95,
"decentralization": 78,
"taxReadiness": 98
},
"reasons": [
"Strong attestation performance over the last 30 days.",
"No missed sync committee duties in the recent window."
]
}| Status | Code | Meaning |
|---|---|---|
| 400 | BAD_REQUEST | The request payload or parameters are invalid. |
| 404 | NOT_FOUND | The requested resource does not exist. |
| 429 | RATE_LIMITED | Too many requests for the current minute window. |
| 500 | INTERNAL_ERROR | Unexpected server-side exception. |
| 503 | SERVICE_UNAVAILABLE | One or more upstream dependencies are unavailable. |
/api/validator/{id}/tax
Tax report CSV
Download validator reward activity as CSV for accounting workflows.
Download a tax report
Returns CSV content ready for bookkeeping tools, spreadsheets, or archival workflows.
curl "https://ethintel.io/api/validator/204321/tax?year=2026" \
--header "Authorization: Bearer ei_live_demo_A9x32kLmQz" \
--header "Accept: text/csv"| Name | Type | Required | Description |
|---|---|---|---|
| id | string | number | Required | Validator index or canonical validator identifier. |
| Name | Type | Required | Description |
|---|---|---|---|
| year | number | Required | Tax year to export. |
validator_index,epoch,reward_type,amount_eth,amount_usd
204321,248300,attestation,0.00318,10.74
204321,248301,attestation,0.00321,10.85
204321,248302,attestation,0.00342,11.56| Status | Code | Meaning |
|---|---|---|
| 400 | BAD_REQUEST | The request payload or parameters are invalid. |
| 404 | NOT_FOUND | The requested resource does not exist. |
| 429 | RATE_LIMITED | Too many requests for the current minute window. |
| 500 | INTERNAL_ERROR | Unexpected server-side exception. |
| 503 | SERVICE_UNAVAILABLE | One or more upstream dependencies are unavailable. |
/api/validator/{id}/duties
Validator duties
Inspect proposer, attester, and sync committee duties across an epoch window.
Fetch validator duties
Useful for upcoming schedule views, missed-duty analysis, and operator alerts.
curl "https://ethintel.io/api/validator/204321/duties?fromEpoch=248300&toEpoch=248304" \
--header "Authorization: Bearer ei_live_demo_A9x32kLmQz" \
--header "Accept: application/json"| Name | Type | Required | Description |
|---|---|---|---|
| id | string | number | Required | Validator index or canonical validator identifier. |
| Name | Type | Required | Description |
|---|---|---|---|
| fromEpoch | number | Required | Inclusive start epoch. |
| toEpoch | number | Required | Inclusive end epoch. |
{
"validatorIndex": 204321,
"window": {
"fromEpoch": 248300,
"toEpoch": 248304
},
"duties": [
{
"epoch": 248300,
"slot": 7945632,
"type": "attester",
"status": "completed"
},
{
"epoch": 248302,
"slot": 7945696,
"type": "proposer",
"status": "scheduled"
}
]
}| Status | Code | Meaning |
|---|---|---|
| 400 | BAD_REQUEST | The request payload or parameters are invalid. |
| 404 | NOT_FOUND | The requested resource does not exist. |
| 429 | RATE_LIMITED | Too many requests for the current minute window. |
| 500 | INTERNAL_ERROR | Unexpected server-side exception. |
| 503 | SERVICE_UNAVAILABLE | One or more upstream dependencies are unavailable. |
/api/validator/by-address/{address}
Validator lookup by withdrawal address
Resolve a withdrawal address into one or more matching validators.
Find validators by withdrawal address
Helpful when mapping operator wallets to validators or reconciling rewards exports.
curl "https://ethintel.io/api/validator/by-address/0x91bB2aBC4459d1F21f5c8A7cA2B22A2aF1B0e5D1" \
--header "Authorization: Bearer ei_live_demo_A9x32kLmQz" \
--header "Accept: application/json"| Name | Type | Required | Description |
|---|---|---|---|
| address | string | Required | 0x-prefixed address or ENS name where supported. |
{
"address": "0x91bB2aBC4459d1F21f5c8A7cA2B22A2aF1B0e5D1",
"validators": [
{
"validatorIndex": 204321,
"status": "active_ongoing",
"balanceEth": 32.4821,
"withdrawalCredentialsType": "0x01"
},
{
"validatorIndex": 204322,
"status": "active_ongoing",
"balanceEth": 32.4818,
"withdrawalCredentialsType": "0x01"
}
]
}| Status | Code | Meaning |
|---|---|---|
| 400 | BAD_REQUEST | The request payload or parameters are invalid. |
| 404 | NOT_FOUND | The requested resource does not exist. |
| 429 | RATE_LIMITED | Too many requests for the current minute window. |
| 500 | INTERNAL_ERROR | Unexpected server-side exception. |
| 503 | SERVICE_UNAVAILABLE | One or more upstream dependencies are unavailable. |
/api/network
Network stats
Get a compact network-wide snapshot for validator and staking dashboards.
Fetch network stats
Returns top-line beacon chain metrics for system views and overview pages.
curl "https://ethintel.io/api/network" \
--header "Authorization: Bearer ei_live_demo_A9x32kLmQz" \
--header "Accept: application/json"{
"chain": "ethereum",
"currentSlot": 7945740,
"currentEpoch": 248304,
"finalizedEpoch": 248302,
"activeValidators": 1123048,
"pendingValidators": 11892,
"totalStakedEth": 35980412,
"participationRate": 0.996,
"slashings30d": 4
}| Status | Code | Meaning |
|---|---|---|
| 429 | RATE_LIMITED | Too many requests for the current minute window. |
| 500 | INTERNAL_ERROR | Unexpected server-side exception. |
| 503 | SERVICE_UNAVAILABLE | One or more upstream dependencies are unavailable. |
/api/network/slashings
Slashing events
List recent slashing events with penalties and brief reasons.
Fetch recent slashings
Useful for status pages, operator monitoring, and compliance or review workflows.
curl "https://ethintel.io/api/network/slashings?limit=20" \
--header "Authorization: Bearer ei_live_demo_A9x32kLmQz" \
--header "Accept: application/json"| Name | Type | Required | Description |
|---|---|---|---|
| limit | number | Optional | Maximum rows to return. Default: 20 |
{
"chain": "ethereum",
"items": [
{
"validatorIndex": 182441,
"epoch": 248291,
"reason": "Proposer equivocation",
"penaltyEth": 0.5124,
"whistleblower": null
},
{
"validatorIndex": 190112,
"epoch": 248295,
"reason": "Attester slashable vote",
"penaltyEth": 0.4869,
"whistleblower": null
}
]
}| Status | Code | Meaning |
|---|---|---|
| 429 | RATE_LIMITED | Too many requests for the current minute window. |
| 500 | INTERNAL_ERROR | Unexpected server-side exception. |
| 503 | SERVICE_UNAVAILABLE | One or more upstream dependencies are unavailable. |
/api/health
Service health
Expose subsystem health for load balancers, monitors, and status pages.
Check service health
A lightweight synthetic monitoring endpoint with per-subsystem latency detail.
curl "https://ethintel.io/api/health" \
--header "Accept: application/json"{
"status": "ok",
"version": "2026.03.14",
"checks": {
"rpc": {
"status": "ok",
"latencyMs": 121
},
"redis": {
"status": "ok",
"latencyMs": 7
},
"ai": {
"status": "ok",
"latencyMs": 912
},
"beacon": {
"status": "ok",
"latencyMs": 42
}
},
"timestamp": "2026-03-14T20:06:11Z"
}| Status | Code | Meaning |
|---|---|---|
| 429 | RATE_LIMITED | Too many requests for the current minute window. |
| 500 | INTERNAL_ERROR | Unexpected server-side exception. |
| 503 | SERVICE_UNAVAILABLE | One or more upstream dependencies are unavailable. |
/api/labels/stats
Label database stats
Inspect label freshness, counts, and source composition.
Fetch label database stats
Useful when debugging coverage, synchronizing datasets, or exposing data quality metrics.
curl "https://ethintel.io/api/labels/stats" \
--header "Authorization: Bearer ei_live_demo_A9x32kLmQz" \
--header "Accept: application/json"{
"totalLabels": 418762,
"totalAddresses": 305441,
"totalProtocols": 1874,
"sources": [
{
"name": "ethintel-core",
"labels": 221843,
"lastUpdated": "2026-03-14T03:00:00Z"
},
{
"name": "community-curated",
"labels": 104332,
"lastUpdated": "2026-03-13T23:41:00Z"
},
{
"name": "protocol-manifests",
"labels": 92587,
"lastUpdated": "2026-03-14T01:12:00Z"
}
],
"lastUpdated": "2026-03-14T03:00:00Z"
}| Status | Code | Meaning |
|---|---|---|
| 429 | RATE_LIMITED | Too many requests for the current minute window. |
| 500 | INTERNAL_ERROR | Unexpected server-side exception. |
| 503 | SERVICE_UNAVAILABLE | One or more upstream dependencies are unavailable. |
/api/openapi.json
OpenAPI spec
Download the machine-readable API contract for codegen and validation.
Fetch the OpenAPI spec
The source of truth for SDK generation, contract testing, and API client tooling.
curl "https://ethintel.io/api/openapi.json" \
--header "Accept: application/json"{
"openapi": "3.1.0",
"info": {
"title": "EthIntel REST API",
"version": "2026-03-14",
"description": "Hardcoded documentation sample for the EthIntel REST API."
},
"servers": [
{
"url": "https://ethintel.io",
"description": "Production"
}
],
"paths": {
"/api/explain/{txHash}": {
"get": {
"summary": "Explain a transaction"
}
}
},
"components": {
"schemas": {
"TransactionExplanation": {
"type": "object"
}
}
}
}| Status | Code | Meaning |
|---|---|---|
| 429 | RATE_LIMITED | Too many requests for the current minute window. |
| 500 | INTERNAL_ERROR | Unexpected server-side exception. |
| 503 | SERVICE_UNAVAILABLE | One or more upstream dependencies are unavailable. |
/api/user/api-key
API key CRUD
Inspect, create, rotate, or revoke the authenticated user’s API key.
Fetch current API key metadata
Returns the currently active key metadata without exposing the secret value.
curl "https://ethintel.io/api/user/api-key" \
--header "Authorization: Bearer ei_live_demo_A9x32kLmQz" \
--header "Accept: application/json"{
"keyPrefix": "ei_live_demo",
"plan": "API",
"scopes": [
"explain:read",
"address:read",
"validator:read"
],
"createdAt": "2026-02-28T09:15:00Z",
"lastUsedAt": "2026-03-14T19:54:04Z",
"requestsToday": 842
}| Status | Code | Meaning |
|---|---|---|
| 401 | UNAUTHORIZED | A valid bearer token is required for this endpoint. |
| 429 | RATE_LIMITED | Too many requests for the current minute window. |
| 500 | INTERNAL_ERROR | Unexpected server-side exception. |
/api/bot/webhook
Telegram bot webhook
Receive Telegram bot updates and route them through EthIntel bot handlers.
Handle Telegram webhook updates
The webhook endpoint accepts Telegram update payloads and returns a compact processing status.
curl -X POST "https://ethintel.io/api/bot/webhook" \
--header "Accept: application/json" \
--header "Content-Type: application/json" \
--data '{
"update_id": 992114321,
"message": {
"message_id": 1042,
"text": "/explain 0x8f3d0f63b3a948321f1b2291e5a8dd3c3df5cc9fd0c8ff9d132d91b2c1e9bc45",
"chat": {
"id": 1049923,
"type": "private"
},
"from": {
"id": 99872,
"username": "ethintel_user"
}
}
}'{
"update_id": 992114321,
"message": {
"message_id": 1042,
"text": "/explain 0x8f3d0f63b3a948321f1b2291e5a8dd3c3df5cc9fd0c8ff9d132d91b2c1e9bc45",
"chat": {
"id": 1049923,
"type": "private"
},
"from": {
"id": 99872,
"username": "ethintel_user"
}
}
}{
"ok": true,
"accepted": true,
"action": "queued_explain_request",
"requestId": "req_01JTV2T0YF5E7YZZ"
}| Status | Code | Meaning |
|---|---|---|
| 400 | BAD_REQUEST | The request payload or parameters are invalid. |
| 429 | RATE_LIMITED | Too many requests for the current minute window. |
| 500 | INTERNAL_ERROR | Unexpected server-side exception. |
| 503 | SERVICE_UNAVAILABLE | One or more upstream dependencies are unavailable. |