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).
- 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.
- Öffnungszeiten. Reguläre Zeiten je Wochentag, auch über Mitternacht. Abweichungen (Feiertage, Veranstaltungen) als Sonderzeiten.
- 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.
- 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.
- 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.
- 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
| Weg | Adresse | Was ihr tun müsst |
|---|---|---|
| Direktlink (empfohlen) | https://app.um-8.de/b/{slug} | Link oder Knopf „Tisch anfragen“ setzen |
| Widget | https://app.um-8.de/widget.js | Skript und Knopf einbauen (Einstellungen → Website einbinden liefert den fertigen Code) |
| iframe | https://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.
- Integrationsschlüssel erzeugen: Einstellungen → Betrieb & Team → Erweitert → Technik-Zugang. Der Schlüssel wird einmal angezeigt und gehört nur auf den Server.
- Jede Anfrage mit
Authorization: Bearer <schlüssel>undX-Client-IP: <IP des Besuchers>senden. Nur so gelten Rate-Limits je Besucher statt je Proxy. - Schreibbefehle mit
Idempotency-Key(UUID) senden; bei Zeitüberschreitung mit demselben Schlüssel wiederholen. privacy_notice_versionausGET /locations/{slug}mitsenden; ändert sich der Hinweis, antwortet die API mitprivacy_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.
| Endpunkt | Zweck |
|---|---|
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}/requests | Anfrage 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
| Code | Bedeutung |
|---|---|
validation_failed | Eingaben fehlerhaft; errors nennt die Felder |
slot_unavailable | Zeitraum nicht verfügbar (Verfügbarkeit erneut laden) |
lead_time, horizon | Zu kurzfristig bzw. zu weit in der Zukunft für dieses Angebot |
outside_opening_hours, opening_hours_unknown | Außerhalb der Öffnungszeiten bzw. Tag noch nicht gepflegt |
invalid_start_time | Beginn nicht im Raster des Angebots |
bookings_paused | Online-Anfragen pausiert; Nachricht des Betriebs anzeigen |
privacy_notice_changed | Datenschutzhinweis hat sich geändert; neu anzeigen und Version mitsenden |
rate_limited | Zu viele Anfragen; Retry-After beachten |
invalid_integration_key | Integrationsschlü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).