Pricing Walkthrough
Fair-market-value pricing for crypto assets, in 36 fiat currencies, with daily / weekly / monthly aggregates and sub-day precision for tax timestamps.
The price surface lives under GET /v1/prices/... and GET /v1/fx/.... Internally it is backed by VWAP aggregated across multiple centralized spot markets (see Methodology) plus ECB FX rates. This guide shows the three most common workflows.
Endpoint map
| Endpoint | Returns | Use |
|---|---|---|
GET /v1/prices/tokens | List of priced tokens with current prices | Token directory / autocomplete |
GET /v1/prices/tokens/{symbol} | One token's current price, supply, market cap | Ticker / market widgets |
GET /v1/prices/{symbol}/at | Price at exact timestamp (1-minute precision) | Tax events, settled trades |
GET /v1/prices/{symbol}/daily | Daily VWAP, single date | End-of-day P&L |
GET /v1/prices/{symbol}/weekly | Weekly VWAP | Performance charts |
GET /v1/prices/{symbol}/monthly | Monthly OHLC + VWAP | Reporting |
GET /v1/prices/{symbol}/monthly-average | IAS 21 monthly average | Accounting (income translation) |
GET /v1/prices/{symbol}/history | Date-range time-series | Charts / backtests |
GET /v1/prices/{symbol}/fair-value | FMV with quality-flag attribution | Audit-grade pricing |
GET /v1/prices/batch | Batch lookup, many symbols at once | Portfolio valuation |
GET /v1/fx/rate | FX rate between two fiat | Currency conversion |
GET /v1/fx/monthly-average | IAS 21 FX monthly average | Accounting (income translation) |
GET /v1/fx/currencies | All 36 supported currencies | Currency picker UI |
Every price endpoint accepts a currency parameter (defaults to USD). Internally we always compute in USD then translate via the FX rate of the same day, so a request for BTC in EUR on 2026-04-04 is mathematically BTC/USD × USD/EUR on 2026-04-04.
Example 1 — current ETH price in EUR
curl 'https://api.cryptachain.com/v1/prices/tokens/ETH?currency=EUR' \
-H "X-API-Key: $CRYPTACHAIN_API_KEY"Response:
{
"symbol": "ETH",
"name": "Ethereum",
"currency": "EUR",
"price": 3542.18,
"price_usd": 3850.25,
"fx_rate": 1.0870,
"market_cap_eur": 425847293847,
"volume_24h_eur": 11847293847.50,
"source": "vwap",
"source_count": 18,
"timestamp": "2026-04-04T23:59:59Z"
}Note: fx_rate is "1 EUR = X USD" — multiply, do not divide. See FX conversion for the convention.
Example 2 — exact-timestamp price for a tax event
For a tax-reporting workflow, you usually need the price at the exact block timestamp of a transfer (not midnight UTC). Use /at:
curl 'https://api.cryptachain.com/v1/prices/BTC/at?timestamp=2026-04-04T14:35:22Z¤cy=USD' \
-H "X-API-Key: $CRYPTACHAIN_API_KEY"import os, requests
r = requests.get(
"https://api.cryptachain.com/v1/prices/BTC/at",
params={"timestamp": "2026-04-04T14:35:22Z", "currency": "USD"},
headers={"X-API-Key": os.environ["CRYPTACHAIN_API_KEY"]},
)
print(r.json())const r = await fetch(
'https://api.cryptachain.com/v1/prices/BTC/at?timestamp=2026-04-04T14:35:22Z¤cy=USD',
{ headers: { 'X-API-Key': process.env.CRYPTACHAIN_API_KEY! } },
);
console.log(await r.json());Response:
{
"symbol": "BTC",
"currency": "USD",
"timestamp": "2026-04-04T14:35:22Z",
"matched_timestamp": "2026-04-04T14:35:00Z",
"price": 68421.50,
"source": "vwap_1m",
"source_count": 12,
"quality_score": 0.97
}matched_timestamp is the actual minute bucket used. We snap your request down to the previous closed 1-minute bucket. quality_score (0–1) reflects cross-source agreement at that minute — see Methodology for how it is computed.
Example 3 — IAS 21 monthly average for a year-end report
For income-statement translation under IAS 21 you need the monthly average rate, not the closing rate. The same applies to crypto-denominated income that needs translating to a reporting currency.
# Monthly average ETH → EUR for March 2026
curl 'https://api.cryptachain.com/v1/prices/ETH/monthly-average?year=2026&month=3¤cy=EUR' \
-H "X-API-Key: $CRYPTACHAIN_API_KEY"
# Monthly average FX EUR → USD for March 2026 (for cross-translation)
curl 'https://api.cryptachain.com/v1/fx/monthly-average?from=EUR&to=USD&year=2026&month=3' \
-H "X-API-Key: $CRYPTACHAIN_API_KEY"Response (price endpoint):
{
"symbol": "ETH",
"currency": "EUR",
"year": 2026,
"month": 3,
"average_price": 3487.45,
"data_points": 31,
"min_price": 3204.10,
"max_price": 3712.88,
"methodology": "arithmetic_mean_of_daily_vwap"
}data_points for prices is calendar days (crypto trades 24/7); data_points for FX is the number of ECB business days (~21–23 per month). Both responses include min / max for sanity-checking.
Example 4 — batch valuation for a portfolio
When valuing a portfolio with N assets, do not make N round-trips. Use /prices/batch:
curl -X POST 'https://api.cryptachain.com/v1/prices/batch' \
-H "X-API-Key: $CRYPTACHAIN_API_KEY" \
-H 'Content-Type: application/json' \
-d '{
"symbols": ["BTC","ETH","SOL","USDC","USDT","LINK","UNI","AAVE"],
"currency": "USD",
"date": "2026-04-04"
}'Response:
{
"currency": "USD",
"date": "2026-04-04",
"prices": {
"BTC": { "price": 68421.50, "source": "vwap" },
"ETH": { "price": 3850.25, "source": "vwap" },
"SOL": { "price": 142.10, "source": "vwap" },
"USDC": { "price": 1.00, "source": "stablecoin_peg" },
"USDT": { "price": 1.00, "source": "stablecoin_peg" },
"LINK": { "price": 14.32, "source": "vwap" },
"UNI": { "price": 7.84, "source": "vwap" },
"AAVE": { "price": 118.20, "source": "vwap" }
},
"missing": []
}Batch costs 0.5 credits per symbol (vs 1 for individual lookups). Anything not priced lands in the missing array — common reasons: ticker collision (e.g., two tokens with symbol BLOCK), token below the minimum-volume threshold, or token not yet listed on an Active source.
Common pitfalls
Ticker collisions
Ambiguous tickers (e.g., LUNA, FTT, anything reused after a collapse) are intentionally not priced by /by-symbol / /at — those endpoints prefer false-negatives over wrong-price-data. For these, look up the token by contract address via /prices/by-contract?chain=ethereum&address=0x... instead. The contract-address endpoint is unambiguous.
ECB closure days
On weekends, ECB holidays, and the days between Christmas and New Year, FX rates are gap-filled with the previous business day's rate. That means /fx/rate?from=EUR&to=USD&date=2026-12-25 will return Friday's rate, not an error. The date field in the response reflects the requested date; check source for "ecb_gap_fill" if you need to detect this. Daily-mean FX averages skip these days entirely.
Stablecoin pricing
USDC, USDT, DAI, FDUSD are priced at their peg (1 USD) by default rather than their market price. To get the market price (which can deviate during depeg events), use /prices/by-contract — it always returns VWAP.
Try it live
The /playground is the fastest way to explore the price surface. Filter operations by tag Prices or FX.
Next steps
- Methodology — VWAP, quality filters, source tier model
- Currencies — the 36 supported fiat currencies
- FX conversion — handling weekends, holidays, pegs
- Batch processing — pagination + rate-limit best practices