Coverage API quickstart
Authenticate with one header, query measured LTE and 5G NR coverage by coordinate, H3 cell or bounding box, and pull extracts as JSON, GeoJSON or files. The full contract is in the OpenAPI 3.1 specification.
1. Get a key
Start the 14-day evaluation from the dashboard: no card, one showcase metro, 500 units. Free test keys (prefix lted_test_) return real data inside the San Francisco sandbox at no unit cost, so you can wire up your integration first.
2. Authenticate
Send the key in the X-API-Key header on every request to https://ltediscovery.app/api/partner/v1. Keep keys server-side; self-service licenses cover internal use.
3. Make a first request
curl "https://ltediscovery.app/api/partner/v1/lookup?lat=37.7749&lon=-122.4194&res=8" \
-H "X-API-Key: $LTED_API_KEY"The response lists what was measured at the point by carrier, band and generation with RSRP, RSRQ and SINR statistics and reading counts, or insufficient_evidence when there are not enough readings. That is not a no-coverage claim.
Endpoints
| Method | Endpoint | Billable unit | Output |
|---|---|---|---|
| GET / POST | /api/partner/v1/lookup | Input location | Coverage and RF evidence by coordinate |
| GET / POST | /api/partner/v1/coverage/h3 | Input H3 cell | Coverage and RF evidence by H3 cell id |
| GET | /api/partner/v1/coverage | 100 returned rows (5 on evaluation) | H3 JSON or GeoJSON extract |
| GET | /api/partner/v1/cells | 10 returned rows (5 on evaluation) | Per-cell PCI/TAC/PLMN/GCI, band, EARFCN/NR-ARFCN, RSRP stats (no position) |
| GET | /api/partner/v1/band-deployment | 100 returned rows (5 on evaluation) | Carrier × generation × band footprint |
| GET | /api/partner/v1/measurements | 10 returned rows, paid plans only | Raw readings with exact time and position |
| GET | /api/partner/v1/network-benchmark | 10 units / bounded request | Paired-cell carrier RF comparison |
| GET | /api/partner/v1/catalog | Free | Machine-readable schemas and evidence contract |
Cells are selected by market, county, CBSA or state and never carry a position: the roster is cell identity and channel data, not site locations. Raw measurements are available on paid plans, up to 31 days per request.
Extracts and pagination
import os, requests
res = requests.get(
"https://ltediscovery.app/api/partner/v1/coverage",
params={"bbox": "-122.45,37.76,-122.40,37.79", "res": 8, "format": "geojson"},
headers={"X-API-Key": os.environ["LTED_API_KEY"]},
)
res.raise_for_status()
print(res.headers["X-Usage-Units"], len(res.json()["features"]))Coverage, cells, band deployment and lookups page with an opaque cursor when you pass limit: follow next_cursor while has_more is true. Use an export for an exact snapshot.
Usage you can see
X-Usage-Units | Units this request cost. Failed requests cost 0. |
X-Usage-Remaining | Units left in the billing period. |
X-RateLimit-Remaining | Requests left in the current minute. |
X-Data-Refreshed-At | When the data behind the response was last rebuilt. |
Plans include a monthly unit budget and stop at the limit: no automatic overages. Compare plans.
Files, feeds and webhooks
Exports deliver CSV, Parquet, GeoParquet or GeoJSON files. Scale and Enterprise plans can schedule feeds, and webhooks notify your endpoint when an export or feed is ready.
See the data before you integrate
The free San Francisco sample shows the same measured hexagons, bands and methodology.