CCXT

CCXT vs the raw BIT.TEAM API

BIT.TEAM publishes no SDK — its GitHub organisation is empty and its own docs name CCXT as the integration path. Raw HTTP vs 20 unified methods.

BIT.TEAM is a spot and P2P exchange launched in 2016 and registered in the United Kingdom. It documents a REST API at bit.team/trade/api/documentation, and its developer page describes that API as offering "CCXT support, compatible with 3commas, OctoBot, FreqTrade".

That is the whole comparison in one sentence. BIT.TEAM's GitHub organisation, bitteamgroup, has no public repositories, and there is no first-party or widely used community client in any language. So the realistic choice is raw HTTP against a signed REST API, or CCXT — and the venue itself points at the second one.

TL;DR

  • Write it yourself if you need one or two endpoints, in one language, and would rather not take a dependency.
  • Pick CCXT for anything larger: 20 unified capabilities, 16 of them fetch*, plus all 25 BIT.TEAM endpoints as implicit methods, from TypeScript, JavaScript, Python, PHP, C#/.NET, Go and Java.
  • There is no WebSocket option on either side of this page. CCXT implements zero watch* methods for BIT.TEAM. If you need live data you are polling, whichever route you take.

At a glance

CCXTRaw BIT.TEAM API
Exchanges covered104 (BIT.TEAM is one of them)BIT.TEAM only
LanguagesTypeScript, JavaScript, Python, PHP, C#/.NET, Go, Java — one APIwhatever you write
Official vendor SDKnot applicablenone published; the GitHub organisation has no public repositories
Unified market data + trading APIyes — same method names across every exchangeno — BIT.TEAM's own payloads
BIT.TEAM capabilities implemented20 unified methods, 16 of them fetch*you implement what you need
Raw endpoint accessyes — 25 BIT.TEAM endpoints as implicit methodsyes, it is all you have
WebSocketsno watch* methods for BIT.TEAMnot used by CCXT for this venue
Built-in rate limiteryes, on by defaultyour code
Unified error typesyes — 41 typed exceptions in one hierarchyHTTP status plus BIT.TEAM's payload
Testnet / sandboxnot wired for this venuenone documented
LicenceMITnot applicable
SupportDiscord, Telegram, GitHub issues — usually same-dayBIT.TEAM support and Telegram

Figures verified September 2026 against CCXT v4.5.77, BIT.TEAM's developer pages, and the bitteamgroup GitHub organisation.

The same job, written both ways

Fetch a ticker

import ccxt

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

CCXT returns a unified ticker structure: the same keys, the same types, timestamps in milliseconds, prices and volumes as numbers. Raw, you get BIT.TEAM's field names and your own parsing to write and keep working.

Place a limit order

import ccxt

exchange = ccxt.bitteam({'apiKey': '...', 'secret': '...'})
order = exchange.create_order('BTC/USDT', 'limit', 'buy', 0.001, 60000)
print(order['id'], order['status'])

Two things to notice. First, private requests authenticate with HTTP Basic — the base64 of apiKey:secret in an Authorization header — so the credential travels on every call and there is no nonce or signature to get wrong; the tradeoff is that there is nothing to bind a request to a timestamp either. Second, orders are keyed by BIT.TEAM's numeric pairId, not by a symbol. CCXT resolves that from load_markets(), so 'BTC/USDT' is all you pass.

Where the differences actually bite

Portability is the whole point

BIT.TEAM is a long-tail venue, and long-tail venues are rarely anyone's only venue. Adding a second exchange to a hand-rolled BIT.TEAM integration means a second payload shape, a second symbol convention, a second auth scheme and a second error taxonomy — plus a translation layer of your own so the rest of the system can stay venue-agnostic. That translation layer is what CCXT already is:

for exchange_id in ['bitteam', 'binance', 'kraken', 'okx']:
    exchange = getattr(ccxt, exchange_id)()
    print(exchange_id, exchange.fetch_ticker('BTC/USDT')['last'])

Seven languages, one API

CCXT is written once in TypeScript and transpiled to JavaScript, Python, PHP, C#/.NET, Go and Java, with identical method names and return structures. A BIT.TEAM integration prototyped in Python moves to a Go or C# service without a second parsing layer.

import ccxt from 'ccxt';
const exchange = new ccxt.bitteam ();
const ticker = await exchange.fetchTicker ('BTC/USDT');

One error hierarchy

CCXT maps BIT.TEAM's failures onto a typed exception treeInsufficientFunds, InvalidOrder, OrderNotFound, RateLimitExceeded, AuthenticationError, NetworkError and 35 more, all descending from BaseError. You catch ccxt.InsufficientFunds once instead of matching on a message string that a redeploy can change.

Precision and string math

CCXT loads BIT.TEAM's pair precisions from trade/api/pairs/precisions and gives you amount_to_precision and price_to_precision, backed by the Precise string-arithmetic class, so amounts never drift through float rounding into a rejected order.

amount = exchange.amount_to_precision('BTC/USDT', 0.0012345678)
price = exchange.price_to_precision('BTC/USDT', 61234.56789)

Nothing is hidden — the implicit API

The 20 unified methods are not a ceiling. Every BIT.TEAM endpoint is generated as a callable implicit method, with auth and rate limiting applied:

# GET /trade/api/cmc/summary
summary = exchange.public_get_trade_api_cmc_summary()

# GET /trade/api/transactionsOfUser
txs = exchange.private_get_trade_api_transactionsofuser()

Browse them all on the bitteam implicit API page.

What the raw API does better

An honest list:

  • The endpoints are few and the auth is simple. Twenty-five routes and HTTP Basic authentication is about as low a barrier as a signed exchange API gets. For a single read-only integration, requests plus a base64 header is genuinely less work than reading a library's conventions.
  • The vendor documentation is the only authoritative description. BIT.TEAM's docs describe its own P2P and asset endpoints in its own terms; CCXT's unified names are an abstraction over them, which is one extra hop when you are cross-checking behaviour.
  • Full fidelity to the payloads. Fields CCXT does not model reach you unchanged. CCXT keeps the raw response under info, but the top-level structure is unified rather than literal.
  • No WebSocket either way, so the usual CCXT Pro advantage does not apply here. If live data matters more than portability, neither option saves you anything and you will be building a poller regardless.

If BIT.TEAM is your only venue and your integration is small, hand-rolling it is a reasonable call.

Migrating from the raw BIT.TEAM API to CCXT

What you are doingBIT.TEAM RESTCCXT
Symbolsbtc_usdt / numeric pairId'BTC/USDT'
MarketsGET /trade/api/pairsload_markets()
TickerGET /trade/api/pair/{name}fetch_ticker() / fetch_tickers()
Order bookGET /trade/api/orderbooks/{symbol}fetch_order_book()
CandlesGET /api/tw/history/{pairName}/{resolution}fetch_ohlcv()
Public tradesGET /trade/api/tradesfetch_trades()
New orderPOST /trade/api/ccxt/ordercreatecreate_order()
Cancel orderPOST /trade/api/ccxt/cancelordercancel_order()
Open ordersGET /trade/api/ccxt/ordersOfUserfetch_open_orders()
Order by idGET /trade/api/ccxt/order/{id}fetch_order()
BalanceGET /trade/api/ccxt/balancefetch_balance()
My tradesGET /trade/api/ccxt/tradesOfUserfetch_my_trades()
TransactionsGET /trade/api/transactionsOfUserfetch_deposits_withdrawals()
Anything not listedthe raw endpointthe same endpoint as an implicit method

FAQ

Does BIT.TEAM have an official SDK? No. The bitteamgroup GitHub organisation has no public repositories, and no first-party client library is published for any language. BIT.TEAM's own developer page names CCXT as the supported integration path, alongside 3commas, OctoBot and Freqtrade.

Does CCXT support BIT.TEAM WebSockets? No. CCXT implements zero watch* methods for BIT.TEAM, so ccxt.pro.bitteam is not available. Live data means polling fetch_order_book or fetch_trades on a timer.

How does BIT.TEAM authenticate API requests? With HTTP Basic authentication: the base64 encoding of apiKey:secret in an Authorization: Basic … header. CCXT builds that header for you and applies it to every private endpoint, including the implicit ones.

Can I still call BIT.TEAM-specific endpoints through CCXT? Yes — all 25 of them, as implicit methods, with authentication and rate limiting applied. Choosing CCXT does not cut you off from anything the venue exposes.

Is CCXT free? Yes. MIT-licensed.

Next steps

On this page