Skip to content

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

EndpointReturnsUse
GET /v1/prices/tokensList of priced tokens with current pricesToken directory / autocomplete
GET /v1/prices/tokens/{symbol}One token's current price, supply, market capTicker / market widgets
GET /v1/prices/{symbol}/atPrice at exact timestamp (1-minute precision)Tax events, settled trades
GET /v1/prices/{symbol}/dailyDaily VWAP, single dateEnd-of-day P&L
GET /v1/prices/{symbol}/weeklyWeekly VWAPPerformance charts
GET /v1/prices/{symbol}/monthlyMonthly OHLC + VWAPReporting
GET /v1/prices/{symbol}/monthly-averageIAS 21 monthly averageAccounting (income translation)
GET /v1/prices/{symbol}/historyDate-range time-seriesCharts / backtests
GET /v1/prices/{symbol}/fair-valueFMV with quality-flag attributionAudit-grade pricing
GET /v1/prices/batchBatch lookup, many symbols at oncePortfolio valuation
GET /v1/fx/rateFX rate between two fiatCurrency conversion
GET /v1/fx/monthly-averageIAS 21 FX monthly averageAccounting (income translation)
GET /v1/fx/currenciesAll 36 supported currenciesCurrency 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

bash
curl 'https://api.cryptachain.com/v1/prices/tokens/ETH?currency=EUR' \
  -H "X-API-Key: $CRYPTACHAIN_API_KEY"

Response:

json
{
  "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:

bash
curl 'https://api.cryptachain.com/v1/prices/BTC/at?timestamp=2026-04-04T14:35:22Z&currency=USD' \
  -H "X-API-Key: $CRYPTACHAIN_API_KEY"
python
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())
typescript
const r = await fetch(
  'https://api.cryptachain.com/v1/prices/BTC/at?timestamp=2026-04-04T14:35:22Z&currency=USD',
  { headers: { 'X-API-Key': process.env.CRYPTACHAIN_API_KEY! } },
);
console.log(await r.json());

Response:

json
{
  "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.

bash
# Monthly average ETH → EUR for March 2026
curl 'https://api.cryptachain.com/v1/prices/ETH/monthly-average?year=2026&month=3&currency=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):

json
{
  "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:

bash
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:

json
{
  "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

CryptaChain API — built by CryptaCount Luxembourg S.a r.l.