EOX Live EOX Live Market Data API

EOX forward curves, straight into your models

The same curves, volatilities and correlations as your EOD files, on demand: pick the curves, tenors and dates you want, in Excel, Python or anything that speaks HTTPS. Full history is included with your subscription.

Get started

1Your API key

EOX emailed you a personal key starting eox_. It's tied to you and your subscription, so keep it private and don't share it.

2Check it works

Paste it in the box below, or run the one-line test. You'll see the datasets your subscription includes.

3Pick your tool

The Excel add-in is the quickest. Python and plain HTTPS give you everything else.

Check your key
The key is sent only to this server and isn't saved anywhere.

Or from a terminal (Windows PowerShell, Mac or Linux):

curl -H "X-API-Key: YOUR_KEY" https://api.eoxlive.com/v1/me

How the data is organised

TermMeaning
DatasetOne EOD file, such as power or natural_gas. You can use the datasets in your subscription; the full list is below.
CurveOne code within a dataset, such as power BXO or natural gas AA. The parameter name differs by dataset (market_code, location_code, ...). Use /v1/<dataset>/curves to browse them.
TenorEither a rolling tenor (time_key=M01-M24, Q11-Q14, C01) or a fixed contract (contract=Jan_2027,Calendar_2028). Ranges expand.
Curve dateThe date a curve was published. Requests default to the latest; pass date=2026-09-30 for an earlier one, or use /history for many dates.
FieldThe number you want: mid (default), bid, ask, and others per dataset.

Excel add-in

Works in Excel for Windows (Microsoft 365), Mac and the web.

Install

The add-in is one small file, EOX_Excel_AddIn.xml. Choose the option that fits how your Excel is managed. You only install it once: improvements reach you automatically.

Option 1: your IT team deploys itrecommended for companies

Most company-managed Excel installations don't let users add add-ins themselves. Send your IT team this note:

Please deploy the EOX Market Data Excel add-in to me (and anyone else who uses EOX data):
Microsoft 365 admin center > Settings > Integrated apps > Upload custom apps >
Office Add-in > "Provide link to manifest file":
https://api.eoxlive.com/addin/manifest.xml
Assign it to the users who need it. It works in Excel for Windows, Mac and the web.

Once deployed, EOX Data appears on the Home tab by itself, usually within a few hours (Microsoft says up to 24).

Option 2: Excel on the webno IT needed
  1. Download EOX_Excel_AddIn.xml.
  2. Open any workbook in Excel on the web (office.com), then go to Home › Add-ins › More Add-ins.
  3. On the My Add-ins tab click Upload My Add-in (top right), choose the file and click Upload.
Option 3: Excel desktop, from a shared foldertechnical users

If your Trust Center settings aren't locked and you can use a network share:

  1. Put EOX_Excel_AddIn.xml in a shared folder, for example \\YOURPC\EOXAddin (sharing a folder on your own PC needs admin rights).
  2. In Excel: File › Options › Trust Center › Trust Center Settings › Trusted Add-in Catalogs. Enter the folder's network address (the \\server\folder form, not a drive letter), click Add catalog, tick Show in Menu, click OK and restart Excel.
  3. Home › Add-ins › More Add-ins (or Insert › My Add-ins) › Shared Folder tab › EOX Market Data › Add.

Sign in

Click EOX Data on the Home tab, open Account, paste your key and click Save and test. Then type =EOX. in any cell to see the functions.

Functions

FunctionReturns
=EOX.PRICE(dataset, code, tenor, [field], [date], [filters])One number.
=EOX.CURVE(dataset, codes, [tenors], [field], [date], [filters], [headers]) A grid that spills: tenors down, curves across. codes can be a range of cells.
=EOX.HISTORY(dataset, codes, tenor, [start], [end], [field], [filters], [headers]) Dates down, curves across. Format the first column as a date.
=EOX.DATES(dataset, [count])The latest curve date, or the last count dates.
=EOX.PRICE("power","BXO","M01")
=EOX.PRICE("power","BXO","Jan_2027","bid")
=EOX.CURVE("power","BXO,JZP","M01-M24")
=EOX.CURVE("natural_gas",A2:A10,"M01-M12",,"2026-09-30")
=EOX.HISTORY("power","BXO","M01",TODAY()-90)
=EOX.PRICE("correlations","PN","1",,,"days=45;nymex_basis=NYMEX")

Leave an argument empty with two commas. filters takes name=value pairs separated by ;. Results are cached for 5 minutes; Refresh all EOX formulas in the pane fetches new values. The pane's Insert tab lets you browse curves and drop them in without typing formulas, or load a whole EOD file onto a new sheet.

Excel template (no add-in)

If you can't install add-ins, EOX_API_Template.xlsx uses Power Query: enter your key on the Request sheet, fill in the request, and use Data › Refresh All. Your key is sent as a header and never appears in a URL. The query on its own: EOX_PowerQuery.m.

Python

Install the eoxlive package (Python 3.9+; it brings requests and pandas):

pip install https://api.eoxlive.com/downloads/eoxlive-1.0.0-py3-none-any.whl
from eoxlive import EOX
eox = EOX("YOUR_KEY")          # or set the EOX_API_KEY environment variable

eox.datasets(subscribed_only=True)                       # what your key includes
eox.curve("power", "BXO,JZP", "M01-M24")                 # latest curves (DataFrame)
eox.curve("power", ["BXO", "JZP"], "M01-M24", layout="wide", field="mid")   # tenors x curves grid
eox.history("natural_gas", "AA", "Jan_2027", start="2015-01-01")            # any length of history
eox.price("power", "BXO", "M01")                         # one number
eox.file("power")                                        # today's full EOD file

eox.files("power", start="2026-10-01", ext="xlsx")       # the delivered Excel / CSV files
eox.download("EOD_PW_20261023_1430.xlsx", "C:/EOX")      # one file, exactly as delivered
eox.download_all("power", "C:/EOX/power", start="2026-01-01", ext="xlsx")   # a whole set

Rate limits and brief outages are retried automatically, and long histories are fetched in chunks for you. Upgrade later with pip install --upgrade and the new link. The older single-file client, eox.py, still works.

Any language (REST)

Every request is an HTTPS GET to https://api.eoxlive.com with your key in the X-API-Key header. Responses are JSON by default; add format=csv for CSV in the EOD file layout.

EndpointReturns
/v1/meYour account, trial status and the datasets you can use.
/v1/datasetsEvery dataset with its parameters and whether you're subscribed.
/v1/<dataset>/fileThe EOD file for a date, exactly as emailed: same header, columns and formats. A drop-in replacement for your current file loader.
/v1/<dataset>/curveOne curve date, narrowed to the curves, tenors and filters you ask for.
/v1/<dataset>/historyThe same selection across many dates. The curve parameter is required; the default window is the last year.
/v1/<dataset>/curvesThe curve catalogue for a date, with descriptions.
/v1/<dataset>/datesPublished curve dates, newest first.
# the latest power file, exactly as delivered
curl -H "X-API-Key: YOUR_KEY" -o power.csv "https://api.eoxlive.com/v1/power/file"

# two curves, first 24 months, as a grid
curl -H "X-API-Key: YOUR_KEY" "https://api.eoxlive.com/v1/power/curve?market_code=BXO,JZP&time_key=M01-M24&layout=wide&format=csv"

# one contract's history this year
curl -H "X-API-Key: YOUR_KEY" "https://api.eoxlive.com/v1/natural_gas/history?market_code=AA&contract=Jan_2027&start=2026-01-01&format=csv"
# PowerShell
$h = @{ "X-API-Key" = "YOUR_KEY" }
Invoke-RestMethod -Headers $h "https://api.eoxlive.com/v1/me"
Invoke-WebRequest -Headers $h "https://api.eoxlive.com/v1/power/file" -OutFile power.csv

Choosing what comes back

ParameterExampleNotes
curvesmarket_code=BXO,JZPThe parameter name per dataset is in the dataset list.
rolling tenorstime_key=M01-M24, M01,Q11-Q14,C01Ranges expand.
fixed contractscontract=Jan_2027,Calendar_2028Best for history.
contract windowcontract_from=2027-01-01&contract_to=2027-12-01Every contract starting in 2027.
descriptive filtersiso=PJM&peak_hour=ON_PEAK&term=MonthEach dataset has its own.
datesdate=2026-09-30; history: start=, end=date defaults to the latest.
shapelayout=wide&value=bidlong (default): one row per curve per tenor. wide: a grid of one field.
formatformat=csvCSV streams every row in one response. JSON returns pages of up to 10,000 rows (limit=) with a next_cursor; pass it back as cursor= until it's null.

Unknown or misspelt parameters are rejected with a 422 rather than silently ignored. The interactive API reference lists every parameter per dataset and lets you try requests (click Authorize and paste your key).

Datasets

Click a dataset for its parameters. Your subscription is by complex; full history is included. /v1/me shows which ones your key can use. Contact EOX to add a complex.

natural_gasNatural Gas Forwards

Curve parameter: market_code   Tenor parameters: contract, time_key

Fields (for value= and Excel's field argument): mid, bid, ask, fp

Endpoints: /v1/natural_gas/dates, /v1/natural_gas/curve, /v1/natural_gas/file, /v1/natural_gas/curves, /v1/natural_gas/history

ParameterWhat it takes
contractContracts, comma-separated, e.g. Jan_2027,Calendar_2028
time_keyTenors, comma-separated, ranges allowed: M01-M24, M01,Q11-Q14,C01
market_codeCurves, comma-separated
regionComma-separated, e.g. NYMEX Settlement
marketComma-separated market names
termContract terms, comma-separated, e.g. Month,Calendar
powerPower Forwards

Curve parameter: market_code   Tenor parameters: contract, time_key

Fields (for value= and Excel's field argument): mid, bid, ask, atc, hr

Endpoints: /v1/power/dates, /v1/power/curve, /v1/power/file, /v1/power/curves, /v1/power/history

ParameterWhat it takes
contractContracts, comma-separated, e.g. Jan_2027,Calendar_2028
time_keyTenors, comma-separated, ranges allowed: M01-M24, M01,Q11-Q14,C01
market_codeCurves, comma-separated, e.g. NNG,JZP
isoComma-separated, e.g. PJM,ERCOT
marketComma-separated market names
peak_hourComma-separated, e.g. ON_PEAK
termComma-separated: Month, Calendar, Q1, Q2, Q3, Q4, Winter, Spring, Summer
refined_productsRefined Products Forwards

Curve parameter: location_code   Tenor parameters: contract, time_key

Fields (for value= and Excel's field argument): mid, bid, ask

Endpoints: /v1/refined_products/dates, /v1/refined_products/curve, /v1/refined_products/file, /v1/refined_products/curves, /v1/refined_products/history

ParameterWhat it takes
contractContracts, comma-separated, e.g. Jan_2027,Calendar_2028
time_keyTenors, comma-separated, ranges allowed: M01-M24, M01,Q11-Q14,C01
location_codeCurves, comma-separated
locationComma-separated location names
termContract terms, comma-separated, e.g. Month,Calendar
nglNGL Forwards

Curve parameter: location_code   Tenor parameters: contract, time_key

Fields (for value= and Excel's field argument): mid, bid, ask

Endpoints: /v1/ngl/dates, /v1/ngl/curve, /v1/ngl/file, /v1/ngl/curves, /v1/ngl/history

ParameterWhat it takes
contractContracts, comma-separated, e.g. Jan_2027,Calendar_2028
time_keyTenors, comma-separated, ranges allowed: M01-M24, M01,Q11-Q14,C01
location_codeCurves, comma-separated
locationComma-separated location names
termContract terms, comma-separated, e.g. Month,Calendar
natural_gas_volNatural Gas Implied Volatility

Curve parameter: location_code   Tenor parameters: contract_num, contract_month

Fields (for value= and Excel's field argument): mid, bid, ask

Endpoints: /v1/natural_gas_vol/dates, /v1/natural_gas_vol/curve, /v1/natural_gas_vol/file, /v1/natural_gas_vol/curves, /v1/natural_gas_vol/history

ParameterWhat it takes
contract_numTenors, ranges allowed: M01-M12
contract_monthContract month(s), YYYY-MM-DD
location_codeCurves, comma-separated
typeComma-separated, e.g. ATM - $1.00
type_codeComma-separated
basisComma-separated
call_putCALL, PUT, ...
power_volPower Implied Volatility

Curve parameter: market_code   Tenor parameters: contract, time_key

Fields (for value= and Excel's field argument): mid_vol_lamda, bid_vol_ewma, ask_vol_30_day, mid_quote_20_day, bid_quote_10_day, ask_quote_5_day

Endpoints: /v1/power_vol/dates, /v1/power_vol/curve, /v1/power_vol/file, /v1/power_vol/curves, /v1/power_vol/history

ParameterWhat it takes
contractContract month(s), YYYY-MM-DD
time_keyTenors, comma-separated, ranges allowed: M01-M24, M01,Q11-Q14,C01
market_codeCurves, comma-separated
marketComma-separated market names
impl_quote_histComma-separated, e.g. OTM_PUT
atm_diffComma-separated
crudeCrude Oil Forwards

Curve parameter: location_code   Tenor parameters: contract, time_key

Fields (for value= and Excel's field argument): mid, bid, ask

Endpoints: /v1/crude/dates, /v1/crude/curve, /v1/crude/file, /v1/crude/curves, /v1/crude/history

ParameterWhat it takes
contractContracts, comma-separated, e.g. Jan_2027,Calendar_2028
time_keyTenors, comma-separated, ranges allowed: M01-M24, M01,Q11-Q14,C01
location_codeCurves, comma-separated
locationComma-separated location names
termContract terms, comma-separated, e.g. Month,Calendar
heat_ratesHeat Rates

Curve parameter: market_code   Tenor parameters: contract, time_key

Fields (for value= and Excel's field argument): basis_mid, basis_bid, basis_ask, nymex_mid, atc_basis, atc_nymex

Endpoints: /v1/heat_rates/dates, /v1/heat_rates/curve, /v1/heat_rates/file, /v1/heat_rates/curves, /v1/heat_rates/history

ParameterWhat it takes
contractContracts, comma-separated, e.g. Jan_2027,Calendar_2028
time_keyTenors, comma-separated, ranges allowed: M01-M24, M01,Q11-Q14,C01
market_codeCurves, comma-separated
isoComma-separated ISOs
marketComma-separated market names
peak_hourComma-separated, e.g. ON_PEAK
gas_hubComma-separated, e.g. ALGONQUIN
correlationsCorrelations

Curve parameter: market_code   Tenor parameters: contract, time_key

Fields (for value= and Excel's field argument): correlation_coef

Endpoints: /v1/correlations/dates, /v1/correlations/curve, /v1/correlations/file, /v1/correlations/curves, /v1/correlations/history

ParameterWhat it takes
contractContract month(s), YYYY-MM-DD
time_keyTenor number(s), e.g. 1-12
market_codeCurves, comma-separated
marketComma-separated market names
nymex_basisNYMEX or Basis
daysLookback window(s) in days, e.g. 45
cfdCFD Forwards

Curve parameter: product   Tenor parameters: contract, time_key

Fields (for value= and Excel's field argument): price

Endpoints: /v1/cfd/dates, /v1/cfd/curve, /v1/cfd/file, /v1/cfd/curves, /v1/cfd/history

ParameterWhat it takes
contractContracts, comma-separated, e.g. Jan_2027,Calendar_2028
time_keyTenors, comma-separated, ranges allowed: M01-M24, M01,Q11-Q14,C01
productComma-separated, e.g. Brent_Futures,Dated_Brent,CFD
coalCoal Forwards

Curve parameter: location_code   Tenor parameters: contract, time_key

Fields (for value= and Excel's field argument): mid, bid, ask

Endpoints: /v1/coal/dates, /v1/coal/curve, /v1/coal/file, /v1/coal/curves, /v1/coal/history

ParameterWhat it takes
contractContracts, comma-separated, e.g. Jan_2027,Calendar_2028
time_keyTenors, comma-separated, ranges allowed: M01-M24, M01,Q11-Q14,C01
location_codeCurves, comma-separated
locationComma-separated location names
termContract terms, comma-separated, e.g. Month,Calendar
freightFreight Forwards

Curve parameter: location_code   Tenor parameters: contract, time_key

Fields (for value= and Excel's field argument): mid, bid, ask

Endpoints: /v1/freight/dates, /v1/freight/curve, /v1/freight/file, /v1/freight/curves, /v1/freight/history

ParameterWhat it takes
contractContracts, comma-separated, e.g. Jan_2027,Calendar_2028
time_keyTenors, comma-separated, ranges allowed: M01-M24, M01,Q11-Q14,C01
location_codeCurves, comma-separated
locationComma-separated location names
termContract terms, comma-separated, e.g. Month,Calendar
eu_gas_powerEU Gas and Power Forwards

Curve parameter: location_code   Tenor parameters: contract, time_key

Fields (for value= and Excel's field argument): mid, bid, ask, spark

Endpoints: /v1/eu_gas_power/dates, /v1/eu_gas_power/curve, /v1/eu_gas_power/file, /v1/eu_gas_power/curves, /v1/eu_gas_power/history

ParameterWhat it takes
contractContracts, comma-separated, e.g. Jan_2027,Calendar_2028
time_keyTenors, comma-separated, ranges allowed: M01-M24, M01,Q11-Q14,C01
location_codeCurves, comma-separated
locationComma-separated location names
regionComma-separated region values
peakComma-separated peak values
g_pComma-separated g p values
termContract terms, comma-separated, e.g. Month,Calendar
ag_softsAG & Softs Forwards

Curve parameter: location_code   Tenor parameters: contract, time_key

Fields (for value= and Excel's field argument): mid, bid, ask

Endpoints: /v1/ag_softs/dates, /v1/ag_softs/curve, /v1/ag_softs/file, /v1/ag_softs/curves, /v1/ag_softs/history

ParameterWhat it takes
contractContracts, comma-separated, e.g. Jan_2027,Calendar_2028
time_keyTenors, comma-separated, ranges allowed: M01-M24, M01,Q11-Q14,C01
location_codeCurves, comma-separated
locationComma-separated location names
productComma-separated product values
categoryComma-separated category values
termContract terms, comma-separated, e.g. Month,Calendar
power_20yrPower Forwards (20-year) with Power Forwards

Curve parameter: market_code   Tenor parameters: contract, time_key

Fields (for value= and Excel's field argument): mid, bid, ask, atc, hr

Endpoints: /v1/power_20yr/dates, /v1/power_20yr/curve, /v1/power_20yr/file, /v1/power_20yr/curves, /v1/power_20yr/history

ParameterWhat it takes
contractContracts, comma-separated, e.g. Jan_2027,Calendar_2028
time_keyTenors, comma-separated, ranges allowed: M01-M24, M01,Q11-Q14,C01
market_codeCurves, comma-separated, e.g. NNG,JZP
isoComma-separated, e.g. PJM,ERCOT
marketComma-separated market names
peak_hourComma-separated, e.g. ON_PEAK
termComma-separated: Month, Calendar, Q1, Q2, Q3, Q4, Winter, Spring, Summer
natural_gas_20yrNatural Gas Forwards (20-year) with Natural Gas Forwards

Curve parameter: market_code   Tenor parameters: contract, time_key

Fields (for value= and Excel's field argument): mid, bid, ask, fp

Endpoints: /v1/natural_gas_20yr/dates, /v1/natural_gas_20yr/curve, /v1/natural_gas_20yr/file, /v1/natural_gas_20yr/curves, /v1/natural_gas_20yr/history

ParameterWhat it takes
contractContracts, comma-separated, e.g. Jan_2027,Calendar_2028
time_keyTenors, comma-separated, ranges allowed: M01-M24, M01,Q11-Q14,C01
market_codeCurves, comma-separated
regionComma-separated, e.g. NYMEX Settlement
marketComma-separated market names
termContract terms, comma-separated, e.g. Month,Calendar
power_vol_pjmPower Vol Surface - PJM with Power Implied Volatility

Curve parameter: location   Tenor parameters: contract_num, contract_month

Fields (for value= and Excel's field argument): moneyness, risk_free, future, call, put, mid, call_prem, put_prem, call_sett, put_sett

Endpoints: /v1/power_vol_pjm/dates, /v1/power_vol_pjm/curve, /v1/power_vol_pjm/file, /v1/power_vol_pjm/curves, /v1/power_vol_pjm/history

ParameterWhat it takes
contract_numTenors, ranges allowed: M01-M12
contract_monthContract month(s), YYYY-MM-DD
locationComma-separated, e.g. PJM
strikeComma-separated strikes, e.g. Fut,64.5
power_vol_pmxPower Vol Surface - PMX with Power Implied Volatility

Curve parameter: location   Tenor parameters: contract_num, contract_month

Fields (for value= and Excel's field argument): moneyness, risk_free, future, call, put, mid, call_prem, put_prem, call_sett, put_sett

Endpoints: /v1/power_vol_pmx/dates, /v1/power_vol_pmx/curve, /v1/power_vol_pmx/file, /v1/power_vol_pmx/curves, /v1/power_vol_pmx/history

ParameterWhat it takes
contract_numTenors, ranges allowed: M01-M12
contract_monthContract month(s), YYYY-MM-DD
locationComma-separated, e.g. PJM
strikeComma-separated strikes, e.g. Fut,64.5

Download EOD files

Every EOD file you subscribe to, today's and the full history, in the same CSV and Excel formats as your email and FTP delivery. No FTP client needed.

Open the file browserSign in with your API key, pick a complex and a date, download.

Automating downloads

The same files are available to scripts. /v1/files lists them (newest first) and /v1/files/<name> downloads one. Follow the redirect: the file comes from secure storage through a link that expires after a couple of minutes.

# list this month's power files
curl -H "X-API-Key: YOUR_KEY" "https://api.eoxlive.com/v1/files?complex=power&start=2026-10-01"

# download one (-L follows the redirect, -O keeps the file name)
curl -L -O -J -H "X-API-Key: YOUR_KEY" "https://api.eoxlive.com/v1/files/EOD_PW_20261023_1430.xlsx"
# PowerShell: today's latest power Excel file
$h = @{ "X-API-Key" = "YOUR_KEY" }
$f = (Invoke-RestMethod -Headers $h "https://api.eoxlive.com/v1/files?complex=power&ext=xlsx&limit=1").data[0]
Invoke-WebRequest -Headers $h "https://api.eoxlive.com$($f.url)" -OutFile $f.name

Limits and errors

CodeMeaningWhat to do
401Missing, wrong, revoked or expired keyCheck the key; contact EOX if your trial has ended.
403That dataset isn't in your subscription/v1/me lists what's included.
404Nothing published for that dateUse /dates to find valid dates.
422A bad parameter, or a request too large for one callRead detail in the response; it says what to change.
429Too many requestsWait the number of seconds in Retry-After, then retry.
503Temporarily busy or unavailableRetry after Retry-After.

Help

Questions, more datasets or a new key: curves@eoxlive.com. If you think your key has been exposed, tell us and we'll replace it; the old one stops working within a minute.