BYTETOOLS

Global Warming API

Free climate data API with no key: global temperature anomalies from 1880 to now, plus CO2, methane, nitrous oxide and polar ice extent series. Tested example included.

No API key requiredCORS enabledHTTPSFree tier

Endpoint tested and returned HTTP 200 on 2026-08-21

What is the Global Warming API?

The Global Warming API republishes headline climate indicators as simple JSON with no key. The temperature endpoint returns a monthly series from 1880 onward, giving land and combined station anomalies in degrees Celsius against the twentieth-century baseline.

The underlying data comes from NASA GISS, NOAA and the Scripps CO2 programme, all of which publish it themselves — but in fixed-width text files, CSV variants and formats designed for climate scientists rather than for a fetch call. This service does the tedious part and republishes the same series as flat JSON arrays anyone can chart in ten lines.

The temperature time format is the thing that catches people out. `time` is a decimal year like `1880.04`, not a date string: the integer part is the year and the fraction is the position within it, so `.04` is roughly mid-January and `.96` is late December. Multiply the fraction by twelve to recover the month. Values are anomalies in degrees Celsius relative to a baseline, not absolute temperatures, which is why the early entries are negative — and they are returned as strings, so parse before plotting. The whole series comes back in one response with no pagination, so it is a sizeable payload.

Quick facts

Base URL
https://global-warming.org/api
Authentication
No API key and no account.
Rate limit
No published limit. The series updates monthly at most — cache accordingly.
Pricing
Free. The underlying data comes from public NASA, NOAA and Scripps datasets.
CORS
Enabled — callable directly from browser JavaScript
Official docs
Read the docs

How to use the Global Warming API

Every request below was executed against the live API on 2026-08-21, and the response shown is the real body it returned — not an illustration.

1. Fetch the global temperature anomaly series

GET https://global-warming.org/api/temperature-api

curl
curl 'https://global-warming.org/api/temperature-api'
JavaScript (fetch)
const res = await fetch("https://global-warming.org/api/temperature-api");
if (!res.ok) throw new Error(`Request failed: ${res.status}`);
const data = await res.json();
console.log(data);
Python (requests)
import requests

res = requests.get("https://global-warming.org/api/temperature-api", timeout=20)
res.raise_for_status()
print(res.json())
Response — HTTP 200 (truncated)
{
  "error": null,
  "result": [
    {
      "time": "1880.04",
      "station": "-0.31",
      "land": "-0.19"
    },
    {
      "time": "1880.13",
      "station": "-0.51",
      "land": "-0.25"
    },
    {
      "time": "1880.21",
      "station": "-0.37",
      "land": "-0.09"
    },
    {
      "time": "1880.29",
      "station": "-0.56",
      "land": "-0.16"
    },
    {
      "time": "1880.38",
      "station": "-0.26",
      "land": "-0.10"
    },
    {
      "time": "1880.46",
      "station": "-0.42",
      "land": "-0.21"
    },
    {
      "time": "1880.54",
      "station": "-0.38",
      "land": "-0.19"
    },
    {
      "time": "1880.63",
      "station": "0.19",
      "land": "-0.10"
    },
    {
      "time": "1880.71",
      "station": "-0.43",
      "land": "-0.15"
    },
    {
      "time": "1880.79",
      "station": "-0.66",
      "land": "-0.24"
    },
    {
      "time": "1880.88",
      "station": "-0.34",
      "land": "-0.22"
    },
    {
      "time": "1880.96",
      "station": "-0.33",
      "land": "-0.18"
    },
    {
      "time": "1881.04",
      "station": "-0.71",
      "land": "-0.20"
    },
    {
      "time": "1881.13",
      "station": "-0.26",
      "land": "-0.14"
    },
    {
      "time": "1881.21",
      "station": "-0.14",
      "land": "0.03"
    },
    {
      "time": "1881.29",
      "station": "-0.08",
      "land": "0.05"
    },
    {
      "time": "1881.38",
      "station": "0.15",
      "land": "0.06"
    },
    {
      "time": "1881.46",
      "station": "-0.94",
      "land": "-0.19"
    },
    {
      "time": "188

Parameters

ParameterTypeRequiredDescription
(none)n/aOptionalEach endpoint returns its whole series. There are no parameters and no pagination.
/co2-apipathOptionalAtmospheric CO2 concentration series from Scripps.
/methane-apipathOptionalAtmospheric methane concentration series.
/nitrous-oxide-apipathOptionalAtmospheric nitrous oxide series.
/arctic-apipathOptionalArctic sea ice extent by year and month.

Response fields

errornull
Null on success. A populated value signals a problem with the upstream feed.
resultarray
The full monthly series, oldest first.
result[].timestring
Decimal year — `1880.04` is early 1880. Multiply the fractional part by twelve to recover the month.
result[].stationstring
Meteorological station-based temperature anomaly in degrees Celsius, as a string. Negative values are below the baseline.
result[].landstring
Land-ocean combined anomaly in degrees Celsius, also a string.

What you can build with the Global Warming API

  • Chart the global temperature record without parsing NASA's fixed-width files
  • Build a climate dashboard combining temperature, CO2 and ice extent
  • Teach data visualisation with a real long-run time series
  • Compute decade-on-decade warming rates

Common errors and how to fix them

Dates parse as invalid

`time` is a decimal year, not an ISO date.

Fix: Split on the decimal point: the integer is the year, and the fraction times twelve gives the month.

Arithmetic gives string concatenation

`station` and `land` are strings.

Fix: Coerce to float before any calculation. Every numeric field here is quoted.

Large response

The full series from 1880 arrives in one payload with no pagination.

Fix: Fetch once and cache. It updates monthly at most, so there is nothing to gain from repeat calls.

Values look too small

These are anomalies, not absolute temperatures.

Fix: They are degrees Celsius relative to a baseline period. A value of 1.2 means 1.2 degrees above that baseline, not 1.2 degrees absolute.

Global Warming API — frequently asked questions

Is the Global Warming API free?

Yes, free with no key or account. It republishes public NASA, NOAA and Scripps datasets in a more convenient JSON form.

What does a time value like 1880.04 mean?

It is a decimal year. The integer part is the year and the fraction is the position within it, so multiplying the fraction by twelve recovers the month.

Are these absolute temperatures?

No, they are anomalies in degrees Celsius against a baseline period, which is why early values are negative. That is standard practice in climate science because anomalies are more robust than absolute averages.

What other series are available?

CO2, methane, nitrous oxide and Arctic sea ice extent, each on its own endpoint with the same simple shape.

Tools that pair with this API

Global Warming API is an independent third-party service and is not affiliated with ByteTools or ByteVancer. Details on this page were verified on 2026-08-21; always check the official documentation before relying on this API in production, as terms and limits can change.