Reference
API reference (v1)
Everything you need to call the MyCryptoSignal data API.
Base URL & version
https://mycryptosignal.mycryptosignal.workers.dev/api
Version v1. Unversioned legacy paths alias to v1 for compatibility. One canonical
host; other hosts 301 to it.
Authentication
Send your key in the X-API-Key header (also accepted as
Authorization: Bearer mcs_…). Every endpoint except /api/health requires a
key.
X-API-Key: mcs_your_key_here
Keys use the mcs_ prefix and are stored only as SHA-256 hashes. Plaintext is shown
exactly once, at issuance. Missing or invalid key → 401.
Rate limits & quotas
Requests are limited per minute and per day, with a monthly quota. When exceeded, the API returns 429 with a hint to retry (or a quota-exceeded message). Every authenticated response carries:
X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
X-Quota-Limit, X-Quota-Remaining, X-Quota-Reset Endpoints
GET /api/health
Liveness and server time. No auth.
{ "status": "ok", "ts": 1760000000 } GET /api/signals
Latest daily signals. Query: action (BUY|HOLD|RISK), min_confidence (0–100).
{
"signals": [
{
"coin_id": "bitcoin", "symbol": "BTC",
"action": "BUY", "confidence": 78.5,
"explanation": "Strong bullish momentum with increasing on-chain activity.",
"signal_date": "2026-10-11", "timestamp": 1760000000
}
],
"count": 60,
"attribution": "Data provided by MyCryptoSignal"
} GET /api/signals/history
History for one coin. Query: coin_id (required), days (default 30, max 365).
{
"coin_id": "bitcoin",
"history": [
{ "id": 9012, "timestamp": 1760000000, "signal_date": "2026-10-11",
"action": "BUY", "confidence": 78.5, "explanation": "…" }
],
"count": 7,
"attribution": "Data provided by MyCryptoSignal"
} GET /api/market
Latest market snapshots. Query: symbol?.
{
"data": [
{
"coin_id": "bitcoin", "symbol": "BTC", "name": "Bitcoin",
"timestamp": 1760000000, "price": 68000.12, "market_cap": 1340000000000,
"volume_24h": 32000000000, "price_change_24h": 1.4,
"price_change_7d": -2.1, "price_change_30d": 8.7
}
],
"count": 60,
"attribution": "Data provided by MyCryptoSignal"
} GET /api/onchain
Latest on-chain snapshots. Query: symbol?. Degrades gracefully when a provider is absent.
{
"data": [
{
"coin_id": "ethereum", "symbol": "ETH", "name": "Ethereum",
"timestamp": 1760000000, "transaction_count": 1200000,
"active_addresses": 480000, "gas_used": 0.62,
"block_height": 21000000, "network_utilization": 0.71
}
],
"count": 60,
"attribution": "Data provided by MyCryptoSignal"
} GET /api/prices
Tracked and meme-mover prices. Query: limit? (1–500, default 100), category?.
{
"data": [
{
"coin_id": "dogecoin", "symbol": "DOGE", "name": "Dogecoin",
"price": 0.1234, "price_change_24h": -3.2, "price_change_7d": 5.1,
"price_change_30d": 12.0, "market_cap": 18000000000,
"volume_24h": 900000000, "category": "meme", "updated_at": 1760000000
}
],
"count": 60,
"attribution": "Data provided by MyCryptoSignal"
} GET /api/news
Published news list. Query: category?, limit? (1–100, default 20).
{
"articles": [
{
"slug": "solana-network-activity-surges",
"headline": "Solana Network Activity Surges",
"excerpt": "…", "category": "market-movers",
"source_name": "CryptoSlate", "source_url": "https://…",
"published_at": 1760000000, "word_count": 210
}
],
"count": 20,
"attribution": "Data provided by MyCryptoSignal"
} GET /api/news/[slug]
Single published article: { "article": { … }, "attribution": "…" }.
Errors
All errors share one shape:
{ "error": "<human message>" }
400 bad params
401 Invalid API key
404 unknown route or entity
429 rate limit or monthly quota exceeded
500 internal error Caching
Documented freshness (matches the API's Cache-Control): market/on-chain 30 min,
signals 23 h, coins indefinite, news 15 min, prices 30 min. Safe to cache in your client with the
same windows.
CORS
Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: GET, POST, OPTIONS
Access-Control-Allow-Headers: Content-Type, X-API-Key, Authorization