CCXT

CCXT vs the Coincheck API and the coincheckjp libraries

Coincheck publishes client libraries in seven languages, most years old. Compare them with CCXT on upkeep, market coverage, streaming and rate limits.

Coincheck is a Japanese JPY-denominated exchange with a REST API and a WebSocket feed, documented at coincheck.com/documents/exchange/api. It publishes official client libraries under the coincheckjp GitHub organisation in seven languages.

CCXT covers the same API as the exchange id coincheck, with 16 unified capabilities, 2 watch* streaming methods and all 32 endpoints. The two are close enough in scope that the honest deciding question is about upkeep: which of these has been touched this year, in your language?

TL;DR

  • Pick a coincheckjp library if you are in Ruby — where the official client is actively maintained — or if you need Coincheck markets or private WebSocket channels that CCXT does not model.
  • Pick CCXT if you are in Python, Go, Node, PHP, C#, Java or TypeScript, where the official Coincheck library for your language was last pushed between 2017 and 2023, or if you want unified structures, a rate limiter and typed errors.
  • Read the coverage caveat before deciding. CCXT ships a hard-coded market list for coincheckBTC/JPY, ETC/JPY, FCT/JPY, MONA/JPY and ETC/BTC — while Coincheck's documentation lists 26 JPY pairs. And fetch_ticker raises BadSymbol for anything but BTC/JPY.

At a glance

CCXTcoincheckjp libraries
Exchanges covered104 (Coincheck is one of them)Coincheck only
LanguagesTypeScript, JavaScript, Python, PHP, C#/.NET, Go, Java — one APIRuby, Node, Go, PHP, Python, Java, C# — seven separate repositories
Most recent update per languageone library, released continuouslyRuby July 2026; Node December 2023; Go November 2023; PHP June 2020; Python May 2019; Java August 2017; C# March 2017
Unified market data + trading APIyes — 16 capabilities on coincheckno — Coincheck's own payloads
Unified markets exposed5 (BTC/JPY, ETC/JPY, FCT/JPY, MONA/JPY, ETC/BTC)whatever the API accepts
WebSocketsyes — 2 watch* methods (watchOrderBook, watchTrades)not documented in the libraries
Raw endpoint accessyes — 32 Coincheck endpoints as implicit methodsvaries per library
Built-in rate limiteryes, on by default (rateLimit 1500 ms)not a documented feature
Unified error typesyes — 41 typed exceptions in one hierarchyHTTP status + Coincheck success/error bodies
Testnet / sandboxnone — Coincheck publishes no sandboxnone
Popularity43.8k GitHub stars · 4.8M PyPI + 494k npm installs/month (one package, every venue)coincheck-python 47 stars · ruby_coincheck_client 42 · coincheck-node 29 · coincheck-php 20 · coincheck-go 15 · coincheck-java 8 · coincheck-cs 4
LicenceMITcoincheck-python MIT
SupportDiscord, Telegram, GitHub — usually same-dayGitHub issues, Coincheck support

Figures verified September 2026 against CCXT v4.5.77, the coincheckjp GitHub organisation's repository listing and the coincheck-python README, and Coincheck's published Exchange API documentation.

What Coincheck publishes

Seven official client libraries, one per language, with the date each was last pushed:

RepositoryLanguageStarsLast updated
ruby_coincheck_clientRuby42July 2026
coincheck-nodeJavaScript29December 2023
coincheck-goGo15November 2023
coincheck-phpPHP20June 2020
coincheck-pythonPython47May 2019
coincheck-javaJava8August 2017
coincheck-csC#4March 2017

The most-starred one is the Python library, last pushed in 2019. The most recently maintained one is the Ruby client. That is a common shape for a regional exchange and it is not a criticism — it is the fact that decides which side of this page you land on, and it depends entirely on your language.

The same job, written both ways

Fetch a ticker

import ccxt

exchange = ccxt.coincheck()
ticker = exchange.fetch_ticker('BTC/JPY')
print(ticker['last'], ticker['baseVolume'])

The official Python library is a thin, readable wrapper — and it was last pushed in May 2019. CCXT returns a unified ticker structure with the same keys, types and units as every other venue, and its Python support is a normal pip install ccxt on a package released continuously.

Place a limit order

import ccxt

exchange = ccxt.coincheck({'apiKey': '...', 'secret': '...'})
order = exchange.create_order('BTC/JPY', 'limit', 'buy', 0.005, 15000000)
print(order['id'], order['status'])

Both sign with Coincheck's scheme — ACCESS-KEY, ACCESS-NONCE and an ACCESS-SIGNATURE that is HMAC-SHA256 over nonce + url + body. The differences are the argument order, the return shape, and that CCXT's create_order has the same signature on 103 other exchanges and returns a unified order structure.

Stream an order book

Coincheck is one of the 76 CCXT exchanges with WebSocket support, though a narrow one: coincheck has 2 watch* methods, watchOrderBook and watchTrades, mapping to Coincheck's two public channels.

import ccxt.pro
import asyncio

async def main():
    exchange = ccxt.pro.coincheck()
    while True:
        orderbook = await exchange.watch_order_book('BTC/JPY')
        print(orderbook['bids'][0], orderbook['asks'][0])

asyncio.run(main())

None of the coincheckjp libraries documents WebSocket support, so the raw column is what you would otherwise write. watch_order_book returns the same structure as fetch_order_book, already merged, with reconnect and resubscribe handled.

Coincheck also documents private WebSocket channels for order events and execution events. CCXT does not implement those for this venue — private state is polled over REST.

Where the differences actually bite

Seven maintained languages, one API

This is the crux. Coincheck's libraries are seven independent repositories written at different times; CCXT is one library transpiled from a single TypeScript source into seven languages, with identical method names and structures and a continuous release cadence.

import ccxt
exchange = ccxt.coincheck()
ticker = exchange.fetch_ticker('BTC/JPY')

If you are writing C#, the choice is between a library last pushed in March 2017 and one that ships every week.

Rate limits you do not have to model

Coincheck's documentation states that order placement is limited to up to 4 requests per second, and that order-detail queries are limited to at most once per second, with 429s when you exceed them.

CCXT sets rateLimit = 1500 ms for coincheck and ships a token-bucket throttler that is on by default, so a polling loop paces itself rather than tripping the limit. None of the official libraries documents a rate limiter.

One error hierarchy

CCXT maps Coincheck's {"success": false, "error": "..."} bodies onto a typed exception treeInsufficientFunds, InvalidOrder, OrderNotFound, RateLimitExceeded, AuthenticationError, NetworkError, ExchangeNotAvailable and 34 more, all descending from BaseError. You write except ccxt.InsufficientFunds once instead of matching on an error string that is not part of any contract.

Precision, rounding and string math

CCXT exposes amount_to_precision, price_to_precision and cost_to_precision, backed by the Precise string-arithmetic class. JPY prices run to eight figures on BTC, which is precisely where float rounding starts producing rejected orders.

amount = exchange.amount_to_precision('BTC/JPY', 0.0012345678)
price = exchange.price_to_precision('BTC/JPY', 15234567.89)

Nothing is hidden — the implicit API

Alongside the 16 unified capabilities, all 32 Coincheck endpoints are generated as callable implicit methods, with signing, rate limiting and error mapping applied. That includes the leverage, lending and bank-account endpoints CCXT does not model as unified methods, and — importantly given the market-coverage caveat — the raw quote and rate endpoints for pairs outside CCXT's built-in market list:

# any raw Coincheck endpoint, camelCased from its path
rate = exchange.public_get_rate_pair({'pair': 'eth_jpy'})
positions = exchange.private_get_exchange_leverage_positions()

Browse them on the coincheck implicit API page.

Portability

Japanese venues are usually one leg of a book, not the whole of it. In CCXT the exchange id is a variable, so adding an offshore venue is a configuration change rather than a second integration:

for exchange_id in ['coincheck', 'bitflyer', 'binance']:
    exchange = getattr(ccxt, exchange_id)()
    print(exchange_id, exchange.fetch_ticker('BTC/JPY')['last'])

What the coincheckjp libraries do better

An honest list, and the first two are real limitations of CCXT on this venue:

  • Market coverage. Coincheck's API documentation lists 26 JPY pairs — eth_jpy, xrp_jpy, sol_jpy, doge_jpy, sui_jpy and more. CCXT's coincheck ships a hard-coded market list of five: BTC/JPY, ETC/JPY, FCT/JPY, MONA/JPY and ETC/BTC. If you trade the rest, the official libraries pass the pair straight through, and in CCXT you reach for the implicit API.
  • fetch_ticker is BTC/JPY only. CCXT raises BadSymbol for any other symbol on that method, because Coincheck's ticker endpoint is oriented around its main pair. The vendor libraries impose no such restriction.
  • Private WebSocket channels. Coincheck documents order-event and execution-event channels. CCXT implements only the two public ones (watch_order_book, watch_trades).
  • Ruby. ruby_coincheck_client was updated in July 2026 and CCXT does not target Ruby at all. If your service is Ruby, this is not a comparison — it is the only option.
  • Smaller dependency, exact field names. For a script that calls ticker.all() and one order endpoint, a thin wrapper is a smaller install, and pair, order_type and rate map one-to-one onto Coincheck's reference with no abstraction in between.

If you trade Coincheck pairs outside BTC/JPY, need private streams, or are in Ruby, the official libraries — or the raw API — are the better fit.

Migrating from a coincheckjp library to CCXT

What you are doingcoincheck-python / raw APICCXT
Symbolspair: 'btc_jpy''BTC/JPY'
ClientCoinCheck(ACCESS_KEY, API_SECRET)ccxt.coincheck({'apiKey': ..., 'secret': ...})
Tickerticker.all()GET /api/tickerfetch_ticker()
Order bookGET /api/order_booksfetch_order_book()
TradesGET /api/tradesfetch_trades()
StatusGET /api/exchange_statusfetch_status()
New orderorder.create({...})POST /api/exchange/orderscreate_order()
Cancel orderDELETE /api/exchange/orders/{id}cancel_order()
Open ordersGET /api/exchange/orders/opensfetch_open_orders()
ExecutionsGET /api/exchange/orders/transactionsfetch_my_trades()
BalanceGET /api/accounts/balancefetch_balance()
FeesGET /api/accountsfetch_trading_fees()
DepositsGET /api/deposit_moneyfetch_deposits()
WithdrawalsGET /api/withdrawsfetch_withdrawals()
StreamsCoincheck WebSocket feed, hand-writtenwatch_order_book() / watch_trades() on ccxt.pro.coincheck
Pairs outside CCXT's market listnative callthe same endpoint as an implicit method

Start with Install, then the Manual, then the coincheck unified API reference.

FAQ

Which Coincheck markets does CCXT support? Five, as unified markets: BTC/JPY, ETC/JPY, FCT/JPY, MONA/JPY and ETC/BTC. Coincheck's own documentation lists 26 JPY pairs. For pairs outside CCXT's list, use the implicit API — for example public_get_rate_pair({'pair': 'eth_jpy'}) — which still goes through CCXT's signing, rate limiting and error mapping.

Why does fetch_ticker only work for BTC/JPY on Coincheck? CCXT raises BadSymbol for other symbols on that method, because Coincheck's ticker endpoint is oriented around its main pair. fetch_order_book, fetch_trades and the order methods are not restricted that way.

Is the official Coincheck Python library maintained? coincheckjp/coincheck-python was last pushed in May 2019. The most recently maintained official Coincheck library is the Ruby one, ruby_coincheck_client, updated in July 2026. CCXT ships releases continuously across seven languages.

Does CCXT support Coincheck WebSockets? Partially. coincheck has 2 watch* methods — watch_order_book and watch_trades — covering Coincheck's public channels. The documented private order-event and execution-event channels are not implemented, so poll those over REST.

Does Coincheck have a testnet I can use with CCXT? No. No sandbox environment is published, so set_sandbox_mode(True) has nothing to point at for coincheck.

Is CCXT free? Yes. MIT-licensed, including the WebSocket support.

Next steps

On this page