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
Not financial advice. All data is informational. Attribution is required: display “Powered by MyCryptoSignal” with a link to mycryptosignal.com.

Request a free key