Skip to main content

Historical Data

Historical market data exports for Pendle Boros on Arbitrum.

All data is stored as NDJSON (newline-delimited JSON) compressed with ZIP. Each file covers one calendar month per market.

Browse data: https://historical-data.boros.finance

Directory Structure​

market-data/{market}/                     Hourly market snapshots
settlement/{market}/ On-chain settlement rate updates
underlying-apr/ Historical underlying funding rates
market-trades/{market}/ Individual trades
ohlcv/{timeframe}/{market}/ OHLCV candles (5m, 1h, 1d)
order-book/{market}/raw/ Raw order book snapshots
order-book/{market}/combined_{tickSize}/ Order book aggregated by tick size

Market naming: {ID}-{EXCHANGE}-{PAIR}-{EXPIRY} (e.g. 2-BINANCE-BTCUSDT-26SEP2025)

File naming: YYYY-MM.ndjson.zip (e.g. 2025-08.ndjson.zip)

How to Decompress​

Files are compressed with ZIP. Decompress with any standard unzip tool:

# Decompress a single file
unzip 2025-08.ndjson.zip

# Decompress all files in place
find . -name '*.ndjson.zip' -exec sh -c 'unzip -o -q "$1" -d "$(dirname "$1")"' _ {} \;

How to Read the Data​

Each .ndjson file contains one JSON object per line. You can parse it with standard tools:

# Preview first 3 lines (pretty-printed)
unzip -p 2025-08.ndjson.zip | head -3 | jq .

# Count records
unzip -p 2025-08.ndjson.zip | wc -l

# Filter by timestamp range
unzip -p 2025-08.ndjson.zip | jq -c 'select(.timestamp >= 1754006400 and .timestamp < 1754092800)'

Python​

import json
import zipfile

# Read compressed file directly
with zipfile.ZipFile('2025-08.ndjson.zip') as zf:
with zf.open(zf.namelist()[0]) as f:
records = [json.loads(line) for line in f]

JavaScript / TypeScript​

import { execSync } from 'child_process';

const output = execSync('unzip -p 2025-08.ndjson.zip', { encoding: 'utf-8' });
const records = output.trim().split('\n').map(line => JSON.parse(line));

Data Schemas​

Market Data (market-data/)​

Hourly snapshots of market state.

FieldTypeDescription
timestampnumberUnix timestamp
datetimestringISO 8601 datetime
blockNumbernumberArbitrum block number
midAprnumberMid APR (average of best bid and best ask)
bestBidnumber | nullBest bid rate (highest long order)
bestAsknumber | nullBest ask rate (lowest short order)
ammImpliedAprnumber | nullAMM implied APR
markAprnumberMark APR (on-chain mark rate)
notionalOInumber | nullNotional open interest
lastTradedAprnumber | nullRate of the most recent trade
latestSettlementAprnumber | nullLatest on-chain settlement APR (0 from market creation until first settlement)
{"timestamp":1754006400,"datetime":"2025-08-01T00:00:00.000Z","blockNumber":363657956,"midApr":0.07625,"bestBid":0.07605,"bestAsk":0.07637,"ammImpliedApr":0.07625,"markApr":0.07615,"notionalOI":51,"lastTradedApr":0.07615,"latestSettlementApr":0.07}

Settlement Data (settlement/)​

On-chain settlement rate updates (FIndexUpdated events). Settlement APR is 0% from market creation until the first settlement event.

FieldTypeDescription
timestampnumberUnix timestamp of the block
datetimestringISO 8601 datetime
blockNumbernumberArbitrum block number
settlementAprnumberAnnualized settlement rate (0 until first settlement)
txHashstringTransaction hash
{"timestamp":1767211230,"datetime":"2025-12-31T20:00:30.000Z","blockNumber":416536437,"settlementApr":0.0990756,"txHash":"0x193c...2370"}

Underlying Funding Rate (underlying-apr/)​

Historical underlying funding rates sourced from exchanges. One file per exchange-asset pair (e.g. Binance-BTC.ndjson.zip).

FieldTypeDescription
timestampnumberUnix timestamp (funding rate start time)
datetimestringISO 8601 datetime
annualizedFundingRatenumberAnnualized funding rate
{"timestamp":1754006400,"datetime":"2025-08-01T00:00:00.000Z","annualizedFundingRate":0.05234}
note

This data is carefully monitored to match the funding rates reported by each exchange. In rare cases, exchange API instability may cause minor discrepancies.

Trades (market-trades/)​

Individual trade events.

FieldTypeDescription
eventIndexnumberOn-chain event index
blockTimestampnumberUnix timestamp of the block
datetimestringISO 8601 datetime
ratenumberTrade rate (implied APR)
sidestringTaker side: "long" or "short"
sizenumberAbsolute trade size
txHashstringTransaction hash
{"eventIndex":363716829000015,"blockTimestamp":1754021093,"datetime":"2025-08-01T04:04:53.000Z","rate":0.07332,"side":"short","size":0.005,"txHash":"0x2578..."}

OHLCV Candles (ohlcv/)​

Available in three timeframes: 5m, 1h, 1d.

FieldTypeDescription
periodStartTimestampnumberUnix timestamp of candle start
datetimestringISO 8601 datetime
opennumberOpening rate (implied APR)
highnumberHighest rate in the period
lownumberLowest rate in the period
closenumberClosing rate
volumenumberTotal absolute trade size
{"periodStartTimestamp":1754020800,"datetime":"2025-08-01T04:00:00.000Z","open":0.07332,"high":0.07332,"low":0.07332,"close":0.07332,"volume":0.005}

Order Book β€” Raw (order-book/{market}/raw/)​

Full order book snapshots with individual tick entries.

FieldTypeDescription
blockNumbernumberArbitrum block number
blockTimestampnumberUnix timestamp
datetimestringISO 8601 datetime
longobject[]Bid side entries (sorted by rate descending)
shortobject[]Ask side entries (sorted by rate ascending)

Each entry in long / short:

FieldTypeDescription
ratenumberImplied APR at this tick
ticknumberOn-chain tick index
sizenumberNotional size at this tick

Order Book β€” Combined (order-book/{market}/combined_{tickSize}/)​

Order book merged with AMM liquidity, aggregated by tick size. Available tick sizes: 0.00001, 0.0001, 0.001, 0.01, 0.1.

FieldTypeDescription
timestampnumberUnix timestamp
datetimestringISO 8601 datetime
blockNumbernumberArbitrum block number
longobject[]Bid side entries, grouped by tick size
shortobject[]Ask side entries, grouped by tick size

Each entry in long / short:

FieldTypeDescription
ratenumberImplied APR (tick index x tick size)
sizenumberAggregated notional size at this level

Notes​

  • All rates are expressed as implied APR (annualized percentage rate as a decimal, e.g. 0.07 = 7%)
  • All timestamps are Unix seconds (UTC)
  • Data is exported monthly and only includes fully completed periods (e.g. an incomplete 1h candle at the time of export is excluded)
  • Data is updated every 2–3 days