coinbase-advanced
A Rust async client library for the Coinbase Advanced Trade API.
- Complete REST API coverage for Coinbase Advanced Trade
- WebSocket support for real-time market data
- JWT (ES256) authentication
- Optional client-side rate limiting
- Async/await with Tokio
Usage
Authentication
Obtain API credentials from the Coinbase Developer Platform.
You need an API key and an EC private key in PEM format.
use coinbase_advanced::{Credentials, RestClient};
#[tokio::main]
async fn main() -> coinbase_advanced::Result<()> {
let credentials = Credentials::from_env()?;
let client = RestClient::builder()
.credentials(credentials)
.build()?;
Ok(())
}
Get account balances
use coinbase_advanced::{Credentials, RestClient};
#[tokio::main]
async fn main() -> coinbase_advanced::Result<()> {
let client = RestClient::builder()
.credentials(Credentials::from_env()?)
.build()?;
let accounts = client.accounts().list_all().await?;
for account in accounts {
println!("{}: {} {}", account.name, account.available_balance.value, account.currency);
}
Ok(())
}
Place an order
use coinbase_advanced::{Credentials, RestClient};
#[tokio::main]
async fn main() -> coinbase_advanced::Result<()> {
let client = RestClient::builder()
.credentials(Credentials::from_env()?)
.build()?;
let order = client.market_order()
.buy("BTC-USD")
.quote_size("100.00")
.send()
.await?;
println!("Order placed: {}", order.order_id);
Ok(())
}
WebSocket streaming
use coinbase_advanced::websocket::{WebSocketClient, Channel};
use futures::StreamExt;
#[tokio::main]
async fn main() -> coinbase_advanced::Result<()> {
let client = WebSocketClient::builder().build()?;
let mut stream = client.connect().await?;
client.subscribe(&[
Channel::Ticker { product_ids: vec!["BTC-USD".to_string()] },
]).await?;
while let Some(msg) = stream.next().await {
println!("{:?}", msg);
}
Ok(())
}
Configuration
Sandbox mode
let client = RestClient::builder()
.credentials(Credentials::from_env()?)
.sandbox(true)
.build()?;
Rate limiting
let client = RestClient::builder()
.credentials(Credentials::from_env()?)
.rate_limiting(true)
.build()?;
API coverage
| REST API |
WebSocket channels |
| Accounts |
Heartbeats |
| Products |
Ticker |
| Orders |
Level2 |
| Fees |
Candles |
| Portfolios |
Market Trades |
| Convert |
User |
| Data |
Status |
| Payment Methods |
|
| Perpetuals |
|
| Futures |
|
| Public |
|
Examples
See the examples directory:
basic.rs - Account and product queries
orders.rs - Order placement and management
websocket.rs - Real-time streaming
Run examples with:
cargo run --example basic