API documentation

Everything you can do in the dashboard, you can do through the API. REST endpoints, GTQL queries, and streaming ingestion.

Getting started

All API requests use the base URL https://api.geo-tech.tech/v1 and authenticate with a Bearer token. Create API keys under Settings → API keys in the dashboard.

# Store your key once, reuse everywhere
export GT_API_KEY="gt_live_9f2c…"

curl -s https://api.geo-tech.tech/v1/devices \
  -H "Authorization: Bearer $GT_API_KEY"

Responses are JSON. Errors follow RFC 7807 (application/problem+json) with a machine-readable type field.

Endpoints

POST /v1/ingest Submit a batch of data points (up to 5,000 per request)
GET /v1/devices List devices, filterable by fleet, region or tag
GET /v1/devices/{device_id}/metrics Latest metrics for a single device
GET /v1/alerts List alert rules and their current state
POST /v1/query Run a GTQL query over historical telemetry

Ingest data points

Devices typically send data through the agent or MQTT bridge, but server-side ingestion works too:

curl -X POST https://api.geo-tech.tech/v1/ingest \
  -H "Authorization: Bearer $GT_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "device_id": "gw-08c1d",
    "points": [
      {"metric": "cpu.temp_c", "value": 71.4, "ts": "2026-09-08T14:02:11Z"},
      {"metric": "net.tx_mbps", "value": 118.2, "ts": "2026-09-08T14:02:11Z"}
    ]
  }'
# 202 Accepted
{"accepted": 2, "rejected": 0, "request_id": "req_7d31bc"}

Query with GTQL

GTQL is our SQL-like language over telemetry. This example returns hourly average CPU temperature for a fleet over the last day:

curl -X POST https://api.geo-tech.tech/v1/query \
  -H "Authorization: Bearer $GT_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "query": "SELECT avg(cpu.temp_c) FROM metrics WHERE fleet = '"'"'eu-west-1'"'"' SINCE 1d AGO GROUP BY time(1h)"
  }'
# 200 OK
{
  "columns": ["time", "avg_cpu_temp_c"],
  "rows": [
    ["2026-09-07T14:00:00Z", 64.8],
    ["2026-09-07T15:00:00Z", 65.1]
  ],
  "stats": {"elapsed_ms": 187, "rows_scanned": 1204812}
}

Limits & reliability

600 req/minper API key, burst up to 1,200
5,000 pointsper ingestion batch, gzip supported
13 monthsdefault retention, extendable on Team and Enterprise

Need higher limits or a private ingestion endpoint? Talk to us about Enterprise plans.