Helium Public API

A free, key-less, CORS-open mirror of our internal Helium data layer. Same JSON our own SSR pages use — no signup, no quota worth worrying about, 60 requests/minute per IP.

Helium network snapshot warming up…

Endpoints

MethodPathSummary
GET/helium/coverage/h3/{hex}All known sources for one H3 hex (Foundation + first-party + curated).
GET/helium/airports/{iata}/coverageCoverage hexes within a radius of a major airport (JFK, LHR, …).
GET/helium/hotels/{slug}/coverageCoverage hexes around a curated hotel (marina-bay-sands, ritz-paris, …).
GET/helium/coverage/by-traveler-densityHexes most attested by LTE.app’s own fleet — real traveler density.
GET/helium/coverage/geojson?country=XXDaily-built FeatureCollection of active hexes for a country (24h cache).
GET/helium/metricsPrometheus exposition: coverage hex counts, last-refresh ages, geojson cache health.
GET/helium/network/statsLatest Helium Foundation network snapshot (daily).
GET/helium/network/tickerSSE stream of network stats, refreshed every 15 seconds.
GET/helium/oracles/pricesLatest HNT / MOBILE / IOT oracle prices (?tokens=HNT,MOBILE).
GET/helium/openapi.jsonCurated OpenAPI 3.0 spec for this slice.

Quick start

curl https://lte.app/helium/network/stats
curl 'https://lte.app/helium/oracles/prices?tokens=HNT,MOBILE'
curl https://lte.app/helium/airports/JFK/coverage
curl 'https://lte.app/helium/coverage/geojson?country=US'
curl https://lte.app/helium/metrics

Per-country GeoJSON

/helium/coverage/geojson?country=XX returns a daily-built FeatureCollection of every active hex we know about for an ISO-2 country. Served straight from the materialised cache with Cache-Control: public, max-age=86400 so you can drop it into MapLibre, Mapbox GL, Leaflet, or any GIS pipeline without spamming the API.

Prometheus metrics

/helium/metrics exposes a stable, public Prometheus contract: coverage hex counts and last-refresh ages by source, the freshness of the nightly Foundation snapshot, and the per-country GeoJSON cache build state. Point any Prometheus / Grafana Agent / Datadog OpenMetrics scraper at it.

scrape_configs:
  - job_name: lte-helium-public
    metrics_path: /helium/metrics
    scheme: https
    static_configs:
      - targets: ['lte.app']

Official SDKs

Both SDKs are MIT-licensed, hand-written, no codegen, and wrap every endpoint above with typed responses, exponential-backoff retries, and Retry-After handling.

JavaScript / TypeScript

npm install @lte/helium-public

import { createClient } from '@lte/helium-public';

const client = createClient();
const stats = await client.networkStats();
const us = await client.coverageGeoJson('US');
const metrics = await client.metricsText();

Python

pip install lte-helium-public

from lte_helium_public import create_client

client = create_client()
stats = client.network_stats()
us = client.coverage_geojson("US")
print(client.metrics_text())

Both packages ship sources on GitHub and are published as @lte/helium-public on npm and lte-helium-public on PyPI. Async variants in Python share the same surface with an a prefix (await client.anetwork_stats()).

Embed the coverage map

Drop our live coverage map onto any page with one snippet. The embed loads MapLibre from a CDN, points at the same vector tile endpoint our own pages use, and respects a few data-* attributes so you can pre-frame it.

<div data-lte-coverage
     data-country="US"
     data-center="40.7,-74.0"
     data-zoom="5"
     data-height="420"></div>
<script src="https://lte.app/embed/coverage.js" async></script>

For SPAs that mount the container after the script loads, call window.LteCoverageEmbed.renderAll() (or .render(el)) once the node is in the DOM.

Data sources

Terms

Output is licensed CC-BY-4.0 — please credit LTE.app. Don’t hammer: the per-IP limit is firm. For higher volume, get in touch.