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.