/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
Claude Code
$ npx -y skills add ccxt/ccxt --skill ccxt-php --agent claude-code
Codex
$ npx skills add ccxt/ccxt --skill ccxt-php -a codex -y
Cursor
$ npx skills add ccxt/ccxt --skill ccxt-php -a cursor -y
Gemini CLI
$ npx skills add ccxt/ccxt --skill ccxt-php -a gemini-cli -y
GitHub Copilot
$ npx skills add ccxt/ccxt --skill ccxt-php -a github-copilot -y
OpenCode
$ npx skills add ccxt/ccxt --skill ccxt-php -a opencode -y
Windsurf
$ npx skills add ccxt/ccxt --skill ccxt-php -a windsurf -y
SKILL.md
ccxt-php.SKILL.mdname: 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)
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
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
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
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
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
use function React\Async\await;
$exchange = new \ccxt\async\binance([
'enableRateLimit' => true
]);
$ticker = await($exchange->fetch_ticker('BTC/USDT'));WebSocket API
<?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
// 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 amountFetching Ticker
// 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
// 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 levelsCreating Orders
Limit Order
// 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
// 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
$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
// 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
// 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
// Cancel single order
$exchange->cancel_order($order_id, 'BTC/USDT');
// Cancel all orders for a symbol
$exchange->cancel_all_orders('BTCRead more
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)
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
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
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
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
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
use function React\Async\await;
$exchange = new \ccxt\async\binance([
'enableRateLimit' => true
]);
$ticker = await($exchange->fetch_ticker('BTC/USDT'));WebSocket API
<?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
// 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 amountFetching Ticker
// 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
// 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 levelsCreating Orders
Limit Order
// 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
// 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
$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
// 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
// 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
// Cancel single order
$exchange->cancel_order($order_id, 'BTC/USDT');
// Cancel all orders for a symbol
$exchange->cancel_all_orders('BTCA crypto trading API with more than 100 exchanges and prediction markets in JavaScript / TypeScript / Python / C# / PHP / Go / Java / Rust.
Other skills on ccxt.
More skills from other plugins.
3-statement-model
Complete, populate and fill out 3-statement financial model templates (Income Statement, Balance Sheet, Cash Flow Statement) .…
3-statement-model
Complete, populate and fill out 3-statement financial model templates (Income Statement, Balance Sheet, Cash Flow Statement) .…
eli5
Explain a topic like I'm a 5 year old. Use when the user types /eli5 <topic> or asks for a dead-simple picture explainer of how…
Questions about ccxt-php.
- Which coding agents can use ccxt-php?
- ccxt-php installs in Claude Code, Codex, Cursor, Gemini CLI, GitHub Copilot, OpenCode and Windsurf with the skills CLI, using each agent's flag shown on this page. Flowy's auto-invocation, which fires a skill when your prompt matches, runs in Claude Code only.

