Bitculator
Bitculator · Data API · v1

Bitculator Data API

76 endpoints 15 groups X-Quota-* on every call https://bitculator.com/api/v1

All endpoints live under /api/v1 and require a Bearer key with the data-api ability - create one in your developer console.

Your first call:

curl https://bitculator.com/api/v1/prices/bitcoin \
  -H "Authorization: Bearer YOUR_API_KEY"

Responses are JSON. Prices, rates, and supplies are decimal strings (floats can't carry market precision); counts and analytics values are numbers. Every response carries your live quota in the X-Quota-Limit / X-Quota-Used / X-Quota-Reset headers, and errors always use the {"error": {"code", "message", "details"}} envelope.

The Data API has its own monthly quota, tied to your API plan and fully separate from your embed widgets. per_page caps are plan-based (Free 100, Starter/Pro 250); exceeding a cap returns 422 rather than clamping.

Client libraries

You don't need an SDK - every endpoint is plain HTTP. But if you prefer one, there are eight official, MIT-licensed SDKs, all covering the full API with pagination, typed errors and decimal-string precision built in.

npm install @bitculator/sdk
pip install bitculator
PHP PHP
composer require bitculator/sdk
Go Go
go get github.com/bitculator/bitculator-go-sdk
cargo add bitculator
com.bitculator : bitculator
dotnet add package Bitculator
C++ C++
FetchContent: bitculator-cpp-sdk

Authentication

To authenticate requests, include an Authorization: Bearer {YOUR_API_KEY} header on every request.

Create a Data API key in your developer console - keys are Bearer-only and carry the data-api ability. Keep them server-side; they are never meant for client-side embedding.

Authorization header
Create a key →
Bearer
bc_••••••••••••••••

Sent as Authorization: Bearer {YOUR_API_KEY} on every request.

Each endpoint shows the minimum plan required to call it. Free Starter Pro
9 endpoints

Coins

Ranked coin and token market data: paginated listings, single-coin detail, movers (gainers/losers), recently-added, trending, and per-coin time series. Prices, marketcap and supply are decimal STRINGS (floats can't carry market precision); percentage changes, ranks and counts are numbers.

List coins

Free

Ranked coins with prices, filters and selectors, paginated with Laravel's links + meta envelope. Prices, marketcap and circulating_supply are decimal strings; changes and ranks are numbers.

GET
https://bitculator.com/api/v1/coins
Bearer
bc_••••••••••••••••

Keys are Bearer-only and carry the data-api ability - keep them server-side.

Query parameters

page
integer optional
1

Page number (1-based). Must be at least 1.

per_page
integer optional
50

Rows per page. The cap is plan-based (Free 100, Starter/Pro 250); exceeding it returns 422 rather than clamping. Must be at least 1. Must not be greater than 100.

type
string optional
coin

Restrict to a single asset type: coin or token.

One of: coin token

status
string optional
active

Listing status: active, delisted, untracked, progressing, awaiting or preparing. Defaults to all public statuses.

One of: active delisted untracked progressing awaiting preparing

search
string optional
bitcoin

Free-text match on name or symbol. Must not be greater than 100 characters.

min_price
number optional
0.5

Only coins priced at or above this USD value. Must be at least 0.

max_price
number optional
100000

Only coins priced at or below this USD value. Must be at least 0.

min_marketcap
number optional
1000000

Only coins with a USD marketcap at or above this value. Must be at least 0.

max_marketcap
number optional
5000000000000

Only coins with a USD marketcap at or below this value. Must be at least 0.

min_volume
number optional
1000000

Only coins with 24h USD volume at or above this value. Must be at least 0.

max_volume
number optional
100000000000

Only coins with 24h USD volume at or below this value. Must be at least 0.

ids
string optional
38,39

Filter to specific coin ids (CSV, up to 100 selectors combined with slugs/symbols). Must not be greater than 1000 characters.

slugs
string optional
bitcoin,ethereum

Filter to specific coin slugs (CSV, up to 100 selectors combined). Must not be greater than 2000 characters.

symbols
string optional
BTC,ETH

Filter to specific coin symbols (CSV, case-insensitive, up to 100 selectors combined). Must not be greater than 1000 characters.

sort
string optional
-marketcap

Comma-separated sort fields; prefix with - for descending. Sortable: marketcap, rank, price, volume_24h, change_24h, change_7d. Must not be greater than 100 characters.

interval
string optional
24h

Movers window for /coins/gainers and /coins/losers only: 24h or 7d.

One of: 24h 7d

GET request - no request body.

Request

curl --request GET \
    --get "https://bitculator.com/api/v1/coins?page=1&per_page=50&type=coin&status=active&search=bitcoin&min_price=0.5&max_price=100000&min_marketcap=1000000&max_marketcap=5000000000000&min_volume=1000000&max_volume=100000000000&ids=38%2C39&slugs=bitcoin%2Cethereum&symbols=BTC%2CETH&sort=-marketcap&interval=24h" \
    --header "Authorization: Bearer {YOUR_API_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"

Recently added coins

Free

Newest listings - sorted by status_updated_at (the went-active timestamp; created_at is the crawl date, which predates listing by arbitrary amounts). Same row shape and pagination envelope as List coins.

GET
https://bitculator.com/api/v1/coins/recently-added
Bearer
bc_••••••••••••••••

Keys are Bearer-only and carry the data-api ability - keep them server-side.

Query parameters

page
integer optional
1

Page number (1-based). Must be at least 1.

per_page
integer optional
50

Rows per page. The cap is plan-based (Free 100, Starter/Pro 250); exceeding it returns 422 rather than clamping. Must be at least 1. Must not be greater than 100.

type
string optional
coin

Restrict to a single asset type: coin or token.

One of: coin token

status
string optional
active

Listing status: active, delisted, untracked, progressing, awaiting or preparing. Defaults to all public statuses.

One of: active delisted untracked progressing awaiting preparing

search
string optional
bitcoin

Free-text match on name or symbol. Must not be greater than 100 characters.

min_price
number optional
0.5

Only coins priced at or above this USD value. Must be at least 0.

max_price
number optional
100000

Only coins priced at or below this USD value. Must be at least 0.

min_marketcap
number optional
1000000

Only coins with a USD marketcap at or above this value. Must be at least 0.

max_marketcap
number optional
5000000000000

Only coins with a USD marketcap at or below this value. Must be at least 0.

min_volume
number optional
1000000

Only coins with 24h USD volume at or above this value. Must be at least 0.

max_volume
number optional
100000000000

Only coins with 24h USD volume at or below this value. Must be at least 0.

ids
string optional
38,39

Filter to specific coin ids (CSV, up to 100 selectors combined with slugs/symbols). Must not be greater than 1000 characters.

slugs
string optional
bitcoin,ethereum

Filter to specific coin slugs (CSV, up to 100 selectors combined). Must not be greater than 2000 characters.

symbols
string optional
BTC,ETH

Filter to specific coin symbols (CSV, case-insensitive, up to 100 selectors combined). Must not be greater than 1000 characters.

sort
string optional
-marketcap

Comma-separated sort fields; prefix with - for descending. Sortable: marketcap, rank, price, volume_24h, change_24h, change_7d. Must not be greater than 100 characters.

interval
string optional
24h

Movers window for /coins/gainers and /coins/losers only: 24h or 7d.

One of: 24h 7d

GET request - no request body.

Request

curl --request GET \
    --get "https://bitculator.com/api/v1/coins/recently-added?page=1&per_page=50&type=coin&status=active&search=bitcoin&min_price=0.5&max_price=100000&min_marketcap=1000000&max_marketcap=5000000000000&min_volume=1000000&max_volume=100000000000&ids=38%2C39&slugs=bitcoin%2Cethereum&symbols=BTC%2CETH&sort=-marketcap&interval=24h" \
    --header "Authorization: Bearer {YOUR_API_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"

Top gainers

Free

Biggest positive movers over the interval window (24h default, or 7d). Same row shape and pagination envelope as List coins.

GET
https://bitculator.com/api/v1/coins/gainers
Bearer
bc_••••••••••••••••

Keys are Bearer-only and carry the data-api ability - keep them server-side.

Query parameters

page
integer optional
1

Page number (1-based). Must be at least 1.

per_page
integer optional
50

Rows per page. The cap is plan-based (Free 100, Starter/Pro 250); exceeding it returns 422 rather than clamping. Must be at least 1. Must not be greater than 100.

type
string optional
coin

Restrict to a single asset type: coin or token.

One of: coin token

status
string optional
active

Listing status: active, delisted, untracked, progressing, awaiting or preparing. Defaults to all public statuses.

One of: active delisted untracked progressing awaiting preparing

search
string optional
bitcoin

Free-text match on name or symbol. Must not be greater than 100 characters.

min_price
number optional
0.5

Only coins priced at or above this USD value. Must be at least 0.

max_price
number optional
100000

Only coins priced at or below this USD value. Must be at least 0.

min_marketcap
number optional
1000000

Only coins with a USD marketcap at or above this value. Must be at least 0.

max_marketcap
number optional
5000000000000

Only coins with a USD marketcap at or below this value. Must be at least 0.

min_volume
number optional
1000000

Only coins with 24h USD volume at or above this value. Must be at least 0.

max_volume
number optional
100000000000

Only coins with 24h USD volume at or below this value. Must be at least 0.

ids
string optional
38,39

Filter to specific coin ids (CSV, up to 100 selectors combined with slugs/symbols). Must not be greater than 1000 characters.

slugs
string optional
bitcoin,ethereum

Filter to specific coin slugs (CSV, up to 100 selectors combined). Must not be greater than 2000 characters.

symbols
string optional
BTC,ETH

Filter to specific coin symbols (CSV, case-insensitive, up to 100 selectors combined). Must not be greater than 1000 characters.

sort
string optional
-marketcap

Comma-separated sort fields; prefix with - for descending. Sortable: marketcap, rank, price, volume_24h, change_24h, change_7d. Must not be greater than 100 characters.

interval
string optional
24h

Movers window for /coins/gainers and /coins/losers only: 24h or 7d.

One of: 24h 7d

GET request - no request body.

Request

curl --request GET \
    --get "https://bitculator.com/api/v1/coins/gainers?page=1&per_page=50&type=coin&status=active&search=bitcoin&min_price=0.5&max_price=100000&min_marketcap=1000000&max_marketcap=5000000000000&min_volume=1000000&max_volume=100000000000&ids=38%2C39&slugs=bitcoin%2Cethereum&symbols=BTC%2CETH&sort=-marketcap&interval=24h" \
    --header "Authorization: Bearer {YOUR_API_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"

Top losers

Free

Biggest negative movers over the interval window (24h default, or 7d). Same row shape and pagination envelope as List coins.

GET
https://bitculator.com/api/v1/coins/losers
Bearer
bc_••••••••••••••••

Keys are Bearer-only and carry the data-api ability - keep them server-side.

Query parameters

page
integer optional
1

Page number (1-based). Must be at least 1.

per_page
integer optional
50

Rows per page. The cap is plan-based (Free 100, Starter/Pro 250); exceeding it returns 422 rather than clamping. Must be at least 1. Must not be greater than 100.

type
string optional
coin

Restrict to a single asset type: coin or token.

One of: coin token

status
string optional
active

Listing status: active, delisted, untracked, progressing, awaiting or preparing. Defaults to all public statuses.

One of: active delisted untracked progressing awaiting preparing

search
string optional
bitcoin

Free-text match on name or symbol. Must not be greater than 100 characters.

min_price
number optional
0.5

Only coins priced at or above this USD value. Must be at least 0.

max_price
number optional
100000

Only coins priced at or below this USD value. Must be at least 0.

min_marketcap
number optional
1000000

Only coins with a USD marketcap at or above this value. Must be at least 0.

max_marketcap
number optional
5000000000000

Only coins with a USD marketcap at or below this value. Must be at least 0.

min_volume
number optional
1000000

Only coins with 24h USD volume at or above this value. Must be at least 0.

max_volume
number optional
100000000000

Only coins with 24h USD volume at or below this value. Must be at least 0.

ids
string optional
38,39

Filter to specific coin ids (CSV, up to 100 selectors combined with slugs/symbols). Must not be greater than 1000 characters.

slugs
string optional
bitcoin,ethereum

Filter to specific coin slugs (CSV, up to 100 selectors combined). Must not be greater than 2000 characters.

symbols
string optional
BTC,ETH

Filter to specific coin symbols (CSV, case-insensitive, up to 100 selectors combined). Must not be greater than 1000 characters.

sort
string optional
-marketcap

Comma-separated sort fields; prefix with - for descending. Sortable: marketcap, rank, price, volume_24h, change_24h, change_7d. Must not be greater than 100 characters.

interval
string optional
24h

Movers window for /coins/gainers and /coins/losers only: 24h or 7d.

One of: 24h 7d

GET request - no request body.

Request

curl --request GET \
    --get "https://bitculator.com/api/v1/coins/losers?page=1&per_page=50&type=coin&status=active&search=bitcoin&min_price=0.5&max_price=100000&min_marketcap=1000000&max_marketcap=5000000000000&min_volume=1000000&max_volume=100000000000&ids=38%2C39&slugs=bitcoin%2Cethereum&symbols=BTC%2CETH&sort=-marketcap&interval=24h" \
    --header "Authorization: Bearer {YOUR_API_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"

Get coin detail

Free

Full single-coin profile. Beyond the list fields it adds: supply (circulating/total/max), today OHLC, all_time_high / all_time_low (price, date and percent_from the current price), fully_diluted_valuation, market counts (exchanges/pairs/tickers/wallets), decimals, genesis_date, official links (typed url list), token contracts, and a localized HTML description (falls back to English when the requested locale is missing). All price/supply fields are decimal strings.

GET
https://bitculator.com/api/v1/coins/{slug}
Bearer
bc_••••••••••••••••

Keys are Bearer-only and carry the data-api ability - keep them server-side.

Path parameters

slug
string required
bitcoin

The coin slug.

Query parameters

locale
string optional
en

Content language for the description (falls back to English).

GET request - no request body.

Request

curl --request GET \
    --get "https://bitculator.com/api/v1/coins/bitcoin?locale=en" \
    --header "Authorization: Bearer {YOUR_API_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"

Candle history

Free

Per-coin OHLC + volume + marketcap time series. Pick interval: minutely, half-hourly, hourly or daily. Retention is a hard property of the rollup pipeline - minutely 8 days, half-hourly 3 months, hourly 6 months, daily forever; requests beyond a window return what exists. When a limit is set you get the MOST RECENT N rows in the window, emitted oldest-first. Prices are decimal strings.

GET
https://bitculator.com/api/v1/coins/{slug}/history
Bearer
bc_••••••••••••••••

Keys are Bearer-only and carry the data-api ability - keep them server-side.

Path parameters

slug
string required
bitcoin

The coin slug.

Query parameters

interval
string optional
daily

minutely, half-hourly, hourly or daily (default daily).

start
string optional
2026-06-01

ISO date/time lower bound.

end
string optional
2026-06-30

ISO date/time upper bound (a date-only value means through that day).

limit
integer optional
30

Max rows (1–2000, default 1000).

GET request - no request body.

Request

curl --request GET \
    --get "https://bitculator.com/api/v1/coins/bitcoin/history?interval=daily&start=2026-06-01&end=2026-06-30&limit=30" \
    --header "Authorization: Bearer {YOUR_API_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"

Marketcap history

Free

The same per-coin rollups as Candle history, projected to {time, marketcap} only. Same interval choices and retention windows (minutely 8 days, half-hourly 3 months, hourly 6 months, daily forever), most-recent-N when a limit is set.

GET
https://bitculator.com/api/v1/coins/{slug}/marketcap-history
Bearer
bc_••••••••••••••••

Keys are Bearer-only and carry the data-api ability - keep them server-side.

Path parameters

slug
string required
bitcoin

The coin slug.

Query parameters

interval
string optional
daily

minutely, half-hourly, hourly or daily (default daily).

start
string optional
2026-06-01

ISO date/time lower bound.

end
string optional
2026-06-30

ISO date/time upper bound.

limit
integer optional
30

Max rows (1–2000, default 1000).

GET request - no request body.

Request

curl --request GET \
    --get "https://bitculator.com/api/v1/coins/bitcoin/marketcap-history?interval=daily&start=2026-06-01&end=2026-06-30&limit=30" \
    --header "Authorization: Bearer {YOUR_API_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"

Coin sparkline

Free

A compact price series for the coin over the chosen period, for drawing sparklines.

GET
https://bitculator.com/api/v1/coins/{slug}/sparkline
Bearer
bc_••••••••••••••••

Keys are Bearer-only and carry the data-api ability - keep them server-side.

Path parameters

slug
string required
bitcoin

The coin slug.

Query parameters

period
string optional
7d

24h, 7d, 30d, 60d, 90d, 180d or 365d (default 7d).

GET request - no request body.

Request

curl --request GET \
    --get "https://bitculator.com/api/v1/coins/bitcoin/sparkline?period=7d" \
    --header "Authorization: Bearer {YOUR_API_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
3 endpoints

Prices

The lightweight price hot path - current price, marketcap, 24h volume and recent changes for a requested set of coins. /prices requires a selector (ids, slugs or symbols); /prices/{slug} targets one coin. Optionally convert into a fiat currency (crypto prices refresh ~every minute, fiat FX ~twice daily). Prices and marketcap are decimal strings.

Get prices

Free

Prices for a requested set of coins. Pass at least one selector - ids, slugs or symbols (up to 100 combined). meta.currency echoes the conversion target (USD unless convert is set).

GET
https://bitculator.com/api/v1/prices
Bearer
bc_••••••••••••••••

Keys are Bearer-only and carry the data-api ability - keep them server-side.

Query parameters

ids
string optional
38,39

Coin ids to price (CSV). At least one of ids, slugs or symbols is required; the three lists cap at 100 selectors combined. This field is required when none of slugs and symbols are present. Must not be greater than 1000 characters.

slugs
string optional
bitcoin,ethereum

Coin slugs to price (CSV). At least one of ids, slugs or symbols is required. This field is required when none of ids and symbols are present. Must not be greater than 2000 characters.

symbols
string optional
BTC,ETH

Coin symbols to price (CSV, case-insensitive). At least one of ids, slugs or symbols is required. This field is required when none of ids and slugs are present. Must not be greater than 1000 characters.

convert
string optional
EUR

Convert prices/marketcap into an active fiat currency by symbol (default USD). FX rates refresh ~twice daily.

One of: USD EUR JPY BGN CZK DKK GBP HUF PLN RON SEK CHF ISK NOK HRK RUB TRY AUD BRL CAD CNY HKD IDR ILS INR KRW MXN MYR NZD PHP SGD THB ZAR ARS DZD MAD TWD

GET request - no request body.

Request

curl --request GET \
    --get "https://bitculator.com/api/v1/prices?ids=38%2C39&slugs=bitcoin%2Cethereum&symbols=BTC%2CETH&convert=EUR" \
    --header "Authorization: Bearer {YOUR_API_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"

Get a coin price

Free

Single-coin price snapshot. Optionally convert into an active fiat currency by symbol (default USD).

GET
https://bitculator.com/api/v1/prices/{slug}
Bearer
bc_••••••••••••••••

Keys are Bearer-only and carry the data-api ability - keep them server-side.

Path parameters

slug
string required
bitcoin

The coin slug.

Query parameters

convert
string optional
EUR

Active fiat currency symbol to price in (default USD).

GET request - no request body.

Request

curl --request GET \
    --get "https://bitculator.com/api/v1/prices/bitcoin?convert=EUR" \
    --header "Authorization: Bearer {YOUR_API_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"

Historical price

Free

The coin's USD price on a given date, read from the daily history (exact day, ±3-day fallback - the same resolver the portfolio uses). Crypto only: fiat rows have no daily history.

GET
https://bitculator.com/api/v1/historical-price
Bearer
bc_••••••••••••••••

Keys are Bearer-only and carry the data-api ability - keep them server-side.

Query parameters

slug
string required
bitcoin

The coin's slug identifier.

date
string required
2021-04-14

date The lookup date (after 2008-12-31, not in the future).

GET request - no request body.

Request

curl --request GET \
    --get "https://bitculator.com/api/v1/historical-price?slug=bitcoin&date=2021-04-14" \
    --header "Authorization: Bearer {YOUR_API_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
5 endpoints

Markets

Tickers (per-exchange markets) and pairs (venue-aggregated markets), plus a coin's markets and raw per-exchange trading symbols. All of it is snapshot data - no per-ticker/pair history exists. USD volumes are numbers; prices are decimal strings.

Coin markets

Free

All markets for a coin - the tickers whose pair has the coin as base OR quote. Same row shape and filters as List tickers.

GET
https://bitculator.com/api/v1/coins/{slug}/markets
Bearer
bc_••••••••••••••••

Keys are Bearer-only and carry the data-api ability - keep them server-side.

Path parameters

slug
string required
bitcoin

The coin slug.

Query parameters

page
integer optional
1

Page number (1-based). Must be at least 1.

per_page
integer optional
50

Rows per page. The cap is plan-based (Free 100, Starter/Pro 250); exceeding it returns 422 rather than clamping. Must be at least 1. Must not be greater than 100.

exchange
string optional
binance-exchange

Restrict to a single exchange by slug (omit on the per-exchange listing, which is already scoped). Must match the regex /^[a-z0-9-]{1,120}$/.

pair
integer optional
1

Restrict to a single pair by id. Must be at least 1.

instrument
string optional
spot

Instrument type: future, option, swap, spot or margin (plurals accepted).

One of: future option swap spot margin

search
string optional
BTC

Free-text match on the ticker symbol. Must not be greater than 50 characters.

min_volume
number optional
1000000

Only tickers with 24h USD volume at or above this value. Must be at least 0.

max_volume
number optional
100000000000

Only tickers with 24h USD volume at or below this value. Must be at least 0.

min_change
number optional
-50

Only tickers with a 24h percentage change at or above this value.

max_change
number optional
50

Only tickers with a 24h percentage change at or below this value.

sort
string optional
-volume_usd

A single sort field (prefix with - for descending). Sortable: volume_usd, change_24h, price_usd, updated. Defaults to -volume_usd. Must not be greater than 100 characters.

GET request - no request body.

Request

curl --request GET \
    --get "https://bitculator.com/api/v1/coins/bitcoin/markets?page=1&per_page=50&exchange=binance-exchange&pair=1&instrument=spot&search=BTC&min_volume=1000000&max_volume=100000000000&min_change=-50&max_change=50&sort=-volume_usd" \
    --header "Authorization: Bearer {YOUR_API_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"

Coin trading symbols

Free

The coin's raw per-exchange trading symbols - sparsely populated reference data (coverage is best-effort).

GET
https://bitculator.com/api/v1/coins/{slug}/symbols
Bearer
bc_••••••••••••••••

Keys are Bearer-only and carry the data-api ability - keep them server-side.

Path parameters

slug
string required
bitcoin

The coin slug.

GET request - no request body.

Request

curl --request GET \
    --get "https://bitculator.com/api/v1/coins/bitcoin/symbols" \
    --header "Authorization: Bearer {YOUR_API_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"

List tickers

Free

Individual per-exchange markets (tickers), paginated. Filter by exchange, pair, instrument and volume/change ranges. USD volumes are numbers; prices are decimal strings.

GET
https://bitculator.com/api/v1/tickers
Bearer
bc_••••••••••••••••

Keys are Bearer-only and carry the data-api ability - keep them server-side.

Query parameters

page
integer optional
1

Page number (1-based). Must be at least 1.

per_page
integer optional
50

Rows per page. The cap is plan-based (Free 100, Starter/Pro 250); exceeding it returns 422 rather than clamping. Must be at least 1. Must not be greater than 100.

exchange
string optional
binance-exchange

Restrict to a single exchange by slug (omit on the per-exchange listing, which is already scoped). Must match the regex /^[a-z0-9-]{1,120}$/.

pair
integer optional
1

Restrict to a single pair by id. Must be at least 1.

instrument
string optional
spot

Instrument type: future, option, swap, spot or margin (plurals accepted).

One of: future option swap spot margin

search
string optional
BTC

Free-text match on the ticker symbol. Must not be greater than 50 characters.

min_volume
number optional
1000000

Only tickers with 24h USD volume at or above this value. Must be at least 0.

max_volume
number optional
100000000000

Only tickers with 24h USD volume at or below this value. Must be at least 0.

min_change
number optional
-50

Only tickers with a 24h percentage change at or above this value.

max_change
number optional
50

Only tickers with a 24h percentage change at or below this value.

sort
string optional
-volume_usd

A single sort field (prefix with - for descending). Sortable: volume_usd, change_24h, price_usd, updated. Defaults to -volume_usd. Must not be greater than 100 characters.

GET request - no request body.

Request

curl --request GET \
    --get "https://bitculator.com/api/v1/tickers?page=1&per_page=50&exchange=binance-exchange&pair=1&instrument=spot&search=BTC&min_volume=1000000&max_volume=100000000000&min_change=-50&max_change=50&sort=-volume_usd" \
    --header "Authorization: Bearer {YOUR_API_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"

List pairs

Free

Venue-aggregated trading pairs, ranked by 24h USD volume. Filter by a coin slug (base or quote) and volume range.

GET
https://bitculator.com/api/v1/pairs
Bearer
bc_••••••••••••••••

Keys are Bearer-only and carry the data-api ability - keep them server-side.

Query parameters

page
integer optional
1

Page number (1-based). Must be at least 1.

per_page
integer optional
50

Rows per page. The cap is plan-based (Free 100, Starter/Pro 250); exceeding it returns 422 rather than clamping. Must be at least 1. Must not be greater than 100.

search
string optional
BTC

Free-text match on the pair symbol. Must not be greater than 50 characters.

coin
string optional
bitcoin

Restrict to pairs where this coin slug is the base or quote asset. Must match the regex /^[a-z0-9-]{1,120}$/.

min_volume
number optional
1000000

Only pairs with 24h USD volume at or above this value. Must be at least 0.

max_volume
number optional
100000000000

Only pairs with 24h USD volume at or below this value. Must be at least 0.

sort
string optional
-volume_usd

Sort field: volume_usd or updated (prefix with - for descending). Defaults to -volume_usd.

One of: volume_usd -volume_usd updated -updated

GET request - no request body.

Request

curl --request GET \
    --get "https://bitculator.com/api/v1/pairs?page=1&per_page=50&search=BTC&coin=bitcoin&min_volume=1000000&max_volume=100000000000&sort=-volume_usd" \
    --header "Authorization: Bearer {YOUR_API_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"

Get pair detail

Free

One pair plus every exchange ticker listing it, ordered by volume.

GET
https://bitculator.com/api/v1/pairs/{id}
Bearer
bc_••••••••••••••••

Keys are Bearer-only and carry the data-api ability - keep them server-side.

Path parameters

id
integer required
1

The pair id.

GET request - no request body.

Request

curl --request GET \
    --get "https://bitculator.com/api/v1/pairs/1" \
    --header "Authorization: Bearer {YOUR_API_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
7 endpoints

Exchanges

Exchange rankings, detail, trust scores, time series and per-exchange market/coin listings. Volumes are USD. There is no CEX/DEX column - type is derived from the exchange taxonomy, so it can be "cex", "dex" or null.

List exchanges

Free

Ranked exchanges with 24h volume, dominance, pair/asset counts and recent changes. Paginated with Laravel's links + meta envelope.

GET
https://bitculator.com/api/v1/exchanges
Bearer
bc_••••••••••••••••

Keys are Bearer-only and carry the data-api ability - keep them server-side.

Query parameters

page
integer optional
1

Page number (1-based). Must be at least 1.

per_page
integer optional
50

Rows per page. The cap is plan-based (Free 100, Starter/Pro 250); exceeding it returns 422 rather than clamping. Must be at least 1. Must not be greater than 100.

type
string optional
cex

Restrict to a venue type: cex or dex (resolved via the exchange taxonomy).

One of: cex dex

search
string optional
binance

Free-text match on exchange name. Must not be greater than 100 characters.

min_pairs
integer optional
100

Only exchanges listing at least this many pairs. Must be at least 0.

max_pairs
integer optional
2000

Only exchanges listing at most this many pairs. Must be at least 0.

min_assets
integer optional
50

Only exchanges listing at least this many assets. Must be at least 0.

max_assets
integer optional
1000

Only exchanges listing at most this many assets. Must be at least 0.

min_volume
number optional
1000000

Only exchanges with 24h USD volume at or above this value. Must be at least 0.

max_volume
number optional
100000000000

Only exchanges with 24h USD volume at or below this value. Must be at least 0.

ids
string optional
1,12

Filter to specific exchange ids (CSV, up to 100). Must not be greater than 1000 characters.

slugs
string optional
binance-exchange,gateio

Filter to specific exchange slugs (CSV, up to 100). Must not be greater than 2000 characters.

sort
string optional
-volume

Comma-separated sort fields; prefix with - for descending. Sortable: volume, rank, volume_dominance, change_24h, change_7d, pairs, assets. Must not be greater than 100 characters.

GET request - no request body.

Request

curl --request GET \
    --get "https://bitculator.com/api/v1/exchanges?page=1&per_page=50&type=cex&search=binance&min_pairs=100&max_pairs=2000&min_assets=50&max_assets=1000&min_volume=1000000&max_volume=100000000000&ids=1%2C12&slugs=binance-exchange%2Cgateio&sort=-volume" \
    --header "Authorization: Bearer {YOUR_API_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"

Get exchange detail

Free

Full single-exchange profile: ranking, volume/dominance, pair and asset counts, established date, location, referral website, and the derived type (cex/dex/null).

GET
https://bitculator.com/api/v1/exchanges/{slug}
Bearer
bc_••••••••••••••••

Keys are Bearer-only and carry the data-api ability - keep them server-side.

Path parameters

slug
string required
binance-exchange

The exchange slug.

GET request - no request body.

Request

curl --request GET \
    --get "https://bitculator.com/api/v1/exchanges/binance-exchange" \
    --header "Authorization: Bearer {YOUR_API_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"

Get exchange trust score

Free

An aggregate 0–10 trust score plus its 13-factor breakdown (rank, volume, age, volume_trend, stability, rank_stability, ticker_health, pairs, community, assets, dominance, market_breadth, transparency). Computed per exchange and cached 24h.

GET
https://bitculator.com/api/v1/exchanges/{slug}/trust-score
Bearer
bc_••••••••••••••••

Keys are Bearer-only and carry the data-api ability - keep them server-side.

Path parameters

slug
string required
binance-exchange

The exchange slug.

GET request - no request body.

Request

curl --request GET \
    --get "https://bitculator.com/api/v1/exchanges/binance-exchange/trust-score" \
    --header "Authorization: Bearer {YOUR_API_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"

Exchange history

Starter

Volume / dominance / pairs / assets time series (the exchange rollups carry no OHLC). Pick interval: minutely, hourly or daily. Retention is a hard property of the rollup pipeline - minutely 8 days, hourly 6 months, daily forever; when a limit is set you get the most-recent N rows in the window, oldest-first.

GET
https://bitculator.com/api/v1/exchanges/{slug}/history
Bearer
bc_••••••••••••••••

Keys are Bearer-only and carry the data-api ability - keep them server-side.

Path parameters

slug
string required
binance-exchange

The exchange slug.

Query parameters

interval
string optional
daily

minutely, hourly or daily (default daily).

start
string optional
2026-06-01

ISO date/time lower bound.

end
string optional
2026-06-30

ISO date/time upper bound (a date-only value means through that day).

limit
integer optional
30

Max rows (1–2000, default 1000).

GET request - no request body.

Request

curl --request GET \
    --get "https://bitculator.com/api/v1/exchanges/binance-exchange/history?interval=daily&start=2026-06-01&end=2026-06-30&limit=30" \
    --header "Authorization: Bearer {YOUR_API_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"

Exchange sparkline

Starter

The exchange's volume sparkline series for a period (defaults to 7d) - the same series the web's exchange rows render.

GET
https://bitculator.com/api/v1/exchanges/{slug}/sparkline
Bearer
bc_••••••••••••••••

Keys are Bearer-only and carry the data-api ability - keep them server-side.

Path parameters

slug
string required
binance-exchange

The exchange slug.

Query parameters

period
string optional
7d

One of 24h, 7d (default), 30d, 60d, 90d, 180d, 365d.

GET request - no request body.

Request

curl --request GET \
    --get "https://bitculator.com/api/v1/exchanges/binance-exchange/sparkline?period=7d" \
    --header "Authorization: Bearer {YOUR_API_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"

Exchange markets

Free

The exchange's ticker listings (its markets), paginated. Already scoped to the exchange - do not pass an exchange parameter here.

GET
https://bitculator.com/api/v1/exchanges/{slug}/tickers
Bearer
bc_••••••••••••••••

Keys are Bearer-only and carry the data-api ability - keep them server-side.

Path parameters

slug
string required
binance-exchange

The exchange slug.

Query parameters

page
integer optional
1

Page number (1-based). Must be at least 1.

per_page
integer optional
50

Rows per page. The cap is plan-based (Free 100, Starter/Pro 250); exceeding it returns 422 rather than clamping. Must be at least 1. Must not be greater than 100.

exchange
string optional
binance-exchange

Restrict to a single exchange by slug (omit on the per-exchange listing, which is already scoped). Must match the regex /^[a-z0-9-]{1,120}$/.

pair
integer optional
1

Restrict to a single pair by id. Must be at least 1.

instrument
string optional
spot

Instrument type: future, option, swap, spot or margin (plurals accepted).

One of: future option swap spot margin

search
string optional
BTC

Free-text match on the ticker symbol. Must not be greater than 50 characters.

min_volume
number optional
1000000

Only tickers with 24h USD volume at or above this value. Must be at least 0.

max_volume
number optional
100000000000

Only tickers with 24h USD volume at or below this value. Must be at least 0.

min_change
number optional
-50

Only tickers with a 24h percentage change at or above this value.

max_change
number optional
50

Only tickers with a 24h percentage change at or below this value.

sort
string optional
-volume_usd

A single sort field (prefix with - for descending). Sortable: volume_usd, change_24h, price_usd, updated. Defaults to -volume_usd. Must not be greater than 100 characters.

GET request - no request body.

Request

curl --request GET \
    --get "https://bitculator.com/api/v1/exchanges/binance-exchange/tickers?page=1&per_page=50&exchange=binance-exchange&pair=1&instrument=spot&search=BTC&min_volume=1000000&max_volume=100000000000&min_change=-50&max_change=50&sort=-volume_usd" \
    --header "Authorization: Bearer {YOUR_API_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"

Exchange coins

Free

Coins listed on the exchange, returned in the same shape as List coins and accepting the same filters/sort.

GET
https://bitculator.com/api/v1/exchanges/{slug}/assets
Bearer
bc_••••••••••••••••

Keys are Bearer-only and carry the data-api ability - keep them server-side.

Path parameters

slug
string required
binance-exchange

The exchange slug.

Query parameters

page
integer optional
1

Page number (1-based). Must be at least 1.

per_page
integer optional
50

Rows per page. The cap is plan-based (Free 100, Starter/Pro 250); exceeding it returns 422 rather than clamping. Must be at least 1. Must not be greater than 100.

type
string optional
coin

Restrict to a single asset type: coin or token.

One of: coin token

status
string optional
active

Listing status: active, delisted, untracked, progressing, awaiting or preparing. Defaults to all public statuses.

One of: active delisted untracked progressing awaiting preparing

search
string optional
bitcoin

Free-text match on name or symbol. Must not be greater than 100 characters.

min_price
number optional
0.5

Only coins priced at or above this USD value. Must be at least 0.

max_price
number optional
100000

Only coins priced at or below this USD value. Must be at least 0.

min_marketcap
number optional
1000000

Only coins with a USD marketcap at or above this value. Must be at least 0.

max_marketcap
number optional
5000000000000

Only coins with a USD marketcap at or below this value. Must be at least 0.

min_volume
number optional
1000000

Only coins with 24h USD volume at or above this value. Must be at least 0.

max_volume
number optional
100000000000

Only coins with 24h USD volume at or below this value. Must be at least 0.

ids
string optional
38,39

Filter to specific coin ids (CSV, up to 100 selectors combined with slugs/symbols). Must not be greater than 1000 characters.

slugs
string optional
bitcoin,ethereum

Filter to specific coin slugs (CSV, up to 100 selectors combined). Must not be greater than 2000 characters.

symbols
string optional
BTC,ETH

Filter to specific coin symbols (CSV, case-insensitive, up to 100 selectors combined). Must not be greater than 1000 characters.

sort
string optional
-marketcap

Comma-separated sort fields; prefix with - for descending. Sortable: marketcap, rank, price, volume_24h, change_24h, change_7d. Must not be greater than 100 characters.

interval
string optional
24h

Movers window for /coins/gainers and /coins/losers only: 24h or 7d.

One of: 24h 7d

GET request - no request body.

Request

curl --request GET \
    --get "https://bitculator.com/api/v1/exchanges/binance-exchange/assets?page=1&per_page=50&type=coin&status=active&search=bitcoin&min_price=0.5&max_price=100000&min_marketcap=1000000&max_marketcap=5000000000000&min_volume=1000000&max_volume=100000000000&ids=38%2C39&slugs=bitcoin%2Cethereum&symbols=BTC%2CETH&sort=-marketcap&interval=24h" \
    --header "Authorization: Bearer {YOUR_API_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
5 endpoints

Wallets

Crypto wallet reviews - review score, supported-asset count, pros/cons counts, price model and release date, plus a grouped tag taxonomy on detail/compare responses. meta.top_score is the highest score across all wallets (use it to normalize scores into a 0–1 range).

List wallets

Free

Reviewed wallets with score, asset count, pros/cons counts, price model, status and release date. Paginated with Laravel's links + meta envelope, plus meta.top_score.

GET
https://bitculator.com/api/v1/wallets
Bearer
bc_••••••••••••••••

Keys are Bearer-only and carry the data-api ability - keep them server-side.

Query parameters

page
integer optional
1

Page number (1-based). Must be at least 1.

per_page
integer optional
50

Rows per page. The cap is plan-based (Free 100, Starter/Pro 250); exceeding it returns 422 rather than clamping. Must be at least 1. Must not be greater than 100.

search
string optional
ledger

Free-text match on wallet name. Must not be greater than 100 characters.

min_score
integer optional
50

Only wallets with a review score at or above this value. Must be at least 0.

max_score
integer optional
214

Only wallets with a review score at or below this value. Must be at least 0.

tags
string optional
12,34

Filter by tag taxonomy: comma-separated category-group ids (the same ids the web facet filters submit). Must not be greater than 1000 characters.

ids
string optional
175,317

Filter to specific wallet ids (CSV, up to 100). Must not be greater than 1000 characters.

slugs
string optional
frostsnap,coin98-fusion-card

Filter to specific wallet slugs (CSV, up to 100). Must not be greater than 2000 characters.

sort
string optional
-score

Comma-separated sort fields; prefix with - for descending. Sortable: score, released_at, assets, pros, cons. Must not be greater than 100 characters.

GET request - no request body.

Request

curl --request GET \
    --get "https://bitculator.com/api/v1/wallets?page=1&per_page=50&search=ledger&min_score=50&max_score=214&tags=12%2C34&ids=175%2C317&slugs=frostsnap%2Ccoin98-fusion-card&sort=-score" \
    --header "Authorization: Bearer {YOUR_API_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"

Wallet release timeline

Free

The wallet list pinned to released_at descending (undated wallets last). Same row shape and pagination envelope as List wallets.

GET
https://bitculator.com/api/v1/wallets/timeline
Bearer
bc_••••••••••••••••

Keys are Bearer-only and carry the data-api ability - keep them server-side.

Query parameters

page
integer optional
1

Page number (1-based). Must be at least 1.

per_page
integer optional
50

Rows per page. The cap is plan-based (Free 100, Starter/Pro 250); exceeding it returns 422 rather than clamping. Must be at least 1. Must not be greater than 100.

search
string optional
ledger

Free-text match on wallet name. Must not be greater than 100 characters.

min_score
integer optional
50

Only wallets with a review score at or above this value. Must be at least 0.

max_score
integer optional
214

Only wallets with a review score at or below this value. Must be at least 0.

tags
string optional
12,34

Filter by tag taxonomy: comma-separated category-group ids (the same ids the web facet filters submit). Must not be greater than 1000 characters.

ids
string optional
175,317

Filter to specific wallet ids (CSV, up to 100). Must not be greater than 1000 characters.

slugs
string optional
frostsnap,coin98-fusion-card

Filter to specific wallet slugs (CSV, up to 100). Must not be greater than 2000 characters.

sort
string optional
-score

Comma-separated sort fields; prefix with - for descending. Sortable: score, released_at, assets, pros, cons. Must not be greater than 100 characters.

GET request - no request body.

Request

curl --request GET \
    --get "https://bitculator.com/api/v1/wallets/timeline?page=1&per_page=50&search=ledger&min_score=50&max_score=214&tags=12%2C34&ids=175%2C317&slugs=frostsnap%2Ccoin98-fusion-card&sort=-score" \
    --header "Authorization: Bearer {YOUR_API_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"

Compare wallets

Free

Side-by-side comparison of 2–4 wallets with their full grouped tag taxonomy. data[] preserves the requested slug order so consumers can render columns positionally.

GET
https://bitculator.com/api/v1/wallets/compare
Bearer
bc_••••••••••••••••

Keys are Bearer-only and carry the data-api ability - keep them server-side.

Query parameters

slugs
string required
frostsnap,coin98-fusion-card

2–4 distinct wallet slugs, comma-separated.

GET request - no request body.

Request

curl --request GET \
    --get "https://bitculator.com/api/v1/wallets/compare?slugs=frostsnap%2Ccoin98-fusion-card" \
    --header "Authorization: Bearer {YOUR_API_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"

Get wallet detail

Free

Full single-wallet profile including the grouped tag taxonomy: categories is a list of {group, tags[]} where each tag has a slug, name and optional value. meta.top_score is the highest score across all wallets.

GET
https://bitculator.com/api/v1/wallets/{slug}
Bearer
bc_••••••••••••••••

Keys are Bearer-only and carry the data-api ability - keep them server-side.

Path parameters

slug
string required
frostsnap

The wallet slug.

GET request - no request body.

Request

curl --request GET \
    --get "https://bitculator.com/api/v1/wallets/frostsnap" \
    --header "Authorization: Bearer {YOUR_API_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"

Wallet supported coins

Free

Coins the wallet supports, returned in the same shape as List coins and accepting the same filters/sort.

GET
https://bitculator.com/api/v1/wallets/{slug}/assets
Bearer
bc_••••••••••••••••

Keys are Bearer-only and carry the data-api ability - keep them server-side.

Path parameters

slug
string required
frostsnap

The wallet slug.

Query parameters

page
integer optional
1

Page number (1-based). Must be at least 1.

per_page
integer optional
50

Rows per page. The cap is plan-based (Free 100, Starter/Pro 250); exceeding it returns 422 rather than clamping. Must be at least 1. Must not be greater than 100.

type
string optional
coin

Restrict to a single asset type: coin or token.

One of: coin token

status
string optional
active

Listing status: active, delisted, untracked, progressing, awaiting or preparing. Defaults to all public statuses.

One of: active delisted untracked progressing awaiting preparing

search
string optional
bitcoin

Free-text match on name or symbol. Must not be greater than 100 characters.

min_price
number optional
0.5

Only coins priced at or above this USD value. Must be at least 0.

max_price
number optional
100000

Only coins priced at or below this USD value. Must be at least 0.

min_marketcap
number optional
1000000

Only coins with a USD marketcap at or above this value. Must be at least 0.

max_marketcap
number optional
5000000000000

Only coins with a USD marketcap at or below this value. Must be at least 0.

min_volume
number optional
1000000

Only coins with 24h USD volume at or above this value. Must be at least 0.

max_volume
number optional
100000000000

Only coins with 24h USD volume at or below this value. Must be at least 0.

ids
string optional
38,39

Filter to specific coin ids (CSV, up to 100 selectors combined with slugs/symbols). Must not be greater than 1000 characters.

slugs
string optional
bitcoin,ethereum

Filter to specific coin slugs (CSV, up to 100 selectors combined). Must not be greater than 2000 characters.

symbols
string optional
BTC,ETH

Filter to specific coin symbols (CSV, case-insensitive, up to 100 selectors combined). Must not be greater than 1000 characters.

sort
string optional
-marketcap

Comma-separated sort fields; prefix with - for descending. Sortable: marketcap, rank, price, volume_24h, change_24h, change_7d. Must not be greater than 100 characters.

interval
string optional
24h

Movers window for /coins/gainers and /coins/losers only: 24h or 7d.

One of: 24h 7d

GET request - no request body.

Request

curl --request GET \
    --get "https://bitculator.com/api/v1/wallets/frostsnap/assets?page=1&per_page=50&type=coin&status=active&search=bitcoin&min_price=0.5&max_price=100000&min_marketcap=1000000&max_marketcap=5000000000000&min_volume=1000000&max_volume=100000000000&ids=38%2C39&slugs=bitcoin%2Cethereum&symbols=BTC%2CETH&sort=-marketcap&interval=24h" \
    --header "Authorization: Bearer {YOUR_API_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
3 endpoints

Global Market

Market-wide aggregates - total marketcap and volume, asset/exchange/pair/market counts, BTC/ETH dominance with a rank-based top-3, the market Fear & Greed reading, plus a top-100 heatmap and marketcap/volume history.

Global market snapshot

Free

One-shot market overview: total marketcap and 24h volume, counts of cryptocurrencies / tokens / exchanges / pairs / markets, dominance (BTC & ETH share plus the rank-based top3), and the market fear_greed reading.

GET
https://bitculator.com/api/v1/global
Bearer
bc_••••••••••••••••

Keys are Bearer-only and carry the data-api ability - keep them server-side.

GET request - no request body.

Request

curl --request GET \
    --get "https://bitculator.com/api/v1/global" \
    --header "Authorization: Bearer {YOUR_API_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"

Market heatmap

Starter

Top-100 treemap rows plus framing stats (total marketcap/volume, dominance and the market Fear & Greed score) - the API twin of the web heatmap.

GET
https://bitculator.com/api/v1/global/heatmap
Bearer
bc_••••••••••••••••

Keys are Bearer-only and carry the data-api ability - keep them server-side.

GET request - no request body.

Request

curl --request GET \
    --get "https://bitculator.com/api/v1/global/heatmap" \
    --header "Authorization: Bearer {YOUR_API_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"

Global marketcap / volume history

Starter

Total-market time series for marketcap or volume. Granularity follows the period: 24h = half-hourly, 7d = hourly, 30d/all = daily (finer rollups are pruned).

GET
https://bitculator.com/api/v1/global/history/{metric}
Bearer
bc_••••••••••••••••

Keys are Bearer-only and carry the data-api ability - keep them server-side.

Path parameters

metric
string required
marketcap

Which series: marketcap or volume.

Query parameters

period
string optional
7d

24h, 7d, 30d or all (default 24h).

GET request - no request body.

Request

curl --request GET \
    --get "https://bitculator.com/api/v1/global/history/marketcap?period=7d" \
    --header "Authorization: Bearer {YOUR_API_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
4 endpoints

Sentiment

Market and per-coin sentiment indices. Fear & Greed and Bull/Bear are 15-minute-refresh SNAPSHOTS - only the current reading exists, there is no time series for them. Altseason carries full daily history. indicators is the market-wide technical tally.

Fear & Greed index

Free

The current Fear & Greed reading (a 15-minute snapshot - no history). Omit coin for the market-wide index, or pass a coin slug for a per-coin reading. intervals carries the 7d/30d sub-scores and their component breakdown.

GET
https://bitculator.com/api/v1/sentiment/fear-greed
Bearer
bc_••••••••••••••••

Keys are Bearer-only and carry the data-api ability - keep them server-side.

Query parameters

coin
string optional
bitcoin

Coin slug for a per-coin reading; omit for the market index.

GET request - no request body.

Request

curl --request GET \
    --get "https://bitculator.com/api/v1/sentiment/fear-greed?coin=bitcoin" \
    --header "Authorization: Bearer {YOUR_API_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"

Bull / Bear index

Starter

The current Bull/Bear reading (a 15-minute snapshot - no history). Omit coin for the market-wide index, or pass a coin slug for a per-coin reading.

GET
https://bitculator.com/api/v1/sentiment/bull-bear
Bearer
bc_••••••••••••••••

Keys are Bearer-only and carry the data-api ability - keep them server-side.

Query parameters

coin
string optional
bitcoin

Coin slug for a per-coin reading; omit for the market index.

GET request - no request body.

Request

curl --request GET \
    --get "https://bitculator.com/api/v1/sentiment/bull-bear?coin=bitcoin" \
    --header "Authorization: Bearer {YOUR_API_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"

Altseason index

Starter

The current altseason reading (count of coins beating BTC out of the top 100), with optional daily history. Unlike Fear & Greed, altseason has full daily history - pass days to include it.

GET
https://bitculator.com/api/v1/sentiment/altseason
Bearer
bc_••••••••••••••••

Keys are Bearer-only and carry the data-api ability - keep them server-side.

Query parameters

days
integer optional
30

Days of daily history to include (1–365; 0/omit = current only).

GET request - no request body.

Request

curl --request GET \
    --get "https://bitculator.com/api/v1/sentiment/altseason?days=30" \
    --header "Authorization: Bearer {YOUR_API_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"

Market indicator tally

Pro

The market-wide technical tally - 25 indicator categories rolled up, each with its current state, score and category data.

GET
https://bitculator.com/api/v1/sentiment/indicators
Bearer
bc_••••••••••••••••

Keys are Bearer-only and carry the data-api ability - keep them server-side.

GET request - no request body.

Request

curl --request GET \
    --get "https://bitculator.com/api/v1/sentiment/indicators" \
    --header "Authorization: Bearer {YOUR_API_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
14 endpoints

Indicators

Per-coin technical indicators. Each indicator is its own dedicated endpoint - momentum oscillators (RSI, Stoch-RSI, CCI, MFI, Williams %R), trend and price baselines (SMA, MACD, VWAP), volume flow (OBV, CMF), trend strength (ADX) and volatility - plus a single multi-indicator snapshot. Every family is a DAILY series computed from daily candles (full retention; young assets return leading warm-up nulls until enough history exists). Price-scale families (SMA, VWAP, MACD, OBV) emit decimal strings; bounded oscillators emit numbers. A few long-window periods require a paid plan - noted on each endpoint.

Indicator snapshot

Pro

The multi-indicator snapshot - every indicator category's latest state (bullish/bearish/sheepish…), score and raw data, in one payload. Ideal for a dashboard at-a-glance read; use the dedicated per-indicator endpoints below for full daily history.

GET
https://bitculator.com/api/v1/coins/{slug}/indicators
Bearer
bc_••••••••••••••••

Keys are Bearer-only and carry the data-api ability - keep them server-side.

Path parameters

slug
string required
bitcoin

The coin slug.

GET request - no request body.

Request

curl --request GET \
    --get "https://bitculator.com/api/v1/coins/bitcoin/indicators" \
    --header "Authorization: Bearer {YOUR_API_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"

RSI (Relative Strength Index)

Starter

Daily Relative Strength Index - a momentum oscillator bounded 0–100 that measures the speed and magnitude of recent price moves. Above 70 is conventionally overbought, below 30 oversold. Windows: 7, 14, 21, 28 days (default 14) - the 21- and 28-day windows require the Starter plan or higher. Young coins return leading warm-up nulls.

GET
https://bitculator.com/api/v1/coins/{slug}/indicators/rsi
Bearer
bc_••••••••••••••••

Keys are Bearer-only and carry the data-api ability - keep them server-side.

Path parameters

slug
string required
bitcoin

The coin slug.

Query parameters

period
integer optional
14

Window length - one of 7, 14, 21, 28 (default 14).

start
string optional
2026-06-01

ISO date lower bound.

end
string optional
2026-06-30

ISO date upper bound.

limit
integer optional
30

Max rows (1–1000, default 365).

GET request - no request body.

Request

curl --request GET \
    --get "https://bitculator.com/api/v1/coins/bitcoin/indicators/rsi?period=14&start=2026-06-01&end=2026-06-30&limit=30" \
    --header "Authorization: Bearer {YOUR_API_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"

Stochastic RSI

Pro

Daily Stochastic RSI - applies the stochastic oscillator to RSI itself, giving a faster, more sensitive 0–100 momentum read with %K and %D lines that cross to signal turns. Windows: 7, 14, 21, 28 days (default 14) - the 21- and 28-day windows require the Starter plan or higher.

GET
https://bitculator.com/api/v1/coins/{slug}/indicators/stoch-rsi
Bearer
bc_••••••••••••••••

Keys are Bearer-only and carry the data-api ability - keep them server-side.

Path parameters

slug
string required
bitcoin

The coin slug.

Query parameters

period
integer optional
14

Window length - one of 7, 14, 21, 28 (default 14).

start
string optional
2026-06-01

ISO date lower bound.

end
string optional
2026-06-30

ISO date upper bound.

limit
integer optional
30

Max rows (1–1000, default 365).

GET request - no request body.

Request

curl --request GET \
    --get "https://bitculator.com/api/v1/coins/bitcoin/indicators/stoch-rsi?period=14&start=2026-06-01&end=2026-06-30&limit=30" \
    --header "Authorization: Bearer {YOUR_API_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"

SMA (Simple Moving Average)

Starter

Daily Simple Moving Average - the arithmetic mean of the closing price over the window, the classic trend baseline traders read for support, resistance and golden/death crosses. Windows: 50, 100, 200 days (default 50). Values are decimal strings on the price scale.

GET
https://bitculator.com/api/v1/coins/{slug}/indicators/sma
Bearer
bc_••••••••••••••••

Keys are Bearer-only and carry the data-api ability - keep them server-side.

Path parameters

slug
string required
bitcoin

The coin slug.

Query parameters

period
integer optional
50

Window length - one of 50, 100, 200 (default 50).

start
string optional
2026-06-01

ISO date lower bound.

end
string optional
2026-06-30

ISO date upper bound.

limit
integer optional
30

Max rows (1–1000, default 365).

GET request - no request body.

Request

curl --request GET \
    --get "https://bitculator.com/api/v1/coins/bitcoin/indicators/sma?period=50&start=2026-06-01&end=2026-06-30&limit=30" \
    --header "Authorization: Bearer {YOUR_API_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"

CCI (Commodity Channel Index)

Starter

Daily Commodity Channel Index - measures how far price has deviated from its statistical mean; readings beyond ±100 flag strong trends or potential reversals. Windows: 20, 50, 100 days (default 20).

GET
https://bitculator.com/api/v1/coins/{slug}/indicators/cci
Bearer
bc_••••••••••••••••

Keys are Bearer-only and carry the data-api ability - keep them server-side.

Path parameters

slug
string required
bitcoin

The coin slug.

Query parameters

period
integer optional
20

Window length - one of 20, 50, 100 (default 20).

start
string optional
2026-06-01

ISO date lower bound.

end
string optional
2026-06-30

ISO date upper bound.

limit
integer optional
30

Max rows (1–1000, default 365).

GET request - no request body.

Request

curl --request GET \
    --get "https://bitculator.com/api/v1/coins/bitcoin/indicators/cci?period=20&start=2026-06-01&end=2026-06-30&limit=30" \
    --header "Authorization: Bearer {YOUR_API_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"

MFI (Money Flow Index)

Pro

Daily Money Flow Index - a volume-weighted RSI (0–100) that factors trading volume into momentum, often called "volume RSI"; above 80 overbought, below 20 oversold. Windows: 7, 14, 28 days (default 14).

GET
https://bitculator.com/api/v1/coins/{slug}/indicators/mfi
Bearer
bc_••••••••••••••••

Keys are Bearer-only and carry the data-api ability - keep them server-side.

Path parameters

slug
string required
bitcoin

The coin slug.

Query parameters

period
integer optional
14

Window length - one of 7, 14, 28 (default 14).

start
string optional
2026-06-01

ISO date lower bound.

end
string optional
2026-06-30

ISO date upper bound.

limit
integer optional
30

Max rows (1–1000, default 365).

GET request - no request body.

Request

curl --request GET \
    --get "https://bitculator.com/api/v1/coins/bitcoin/indicators/mfi?period=14&start=2026-06-01&end=2026-06-30&limit=30" \
    --header "Authorization: Bearer {YOUR_API_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"

Williams %R

Pro

Daily Williams %R - a momentum oscillator bounded −100–0 that maps where the close sits within the recent high-low range; above −20 overbought, below −80 oversold. Windows: 14, 20, 50 days (default 14).

GET
https://bitculator.com/api/v1/coins/{slug}/indicators/williams-r
Bearer
bc_••••••••••••••••

Keys are Bearer-only and carry the data-api ability - keep them server-side.

Path parameters

slug
string required
bitcoin

The coin slug.

Query parameters

period
integer optional
14

Window length - one of 14, 20, 50 (default 14).

start
string optional
2026-06-01

ISO date lower bound.

end
string optional
2026-06-30

ISO date upper bound.

limit
integer optional
30

Max rows (1–1000, default 365).

GET request - no request body.

Request

curl --request GET \
    --get "https://bitculator.com/api/v1/coins/bitcoin/indicators/williams-r?period=14&start=2026-06-01&end=2026-06-30&limit=30" \
    --header "Authorization: Bearer {YOUR_API_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"

Price volatility

Pro

Daily price-volatility index - the dispersion of daily returns over the window, a normalized read on how choppy price action has been. Windows: 7, 14, 30 days (default 7) - the 30-day window requires the Starter plan or higher.

GET
https://bitculator.com/api/v1/coins/{slug}/indicators/price-volatility
Bearer
bc_••••••••••••••••

Keys are Bearer-only and carry the data-api ability - keep them server-side.

Path parameters

slug
string required
bitcoin

The coin slug.

Query parameters

period
integer optional
7

Window length - one of 7, 14, 30 (default 7).

start
string optional
2026-06-01

ISO date lower bound.

end
string optional
2026-06-30

ISO date upper bound.

limit
integer optional
30

Max rows (1–1000, default 365).

GET request - no request body.

Request

curl --request GET \
    --get "https://bitculator.com/api/v1/coins/bitcoin/indicators/price-volatility?period=7&start=2026-06-01&end=2026-06-30&limit=30" \
    --header "Authorization: Bearer {YOUR_API_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"

Volume volatility

Starter

Daily volume-volatility index - the dispersion of daily trading volume over the window, a read on how erratic participation has been. Windows: 7, 14, 30 days (default 7) - the 30-day window requires the Starter plan or higher.

GET
https://bitculator.com/api/v1/coins/{slug}/indicators/volume-volatility
Bearer
bc_••••••••••••••••

Keys are Bearer-only and carry the data-api ability - keep them server-side.

Path parameters

slug
string required
bitcoin

The coin slug.

Query parameters

period
integer optional
7

Window length - one of 7, 14, 30 (default 7).

start
string optional
2026-06-01

ISO date lower bound.

end
string optional
2026-06-30

ISO date upper bound.

limit
integer optional
30

Max rows (1–1000, default 365).

GET request - no request body.

Request

curl --request GET \
    --get "https://bitculator.com/api/v1/coins/bitcoin/indicators/volume-volatility?period=7&start=2026-06-01&end=2026-06-30&limit=30" \
    --header "Authorization: Bearer {YOUR_API_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"

MACD

Pro

Daily MACD (Moving Average Convergence Divergence) - the 12/26 EMA spread with a 9-period signal line and histogram, a staple trend-and-momentum indicator read for signal-line crossovers and zero-line shifts. Returns macd, signal and histogram as decimal strings. No window parameter.

GET
https://bitculator.com/api/v1/coins/{slug}/indicators/macd
Bearer
bc_••••••••••••••••

Keys are Bearer-only and carry the data-api ability - keep them server-side.

Path parameters

slug
string required
bitcoin

The coin slug.

Query parameters

start
string optional
2026-06-01

ISO date lower bound.

end
string optional
2026-06-30

ISO date upper bound.

limit
integer optional
30

Max rows (1–1000, default 365).

GET request - no request body.

Request

curl --request GET \
    --get "https://bitculator.com/api/v1/coins/bitcoin/indicators/macd?start=2026-06-01&end=2026-06-30&limit=30" \
    --header "Authorization: Bearer {YOUR_API_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"

OBV (On-Balance Volume)

Pro

Daily On-Balance Volume - a cumulative volume line that adds volume on up days and subtracts it on down days, tracking net buying vs. selling pressure and confirming (or diverging from) price trends. Single decimal-string series.

GET
https://bitculator.com/api/v1/coins/{slug}/indicators/obv
Bearer
bc_••••••••••••••••

Keys are Bearer-only and carry the data-api ability - keep them server-side.

Path parameters

slug
string required
bitcoin

The coin slug.

Query parameters

start
string optional
2026-06-01

ISO date lower bound.

end
string optional
2026-06-30

ISO date upper bound.

limit
integer optional
30

Max rows (1–1000, default 365).

GET request - no request body.

Request

curl --request GET \
    --get "https://bitculator.com/api/v1/coins/bitcoin/indicators/obv?start=2026-06-01&end=2026-06-30&limit=30" \
    --header "Authorization: Bearer {YOUR_API_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"

ADX (Average Directional Index)

Starter

Daily ADX with +DI/−DI - measures trend strength (adx) and direction (the plus_di/minus_di directional indicators). ADX above 25 signals a strong trend regardless of direction; the DI crossover signals which way. Single series, no window parameter.

GET
https://bitculator.com/api/v1/coins/{slug}/indicators/adx
Bearer
bc_••••••••••••••••

Keys are Bearer-only and carry the data-api ability - keep them server-side.

Path parameters

slug
string required
bitcoin

The coin slug.

Query parameters

start
string optional
2026-06-01

ISO date lower bound.

end
string optional
2026-06-30

ISO date upper bound.

limit
integer optional
30

Max rows (1–1000, default 365).

GET request - no request body.

Request

curl --request GET \
    --get "https://bitculator.com/api/v1/coins/bitcoin/indicators/adx?start=2026-06-01&end=2026-06-30&limit=30" \
    --header "Authorization: Bearer {YOUR_API_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"

VWAP (Volume-Weighted Average Price)

Pro

Daily VWAP - the average price weighted by volume, a core fair-value and execution reference; price above VWAP reads bullish, below bearish. Single decimal-string series, no window parameter.

GET
https://bitculator.com/api/v1/coins/{slug}/indicators/vwap
Bearer
bc_••••••••••••••••

Keys are Bearer-only and carry the data-api ability - keep them server-side.

Path parameters

slug
string required
bitcoin

The coin slug.

Query parameters

start
string optional
2026-06-01

ISO date lower bound.

end
string optional
2026-06-30

ISO date upper bound.

limit
integer optional
30

Max rows (1–1000, default 365).

GET request - no request body.

Request

curl --request GET \
    --get "https://bitculator.com/api/v1/coins/bitcoin/indicators/vwap?start=2026-06-01&end=2026-06-30&limit=30" \
    --header "Authorization: Bearer {YOUR_API_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"

CMF (Chaikin Money Flow)

Starter

Daily Chaikin Money Flow - sums money-flow volume over the period to gauge accumulation vs. distribution; positive reads as net buying pressure, negative as selling. Bounded around ±1. Single series, no window parameter.

GET
https://bitculator.com/api/v1/coins/{slug}/indicators/cmf
Bearer
bc_••••••••••••••••

Keys are Bearer-only and carry the data-api ability - keep them server-side.

Path parameters

slug
string required
bitcoin

The coin slug.

Query parameters

start
string optional
2026-06-01

ISO date lower bound.

end
string optional
2026-06-30

ISO date upper bound.

limit
integer optional
30

Max rows (1–1000, default 365).

GET request - no request body.

Request

curl --request GET \
    --get "https://bitculator.com/api/v1/coins/bitcoin/indicators/cmf?start=2026-06-01&end=2026-06-30&limit=30" \
    --header "Authorization: Bearer {YOUR_API_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
3 endpoints

Conversion

Convert between any two active assets (crypto AND fiat), and list the currencies usable as conversion legs. Values are decimal strings. Fiat FX rates refresh ~twice daily; crypto rates ~every minute.

Convert between assets

Free

Server-side conversion between any two active assets (crypto AND fiat). to accepts a CSV for multi-target conversion; reversing is just swapping from/to. Conversion is linear, so value = unit_rate * amount. Fiat FX rates refresh ~twice daily; crypto rates ~every minute.

GET
https://bitculator.com/api/v1/convert
Bearer
bc_••••••••••••••••

Keys are Bearer-only and carry the data-api ability - keep them server-side.

Query parameters

from
string required
bitcoin

Source asset slug.

to
string required
ethereum

Target asset slug(s), comma-separated (up to 10).

amount
number optional
2.5

Amount of the source asset to convert (default 1).

GET request - no request body.

Request

curl --request GET \
    --get "https://bitculator.com/api/v1/convert?from=bitcoin&to=ethereum&amount=2.5" \
    --header "Authorization: Bearer {YOUR_API_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"

List fiat currencies

Free

The active fiat currencies with their USD FX rates: rate_per_usd (units per USD) and its inverse usd_value. Fiat FX rates refresh ~twice daily.

GET
https://bitculator.com/api/v1/fiats
Bearer
bc_••••••••••••••••

Keys are Bearer-only and carry the data-api ability - keep them server-side.

GET request - no request body.

Request

curl --request GET \
    --get "https://bitculator.com/api/v1/fiats" \
    --header "Authorization: Bearer {YOUR_API_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"

List conversion rates

Free

The vs-currencies usable as conversion legs - the top fiats, coins and tokens - each with a normalized usd_value (USD per one unit). Coin/token values refresh ~every minute; the slow fiat rates are cached separately (~twice daily).

GET
https://bitculator.com/api/v1/rates
Bearer
bc_••••••••••••••••

Keys are Bearer-only and carry the data-api ability - keep them server-side.

GET request - no request body.

Request

curl --request GET \
    --get "https://bitculator.com/api/v1/rates" \
    --header "Authorization: Bearer {YOUR_API_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
5 endpoints

Calculators

Server-side financial calculators mirroring the web tools: DCA, profit/loss and loan (which read cached market data), plus stateless compound-interest and staking math.

DCA calculator

Free

Dollar-cost averaging backtest over the coin's real daily price history: one buy of amount per interval between start and end. Pass series=true to include the full per-purchase series.

GET
https://bitculator.com/api/v1/calculators/dca
Bearer
bc_••••••••••••••••

Keys are Bearer-only and carry the data-api ability - keep them server-side.

Query parameters

slug
string required
bitcoin

The coin's slug identifier.

amount
number required
100

USD spent per purchase (0.01–1,000,000,000).

interval
string required
weekly

Purchase cadence: daily, weekly, monthly, quarterly or yearly.

start
string required
2024-01-01

date First purchase date (after 2008-12-31).

end
string optional
2025-01-01

date Last purchase date (defaults to today).

series
boolean optional
false

Include the per-purchase series in the payload.

GET request - no request body.

Request

curl --request GET \
    --get "https://bitculator.com/api/v1/calculators/dca?slug=bitcoin&amount=100&interval=weekly&start=2024-01-01&end=2025-01-01&series=" \
    --header "Authorization: Bearer {YOUR_API_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"

Profit / loss calculator

Free

What a buy-then-sell between two historical dates returned, using the coin's real prices on those dates. Fees are flat USD amounts, not percentages.

GET
https://bitculator.com/api/v1/calculators/profit-loss
Bearer
bc_••••••••••••••••

Keys are Bearer-only and carry the data-api ability - keep them server-side.

Query parameters

slug
string required
bitcoin

The coin's slug identifier.

amount
number required
1000

USD invested at buy_date (0.01–1,000,000,000).

buy_date
string required
2023-01-01

date Purchase date.

sell_date
string required
2025-01-01

date Sale date (on/after buy_date).

buy_fee
number optional
10

Flat purchase fee in USD (default 0).

sell_fee
number optional
10

Flat sale fee in USD (default 0).

GET request - no request body.

Request

curl --request GET \
    --get "https://bitculator.com/api/v1/calculators/profit-loss?slug=bitcoin&amount=1000&buy_date=2023-01-01&sell_date=2025-01-01&buy_fee=10&sell_fee=10" \
    --header "Authorization: Bearer {YOUR_API_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"

Compound interest calculator

Free

Pure math - no market data. Note that the rate applies PER COMPOUNDING PERIOD (the web calculator's convention), not per year.

GET
https://bitculator.com/api/v1/calculators/compound-interest
Bearer
bc_••••••••••••••••

Keys are Bearer-only and carry the data-api ability - keep them server-side.

Query parameters

principal
number required
10000

Starting balance in USD.

rate
number required
1

Interest rate in % per compounding period.

duration
integer required
5

Length of the projection (years are capped at 50).

duration_unit
string optional
years

years (default) or months.

compound_frequency
string optional
monthly

daily, weekly, monthly (default), quarterly or annually.

contribution
number optional
100

Recurring deposit in USD (default 0).

contribution_frequency
string optional
monthly

daily, weekly, monthly (default), quarterly or annually.

GET request - no request body.

Request

curl --request GET \
    --get "https://bitculator.com/api/v1/calculators/compound-interest?principal=10000&rate=1&duration=5&duration_unit=years&compound_frequency=monthly&contribution=100&contribution_frequency=monthly" \
    --header "Authorization: Bearer {YOUR_API_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"

Loan vs sell calculator

Free

Borrow against crypto vs sell it - compares both scenarios using the coin's CURRENT price. Informational projection, not financial advice.

GET
https://bitculator.com/api/v1/calculators/loan
Bearer
bc_••••••••••••••••

Keys are Bearer-only and carry the data-api ability - keep them server-side.

Query parameters

slug
string required
bitcoin

The coin's slug identifier.

crypto_amount
number required
2

How much of the coin you hold.

needed_cash
number required
50000

USD you need to free up.

term_months
integer optional
36

Loan term in months (default 36).

interest_rate
number optional
10

Loan APR in % (default 10).

ltv
number optional
50

Loan-to-value ratio in % (default 50).

expected_growth
number optional
25

Expected coin price growth over the term in % (default 25).

tax_rate
number optional
25

Capital-gains tax in % applied to the sale (default 25).

GET request - no request body.

Request

curl --request GET \
    --get "https://bitculator.com/api/v1/calculators/loan?slug=bitcoin&crypto_amount=2&needed_cash=50000&term_months=36&interest_rate=10&ltv=50&expected_growth=25&tax_rate=25" \
    --header "Authorization: Bearer {YOUR_API_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"

Staking rewards calculator

Free

Pure math - staking rewards with optional compounding and a validator commission. No market data is read.

GET
https://bitculator.com/api/v1/calculators/staking
Bearer
bc_••••••••••••••••

Keys are Bearer-only and carry the data-api ability - keep them server-side.

Query parameters

amount
number required
1000

Amount staked, in the staked asset's units.

period
number required
2

Length of the staking period (capped at the 50-year equivalent).

period_unit
string optional
years

years (default), months or days.

apy
number required
5

Advertised APY in %.

compound_frequency
string optional
monthly

never, daily, weekly, monthly (default) or yearly.

commission
number optional
10

Validator commission in %, taken from rewards (default 0).

GET request - no request body.

Request

curl --request GET \
    --get "https://bitculator.com/api/v1/calculators/staking?amount=1000&period=2&period_unit=years&apy=5&compound_frequency=monthly&commission=10" \
    --header "Authorization: Bearer {YOUR_API_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
8 endpoints

Editorial

Editorial articles - published (ACTIVE) only. locale picks the content language with per-field English fallback (the payload reports which locale actually won). Articles can be filtered by tag or by a related coin/exchange/wallet slug. API reads deliberately do NOT increment view counts.

Coin videos

Free

Curated videos attached to a coin (the coin page's Videos tab), paginated.

GET
https://bitculator.com/api/v1/coins/{slug}/videos
Bearer
bc_••••••••••••••••

Keys are Bearer-only and carry the data-api ability - keep them server-side.

Path parameters

slug
string required
bitcoin

The coin's slug identifier.

Query parameters

page
integer optional
1

Page number (1-based).

per_page
integer optional
10

Rows per page (1–50, default 10).

type
string optional
review

Filter by video type (e.g. overview, tutorial, explainer, review, analysis, news).

search
string optional
halving

Free-text match on the title.

GET request - no request body.

Request

curl --request GET \
    --get "https://bitculator.com/api/v1/coins/bitcoin/videos?page=1&per_page=10&type=review&search=halving" \
    --header "Authorization: Bearer {YOUR_API_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"

Coin insight timeline

Free

The coin's insight timeline - the same payload the asset page's insights panel uses, windowed by offset/limit.

GET
https://bitculator.com/api/v1/coins/{slug}/insights
Bearer
bc_••••••••••••••••

Keys are Bearer-only and carry the data-api ability - keep them server-side.

Path parameters

slug
string required
bitcoin

The coin's slug identifier.

Query parameters

locale
string optional
en

Content language (falls back to English).

offset
integer optional
0

Rows to skip (0–500, default 0).

limit
integer optional
5

Rows to return (1–50, default 5).

GET request - no request body.

Request

curl --request GET \
    --get "https://bitculator.com/api/v1/coins/bitcoin/insights?locale=en&offset=0&limit=5" \
    --header "Authorization: Bearer {YOUR_API_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"

List articles

Free

Published articles, newest first, paginated. Filter by tag or by a related coin / exchange / wallet slug, or free-text search. Each row is a summary (title, subtitle, tags, reading time, hero image, related entities, dates).

GET
https://bitculator.com/api/v1/articles
Bearer
bc_••••••••••••••••

Keys are Bearer-only and carry the data-api ability - keep them server-side.

Query parameters

page
integer optional
1

Page number (1-based).

per_page
integer optional
20

Rows per page (1–50, default 20).

locale
string optional
en

Content language (falls back to English).

tag
string optional
guide

Filter by tag: news, guide, tutorial, explainer, analysis, review, trading, overview or information.

coin
string optional
bitcoin

Filter to articles related to this coin slug.

exchange
string optional
binance-exchange

Filter to articles related to this exchange slug.

wallet
string optional
frostsnap

Filter to articles related to this wallet slug.

search
string optional
halving

Free-text match on heading/subheading.

GET request - no request body.

Request

curl --request GET \
    --get "https://bitculator.com/api/v1/articles?page=1&per_page=20&locale=en&tag=guide&coin=bitcoin&exchange=binance-exchange&wallet=frostsnap&search=halving" \
    --header "Authorization: Bearer {YOUR_API_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"

Get an article

Free

One published article with its full body, tags, hero image, helpful counters and related entities. locale picks the content language with per-field English fallback (the payload reports which locale actually won).

GET
https://bitculator.com/api/v1/articles/{slug}
Bearer
bc_••••••••••••••••

Keys are Bearer-only and carry the data-api ability - keep them server-side.

Path parameters

slug
string required
what-is-bitcoin

The article's slug.

Query parameters

locale
string optional
en

Content language (falls back to English).

GET request - no request body.

Request

curl --request GET \
    --get "https://bitculator.com/api/v1/articles/what-is-bitcoin?locale=en" \
    --header "Authorization: Bearer {YOUR_API_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"

Submit article feedback

Free

Registers a thumbs-up/down on an article - the same counters the web's helpful buttons use. Per-key throttling applies upstream.

POST
https://bitculator.com/api/v1/articles/{slug}/feedback
Bearer
bc_••••••••••••••••

Keys are Bearer-only and carry the data-api ability - keep them server-side.

Path parameters

slug
string required
what-is-bitcoin

The article's slug.

Body parameters

helpful
boolean required
true

true for helpful, false for not helpful.

Request

curl --request POST \
    "https://bitculator.com/api/v1/articles/what-is-bitcoin/feedback" \
    --header "Authorization: Bearer {YOUR_API_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"helpful\": true
}"

Get a video

Free

One curated video with its YouTube id, title, type, duration and the coins/exchanges/wallets it is attached to.

GET
https://bitculator.com/api/v1/videos/{id}
Bearer
bc_••••••••••••••••

Keys are Bearer-only and carry the data-api ability - keep them server-side.

Path parameters

id
integer required
87

The video id.

GET request - no request body.

Request

curl --request GET \
    --get "https://bitculator.com/api/v1/videos/87" \
    --header "Authorization: Bearer {YOUR_API_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"

List insights

Free

AI-generated market insights, paginated. Filter by type, a related coin slug or free-text search; locale picks the headline/summary language with English fallback.

GET
https://bitculator.com/api/v1/insights
Bearer
bc_••••••••••••••••

Keys are Bearer-only and carry the data-api ability - keep them server-side.

Query parameters

page
integer optional
1

Page number (1-based).

per_page
integer optional
20

Rows per page (1–50, default 20).

locale
string optional
en

Content language (falls back to English).

type
string optional
per_asset

Filter by insight type: per_asset, market_overview or narrative.

coin
string optional
bitcoin

Filter to insights about this coin slug.

search
string optional
etf

Free-text match on the headline.

sort
string optional
first_reported

Sort order: first_reported (default) or last_updated.

GET request - no request body.

Request

curl --request GET \
    --get "https://bitculator.com/api/v1/insights?page=1&per_page=20&locale=en&type=per_asset&coin=bitcoin&search=etf&sort=first_reported" \
    --header "Authorization: Bearer {YOUR_API_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"

Get an insight

Free

One insight with its full payload - headline, summary, source-article timeline and related coins.

GET
https://bitculator.com/api/v1/insights/{id}
Bearer
bc_••••••••••••••••

Keys are Bearer-only and carry the data-api ability - keep them server-side.

Path parameters

id
integer required
101

The insight id.

Query parameters

locale
string optional
en

Content language (falls back to English).

GET request - no request body.

Request

curl --request GET \
    --get "https://bitculator.com/api/v1/insights/101?locale=en" \
    --header "Authorization: Bearer {YOUR_API_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
3 endpoints

Alarms

Price-alarm CRUD - the same alarms the web app manages. Alarms consume the key owner's alarm inventory balance, are TARGET-type on coins only, and an above/below vs current-value guard blocks alarms that would self-trigger instantly. Key-scoped (the API key sets the owner) and never response-cached.

List alarms

Free

The key owner's alarms, newest first, paginated. Filter by status, direction or notification channel.

GET
https://bitculator.com/api/v1/alarms
Bearer
bc_••••••••••••••••

Keys are Bearer-only and carry the data-api ability - keep them server-side.

Query parameters

page
integer optional
1

Page number (1-based).

per_page
integer optional
25

Rows per page (1–100, default 25).

status
string optional
active

Filter by state: active or triggered.

direction
string optional
above

Filter by trigger direction: above or below.

notification
string optional
email

Filter by delivery channel: email, push or webhook.

GET request - no request body.

Request

curl --request GET \
    --get "https://bitculator.com/api/v1/alarms?page=1&per_page=25&status=active&direction=above&notification=email" \
    --header "Authorization: Bearer {YOUR_API_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"

Create an alarm

Free

Creates a TARGET alarm on a coin and spends one alarm slot from the key owner's balance. The target is checked against the coin's current value so the alarm cannot self-trigger instantly: an above alarm must target more than the current value, a below alarm less.

POST
https://bitculator.com/api/v1/alarms
Bearer
bc_••••••••••••••••

Keys are Bearer-only and carry the data-api ability - keep them server-side.

Body parameters

name
string required
BTC six figures

A label for the alarm (max 255 characters).

coin
string required
bitcoin

The coin's slug identifier.

metric
string required
rate

The watched metric: rate, volume or marketcap.

direction
string required
above

Trigger direction: above or below.

target
number required
100000

The threshold value (must sit on the direction side of the coin's current value).

notification
string required
email

Delivery channel: email, push or webhook.

Request

curl --request POST \
    "https://bitculator.com/api/v1/alarms" \
    --header "Authorization: Bearer {YOUR_API_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"name\": \"BTC six figures\",
    \"coin\": \"bitcoin\",
    \"metric\": \"rate\",
    \"direction\": \"above\",
    \"target\": 100000,
    \"notification\": \"email\"
}"

Delete an alarm

Free

Deletes one of the key owner's alarms and refunds the alarm slot it consumed.

DELETE
https://bitculator.com/api/v1/alarms/{id}
Bearer
bc_••••••••••••••••

Keys are Bearer-only and carry the data-api ability - keep them server-side.

Path parameters

id
integer required
42

The alarm id.

Request

curl --request DELETE \
    "https://bitculator.com/api/v1/alarms/42" \
    --header "Authorization: Bearer {YOUR_API_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
5 endpoints

Webhooks

Bitculator POSTs each event as JSON with an HMAC signature header:

X-Bitculator-Signature: t=<unix-ts>,v1=<hex hmac_sha256("<ts>.<raw-body>", secret)>
X-Bitculator-Event: alarm.triggered

Verify it by recomputing the HMAC over "." with your endpoint secret and comparing in constant time; reject if t is older than a few minutes (replay guard). Example (PHP):

[$t, $v1] = sscanf($_SERVER['HTTP_X_BITCULATOR_SIGNATURE'], 't=%d,v1=%s');
$expected = hash_hmac('sha256', $t.'.'.file_get_contents('php://input'), $secret);
abort_unless(hash_equals($expected, $v1) && abs(time() - $t) < 300, 403);

Supported events: alarm.triggered. Deliveries retry 3× with backoff; an endpoint auto-disables after 10 consecutive failed deliveries.

List webhook endpoints

Free

The key owner's webhook endpoints, newest first. Signing secrets are never included - each secret is shown exactly once, at creation.

GET
https://bitculator.com/api/v1/webhooks
Bearer
bc_••••••••••••••••

Keys are Bearer-only and carry the data-api ability - keep them server-side.

GET request - no request body.

Request

curl --request GET \
    --get "https://bitculator.com/api/v1/webhooks" \
    --header "Authorization: Bearer {YOUR_API_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"

Create a webhook endpoint

Free

Registers an HTTPS endpoint (max 5 per account) for event deliveries. The response includes the signing secret - the ONLY time it is ever shown, so store it immediately.

POST
https://bitculator.com/api/v1/webhooks
Bearer
bc_••••••••••••••••

Keys are Bearer-only and carry the data-api ability - keep them server-side.

Body parameters

url
string required
https://example.com/webhooks/bitculator

The HTTPS delivery URL. Public hosts only - internal/private addresses are rejected.

events
string[] required
["alarm.triggered"]

Events to subscribe to. Allowed values: alarm.triggered.

Request

curl --request POST \
    "https://bitculator.com/api/v1/webhooks" \
    --header "Authorization: Bearer {YOUR_API_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"url\": \"https:\\/\\/example.com\\/webhooks\\/bitculator\",
    \"events\": [
        \"alarm.triggered\"
    ]
}"

Delete a webhook endpoint

Free

Deletes one of the key owner's webhook endpoints. Pending deliveries to it are abandoned.

DELETE
https://bitculator.com/api/v1/webhooks/{id}
Bearer
bc_••••••••••••••••

Keys are Bearer-only and carry the data-api ability - keep them server-side.

Path parameters

id
integer required
7

The webhook endpoint id.

Request

curl --request DELETE \
    "https://bitculator.com/api/v1/webhooks/7" \
    --header "Authorization: Bearer {YOUR_API_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"

Send a test event

Free

Fires a signed alarm.triggered test event (test: true in the payload, real signature headers) so receivers can be verified end-to-end.

POST
https://bitculator.com/api/v1/webhooks/{id}/test
Bearer
bc_••••••••••••••••

Keys are Bearer-only and carry the data-api ability - keep them server-side.

Path parameters

id
integer required
7

The webhook endpoint id.

Request

curl --request POST \
    "https://bitculator.com/api/v1/webhooks/7/test" \
    --header "Authorization: Bearer {YOUR_API_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"

Webhook delivery log

Free

The endpoint's delivery attempts (kept 30 days), newest first, paginated.

GET
https://bitculator.com/api/v1/webhooks/{id}/deliveries
Bearer
bc_••••••••••••••••

Keys are Bearer-only and carry the data-api ability - keep them server-side.

Path parameters

id
integer required
7

The webhook endpoint id.

Query parameters

page
integer optional
1

Page number (1-based).

per_page
integer optional
25

Rows per page (1–100, default 25).

GET request - no request body.

Request

curl --request GET \
    --get "https://bitculator.com/api/v1/webhooks/7/deliveries?page=1&per_page=25" \
    --header "Authorization: Bearer {YOUR_API_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
3 endpoints

Meta

API meta and introspection: an authenticated ping to verify a key and the middleware stack, current-key usage/quota, and the machine-readable OpenAPI spec.

OpenAPI spec

Free

The machine-readable OpenAPI 3 document for this API, as JSON - point codegen or API tooling at this URL. Public: no key required.

GET
https://bitculator.com/api/v1/openapi.json
Bearer
bc_••••••••••••••••

Keys are Bearer-only and carry the data-api ability - keep them server-side.

GET request - no request body.

Request

curl --request GET \
    --get "https://bitculator.com/api/v1/openapi.json" \
    --header "Authorization: Bearer {YOUR_API_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"

Ping

Free

An authenticated no-op for verifying a Data API key end-to-end (auth.api → per-plan burst throttle → monthly quota). It counts against the quota like any other call.

GET
https://bitculator.com/api/v1/ping
Bearer
bc_••••••••••••••••

Keys are Bearer-only and carry the data-api ability - keep them server-side.

GET request - no request body.

Request

curl --request GET \
    --get "https://bitculator.com/api/v1/ping" \
    --header "Authorization: Bearer {YOUR_API_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"

Key usage & quota

Free

Usage introspection for the calling key's owner: the Data API plan, its monthly limit, used and remaining (always matching the X-Quota-* headers), the current period window, and per-endpoint / per-token breakdowns. Embed-widget usage has its own plan and pool - it never appears here.

GET
https://bitculator.com/api/v1/usage
Bearer
bc_••••••••••••••••

Keys are Bearer-only and carry the data-api ability - keep them server-side.

GET request - no request body.

Request

curl --request GET \
    --get "https://bitculator.com/api/v1/usage" \
    --header "Authorization: Bearer {YOUR_API_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"