API Documentation
TerraMap REST API
Maps & location infrastructure over one HTTP API. This reference covers the service APIs — the endpoints an application calls. Place search and reverse geocoding are live over 3,074,320 Austrian places.
Open the interactive reference →
What is real today
Every endpoint below runs the complete pipeline — authentication, the per-key permission check, IP and origin restrictions, rate limiting, credit deduction and usage metering. What differs is whether there is an engine behind it.
| Endpoint | Status | |
|---|---|---|
GET /api/v1/search | Live | Place search across Austria |
GET /api/v1/geocode/reverse | Live | Coordinate → nearest place |
POST /api/v1/routes | Mock | Routing |
POST /api/v1/matrix | Mock | Distance/duration matrix |
POST /api/v1/optimization/tsp | Mock | Travelling salesman |
POST /api/v1/optimization/vrp | Mock | Vehicle routing |
POST /api/v1/snap-to-road | Mock | Snap to road |
POST /api/v1/navigation/session | Mock | Navigation |
A mock returns "mock": true and no real result. It does not
fabricate a route or a geometry: a plausible-looking line would be
indistinguishable from a working engine, and that is a worse failure than
an obvious one.
Authentication
Every endpoint here takes an API key, sent as
Authorization: Bearer …. There are two kinds and they
are not interchangeable.
tm_pk_— publishable- Meant to be visible in a browser or a mobile app. Restrict it by origin, IP or app identity; that restriction, not secrecy, is what protects it.
tm_sk_— secret- Belongs only on a server you control. A secret key pasted into client code is no longer secret, and it is not restricted by origin.
Try it in one command
Search, with a secret key from a server:
curl -s -H "Authorization: Bearer tm_sk_YOUR_KEY" \
"https://api.terramap.at/api/v1/search?q=Stephansplatz&limit=3"
Reverse geocoding — note that coordinates you send are
lon then lat:
curl -s -H "Authorization: Bearer tm_sk_YOUR_KEY" \
"https://api.terramap.at/api/v1/geocode/reverse?lon=16.3725&lat=48.2085"
Every response uses the same envelope, and status always
equals the real HTTP status:
{
"status": 200,
"code": "SUCCESS",
"message": "Success",
"data": [ { "name": "Stephansplatz", "type": "place", "subType": "square",
"city": "Wien", "postCode": "1010", "latitude": 48.2085,
"longitude": 16.3725, "weight": 62, "...": null } ]
}
Every field of a place is always present, and null when
unknown — never absent, never an empty string. type and
subType are TerraMap classifications, not raw data-source tags.
Getting a key
- Create an account at console.terramap.at and verify the emailed code.
- Open API keys and create one, naming the APIs it may call and the origins, IPs or apps allowed to use it.
- Copy the key. The full value is shown once and cannot be retrieved afterwards.
Accounts, keys, two-factor authentication, credits, usage and billing all live in the console. They are not part of this reference: they are how you administer TerraMap, not something an application integrates against.
Interactive reference
All 8 service operations, with schemas and a request runner.
OpenAPI document
Generate a client, or load it into your own tooling.
JavaScript SDK
new TerraMap.Map(…), search and markers included.
Hosts
- REST API
- api.terramap.at
- Map delivery
- tiles.terramap.at — styles, tiles and sprites, used through the SDK
- Console
- console.terramap.at
- Status
- status.terramap.at
Coverage is Austria. Place search and reverse geocoding answer for Austrian data only; a coordinate outside it returns an empty list, not an error.