Apps: Zugriff auf die installierte Erweiterung

Wie eine installierte App ihre Metadaten, Manifest und Abrechnung liest; nur die App-Installation darf diese Route aufrufen.

Für Entwickler

Diese Route dient der installierten App, nicht einem Nutzer oder Personal-Schlüssel. Aufrufe erfolgen mit App-Identität (appIdentityOnly) — keine zusätzlichen Modul- oder `PERSONAL`-Rechte sind anwendbar.

Die Route

GET/api/v1/app

Metadaten der installierten App, Version, Manifest, gültige Scopes und aktuelle Abrechnungsdaten lesen

Rechte

Keine — jeder gültige Schlüssel darf das.

Kopfzeilen

NameTypBedeutung
AuthorizationBearer-Token der AppApp-Token; gehört zur App-Installation und bestimmt die zugehörige Installation/Restaurant

Mögliche Fehler

  • forbiddenDie Anfrage fehlt die App-Identität oder die Extension ist gesperrt
  • Antwort enthält `app` (öffentliche Felder der Extension), `installation` (id, restaurantId, versionId, generation, status, accessMode), `version` (id, version, manifestHash), `manifest`, `scopes` sowie `billing` (vereinbarte Preis/Periodenfelder).
  • Die Route ist app-only: `rechte: []` steht bewusst leer — die Autorisierung erfolgt über die App-Identität und nicht über modulare `modul:op`-Rechte.

Codebeispiele

curl — Metadaten der installierten App
curl
curl -sS https://tactictable.com/api/v1/app \
  -H "Authorization: Bearer tt_live_if3u5vp6maf67xmw_PT1xP8EQF7reKUtLcZ7v9z5qaRKmoxeHmd27JpaDvfM" \
  -H "Accept: application/json"
Die App ruft diese Route serverseitig mit ihrem App-Token auf. Nie Tokens in der URL übergeben.
Antwort 200 — GET /api/v1/app
JSON
{    "installation": {        "id": "1b26d199-7099-57e0-b127-6c2b75887de5",        "restaurantId": "35122c8e-d842-5b49-814c-0e8f2aaed157",        "versionId": "17997a5f-0bd2-5a6f-add0-3bd1f46f8657",        "generation": 3,        "status": "ACTIVE",        "accessMode": "OFFLINE"    },    "scopes": ["menu:read"],    "billing": null}
Gekürzter Antwortausschnitt. Zusätzlich kommen app, version und manifest; ein Vertrag enthält currentPeriodStart/currentPeriodEnd. Es gibt keinen data-Umschlag.
TypeScript — fetch (Server, Node)
TypeScript
const token = process.env.TACTICTABLE_TOKEN ?? '' const resp = await fetch('https://tactictable.com/api/v1/app', {    headers: {        Authorization: 'Bearer ' + token,        Accept: 'application/json',    },}) const body = await resp.json()if (!resp.ok) throw new Error(body.error + ': ' + body.message + ' [' + body.requestId + ']') console.log(body.app.name, body.installation.status)
Serverseitiger Aufruf: lesen Sie das Token aus `process.env.TACTICTABLE_TOKEN` und nicht aus einer Umgebungsvariablen im Browser.
Python — requests (Server)
Python
import osimport requests token = os.environ['TACTICTABLE_TOKEN']r = requests.get(    'https://tactictable.com/api/v1/app',    headers={'Authorization': 'Bearer ' + token, 'Accept': 'application/json'},    timeout=15,)body = r.json()if r.status_code != 200:    raise SystemExit(f"{body.get('error')}: {body.get('message')} [{body.get('requestId')}]") print(body['app']['name'], body['installation']['status'])
Timeout setzen, Antwort prüfen und die `requestId` im Fehlerfall loggen.