API und SDKs

API und SDKs

Baue Atli in deine eigene App oder Website ein, auf deinen eigenen Bildschirmen.

Atli eSIM API

v1.0.0

Buy and manage travel eSIMs: browse the catalogue, quote and buy a plan, install and track an eSIM, share one as a gift, and run a group account.

Paths are unversioned and the version of this document is in info.version, as on heyatli.com's published API. A breaking change will arrive under a new base URL rather than by changing what a path here means.

Basis-URL
https://api.heyatli.com
OpenAPI-Datei
https://api.heyatli.com/openapi.yaml

Wichtigste Abläufe

Die wichtigsten Abläufe der APIEin Nutzer wird angelegt, bekommt ein Angebot, kauft und bezahlt, erhält die eSIM, installiert sie und verfolgt den Verbrauch. Optionale Zweige: ein echtes Konto, eine Karte speichern, eine Gruppenkarte, Aufladen, Rabatte und Kaufen zum Teilen, dann einen Link teilen, über den jemand die eSIM abholt.
Nutzer anlegenPOST /login
Angebot abrufenPOST /plan/quote
Kaufen und bezahlenPOST /plan/purchase
eSIM erhaltenGET /fulfillment/…
InstallierenGET /esims
Verbrauch verfolgenPOST /esims/{id}/sync
Echtes KontoE-Mail, Telegram, WhatsApp
Karte speichernStripe SetupIntent
Gruppenkartegroup_id
Aufladentarget_esim_id
RabatteGutscheine, Guthaben, Empfehlung
Kaufen zum Teilenis_gift, max_claims
Link teilenGET /public/gifts/{code}
AbholenBraucht eventuell ein echtes Konto
HauptablaufOptional

Wähle auf der Karte einen Ablauf, um seine Schritte zu sehen.

SDKs

Erstelle aus unserer OpenAPI-Datei einen fertigen Client für deine Sprache.

docker run --rm -v "$PWD:/out" \
  openapitools/openapi-generator-cli generate \
  -i https://api.heyatli.com/openapi.yaml \
  -g typescript-fetch -o /out/atli-sdk

Authentication

Most routes need a bearer token, issued by signing in through /login, /register or one of the /oauth/* flows, and refreshed at /refresh. Each operation states whether a token is required, read when sent, or ignored. Tokens identify a person, not an application; there is no application API key yet.

Enums

A field with a listed set of values may gain new ones: that ships as a minor version, never a new base URL. Treat a value you do not recognise as one you do not handle yet, not as invalid, and never let it fail parsing.

Errors

Every failed request answers with the same body: a stable code, an English message, a trace_id to quote when reporting a problem, and sometimes params. Branch on code and never on message.

Häufige Fehlercodes ansehen
400

Die Anfrage ist ungültig

401

Die Anmeldung fehlt oder ist abgelaufen

402

Die Zahlung ist fehlgeschlagen

403

Dieser Nutzer darf das nicht

404

Das gibt es nicht, oder es gehört ihm nicht

429

Zu viele Anfragen: warte die Zeit aus Retry-After ab

500

Bei uns ist etwas schiefgelaufen

Rate limits

Sign-in, registration, token refresh, email codes, voucher redemption, quotes, reviews and eSIM sync are throttled per caller. A refused request answers 429 with Retry-After in whole seconds, alongside X-RateLimit-Limit, X-RateLimit-Remaining and X-RateLimit-Reset. Wait out Retry-After rather than retrying in a loop.

Language and currency

Send X-Locale (or Accept-Language, or ?lang=) to choose the language; the language answered in comes back as Content-Language, falling back to English. Prices follow the signed-in person's currency, or the currency a quote asks for.

Buying a plan

Quote first at /plan/quote, then pass the quote_id to /plan/purchase so the price you showed is the price charged. Send an idempotency_key on every purchase: the same key never buys twice.