mrbeandev / coinbase-cdp
Modern PHP client for the Coinbase Developer Platform (CDP) API — supports ES256 JWT auth, accounts, addresses, and transactions.
v1.0.0
2026-04-11 13:48 UTC
Requires
- php: >=8.1
- firebase/php-jwt: ^6.0
- guzzlehttp/guzzle: ^7.0
README
Modern PHP client for the Coinbase Developer Platform (CDP) API.
Supports ES256 (ECDSA P-256) JWT authentication, the current auth method required by Coinbase since Feb 2025.
Requirements
- PHP 8.1+
- OpenSSL extension
- ECDSA API key from portal.cdp.coinbase.com
Installation
composer require mrbeandev/coinbase-cdp
Quick Start
use MrBeanDev\CoinbaseCDP\CoinbaseCDP; $cb = new CoinbaseCDP( orgId: 'your-org-uuid', apiKeyId: 'your-api-key-uuid', privateKey: file_get_contents('cdp_key.pem'), ); // List accounts $accounts = $cb->accounts()->list(); // Get BTC balance $btc = $cb->accounts()->get('BTC'); echo $btc['data']['balance']['amount']; // Create a deposit address $address = $cb->addresses()->create($accountId, 'User deposit'); echo $address['data']['address']; // Send crypto $tx = $cb->transactions()->send( accountId: $accountId, to: '0xabc123...', amount: '0.01', currency: 'ETH', ); // Poll for incoming deposits $deposits = $cb->transactions()->confirmedDeposits($accountId);
API
Accounts
$cb->accounts()->list($limit, $startingAfter) // paginated list $cb->accounts()->get($idOrCurrency) // by UUID or "BTC" $cb->accounts()->getByCurrency('ETH') // shortcut $cb->accounts()->all() // auto-paginate all
Addresses
$cb->addresses()->create($accountId, $name, $network) // new deposit address $cb->addresses()->list($accountId) // list addresses $cb->addresses()->get($accountId, $addressId) // single address $cb->addresses()->transactions($accountId, $addressId) // txs for address
Transactions
$cb->transactions()->list($accountId, $limit, $order) // list all $cb->transactions()->get($accountId, $txId) // single tx $cb->transactions()->send($accountId, $to, $amount, $currency) // send crypto $cb->transactions()->transfer($from, $to, $amount, $currency) // internal $cb->transactions()->deposits($accountId, $limit, $status) // filter receives $cb->transactions()->confirmedDeposits($accountId) // completed only
Authentication
This library uses ES256 JWT authentication as required by CDP. Each API request generates a fresh JWT signed with your EC private key. No legacy API keys or HMAC auth.
Get your credentials at portal.cdp.coinbase.com — select ECDSA key type.
Error Handling
use MrBeanDev\CoinbaseCDP\Exception\CoinbaseException; try { $cb->transactions()->send(...); } catch (CoinbaseException $e) { echo $e->getMessage(); // human-readable error print_r($e->getResponseBody()); // raw API response }
License
MIT