Documentation
CryptoBob Intelligence is a lightweight market-intelligence API that provides regime filters, rankings, and risk hints computed on multiple timeframes. It is designed for dashboards, quant research, and automated workflows.
Swagger UI is available at https://api.cryptobob.de/docs
Use Swagger for live testing; use this page as the stable reference with examples and field semantics.
Authenticate using your CryptoBob Access Token. Send it as:
Authorization: Bearer <access_token>Notes:
- Tokens are short-lived; refresh in your client after subscription changes (e.g. checkout=success).
- Billing/internal endpoints are intentionally not documented here. This page only covers customer-facing endpoints.
https://api.cryptobob.de
Requests are tracked per calendar month (UTC). /health and /v1/usage are not counted toward quota.
Replace $TOKEN with your CryptoBob Access Token.
export API_BASE="https://api.cryptobob.de"
export TOKEN="..."
curl -s \
-H "Authorization: Bearer $TOKEN" \
"$API_BASE/health"
curl -s \
-H "Authorization: Bearer $TOKEN" \
"$API_BASE/v1/rankings?timeframe=15m&limit=10"Most endpoints return a Snapshot object (or arrays / maps of snapshots). This object is stable and suitable for caching.
- symbol (string) — Trading pair, e.g. BTCUSDC.
- timeframe (string) — One of 15m, 30m, 1h.
- timestamp (string, ISO-8601) — Timestamp of the latest computed candle used for this snapshot.
- price (number) — Latest close price from the timeframe candle.
- regime (object) — Tradeability decision and reasons.
- setup (object) — Ranking features (currently a single setup score).
- risk (object) — ATR-based risk hints (stop and trailing percentages).
- regime.tradeable (boolean) — true if the symbol meets regime filters (trend/strength/liquidity).
- regime.reasons (string[]) — If tradeable=false, contains human-readable reasons. Values may include:
- "ADX too low"
- "Low volume"
- "Below EMA200"
- setup.score (number) — Higher means “more attractive” relative setup. Used for rankings. Not a probability; use it to sort.
- risk.stop_pct (number) — Suggested stop distance in percent (e.g. 2.6 means ~2.6%).
- risk.trail_pct (number) — Suggested trailing distance in percent.
{
"symbol": "BTCUSDC",
"timeframe": "15m",
"timestamp": "2025-12-15T10:45:00+00:00",
"price": 104250.12,
"regime": { "tradeable": true, "reasons": [] },
"setup": { "score": 2.15 },
"risk": { "stop_pct": 2.6, "trail_pct": 3.3 }
}All endpoints require Authorization: Bearer <access_token>.
Health check and supported timeframes. Not counted toward quota.
curl -H "Authorization: Bearer $TOKEN" \
"$API_BASE/health"{
"status": "ok",
"timeframes": ["15m", "30m", "1h"]
}- status — Always "ok" if service is healthy.
- timeframes — Array of supported timeframes.
Returns the configured symbol universe and supported timeframes.
curl -H "Authorization: Bearer $TOKEN" \
"$API_BASE/symbols"{
"symbols": ["BTCUSDC", "ETHUSDC"],
"timeframes": ["15m", "30m", "1h"]
}- symbols — List of tradable pairs available in the API.
- timeframes — Array of supported timeframes.
Returns your current monthly API usage. Not counted toward quota.
curl -H "Authorization: Bearer $TOKEN" \
"$API_BASE/v1/usage"{
"plan": "basic",
"month": "2025-12",
"used": 12452,
"limit": 20000,
"remaining": 7548
}- plan — Your effective plan name (e.g. free, basic, pro).
- month — Billing month (UTC) in YYYY-MM.
- used — Requests used in this month (counted endpoints only).
- limit — Monthly request limit for the plan.
- remaining — Remaining requests for the month.
Returns snapshots focusing on regime/tradeability. Use it to gate entries and filter symbols.
- timeframe — 15m | 30m | 1h | all (default 15m)
- symbol — optional filter (e.g. BTCUSDC)
curl -H "Authorization: Bearer $TOKEN" \
"$API_BASE/v1/regime?timeframe=15m"[
{
"symbol": "BTCUSDC",
"timeframe": "15m",
"timestamp": "2025-12-15T10:45:00+00:00",
"price": 104250.12,
"regime": { "tradeable": true, "reasons": [] },
"setup": { "score": 2.15 },
"risk": { "stop_pct": 2.6, "trail_pct": 3.3 }
}
]- If timeframe is a single timeframe, response is Snapshot[].
- If timeframe=all, response is { "15m": Snapshot[], "30m": Snapshot[], "1h": Snapshot[] }.
Returns symbols sorted by setup.score (descending). Use this to pick the best candidates for further filtering.
- timeframe — 15m | 30m | 1h | all (default 15m)
- limit — number of results (1–200), default 10
curl -H "Authorization: Bearer $TOKEN" \
"$API_BASE/v1/rankings?timeframe=15m&limit=10"[
{
"symbol": "BTCUSDC",
"timeframe": "15m",
"timestamp": "2025-12-15T10:45:00+00:00",
"price": 104250.12,
"regime": { "tradeable": true, "reasons": [] },
"setup": { "score": 2.15 },
"risk": { "stop_pct": 2.6, "trail_pct": 3.3 }
}
]- Use regime.tradeable as your first filter.
- Use risk.stop_pct and risk.trail_pct to size risk and avoid illiquid regimes.
Returns full snapshots for all symbols. Use this for full dashboards or batch analytics.
- timeframe — 15m | 30m | 1h | all (default 15m)
curl -H "Authorization: Bearer $TOKEN" \
"$API_BASE/v1/snapshot?timeframe=15m"[
{
"symbol": "BTCUSDC",
"timeframe": "15m",
"timestamp": "2025-12-15T10:45:00+00:00",
"price": 104250.12,
"regime": { "tradeable": true, "reasons": [] },
"setup": { "score": 2.15 },
"risk": { "stop_pct": 2.6, "trail_pct": 3.3 }
}
]- This endpoint typically has the highest payload size (all symbols). Consider caching on your side.
- When timeframe=all, response is a map of timeframe → snapshots.
The API uses standard HTTP status codes. Error bodies are JSON.
- 401 Unauthorized — Missing/invalid token.
- 403 Forbidden — Subscription inactive or insufficient plan.
- 429 Too Many Requests — Monthly quota exceeded.
- 400 Bad Request — Invalid parameters (e.g. unsupported timeframe).
{
"detail": {
"error": "monthly_quota_exceeded",
"limit": 20000,
"used": 20001,
"plan": "basic"
}
}