Work with this as data
Every API here is available over the APIs.io API and to AI agents over MCP.
MCP server
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
Tools for apis
7 MCP tools reach this
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.
Call it yourself
curl for this page
This API
curl "https://apis.io/api/v1/apis/bitcompare-net:bitcompare-net-rates-api"
All apis
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.
Get an API 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 Specification
openapi: 3.2.0
info:
title: Bitcompare Rates 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: Rates
description: Crypto yield data across providers
paths:
/api/v1/rates:
get:
tags:
- Rates
operationId: get_rates
summary: Get current rates
description: List current rates across providers, optionally filtered by symbol, category, or provider. For "what is the best yield on BTC right now?" style questions, ALWAYS pass category="lending"/"borrowing"/"staking" — an unfiltered call mostly returns spot prices (category="price"), not yields.
responses:
'200':
description: Successful response
content:
application/json:
schema:
type: object
properties:
data:
type: object
properties:
rates:
type: array
items:
type: object
properties:
provider:
type: string
description: Provider slug, e.g. `nexo`
symbol:
type: string
description: Coin symbol, e.g. `btc`
category:
type: string
enum:
- lending
- borrowing
- staking
- price
description: Product category
rate:
type: number
description: Rate value; semantics depend on unitType (percentage APY vs absolute price)
coinId:
description: Canonical coin id, e.g. `bitcoin` (nullable)
type:
- string
- 'null'
providerSymbol:
type:
- string
- 'null'
metadata:
anyOf:
- type: object
additionalProperties: {}
- type: 'null'
unitType:
type: string
enum:
- percentage
- absolute
- ratio
unitSymbol:
type:
- string
- 'null'
lastUpdated:
type: string
description: ISO-8601 timestamp of the most recent rate refresh
ageSeconds:
description: Seconds since lastUpdated — use this to discount stale rows rather than trusting them as current
type: integer
stale:
description: True when this row is old enough that it should be treated with caution (audit BC-9)
type: boolean
required:
- provider
- symbol
- category
- rate
- coinId
- lastUpdated
additionalProperties: true
description: Matching rate entries
count:
type: number
description: Number of rates returned
timestamp:
description: ISO-8601 response timestamp (omitted on /rates/{symbol})
type: string
symbol:
description: Present on the /rates/{symbol} variant
type: string
required:
- rates
- count
additionalProperties: true
required:
- data
additionalProperties: true
'401':
description: Missing or invalid API key
$ref: '#/components/responses/Unauthorized'
'429':
description: Plan rate limit exceeded
$ref: '#/components/responses/RateLimited'
parameters:
- name: symbol
in: query
required: false
description: Filter by coin symbol, case-insensitive (e.g. "btc" or "BTC")
schema:
type: string
example: btc
- name: category
in: query
required: false
description: 'Filter by product category. IMPORTANT for yield questions: without this filter, most returned rows are category="price" (spot prices), not yields. Pass category="lending", "borrowing", or "staking" to get APY/interest-rate data.'
schema:
type: string
enum:
- lending
- borrowing
- staking
- price
example: lending
- name: limit
in: query
required: false
description: Max results, default 100
schema:
type: integer
minimum: 1
maximum: 500
example: 10
x-mcp-annotations:
readOnlyHint: true
destructiveHint: false
idempotentHint: true
openWorldHint: true
/api/v1/rates/{symbol}:
get:
tags:
- Rates
operationId: get_rate_by_symbol
summary: Get rates for a single symbol
description: Fetch all provider rates for a specific coin symbol. Optionally filter by category — pass category="lending"/"borrowing"/"staking" for yield questions, since unfiltered results mix in spot prices (category="price").
responses:
'200':
description: Successful response
content:
application/json:
schema:
type: object
properties:
data:
type: object
properties:
rates:
type: array
items:
type: object
properties:
provider:
type: string
description: Provider slug, e.g. `nexo`
symbol:
type: string
description: Coin symbol, e.g. `btc`
category:
type: string
enum:
- lending
- borrowing
- staking
- price
description: Product category
rate:
type: number
description: Rate value; semantics depend on unitType (percentage APY vs absolute price)
coinId:
description: Canonical coin id, e.g. `bitcoin` (nullable)
type:
- string
- 'null'
providerSymbol:
type:
- string
- 'null'
metadata:
anyOf:
- type: object
additionalProperties: {}
- type: 'null'
unitType:
type: string
enum:
- percentage
- absolute
- ratio
unitSymbol:
type:
- string
- 'null'
lastUpdated:
type: string
description: ISO-8601 timestamp of the most recent rate refresh
ageSeconds:
description: Seconds since lastUpdated — use this to discount stale rows rather than trusting them as current
type: integer
stale:
description: True when this row is old enough that it should be treated with caution (audit BC-9)
type: boolean
required:
- provider
- symbol
- category
- rate
- coinId
- lastUpdated
additionalProperties: true
description: Matching rate entries
count:
type: number
description: Number of rates returned
timestamp:
description: ISO-8601 response timestamp (omitted on /rates/{symbol})
type: string
symbol:
description: Present on the /rates/{symbol} variant
type: string
required:
- rates
- count
additionalProperties: true
required:
- data
additionalProperties: true
'401':
description: Missing or invalid API key
$ref: '#/components/responses/Unauthorized'
'429':
description: Plan rate limit exceeded
$ref: '#/components/responses/RateLimited'
parameters:
- name: symbol
in: path
required: true
description: Coin symbol, case-insensitive (e.g. "btc" or "eth")
schema:
type: string
description: Coin symbol, case-insensitive (e.g. "btc" or "eth")
example: eth
- name: category
in: query
required: false
description: Filter to a single product category. Without it, results mix spot prices (category="price") in with yields — pass "lending"/"borrowing"/"staking" for yield-only results.
schema:
type: string
enum:
- lending
- borrowing
- staking
- price
example: lending
x-mcp-annotations:
readOnlyHint: true
destructiveHint: false
idempotentHint: true
openWorldHint: true
/api/v1/rates/{symbol}/history:
get:
tags:
- Rates
operationId: get_rate_history
summary: Historical rates
description: Historical rate timeseries for a symbol. Recent history (~30 days) is per-tick; older history is daily granularity. Depth is clamped to your plan (up to 365 days on Pro) and bounded by how far back data has been recorded.
responses:
'200':
description: Successful response
content:
application/json:
schema:
type: object
properties:
data:
type: object
properties:
symbol:
type: string
history:
type: array
items:
type: object
properties:
provider:
type: string
symbol:
type: string
category:
type: string
enum:
- lending
- borrowing
- staking
- price
rate:
type: number
metadata:
anyOf:
- type: object
additionalProperties: {}
- type: 'null'
timestamp:
type: string
description: ISO-8601 observation time (oldest → newest)
createdAt:
type: string
coinId:
type:
- string
- 'null'
providerSymbol:
type:
- string
- 'null'
required:
- provider
- symbol
- category
- rate
- timestamp
- createdAt
- coinId
additionalProperties: true
count:
type: number
required:
- symbol
- history
- count
additionalProperties: true
required:
- data
additionalProperties: true
'401':
description: Missing or invalid API key
$ref: '#/components/responses/Unauthorized'
'429':
description: Plan rate limit exceeded
$ref: '#/components/responses/RateLimited'
parameters:
- name: symbol
in: path
required: true
description: Coin symbol, case-insensitive
schema:
type: string
description: Coin symbol, case-insensitive
example: btc
- name: days
in: query
required: false
description: Days of history. Clamped server-side to your plan (Free 7, Starter 30, Growth 90, Pro 365, Enterprise 1825) and bounded by available data. Points within ~30 days are per-tick; older points are daily.
schema:
type: integer
minimum: 1
maximum: 1825
example: 30
x-mcp-annotations:
readOnlyHint: true
destructiveHint: false
idempotentHint: true
openWorldHint: true
/api/v1/providers:
get:
tags:
- Rates
operationId: list_providers
summary: List rate providers
description: All rate providers, optionally filtered by product category.
responses:
'200':
description: Successful response
content:
application/json:
schema:
type: object
properties:
providers:
type: array
items:
type: object
properties:
slug:
type: string
description: Stable identifier (e.g. `nexo`)
name:
type: string
description: Display name
categories:
description: Categories this provider offers
type: array
items:
type: string
required:
- slug
- name
additionalProperties: true
required:
- providers
additionalProperties: true
'401':
description: Missing or invalid API key
$ref: '#/components/responses/Unauthorized'
'429':
description: Plan rate limit exceeded
$ref: '#/components/responses/RateLimited'
parameters:
- name: category
in: query
required: false
description: Filter to providers that offer this category
schema:
type: string
enum:
- lending
- borrowing
- staking
- price
example: lending
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
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