Zur App
Dokumentation

um8 Docs

Anleitungen für den Team-Bereich, die Anbindung an eure Website und die öffentliche API. Die vollständige technische Dokumentation (Betriebshandbuch, API-Vertrag, AVV, TOM) erhalten Pilotbetriebe mit dem Vertrag.

Erste Schritte

Nach der Einladung meldet ihr euch unter app.um-8.de an. Inhaber und Administratoren richten vor dem ersten Zugriff auf Betriebsdaten die Zwei-Faktor-Anmeldung ein (Authenticator-App empfohlen).

  1. Standort prüfen. Einstellungen → Betrieb & Team: Name, Adresse, Zeitzone, Kontakt für Gäste, Logo und Akzentfarbe. Logo und Farbe erscheinen auf der Buchungsseite und in Gastmails.
  2. Öffnungszeiten. Reguläre Zeiten je Wochentag, auch über Mitternacht. Abweichungen (Feiertage, Veranstaltungen) als Sonderzeiten.
  3. Tische anlegen. Bereiche (z. B. Innen, Terrasse) und Tische mit Plätzen. Verfügbarkeit berechnet sich aus vollständig freien Tischen; teilbelegte Tische zählen nicht.
  4. Angebote einrichten. Je Angebot: Art (Tisch, Exklusiv, Event), Personen von/bis, Dauer, Raster, Vorlauf, Horizont, Puffer, Bestätigungstext. Erst öffentlich geschaltete Angebote erscheinen im Formular.
  5. Texte und Datenschutz. Standardtexte sind in Du-Ansprache (DE/EN) vorbelegt. Tragt eure Datenschutz- und Impressumsadresse ein; die Version des Datenschutzhinweises wird mit jeder Anfrage gespeichert.
  6. Online-Anfragen einschalten. Einstellungen → Website & Export: „Online-Anfragen einschalten“. Ab jetzt ist eure Buchungsseite unter https://app.um-8.de/b/{slug} erreichbar.

Im Alltag

Anfragen bearbeiten

Neue Anfragen erscheinen unter „Anfragen“ mit Zeitraum, Personen, Anlass und den für den Zeitraum freien Tischen. Ihr könnt zusagen (mit Tischwahl, auch mehrere Tische), eine Alternative vorschlagen (anderer Termin oder andere Personenzahl; der Gast stimmt per Link zu oder lehnt ab) oder absagen (mit wählbarem Grund, der dem Gast nie als Sperrgrund gezeigt wird). Bleibt eine Anfrage länger offen, erinnert um8 das Team; kurz vor dem Termin dringend.

Heute-Ansicht

Tagesliste mit allen Zusagen, Zeitleiste je Tisch, Schnellaktionen: Walk-in erfassen, „Tisch frei“ (Gast gegangen oder nicht erschienen, Kapazität sofort wieder frei), Tischwechsel. Auf dem Handy ersetzt eine Liste die breite Zeitleiste.

Sperren und Sonderzeiten

Einzelne Tische oder die ganze Bar für einen Zeitraum sperren (Reparatur, Privatfeier). Sperren belegen Kapazität wie Zusagen. Online-Anfragen lassen sich jederzeit pausieren; Gäste sehen dann eure eigene Nachricht statt des Formulars.

Warteliste

Ist ein Zeitraum voll, können sich Gäste eintragen. Wird etwas frei, bietet ihr den Platz an; der Gast bekommt einen zeitlich begrenzten Link und bestätigt. Keine Antwort heißt: Platz geht an den Nächsten.

Team

Rollen: Inhaber (genau einer je Betrieb), Administrator, Mitarbeit, Nur-Lesen. Einladung per Link, Entzug jederzeit. Jedes Mitglied sieht aktive Sitzungen und Geräte und kann andere Geräte abmelden.

Export, Auskunft, Löschung

Inhaber und Administratoren exportieren Reservierungen eines Zeitraums (bis 366 Tage) als CSV, ohne interne Notizen, mit Passwortbestätigung. Auskunft und vorzeitige Löschung je Gästeadresse starten aus dem Team-Bereich und erzeugen einen Nachweis.

Was Gäste sehen

Das Formular zeigt Angebot, Personen, Termin und Kontaktfelder. Verfügbarkeit erscheint nur abgeleitet („frei“ / „nicht verfügbar“), nie Tischnamen, Belegungszahlen oder interne Gründe. Nach dem Absenden heißt es „Anfrage eingegangen“. Nach eurer Entscheidung erhält der Gast eine Mail mit Gastlink: Reservierung ansehen, bei erlaubter Selbststornierung stornieren, Änderung anfragen, Kalenderdatei laden. Der Link enthält das Geheimnis nur im URL-Fragment und öffnet eine kurze Sitzung; Gastkonten gibt es nicht.

Anbindung an eure Website

WegAdresseWas ihr tun müsst
Direktlink (empfohlen)https://app.um-8.de/b/{slug}Link oder Knopf „Tisch anfragen“ setzen
Widgethttps://app.um-8.de/widget.jsSkript und Knopf einbauen (Einstellungen → Website einbinden liefert den fertigen Code)
iframehttps://app.um-8.de/embed/{slug}Eure Domain als erlaubte Website registrieren, iframe plus Höhen-Skript einbauen
Server-Integration/api/v1/public/locations/{slug}/…Integrationsschlüssel erzeugen, eigener Server-Proxy, eigene Oberfläche

{slug} ist der öffentliche Name eures Standorts (Einstellungen → Website & Export). Voraussetzung für alle Wege: Online-Anfragen sind eingeschaltet und mindestens ein Angebot ist öffentlich.

Widget

<div data-mitgedacht="eure-bar" data-kind="table" data-theme="auto" data-load="click"
     data-privacy-url="https://eure-bar.de/datenschutz"></div>
<script src="https://app.um-8.de/widget.js" async></script>

Das Widget zeigt das Formular an der Stelle des div und nutzt intern den iframe. Mit data-load="click" (Standard) wird erst nach Klick geladen; vorher verlässt keine Anfrage den Browser eurer Gäste. Weitere Attribute: data-offer (nur ein Angebot), data-lang (de, en, browser), data-height, data-button. Den fertigen Code mit euren Werten liefert Einstellungen → Website einbinden; dort tragt ihr auch die erlaubten Websites ein (höchstens fünf, nur https).

iframe von Hand

<iframe src="https://app.um-8.de/embed/eure-bar" title="Tisch anfragen"
  style="width:100%;border:0" loading="lazy"></iframe>

Die Einbettung ist nur von registrierten Websites erlaubt (Content-Security-Policy frame-ancestors). Ein kleines Eltern-Skript passt die Höhe über postMessage an; den Code liefert der Team-Bereich.

Server-Integration

Für eine komplett eigene Oberfläche ruft euer Server die öffentliche API auf. So spricht der Browser eurer Gäste ausschließlich mit eurer Domain.

  1. Integrationsschlüssel erzeugen: Einstellungen → Betrieb & Team → Erweitert → Technik-Zugang. Der Schlüssel wird einmal angezeigt und gehört nur auf den Server.
  2. Jede Anfrage mit Authorization: Bearer <schlüssel> und X-Client-IP: <IP des Besuchers> senden. Nur so gelten Rate-Limits je Besucher statt je Proxy.
  3. Schreibbefehle mit Idempotency-Key (UUID) senden; bei Zeitüberschreitung mit demselben Schlüssel wiederholen.
  4. privacy_notice_version aus GET /locations/{slug} mitsenden; ändert sich der Hinweis, antwortet die API mit privacy_notice_changed.

API v1 (öffentlich)

Basis: https://app.um-8.de/api/v1/public. Antworten sind JSON; Zeiten in der Zeitzone des Standorts mit Offset. Öffentliche Antworten enthalten nie Tischnamen, IDs anderer Vorgänge, Belegungszahlen oder Namen.

EndpunktZweck
GET /locations/{slug}Standort, Angebote, Formularregeln, Logo, Akzentfarbe, Datenschutz-Version, Kontakt
GET /locations/{slug}/availability?service_id=&party_size=&date=Abgeleitete Verfügbarkeit je Startzeit für einen Betriebstag
GET /locations/{slug}/calendar?service_id=&party_size=&from=&to=Tagesübersicht für bis zu 31 Tage (frei / nicht verfügbar)
POST /locations/{slug}/requestsAnfrage anlegen (Angebot, Beginn, Personen, Kontakt, Anlass, Nachricht, Datenschutz-Version). Antwort: minimale Quittung mit Referenz
curl -X POST https://app.um-8.de/api/v1/public/locations/eure-bar/requests \
  -H "Authorization: Bearer $UM8_KEY" \
  -H "X-Client-IP: 203.0.113.7" \
  -H "Idempotency-Key: 6f1c…" \
  -H "Content-Type: application/json" \
  -d '{"service_id":"…","starts_at":"2026-11-07T19:00:00+01:00","party_size":4,
       "name":"…","email":"…","phone":"…","message":"","locale":"de",
       "privacy_notice_version":3,"website":""}'

website ist ein Honigtopf-Feld und bleibt leer. Die vollständige Referenz (Felder, Grenzen, Gastlink-Endpunkte, Team-API) ist Teil des API-Vertrags v1 und wird Integrationspartnern bereitgestellt.

Fehlercodes

CodeBedeutung
validation_failedEingaben fehlerhaft; errors nennt die Felder
slot_unavailableZeitraum nicht verfügbar (Verfügbarkeit erneut laden)
lead_time, horizonZu kurzfristig bzw. zu weit in der Zukunft für dieses Angebot
outside_opening_hours, opening_hours_unknownAußerhalb der Öffnungszeiten bzw. Tag noch nicht gepflegt
invalid_start_timeBeginn nicht im Raster des Angebots
bookings_pausedOnline-Anfragen pausiert; Nachricht des Betriebs anzeigen
privacy_notice_changedDatenschutzhinweis hat sich geändert; neu anzeigen und Version mitsenden
rate_limitedZu viele Anfragen; Retry-After beachten
invalid_integration_keyIntegrationsschlüssel fehlt, ungültig oder widerrufen (401)

Datenschutz & Verträge

  • Rollen. Der Betrieb ist Verantwortlicher für seine Gästedaten, mITgedacht Auftragsverarbeiter. Grundlage ist ein Auftragsverarbeitungsvertrag (AVV) mit technischen und organisatorischen Maßnahmen (TOM); beide gehören zum Vertragspaket.
  • Hosting. Server in der EU, Verarbeitung ausschließlich im Europäischen Wirtschaftsraum. Mailversand über ein eigenes Postfach des Betriebs oder der Plattform, ohne Werbe-Tracking.
  • Speicherdauer. Kontaktdaten und Freitexte einer Reservierung werden 90 Tage nach dem Termin gelöscht; Sicherungskopien nach 28 Tagen. Gesetzliche Aufbewahrungspflichten bleiben unberührt.
  • Gastseiten. Keine Cookies außer der kurzen Gastsitzung nach Gastlink, keine externen Schriften, keine Tracker, keine Einbindung Dritter.
  • Textbausteine. Für eure Datenschutzerklärung stellen wir fertige Absätze bereit (Reservierung, Gastlink, Warteliste, Speicherdauer, Betroffenenrechte).

Sicherheit

  • Strikte Trennung der Betriebe serverseitig: Zugriff nur mit Anmeldung und aktiver Mitgliedschaft; fremde Objekte sind nicht auffindbar.
  • Zwei-Faktor-Anmeldung, Geräteverwaltung, Abmelden aus der Ferne, Passwortbestätigung für sensible Aktionen.
  • Doppelbelegungen werden auf Datenbankebene ausgeschlossen; jede belegungsändernde Aktion ist atomar, idempotent und protokolliert.
  • Keine Geheimnisse oder Gästedaten in Logs; Gastlinks tragen Token nur im URL-Fragment.
  • Sicherung alle 30 Minuten, Wiederherstellung geprobt, Notbetriebsanleitung für Betriebe.

Support

Pilotbetriebe erreichen uns unter info@um-8.de. Störungen am Abend: die im Vertrag genannte Rufnummer. Für Ausfälle gibt es eine Notbetriebsanleitung (Anfragen per Telefon annehmen, später nachtragen).