API Documentation
Base URL: https://bitcoinquant.co/api/v1
Authentication
All API requests require a Bearer token in the Authorization header:
Authorization: Bearer YOUR_API_KEY
Get your API key instantly at /api.
Requests without a valid key return 401 AUTHENTICATION_FAILED.
Rate Limits
Each HTTP request to any /api/v1/ endpoint counts as one request against your rate limit, regardless of how much data is returned.
| Plan | Rate Limit | Historical Data |
|---|---|---|
| Free | 60 requests/minute | 29 current + 24 historical fields · Last 7 days |
| Pro | 300 requests/minute | All 37 current + 31 historical fields · Full history |
Free plan: 29 current + 24 historical fields, 7-day lookback. Pro adds par value analytics ($100 above/below, $99-$101 band), shares outstanding, and full history.
Rate limit headers are included in every response: X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset (ISO 8601 timestamp).
Preferred Equity Endpoints
/v1/preferred-equityReturns current data for all preferred equity securities (STRC, STRD, STRF, STRK, SATA).
ticker(string, optional)— Filter by ticker (e.g. STRC)sort_by(string, optional)— Sort field: ticker, stock_price, effective_yield, market_cap, trading_volume_usd, sharpe_ratiosort_order(string, optional)— asc or desc (default: asc)
/v1/preferred-equity/{ticker}Returns current data for a single ticker. More efficient than filtering the list endpoint.
/v1/preferred-equity/historicalReturns daily historical data with OHLCV, yield, volatility, volume breakdowns, and more.
ticker(string, optional)— Filter by ticker (recommended). Without this, returns all tickers.days(number, optional)— Number of calendar days of history. Free: max 7, Pro: max 365.limit(number, optional)— Results per page (default 500, max 5000)offset(number, optional)— Pagination offset (default 0)sort_order(string, optional)— asc or desc (default: desc — newest first)
Response Format
All successful responses follow this structure:
{
"success": true,
"data": { ... } or [ ... ],
"meta": {
"plan": "FREE",
"fields_returned": 37,
"total_fields_available": 37
}
}success— alwaystruefor 200 responsesdata— object for single-ticker endpoints, array for list/historical endpointsmeta— your plan type and field counts
Field Reference
Free plan includes 29 current + 24 historical fields. Pro adds par value analytics, shares outstanding, and full history.
Current Data37 fieldsClick to expand
Endpoints: /v1/preferred-equity · /v1/preferred-equity/{ticker}
| Field | Type | Description |
|---|---|---|
| ticker | string | Ticker symbol (STRC, STRD, STRF, STRK, SATA) |
| issuer | string | Issuing company name |
| name | string | Full security name |
| overview | string | Short overview of the security |
| description | string | Detailed security description |
| stock_price | number | Current stock price (USD) |
| current_dividend | number | Current annual dividend per share (USD) |
| effective_yield | number | Annual dividend / current price (%) |
| dividend_payment_timeframe | string | Dividend frequency (e.g. quarterly) |
| ipo_date | string | Date of IPO |
| ipo_price | number | IPO price (USD) |
| price_3m_ago | number | Stock price 3 months ago (USD) |
| three_month_return | number | Price return over the past 3 months (%) |
| lifetime_return | number | Price return since IPO (%) |
| market_cap | number | Market capitalization (USD) |
| shares_outstanding | number | Total shares outstanding |
| notional_value | number | Notional value (shares x $100 par) |
| trading_volume_usd | number | Latest day trading volume (USD) |
| avg_trading_volume_7d | number | 7-day average daily volume (USD) |
| avg_trading_volume_30d | number | 30-day average daily volume (USD) |
| scaled_vol_above_100_usd | number | Volume traded above $100 par (USD) |
| scaled_vol_below_100_usd | number | Volume traded below $100 par (USD) |
| scaled_vol_above_100_rth_usd | number | Volume above $100 during regular trading hours (USD) |
| scaled_trading_volume_rth_usd | number | Total volume during regular trading hours (USD) |
| volume_above_100_pct | number | Percentage of volume traded above $100 par |
| this_weeks_volume | number | Total trading volume this week (USD) |
| this_weeks_volume_above_par | number | Volume above $100 par this week (USD) |
| this_weeks_volume_above_par_pct | number | Percentage of this week's volume above par |
| volatility_7d | number | 7-day annualized volatility |
| volatility_30d | number | 30-day annualized volatility |
| volatility_60d | number | 60-day annualized volatility |
| volatility_90d | number | 90-day annualized volatility |
| sharpe_ratio | number | Risk-adjusted return (excess return / volatility) |
| risk_free_rate | number | Risk-free rate used for Sharpe calculation |
| created_at | string | Record creation timestamp |
| updated_at | string | Last data refresh timestamp |
| last_updated | string | Last data update timestamp |
Historical Data31 fieldsClick to expand
Endpoint: /v1/preferred-equity/historical · Free: last 7 days · Pro: full history
| Field | Type | Description |
|---|---|---|
| date | string | Trading date (YYYY-MM-DD) |
| ticker | string | Ticker symbol |
| stock_price | number | Closing price (USD) |
| open_price | number | Opening price (USD) |
| high_price | number | Intraday high price (USD) |
| low_price | number | Intraday low price (USD) |
| effective_yield | number | Effective yield on that date (%) |
| trading_volume | number | Daily trading volume (USD) |
| avg_trading_volume_7d | number | 7-day average daily volume (USD) |
| avg_trading_volume_30d | number | 30-day average daily volume (USD) |
| market_cap | number | Market capitalization (USD) |
| notional | number | Notional value (USD) |
| shares_outstanding | number | Shares outstanding on that date |
| dividend_rate | number | Dividend rate on that date |
| volatility_7d | number | 7-day annualized volatility |
| volatility_30d | number | 30-day annualized volatility |
| volatility_60d | number | 60-day annualized volatility |
| volatility_90d | number | 90-day annualized volatility |
| volume_above_100_pct | number | Pct of volume above $100 par |
| scaled_vol_above_100_usd | number | Volume above $100 par (USD) |
| scaled_vol_below_100_usd | number | Volume below $100 par (USD) |
| scaled_vol_above_100_rth_usd | number | Volume above $100 during regular hours (USD) |
| trading_volume_rth | number | Total volume during regular hours (USD) |
| volume_in_99_101_band_pct | number | Pct of volume in $99-$101 band |
| sharpe_ratio | number | Sharpe ratio on that date |
| cumulative_weekly_volume | number | Cumulative volume for the week (USD) |
| cumulative_weekly_scaled_vol_above_100_usd | number | Cumulative weekly volume above par (USD) |
| day_of_week | string | Day of the week (Mon, Tue, etc.) |
| three_month_return | number | 3-month return as of that date (%) |
| one_year_return | number | 1-year return as of that date (%) |
| lifetime_return | number | Lifetime return as of that date (%) |
Error Codes
All error responses return JSON with error, code, status, and docs fields.
| Status | Code | Description |
|---|---|---|
| 400 | VALIDATION_ERROR | Invalid request parameters |
| 400 | MISSING_TICKER | Ticker parameter is required for this endpoint |
| 401 | AUTHENTICATION_FAILED | Missing or invalid API key |
| 404 | COMPANY_NOT_FOUND | The requested ticker does not exist in the dataset |
| 429 | RATE_LIMIT_EXCEEDED | Too many requests — check X-RateLimit-Reset header |
| 500 | INTERNAL_ERROR | Server error — retry after a short delay |