# Info

Read coverage, profiles, data date and what this deployment offers.

`GET /v2/info`. Auth: API key or our website.

## Example

```bash
curl -s -H "X-API-Key: $QUADRUPER_KEY" https://quadruper.com/v2/info
```

This is an example response:

```json schema=info-response
{
  "contract_version": "2.0",
  "coverage": { "bbox": [116.9, 4.5, 126.6, 21.2] },
  "routing": {
    "engine": "graphhopper", "version": "11.0",
    "profiles": [{ "name": "car", "approximate": false }, { "name": "car_night", "approximate": false }]
  },
  "geocoding": { "engine": "photon", "version": "1.3.0" },
  "sources": [{ "source": "osm", "data_date": "2026-10-18" }],
  "capabilities": {
    "route": { "max_points": 10, "steps": true },
    "nearest": {},
    "isochrone": { "max_values": 3, "max_time_s": 1800, "step_s": 60 },
    "matrix": { "max_cells": 25 },
    "geocode": { "max_limit": 10, "structured": true, "near": true, "near_text": true, "bbox": true },
    "reverse": {}
  },
  "attribution": [{ "source": "osm", "text": "© OpenStreetMap contributors", "license": "ODbL-1.0" }]
}
```

## Response fields

| Field | Description |
|---|---|
| `coverage.bbox` | A rough box around the data, which can be much larger than the area really covered. Long ferry routes stretch it. Treat it as a coarse check. Whether a route succeeds is the real test. |
| `routing.profiles[].approximate` | `true` when the engine can only approximate that profile. Don't present a `car_night` ETA as different from `car` when it's marked approximate. |
| `sources[].data_date` | The date of the map data, or `null` when the engine can't report one. |
| `capabilities` | A capability appears only if its endpoint works. If one is missing, its endpoint answers `501 capability_unavailable`. |

The service refreshes this information every 10 minutes. Until its first successful fetch, it answers `503 engine_unavailable`.
