DexPaprika SDK

The official JavaScript client library for the DexPaprika API, providing easy access to decentralized exchange data across multiple blockchain networks.
Developed and maintained by Coinpaprika.
Installation
npm install dexpaprika-sdk
Important: API v1.3.0 Migration Notice
⚠️ Breaking Changes in v1.4.0: The global pools endpoint has been deprecated. All pool queries now require a network specification.
const pools = await client.pools.list();
const ethereumPools = await client.pools.listByNetwork('ethereum');
const solanaPools = await client.pools.listByNetwork('solana');
Usage
import { DexPaprikaClient } from 'dexpaprika-sdk';
const client = new DexPaprikaClient();
const networks = await client.networks.list();
console.log(networks);
const pools = await client.pools.listByNetwork('ethereum', {
page: 0,
limit: 10
});
console.log(pools.pools);
const results = await client.search.search('bitcoin');
console.log(`Found ${results.tokens.length} tokens`);
Options Pattern API
The DexPaprika SDK uses an options pattern for API method parameters, which provides better flexibility, readability, and extensibility:
import { DexPaprikaClient } from 'dexpaprika-sdk';
const client = new DexPaprikaClient();
const pools = await client.pools.listByNetwork('ethereum', {
page: 0,
limit: 10,
sort: 'desc',
orderBy: 'volume_usd'
});
const poolDetails = await client.pools.getDetails(
'ethereum',
'0x88e6a0c2ddd26feeb64f039a2c41296fcb3f5640',
{ inversed: false }
);
const tokenPools = await client.tokens.getPools(
'ethereum',
'0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2',
{
limit: 5,
sort: 'desc',
orderBy: 'volume_usd',
pairWith: '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48'
}
);
const ohlcv = await client.pools.getOHLCV(
'ethereum',
'0x88e6a0c2ddd26feeb64f039a2c41296fcb3f5640',
{
start: '2023-01-01',
end: '2023-01-07',
limit: 7,
interval: '24h',
inversed: false
}
);
Advanced Configuration
The SDK supports automatic retry with exponential backoff and response caching, both enabled by default:
import { DexPaprikaClient } from 'dexpaprika-sdk';
const client = new DexPaprikaClient(
'https://api.dexpaprika.com',
{},
{
retry: {
maxRetries: 4,
delaySequenceMs: [100, 500, 1000, 5000],
retryableStatuses: [408, 429, 500, 502, 503, 504]
},
cache: {
ttl: 5 * 60 * 1000,
maxSize: 1000,
enabled: true
}
}
);
const firstCall = await client.networks.list();
const secondCall = await client.networks.list();
client.clearCache();
console.log(client.cacheSize);
client.setCacheEnabled(false);
API Reference
For detailed API documentation, visit docs.dexpaprika.com
Networks & DEXes
const networks = await client.networks.list();
const dexes = await client.dexes.listByNetwork('ethereum', {
limit: 10
});
Pools & Transactions
const topPools = await client.pools.listByNetwork('ethereum', {
page: 0,
limit: 10,
sort: 'desc',
orderBy: 'volume_usd'
});
const solanaPools = await client.pools.listByNetwork('solana', { limit: 5 });
const fantomPools = await client.pools.listByNetwork('fantom', { limit: 5 });
const poolDetails = await client.pools.getDetails(
'ethereum',
'0x88e6a0c2ddd26feeb64f039a2c41296fcb3f5640'
);
const txs = await client.pools.getTransactions(
'ethereum',
'0x88e6a0c2ddd26feeb64f039a2c41296fcb3f5640',
{ limit: 20 }
);
OHLCV Data
For price charts:
const startDate = new Date();
startDate.setDate(startDate.getDate() - 7);
const ohlcv = await client.pools.getOHLCV(
'ethereum',
'0x88e6a0c2ddd26feeb64f039a2c41296fcb3f5640',
{
start: startDate.toISOString(),
interval: '24h',
limit: 7
}
);
Tokens
const token = await client.tokens.getDetails(
'ethereum',
'0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2'
);
const pools = await client.tokens.getPools(
'ethereum',
'0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2',
{
page: 0,
limit: 10,
sort: 'desc',
orderBy: 'volume_usd',
pairWith: '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48'
}
);
Search & Stats
const results = await client.search.search('bitcoin');
const stats = await client.utils.getStats();
TypeScript Types
The SDK includes TypeScript types for easier development. See the documentation for response type details.
Error Handling
The SDK includes specific error classes for better error handling:
import {
DexPaprikaClient,
DeprecatedEndpointError,
NetworkNotFoundError,
PoolNotFoundError,
ApiError
} from 'dexpaprika-sdk';
const client = new DexPaprikaClient();
try {
const pools = await client.pools.list();
} catch (error) {
if (error instanceof DeprecatedEndpointError) {
console.log('Migration required:', error.message);
const pools = await client.pools.listByNetwork('ethereum');
} else if (error instanceof NetworkNotFoundError) {
console.log('Invalid network:', error.message);
} else if (error instanceof PoolNotFoundError) {
console.log('Pool not found:', error.message);
} else {
console.error('Other error:', error.message);
}
}
Using the error helper:
import { parseError } from 'dexpaprika-sdk/dist/utils/helpers';
try {
const pools = await client.pools.listByNetwork('ethereum');
} catch (err) {
console.error(parseError(err));
}
Utilities
Helper functions:
import { formatVolume, formatPair } from 'dexpaprika-sdk/dist/utils/helpers';
console.log(formatVolume(1234567));
console.log(formatPair('ETH', 'USDC'));
Retry & Caching
You can also use the retry and caching utilities directly:
import { withRetry, Cache } from 'dexpaprika-sdk';
const result = await withRetry(
async () => {
return await someAsyncFunction();
},
{ maxRetries: 4, delaySequenceMs: [100, 200, 300, 400] }
);
const cache = new Cache({ ttl: 60 * 1000 });
cache.set('key', value);
const cachedValue = cache.get('key');
Resources
License
MIT
Contributing
Contributions are welcome! Please read our contributing guidelines before submitting a Pull Request.
Development and Testing
The SDK includes a comprehensive test suite to verify functionality:
npm test
npx ts-node tests/test-real-world.ts
npm run test:all
All test files are located in the tests/
directory:
test-basic.ts
- Basic API functionality tests
test-real-world.ts
- Tests with actual API calls and simulated failures
Support
For issues, questions, or feedback, please:
Disclaimer
This SDK is created and maintained by Coinpaprika. While we strive to provide accurate and up-to-date data, we make no guarantees regarding the accuracy, reliability, or completeness of the data provided through the DexPaprika API.