kucoin / kucoin-php-sdk
PHP SDK for KuCoin API
Installs: 45 747
Dependents: 0
Suggesters: 0
Security: 0
Stars: 78
Watchers: 11
Forks: 41
Open Issues: 5
Requires
- php: >=5.5.0
- ext-json: *
- guzzlehttp/guzzle: ^6.0|^7.0
- monolog/monolog: ~1.0|~2.0|~3.0
- ratchet/pawl: ^0.4.1
Requires (Dev)
- phpunit/phpunit: >=5.7
- dev-master
- v1.1.33
- v1.1.32
- v1.1.31
- v1.1.30
- v1.1.29
- v1.1.28
- v1.1.27
- v1.1.26
- v1.1.25
- v1.1.24
- v1.1.23
- v1.1.22
- v1.1.21
- v1.1.20
- v1.1.19
- 1.1.18
- v1.1.17
- v1.1.16
- v1.1.15
- v1.1.14
- v1.1.13
- v1.1.12
- v1.1.11
- v1.1.10
- v1.1.9
- v1.1.8
- v1.1.7
- v1.1.6
- v1.1.5
- v1.1.4
- v1.1.3
- v1.1.2
- v1.1.1
- v1.1.0
- v1.0.12
- v1.0.11
- v1.0.10
- 1.0.9
- 1.0.8
- 1.0.7
- 1.0.6
- 1.0.5
- 1.0.4
- 1.0.3
- 1.0.2
- 1.0.1
- 1.0.0
- dev-feature/enhance-websocket
- dev-revert-137-master
- dev-revert-138-master
This package is auto-updated.
Last update: 2025-03-11 06:47:10 UTC
README
The detailed document https://docs.kucoin.com, in order to receive the latest API change notifications, please
Watch
this repository.
Requirements
Dependency | Requirement |
---|---|
PHP | >=5.5.0 Recommend PHP7+ |
guzzlehttp/guzzle | ^6.0|^7.0 |
Install
Install package via Composer.
composer require "kucoin/kucoin-php-sdk:~1.1.0"
Usage
Choose environment
Environment | BaseUri |
---|---|
Production | https://api.kucoin.com |
// Switch to the sandbox environment KuCoinApi::setBaseUri('https://api.kucoin.com');
Debug mode & logging
// Debug mode will record the logs of API and WebSocket to files in the directory "KuCoinApi::getLogPath()" according to the minimum log level "KuCoinApi::getLogLevel()". KuCoinApi::setDebugMode(true); // Logging in your code // KuCoinApi::setLogPath('/tmp'); // KuCoinApi::setLogLevel(Monolog\Logger::DEBUG); KuCoinApi::getLogger()->debug("I'm a debug message");
Examples
See the test case for more examples.
Example of API without
authentication
use KuCoin\SDK\PublicApi\Time; $api = new Time(); $timestamp = $api->timestamp(); var_dump($timestamp);
Note
To reinforce the security of the API, KuCoin upgraded the API key to version 2.0, the validation logic has also been changed. It is recommended to create(https://www.kucoin.com/account/api) and update your API key to version 2.0. The API key of version 1.0 will be still valid until May 1, 2021
Example of API with
authentication
use KuCoin\SDK\PrivateApi\Account; use KuCoin\SDK\Exceptions\HttpException; use KuCoin\SDK\Exceptions\BusinessException; use KuCoin\SDK\Auth; // Auth version v2 (recommend) $auth = new Auth('key', 'secret', 'passphrase', Auth::API_KEY_VERSION_V2); // Auth version v1 // $auth = new Auth('key', 'secret', 'passphrase'); $api = new Account($auth); try { $result = $api->getList(['type' => 'main']); var_dump($result); } catch (HttpException $e) { var_dump($e->getMessage()); } catch (BusinessException $e) { var_dump($e->getMessage()); }
Example of WebSocket feed
use KuCoin\SDK\Auth; use KuCoin\SDK\PrivateApi\WebSocketFeed; use Ratchet\Client\WebSocket; use React\EventLoop\Loop; use React\EventLoop\LoopInterface; $auth = null; // Need to pass the Auth parameter when subscribing to a private channel($api->subscribePrivateChannel()). // $auth = new Auth('key', 'secret', 'passphrase'); $api = new WebSocketFeed($auth); // Use a custom event loop instance if you like //$loop = Loop::get(); //$loop->addPeriodicTimer(1, function () { // var_dump(date('Y-m-d H:i:s')); //}); //$api->setLoop($loop); $query = ['connectId' => uniqid('', true)]; $channels = [ ['topic' => '/market/ticker:KCS-BTC'], // Subscribe multiple channels ['topic' => '/market/ticker:ETH-BTC'], ]; $api->subscribePublicChannels($query, $channels, function (array $message, WebSocket $ws, LoopInterface $loop) use ($api) { var_dump($message); // Subscribe another channel // $ws->send(json_encode($api->createSubscribeMessage('/market/ticker:LTC-BTC'))); // Unsubscribe the channel // $ws->send(json_encode($api->createUnsubscribeMessage('/market/ticker:ETH-BTC'))); // Stop loop // $loop->stop(); }, function ($code, $reason) { echo "OnClose: {$code} {$reason}\n"; });
Add custom options
use KuCoin\SDK\PublicApi\Time; $api = new Time(null, new GuzzleHttp([ 'curl' => [ // custom cURL options: https://www.php.net/manual/en/function.curl-setopt CURLOPT_TCP_NODELAY => true, // Disable TCP's Nagle algorithm, which tries to minimize the number of small packets on the network. // ... ], ])); $timestamp = $api->timestamp(); var_dump($timestamp);
use KuCoin\SDK\Auth; use KuCoin\SDK\Http\GuzzleHttp; use KuCoin\SDK\KuCoinApi; use KuCoin\SDK\PrivateApi\WebSocketFeed; use Ratchet\Client\WebSocket; use React\EventLoop\Factory; use React\EventLoop\LoopInterface; $api = new WebSocketFeed( null, new GuzzleHttp([ 'curl' => [ // Custom cURL options: https://www.php.net/manual/en/function.curl-setopt CURLOPT_TCP_NODELAY => true, // Disable TCP's Nagle algorithm, which tries to minimize the number of small packets on the network. // ... ], ]) ); $query = ['connectId' => uniqid('', true)]; $channels = [ ['topic' => '/market/ticker:KCS-BTC'], ['topic' => '/market/ticker:ETH-BTC'], ]; $options = ['tcp' => ['tcp_nodelay' => true]]; // Custom socket context options: https://www.php.net/manual/zh/context.socket $api->subscribePublicChannels($query, $channels, function (array $message, WebSocket $ws, LoopInterface $loop) use ($api) { var_dump($message); }, function ($code, $reason) { echo "OnClose: {$code} {$reason}\n"; }, $options);
⚡️Coroutine HTTP client for asynchronous IO
See the benchmark, almost
20x
faster thancurl
.
pecl install swoole composer require swlib/saber
use KuCoin\SDK\Auth; use KuCoin\SDK\Http\SwooleHttp; use KuCoin\SDK\KuCoinApi; use KuCoin\SDK\PrivateApi\Order; use KuCoin\SDK\PublicApi\Time; // Require PHP 7.1+ and Swoole 2.1.2+ // Require running in cli mode go(function () { $api = new Time(null, new SwooleHttp); $timestamp = $api->timestamp(); var_dump($timestamp); }); go(function () { // Auth version v2 (recommend) $auth = new Auth('key', 'secret', 'passphrase', Auth::API_KEY_VERSION_V2); // Auth version v1 // $auth = new Auth('key', 'secret', 'passphrase'); $api = new Order($auth, new SwooleHttp); // Create 50 orders CONCURRENTLY in 1 second for ($i = 0; $i < 50; $i++) { go(function () use ($api, $i) { $order = [ 'clientOid' => uniqid(), 'price' => '1', 'size' => '1', 'symbol' => 'BTC-USDT', 'type' => 'limit', 'side' => 'buy', 'remark' => 'ORDER#' . $i, ]; try { $result = $api->create($order); var_dump($result); } catch (\Throwable $e) { var_dump($e->getMessage()); } }); } });
API list
KuCoin\SDK\PrivateApi\Account
API | Authentication | Description |
---|---|---|
KuCoin\SDK\PrivateApi\Account::create() | YES | https://docs.kucoin.com/#create-an-account |
KuCoin\SDK\PrivateApi\Account::getList() | YES | https://docs.kucoin.com/#list-accounts |
KuCoin\SDK\PrivateApi\Account::getDetail() | YES | https://docs.kucoin.com/#get-an-account |
KuCoin\SDK\PrivateApi\Account::getLedgers() | YES | DEPRECATED https://docs.kucoin.com/#get-account-ledgers-deprecated |
KuCoin\SDK\PrivateApi\Account::getHolds() | YES | https://docs.kucoin.com/#get-holds |
KuCoin\SDK\PrivateApi\Account::innerTransfer() | YES | DEPRECATED https://docs.kucoin.com/#inner-transfer |
KuCoin\SDK\PrivateApi\Account::innerTransferV2() | YES | https://docs.kucoin.com/#inner-transfer |
KuCoin\SDK\PrivateApi\Account::getSubAccountUsers() | YES | https://docs.kucoin.com/#get-user-info-of-all-sub-accounts |
KuCoin\SDK\PrivateApi\Account::getSubAccountDetail() | YES | https://docs.kucoin.com/#get-account-balance-of-a-sub-account |
KuCoin\SDK\PrivateApi\Account::getSubAccountList() | YES | https://docs.kucoin.com/#get-the-aggregated-balance-of-all-sub-accounts-of-the-current-user |
KuCoin\SDK\PrivateApi\Account::subTransfer() | YES | DEPRECATED https://docs.kucoin.com/#transfer-between-master-account-and-sub-account |
KuCoin\SDK\PrivateApi\Account::subTransferV2() | YES | https://docs.kucoin.com/#transfer-between-master-user-and-sub-user |
KuCoin\SDK\PrivateApi\Account::getLedgersV2() | YES | https://docs.kucoin.com/#get-account-ledgers |
KuCoin\SDK\PrivateApi\Account::getSubUserV2() | YES | https://docs.kucoin.com/#get-paginated-list-of-sub-accounts |
KuCoin\SDK\PrivateApi\Account::getUserinfoV2() | YES | https://docs.kucoin.com/#get-account-summary-info-v2 |
KuCoin\SDK\PrivateApi\Account::createSubUserV2() | YES | https://docs.kucoin.com/#create-sub-account-v2 |
KuCoin\SDK\PrivateApi\Account::createSubUserApiKey() | YES | https://docs.kucoin.com/#create-spot-apis-for-sub-account |
KuCoin\SDK\PrivateApi\Account::getSubUserApiKey() | YES | https://docs.kucoin.com/#get-sub-account-spot-api-list |
KuCoin\SDK\PrivateApi\Account::updateSubUserApiKey() | YES | https://docs.kucoin.com/#modify-sub-account-spot-apis |
KuCoin\SDK\PrivateApi\Account::deleteSubUserApiKey() | YES | https://docs.kucoin.com/#delete-sub-account-spot-apis |
KuCoin\SDK\PrivateApi\Account::getSubAccountListV2() | YES | https://docs.kucoin.com/#get-paginated-sub-account-information |
KuCoin\SDK\PrivateApi\Account::getAccountTransferable() | YES | https://docs.kucoin.com/#get-the-transferable |
KuCoin\SDK\PrivateApi\Account::getHfLedgersV2() | YES | https://docs.kucoin.com/spot-hf/#account-ledger-in-high-frequency-trading-accounts |
KuCoin\SDK\PrivateApi\Deposit
API | Authentication | Description |
---|---|---|
KuCoin\SDK\PrivateApi\Deposit::createAddress() | YES | https://docs.kucoin.com/#create-deposit-address |
KuCoin\SDK\PrivateApi\Deposit::getAddress() | YES | https://docs.kucoin.com/#get-deposit-address |
KuCoin\SDK\PrivateApi\Deposit::getAddresses() | YES | https://docs.kucoin.com/#get-deposit-addresses-v2 |
KuCoin\SDK\PrivateApi\Deposit::getDeposits() | YES | https://docs.kucoin.com/#get-deposit-list |
KuCoin\SDK\PrivateApi\Deposit::getV1Deposits() | YES | https://docs.kucoin.com/#get-v1-historical-deposits-list |
KuCoin\SDK\PrivateApi\TradeFee
API | Authentication | Description |
---|---|---|
KuCoin\SDK\PrivateApi\TradeFee::getBaseFee() | YES | https://docs.kucoin.com/#basic-user-fee |
KuCoin\SDK\PrivateApi\TradeFee::getTradeFees() | YES | https://docs.kucoin.com/#actual-fee-rate-of-the-trading-pair |
KuCoin\SDK\PrivateApi\Symbol
API | Authentication | Description |
---|---|---|
KuCoin\SDK\PrivateApi\Symbol::getAggregatedFullOrderBook() | NO | DEPRECATED https://docs.kucoin.com/#get-full-order-book-aggregated |
KuCoin\SDK\PrivateApi\Order
KuCoin\SDK\PrivateApi\OrderTest
API | Authentication | Description |
---|---|---|
KuCoin\SDK\PrivateApi\Order::createTest() | YES | https://www.kucoin.com/docs/rest/spot-trading/orders/place-order-test |
KuCoin\SDK\PrivateApi\Order::hfCreateTest() | YES | https://www.kucoin.com/docs/rest/spot-trading/spot-hf-trade-pro-account/place-hf-order-test |
KuCoin\SDK\PrivateApi\Order::createMarginTestOrder() | YES | https://www.kucoin.com/docs/rest/margin-trading/margin-hf-trade/place-hf-order-test |
KuCoin\SDK\PrivateApi\OcoOrder
API | Authentication | Description |
---|---|---|
KuCoin\SDK\PrivateApi\OcoOrder::create() | YES | https://www.kucoin.com/docs/rest/spot-trading/oco-order/place-order |
KuCoin\SDK\PrivateApi\OcoOrder::cancel() | YES | https://www.kucoin.com/docs/rest/spot-trading/oco-order/cancel-order-by-orderid |
KuCoin\SDK\PrivateApi\OcoOrder::cancelByClientOid() | YES | https://www.kucoin.com/docs/rest/spot-trading/oco-order/cancel-order-by-clientoid |
KuCoin\SDK\PrivateApi\OcoOrder::cancelMulti() | YES | https://www.kucoin.com/docs/rest/spot-trading/oco-order/cancel-multiple-orders |
KuCoin\SDK\PrivateApi\OcoOrder::getDetail() | YES | https://www.kucoin.com/docs/rest/spot-trading/oco-order/get-order-info-by-orderid |
KuCoin\SDK\PrivateApi\OcoOrder::getDetailByClientOid() | YES | https://www.kucoin.com/docs/rest/spot-trading/oco-order/get-order-info-by-clientoid |
KuCoin\SDK\PrivateApi\OcoOrder::getList() | YES | https://www.kucoin.com/docs/rest/spot-trading/oco-order/get-order-list |
KuCoin\SDK\PrivateApi\Earn
KuCoin\SDK\PrivateApi\StopOrder
API | Authentication | Description |
---|---|---|
KuCoin\SDK\PrivateApi\StopOrder::create() | YES | https://docs.kucoin.com/#place-a-new-order-2 |
KuCoin\SDK\PrivateApi\StopOrder::cancel() | YES | https://docs.kucoin.com/#cancel-an-order-2 |
KuCoin\SDK\PrivateApi\StopOrder::cancelBatch() | YES | https://docs.kucoin.com/#cancel-orders |
KuCoin\SDK\PrivateApi\StopOrder::getList() | YES | https://docs.kucoin.com/#list-stop-orders |
KuCoin\SDK\PrivateApi\StopOrder::getDetail() | YES | https://docs.kucoin.com/#get-single-order-info |
KuCoin\SDK\PrivateApi\StopOrder::getDetailByClientOid() | YES | https://docs.kucoin.com/#get-single-order-by-clientoid |
KuCoin\SDK\PrivateApi\StopOrder::cancelByClientOid() | YES | https://docs.kucoin.com/#cancel-single-order-by-clientoid-2 |
KuCoin\SDK\PrivateApi\Fill
API | Authentication | Description |
---|---|---|
KuCoin\SDK\PrivateApi\Fill::getList() | YES | https://docs.kucoin.com/#list-fills |
KuCoin\SDK\PrivateApi\Fill::getRecentList() | YES | https://docs.kucoin.com/#recent-fills |
KuCoin\SDK\PrivateApi\WebSocketFeed
API | Authentication | Description |
---|---|---|
KuCoin\SDK\PrivateApi\WebSocketFeed::getPublicServer() | NO | https://docs.kucoin.com/#apply-connect-token |
KuCoin\SDK\PrivateApi\WebSocketFeed::getPrivateServer() | YES | https://docs.kucoin.com/#apply-connect-token |
KuCoin\SDK\PrivateApi\WebSocketFeed::subscribePublicChannel() | NO | https://docs.kucoin.com/#public-channels |
KuCoin\SDK\PrivateApi\WebSocketFeed::subscribePublicChannels() | NO | https://docs.kucoin.com/#public-channels |
KuCoin\SDK\PrivateApi\WebSocketFeed::subscribePrivateChannel() | YES | https://docs.kucoin.com/#private-channels |
KuCoin\SDK\PrivateApi\WebSocketFeed::subscribePrivateChannels() | YES | https://docs.kucoin.com/#private-channels |
KuCoin\SDK\PrivateApi\Withdrawal
API | Authentication | Description |
---|---|---|
KuCoin\SDK\PrivateApi\Withdrawal::getQuotas() | YES | https://docs.kucoin.com/#get-withdrawal-quotas |
KuCoin\SDK\PrivateApi\Withdrawal::getList() | YES | https://docs.kucoin.com/#get-withdrawals-list |
KuCoin\SDK\PrivateApi\Withdrawal::getV1List() | YES | https://docs.kucoin.com/#get-v1-historical-withdrawals-list |
KuCoin\SDK\PrivateApi\Withdrawal::apply() | YES | https://docs.kucoin.com/#apply-withdraw |
KuCoin\SDK\PrivateApi\Withdrawal::cancel() | YES | https://docs.kucoin.com/#cancel-withdrawal |
KuCoin\SDK\PublicApi\Currency
API | Authentication | Description |
---|---|---|
KuCoin\SDK\PublicApi\Currency::getList() | NO | https://docs.kucoin.com/#get-currencies |
KuCoin\SDK\PublicApi\Currency::getDetail() | NO | https://docs.kucoin.com/#get-currency-detail |
KuCoin\SDK\PublicApi\Currency::getPrices() | NO | https://docs.kucoin.com/#get-fiat-price |
KuCoin\SDK\PublicApi\Currency::getV2Detail() | NO | https://docs.kucoin.com/#get-currency-detail-recommend |
KuCoin\SDK\PublicApi\Symbol
API | Authentication | Description |
---|---|---|
KuCoin\SDK\PublicApi\Symbol::getList() | NO | DEPRECATED https://docs.kucoin.com/#get-symbols-list-deprecated |
KuCoin\SDK\PublicApi\Symbol::getTicker() | NO | https://docs.kucoin.com/#get-ticker |
KuCoin\SDK\PublicApi\Symbol::getAllTickers() | NO | https://docs.kucoin.com/#get-all-tickers |
KuCoin\SDK\PublicApi\Symbol::getAggregatedPartOrderBook() | NO | https://docs.kucoin.com/#get-part-order-book-aggregated |
KuCoin\SDK\PublicApi\Symbol::getTradeHistories() | NO | https://docs.kucoin.com/#get-trade-histories |
KuCoin\SDK\PublicApi\Symbol::getKLines() | NO | https://docs.kucoin.com/#get-klines |
KuCoin\SDK\PublicApi\Symbol::get24HStats() | NO | https://docs.kucoin.com/#get-24hr-stats |
KuCoin\SDK\PublicApi\Symbol::getMarkets() | NO | https://docs.kucoin.com/#get-market-list |
KuCoin\SDK\PublicApi\Symbol::getListV2() | NO | https://docs.kucoin.com/#get-symbols-list |
KuCoin\SDK\PublicApi\Symbol::getV2SymbolDetail() | NO | https://www.kucoin.com/docs/rest/spot-trading/market-data/get-symbol-detail |
KuCoin\SDK\PrivateApi\Margin
KuCoin\SDK\PrivateApi\Lend
API | Authentication | Description |
---|---|---|
KuCoin\SDK\PrivateApi\Lend::getCurrencies() | YES | https://www.kucoin.com/docs/rest/margin-trading/lending-market-v3-/get-currency-information |
KuCoin\SDK\PrivateApi\Lend::getMarketInterestRate() | YES | https://www.kucoin.com/docs/rest/margin-trading/lending-market-v3-/get-interest-rates |
KuCoin\SDK\PrivateApi\Lend::purchase() | YES | https://www.kucoin.com/docs/rest/margin-trading/lending-market-v3-/subscription |
KuCoin\SDK\PrivateApi\Lend::redeem() | YES | https://www.kucoin.com/docs/rest/margin-trading/lending-market-v3-/redemption |
KuCoin\SDK\PrivateApi\Lend::purchaseUpdate() | YES | https://www.kucoin.com/docs/rest/margin-trading/lending-market-v3-/modify-subscription-orders |
KuCoin\SDK\PrivateApi\Lend::getRedeemOrders() | YES | https://www.kucoin.com/docs/rest/margin-trading/lending-market-v3-/get-redemption-orders |
KuCoin\SDK\PrivateApi\Lend::getPurchaseOrders() | YES | https://www.kucoin.com/docs/rest/margin-trading/lending-market-v3-/get-subscription-orders |
KuCoin\SDK\PrivateApi\IsolatedMargin
API | Authentication | Description |
---|---|---|
KuCoin\SDK\PrivateApi\IsolatedMargin::getSymbols() | YES | https://docs.kucoin.com/#query-isolated-margin-trading-pair-configuration |
KuCoin\SDK\PrivateApi\IsolatedMargin::getAccountList() | YES | https://docs.kucoin.com/#query-isolated-margin-account-info |
KuCoin\SDK\PrivateApi\IsolatedMargin::getAccountDetail() | YES | https://docs.kucoin.com/#query-single-isolated-margin-account-info |
KuCoin\SDK\PrivateApi\IsolatedMargin::borrow() | YES | DEPRECATED https://docs.kucoin.com/#isolated-margin-borrowing |
KuCoin\SDK\PrivateApi\IsolatedMargin::getOutstanding() | YES | DEPRECATED https://docs.kucoin.com/#query-outstanding-repayment-records |
KuCoin\SDK\PrivateApi\IsolatedMargin::getRepaid() | YES | DEPRECATED https://docs.kucoin.com/#query-repayment-records |
KuCoin\SDK\PrivateApi\IsolatedMargin::repayAll() | YES | DEPRECATED https://docs.kucoin.com/#quick-repayment |
KuCoin\SDK\PrivateApi\IsolatedMargin::repaySingle() | YES | DEPRECATED https://docs.kucoin.com/#single-repayment |
KuCoin\SDK\PrivateApi\Affiliate
API | Authentication | Description |
---|---|---|
KuCoin\SDK\PublicApi\Time::timestamp() | NO | https://www.kucoin.com/docs/rest/affiliate/get-affiliate-user-rebate-information |
KuCoin\SDK\PublicApi\Time
API | Authentication | Description |
---|---|---|
KuCoin\SDK\PublicApi\Time::timestamp() | NO | https://www.kucoin.com/docs/rest/spot-trading/market-data/get-server-time |
KuCoin\SDK\PublicApi\ServiceStatus
API | Authentication | Description |
---|---|---|
KuCoin\SDK\PublicApi\ServiceStatus::getStatus() | NO | https://docs.kucoin.com/#service-status |
KuCoin\SDK\PublicApi\Margin
API | Authentication | Description |
---|---|---|
KuCoin\SDK\PublicApi\Margin::getSymbolsMarkPrice() | NO | https://www.kucoin.com/docs/rest/margin-trading/margin-info/get-all-margin-trading-pairs-mark-prices |
Run tests
Modify your API key in
phpunit.xml
first.
# Add your API configuration items into the environmental variable first export API_BASE_URI=https://api.kucoin.com export API_KEY=key export API_SECRET=secret export API_PASSPHRASE=passphrase export API_KEY_VERSION=2 composer test