
Security News
Crates.io Users Targeted by Phishing Emails
The Rust Security Response WG is warning of phishing emails from rustfoundation.dev targeting crates.io users.
@coinbase-sample/prime-sdk-ts
Advanced tools
[](https://badge.fury.io/js/%40coinbase-sample%2Fprime-sdk-ts) [](https://opensource.org/licenses/Apache-2.
Welcome to the Coinbase Prime API TypeScript SDK. This TypeScript project provides a comprehensive, type-safe interface to the Coinbase Prime API with multiple consumption patterns optimized for different use cases.
The Prime Typescript SDK sample library is free and open source and released under the Apache License, Version 2.0.
The application and code are only available for demonstration purposes.
npm install @coinbase-sample/prime-sdk-ts
The SDK provides a modular client with lazy-loaded services for the best developer experience:
import { CoinbasePrimeClientWithServices } from '@coinbase-sample/prime-sdk-ts';
// Create client from environment variables
const client = CoinbasePrimeClientWithServices.fromEnv();
// Access services directly - no manual instantiation needed!
const portfolios = await client.portfolios.listPortfolios();
const orders = await client.orders.listPortfolioOrders({ portfolioId: 'your-id' });
const wallets = await client.wallets.listWallets({ portfolioId: 'your-id' });
Copy env.example to .env and populate with your values:
cp env.example .env
Then edit .env with your actual credentials:
# API Credentials (JSON format)
PRIME_CREDENTIALS={"AccessKey":"your-access-key","SecretKey":"your-secret-key","Passphrase":"your-passphrase"}
# Required IDs
ENTITY_ID=your-entity-id
PORTFOLIO_ID=your-portfolio-id
WALLET_ID=your-wallet-id
const portfolios = await client.portfolios.listPortfolios();
console.log(portfolios.portfolios);
const assets = await client.assets.listAssets({
entityId: portfolioId
});
console.log(assets.assets);
import { OrderSide, OrderType } from '@coinbase-sample/prime-sdk-ts';
const order = await client.orders.createOrder({
portfolioId: 'your-portfolio-id',
productId: 'BTC-USD',
side: OrderSide.BUY,
type: OrderType.MARKET,
baseQuantity: '0.001'
});
console.log(order.orderId);
See the example folder for more robust examples for many of the available services and endpoints.
The SDK provides powerful pagination controls at both the client and request level:
const client = CoinbasePrimeClientWithServices.fromEnv(undefined, {
maxPages: 5, // Max pages to fetch automatically
maxItems: 1000, // Max total items across all pages
defaultLimit: 100 // Items per page
});
// Or per-request
const response = await client.transactions.listPortfolioTransactions(
{ portfolioId, limit: 50 },
{ maxPages: 10, maxItems: 500 }
);
All paginated responses include powerful methods for manual pagination control:
// Get the first page
const firstPage = await client.transactions.listPortfolioTransactions({ portfolioId });
// Check if there are more pages
if (firstPage.hasNext()) {
console.log('More data available');
}
// Get the next page manually
const secondPage = await firstPage.next();
// Fetch ALL remaining pages and combine the data
const allTransactions = await firstPage.fetchAll(
undefined, // options
(page, totalItems) => console.log(`Fetched page ${page}, total items: ${totalItems}`)
);
// Example: Manual pagination loop
let currentPage = firstPage;
while (currentPage.hasNext()) {
console.log(`Processing ${currentPage.transactions.length} transactions`);
currentPage = await currentPage.next();
}
| Method | Description | Returns |
|---|---|---|
hasNext() | Check if more pages are available | boolean |
next() | Fetch the next page | Promise<Response | null> |
fetchAll() | Fetch all remaining pages and combine data | Promise<DataArray[]> |
getNextCursor() | Get the next page cursor | string | undefined |
While the modular client (CoinbasePrimeClientWithServices) is recommended for most use cases, the SDK provides additional import patterns optimized for specific scenarios:
@coinbase-sample/prime-sdk-ts/manual)When you need full control over service instantiation:
import { CoinbasePrimeClient, OrdersService, WalletsService } from '@coinbase-sample/prime-sdk-ts/manual';
const client = CoinbasePrimeClient.fromEnv();
const orders = new OrdersService(client);
const wallets = new WalletsService(client);
// Only the services you import are included in your bundle
@coinbase-sample/prime-sdk-ts/client)For services-only patterns (97% smaller bundles):
import { CoinbasePrimeClient } from '@coinbase-sample/prime-sdk-ts/client';
import { OrdersService } from '@coinbase-sample/prime-sdk-ts/services';
const client = CoinbasePrimeClient.fromEnv();
const orders = new OrdersService(client);
// Total bundle: ~3kb (perfect for microservices)
| Import Pattern | Bundle Size | Use Case |
|---|---|---|
| Modular Client (recommended) | ~30kb | Best developer experience |
| Manual Client | ~90kb | Full control, all services available |
| Services + Client | ~6kb | Custom implementations |
| Individual Service | ~3kb | Microservices, Lambda functions |
For shared libraries or type definitions:
import type { CreateOrderRequest, OrderSide } from '@coinbase-sample/prime-sdk-ts/types';
// 0kb runtime - perfect for shared type libraries
git clone https://github.com/coinbase-samples/prime-sdk-ts.git
cd prime-sdk-ts
npm install
npm run build
The SDK includes comprehensive examples in the example/ directory:
# Set up environment (copy env.example to .env first)
cp env.example .env
# Edit .env with your actual entityId, portfolioId, and walletId
# Run examples
node example/listPortfolios.js
node example/createOrder.js
node example/listWallets.js TRADING
The SDK is built with TypeScript and provides full type safety:
import {
CoinbasePrimeClientWithServices,
OrderSide,
OrderType,
CreateOrderRequest
} from '@coinbase-sample/prime-sdk-ts';
const client = CoinbasePrimeClientWithServices.fromEnv();
// Full IntelliSense and type checking
const request: CreateOrderRequest = {
portfolioId: 'your-id',
productId: 'BTC-USD',
side: OrderSide.BUY, // Enum with autocomplete
type: OrderType.MARKET,
baseQuantity: '0.001'
};
const order = await client.orders.createOrder(request);
// Response is fully typed - no manual type assertions needed
[0.6.4] - 2025-SEP-03
FAQs
[](https://badge.fury.io/js/%40coinbase-sample%2Fprime-sdk-ts) [](https://opensource.org/licenses/Apache-2.
The npm package @coinbase-sample/prime-sdk-ts receives a total of 171 weekly downloads. As such, @coinbase-sample/prime-sdk-ts popularity was classified as not popular.
We found that @coinbase-sample/prime-sdk-ts demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Security News
The Rust Security Response WG is warning of phishing emails from rustfoundation.dev targeting crates.io users.

Product
Socket now lets you customize pull request alert headers, helping security teams share clear guidance right in PRs to speed reviews and reduce back-and-forth.

Product
Socket's Rust support is moving to Beta: all users can scan Cargo projects and generate SBOMs, including Cargo.toml-only crates, with Rust-aware supply chain checks.