Eagle Eye Report API

Integrate crypto address screening into your compliance workflow

Use the versioned REST API to screen addresses against covered government sanctions sources and public stablecoin blacklist, freeze, and control facts. Machine-stable statuses, source fields, freshness metadata, and fail-closed coverage states let your application route evidence into the review process your team already owns.

  • Single and batch screening
  • Machine-stable status values
  • Fail-closed coverage states
  • OpenAPI specification

Use the API at an existing compliance decision point

Screen before onboarding, crediting, release, treasury, or collateral activity according to your procedures. The response supplies evidence for review; it does not replace customer due diligence, source-of-funds analysis, case management, or the team’s decision.

Screen

Submit one address or a plan-appropriate batch, with a chain hint where the native format needs one.

Interpret

Read the status together with the supporting boolean fields, providers, freshness, and completeness values.

Route

Send the evidence into the escalation or enhanced-due-diligence path defined by your institution.

Getting Started

The Eagle Virtual API provides programmatic access to source-backed address screening. Screen addresses against covered government sanctions sources, stablecoin blacklist, freeze, and control facts, whitelist status, historical status where supported, freshness metadata, and coverage state across certified networks.

Eagle Virtual is the address-screening and evidence layer. The API does not provide transaction tracing, multi-hop path analysis, clustering, entity graphs, KYC onboarding, or case management — those stay with your existing tools.

Base URL: https://eaglevirtual.com/v1

All endpoints except the spec itself require an API key. The machine-readable OpenAPI spec is available for code generation. CSV export is available from the screening page on paid plans.

Onboard in three steps

  1. Sign in and pick a plan on pricing (self-serve checkout).
  2. Create an API key on the page. The full key (ev_…) is shown once at creation — store it securely; only a hash is kept server-side.
  3. Make your first request:
cURL
curl "https://eaglevirtual.com/v1/addresses/0xdAC17F958D2ee523a2206206994597C13D831ec7/risk" \
  -H "Authorization: Bearer YOUR_API_KEY"

Authentication

Include your API key in the Authorization header with every request:

Header
Authorization: Bearer YOUR_API_KEY

Keys are created on the page by account admins. Keys start with ev_, are shown in full exactly once, and can be revoked at any time from the same page. The number of active keys per account depends on your plan (see Plans & Rate Limits).

Rate limit headers (X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset) are included on every authenticated response — see Plans & Rate Limits.

Response Format

Responses are plain JSON objects — no envelope. Success responses return the endpoint's documented fields directly. Errors return an error code (machine-stable) and usually a human-readable message:

Error
{
  "error": "invalid_address",
  "message": "Invalid address."
}

Every screening response includes a machine-stable status, the boolean evidence fields behind it, the flagging providers, and fresh_as_of metadata. Field names such as sanction_direct are part of the existing API contract; treat them as machine names, not outcome claims. Stale or incomplete coverage is reported as UNKNOWN_STALE / UNKNOWN_INCOMPLETE — never silently converted to NO_KNOWN_HIT. Address fields intended for users are returned in the detector's chain-canonical display form (EIP-55 for EVM); machine-normalized keys, when present, are explicitly named address_normalized.

Screen One Address

GET /v1/addresses/{address}/risk All plans

Returns the screening status for one address together with covered government-sanctions records, stablecoin blacklist or freeze facts, whitelist status, flagging sources, freshness metadata, and coverage state. One EVM check covers every supported EVM network. A successful check counts the address toward monthly unique-address usage; failed validations do not.

Parameters

ParameterTypeInDescription
addressrequired string path Blockchain address (EVM 0x..., BTC bc1..., BCH bitcoincash:..., LTC ltc1..., DOGE/DASH/ZEC transparent, or TRON T...) or an ENS name for EVM
chainoptional string query Chain slug hint (e.g. bitcoin, tron) for native formats that are ambiguous between networks

Example Request

cURL
curl "https://eaglevirtual.com/v1/addresses/0xdAC17F958D2ee523a2206206994597C13D831ec7/risk" \
  -H "Authorization: Bearer YOUR_API_KEY"
Python
import requests

r = requests.get(
    "https://eaglevirtual.com/v1/addresses/0xdAC17F958D2ee523a2206206994597C13D831ec7/risk",
    headers={"Authorization": "Bearer YOUR_API_KEY"},
    timeout=30,
)
r.raise_for_status()
result = r.json()
if result["status"] in ("SANCTION_DIRECT", "BLACKLIST_DIRECT"):
    print("escalate:", result["providers"])
JavaScript
const r = await fetch(
  "https://eaglevirtual.com/v1/addresses/0xdAC17F958D2ee523a2206206994597C13D831ec7/risk",
  { headers: { Authorization: "Bearer YOUR_API_KEY" } },
);
const result = await r.json();
if (!r.ok) throw new Error(result.error);
console.log(result.status, result.providers);

Example Response

200 OK
{
  "address": "0xdAC17F958D2ee523a2206206994597C13D831ec7",
  "display_address": "0xdAC17F958D2ee523a2206206994597C13D831ec7",
  "canonical_display": "0xdAC17F958D2ee523a2206206994597C13D831ec7",
  "address_normalized": "0xdac17f958d2ee523a2206206994597c13d831ec7",
  "chain": "evm",
  "account_family": "evm",
  "status": "NO_KNOWN_HIT",
  "sanction_direct": false,
  "sanction_historical": false,
  "blacklist_direct": false,
  "blacklist_historical": false,
  "whitelist": false,
  "providers": [],
  "fresh_as_of": "2026-06-09T12:00:00Z",
  "completeness": "complete",
  "checked_chains": [],
  "report_url": "/report/0xdAC17F958D2ee523a2206206994597C13D831ec7"
}

Response Fields

FieldTypeDescription
addressstringCanonical display address that was screened (EIP-55 for EVM; detector-canonical for other chains)
display_addressstringCustomer-facing copy/display value; prefer this field in UI and exports
canonical_displaystringDetector canonical human-facing address for the selected chain
address_normalizedstringMachine-normalized matching key; do not show this as customer display text
chainstringevm for EVM accounts (one check covers all supported EVM networks), otherwise the chain slug
statusstringMachine-stable screening status — see the table below
sanction_directbooleanCurrent address record in a covered government sanctions source
sanction_historicalbooleanPreviously sanctioned, since delisted
blacklist_directbooleanCurrently blacklisted or frozen by the company or organization behind a covered token
blacklist_historicalbooleanPreviously blacklisted by the company or organization behind a token, since released
whitelistbooleanOn a token whitelist (for example, an RWA transfer-eligibility list)
providersstring[]Sources that flagged the address (e.g. OFAC, issuer names); empty when there is no hit
fresh_as_ofstringFreshness timestamp for the data behind this response
completenessstringCoverage completeness for the checked scope
checked_chainsstring[]Chains covered by this check; empty for EVM means all supported EVM networks
report_urlstringPath to the full evidence report on eaglevirtual.com

Status Values

StatusMeaning
SANCTION_DIRECTListed on an official government sanctions list
SANCTION_HISTORICALPreviously sanctioned, since delisted
BLACKLIST_DIRECTCurrently blacklisted/frozen by a token issuer
BLACKLIST_HISTORICALPreviously blacklisted by the company or organization behind a token, since released
WHITELISTOn a token whitelist, with no current sanctions or blacklist/freeze record in the response
NO_KNOWN_HITNo known hit in certified, current coverage
UNKNOWN_STALECoverage exists but is stale — treat as requiring review, not as clean
UNKNOWN_INCOMPLETECoverage is incomplete for this scope — treat as requiring review, not as clean

Screen an Address Batch

POST /v1/addresses/risk/batch Paid plans

Check multiple addresses in a single request. The maximum batch size depends on your plan (Starter 100, Growth and Enterprise 1,000). Each item is screened independently — an invalid address produces an error entry for that item without failing the rest of the batch. Usage counts unique addresses, not requests.

Request Body

FieldTypeDescription
addressesoption A string[] Array of addresses to check
itemsoption B object[] Array of {"address": "...", "chain": "..."} objects for per-item chain hints
chainoptional string Default chain hint applied to all items

Example Request

cURL
curl -X POST "https://eaglevirtual.com/v1/addresses/risk/batch" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "addresses": [
      "0xdAC17F958D2ee523a2206206994597C13D831ec7",
      "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48"
    ]
  }'

Example Response

200 OK
{
  "results": [
    {
      "address": "0xdAC17F958D2ee523a2206206994597C13D831ec7",
      "display_address": "0xdAC17F958D2ee523a2206206994597C13D831ec7",
      "address_normalized": "0xdac17f958d2ee523a2206206994597c13d831ec7",
      "chain": "evm",
      "status": "NO_KNOWN_HIT",
      "sanction_direct": false,
      "blacklist_direct": false,
      "whitelist": false,
      "providers": [],
      "fresh_as_of": "2026-06-09T12:00:00Z",
      "report_url": "/report/0xdAC17F958D2ee523a2206206994597C13D831ec7"
    },
    {
      "address": "not-an-address",
      "chain": "",
      "status": "error",
      "error": "invalid_address",
      "message": "Invalid address."
    }
  ],
  "checked": 1,
  "failed": 1
}

Successful items use the same fields as the single-address endpoint. Items with "status": "error" carry an error code and do not count toward usage. Requests above your plan's batch size return 400 too_many_addresses with max_addresses; plans without batch access receive 403 batch_not_available.

Supported Chains

GET /v1/chains All plans

Returns all blockchain networks currently supported by Eagle Virtual, from the signed public chain registry. Chains-list requests do not count toward monthly unique-address usage.

Example Request

cURL
curl "https://eaglevirtual.com/v1/chains" \
  -H "Authorization: Bearer YOUR_API_KEY"

Example Response

200 OK
{
  "schema_version": 1,
  "generated_at": "2026-06-06T11:54:08Z",
  "chains": [
    {
      "chain_id": "1",
      "slug": "ethereum",
      "display_name": "Ethereum",
      "short_name": "ETH",
      "family": "evm",
      "native_symbol": "ETH",
      "status": "running",
      "is_active": true,
      "native_formats": ["0x EVM account"]
    },
    // ... additional chains (each entry also carries coverage, format,
    // and market-cap context fields)
  ]
}

The live list is the source of truth — see the supported chains page for the current networks. Coverage spans EVM networks (Ethereum, BNB Smart Chain, Polygon, Arbitrum, Optimism, Base, Sonic, HyperEVM, Avalanche, Celo, Gnosis, Mantle, ADI Network, and Robinhood Chain), TRON, Solana, XRP, and address-record sanctions coverage for Bitcoin-family networks.

EVM addresses are shared across all EVM chains — a single screening check covers every supported EVM network at once.

Usage

GET /v1/usage All plans

Returns your account's monthly unique-address usage and the operational limits of your plan, so integrations can monitor consumption without the web app. Usage is also visible on the and pages.

Example Response

200 OK
{
  "plan": "growth",
  "plan_label": "Growth",
  "usage_model": "monthly_unique_addresses",
  "billing_month": "2026-06",
  "monthly_unique_addresses_used": 585,
  "monthly_address_limit": 2000,
  "monthly_addresses_remaining": 1415,
  "service_continues_after_limit": true,
  "resets_at": "2026-07-01T00:00:00Z",
  "api_rate_per_min": 1500,
  "api_batch_max": 1000,
  "max_api_keys": 10
}

Plans & Rate Limits

API access and operational safeguards depend on your subscription plan. Rate limits are enforced per API key per minute. Pricing is based on monthly unique canonical addresses across the shared customer account. Screening checks remain subject to the displayed rate, batch, and plan safeguards. See pricing for current plans.

Starter

Rate limit10/min
Monthly unique addresses200
Batch100 addrs
API keys3

Growth

Rate limit1,500/min
Monthly unique addresses2,000
Batch1,000 addrs
API keys10

Enterprise

Rate limit3,000/min
Monthly unique addressesCustom
Batch1,000 addrs
API keysCustom

Rate Limit Headers

Every authenticated API response includes rate limit headers. Monthly unique-address reporting is separate from these operational rate limits and does not create an automatic cutoff in v1.

Response Headers
X-RateLimit-Limit: 1500      # Requests allowed per minute
X-RateLimit-Remaining: 1495  # Requests remaining in current window
X-RateLimit-Reset: 1742054460 # Unix timestamp when limit resets

When the per-minute limit is exceeded, the API returns 429 rate_limited with a Retry-After header indicating seconds to wait before retrying:

429 Too Many Requests
Retry-After: 21

{
  "error": "rate_limited",
  "message": "Per-minute rate limit exceeded. Retry after the window resets (see Retry-After).",
  "retry_after_seconds": 21
}

Endpoint Access by Plan

EndpointStarterGrowthEnterprise
/v1/addresses/{addr}/riskYesYesYes
/v1/addresses/risk/batchYes (100/batch)Yes (1,000/batch)Yes (1,000/batch)
/v1/chainsYesYesYes
/v1/usageYesYesYes

Usage Model

Billing is measured in monthly unique canonical addresses per customer account across the UTC billing month — an address counts once per month no matter how many times it is checked, from the API, web screening, reports, or PDF exports. The same EVM address checked on multiple EVM networks counts once. Every screening check remains subject to the per-minute rate, batch-size, and plan safeguards above.

  • Only successful checks count. Invalid addresses, rejected batches, and backend errors never consume usage.
  • Service continues normally if you exceed your plan amount. There is no automatic cutoff and no automatic overage charge — if an account is consistently over, our team reaches out about right-sizing the plan.
  • Track consumption with GET /v1/usage or on the ; account admins see team-wide usage.

Error Handling

Errors return an error code (machine-stable) and usually a human-readable message:

Error Response
{
  "error": "api_key_required",
  "message": "API key required. Send \"Authorization: Bearer <your API key>\"."
}

Error Codes

StatusCodeDescription
400invalid_addressAddress format is not valid for any supported chain
400unsupported_chainThe requested chain is not active for public screening
400ambiguous_addressNative format matches multiple networks — pass a chain hint
400address_requires_reviewAmbiguous format — choose the intended network with a chain hint
400chain_requiredThis address format needs an explicit chain hint
400chain_mismatchAddress does not match the requested chain
400ens_only_supported_for_evmENS names resolve for EVM screening only
400empty_addressesBatch request requires at least one address
400too_many_addressesBatch exceeds your plan's maximum (max_addresses is included)
401api_key_requiredNo Authorization: Bearer header was sent
401api_key_invalidAPI key not found, malformed, or revoked
403api_key_inactive_membershipKey is valid but its account membership is inactive
403batch_not_availablePlan has no batch access
404not_foundEndpoint does not exist — see the OpenAPI spec
429rate_limitedPer-minute rate limit exceeded; honor Retry-After
500internal_errorUnexpected server error
502direct_check_failedScreening backend temporarily unavailable — retry; failed checks never count toward usage
503api_key_unavailableKey verification temporarily unavailable — retry shortly
503chains_unavailableChain registry snapshot temporarily unavailable

Troubleshooting

SymptomLikely cause & fix
401 api_key_required on every callThe Authorization header is missing or not in Bearer ev_… form. Check for a trailing space or a proxy stripping the header.
401 api_key_invalid with a key you just createdThe key was copied partially (keys are shown once, start with ev_), or it has been revoked on the page.
403 api_key_inactive_membershipThe key owner was removed from the customer account. An account admin can issue a new key.
429 rate_limited burstsYou are above your plan's per-key per-minute limit. Honor Retry-After, spread requests across the minute, use batch requests, or upgrade the plan.
400 ambiguous_address / chain_requiredNative non-EVM formats (e.g. some legacy Bitcoin-family addresses) can match several networks — pass ?chain=<slug>.
Status is UNKNOWN_STALE / UNKNOWN_INCOMPLETECoverage for that scope is stale or incomplete. This is a deliberate fail-closed signal — treat it as requiring review, not as a clean result.
EVM result lists "chain": "evm" instead of the network you sentExpected: one EVM check covers every supported EVM network at once, and usage counts the address once.

Support

Stuck, or need a higher limit, an enterprise batch size, or scheduled data feeds? Email support@eaglevirtual.com, use the contact form, or reach sales@eaglevirtual.com for plan questions. Security reports: see /security.

Compliance workflow context

The API supplies source-cited screening evidence. Legal obligations, regulatory reporting, market-abuse controls, customer due diligence, and disposition remain with the customer.

EU CASP workflows

Use address evidence as one input to sanctions, AML, and source-of-funds review. It does not replace MiCA authorization, Article 92 market-abuse controls, or Transfer of Funds Regulation messaging.

Review the MiCA screening guide

Brazil PLD/FT workflows

Use the response in the institution’s review and escalation process under the applicable BCB and COAF framework. Eagle Virtual does not decide whether a communication is required or submit it.

Review the Brazil screening guide

Government sanctions controls

Read the named authority, current or historical status, providers, freshness, and coverage fields before routing the result through your sanctions procedure.

Review sanctions coverage

Native-address sanctions-only networks

Bitcoin, Bitcoin Cash, Litecoin, Dogecoin, Dash, Zcash transparent addresses, and TRON have address-record checks against covered government sanctions sources. A no-known-hit response for that scope is not connection, balance, transaction-monitoring, mixer, bridge, token-control, name, or pricing coverage. Stale or incomplete coverage remains fail closed.

Compare the API fields with the report your reviewers see

Open the cached Eagle Eye Report sample, then create an API key when the response contract fits your workflow.