Skip to content
Eden Engine

Historical Crypto Candles (OHLCV) by Exchange & Pair

omnial/exchange-candles

Given an exchange, a trading pair, and a candle interval, returns a time series of OHLCV candles for that market -- open, high, low, close, base and quote volume, and trade count where the exchange reports it -- with an option to fill no-trade intervals with carry-forward synthetic candles for a continuous chart.

activeper callv1
Provider
Web & Business Data Network
Category
token-prices
Provider price
$0.00819 per call
Latency p50 / p95
— / —
Success rate
—
Verified
—

Provider list price; Omnial MCP charges provider cost plus a platform markup on top.

Contract

input_schema.json
{
  "type": "object",
  "required": [
    "exchange",
    "pair"
  ],
  "properties": {
    "to": {
      "type": "string",
      "minLength": 1,
      "description": "End of time range. Accepts Unix seconds or date string. Example: 2026-06-24T10:00:00Z."
    },
    "from": {
      "type": "string",
      "minLength": 1,
      "description": "Start of time range. Accepts Unix seconds or date string. Example: 2026-06-24T09:00:00Z."
    },
    "pair": {
      "type": "string",
      "minLength": 1,
      "description": "Trading pair in base/quote form, e.g. BTC/KRW. Example: BTC/KRW."
    },
    "limit": {
      "type": "integer",
      "default": 100,
      "maximum": 300,
      "minimum": 1,
      "description": "Max number of candles to return. Weekly candles allow up to 300 rows for a 5-year chart; intraday intervals are capped at 100. Example: 100. Defaults to 100."
    },
    "offset": {
      "type": "integer",
      "default": 0,
      "maximum": 9007199254740991,
      "minimum": 0,
      "description": "Pagination offset. Example: 0. Defaults to 0."
    },
    "exchange": {
      "enum": [
        "bithumb",
        "upbit",
        "hashkey",
        "bitflyer",
        "coinone",
        "korbit"
      ],
      "type": "string",
      "description": "Exchange identifier. Example: bithumb."
    },
    "interval": {
      "enum": [
        "5m",
        "4h",
        "1w"
      ],
      "type": "string",
      "default": "5m",
      "description": "Candle interval. Example: 5m. Defaults to \"5m\"."
    },
    "include_synthetic": {
      "type": "boolean",
      "default": true,
      "description": "Whether to include carry-forward candles for no-trade intervals. Defaults to true for continuous charts; set false for raw exchange-only candles. Example: True. Defaults to true."
    }
  },
  "additionalProperties": false
}
output_schema.json
{
  "type": "object",
  "properties": {
    "data": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "low": {
            "type": "number"
          },
          "high": {
            "type": "number"
          },
          "open": {
            "type": "number"
          },
          "pair": {
            "type": "string",
            "description": "Echoes the requested trading pair."
          },
          "close": {
            "type": "number"
          },
          "region": {
            "type": "string",
            "description": "Two-letter market region, e.g. 'kr'. Observed 'kr' on both fixtures."
          },
          "exchange": {
            "type": "string",
            "description": "Echoes the requested exchange."
          },
          "interval": {
            "type": "string",
            "description": "Echoes the requested candle interval."
          },
          "timestamp": {
            "type": "integer",
            "description": "Unix seconds marking the candle open."
          },
          "close_time": {
            "type": "integer",
            "description": "Unix seconds marking the candle close."
          },
          "trade_count": {
            "type": "integer",
            "description": "Number of trades in the interval. Observed on every candle of the bithumb 5-minute fixture but absent from every candle of the upbit weekly fixture -- whether this depends on the exchange, the interval, or something else is unconfirmed from two fixtures; do not assume it is always present."
          },
          "volume_base": {
            "type": "number",
            "description": "Volume in the base asset. Observed 0 on a synthetic, no-trade candle."
          },
          "is_synthetic": {
            "type": "boolean",
            "description": "True for a carry-forward candle synthesized for a no-trade interval (observed on one bithumb candle, with open=high=low=close and zero volume). Only appears when the request's include_synthetic was true or defaulted."
          },
          "volume_quote": {
            "type": "number",
            "description": "Volume in the quote asset. Observed 0 on a synthetic, no-trade candle."
          }
        },
        "additionalProperties": false
      },
      "description": "One entry per candle, most recent first on both fixtures observed."
    },
    "meta": {
      "type": "object",
      "properties": {
        "limit": {
          "type": "integer",
          "description": "Echoes the requested (or defaulted) limit."
        },
        "total": {
          "type": "integer",
          "description": "Total candles available for the query."
        },
        "cached": {
          "type": "boolean",
          "description": "Whether this response was served from the provider's cache."
        },
        "offset": {
          "type": "integer",
          "description": "Echoes the requested (or defaulted) offset."
        }
      },
      "additionalProperties": false
    }
  },
  "description": "The candle response, as returned at routing.responseResultPath ($.output).",
  "additionalProperties": false
}

Pricing

Every real charge, itemised. A model that quietly omits one is a slow financial leak, so nothing here is rolled up, and a charge that only applies to some inputs says so rather than being added in.

Prices in this catalog are the provider's own list price, not your bill: Omnial MCP charges provider cost plus a platform markup on top, so what you are charged is higher than the figure shown. For the exact amount a specific call will cost, run omnial_execute with dry_run: true; that number includes the markup and is what we hold while the call runs. It is a quote, not a cap on the charge.

ChargeRate
Per call
Flat, regardless of what comes back
$0.00819
Cost basis
Not recorded

This tool's catalog entry does not record how its final bill is determined, so we will not tell you whether its cost is fixed before the call or reported by the provider afterwards. Either way what is held is a quote rather than a cap: you are charged what the call actually costs, bounded at 2x the quote.

Updated
Sep 23, 2026