Skip to main content

ccxt-php

CCXT cryptocurrency exchange library for PHP developers. Covers both REST API (standard) and WebSocket API (real-time). Helps install CCXT, connect to exchanges, fetch market data, place orders, stream live tickers/orderbooks, handle authentication, and manage errors in PHP 8.1+. Use when working with crypto exchanges in PHP projects, trading bots, or web applications. Supports both sync and async (ReactPHP) usage.

Source facts

Repository
ccxt/ccxt
Last source activity
September 21, 2026 at 11:42
Detected SKILL.md language
English
Stars
44,393
Forks
8,899

Install options

The review-first prompt is selected by default. You can switch to a direct command or download a local copy.

Review the source files

Read SKILL.md and any companion files shown by SkillsMP before deciding whether to install.

Showing SKILL.md

SKILL.md
Source instructions · Read-only preview
name
ccxt-php
description
CCXT cryptocurrency exchange library for PHP developers. Covers both REST API (standard) and WebSocket API (real-time). Helps install CCXT, connect to exchanges, fetch market data, place orders, stream live tickers/orderbooks, handle authentication, and manage errors in PHP 8.1+. Use when working with crypto exchanges in PHP projects, trading bots, or web applications. Supports both sync and async (ReactPHP) usage.
# CCXT for PHP A comprehensive guide to using CCXT in PHP projects for cryptocurrency exchange integration. ## Installation ### Via Composer (REST and WebSocket) ```bash composer require ccxt/ccxt ``` ### Required PHP Extensions - cURL - mbstring (UTF-8) - PCRE - iconv - gmp (for some exchanges) ### Optional for Async/WebSocket - ReactPHP (installed automatically with ccxt) ## Quick Start ### REST API - Synchronous ```php <?php date_default_timezone_set('UTC'); // Required! require_once 'vendor/autoload.php'; $exchange = new \ccxt\binance(); $exchange->load_markets(); $ticker = $exchange->fetch_ticker('BTC/USDT'); print_r($ticker); ``` ### REST API - Asynchronous (ReactPHP) ```php <?php use function React\Async\await; date_default_timezone_set('UTC'); require_once 'vendor/autoload.php'; $exchange = new \ccxt\async\binance(); $ticker = await($exchange->fetch_ticker('BTC/USDT')); print_r($ticker); ``` ### WebSocket API - Real-time Updates ```php <?php use function React\Async\await; use function React\Async\async; date_default_timezone_set('UTC'); require_once 'vendor/autoload.php'; $exchange = new \ccxt\pro\binance(); while (true) { $ticker = await($exchange->watch_ticker('BTC/USDT')); print_r($ticker); // Live updates! } await($exchange->close()); ``` ## REST vs WebSocket | Mode | REST | WebSocket | |------|------|-----------| | **Sync** | `\ccxt\binance()` | (WebSocket requires async) | | **Async** | `\ccxt\async\binance()` | `\ccxt\pro\binance()` | | Feature | REST API | WebSocket API | |---------|----------|---------------| | **Use for** | One-time queries, placing orders | Real-time monitoring, live price feeds | | **Method prefix** | `fetch_*` (fetch_ticker, fetch_order_book) | `watch_*` (watch_ticker, watch_order_book) | | **Speed** | Slower (HTTP request/response) | Faster (persistent connection) | | **Rate limits** | Strict (1-2 req/sec) | More lenient (continuous stream) | | **Best for** | Trading, account management | Price monitoring, arbitrage detection | ## Creating Exchange Instance ### REST API - Synchronous ```php <?php date_default_timezone_set('UTC'); require_once 'vendor/autoload.php'; // Public API (no authentication) $exchange = new \ccxt\binance([ 'enableRateLimit' => true // Recommended! ]); // Private API (with authentication) $exchange = new \ccxt\binance([ 'apiKey' => 'YOUR_API_KEY', 'secret' => 'YOUR_SECRET', 'enableRateLimit' => true ]); ``` ### REST API - Asynchronous ```php <?php use function React\Async\await; $exchange = new \ccxt\async\binance([ 'enableRateLimit' => true ]); $ticker = await($exchange->fetch_ticker('BTC/USDT')); ``` ### WebSocket API ```php <?php use function React\Async\await; // Public WebSocket $exchange = new \ccxt\pro\binance(); // Private WebSocket (with authentication) $exchange = new \ccxt\pro\binance([ 'apiKey' => 'YOUR_API_KEY', 'secret' => 'YOUR_SECRET' ]); // Always close when done await($exchange->close()); ``` ## Common REST Operations ### Loading Markets ```php // Load all available trading pairs $exchange->load_markets(); // Access market information $btc_market = $exchange->market('BTC/USDT'); print_r($btc_market['limits']['amount']['min']); // Minimum order amount ``` ### Fetching Ticker ```php // Single ticker $ticker = $exchange->fetch_ticker('BTC/USDT'); print_r($ticker['last']); // Last price print_r($ticker['bid']); // Best bid print_r($ticker['ask']); // Best ask print_r($ticker['volume']); // 24h volume // Multiple tickers (if supported) $tickers = $exchange->fetch_tickers(['BTC/USDT', 'ETH/USDT']); ``` ### Fetching Order Book ```php // Full orderbook $orderbook = $exchange->fetch_order_book('BTC/USDT'); print_r($orderbook['bids'][0]); // [price, amount] print_r($orderbook['asks'][0]); // [price, amount] // Limited depth $orderbook = $exchange->fetch_order_book('BTC/USDT', 5); // Top 5 levels ``` ### Creating Orders #### Limit Order ```php // Buy limit order $order = $exchange->create_limit_buy_order('BTC/USDT', 0.01, 50000); print_r($order['id']); // Sell limit order $order = $exchange->create_limit_sell_order('BTC/USDT', 0.01, 60000); // Generic limit order $order = $exchange->create_order('BTC/USDT', 'limit', 'buy', 0.01, 50000); ``` #### Market Order ```php // Buy market order $order = $exchange->create_market_buy_order('BTC/USDT', 0.01); // Sell market order $order = $exchange->create_market_sell_order('BTC/USDT', 0.01); // Generic market order $order = $exchange->create_order('BTC/USDT', 'market', 'sell', 0.01); ``` ### Fetching Balance ```php $balance = $exchange->fetch_balance(); print_r($balance['BTC']['free']); // Available balance print_r($balance['BTC']['used']); // Balance in orders print_r($balance['BTC']['total']); // Total balance ``` ### Fetching Orders ```php // Open orders $open_orders = $exchange->fetch_open_orders('BTC/USDT'); // Closed orders $closed_orders = $exchange->fetch_closed_orders('BTC/USDT'); // All orders (open + closed) $all_orders = $exchange->fetch_orders('BTC/USDT'); // Single order by ID $order = $exchange->fetch_order($order_id, 'BTC/USDT'); ``` ### Fetching Trades ```php // Recent public trades $trades = $exchange->fetch_trades('BTC/USDT', null, 10); // Your trades (requires authentication) $my_trades = $exchange->fetch_my_trades('BTC/USDT'); ``` ### Canceling Orders ```php // Cancel single order $exchange->cancel_order($order_id, 'BTC/USDT'); // Cancel all orders for a symbol $exchange->cancel_all_orders('BTC/USDT'); ``` ## WebSocket Operations (Real-time) ### Watching Ticker (Live Price Updates) ```php <?php use function React\Async\await; $exchange = new \ccxt\pro\binance(); while (true) { $ticker = await($exchange->watch_ticker('BTC/USDT')); print_r($ticker['last']); } await($exchange->close()); ``` ### Watching Order Book (Live Depth Updates) ```php <?php use function React\Async\await; $exchange = new \ccxt\pro\binance(); while (true) { $orderbook = await($exchange->watch_order_book('BTC/USDT')); print_r('Best bid: ' . $orderbook['bids'][0][0]); print_r('Best ask: ' . $orderbook['asks'][0][0]); } await($exchange->close()); ``` ### Watching Trades (Live Trade Stream) ```php <?php use function React\Async\await; $exchange = new \ccxt\pro\binance(); while (true) { $trades = await($exchange->watch_trades('BTC/USDT')); foreach ($trades as $trade) { print_r($trade['price'] . ' ' . $trade['amount'] . ' ' . $trade['side']); } } await($exchange->close()); ``` ### Watching Your Orders (Live Order Updates) ```php <?php use function React\Async\await; $exchange = new \ccxt\pro\binance([ 'apiKey' => 'YOUR_API_KEY', 'secret' => 'YOUR_SECRET' ]); while (true) { $orders = await($exchange->watch_orders('BTC/USDT')); foreach ($orders as $order) { print_r($order['id'] . ' ' . $order['status'] . ' ' . $order['filled']); } } await($exchange->close()); ``` ### Watching Balance (Live Balance Updates) ```php <?php use function React\Async\await; $exchange = new \ccxt\pro\binance([ 'apiKey' => 'YOUR_API_KEY', 'secret' => 'YOUR_SECRET' ]); while (true) { $balance = await($exchange->watch_balance()); print_r('BTC: ' . $balance['BTC']['total']); } await($exchange->close()); ``` ## Complete Method Reference ### Market Data Methods #### Tickers & Prices - `fetchTicker(symbol)` - Fetch ticker for one symbol - `fetchTickers([symbols])` - Fetch multiple tickers at once - `fetchBidsAsks([symbols])` - Fetch best bid/ask for multiple symbols - `fetchLastPrices([symbols])` - Fetch last prices - `fetchMarkPrices([symbols])` - Fetch mark prices (derivatives)
View on GitHub
This SKILL.md is very large, so SkillsMP previews the first section here. View on GitHub