Sandbox version
For experimental use only. Proceed with caution.
XRPL
Batch fetch denominated OHLCV for many XRPL tokens
post
/xrpl/quote/ohlcv/batch
operationId: xrpl-quoteOhlcvBatch

POST batch variant of /xrpl/quote/ohlcv. Body: { tokens: [...], denomination, interval, startTime, endTime, limit } (max 50 tokens). Returns one row per token as { currency, issuer, pair, inverted, candles: [...] } — tokens with no matching pair surface as pair: null, candles: []. The 2-hop intermediary is server-chosen (USD) and echoed on the output as bridgeBase.

Unlock protected endpoints

Enter your Bearer token once to enable every protected route in this API reference.

HTTP bearer

Saved for this browser tab only. The credential is never sent until you test an endpoint.

Authorizations
NameLocationDetails
BearerAuthAuthorization header · bearerJWT issued by the Honeycluster auth service for the `oracle` audience. Present as `Authorization: Bearer <token>`.
Request Body
application/json
required
FieldTypeDefaultDescription
tokens
required
object[]
Tokens to fetch denominated OHLCV for. Each entry is `{tokenSlug}` or `{currency, issuer}`. Max 50 per request.
denomination
string"USD"
Target denomination. Defaults to `USD` so a bare-args call returns the token's USD price (1-hop bridge through `XRP/USD`). Pass `XRP` to get the raw XRPL DEX price with no conversion — the XRP/USD bridge is still surfaced on `legs.bridge` as informational context. Other direct CEX bases (`USDT`, `USDC`) also use a 1-hop bridge; any other CEX-tracked asset (`BTC`, `ETH`, etc.) uses a 2-hop bridge via the server-chosen intermediary (USD), echoed on the response as `bridgeBase`.
interval
enum<string>"1h"
OHLCV candle interval. Defaults to `1h`.
Available
1m3m5m15m30m1h2h4h
startTime
integer
Inclusive lower bound for candle time, Unix-seconds. Defaults to `endTime − (interval × limit)`.
endTime
integer
Exclusive upper bound for candle time, Unix-seconds. Defaults to the current server time.
limit
integer500
Per-token maximum number of candles to return (1–1000). Defaults to 500.
Example
Json
{
  "tokens": [
    {
      "tokenSlug": "string"
    }
  ],
  "denomination": "USD",
  "interval": "1h",
  "startTime": 1745798400,
  "endTime": 1745798400,
  "limit": 500
}
Responses
200
application/json
Successful response
FieldTypeDefaultDescription
items
object[]
One entry per requested token, in request order.
items[].currency
string
Echoed currency code.
items[].issuer
object
Echoed issuer address, or `null` for XRP.
items[].pair
object
Resolved trade pair, or `null` when no pair was found for the token.
items[].inverted
booleanfalse
True when the source pair stored XRP on the base side.
items[].candles
object[]
Denominated OHLCV candles for the token. Empty when no pair / data exists.
items[].candles[].bucket
integer
Start of the candle interval, Unix-seconds.
items[].candles[].open
string
Opening denominated price (decimal string).
items[].candles[].high
string
Highest denominated price seen in the interval (decimal string).
items[].candles[].low
string
Lowest denominated price seen in the interval (decimal string).
items[].candles[].close
string
Closing denominated price (decimal string).
items[].candles[].volume
string
Total volume traded in the interval, expressed in the requested `denomination` (decimal string). Approximated as native base-side volume × bucket close × bridge factor — the OHLCV view stores `sum(base_amount)` only, so an exact figure would require summing quote amounts per trade.
items[].candles[].tradeCount
number
Number of trades that make up the native candle.
denomination
string
Echoed denomination.
bridgeBase
object
Echoed bridge base, or `null` when no bridge was used.
Example
Json
{
  "items": [
    {
      "currency": "string",
      "issuer": "string",
      "pair": {
        "id": "00000000-0000-0000-0000-000000000000",
        "baseCurrency": "string",
        "baseIssuer": "string",
        "quoteCurrency": "string",
        "quoteIssuer": "string",
        "createdAt": "string",
        "updatedAt": "string"
      },
      "inverted": false,
      "candles": [
        {
          "bucket": 1745798400,
          "open": "string",
          "high": "string",
          "low": "string",
          "close": "string",
          "volume": "string",
          "tradeCount": 0
        }
      ]
    }
  ],
  "denomination": "string",
  "bridgeBase": "string"
}
400
application/json
Invalid input data
FieldTypeDescription
message
string
The error message
code
string
The error code
issues
object[]
An array of issues that were responsible for the error
issues[].message
string
Example
Json
{
  "code": "BAD_REQUEST",
  "message": "Invalid input data",
  "issues": []
}
401
application/json
Authorization not provided
FieldTypeDescription
message
string
The error message
code
string
The error code
issues
object[]
An array of issues that were responsible for the error
issues[].message
string
Example
Json
{
  "code": "UNAUTHORIZED",
  "message": "Authorization not provided",
  "issues": []
}
403
application/json
Insufficient access
FieldTypeDescription
message
string
The error message
code
string
The error code
issues
object[]
An array of issues that were responsible for the error
issues[].message
string
Example
Json
{
  "code": "FORBIDDEN",
  "message": "Insufficient access",
  "issues": []
}
500
application/json
Internal server error
FieldTypeDescription
message
string
The error message
code
string
The error code
issues
object[]
An array of issues that were responsible for the error
issues[].message
string
Example
Json
{
  "code": "INTERNAL_SERVER_ERROR",
  "message": "Internal server error",
  "issues": []
}