Free JSON · no key · open CORS

The Fill Line Data API

Every number published on The Fill Line (fill-line.com) as free JSON: state prices, regional prices, inventories, spot, supply and heating demand. No key, no sign-up, callable from any website or script. The files are rebuilt every time the site rebuilds with new data, so they always match the pages.

Base URL
https://fill-line.com/api/v1
Auth
None
Format
JSON, UTF-8, GET only
CORS
Access-Control-Allow-Origin: *
Series
51 · 16 key statistics
Data as of
week of Nov 9, 2026

Quick start

The newest reading of every series, from a terminal:

curl https://fill-line.com/api/v1/latest.json

Or in JavaScript, from any page:

const res = await fetch("https://fill-line.com/api/v1/latest.json");
const { data_as_of, data } = await res.json();
for (const row of data) console.log(row.title, row.headline, row.data_through);

Endpoints

GET /api/v1/index.json

API index. What this API is, its license and attribution, the sections it covers, and every endpoint.

Example: https://fill-line.com/api/v1/index.json

Sample response
{
  "api": "The Fill Line Data API",
  "version": "v1",
  "docs": "https://fill-line.com/api",
  "data_as_of": "2026-11-09",
  "data_as_of_label": "week of Nov 9, 2026",
  "data_pulled_at": "2026-11-12T00:16:11.666Z",
  "generated_at": "2026-11-12T07:47:15.204Z",
  "attribution": "Credit The Fill Line (fill-line.com) with a visible link to the page the figure came from; every record carries its page_url.",
  "name": "The Fill Line Data API",
  "description": "Free JSON for every number published on The Fill Line (fill-line.com): state prices, regional prices, inventories, spot, supply, heating demand. What propane costs at home, state by state.",
  "publisher": {
    "name": "The Fill Line",
    "url": "https://fill-line.com"
  },
  "auth": "none",
  "cors": "*",
  "format": "application/json; charset=utf-8",
  "license": "Free to use and republish with attribution; no key or sign-up. The underlying figures are public records from the agencies named in each series' provenance; The Fill Line collects, checks and publishes them.",
  "update_policy": "Static files rebuilt every time the site rebuilds with new data. data_as_of in each response is the newest observation it holds; data_pulled_at is when the site last pulled its sources.",
  "counts": {
    "series": 51,
    "stats": 16
  },
  "sections": [
    {
      "key": "state",
      "label": "State prices",
      "series": 38,
      "example": "https://fill-line.com/api/v1/series/state/alabama.json"
    },
    {
      "key": "region",
      "label": "Regional prices",
      "series": 8,
      "example": "https://fill-line.com/api/v1/series/region/padd1.json"
    },
    {
      "key": "stocks",
      "label": "Inventories",
      "series": 2,
      "example": "https://fill-line.com/api/v1/series/stocks/padd3.json"
    },
    {
      "key": "spot",
      "label": "Spot",
      "series": 1,
      "example": "https://fill-line.com/api/v1/series/spot/mont-belvieu.json"
    },
    {
      "key": "supply",
      "label": "Supply",
      "series": 1,
      "example": "https://fill-line.com/api/v1/series/supply/exports.json"
    },
    {
      "key": "heating-demand",
      "label": "Heating demand",
      "series": 1,
      "example": "https://fill-line.com/api/v1/series/heating-demand/us.json"
    }
  ],
  "endpoints": [
    {
      "method": "GET",
      "path": "/api/v1/index.json",
      "url": "https://fill-line.com/api/v1/index.json",
      "description": "What this API is, its license and attribution, the sections it covers, and every endpoint."
    },
    {
      "method": "GET",
      "path": "/api/v1/latest.json",
      "url": "https://fill-line.com/api/v1/latest.json",
      "description": "The newest reading of every data page on The Fill Line (51 series): the headline value as the site shows it, the newest point of each charted line with its date, whether it is current, and links to its page and full history."
    },
    {
      "method": "GET",
      "path": "/api/v1/stats.json",
      "url": "https://fill-line.com/api/v1/stats.json",
      "description": "The 16 headline numbers on the fill-line.com/stats page, each as a quotable sentence with its data date and a ready-made citation."
    },
    {
      "method": "GET",
      "path": "/api/v1/series/{section}/{slug}.json",
      "url": "https://fill-line.com/api/v1/series/stocks/us.json",
      "description": "Everything behind one data page: every charted point (date + value), the historical band where the page draws one, the page's tables exactly as shown, its source and citation. Find each series_url in latest.json."
    },
    {
      "method": "GET",
      "path": "/api/v1/openapi.json",
      "url": "https://fill-line.com/api/v1/openapi.json",
      "description": "A machine-readable OpenAPI 3.1 description of these endpoints."
    }
  ]
}

GET /api/v1/latest.json

Latest readings. The newest reading of every data page on The Fill Line (51 series): the headline value as the site shows it, the newest point of each charted line with its date, whether it is current, and links to its page and full history.

Example: https://fill-line.com/api/v1/latest.json

Sample response
{
  "api": "The Fill Line Data API",
  "version": "v1",
  "docs": "https://fill-line.com/api",
  "data_as_of": "2026-11-09",
  "data_as_of_label": "week of Nov 9, 2026",
  "data_pulled_at": "2026-11-12T00:16:11.666Z",
  "generated_at": "2026-11-12T07:47:15.204Z",
  "attribution": "Credit The Fill Line (fill-line.com) with a visible link to the page the figure came from; every record carries its page_url.",
  "count": 51,
  "data": [
    {
      "id": "state/alabama",
      "section": "state",
      "section_label": "State prices",
      "title": "Alabama propane prices",
      "headline": "$3.688/gal",
      "unit": "$/gal",
      "data_through": "2026-11-02",
      "frequency": "Weekly, Oct-Mar",
      "status": "current",
      "values": [
        {
          "series": "Residential",
          "date": "2026-11-02",
          "value": 3.688
        },
        {
          "series": "Wholesale",
          "date": "2026-11-02",
          "value": 1.348
        }
      ],
      "source": "EIA State Heating Oil and Propane Program survey",
      "page_url": "https://fill-line.com/state/alabama",
      "series_url": "https://fill-line.com/api/v1/series/state/alabama.json"
    },
    {
      "id": "state/arkansas",
      "section": "state",
      "section_label": "State prices",
      "title": "Arkansas propane prices",
      "headline": "$2.558/gal",
      "unit": "$/gal",
      "data_through": "2026-11-02",
      "frequency": "Weekly, Oct-Mar",
      "status": "current",
      "values": [
        {
          "series": "Residential",
          "date": "2026-11-02",
          "value": 2.558
        }
      ],
      "source": "EIA State Heating Oil and Propane Program survey",
      "page_url": "https://fill-line.com/state/arkansas",
      "series_url": "https://fill-line.com/api/v1/series/state/arkansas.json"
    }
  ]
}

Trimmed to 2 of 51 entries.

GET /api/v1/stats.json

Key statistics. The 16 headline numbers on the fill-line.com/stats page, each as a quotable sentence with its data date and a ready-made citation.

Example: https://fill-line.com/api/v1/stats.json

Sample response
{
  "api": "The Fill Line Data API",
  "version": "v1",
  "docs": "https://fill-line.com/api",
  "data_as_of": "2026-11-09",
  "data_as_of_label": "week of Nov 9, 2026",
  "data_pulled_at": "2026-11-12T00:16:11.666Z",
  "generated_at": "2026-11-12T07:47:15.204Z",
  "attribution": "Credit The Fill Line (fill-line.com) with a visible link to the page the figure came from; every record carries its page_url.",
  "stats_page": "https://fill-line.com/stats",
  "count": 16,
  "stats": [
    {
      "id": "us-stocks",
      "label": "US inventories",
      "sentence": "US propane inventories stand at 104.1 million barrels, 3.6% above the 5-yr median for the date.",
      "data_date": "2026-10-30",
      "citation": "US propane inventories: 104.1 million barrels, 3.6% above the 5-yr median (The Fill Line's same-week 5-year median, not EIA's published five-year average). The Fill Line, data through Oct 30, 2026. https://fill-line.com/stocks/us",
      "stats_url": "https://fill-line.com/stats#us-stocks",
      "page_url": "https://fill-line.com/stocks/us",
      "series_url": "https://fill-line.com/api/v1/series/stocks/us.json",
      "provenance": "EIA Weekly Petroleum Status Report · Propane and propylene ending stocks · Primary storage, excluding propylene at terminal · United States · through Oct 30, 2026"
    },
    {
      "id": "tightest-padd",
      "label": "Tightest region",
      "sentence": "PADD 2 (Midwest) has the tightest propane stocks of any region, 7.7% below the 5-yr median.",
      "data_date": "2026-10-30",
      "citation": "PADD 2 (Midwest) has the tightest propane stocks of any region, 7.7% below the 5-yr median. The Fill Line. https://fill-line.com/stocks/us#padd2",
      "stats_url": "https://fill-line.com/stats#tightest-padd",
      "page_url": "https://fill-line.com/stocks/us#padd2",
      "series_url": null,
      "provenance": null
    }
  ]
}

Trimmed to 2 of 16 statistics.

GET /api/v1/series/{section}/{slug}.json

One series, full history. Everything behind one data page: every charted point (date + value), the historical band where the page draws one, the page's tables exactly as shown, its source and citation. Find each series_url in latest.json.

Example: https://fill-line.com/api/v1/series/stocks/us.json

Sample response
{
  "api": "The Fill Line Data API",
  "version": "v1",
  "docs": "https://fill-line.com/api",
  "data_as_of": "2026-10-30",
  "data_as_of_label": "Oct 30, 2026",
  "data_pulled_at": "2026-11-12T00:16:11.666Z",
  "generated_at": "2026-11-12T07:47:15.204Z",
  "attribution": "Credit The Fill Line (fill-line.com) with a visible link to the page the figure came from; every record carries its page_url.",
  "id": "stocks/us",
  "section": "stocks",
  "section_label": "Inventories",
  "title": "US propane inventories",
  "subtitle": "Propane and propylene in primary storage, EIA Weekly Petroleum Status Report",
  "description": "United States propane/propylene stocks: 104.1 million barrels as of Oct 30, 2026 (Now 104.1 million barrels, 3.6% above the 5-yr median).",
  "page_url": "https://fill-line.com/stocks/us",
  "headline": "104.1 million barrels",
  "unit": "million barrels",
  "data_through": "2026-10-30",
  "frequency": "Weekly",
  "status": "current",
  "source": "EIA Weekly Petroleum Status Report",
  "provenance": {
    "source": "EIA Weekly Petroleum Status Report",
    "series": "Propane and propylene ending stocks",
    "basis": "Primary storage, excluding propylene at terminal",
    "geography": "United States",
    "unit": "million barrels",
    "period": "Weekly ending stocks",
    "lastObservation": "Oct 30, 2026",
    "frequency": "Weekly"
  },
  "citation": "US propane inventories: 104.1 million barrels, 3.6% above the 5-yr median (The Fill Line's same-week 5-year median, not EIA's published five-year average). The Fill Line, data through Oct 30, 2026. https://fill-line.com/stocks/us",
  "series": [
    {
      "label": "Stocks",
      "unit": "million barrels",
      "points": [
        {
          "date": "2026-10-16",
          "value": 105.846
        },
        {
          "date": "2026-10-23",
          "value": 105.735
        },
        {
          "date": "2026-10-30",
          "value": 104.108
        }
      ]
    }
  ],
  "tables": [
    {
      "caption": null,
      "columns": [
        "Period",
        "Current",
        "Prior",
        "Change"
      ],
      "rows": [
        [
          "Week over week",
          "104.1 million barrels",
          "105.7 million barrels",
          "-1.5%"
        ],
        [
          "vs 4 weeks ago",
          "104.1 million barrels",
          "107.8 million barrels",
          "-3.5%"
        ],
        [
          "Year over year",
          "104.1 million barrels",
          "106.1 million barrels",
          "-1.9%"
        ]
      ]
    }
  ]
}

Trimmed: the live response carries all 278 points, all 3 tables.

GET /api/v1/openapi.json

OpenAPI description. A machine-readable OpenAPI 3.1 description of these endpoints.

Example: https://fill-line.com/api/v1/openapi.json

Sample response
{
  "openapi": "3.1.0",
  "info": {
    "title": "The Fill Line Data API",
    "version": "1.0.0",
    "description": "Free JSON for every number published on The Fill Line (fill-line.com): state prices, regional prices, inventories, spot, supply, heating demand. What propane costs at home, state by state. No key needed. Credit The Fill Line (fill-line.com) with a visible link to the page the figure came from; every record carries its page_url.",
    "license": {
      "name": "Free to use with attribution",
      "url": "https://fill-line.com/api"
    }
  },
  "servers": [
    {
      "url": "https://fill-line.com/api/v1"
    }
  ],
  "externalDocs": {
    "description": "Docs",
    "url": "https://fill-line.com/api"
  },
  "paths": {
    "/index.json": {
      "get": {
        "operationId": "getIndex",
  ...

First lines only.

What's in it

One series file per data page on the site, at https://fill-line.com/api/v1/series/{section}/{slug}.json. Every valid pair is listed in latest.json (its id and series_url fields).

SectionSeriesExample
State pricesResidential propane price by surveyed state, week over week (heating season). 38 Alabama propane prices
Regional pricesUS and district (PADD) propane prices, residential and wholesale, from EIA's weekly heating-season survey. 8 PADD 1 (East Coast) propane price
InventoriesWeekly US propane/propylene stocks against the five-year band, every district in one table, year-round. 2 PADD 3 (Gulf Coast) propane stocks
SpotMont Belvieu propane spot price, the hub the market prices off. 1 Mont Belvieu propane spot price
SupplyProduction, exports, imports and product supplied, the weekly balance. 1 US propane exports and supply
Heating demandPropane-weighted heating degree days, the weather driver of heating demand (NOAA CPC, weekly). 1 US heating degree days (propane-weighted)

Fields every response carries

In latest.json and each series file, headline is the value exactly as the site shows it (with its unit), values / series carry the raw numbers with their dates, and status is current or not_current. A series that is out of season or not recently quoted says so, with last_quoted, rather than passing an old reading off as today's. See an example series.

Use, credit and limits

Free to use and republish with attribution; no key or sign-up. The underlying figures are public records from the agencies named in each series' provenance; The Fill Line collects, checks and publishes them.

Attribution: Credit The Fill Line (fill-line.com) with a visible link to the page the figure came from; every record carries its page_url.

No rate limit is set and there is nothing to sign up for: the files are static and served from Cloudflare's network. Please cache responses rather than polling; they change only when the site rebuilds. Fields are only ever added within v1, never renamed or removed. Questions or a series you need: contact us. How each number is collected: methodology.