Interlaken
Requests and responses

Availability zones

Each zone is its own deployment with its own API. What that means for your code.

An availability zone is a full, independent deployment: its own hardware, its own control plane, its own database, its own API host. Zones are not shards of one system, and there is no global endpoint that fans out across them.

The practical rule: a resource lives in exactly one zone, and you talk to that zone's API to reach it. A VM created in one zone is not listed, not fetchable and not deletable through another. That is also why a 404 is worth checking against your base URL before you check against your id.

There is deliberately no api.interlaken.ai sitting in front of the zones. Nothing routes between them, so a request can only ever mean the zone it was addressed to.

Finding the zones

The catalogue is a static file, published at interlaken.ai/zones.json and read at boot by the console and by every orchestrator. It is the same file for everyone, so read it rather than keeping your own list:

{
  "regions": [
    { "id": "eu-par", "city": "Paris", "country": "France", "flag": "🇫🇷" }
  ],
  "zones": [
    { "id": "eu-par-1", "region": "eu-par", "api": "https://api.eu-par-1.interlaken.ai", "status": "active" }
  ]
}

A region is a metro, which is what a customer picks. A zone is a failure domain inside it and a wholly separate deployment: two zones in the same city share the city and nothing else. status is active, maintenance or offline; skip offline zones, and expect writes to be refused in a zone under maintenance.

Hosts follow https://api.<zone>.interlaken.ai, but take the api field rather than building the string yourself, so a zone that is ever hosted differently still works.

Asking which zone answered

curl -s https://api.eu-par-1.interlaken.ai/api/v1/zone \
  -H "Authorization: Bearer $TOKEN"
{
  "self": { "id": "eu-par-1", "api": "https://api.eu-par-1.interlaken.ai", "region": "eu-par", "status": "active" },
  "zones": [  ],
  "maintenance": false,
  "standalone": false,
  "from_cache": false
}

self is the zone that answered, which is the useful half when a request has gone somewhere you did not expect. standalone marks a deployment with no catalogue to consult, the normal state of a development instance. from_cache says the zone is serving its last good copy of the catalogue rather than a fresh fetch.

Identity is shared, resources are not

Your account and your tenant exist across zones: IAM is replicated, so the same credentials sign in everywhere and a browser remembered in one zone is remembered in the others. Revoking a token ends it everywhere.

But a workspace has to be switched on in a zone before it can hold anything there, with POST /api/v1/tenants/{id}/zones. Until then, that zone's API will authenticate you and then find nothing.

API clients follow the same rule as everything else: the credential is valid in any zone, and the resources it can see differ per zone.

Writing against several zones

Keep the zone as configuration, not as a constant. The three things that vary are the base URL, the zone id you label your own records with, and nothing else: the routes, the permission keys and the token format are identical everywhere.

The interlaken CLI models this with profiles, one per zone, each holding its own API client. interlaken whoami says which profile and zone you are pointed at, which is worth checking before anything destructive. See The interlaken CLI.

On this page