Quick Start
Get from zero to your first API call in 5 minutes.
Step 1: Get your API key
Sign up at app.cryptachain.com/signup. Free tier — no credit card required.
After verifying your email, you'll receive an API key like:
csk_free_a8f2b91c3d4e5f6789012345abcdef0123456789WARNING
Your API key is shown once at creation. Copy it immediately and store it securely.
Set it as an environment variable:
bash
export CRYPTACHAIN_API_KEY="csk_free_a8f2..."Step 2: Make your first call
Fetch the ETH balance for vitalik.eth:
bash
curl https://api.cryptachain.com/v1/wallets/0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045/native-balance?chain=ethereum \
-H "X-API-Key: $CRYPTACHAIN_API_KEY"typescript
const res = await fetch(
'https://api.cryptachain.com/v1/wallets/0xd8dA.../native-balance?chain=ethereum',
{ headers: { 'X-API-Key': process.env.CRYPTACHAIN_API_KEY! } }
);
const data = await res.json();
console.log(data);python
import requests, os
res = requests.get(
'https://api.cryptachain.com/v1/wallets/0xd8dA.../native-balance',
params={'chain': 'ethereum'},
headers={'X-API-Key': os.environ['CRYPTACHAIN_API_KEY']}
)
print(res.json())Response 200 OK
json
{
"address": "0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045",
"chain": "ethereum",
"balance": "1234.567890123456789",
"balance_usd": 4815162.34,
"block_number": 21950000,
"timestamp": "2026-04-04T14:30:00Z"
}Step 3: Fetch transfer history
GET
/v1/wallets/{address}/transfersbash
curl "https://api.cryptachain.com/v1/wallets/0xd8dA.../transfers?chain=ethereum&limit=5" \
-H "X-API-Key: $CRYPTACHAIN_API_KEY"Returns paginated transfers with from/to addresses, amounts, prices, and transaction hashes.
Step 4: Handle rate limits
The API returns rate limit headers on every response:
X-RateLimit-Limit: 10
X-RateLimit-Remaining: 7
X-RateLimit-Reset: 1712345678If you exceed the limit, you'll receive a 429 response. Implement exponential backoff:
typescript
async function fetchWithRetry(url: string, opts: RequestInit, maxRetries = 3) {
for (let attempt = 0; attempt <= maxRetries; attempt++) {
const res = await fetch(url, opts);
if (res.status !== 429) return res;
const retryAfter = parseInt(res.headers.get('Retry-After') || '1');
const jitter = Math.random() * 0.5;
await new Promise(r => setTimeout(r, (retryAfter + jitter) * 1000));
}
throw new Error('Rate limit exceeded after retries');
}Step 5: Check the response headers
Every response includes credit and rate limit information:
| Header | Description |
|---|---|
X-RateLimit-Limit | Requests allowed per minute |
X-RateLimit-Remaining | Requests remaining in current window |
X-RateLimit-Reset | Unix timestamp when window resets |
What's next?
- Authentication — API key formats, rotation, best practices
- Wallets API — Full transfer and balance endpoints
- Screening — Compliance screening for addresses
- Pricing — Fair market value and FX rates