Coverage

Every number Bitcompare publishes about the size and depth of its yield dataset is computed here, from the live database, in one place. Read it before you buy, and read it again before you cite: the data-room figures, the marketing pages, and this endpoint cannot disagree because they are the same query.

Access and caching

No key is needed. Every plan, including anonymous, gets the same body.

PlanAccess
Anonymous (no key)Full
Free / Starter / GrowthFull
Pro / EnterpriseFull

The aggregate queries touch several tables, so the response is computed at most once an hour and served with Cache-Control: public, max-age=3600, s-maxage=3600. generatedAt tells you when the figures were last computed. Anonymous calls count against the per-IP Free rate limit (30 req/min); with a key they count against your plan's budget.


How to read it

The report is built around a few honesty rules; knowing them stops you mis-quoting it.

  • Yield is the headline, price ticks are context. providers.servingYield and rates.servableYield count lending, borrowing, and staking only. Spot price ticks are reported separately in rates.servablePriceTicks and never folded into a headline figure.
  • Observed is not the same as reconstructed. observations.observed are rows written by live collection since observedFirstAt; they are append-only from that point. observations.reconstructed were rebuilt from daily history back to reconstructedBackTo and are labelled backfill in the rate-change feed. Quote the observed figure when you mean "history begins".
  • Substantive, not schema capacity. earnGraph.variantsWithSubstantiveTerms counts variants with at least two real term fields (a lockup, a tier, a minimum, a notice period); a flexible-only variant with nothing else known is not counted as "terms coverage".
  • Live prints versus backfilled prints. benchmark.livePrintDays is the number of days the Stablecoin Earn Benchmark has been computed by the daily job; backfilledPrintDays were reconstructed and are flagged as such on every print.

GET/api/v1/coverage

Get coverage

No parameters. Returns { data: report }.

Request

GET
/api/v1/coverage
curl https://api.bitcompare.net/api/v1/coverage

Response (captured 2026-09-16)

{
  "data": {
    "generatedAt": "2026-09-16T02:37:55.971Z",
    "providers": {
      "registered": 108,
      "enabled": 99,
      "servingYield": 35,
      "servingPriceOnly": 33,
      "attesting": 0,
      "byPlatformType": {
        "cefi": 63,
        "defi": 35,
        "hybrid": 1
      }
    },
    "rates": {
      "servableYield": 864,
      "servableYieldByCategory": {
        "borrowing": 194,
        "lending": 554,
        "staking": 116
      },
      "distinctYieldAssets": 364,
      "servablePriceTicks": 28489,
      "distinctPriceAssets": 18475
    },
    "observations": {
      "total": 424928,
      "observed": 277942,
      "observedFirstAt": "2026-07-21T00:57:15.412Z",
      "reconstructed": 146986,
      "reconstructedBackTo": "2025-12-18T23:59:59.000Z",
      "perDay30dObserved": 5267,
      "byCollectionMethod": {
        "pull_api": 271310,
        "backfill": 146986,
        "onchain": 6604,
        "multi_source": 27,
        "manual": 1
      }
    },
    "history": {
      "dailyRollupSince": "2025-12-18",
      "retentionYears": 5
    },
    "earnGraph": {
      "products": 1102,
      "productsWithServableRate": 863,
      "variants": 862,
      "providerConfirmedVariants": 0,
      "variantsWithSubstantiveTerms": 121,
      "variantsWithTvl": 487,
      "promotionalVariants": 0,
      "variantsByConfidenceBand": {
        "high": 862
      },
      "variantsBySourceMethod": {
        "pull_api": 854,
        "manual": 8
      }
    },
    "benchmark": {
      "series": "bei-stable",
      "firstPrintDay": "2025-12-18",
      "latestPrintDay": "2026-09-15",
      "livePrintDays": 30,
      "backfilledPrintDays": 235
    }
  }
}

Properties

providers

  • Name
    registered
    Type
    integer
    Description

    Providers in the registry, whether or not currently collected.

  • Name
    enabled
    Type
    integer
    Description

    Providers with collection switched on.

  • Name
    servingYield
    Type
    integer
    Description

    Distinct providers with at least one fresh lending, borrowing, or staking rate right now. This is the headline provider count.

  • Name
    servingPriceOnly
    Type
    integer
    Description

    Distinct providers serving only spot prices. Context, not part of the yield headline.

  • Name
    attesting
    Type
    integer
    Description

    Distinct providers with at least one provider_confirmed (attested) variant.

  • Name
    byPlatformType
    Type
    object
    Description

    Registered providers by cefi / defi / hybrid.

rates

  • Name
    servableYield
    Type
    integer
    Description

    Yield rates currently servable through /rates.

  • Name
    servableYieldByCategory
    Type
    object
    Description

    The same, split by lending / borrowing / staking.

  • Name
    distinctYieldAssets
    Type
    integer
    Description

    Distinct asset symbols with a servable yield rate.

  • Name
    servablePriceTicks
    Type
    integer
    Description

    Servable spot price ticks. Context only.

  • Name
    distinctPriceAssets
    Type
    integer
    Description

    Distinct assets with a spot price. Context only.

observations

  • Name
    total
    Type
    integer
    Description

    All rows in the observation log.

  • Name
    observed
    Type
    integer
    Description

    Rows written by live collection — the append-only, tamper-evident part.

  • Name
    observedFirstAt
    Type
    string | null
    Description

    ISO 8601 instant of the first live observation.

  • Name
    reconstructed
    Type
    integer
    Description

    Rows rebuilt from daily history and labelled backfill.

  • Name
    reconstructedBackTo
    Type
    string | null
    Description

    ISO 8601 instant the reconstruction reaches back to.

  • Name
    perDay30dObserved
    Type
    integer
    Description

    Average live observations per day over the last 30 days, backfill excluded.

  • Name
    byCollectionMethod
    Type
    object
    Description

    Row counts by collection method.

history

  • Name
    dailyRollupSince
    Type
    string | null
    Description

    YYYY-MM-DD the daily history rollup begins.

  • Name
    retentionYears
    Type
    integer
    Description

    How many years of observation history are retained.

earnGraph

  • Name
    products
    Type
    integer
    Description

    Products in the earn product graph.

  • Name
    productsWithServableRate
    Type
    integer
    Description

    Products with a servable rate behind them right now (versus ever created).

  • Name
    variants
    Type
    integer
    Description

    Active variants.

  • Name
    providerConfirmedVariants
    Type
    integer
    Description

    Variants whose terms the provider has attested.

  • Name
    variantsWithSubstantiveTerms
    Type
    integer
    Description

    Variants with at least two real term fields populated.

  • Name
    variantsWithTvl
    Type
    integer
    Description

    Variants carrying on-chain TVL.

  • Name
    promotionalVariants
    Type
    integer
    Description

    Variants flagged as time-limited promotions.

  • Name
    variantsByConfidenceBand
    Type
    object
    Description

    Active variants by high / medium / low / unknown.

  • Name
    variantsBySourceMethod
    Type
    object
    Description

    Active variants by baseline collection method.

benchmark

  • Name
    series
    Type
    string
    Description

    Always "bei-stable".

  • Name
    firstPrintDay
    Type
    string | null
    Description

    YYYY-MM-DD of the earliest print, backfill included.

  • Name
    latestPrintDay
    Type
    string | null
    Description

    YYYY-MM-DD of the most recent print.

  • Name
    livePrintDays
    Type
    integer
    Description

    Days with a print computed by the live daily job.

  • Name
    backfilledPrintDays
    Type
    integer
    Description

    Days whose print was reconstructed.


Errors

  • Name
    429 RATE_LIMIT_EXCEEDED
    Description

    Anonymous calls share the per-IP Free budget (30 req/min). Pass a key to use your plan's budget. See Rate Limiting.

No plan gating applies; there is no 403 on this endpoint. The full error envelope is described on the Errors page.

See also

Was this page helpful?