Volatlas

Connect Databento

Add an API key, pick a root and a window, and keep what you pull cached on your own disk.

Volatlas calls Databento's historical gateway directly with an API key you paste once. Every download is billed to your own Databento account, and every day downloaded is kept on your machine, so the same window never costs twice.

Save your key

  1. Open Data and pick Databento under Source.
  2. Paste the key from your Databento account into the field marked db-….
  3. Press Save key. The button reads Checking… while the app asks Databento which datasets the key can pull.

The key is stored only if Databento accepts it, so a typo is caught here and not at the first download. Leading and trailing spaces are trimmed. The status line then shows one of three states.

StatusMeaning
No Databento key savedNo key on this machine. Downloads from Databento are refused.
Databento key saved, OPRA history availableThe key lists the OPRA.PILLAR dataset. Ready to load.
Databento key saved, but it has no OPRA licence yetThe key works but OPRA.PILLAR is not among its datasets. Accept the OPRA licence in your Databento account, then save the key again so the app rechecks it.

The key lives in data-settings.json in the app data directory. On macOS the file is readable only by your user account, and on Windows it inherits the permissions of your local app data folder. The key is never shown back in the window. To change it, paste a new one into the same field (it now reads Replace the saved key). To remove it, press Clear key.

Load a window

With Databento selected, fill in Window and press Load chain.

FieldDefaultNotes
Option rootSPXWThe OPRA root, sent to Databento as SPXW.OPT. Use SPXW for the weeklies a 0DTE strategy trades and SPX for the monthlies.
UnderlyingIndexIndex or Stock.
SymbolSPXThe underlying the chain is labelled with.
From, To8 days ago, yesterdayBoth dates are required. A To before From is refused.
Interval1 min1, 5, 10, 15, 30 or 60 min.
Max DTE60The furthest expiry kept in the chain, in days.
Rate %, Dividend yield %4, 0Used when the chain is priced.

The root is the key to the cost and to the contracts. Asking for SPX when the strategy trades daily expiries returns a valid chain of the wrong contracts.

What is pulled

Volatlas pulls two schemas from the OPRA.PILLAR dataset for each trading day. definition names the contracts, and cbbo-1m supplies the consolidated best bid and offer at one-minute resolution. Coarser intervals are that minute data sampled down. OPRA carries no underlying price, so the spot is derived from the options by put-call parity at the nearest expiry.

Databento bills a day by the root's whole surface. Interval and Max DTE do not change the bill, so the app always pulls and caches the full one-minute surface of every expiry the root lists, whatever the window asked for. Widening Max DTE or switching to a coarser interval later reads from disk instead of buying the same days again.

Cost

The app does not estimate or display a price before a load. Start with a short window, check the charge in your Databento account, then extend. The pull is the expensive step and the root sets it, and SPY option history costs many times more than SPX. For SPY or many roots, the ThetaData path is the better fit. See what a year of data costs per root and vendor.

Progress, cancel and resume

Before downloading, the app checks what is already on disk and asks Databento only for the missing days. A pull runs one day at a time. The bar under Data shows days done out of days total and the date being downloaded. A whole SPXW session took about five minutes against the live gateway, so a long window runs for hours.

Press Cancel to stop. The stop takes effect between days. Every finished day is already cached, so loading the same window again resumes at the first missing date. The same holds for a crash, a power cut or a failed day.

Once loaded, the header reports where the chain came from, as downloaded via Databento, all from cache, or a split such as 5 cached, 2 via Databento.

The local cache

Every day is stored as one Parquet file in the app's local data directory, keyed by root and interval. A Databento pull lands in the one-minute series of its root. Weekends and holidays are stored as empty days so they are never requested again. A year of one-minute SPX takes about 184MB.

Today is never cached, and neither is any day the vendor has not finished publishing. A window that reaches past what Databento has published is pulled up to the published boundary instead of failing, and the rest is pulled on a later load.

Cached history lists each series with its date range, days, bars and size on disk. Clear deletes one series. A cache file that cannot be read back is discarded and that day downloaded again.

After your subscription lapses

Cached history needs no vendor. Pick Cached only under Source and load any window already on disk. Nothing is downloaded in this mode. A window with a missing day fails with an error instead of fetching it. With Databento selected, a fully cached window also loads without a call to the gateway, and no key needs to be saved. A key is required only when a day must be downloaded. Without one the load stops before any pull and the error names how many days of the window are not in the cache.

Errors

Each failure is shown under Data as one of these messages. Text in angle brackets is filled in from the failure itself.

  • Databento did not recognise this API key. Check the key and save it again. The gateway answered 401.
  • This API key is not entitled to OPRA.PILLAR. Accept the OPRA licence in your Databento account, then save the key again. Databento answered 403. <reason> The gateway answered 403, and its own reason follows unchanged.
  • No Databento API key is saved on this machine, and <n> days of this window are not in the cache. Load chain was pressed with Databento selected, no key stored and days still to download.
  • Could not reach Databento at <url> (<cause>). Check the network connection. Days already downloaded stay cached. A network problem, not a key problem.
  • Databento kept timing out or limiting requests (<status>) after three retries. Load again to resume. Days already downloaded stay cached. Shown for 429, 502, 503 and 504, each retried three times before the load fails.
  • Databento answered <status>. <reason> Any other refusal, with the gateway's reason unchanged.
  • Some days in this window are not in the cache, and Cached only downloads nothing. Pick a vendor under Source to fetch them. A Cached only load reached a day that is not on disk.
  • Load stopped. Days already downloaded stay cached, so loading this window again resumes. Shown after Cancel.

Next, build a strategy on the loaded chain. For the method behind a sound test, read how to backtest options strategies. Licence terms are on pricing.