CryptoKeyhole Platform API

Status and the MCP server

GitHub OpenAPI

Operations 5

GET /status Platform status #
POST /mcp MCP server for AI assistants #
GET /billing/usage API usage and call packs #
GET /live/stream Live stream (server-sent events) #
GET /live/channels Live stream channels #

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/cryptokeyhole:cryptokeyhole-platform-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

cryptokeyhole-platform-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Cryptokeyhole Platform API
  version: 1.0.0
  contact:
    name: CryptoKeyhole
    url: https://cryptokeyhole.com/data-access/
  license:
    name: CC BY 4.0 (free data; paid-plan data under the terms of service)
    url: https://cryptokeyhole.com/methodology/#licence-title
  termsOfService: https://cryptokeyhole.com/terms/
  x-logo:
    url: https://cryptokeyhole.com/favicon.svg
  description: 'Operations tagged Platform across 2 of this provider''s published API definitions: cryptokeyhole-openapi.json, cryptokeyhole-openapi.json. Each path carries the servers of the definition it was published in.'
servers:
- url: https://cryptokeyhole.com/api/v1
tags:
- name: Platform
  description: Status and the MCP server
paths:
  /status:
    get:
      tags:
      - Platform
      operationId: getStatus
      summary: Platform status
      description: Each data source's processed frontier and freshness, as the site reports them.
      security:
      - {}
      responses:
        '200':
          description: Status document
          content:
            application/json:
              schema:
                type: object
    servers:
    - url: https://cryptokeyhole.com/api/v1
  /mcp:
    post:
      tags:
      - Platform
      operationId: mcp
      summary: MCP server for AI assistants
      description: 'A Model Context Protocol server (JSON-RPC 2.0 over Streamable HTTP): initialize, tools/list and tools/call, with tools to list assets, find charts and read their data. It is read-only and needs no account or key: it serves what the Free plan includes, and a chart on a higher plan answers with the plan that includes it. Send no credentials; a request with an Authorization or X-Api-Key header is refused. Guide: https://cryptokeyhole.com/mcp/'
      security:
      - {}
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
              - jsonrpc
              - method
              properties:
                jsonrpc:
                  type: string
                  enum:
                  - '2.0'
                id:
                  oneOf:
                  - type: string
                  - type: integer
                method:
                  type: string
                  example: tools/list
                params:
                  type: object
      responses:
        '200':
          description: The JSON-RPC answer
          content:
            application/json:
              schema:
                type: object
        '202':
          description: A notification was accepted
        '400':
          description: An invalid JSON-RPC request, or one sent with credentials
          content:
            application/json:
              schema:
                type: object
    servers:
    - url: https://cryptokeyhole.com/api/v1
  /billing/usage:
    get:
      tags:
      - Platform
      operationId: getUsage
      summary: API usage and call packs
      description: Calls made with the account's keys today and this month (UTC), the plan's allowance for each and when it resets, calls left in API call packs and when the next pack ends, and the packs on sale. Plus and Pro count calls against a daily or monthly allowance; past it, a call uses a pack (50,000 or 250,000 calls, bought on the account page, each kept 365 days) and without one answers 429. API & Team is unmetered. This request is not counted.
      security:
      - bearerAuth: []
      responses:
        '200':
          description: Usage document
          content:
            application/json:
              schema:
                type: object
                properties:
                  plan:
                    type: string
                  planName:
                    type: string
                  via:
                    type: string
                    enum:
                    - key
                    - cookie
                  apiCalls:
                    type: object
                    properties:
                      today:
                        type: object
                        properties:
                          used:
                            type: integer
                          limit:
                            type:
                            - integer
                            - 'null'
                          resetsAt:
                            type: integer
                      month:
                        type: object
                        properties:
                          used:
                            type: integer
                          limit:
                            type:
                            - integer
                            - 'null'
                          resetsAt:
                            type: integer
                  credits:
                    type: object
                    properties:
                      remaining:
                        type: integer
                      nextExpiry:
                        type:
                        - integer
                        - 'null'
                  packs:
                    type: array
                    items:
                      type: object
                      properties:
                        id:
                          type: string
                        calls:
                          type: integer
                        amount:
                          type: integer
                          description: US cents
                        currency:
                          type: string
                        days:
                          type: integer
        '401':
          description: No API key or session
    servers:
    - url: https://cryptokeyhole.com/api/v1
  /live/stream:
    get:
      tags:
      - Platform
      operationId: liveStream
      summary: Live stream (server-sent events)
      description: 'Prices (every 0.5 s while they move) and new blocks for everyone. With a Pro or API & Team key, also the data channels: trades ($100K+), liquidations ($10K+), transfers ($1M+), options blocks, funding and mempool. A hello event first; tape events carry an id for Last-Event-ID (20 minutes). Pro holds 2 keyed streams at once, API & Team 10; one API call per stream opened.'
      security:
      - {}
      - bearerAuth: []
      parameters:
      - name: channels
        in: query
        description: Comma-separated channels (GET /live/channels lists them).
        schema:
          type: string
          example: trades,liquidations
      - name: assets
        in: query
        description: Comma-separated coins.
        schema:
          type: string
          example: BTC,ETH
      responses:
        '200':
          description: An event stream
          content:
            text/event-stream:
              schema:
                type: string
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '402':
          $ref: '#/components/responses/PlanRequired'
        '429':
          $ref: '#/components/responses/TooManyRequests'
    servers:
    - url: https://cryptokeyhole.com/api/v1
  /live/channels:
    get:
      tags:
      - Platform
      operationId: liveChannels
      summary: Live stream channels
      description: The channels of GET /live/stream with what each sends and its minimum size. No key needed.
      security:
      - {}
      responses:
        '200':
          description: channels
          content:
            application/json:
              schema:
                type: object
    servers:
    - url: https://cryptokeyhole.com/api/v1
components:
  responses:
    TooManyRequests:
      description: Request limit reached; try again in a minute
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    BadRequest:
      description: The request's parameters are invalid
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    Unauthorized:
      description: The API key is invalid or revoked, or was sent to a route keys do not read
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    PlanRequired:
      description: Included with a higher plan; locked names it
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
  schemas:
    Locked:
      type: object
      description: What a higher plan would include.
      properties:
        feature:
          type: string
          example: interval
        requiredPlan:
          type: string
          enum:
          - plus
          - pro
          - team
        requiredPlanName:
          type: string
          example: Plus
        currentPlan:
          type: string
          example: free
        currentPlanName:
          type: string
          example: Free
        upgradePath:
          type: string
          example: /pricing/
        allowedIntervals:
          type: array
          items:
            type: string
    Error:
      type: object
      required:
      - error
      properties:
        error:
          type: string
        locked:
          $ref: '#/components/schemas/Locked'
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: 'An API key from your account page (Plus and higher plans): Authorization: Bearer <key>. Keys are read-only.'
externalDocs:
  description: API keys, plans, Google Sheets, Excel and Python
  url: https://cryptokeyhole.com/data-access/
x-refined-from:
- cryptokeyhole-openapi.json
- cryptokeyhole-openapi.json
x-provenance:
  method: harvested
  publisher: CryptoKeyhole
  source: https://cryptokeyhole.com/api/v1/openapi.json
  note: split by refine-openapis from the provider's own published document, verified by fetch (openapi/_original/*.fetch.json);
    stamped by stamp-openapi-provenance.py (roadmap#793)