TerraMap docs.terramap.at

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.

EndpointStatus
GET /api/v1/searchLivePlace search across Austria
GET /api/v1/geocode/reverseLiveCoordinate → nearest place
POST /api/v1/routesMockRouting
POST /api/v1/matrixMockDistance/duration matrix
POST /api/v1/optimization/tspMockTravelling salesman
POST /api/v1/optimization/vrpMockVehicle routing
POST /api/v1/snap-to-roadMockSnap to road
POST /api/v1/navigation/sessionMockNavigation

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

  1. Create an account at console.terramap.at and verify the emailed code.
  2. Open API keys and create one, naming the APIs it may call and the origins, IPs or apps allowed to use it.
  3. 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.

Open the reference →

OpenAPI document
Generate a client, or load it into your own tooling.

openapi.json →

JavaScript SDK
new TerraMap.Map(…), search and markers included.

Developer overview →

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.