Skip to main content

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)