Email Support
For account issues, billing questions, and technical problems.
support@chainoptics.ioChainOptics is the intelligence layer for digital rail assets.
Jump to any section. New to ChainOptics? Start with Dashboard Orientation.
The dashboard is your live command center. Here's exactly what you're looking at when you first log in.
The scrolling bar at the top of every page shows all 7 assets with their current price and 24-hour change. Green = up. Red = down. It updates automatically every 30 seconds — you don't need to refresh.
The main grid shows one card per asset. Each card displays:
Click any asset card to open its detail page. You'll see:
The 🌙 / ☀️ button in the top-right of every page toggles your theme. Your preference is saved to your browser and persists across sessions.
co_. Keep it private — it controls your account's API access and alert quota.Your tier determines what you can access:
Pass your key in one of two ways:
# Option 1 — Header (recommended)
curl https://api.chainoptics.io/api/prices \
-H "X-Api-Key: co_your_key_here"
# Option 2 — Bearer token
curl https://api.chainoptics.io/api/prices \
-H "Authorization: Bearer co_your_key_here"
The portfolio tracker lets you monitor your personal holdings against live ChainOptics price data — without ever sending your position data to our servers.
Click Portfolio in the top navigation bar.
Select a symbol from the dropdown (XRP, XLM, HBAR, QNT, FLR, XDC, ALGO) and enter your quantity held.
Your total portfolio value calculates instantly using live prices. Each row shows current price, your quantity, and current value in USD.
Portfolio holdings are stored in your browser's localStorage only. They never leave your device and are never sent to ChainOptics servers. This means:
Price alerts notify you by email when any asset crosses your specified threshold. Available on Pro and API tiers.
Click Alerts in the top navigation bar.
Select an asset, set a target price, and choose direction: Above (notify when price rises above your target) or Below (notify when price drops below your target).
Click Save. Your alert is active immediately. ChainOptics checks prices every 30 seconds and delivers email notifications within 1–2 minutes of a trigger.
All active alerts are listed on the Alerts page. Click the delete icon next to any alert to remove it. Alerts auto-deactivate after triggering once — recreate them if you want ongoing monitoring.
Get live data into your application in under 5 minutes.
Sign up free at chainoptics.io/login → your API key is displayed immediately after account creation. It starts with co_.
curl https://api.chainoptics.io/api/prices \
-H "X-Api-Key: co_your_key_here"
{
"success": true,
"timestamp": "2026-03-02T18:00:00.000Z",
"data": {
"assets": [
{
"symbol": "XRP",
"name": "Ripple",
"price": 1.36899,
"change24h": -1.52,
"volume24h": 44949198.96,
"marketCap": 78234000000,
"chainHealth": "Healthy"
}
// ... 6 more assets
]
}
}
const res = await fetch('https://api.chainoptics.io/api/prices', {
headers: { 'X-Api-Key': 'co_your_key_here' }
});
const { data } = await res.json();
const xrp = data.assets.find(a => a.symbol === 'XRP');
console.log(`XRP: $${xrp.price} (${xrp.change24h}% 24h)`);
import requests
headers = {'X-Api-Key': 'co_your_key_here'}
r = requests.get('https://api.chainoptics.io/api/prices', headers=headers)
assets = r.json()['data']['assets']
for a in assets:
print(f"{a['symbol']}: ${a['price']:.5f} ({a['change24h']:+.2f}%)")
Base URL: https://api.chainoptics.io — All requests require X-Api-Key header or Authorization: Bearer token.
| Method | Endpoint | Tier | Description |
|---|---|---|---|
| GET | /api/prices | All | Returns live prices for all 7 digital rail assets with 24h change, volume, and chain health status. |
| GET | /api/price/:symbol | All | Single asset price. Replace :symbol with XRP, XLM, HBAR, QNT, FLR, XDC, or ALGO. |
| GET | /api/history/:symbol?days=7 | All (Free: 7d, Pro/API: 365d) | OHLC price history. Default 7 days. Pass ?days=30 or ?days=365 for longer ranges. |
| Method | Endpoint | Tier | Description |
|---|---|---|---|
| GET | /api/chain/:symbol | Pro / API | Chain health metrics for one asset: TPS, finality time, validator count, ledger status, uptime. |
| Method | Endpoint | Tier | Description |
|---|---|---|---|
| POST | /api/portfolio/value | All | Calculate portfolio value. Body: {"holdings":[{"symbol":"XRP","quantity":1000}]}. Returns current USD value per asset and total. |
| Method | Endpoint | Tier | Description |
|---|---|---|---|
| GET | /api/alerts | Pro / API | List all active price alerts for your account. |
| POST | /api/alerts | Pro / API | Create a price alert. Body: {"symbol":"XRP","threshold":2.00,"direction":"above"} |
| DELETE | /api/alerts/:id | Pro / API | Delete an alert by ID. Returns 204 on success. |
| Method | Endpoint | Tier | Description |
|---|---|---|---|
| GET | /api/auth/me | All | Returns your account info: email, tier, API key, alert count, request count. |
| POST | /api/auth/register | — | Create a new account. Body: {"email":"you@example.com","password":"..."}. Returns your API key. |
| POST | /api/auth/login | — | Authenticate with email + password. Returns session token and API key. |
| POST | /api/auth/subscribe | — | Initiate a plan upgrade. Returns a Stripe Checkout URL. Redirect the user to complete payment. |
// 401 — Missing or invalid API key
{ "success": false, "error": "Unauthorized" }
// 403 — Feature requires higher tier
{ "success": false, "error": "Pro plan required for chain health data" }
// 429 — Rate limit exceeded
{ "success": false, "error": "Rate limit exceeded", "retryAfter": 12 }
// 400 — Bad request
{ "success": false, "error": "symbol is required" }
Rate limits apply per API key, per minute. Exceeding the limit returns a 429 response with a retryAfter value in seconds.
| Tier | Req/min | History | Alerts | Webhooks |
|---|---|---|---|---|
| Free | 60 | 7 days | 0 | No |
| Pro | 300 | 365 days | 5 | No |
| API | 1,000 | 365 days | Unlimited | Yes |
// When you receive a 429, wait before retrying
const res = await fetch('https://api.chainoptics.io/api/prices', {
headers: { 'X-Api-Key': 'co_your_key_here' }
});
if (res.status === 429) {
const { retryAfter } = await res.json();
await new Promise(r => setTimeout(r, retryAfter * 1000));
// retry your request
}
Webhooks push alert notifications directly to your endpoint the moment a price threshold is crossed. No polling required.
ChainOptics sends a POST request to your endpoint with a JSON body:
{
"event": "alert.triggered",
"symbol": "XRP",
"price": 2.01,
"direction": "above",
"threshold": 2.00,
"triggeredAt": "2026-03-02T18:00:00.000Z",
"alertId": "alrt_abc123"
}
Every webhook request includes your API key in the X-ChainOptics-Key header. Validate this on your server to confirm the request is genuine:
// Node.js / Express example
app.post('/webhook', (req, res) => {
const key = req.headers['x-chainoptics-key'];
if (key !== process.env.CHAINOPTICS_API_KEY) {
return res.status(401).send('Unauthorized');
}
const { symbol, price, direction } = req.body;
console.log(`Alert: ${symbol} is ${direction} $${price}`);
res.sendStatus(200);
});
If your endpoint returns anything other than a 2xx status, ChainOptics retries the delivery:
After 3 failed attempts, the webhook event is dropped. Your endpoint must respond within 5 seconds to avoid timeout.
The correlation indicator on each asset detail page answers a specific question: is this asset moving because of macro pressure, or because of something happening in its own ecosystem? Understanding the answer changes how you interpret every price move.
The Pearson correlation coefficient (r) runs from -1.0 to +1.0:
In practice, you rarely see the extremes. What matters is direction and magnitude over time.
| Band | Pearson r | Interpretation |
|---|---|---|
| Tight Coupling | ≥ 0.85 | Moves in near lockstep with the reference asset. |
| Moderate | 0.60-0.84 | Still coupled, but not purely macro-driven. |
| Diverging | 0.30-0.59 | Asset-specific behavior is becoming more visible. |
| Decoupled | < 0.30 | Price action is mostly independent of the reference. |
ChainOptics uses a deliberate two-layer reference hierarchy:
Question it answers: Is XRP moving on general crypto sentiment, or on its own institutional thesis?
BTC is the macro benchmark for all crypto. When XRP is tightly correlated with BTC, the price action is being driven by the same forces moving everything — risk-on/risk-off, Fed policy, carry trade dynamics. When XRP starts diverging from BTC, something specific to Ripple's ecosystem is at work: regulatory progress, ODL volume spikes, RLUSD adoption, institutional accumulation, or new partnership announcements.
Question it answers: Is this asset gaining independent strength within the digital rail narrative, or just riding XRP's momentum?
XRP is the dominant digital rail asset. When a smaller rail asset holds strong correlation with XRP, it means that asset is participating in the same institutional adoption story — not just general crypto sentiment. It suggests institutional and analyst attention is broadening across the category.
The real signal comes from reading both layers at the same time:
| BTC/XRP | XRP/Rail Assets | What it means |
|---|---|---|
| Tight (red) | Tight (red) | Everything tracking macro. No edge in digital rail analysis — risk-on/off dominating. |
| Decoupling (green) | Tight (red) | XRP breaking from BTC, rails following XRP. The digital rail category is moving as a unit on an ecosystem catalyst. |
| Decoupling (green) | Diverging/Decoupled | Strongest signal. XRP is moving on its own, AND individual rail assets are earning their own moves. Category is maturing — multiple independent catalysts in play. |
| Tight (red) | Decoupled (green) | A specific rail asset is moving independently of both BTC and XRP. Asset-specific event — dig into that asset's news. |
The 7-day coefficient is reactive — it captures recent momentum shifts and short-term divergence events. Use it to gauge current market behavior.
The 30-day coefficient (Pro/API) is structural — it smooths out noise and reveals whether a correlation shift is a genuine trend or a short-term anomaly. When the 7-day and 30-day diverge from each other, pay attention: the 7-day may be signaling a change in structural correlation that hasn't yet shown up in the 30-day.
For account issues, billing questions, and technical problems.
support@chainoptics.ioCheck uptime and incident reports before opening a ticket.
status.stackstatsapps.comWe respond to all support requests within one business day.
retryAfter period or upgrade your plan.support@chainoptics.io to your contacts.