Bitcompare Rates API

Crypto yield data across providers

Operations 4

GET /api/v1/rates Get current rates #
GET /api/v1/rates/{symbol} Get rates for a single symbol #
GET /api/v1/rates/{symbol}/history Historical rates #
GET /api/v1/providers List rate providers #

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.
All 92 tools →

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

bitcompare-net-rates-api-openapi.yml Raw ↑
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