The crypto-ai.dev API

A free, no-signup HTTP + WebSocket feed of real-time cross-venue VWAP prices. Same data the site runs on. No API key needed for the free tier. CORS-open. Use it.

REST + WebSocket20 assets · 4 venues15s delay (free)Real-time (keyed)CORS-open

Status

Checking status…

Base URL

BASE
https://crypto-ai-prices.fly.dev

Every REST endpoint below is relative to this host. WebSocket connects at wss://crypto-ai-prices.fly.dev/ws.

GET /api/prices

Current price, VWAP, 24h change, 24h volume (USD notional), and contributing venues for every tracked asset.

CURL
curl https://crypto-ai-prices.fly.dev/api/prices
RESPONSE
{
  "live": false,
  "delay": 15,
  "timestamp": 1776297071902,
  "prices": {
    "BTC": {
      "price": 74745.19,
      "vwap": 74721.33,
      "change24h": 0.71,
      "volume24h": 52183902311.44,
      "sources": ["binance", "coinbase", "kraken", "okx"],
      "name": "Bitcoin"
    }
  }
}

GET /api/prices/:symbol

Same data, one asset. 404 if the symbol isn't tracked.

CURL
curl https://crypto-ai-prices.fly.dev/api/prices/ETH

GET /api/history/:symbol

24-hour price history for an asset, sampled on a fixed cadence. Useful for sparklines and backtests.

CURL
curl https://crypto-ai-prices.fly.dev/api/history/BTC
RESPONSE
{
  "symbol": "BTC",
  "points": [
    { "t": 1776211219958, "price": 74150.07 },
    { "t": 1776214820013, "price": 74573.51 },
    { "t": 1776218420068, "price": 74637.68 }
  ]
}

GET /api/wire

Coin-tagged news from CoinDesk, CoinTelegraph, Decrypt, and The Block. Deduped, sorted, last 72 hours. Hosted on crypto-ai.dev (not Fly). Filter with ?coin=BTC or ?q=halving.

CURL
curl 'https://crypto-ai.dev/api/wire?coin=BTC&limit=5'
RESPONSE
{
  "items": [
    {
      "id": "kvj84z",
      "title": "…",
      "link": "https://www.coindesk.com/…",
      "source": "CoinDesk",
      "publishedAt": "2026-04-15T23:08:06.000Z",
      "summary": "…",
      "coins": ["BTC", "SOL"]
    }
  ],
  "total": 109
}

WebSocket /ws

Real-time stream. On connect you receive a snapshot with every tracked symbol, then update messages whenever prices change. Send {"type":"subscribe","symbols":["BTC","ETH"]} to narrow the stream.

JS
const ws = new WebSocket("wss://crypto-ai-prices.fly.dev/ws");

ws.onmessage = (e) => {
  const msg = JSON.parse(e.data);
  if (msg.type === "snapshot") console.log("initial prices", msg.prices);
  if (msg.type === "update")   console.log("tick", msg.prices);
};

// Optional: limit to specific symbols
ws.onopen = () => ws.send(JSON.stringify({ type: "subscribe", symbols: ["BTC", "ETH"] }));

Free tier vs real-time

Unauthenticated requests see a 15-second delayed feed. Real-time access is gated by an API key passed in the X-API-Key header (or ?apiKey= on WebSocket). The paid tier is in private beta — join the waitlist if you need it.

CURL
curl -H "X-API-Key: YOUR_KEY" https://crypto-ai-prices.fly.dev/api/prices

Limits & fair use

OpenAPI spec

Machine-readable spec for code-gen, Postman, or agent tool-use. Served from /openapi.json.

Ready-made snippets

Python

PY
import requests
r = requests.get("https://crypto-ai-prices.fly.dev/api/prices")
btc = r.json()["prices"]["BTC"]
print(btc["price"], btc["vwap"])

Node.js (fetch)

JS
const r = await fetch("https://crypto-ai-prices.fly.dev/api/prices/BTC");
const { price, vwap, sources } = await r.json();
console.log(price, vwap, sources);

Bash / jq

SH
curl -s https://crypto-ai-prices.fly.dev/api/prices | jq '.prices | to_entries | sort_by(-.value.volume24h) | .[:5]'