/api/indicators/halving
GETPartial

Bitcoin halving countdown and history

Bitcoin halving countdown and history

GET/api/indicators/halving
Partial coverage. Block height is live. `current_difficulty` carries the network difficulty with its timestamp and source; `difficulty` (retarget progress) is `null` while its source is unavailable.

Request

This endpoint takes no parameters.

Example request

curl -s "https://www.coinboss.com/api/indicators/halving"

Response fields

The field table is generated from real responses, so it lists exactly what the endpoint returns. Paths use a[] for array items and {*} for objects keyed by a dynamic name such as a coin or an exchange.

FieldTypeUnitDescription
successboolean—true when the request succeeded. On failure the body is `{ success: false, code, error, request_id }`.
fetched_atnumbermsWhen CoinBoss fetched the data from the source.
heightnumber—Block height.
halvingobject—Bitcoin halving countdown computed from the current block height.
halving.epochnumbercountNumber of halvings that have already happened: floor(height ÷ 210,000).
halving.last_halving_heightnumberblocksBlock height of the most recent halving.
halving.next_halving_heightnumberblocksBlock height at which the next halving happens.
halving.remaining_blocksnumberblocksBlocks left until the next halving.
halving.progress_pctnumber%Progress through the current 210,000-block epoch: (height − `last_halving_height`) ÷ 210,000 × 100.
halving.avg_block_msnumbermsRecent average block interval from a public blockchain data source; 600000 is used when it is unavailable.
halving.eta_msnumbermsEstimated time of the next halving: now + `remaining_blocks` × `avg_block_ms`. An estimate that moves with the block interval.
halving.current_rewardnumberBTCCurrent block subsidy: 50 ÷ 2^`epoch`.
halving.next_rewardnumberBTCBlock subsidy after the next halving: half of `current_reward`.
halving.historyarray—Historical points, oldest first unless stated.
halving.history[]object—Historical points, oldest first unless stated.
halving.history[].heightnumber—Block height.
halving.history[].datestring—Calendar date (UTC).
halving.history[].rewardnumberBTCBlock subsidy that applied from that halving on.
difficultynull—Always null: an estimate of the next difficulty adjustment is not provided.
current_difficultyobject—Current Bitcoin mining difficulty with its read time.
current_difficulty.valuenumber—Value.
current_difficulty.as_ofnumbermsTime the difficulty was read.
current_difficulty.sourcestring—Where the value comes from.
sourcesobject—Data sources.
sources.heightstring—Block height.
sources.block_intervalstring—Name of the source of `avg_block_ms`; null when the 10-minute default was used.
sources.current_difficultystring—Origin of the difficulty value.

Generated 2026-11-11 23:01 UTC from 1 real responses.

Example response

/api/indicators/halving · Real response captured 2026-11-13 03:53:39 UTC. Long arrays and maps are shortened for display: halving.history had 4 items.

  • {
    • "success": true,
    • "fetched_at": 1794542020750,
    • "height": 975627,
    • "halving": {
      • "epoch": 4,
      • "last_halving_height": 840000,
      • "next_halving_height": 1050000,
      • "remaining_blocks": 74373,
      • "progress_pct": 64.58,
      • "avg_block_ms": 776283,
      • "eta_ms": 1852276516309,
      • "current_reward": 3.125,
      • "next_reward": 1.5625,
      • "history": [ … 2 ]
      },
    • "difficulty": null,
    • "current_difficulty": {
      • "value": 148364561003867,
      • "as_of": 1794542020750,
      • "source": "blockchain.info"
      },
    • "sources": {
      • "height": "blockchain.info",
      • "block_interval": "blockchain.info",
      • "current_difficulty": "blockchain.info"
      }
    }

Details

Authentication
None. Public endpoint.
Rate limit
1200 requests per minute per IP
Server cache
2m
Edge micro-cache
10s
Update frequency
on request, cached 2 minutes
Window
latest snapshot
Data sources
Bitcoin halving countdown computed in-house from the current block height reported by public blockchain APIs.
Exchange coverage
Bitcoin only; `difficulty` is always null.
Units
blocks; milliseconds (avg_block_ms, eta_ms); BTC (block reward); percent (progress)
Method
Next halving height = (epoch + 1) x 210000; ETA = now + remaining blocks x average block interval (600 s fallback); reward = 50 / 2^epoch.
Timestamps
Unix epoch milliseconds (UTC) unless the field description says otherwise
Response format
json
Stability
Stable

Live status

PartialChecked 2026-11-13 03:53:39 UTCHTTP 2001461 msSchema matches

Block height is live. `current_difficulty` carries the network difficulty with its timestamp and source; `difficulty` (retarget progress) is `null` while its source is unavailable.

Availability, last 30 days

100% of 407 checks passed

Errors

Failed calls share one shape on every endpoint. The full list is on the errors page. Errors and rate limits →

CodeHTTPMeaningWhat to do
INVALID_PARAM400A required parameter is missing or a value is not accepted. `param` names the parameter when it is known.Do not retry unchanged; fix the request.
UNAUTHORIZED401The `CB-API-KEY` header was sent but the key is unknown or revoked. Public data needs no key — drop the header or use a valid key.Do not retry unchanged.
FORBIDDEN403The route is not part of the public API (internal or account-only).Do not retry.
NOT_FOUND404Unknown route, or the requested coin / exchange / fund does not exist.Do not retry; check the path and identifiers against the catalog.
RATE_LIMITED429More requests than the per-minute limit. `Retry-After` gives the seconds to wait.Wait for `Retry-After`, then retry with backoff.
INTERNAL500Unexpected server error. The message is generic by design; quote `request_id` when reporting it.Retry once after a few seconds; report it with the request id if it persists.
UPSTREAM_FAILED503The data source behind this endpoint did not answer in time. No stale or substitute numbers are returned in its place.Retry with backoff; check the status page.
UNAVAILABLE501 / 503The dataset is temporarily not ready (cache warming) or the endpoint has no lawful public source yet.Retry later; the catalog marks endpoints that are unavailable by design.
REQUEST_FAILED200Some older endpoints answer HTTP 200 with `success: false`. Always check `success`, not only the HTTP status.Depends on the message; treat as a failed request.

Try it

GET/api/indicators/halvingPartial
Parameters

No parameters.

Request URLhttps://www.coinboss.com/api/indicators/halving
Choose an endpoint and press “Send request”. The response, headers and timing will appear here.