Bitcompare Earn API
The earn API from Bitcompare — 2 operation(s) for earn.
The earn API from Bitcompare — 2 operation(s) for earn.
Every API here is available over the APIs.io API and to AI agents over MCP.
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
find_apisBrowse and filter every API in the catalog.get_api_artifactsOne API's artifacts, grouped by type.get_openapiThe primary OpenAPI for this API.find_similar_apisAPIs that look like this one.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.curl "https://apis.io/api/v1/apis/bitcompare-net:bitcompare-net-earn-api"
curl "https://apis.io/api/v1/apis?limit=25"
Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.
openapi: 3.2.0
info:
title: Bitcompare Earn API
summary: Crypto yield data, coin metadata, prices, market stats, and stablecoin data.
description: Public REST API powering Bitcompare and the Bitcompare MCP server. Live and historical crypto yield data across lending, staking, borrowing, and stablecoin products, plus coin metadata, aggregated prices, market stats, and stablecoin peg-stability. Every endpoint is also exposed as an MCP tool at https://api.bitcompare.net/mcp.
version: 1.0.0
contact:
name: Bitcompare API support
email: info@bitcompare.net
url: https://docs.bitcompare.net
license:
name: Commercial
url: https://bitcompare.net/terms-of-use
termsOfService: https://bitcompare.net/terms-of-use
servers:
- url: https://api.bitcompare.net
description: Production
security:
- {}
- BearerAuth: []
tags:
- name: earn
paths:
/api/v1/rates/changes:
get:
tags:
- earn
operationId: get_rate_changes
summary: Rate change feed (observations)
description: 'The immutable rate-change log: every material yield move with full provenance (previous rate, raw value, multiplier, collection method, confidence, base/bonus split). Time-ascending pages via cursor. Unfiltered windows are capped at 31 days — filter by provider or symbol to walk deep history. Use for "what changed since X?" and audit trails.'
responses:
'200':
description: Successful response
content:
application/json:
schema:
type: object
properties:
data:
type: array
items:
type: object
properties:
time:
type: string
provider:
type: string
symbol:
type: string
category:
type: string
enum:
- lending
- borrowing
- staking
rate:
type: number
previousRate:
type:
- number
- 'null'
change:
type:
- number
- 'null'
collectionMethod:
type: string
confidence:
type:
- integer
- 'null'
baseRate:
type:
- number
- 'null'
bonusRate:
type:
- number
- 'null'
required:
- time
- provider
- symbol
- category
- rate
- previousRate
- change
- collectionMethod
- confidence
- baseRate
- bonusRate
additionalProperties: true
pagination:
type: object
properties:
nextCursor:
type:
- string
- 'null'
hasMore:
type: boolean
limit:
type: integer
required:
- nextCursor
- hasMore
- limit
additionalProperties: true
required:
- data
- pagination
additionalProperties: true
'401':
description: Missing or invalid API key
$ref: '#/components/responses/Unauthorized'
'403':
description: API key valid but plan lacks access to this endpoint
$ref: '#/components/responses/Forbidden'
'429':
description: Plan rate limit exceeded
$ref: '#/components/responses/RateLimited'
parameters:
- name: since
in: query
required: true
description: ISO date/datetime lower bound (required), e.g. "2026-08-01"
schema:
type: string
description: ISO date/datetime lower bound (required), e.g. "2026-08-01"
example: '2026-08-01'
- name: symbol
in: query
required: false
description: Filter to one symbol, e.g. "USDC"
schema:
type: string
example: USDC
- name: category
in: query
required: false
schema:
type: string
enum:
- lending
- borrowing
- staking
example: lending
security:
- BearerAuth: []
x-mcp-annotations:
readOnlyHint: true
destructiveHint: false
idempotentHint: true
openWorldHint: true
/api/v1/earn/products:
get:
tags:
- earn
operationId: list_earn_products
summary: Canonical earn products & variants
description: 'The canonical earn product graph: products (provider × asset × category) with their term variants — lockups, tiers, minimum deposits, payout schedules, withdrawal notice, TVL, promo flags — each carrying collection method, confidence (0-100 with bands), verification timestamps, and geo eligibility resolved from variant overrides or provider defaults. Use for "what are the actual terms behind this rate?"'
responses:
'200':
description: Successful response
content:
application/json:
schema:
type: object
properties:
data:
type: object
properties:
products:
type: array
items:
type: object
properties:
id:
type: integer
provider:
type: string
symbol:
type: string
category:
type: string
enum:
- lending
- borrowing
- staking
status:
type: string
variants:
type: array
items:
type: object
properties:
variantKey:
type: string
required:
- variantKey
additionalProperties: true
required:
- id
- provider
- symbol
- category
- status
additionalProperties: true
pagination:
type: object
properties:
total:
type: integer
limit:
type: integer
offset:
type: integer
hasMore:
type: boolean
required:
- total
- limit
- offset
- hasMore
additionalProperties: true
required:
- products
- pagination
additionalProperties: true
required:
- data
additionalProperties: true
'401':
description: Missing or invalid API key
$ref: '#/components/responses/Unauthorized'
'403':
description: API key valid but plan lacks access to this endpoint
$ref: '#/components/responses/Forbidden'
'429':
description: Plan rate limit exceeded
$ref: '#/components/responses/RateLimited'
parameters:
- name: provider
in: query
required: false
description: Filter to one provider, e.g. "nexo"
schema:
type: string
example: nexo
- name: symbol
in: query
required: false
description: Filter to one symbol, e.g. "BTC"
schema:
type: string
example: BTC
- name: category
in: query
required: false
schema:
type: string
enum:
- lending
- borrowing
- staking
example: lending
security:
- BearerAuth: []
x-mcp-annotations:
readOnlyHint: true
destructiveHint: false
idempotentHint: true
openWorldHint: true
components:
responses:
Unauthorized:
description: Missing or invalid API key
content:
application/json:
schema:
type: object
required:
- error
properties:
error:
type: object
properties:
message:
type: string
code:
type: string
example: INVALID_API_KEY
RateLimited:
description: Plan rate limit exceeded — see X-RateLimit-* headers and Retry-After
content:
application/json:
schema:
type: object
required:
- error
properties:
error:
type: object
properties:
message:
type: string
code:
type: string
example: RATE_LIMIT_EXCEEDED
Forbidden:
description: API key is valid but your plan does not grant access to this endpoint (e.g. Intelligence or bulk tier required)
content:
application/json:
schema:
type: object
required:
- error
properties:
error:
type: object
properties:
message:
type: string
code:
type: string
example: PLAN_UPGRADE_REQUIRED
upgradeUrl:
type: string
format: uri
description: Absolute URL to upgrade the plan. Always absolute (never relative to the API host).
example: https://pro.bitcompare.net/pricing
securitySchemes:
BearerAuth:
type: http
scheme: bearer
bearerFormat: ck_live_*
description: 'API keys issued from https://pro.bitcompare.net/dashboard/keys. Send as `Authorization: Bearer ck_live_...`.'
externalDocs:
description: Developer documentation
url: https://docs.bitcompare.net