Documentation Index
Fetch the complete documentation index at: https://docs.ivory.finance/llms.txt
Use this file to discover all available pages before exploring further.
Authentication
Authorization: Bearer <access_token>
List tables
curl https://api.ivory.finance/v1/rtdb/tables \
-H "Authorization: Bearer $IVORY_JWT"
{
"tables": [
["trades", 1, "DAY", 500000, 300000000, true, "trades"],
["orderbook",2, "HOUR",500000, 300000000, true, "orderbook"],
["signals", 3, "DAY", 500000, 300000000, true, "signals"]
],
"columns": [
{ "name": "tableName" },
{ "name": "id" },
{ "name": "partitionBy" },
{ "name": "maxUncommittedRows" },
{ "name": "o3MaxLag" },
{ "name": "walEnabled" },
{ "name": "directoryName" }
]
}
Get table schema
curl https://api.ivory.finance/v1/rtdb/tables/trades/schema \
-H "Authorization: Bearer $IVORY_JWT"
{
"table": "trades",
"columns": [
["ts", "TIMESTAMP", false, 0, false, 0, true],
["ticker", "SYMBOL", true, 256, true, 128, false],
["exchange", "SYMBOL", false, 256, true, 128, false],
["price", "DOUBLE", false, 0, false, 0, false],
["volume", "LONG", false, 0, false, 0, false]
],
"schema": [
{ "name": "columnName" }, { "name": "type" }, { "name": "indexed" },
{ "name": "indexBlockCapacity" }, { "name": "symbolCached" },
{ "name": "symbolCapacity" }, { "name": "designated" }
]
}
Storage usage
curl https://api.ivory.finance/v1/rtdb/storage \
-H "Authorization: Bearer $IVORY_JWT"
{
"allocated_gb": 50,
"used_bytes": 3758096384,
"used_gb": 3.5,
"tables": [
["trades", 2684354560, 15000000, 180],
["orderbook", 1073741824, 8000000, 90],
["signals", 0, 0, 0]
],
"tiering_note": "Partitions >7d are automatically exported to IOMETE (Parquet on R2)"
}
Create table
Only
CREATE TABLE statements are accepted here. DDL must use QuestDB syntax — designate a TIMESTAMP column and choose a PARTITION BY strategy.curl -X POST https://api.ivory.finance/v1/rtdb/tables \
-H "Authorization: Bearer $IVORY_JWT" \
-H "Content-Type: application/json" \
-d '{
"sql": "CREATE TABLE IF NOT EXISTS trades (ts TIMESTAMP, ticker SYMBOL, price DOUBLE, volume LONG) TIMESTAMP(ts) PARTITION BY DAY WAL;"
}'
{
"ok": true,
"result": { "ddl": "OK" }
}
QuestDB table design guide
-- Best practices for time-series tables:
CREATE TABLE trades (
ts TIMESTAMP, -- Designated timestamp column (required)
ticker SYMBOL INDEX, -- Use SYMBOL for low-cardinality strings (indexed = fast filter)
exchange SYMBOL, -- Low-cardinality → SYMBOL
price DOUBLE, -- Numeric → DOUBLE or LONG
volume LONG
) TIMESTAMP(ts) -- Designate the timestamp column
PARTITION BY DAY -- DAY/HOUR/MONTH — affects tiering granularity
WAL; -- Write-Ahead Log (required for concurrent writes)

