EyesOnAssets Public API
Paid B2B access via API key to the same data users see on the site: the live screener (price/change/volume across crypto, forex and stocks) and the Analytics module (technical + fundamental score from −100 to +100 per asset). No site account required — just a key.
/api/v1/public
Auth: X-API-Key header
Authentication
Every request must include an X-API-Key header with your
key. Keys are issued manually after agreeing on a tier/contract — there is no
self-service signup for this API (see "Getting access").
Quickstart
# Check your tier, limits and remaining monthly quota curl -H "X-API-Key: eoa_live_YOUR_KEY" \ https://your-domain/api/v1/public/usage
# Analytics score for every asset on the crypto market curl -H "X-API-Key: eoa_live_YOUR_KEY" \ https://your-domain/api/v1/public/analytics/crypto/list
Pricing
| Tier | Price | Markets | Rate limit | Quota/mo |
|---|---|---|---|---|
| Starter | $250/mo | 1 of your choice (crypto / forex / stocks) | 30 req/min | 20,000 |
| Business | $500/mo | All three (screener + analytics bundle) | 120 req/min | 150,000 |
| Enterprise | custom | All three + priority support | 600 req/min | unlimited |
You can check your current tier, market restrictions and contract term at any time via GET /usage.
Limits & quota
There are two independent limits:
| Type | What it counts | What happens when exceeded |
|---|---|---|
| Rate limit | Requests per minute, depends on tier | 429 Too Many Requests, retry later |
| Monthly quota | Total requests for the calendar month | 429 Monthly quota exceeded — upgrade your tier or wait for next month |
Endpoint reference
GET/api/v1/public/usage
Your current tier, allowed markets, limits and how many requests you've used this month. Doesn't cost more than a regular request against your monthly quota.
{
"org_name": "Acme Trading LLC",
"tier": "business",
"status": "active",
"allowed_markets": ["crypto", "forex", "stocks"],
"rate_limit": "120/minute",
"monthly_quota": 150000,
"used_this_month": 4213,
"contract_expires_at": null
}
GET/api/v1/public/screener/{market_type}/{exchange}/{instrument}
Live screener data: price, % change, volume for every instrument in the market/exchange/type combination.
| Parameter | Type | Description |
|---|---|---|
| market_type | path | crypto / forex / stocks |
| exchange | path | bybit, binance, okx, moex, nasdaq, etc. — depends on the market and deployment region |
| instrument | path | spot, perpetual, futures, stock, major, etc. |
| volume_min / volume_max | query, optional | Volume filter |
| change_min / change_max | query, optional | % change filter |
# Example curl -H "X-API-Key: ..." \ ".../api/v1/public/screener/crypto/bybit/spot?volume_min=1000000"
GET/api/v1/public/ohlcv/{market_type}/{exchange}/{symbol}/{timeframe}
OHLCV candles for a specific symbol.
| Parameter | Type | Description |
|---|---|---|
| symbol | path | E.g. BTC_USDT or BTC/USDT |
| timeframe | path | 1m, 5m, 15m, 1h, 4h, 1d, etc. |
| limit | query, optional | Number of candles, default 200, max 1000 |
GET/api/v1/public/analytics/{market}/list
Analytics score for every scored asset on a market: verdict, overall score, price, change, price mini-chart.
GET/api/v1/public/analytics/{market}/{symbol}
Full report for a single asset: every factor (technical + fundamental) with weights and explanations, technical/fundamental/overall score, and a text summary.
{
"market": "crypto", "symbol": "BTC",
"overall_score": 16, "verdict": "neutral",
"factors": [
{ "name": "rsi", "value": "54.1", "sentiment": "neutral", "explanation": "RSI 54 — within normal range" }
// ...
]
}
GET/api/v1/public/analytics/top-setups
Top ideas by strength of factor imbalance right now, rather than a single-asset breakdown — sorted by |overall_score| for one market or across every market your tier allows.
| Parameter | Type | Description |
|---|---|---|
| market | query, optional | crypto/forex/stocks — omitted = all markets on your tier |
| verdict | query, optional | growth/decline — omitted = both |
| limit | query, optional | Default 10, max 100 |
GET/api/v1/public/analytics/{market}/stats
Historical verdict performance on this market: win rate and average return by
horizon (1/5/21/30 days), with a 95% Wilson confidence interval.
win_rate: null means there isn't enough data yet to
show a number — not that it's 0.
[
{ "verdict": "growth", "horizon_days": 21, "sample_size": 142,
"is_significant": true, "win_rate": 0.61,
"win_rate_ci_low": 0.54, "win_rate_ci_high": 0.68,
"avg_return_pct": 3.2, "source": "backfill" }
]
GET/api/v1/public/analytics/{market}/{symbol}/history
Historical score/verdict snapshots for a single asset — for running your own backtest on your side.
| Parameter | Type | Description |
|---|---|---|
| limit | query, optional | Default 90, max 1000 (newest first) |
Webhooks — push instead of polling
Instead of polling /analytics/{market}/{symbol} on a
schedule, you can subscribe to a notification whenever the verdict changes
(growth ↔ decline ↔ neutral).
POST /api/v1/public/webhooks { "callback_url": "https://your-server/hook", "market": "crypto" } // the response contains "secret" — shown once, save it GET /api/v1/public/webhooks // list your subscriptions DELETE /api/v1/public/webhooks/{id} // cancel a subscription
Each delivery is a POST to your
callback_url with an
X-Webhook-Signature header (HMAC-SHA256 of the
request body using your secret — verify it to tell us apart from a forgery).
callback_url must be https://.
After 10 consecutive failed deliveries the subscription is automatically disabled.
{
"event": "verdict_changed", "market": "crypto", "symbol": "BTC",
"old_verdict": "neutral", "new_verdict": "growth",
"overall_score": 24, "timestamp": "2026-07-26T04:00:00+00:00"
}
Error codes
| Code | Reason |
|---|---|
| 400 | Invalid market_type (only crypto/forex/stocks allowed) |
| 401 | Missing, invalid or revoked key |
| 403 | Client suspended/contract expired, or the market isn't included in your tier |
| 404 | No analytics computed yet for this symbol |
| 429 | Rate limit or monthly quota exceeded |
| 502 | Temporary error from a data provider (exchange/quote feed) — retry later |
| 503 | Data service not initialized yet (right after a server restart) |
Markets & exchanges
The API covers crypto, forex and stocks (no bonds yet — not included in the bundle).
The exact set of exchanges available for a given exchange/instrument
combination depends on the server's deployment region; if you're unsure which
exchanges are available, ask us when we issue your key, or start with
crypto/bybit/spot, which is available in every region.
Getting access
Access is issued manually after agreeing on a tier — write to us describing your use case and expected request volume, and we'll help you pick a tier and send you a key. There is deliberately no self-service signup or instant key issuance on the site — it protects both you (personal onboarding) and us (control over data usage).