Exchange rates
Reference for the current DALP exchange rates API, including list, supported currencies, current pair reads, history queries, collection filters, pagination, and response envelopes.
The exchange rates API exposes fiat currency pairs that DALP can use for pricing, valuation, and reconciliation workflows. New integrations should call the current routes under /api/v2, which return DALP response envelopes and use the shared collection query format for lists.
The routes cover reads only. Feed setup, feed governance, and legal valuation policy remain outside this API contract.
Endpoints
| Job | Method and path | Use it for | Response shape |
|---|---|---|---|
| List exchange rates | GET /api/v2/exchange-rates | Discover available base and quote pairs, latest observations, and feed links. | Collection envelope with data, meta, and links. |
| Read the current pair rate | GET /api/v2/exchange-rates/{baseCurrency}/{quoteCurrency} | Read the latest observed rate for one currency pair. | Single-resource envelope with data and links.self. |
| Read historical pair rates | GET /api/v2/exchange-rates/{baseCurrency}/{quoteCurrency}/history | Inspect observations for one pair with collection filters and pagination. | Collection envelope with data, meta, and links. |
| List supported currencies | GET /api/v2/exchange-rates/supported-currencies | Build currency pickers from the codes the configured exchange-rate source currently supports. | Single-resource envelope with data and links.self. |
Exchange rate routes use ISO 4217 alpha-3 currency codes. Use uppercase codes such as EUR and USD in path parameters and filters.
List available rates
Call the list endpoint before asking for a specific conversion path. It returns the available pair records after DALP deduplicates the active feed rows for each pair.
curl --globoff "https://your-platform.example.com/api/v2/exchange-rates?filter[baseCurrency]=EUR&filter[quoteCurrency]=USD&page[limit]=50&page[offset]=0&sort=-effectiveAt" \
-H "X-Api-Key: sm_dalp_xxxxxxxxxxxxxxxx"The response uses the collection envelope:
{
"data": [
{
"baseCurrency": "EUR",
"quoteCurrency": "USD",
"rate": 1.08,
"effectiveAt": "2026-03-22T10:30:00.000Z",
"updatedAt": "2026-03-22T10:31:00.000Z",
"feedAddress": "0xabcdef1234567890abcdef1234567890abcdef12"
}
],
"meta": {
"total": 1,
"facets": {
"baseCurrency": [{ "value": "EUR", "count": 1 }],
"quoteCurrency": [{ "value": "USD", "count": 1 }]
}
},
"links": {
"self": "/v2/exchange-rates?filter[baseCurrency]=EUR&filter[quoteCurrency]=USD&page[limit]=50&page[offset]=0&sort=-effectiveAt",
"first": "/v2/exchange-rates?filter[baseCurrency]=EUR&filter[quoteCurrency]=USD&page[limit]=50&page[offset]=0&sort=-effectiveAt",
"next": null,
"prev": null,
"last": "/v2/exchange-rates?filter[baseCurrency]=EUR&filter[quoteCurrency]=USD&page[limit]=50&page[offset]=0&sort=-effectiveAt"
}
}rate, effectiveAt, updatedAt, and feedAddress can be null when a listed pair exists but has no usable observation yet. Treat a listed pair as discoverable, not automatically fresh enough for a valuation workflow.
Read one current rate
Call the pair read endpoint when the integration already knows the pair it needs. DALP returns 404 with EXCHANGE_RATE_NOT_FOUND when no current rate exists for the requested pair. The current endpoint does not return null for a missing current-rate read.
curl "https://your-platform.example.com/api/v2/exchange-rates/EUR/USD" \
-H "X-Api-Key: sm_dalp_xxxxxxxxxxxxxxxx"A current-rate response returns one data object and a self link:
{
"data": {
"baseCurrency": "EUR",
"quoteCurrency": "USD",
"rate": 1.08,
"effectiveAt": "2026-03-22T10:30:00.000Z"
},
"links": {
"self": "/v2/exchange-rates/EUR/USD"
}
}If baseCurrency and quoteCurrency are the same code, DALP returns an identity rate of 1.
Read historical rates
Call the history endpoint when you need a time-bounded record of observations for reconciliation, reporting, or a valuation review.
curl --globoff "https://your-platform.example.com/api/v2/exchange-rates/EUR/USD/history?filter[effectiveAt][gte]=2026-03-01T00:00:00.000Z&filter[effectiveAt][lte]=2026-03-31T23:59:59.999Z&page[limit]=100&sort=-effectiveAt" \
-H "X-Api-Key: sm_dalp_xxxxxxxxxxxxxxxx"The history response uses the same collection envelope as the list endpoint:
{
"data": [
{
"baseCurrency": "EUR",
"quoteCurrency": "USD",
"rate": "1.08",
"effectiveAt": "2026-03-22T10:30:00.000Z"
}
],
"meta": {
"total": 1,
"facets": {}
},
"links": {
"self": "/v2/exchange-rates/EUR/USD/history?filter[effectiveAt][gte]=2026-03-01T00:00:00.000Z&filter[effectiveAt][lte]=2026-03-31T23:59:59.999Z&page[limit]=100&sort=-effectiveAt",
"first": "/v2/exchange-rates/EUR/USD/history?filter[effectiveAt][gte]=2026-03-01T00:00:00.000Z&filter[effectiveAt][lte]=2026-03-31T23:59:59.999Z&page[limit]=100&page[offset]=0&sort=-effectiveAt",
"next": null,
"prev": null,
"last": "/v2/exchange-rates/EUR/USD/history?filter[effectiveAt][gte]=2026-03-01T00:00:00.000Z&filter[effectiveAt][lte]=2026-03-31T23:59:59.999Z&page[limit]=100&page[offset]=0&sort=-effectiveAt"
}
}Historical rate values are decimal strings. Use decimal arithmetic instead of converting them through binary floating-point numbers in financial workflows.
List supported currencies
Call the supported-currencies endpoint before rendering a target-currency picker. It returns the ISO 4217 alpha-3 codes currently present in the exchange-rate source snapshot.
curl "https://your-platform.example.com/api/v2/exchange-rates/supported-currencies" \
-H "X-Api-Key: sm_dalp_xxxxxxxxxxxxxxxx"{
"data": {
"providerKey": "open-er-api",
"currencies": ["AED", "EUR", "USD"]
},
"links": {
"self": "/v2/exchange-rates/supported-currencies"
}
}providerKey identifies the configured exchange-rate source snapshot. Treat currencies as the allowed picker set for the next exchange-rate refresh cycle.
Parameters and fields
| Field | Location | Type | Notes |
|---|---|---|---|
baseCurrency | Path or filter | ISO 4217 fiat code | Currency the rate converts from. The list endpoint supports filter[baseCurrency]=EUR. |
quoteCurrency | Path or filter | ISO 4217 fiat code | Currency the rate converts to. The list endpoint supports filter[quoteCurrency]=USD. |
filter[q] | Query | string | Free-text search across base and quote currency codes on the list endpoint. |
filter[rate] | Query | number filter | Filter list or history rows by rate. Use operators such as filter[rate][gte]=1. |
filter[effectiveAt] | Query | timestamp filter | Filter list or history rows by observation timestamp. Use ISO 8601 UTC timestamps. |
filter[updatedAt] | Query | timestamp filter | Filter list rows by last update timestamp. |
page[limit] | Query | integer | Page size for collection responses. |
page[offset] | Query | integer | Offset for collection responses. |
sort | Query | string | Sort field. Prefix with - for descending order, such as sort=-effectiveAt. |
rate | Response | number, string, or null | List and current reads return numbers; history returns decimal strings; list items may be null. |
effectiveAt | Response | timestamp or null | Time when the returned rate became effective. List items may be null before an observation. |
updatedAt | Response | timestamp or null | Time when the listed rate record was last updated. |
feedAddress | Response | EVM address or null | Feed contract address for a listed pair when one is available. |
providerKey | Response | string | Identifier for the supported-currencies snapshot. |
currencies | Response | ISO 4217 fiat code array | Currency codes available from the supported-currencies endpoint. |
Related pages
- Token price resolution explains how token pricing can use base-price and FX feeds for converted token prices.
- Operational integration patterns covers retries, readback checks, and reconciliation patterns around API integrations.
- API reference remains the contract source for generated clients and route details.