Zum Hauptinhalt springen

OpenEOS API (1.0)

Download OpenAPI specification:Download

OpenEOS ist ein Kassen- und Bestellsystem für Vereinsfeste. Diese Referenz beschreibt die REST-API unter https://api.openeos.de/api (selbst gehostet: https://<deine-api>/api).

Zugang mit API-Token

Für Skripte, Automatisierungen (z. B. Zapier) und KI-Agenten gibt es API-Tokens je Organisation. Dieselben Tokens öffnen den MCP-Server unter https://api.openeos.de/mcp (Streamable HTTP, außerhalb von /api) für Claude, Cursor und eigene Agenten — die Werkzeuge dort folgen denselben Scopes. Ein Token wirkt wie die Person, die ihn ausgestellt hat — beschränkt auf eine Organisation, auf die gewählten Scopes und auf die hier mit API-token markierten Endpunkte. Alles andere (Kasse, Zahlungen, Mitglieder, Abrechnung, Löschen, Freischaltung) bleibt der Anmeldung in der App vorbehalten.

Token anlegen: In der Web-App unter Einstellungen → Organisation → Zugänge (Organisations-Admin) oder per POST /api/organizations/{organizationId}/api-tokens mit einer angemeldeten Sitzung. Der Token (oeos_…) wird genau einmal angezeigt; gespeichert wird nur ein Hash. Höchstens 20 aktive Tokens je Organisation.

Verwenden: Authorization: Bearer oeos_… — derselbe Header wie für Sitzungs-JWTs. Welche Organisation gemeint ist, steht im Pfad; ein Token erreicht nur seine eigene (sonst 403 API_TOKEN_WRONG_ORGANIZATION).

Scopes

Scope Erlaubt
read Organisation, Veranstaltungen, Kategorien, Produkte, Pfandarten, Tische, Stationen, Bon-Vorlagen, Drucker, Schichtpläne, Geräte, Berichte und Bestellungen lesen
catalog:write Kategorien, Produkte und Pfandarten anlegen und ändern
events:write Veranstaltungen und Produktionsstationen anlegen und ändern (keine Freischaltung)
tables:write Bereiche, Tische und Tischplan bearbeiten
staff:write Schichtpläne, Jobs, Schichten und Helfer-Anmeldungen bearbeiten
devices:write Bon-Vorlagen anlegen und ändern
settings:write Organisationseinstellungen ändern

Schreib-Scopes schließen read nicht ein. Jeder Endpunkt nennt den nötigen Scope als x-api-token-scope; fehlt er am Token, antwortet die API mit 403 API_TOKEN_SCOPE_MISSING, bei nicht freigegebenen Endpunkten mit 403 API_TOKEN_NOT_ALLOWED.

Grenzen

Je Token:

  • 120 Aufrufe je Minute
  • 5000 Aufrufe je Tag

Darüber hinaus 429 API_TOKEN_RATE_LIMITED mit Retry-After. Zusätzlich gilt die allgemeine Grenze je IP-Adresse.

Fehler

Jede Fehlerantwort hat die Form { "error": { "code", "reason", "message", "params", "details", "requestId", "timestamp" } }. code ist die allgemeine Klasse (FORBIDDEN, NOT_FOUND, …), reason der konkrete Fall (API_TOKEN_SCOPE_MISSING, EVENT_NOT_FOUND, …).

Was diese Referenz zeigt

Nur die Endpunkte, die ein API-Token erreichen kann, plus die Verwaltung der Tokens selbst (nur mit Anmeldung). Alle anderen Teile der API — Anmeldung und Sitzungen der Web-App, Kasse und Geräte-API (/api/device-api/*), Zahlungen, Mitglieder, Abrechnung, Admin — sind absichtlich nicht dokumentiert: Sie sind für die Apps von OpenEOS gedacht und keine stabile Schnittstelle für Integrationen. Wer OpenEOS selbst betreibt, findet die vollständige Beschreibung im Repository (docs/openapi.json) und außerhalb der Produktion unter /docs.

Zu jedem Endpunkt steht der nötige Scope (x-api-token-scope). Die Texte sind auf Deutsch; die Referenz ist für beide Sprachen der Doku-Seite dieselbe.

Organisation

Stammdaten und Einstellungen deiner Organisation

Organisation abrufen

Liefert Stammdaten, Einstellungen und freigeschaltete Module der Organisation. Scope read; ein Token sieht nur seine eigene Organisation.

Authorizations:
JWT-authAPI-token
path Parameters
id
required
string <uuid>

ID der Organisation

Responses

Organisation ändern

Ändert Name, Kontaktdaten oder Einstellungen (z. B. bargeldloser Modus). Scope settings:write, nur für Administratoren; geänderte Einstellungen gehen sofort an die Kassen.

Authorizations:
JWT-authAPI-token
path Parameters
id
required
string <uuid>

ID der Organisation

Request Body schema: application/json
required
name
string

Name der Organisation

logoUrl
string

URL des Organisationslogos

settings
object

Organisationseinstellungen

isActive
boolean

Gibt an, ob die Organisation aktiv ist

Responses

Request samples

Content type
application/json
{
  • "name": "Musterverein e.V.",
  • "settings": {
    },
  • "isActive": true
}

Veranstaltungen

Veranstaltungen anlegen, ändern und lesen. Freischalten und aktivieren geht nur in der App.

Veranstaltungen auflisten

Alle Veranstaltungen der Organisation, neueste zuerst, seitenweise (page, limit). Scope read.

Authorizations:
JWT-authAPI-token
path Parameters
organizationId
required
string <uuid>

ID der Organisation

query Parameters
page
number >= 1
Default: 1
Example: page=1

Seite, beginnend bei 1

limit
number [ 1 .. 500 ]
Default: 20
Example: limit=20

Einträge je Seite (höchstens 500)

Responses

Response Schema: application/json
data
Array of objects
object

Seitenangaben

Response samples

Content type
application/json
{
  • "data": [
    ],
  • "meta": {
    }
}

Veranstaltung anlegen

Legt eine neue Veranstaltung mit Status inactive an. Scope events:write und Modulrecht Veranstaltungen; freischalten und aktivieren geht nur in der App.

Authorizations:
JWT-authAPI-token
path Parameters
organizationId
required
string <uuid>

ID der Organisation

Request Body schema: application/json
required
name
required
string

Name des Events

startDate
required
string

Beginn der Veranstaltung. Pflichtangabe — der Preis und die Shop-Öffnungszeiten leiten sich davon ab.

description
string

Beschreibung des Events

endDate
string

Ende der Veranstaltung. Ohne Angabe endet sie am Starttag. Darf über Mitternacht hinausgehen.

settings
object

Event-Einstellungen

Responses

Request samples

Content type
application/json
{
  • "name": "Sommerfest 2024",
  • "description": "Jährliches Sommerfest mit Livemusik und Buffet",
  • "startDate": "2024-07-15T10:00:00.000Z",
  • "endDate": "2024-07-16T02:00:00.000Z",
  • "settings": {
    }
}

Aktive Veranstaltung abrufen

Liefert die Veranstaltung mit Status active oder test — oder data: null, wenn gerade keine läuft. Scope read.

Authorizations:
JWT-authAPI-token
path Parameters
organizationId
required
string <uuid>

ID der Organisation

Responses

Veranstaltung abrufen

Eine Veranstaltung mit Einstellungen und Abrechnungsstand. Scope read.

Authorizations:
JWT-authAPI-token
path Parameters
organizationId
required
string <uuid>

ID der Organisation

eventId
required
string <uuid>

ID der Veranstaltung

Responses

Veranstaltung ändern

Ändert Name, Beschreibung, Zeitraum oder Einstellungen. Scope events:write; der Status (aktiv, Test) lässt sich hier nicht setzen.

Authorizations:
JWT-authAPI-token
path Parameters
organizationId
required
string <uuid>

ID der Organisation

eventId
required
string <uuid>

ID der Veranstaltung

Request Body schema: application/json
required
name
string

Name des Events

description
string

Beschreibung des Events

startDate
string

Startdatum und -zeit des Events

endDate
string

Enddatum und -zeit des Events

settings
object

Event-Einstellungen

Responses

Request samples

Content type
application/json
{
  • "name": "Sommerfest 2024",
  • "description": "Jährliches Sommerfest mit Livemusik und Buffet",
  • "startDate": "2024-07-15T10:00:00.000Z",
  • "endDate": "2024-07-15T22:00:00.000Z",
  • "settings": {
    }
}

Katalog aus anderer Veranstaltung kopieren

Kopiert Kategorien und Produkte aus sourceEventId in diese Veranstaltung; was übernommen wird, steuert der Body. Scope events:write.

Authorizations:
JWT-authAPI-token
path Parameters
organizationId
required
string <uuid>

ID der Organisation

eventId
required
string <uuid>

ID der Ziel-Veranstaltung

sourceEventId
required
string <uuid>

ID der Veranstaltung, aus der kopiert wird

Request Body schema: application/json
required
categoryIds
Array of strings

IDs der zu kopierenden Kategorien. Wenn leer, werden alle Kategorien kopiert.

productIds
Array of strings

IDs der zu kopierenden Produkte. Wenn leer und categoryIds leer, werden alle Produkte kopiert.

copyStock
boolean

Wenn true, wird auch der Bestand kopiert. Standard: false (Bestand wird auf 0 gesetzt)

Responses

Request samples

Content type
application/json
{
  • "categoryIds": [
    ],
  • "productIds": [
    ],
  • "copyStock": false
}

Kategorien

Kategorien je Veranstaltung

Kategorien auflisten (je Veranstaltung)

Alle Kategorien der Veranstaltung in ihrer Sortierreihenfolge, ohne Seitenwechsel. Scope read.

Authorizations:
JWT-authAPI-token
path Parameters
eventId
required
string <uuid>

ID der Veranstaltung

Responses

Kategorie anlegen

Legt eine Kategorie in der Veranstaltung an. Scope catalog:write und Modulrecht Produkte.

Authorizations:
JWT-authAPI-token
path Parameters
eventId
required
string <uuid>

ID der Veranstaltung

Request Body schema: application/json
required
name
required
string

Name der Kategorie

description
string

Beschreibung der Kategorie

parentId
string

ID der übergeordneten Kategorie

color
string

Farbcode der Kategorie (Hex-Format)

icon
string

Icon-Name für die Kategorie

sortOrder
number

Sortierreihenfolge

isActive
boolean

Gibt an, ob die Kategorie aktiv ist

printSettings
object

Druckeinstellungen für die Kategorie

productionStationId
string

ID des Produktionsstandorts

Responses

Request samples

Content type
application/json
{
  • "name": "Hauptgerichte",
  • "description": "Warme Hauptspeisen und Gerichte",
  • "parentId": "550e8400-e29b-41d4-a716-446655440000",
  • "color": "#FF5733",
  • "icon": "restaurant",
  • "sortOrder": 1,
  • "isActive": true,
  • "printSettings": {
    },
  • "productionStationId": "550e8400-e29b-41d4-a716-446655440000"
}

Kategorie abrufen

Eine Kategorie der Veranstaltung. Scope read.

Authorizations:
JWT-authAPI-token
path Parameters
eventId
required
string <uuid>

ID der Veranstaltung

categoryId
required
string <uuid>

ID der Kategorie

Responses

Kategorie ändern

Ändert Name, Farbe, Icon oder Sichtbarkeit einer Kategorie. Scope catalog:write.

Authorizations:
JWT-authAPI-token
path Parameters
eventId
required
string <uuid>

ID der Veranstaltung

categoryId
required
string <uuid>

ID der Kategorie

Request Body schema: application/json
required
name
string

Name der Kategorie

description
string

Beschreibung der Kategorie

parentId
object

ID der übergeordneten Kategorie

color
object

Farbcode der Kategorie (Hex-Format)

icon
object

Icon-Name für die Kategorie

sortOrder
number

Sortierreihenfolge

isActive
boolean

Gibt an, ob die Kategorie aktiv ist

printSettings
object

Druckeinstellungen für die Kategorie

productionStationId
object

ID des Produktionsstandorts

Responses

Request samples

Content type
application/json
{
  • "name": "Hauptgerichte",
  • "description": "Warme Hauptspeisen und Gerichte",
  • "parentId": "550e8400-e29b-41d4-a716-446655440000",
  • "color": "#FF5733",
  • "icon": "restaurant",
  • "sortOrder": 1,
  • "isActive": true,
  • "printSettings": {
    },
  • "productionStationId": "550e8400-e29b-41d4-a716-446655440000"
}

Kategorien sortieren

Setzt die Reihenfolge aller Kategorien anhand der übergebenen ID-Liste. Scope catalog:write.

Authorizations:
JWT-authAPI-token
path Parameters
eventId
required
string <uuid>

ID der Veranstaltung

Request Body schema: application/json
required
categoryIds
Array of strings

Sortierte Liste der Kategorie-IDs

Responses

Request samples

Content type
application/json
{
  • "categoryIds": [
    ]
}

Produkte

Produkte je Veranstaltung: Preis, Steuersatz, Optionen, Pfand, Bestand und Verfügbarkeit

Produkte auflisten (je Veranstaltung)

Alle Produkte der Veranstaltung mit Kategorie, sortiert nach Reihenfolge und Name, seitenweise (page, limit; Standard 50). Scope read.

Authorizations:
JWT-authAPI-token
path Parameters
eventId
required
string <uuid>

ID der Veranstaltung

query Parameters
page
number >= 1
Default: 1
Example: page=1

Seite, beginnend bei 1

limit
number [ 1 .. 500 ]
Default: 20
Example: limit=20

Einträge je Seite (höchstens 500)

Responses

Response Schema: application/json
data
Array of objects
object

Seitenangaben

Response samples

Content type
application/json
{
  • "data": [
    ],
  • "meta": {
    }
}

Produkt anlegen

Legt ein Produkt in einer Kategorie der Veranstaltung an: Preis, Steuersatz, Optionen, Pfandart, Station, Bestand. Scope catalog:write und Modulrecht Produkte.

Authorizations:
JWT-authAPI-token
path Parameters
eventId
required
string <uuid>

ID der Veranstaltung

Request Body schema: application/json
required
categoryId
required
string

ID der Kategorie

name
required
string

Name des Produkts

price
required
number

Verkaufspreis in Euro

description
string

Beschreibung des Produkts

taxRate
number

Umsatzsteuersatz in Prozent. 0 heißt steuerfrei.

imageUrl
string

URL des Produktbilds

icon
string

Icon: oe:<name> aus dem OpenEOS-Set (oder pos-icon:<id>/Emoji wie bisher)

isFavorite
boolean

Favorit: erscheint an der Kasse unter „Favoriten“

isActive
boolean

Gibt an, ob das Produkt aktiv ist

isAvailable
boolean

Gibt an, ob das Produkt verfügbar ist

trackInventory
boolean

Gibt an, ob der Lagerbestand verfolgt wird

stockQuantity
number

Anfänglicher Lagerbestand

stockUnit
string

Einheit für den Lagerbestand

options
object

Produktoptionen

printSettings
object

Druckeinstellungen

sortOrder
number

Sortierreihenfolge

productionStationId
string

ID des Produktionsstandorts (überschreibt Kategorie-Einstellung)

pfandTypeId
object

ID des Pfand-Typs (optional)

Responses

Request samples

Content type
application/json
{
  • "categoryId": "550e8400-e29b-41d4-a716-446655440000",
  • "name": "Wiener Schnitzel",
  • "description": "Paniertes Kalbsschnitzel mit Kartoffelsalat",
  • "price": 12.5,
  • "taxRate": 19,
  • "icon": "oe:beer",
  • "isFavorite": false,
  • "isActive": true,
  • "isAvailable": true,
  • "trackInventory": false,
  • "stockQuantity": 50,
  • "stockUnit": "Stück",
  • "options": {
    },
  • "printSettings": {
    },
  • "sortOrder": 1,
  • "productionStationId": "550e8400-e29b-41d4-a716-446655440000",
  • "pfandTypeId": "550e8400-e29b-41d4-a716-446655440000"
}

Produkte importieren (CSV)

Legt mehrere Produkte aus einer CSV-Liste in einem Aufruf an, fehlende Kategorien werden ergänzt; mit dryRun nur Vorschau. Scope catalog:write.

Authorizations:
JWT-authAPI-token
path Parameters
eventId
required
string <uuid>

ID der Veranstaltung

Request Body schema: application/json
required
csv
required
string

Roher CSV-Inhalt der Produktliste

mode
string
Default: "skip"
Enum: "skip" "update" "create"

Verhalten bei vorhandenen Produkten (gleicher Name + Kategorie): überspringen, aktualisieren oder immer neu anlegen

dryRun
boolean
Default: true

true = nur Vorschau berechnen, nichts speichern

Responses

Request samples

Content type
application/json
{
  • "csv": "string",
  • "mode": "skip",
  • "dryRun": true
}

Lagerbestand-Warnungen auflisten

Produkte mit Bestandsführung, deren Bestand die Warnschwelle (lowStockThreshold) erreicht oder unterschritten hat. Scope read.

Authorizations:
JWT-authAPI-token
path Parameters
eventId
required
string <uuid>

ID der Veranstaltung

Responses

Produkt abrufen

Ein Produkt der Veranstaltung mit allen Feldern. Scope read.

Authorizations:
JWT-authAPI-token
path Parameters
eventId
required
string <uuid>

ID der Veranstaltung

productId
required
string <uuid>

ID des Produkts

Responses

Produkt ändern

Ändert beliebige Felder eines Produkts; nicht genannte Felder bleiben. Scope catalog:write.

Authorizations:
JWT-authAPI-token
path Parameters
eventId
required
string <uuid>

ID der Veranstaltung

productId
required
string <uuid>

ID des Produkts

Request Body schema: application/json
required
categoryId
string

ID der Kategorie

name
string

Name des Produkts

description
object

Beschreibung des Produkts

price
number

Verkaufspreis in Euro

taxRate
number

Umsatzsteuersatz in Prozent. 0 heißt steuerfrei.

imageUrl
object

URL des Produktbilds

icon
object

Icon: oe:<name> aus dem OpenEOS-Set (oder pos-icon:<id>/Emoji wie bisher)

isFavorite
boolean

Favorit: erscheint an der Kasse unter „Favoriten“

isActive
boolean

Gibt an, ob das Produkt aktiv ist

isAvailable
boolean

Gibt an, ob das Produkt verfügbar ist

trackInventory
boolean

Gibt an, ob der Lagerbestand verfolgt wird

stockQuantity
number

Aktueller Lagerbestand

stockUnit
string

Einheit für den Lagerbestand

options
object

Produktoptionen

printSettings
object

Druckeinstellungen

sortOrder
number

Sortierreihenfolge

productionStationId
object

ID des Produktionsstandorts (überschreibt Kategorie-Einstellung)

pfandTypeId
object

ID des Pfand-Typs (optional)

Responses

Request samples

Content type
application/json
{
  • "categoryId": "550e8400-e29b-41d4-a716-446655440000",
  • "name": "Wiener Schnitzel",
  • "description": "Paniertes Kalbsschnitzel mit Kartoffelsalat",
  • "price": 12.5,
  • "taxRate": 19,
  • "icon": "oe:beer",
  • "isFavorite": false,
  • "isActive": true,
  • "isAvailable": true,
  • "trackInventory": true,
  • "stockQuantity": 50,
  • "stockUnit": "Stück",
  • "options": {
    },
  • "printSettings": {
    },
  • "sortOrder": 1,
  • "productionStationId": "550e8400-e29b-41d4-a716-446655440000",
  • "pfandTypeId": "550e8400-e29b-41d4-a716-446655440000"
}

Verfügbarkeit eines Produkts setzen

Markiert ein Produkt als verfügbar oder ausverkauft, ohne es zu deaktivieren; die Kassen übernehmen das sofort. Scope catalog:write.

Authorizations:
JWT-authAPI-token
path Parameters
eventId
required
string <uuid>

ID der Veranstaltung

productId
required
string <uuid>

ID des Produkts

Request Body schema: application/json
required
isAvailable
required
boolean

true = verfügbar, false = ausverkauft

Responses

Request samples

Content type
application/json
{
  • "isAvailable": false
}

Pfand

Pfandarten der Organisation (z. B. Glas, Becher)

Pfandarten auflisten

Alle Pfandarten der Organisation, ohne Seitenwechsel. Scope read.

Authorizations:
JWT-authAPI-token
path Parameters
organizationId
required
string <uuid>

ID der Organisation

Responses

Pfandart anlegen

Legt eine Pfandart (z. B. Glas 2 €) für die Organisation an. Scope catalog:write und Modulrecht Pfand.

Authorizations:
JWT-authAPI-token
path Parameters
organizationId
required
string <uuid>

ID der Organisation

Request Body schema: application/json
required
name
required
string

Name des Pfand-Typs

amount
required
number

Pfandbetrag pro Einheit in EUR

isActive
boolean

Ob der Pfand-Typ aktiv (an der Kasse nutzbar) ist

sortOrder
number

Sortierreihenfolge

Responses

Request samples

Content type
application/json
{
  • "name": "Becher",
  • "amount": 2,
  • "isActive": true,
  • "sortOrder": 0
}

Pfandart abrufen

Eine Pfandart der Organisation. Scope read.

Authorizations:
JWT-authAPI-token
path Parameters
organizationId
required
string <uuid>

ID der Organisation

pfandTypeId
required
string <uuid>

ID der Pfandart

Responses

Pfandart ändern

Ändert Name, Betrag oder Sichtbarkeit einer Pfandart. Scope catalog:write.

Authorizations:
JWT-authAPI-token
path Parameters
organizationId
required
string <uuid>

ID der Organisation

pfandTypeId
required
string <uuid>

ID der Pfandart

Request Body schema: application/json
required
name
string

Name des Pfand-Typs

amount
number

Pfandbetrag pro Einheit in EUR

isActive
boolean

Ob der Pfand-Typ aktiv (an der Kasse nutzbar) ist

sortOrder
number

Sortierreihenfolge

Responses

Request samples

Content type
application/json
{
  • "name": "Becher",
  • "amount": 2,
  • "isActive": true,
  • "sortOrder": 0
}

Tische & Bereiche

Bereiche, Tische und der Tischplan der Organisation

Bereiche und Tische auflisten

Alle Bereiche der Organisation inklusive ihrer Tische (aktive und inaktive) und des Tischplans. Scope read.

Authorizations:
JWT-authAPI-token
path Parameters
organizationId
required
string <uuid>

ID der Organisation

Responses

Bereich anlegen

Legt einen Bereich (z. B. Festzelt, Biergarten) an. Scope tables:write und Modulrecht Veranstaltungen.

Authorizations:
JWT-authAPI-token
path Parameters
organizationId
required
string <uuid>

ID der Organisation

Request Body schema: application/json
required
name
required
string

Name des Bereichs

width
number

Breite der Karte

height
number

Höhe der Karte

gridSize
number

Rasterweite

Responses

Request samples

Content type
application/json
{
  • "name": "Zelt A",
  • "width": 1200,
  • "height": 800,
  • "gridSize": 20
}

Bereiche sortieren

Setzt die Reihenfolge der Bereiche anhand der übergebenen ID-Liste. Scope tables:write.

Authorizations:
JWT-authAPI-token
path Parameters
organizationId
required
string <uuid>

ID der Organisation

Request Body schema: application/json
required
ids
required
Array of strings

Bereichs-IDs in neuer Reihenfolge

Responses

Request samples

Content type
application/json
{
  • "ids": [
    ]
}

Bereich ändern

Ändert Name, Größe, Raster oder Deko eines Bereichs. Scope tables:write.

Authorizations:
JWT-authAPI-token
path Parameters
organizationId
required
string <uuid>

ID der Organisation

areaId
required
string <uuid>

ID des Bereichs

Request Body schema: application/json
required
name
string

Name des Bereichs

width
number

Breite der Karte

height
number

Höhe der Karte

gridSize
number

Rasterweite

Array of objects (TableAreaDecorDto)
Array of objects or null (TableAreaPointDto)

Umriss des Raums (Polygon, 3–100 Punkte); null = ganze Karte

Responses

Request samples

Content type
application/json
{
  • "name": "Zelt A",
  • "width": 1200,
  • "height": 800,
  • "gridSize": 20,
  • "decor": [
    ],
  • "outline": [
    ]
}

Tischplan eines Bereichs speichern

Ersetzt die Karte eines Bereichs (Positionen der Tische und Deko) vollständig. Scope tables:write.

Authorizations:
JWT-authAPI-token
path Parameters
organizationId
required
string <uuid>

ID der Organisation

areaId
required
string <uuid>

ID des Bereichs

Request Body schema: application/json
required
required
Array of objects (LayoutTableDto)
Array of objects (TableAreaDecorDto)
Array of objects or null (TableAreaPointDto)

Umriss des Raums (Polygon, 3–100 Punkte); null = ganze Karte

Responses

Request samples

Content type
application/json
{
  • "tables": [
    ],
  • "decor": [
    ],
  • "outline": [
    ]
}

Tisch anlegen

Legt einen Tisch in einem Bereich an. Scope tables:write.

Authorizations:
JWT-authAPI-token
path Parameters
organizationId
required
string <uuid>

ID der Organisation

Request Body schema: application/json
required
areaId
required
string
label
required
string

Bezeichnung (1–20 Zeichen)

seats
object or null
shape
string
Enum: "rect" "round"
x
number
y
number
width
number
height
number
rotation
number

Responses

Request samples

Content type
application/json
{
  • "areaId": "string",
  • "label": "A03",
  • "seats": 6,
  • "shape": "rect",
  • "x": 0,
  • "y": 0,
  • "width": 80,
  • "height": 80,
  • "rotation": 0
}

Tischserie anlegen

Legt mehrere Tische mit fortlaufender Nummer in einem Aufruf an (z. B. A01–A12). Scope tables:write.

Authorizations:
JWT-authAPI-token
path Parameters
organizationId
required
string <uuid>

ID der Organisation

Request Body schema: application/json
required
areaId
required
string
prefix
required
string

Präfix, darf leer sein

start
required
number
count
required
number

1–100 Tische

padding
required
number

Stellen der Nummer (0–3)

seats
number
shape
string
Enum: "rect" "round"
object (BulkLayoutDto)

Responses

Request samples

Content type
application/json
{
  • "areaId": "string",
  • "prefix": "A",
  • "start": 1,
  • "count": 12,
  • "padding": 2,
  • "seats": 6,
  • "shape": "rect",
  • "layout": {
    }
}

Tisch ändern

Ändert Name, Plätze, Position oder Bereich eines Tischs. Scope tables:write.

Authorizations:
JWT-authAPI-token
path Parameters
organizationId
required
string <uuid>

ID der Organisation

tableId
required
string <uuid>

ID des Tischs

Request Body schema: application/json
required
areaId
string
label
string

Bezeichnung (1–20 Zeichen)

seats
object or null
shape
string
Enum: "rect" "round"
x
number
y
number
width
number
height
number
rotation
number
isActive
boolean

Responses

Request samples

Content type
application/json
{
  • "areaId": "string",
  • "label": "A03",
  • "seats": 6,
  • "shape": "rect",
  • "x": 0,
  • "y": 0,
  • "width": 80,
  • "height": 80,
  • "rotation": 0,
  • "isActive": true
}

Stationen

Produktionsstationen (Küche, Ausgabe, Bar) je Veranstaltung, an die Bestellpositionen gehen

Stationen auflisten (je Veranstaltung)

Alle Produktionsstationen der Veranstaltung. Scope read.

Authorizations:
JWT-authAPI-token
path Parameters
eventId
required
string <uuid>

ID der Veranstaltung

Responses

Station anlegen

Legt eine Produktionsstation (Küche, Ausgabe, Bar) für die Veranstaltung an, optional mit Drucker. Scope events:write und Modulrecht Veranstaltungen.

Authorizations:
JWT-authAPI-token
path Parameters
eventId
required
string <uuid>

ID der Veranstaltung

Request Body schema: application/json
required
name
required
string

Name des Produktionsstandorts

description
string

Beschreibung

color
string

Farbcode (Hex-Format)

sortOrder
number

Sortierreihenfolge

isActive
boolean

Gibt an, ob der Standort aktiv ist

printerId
object

ID des zugewiesenen Druckers

handoffStationId
object

ID des Übergabe-Standorts (nächste Station in der Kette)

Responses

Request samples

Content type
application/json
{
  • "name": "Küche",
  • "description": "Hauptküche für warme Speisen",
  • "color": "#FF5733",
  • "sortOrder": 0,
  • "isActive": true,
  • "printerId": "550e8400-e29b-41d4-a716-446655440000",
  • "handoffStationId": "550e8400-e29b-41d4-a716-446655440000"
}

Station abrufen

Eine Produktionsstation der Veranstaltung. Scope read.

Authorizations:
JWT-authAPI-token
path Parameters
eventId
required
string <uuid>

ID der Veranstaltung

stationId
required
string <uuid>

ID der Station

Responses

Station ändern

Ändert Name, Drucker oder Einstellungen einer Station. Scope events:write.

Authorizations:
JWT-authAPI-token
path Parameters
eventId
required
string <uuid>

ID der Veranstaltung

stationId
required
string <uuid>

ID der Station

Request Body schema: application/json
required
name
string

Name des Produktionsstandorts

description
object

Beschreibung

color
object

Farbcode (Hex-Format)

sortOrder
number

Sortierreihenfolge

isActive
boolean

Gibt an, ob der Standort aktiv ist

printerId
object

ID des zugewiesenen Druckers

handoffStationId
object

ID des Übergabe-Standorts (nächste Station in der Kette)

Responses

Request samples

Content type
application/json
{
  • "name": "Küche",
  • "description": "Hauptküche für warme Speisen",
  • "color": "#FF5733",
  • "sortOrder": 0,
  • "isActive": true,
  • "printerId": "550e8400-e29b-41d4-a716-446655440000",
  • "handoffStationId": "550e8400-e29b-41d4-a716-446655440000"
}

Drucker

Drucker der Organisation lesen. Anlegen, ändern und Testdruck gehen nur in der App.

Drucker auflisten

Alle Drucker der Organisation mit Verbindungsstatus, seitenweise (page, limit). Scope read; anlegen, ändern und Testdruck gehen nur in der App.

Authorizations:
JWT-authAPI-token
path Parameters
organizationId
required
string <uuid>

ID der Organisation

query Parameters
page
number >= 1
Default: 1
Example: page=1

Seite, beginnend bei 1

limit
number [ 1 .. 500 ]
Default: 20
Example: limit=20

Einträge je Seite (höchstens 500)

Responses

Drucker abrufen

Ein Drucker der Organisation mit Einstellungen und Status. Scope read.

Authorizations:
JWT-authAPI-token
path Parameters
organizationId
required
string <uuid>

ID der Organisation

printerId
required
string <uuid>

ID des Druckers

Responses

Bon-Vorlagen

Vorlagen für Bons und Bestellzettel

Bon-Vorlagen auflisten

Alle Bon-Vorlagen der Organisation, seitenweise (page, limit). Scope read.

Authorizations:
JWT-authAPI-token
path Parameters
organizationId
required
string <uuid>

ID der Organisation

query Parameters
page
number >= 1
Default: 1
Example: page=1

Seite, beginnend bei 1

limit
number [ 1 .. 500 ]
Default: 20
Example: limit=20

Einträge je Seite (höchstens 500)

Responses

Bon-Vorlage anlegen

Legt eine Vorlage für Bons oder Bestellzettel an. Scope devices:write und Modulrecht Geräte.

Authorizations:
JWT-authAPI-token
path Parameters
organizationId
required
string <uuid>

ID der Organisation

Request Body schema: application/json
required
name
required
string

Name der Druckvorlage

type
required
string
Enum: "receipt" "kitchen_ticket" "order_ticket"

Typ der Druckvorlage

template
object

Vorlagen-Definition

isDefault
boolean

Gibt an, ob dies die Standardvorlage ist

Responses

Request samples

Content type
application/json
{
  • "name": "Kassenbon Standard",
  • "type": "receipt",
  • "template": {
    },
  • "isDefault": false
}

Bon-Vorlage abrufen

Eine Bon-Vorlage mit ihrer Definition. Scope read.

Authorizations:
JWT-authAPI-token
path Parameters
organizationId
required
string <uuid>

ID der Organisation

templateId
required
string <uuid>

ID der Vorlage

Responses

Bon-Vorlage ändern

Ändert Name, Typ oder Definition einer Vorlage. Scope devices:write.

Authorizations:
JWT-authAPI-token
path Parameters
organizationId
required
string <uuid>

ID der Organisation

templateId
required
string <uuid>

ID der Vorlage

Request Body schema: application/json
required
name
string

Name der Druckvorlage

template
object

Vorlagen-Definition

isDefault
boolean

Gibt an, ob dies die Standardvorlage ist

Responses

Request samples

Content type
application/json
{
  • "name": "Kassenbon Standard",
  • "template": {
    },
  • "isDefault": true
}

Bon-Vorlage als Vorschau rendern

Rendert die Vorlage mit Beispieldaten und liefert das Ergebnis als HTML (data.html), ohne zu drucken. Scope read.

Authorizations:
JWT-authAPI-token
path Parameters
organizationId
required
string <uuid>

ID der Organisation

templateId
required
string <uuid>

ID der Vorlage

Responses

Schichtpläne

Schichtpläne mit Jobs, Schichten und Helfer-Anmeldungen. E-Mail-Versand und Löschen bleiben der App vorbehalten.

Schichtpläne auflisten

Alle Schichtpläne der Organisation mit Status (Entwurf, veröffentlicht, geschlossen). Scope read.

Authorizations:
JWT-authAPI-token
path Parameters
organizationId
required
string <uuid>

ID der Organisation

Responses

Schichtplan anlegen

Legt einen Schichtplan als Entwurf an. Scope staff:write und Modulrecht Schichtpläne.

Authorizations:
JWT-authAPI-token
path Parameters
organizationId
required
string <uuid>

ID der Organisation

Request Body schema: application/json
required
name
required
string

Name of the shift plan

description
string

Description shown to helpers

eventId
string

Optional linked event ID

publicSlug
string

Custom URL slug (auto-generated if not provided)

requireApproval
boolean
Default: true

Whether registrations require admin approval

allowMultipleShifts
boolean
Default: true

Allow registering for multiple shifts

reminderDaysBefore
number
Default: 1

Days before shift to send reminder email

maxShiftsPerPerson
number

Max shifts per person (0 = unlimited)

verificationReminderEnabled
boolean
Default: true

Whether the cron sends verification reminders for pending_email helpers

verificationReminderIntervalHours
number
Default: 24

Hours between two verification reminders

verificationReminderMaxCount
number
Default: 5

Max number of verification reminders per helper-group

Responses

Request samples

Content type
application/json
{
  • "name": "Vereinsfest 2024 Schichtplan",
  • "description": "string",
  • "eventId": "string",
  • "publicSlug": "vereinsfest-2024",
  • "requireApproval": true,
  • "allowMultipleShifts": true,
  • "reminderDaysBefore": 1,
  • "maxShiftsPerPerson": 0,
  • "verificationReminderEnabled": true,
  • "verificationReminderIntervalHours": 24,
  • "verificationReminderMaxCount": 5
}

Schichtplan abrufen

Ein Schichtplan mit seinen Jobs und Schichten. Scope read.

Authorizations:
JWT-authAPI-token
path Parameters
organizationId
required
string <uuid>

ID der Organisation

planId
required
string <uuid>

ID des Schichtplans

Responses

Schichtplan ändern

Ändert Name, Zeitraum, Beschreibung oder Einstellungen eines Schichtplans. Scope staff:write.

Authorizations:
JWT-authAPI-token
path Parameters
organizationId
required
string <uuid>

ID der Organisation

planId
required
string <uuid>

ID des Schichtplans

Request Body schema: application/json
required
name
string

Name of the shift plan

description
string

Description shown to helpers

eventId
string

Optional linked event ID

publicSlug
string

Custom URL slug (auto-generated if not provided)

requireApproval
boolean
Default: true

Whether registrations require admin approval

allowMultipleShifts
boolean
Default: true

Allow registering for multiple shifts

reminderDaysBefore
number
Default: 1

Days before shift to send reminder email

maxShiftsPerPerson
number

Max shifts per person (0 = unlimited)

verificationReminderEnabled
boolean
Default: true

Whether the cron sends verification reminders for pending_email helpers

verificationReminderIntervalHours
number
Default: 24

Hours between two verification reminders

verificationReminderMaxCount
number
Default: 5

Max number of verification reminders per helper-group

Responses

Request samples

Content type
application/json
{
  • "name": "Vereinsfest 2024 Schichtplan",
  • "description": "string",
  • "eventId": "string",
  • "publicSlug": "vereinsfest-2024",
  • "requireApproval": true,
  • "allowMultipleShifts": true,
  • "reminderDaysBefore": 1,
  • "maxShiftsPerPerson": 0,
  • "verificationReminderEnabled": true,
  • "verificationReminderIntervalHours": 24,
  • "verificationReminderMaxCount": 5
}

Schichtplan veröffentlichen

Schaltet den Plan für die öffentliche Helfer-Anmeldung frei (400 SHIFT_PLAN_ALREADY_PUBLISHED, wenn er schon offen ist). Scope staff:write.

Authorizations:
JWT-authAPI-token
path Parameters
organizationId
required
string <uuid>

ID der Organisation

planId
required
string <uuid>

ID des Schichtplans

Responses

Schichtplan schließen

Beendet die Anmeldung; bestehende Anmeldungen bleiben erhalten. Scope staff:write.

Authorizations:
JWT-authAPI-token
path Parameters
organizationId
required
string <uuid>

ID der Organisation

planId
required
string <uuid>

ID des Schichtplans

Responses

Schichtplan als PDF exportieren

Liefert den Plan mit allen Jobs, Schichten und eingetragenen Helfern als Datei (application/pdf). Scope read.

Authorizations:
JWT-authAPI-token
path Parameters
organizationId
required
string <uuid>

ID der Organisation

planId
required
string <uuid>

ID des Schichtplans

Responses

Jobs auflisten (je Schichtplan)

Alle Jobs eines Schichtplans mit ihren Schichten. Scope read.

Authorizations:
JWT-authAPI-token
path Parameters
organizationId
required
string <uuid>

ID der Organisation

planId
required
string <uuid>

ID des Schichtplans

Responses

Job anlegen

Legt eine Aufgabe (z. B. Ausschank, Kasse) im Schichtplan an. Scope staff:write.

Authorizations:
JWT-authAPI-token
path Parameters
organizationId
required
string <uuid>

ID der Organisation

planId
required
string <uuid>

ID des Schichtplans

Request Body schema: application/json
required
name
required
string

Name of the job

description
string

Description of what this job involves

color
string

Color code for UI display

sortOrder
number
Default: 0

Sort order (lower = first)

requiredWorkers
number
Default: 1

Default number of helpers per shift

Responses

Request samples

Content type
application/json
{
  • "name": "Zapfen",
  • "description": "string",
  • "color": "#3b82f6",
  • "sortOrder": 0,
  • "requiredWorkers": 1
}

Job ändern

Ändert Name, Beschreibung oder Reihenfolge eines Jobs. Scope staff:write.

Authorizations:
JWT-authAPI-token
path Parameters
organizationId
required
string <uuid>

ID der Organisation

jobId
required
string <uuid>

ID des Jobs

Request Body schema: application/json
required
name
string

Name of the job

description
string

Description of what this job involves

color
string

Color code for UI display

sortOrder
number
Default: 0

Sort order (lower = first)

requiredWorkers
number
Default: 1

Default number of helpers per shift

Responses

Request samples

Content type
application/json
{
  • "name": "Zapfen",
  • "description": "string",
  • "color": "#3b82f6",
  • "sortOrder": 0,
  • "requiredWorkers": 1
}

Schichten auflisten (je Job)

Alle Schichten eines Jobs mit Belegung. Scope read.

Authorizations:
JWT-authAPI-token
path Parameters
organizationId
required
string <uuid>

ID der Organisation

jobId
required
string <uuid>

ID des Jobs

Responses

Schicht anlegen

Legt eine Schicht (Zeitraum, benötigte Helfer) für einen Job an. Scope staff:write.

Authorizations:
JWT-authAPI-token
path Parameters
organizationId
required
string <uuid>

ID der Organisation

jobId
required
string <uuid>

ID des Jobs

Request Body schema: application/json
required
date
required
string

Date of the shift

startTime
required
string

Start time (HH:mm)

endTime
required
string

End time (HH:mm)

requiredWorkers
number
Default: 1

Number of workers needed

notes
string

Internal notes (not shown to helpers)

Responses

Request samples

Content type
application/json
{
  • "date": "2024-07-20",
  • "startTime": "14:00",
  • "endTime": "18:00",
  • "requiredWorkers": 1,
  • "notes": "string"
}

Mehrere Schichten anlegen

Legt mehrere Schichten für einen Job in einem Aufruf an. Scope staff:write.

Authorizations:
JWT-authAPI-token
path Parameters
organizationId
required
string <uuid>

ID der Organisation

jobId
required
string <uuid>

ID des Jobs

Request Body schema: application/json
required
required
Array of objects (CreateShiftDto)

Schichten, die angelegt werden

Array
date
required
string

Date of the shift

startTime
required
string

Start time (HH:mm)

endTime
required
string

End time (HH:mm)

requiredWorkers
number
Default: 1

Number of workers needed

notes
string

Internal notes (not shown to helpers)

Responses

Request samples

Content type
application/json
{
  • "shifts": [
    ]
}

Schicht ändern

Ändert Zeitraum, benötigte Helfer oder Notiz einer Schicht. Scope staff:write.

Authorizations:
JWT-authAPI-token
path Parameters
organizationId
required
string <uuid>

ID der Organisation

shiftId
required
string <uuid>

ID der Schicht

Request Body schema: application/json
required
date
string

Date of the shift

startTime
string

Start time (HH:mm)

endTime
string

End time (HH:mm)

requiredWorkers
number
Default: 1

Number of workers needed

notes
string

Internal notes (not shown to helpers)

Responses

Request samples

Content type
application/json
{
  • "date": "2024-07-20",
  • "startTime": "14:00",
  • "endTime": "18:00",
  • "requiredWorkers": 1,
  • "notes": "string"
}

Helfer-Anmeldungen auflisten (je Schichtplan)

Alle Anmeldungen eines Schichtplans mit Status und Schicht. Scope read.

Authorizations:
JWT-authAPI-token
path Parameters
organizationId
required
string <uuid>

ID der Organisation

planId
required
string <uuid>

ID des Schichtplans

Responses

Anmeldung annehmen

Bestätigt eine Helfer-Anmeldung; der Helfer bekommt eine E-Mail, optional mit Nachricht. Scope staff:write.

Authorizations:
JWT-authAPI-token
path Parameters
organizationId
required
string <uuid>

ID der Organisation

registrationId
required
string <uuid>

ID der Anmeldung

Request Body schema: application/json
required
message
string

Optional message to include in confirmation email

Responses

Request samples

Content type
application/json
{
  • "message": "string"
}

Anmeldung ablehnen

Lehnt eine Helfer-Anmeldung ab; der Grund geht per E-Mail an den Helfer. Scope staff:write.

Authorizations:
JWT-authAPI-token
path Parameters
organizationId
required
string <uuid>

ID der Organisation

registrationId
required
string <uuid>

ID der Anmeldung

Request Body schema: application/json
required
reason
string

Reason for rejection (shown to helper)

Responses

Request samples

Content type
application/json
{
  • "reason": "string"
}

Anmeldung ändern

Ändert Name, Kontakt, Notizen oder Schicht einer Anmeldung; auf Wunsch wird der Helfer per E-Mail informiert. Scope staff:write.

Authorizations:
JWT-authAPI-token
path Parameters
organizationId
required
string <uuid>

ID der Organisation

registrationId
required
string <uuid>

ID der Anmeldung

Request Body schema: application/json
required
name
string
email
string
phone
string
notes
string
adminNotes
string
shiftId
string

Move the registration to a different shift. The helper will be notified by default unless notify is false.

notifyMessage
string

Optional note included in the change-notification email.

notify
boolean
Default: true

When true and the shift is moved, send the helper an update email. Default true.

Responses

Request samples

Content type
application/json
{
  • "name": "string",
  • "email": "string",
  • "phone": "string",
  • "notes": "string",
  • "adminNotes": "string",
  • "shiftId": "string",
  • "notifyMessage": "string",
  • "notify": true
}

Interne Notiz zur Anmeldung setzen

Speichert eine Notiz, die nur Organisatoren sehen. Scope staff:write.

Authorizations:
JWT-authAPI-token
path Parameters
organizationId
required
string <uuid>

ID der Organisation

registrationId
required
string <uuid>

ID der Anmeldung

Request Body schema: application/json
required
adminNotes
string

Internal admin notes

Responses

Request samples

Content type
application/json
{
  • "adminNotes": "string"
}

Helfer in Schicht eintragen

Trägt einen Helfer direkt in eine Schicht ein, ohne öffentliche Anmeldung. Scope staff:write.

Authorizations:
JWT-authAPI-token
path Parameters
organizationId
required
string <uuid>

ID der Organisation

shiftId
required
string <uuid>

ID der Schicht

Request Body schema: application/json
required
name
required
string

Helper name

email
string

Helper email — used for notifications. Optional when adding helpers manually.

phone
string

Phone number

notes
string

Helper-side notes (visible to admin too)

adminNotes
string

Admin-only notes

notify
boolean
Default: false

When true, send a confirmation email to the helper. Default false (silent admin add).

registrationGroupId
string

Append the new registration to an existing helper-group. When omitted, a fresh group ID is created (= a new standalone helper).

Responses

Request samples

Content type
application/json
{
  • "name": "Max Mustermann",
  • "email": "max@example.com",
  • "phone": "string",
  • "notes": "string",
  • "adminNotes": "string",
  • "notify": false,
  • "registrationGroupId": "string"
}

Berichte

Auswertungen über Umsatz, Produkte, Zahlarten, Geräte und Bestand. Der Token-Besitzer braucht das Modulrecht „Auswertung“.

Umsatzbericht

Umsatz, Bestellungen und Durchschnittsbon im Zeitraum (startDate, endDate), optional je Veranstaltung und gruppiert (groupBy). Scope read und Modulrecht Auswertung.

Authorizations:
JWT-authAPI-token
path Parameters
organizationId
required
any <uuid>

ID der Organisation

query Parameters
eventId
string
Example: eventId=550e8400-e29b-41d4-a716-446655440000

Filter nach Event-ID

startDate
string
Example: startDate=2024-01-01T00:00:00.000Z

Startdatum für den Bericht

endDate
string
Example: endDate=2024-12-31T23:59:59.000Z

Enddatum für den Bericht

groupBy
string
Enum: "day" "week" "month" "category" "product" "payment_method"
Example: groupBy=day

Gruppierung der Berichtsdaten

Responses

Umsatzbericht je Produkt

Verkaufte Menge und Umsatz je Produkt im Zeitraum, optional je Veranstaltung. Scope read und Modulrecht Auswertung.

Authorizations:
JWT-authAPI-token
path Parameters
organizationId
required
any <uuid>

ID der Organisation

query Parameters
eventId
string
Example: eventId=550e8400-e29b-41d4-a716-446655440000

Filter nach Event-ID

startDate
string
Example: startDate=2024-01-01T00:00:00.000Z

Startdatum für den Bericht

endDate
string
Example: endDate=2024-12-31T23:59:59.000Z

Enddatum für den Bericht

groupBy
string
Enum: "day" "week" "month" "category" "product" "payment_method"
Example: groupBy=day

Gruppierung der Berichtsdaten

Responses

Zahlungsbericht je Zahlart

Summen und Anzahl je Zahlart (bar, Karte, SumUp, Rabatt) im Zeitraum. Scope read und Modulrecht Auswertung.

Authorizations:
JWT-authAPI-token
path Parameters
organizationId
required
any <uuid>

ID der Organisation

query Parameters
eventId
string
Example: eventId=550e8400-e29b-41d4-a716-446655440000

Filter nach Event-ID

startDate
string
Example: startDate=2024-01-01T00:00:00.000Z

Startdatum für den Bericht

endDate
string
Example: endDate=2024-12-31T23:59:59.000Z

Enddatum für den Bericht

groupBy
string
Enum: "day" "week" "month" "category" "product" "payment_method"
Example: groupBy=day

Gruppierung der Berichtsdaten

Responses

Umsatz je Stunde

Bestellungen und Umsatz je Stunde im Zeitraum, für Stoßzeiten und Personalplanung. Scope read und Modulrecht Auswertung.

Authorizations:
JWT-authAPI-token
path Parameters
organizationId
required
any <uuid>

ID der Organisation

query Parameters
eventId
string
Example: eventId=550e8400-e29b-41d4-a716-446655440000

Filter nach Event-ID

startDate
string
Example: startDate=2024-01-01T00:00:00.000Z

Startdatum für den Bericht

endDate
string
Example: endDate=2024-12-31T23:59:59.000Z

Enddatum für den Bericht

groupBy
string
Enum: "day" "week" "month" "category" "product" "payment_method"
Example: groupBy=day

Gruppierung der Berichtsdaten

Responses

Umsatz je Bestellkanal

Bestellungen und Umsatz je Kanal (Kasse, Online, QR-Bestellung) im Zeitraum. Scope read und Modulrecht Auswertung.

Authorizations:
JWT-authAPI-token
path Parameters
organizationId
required
any <uuid>

ID der Organisation

query Parameters
eventId
string
Example: eventId=550e8400-e29b-41d4-a716-446655440000

Filter nach Event-ID

startDate
string
Example: startDate=2024-01-01T00:00:00.000Z

Startdatum für den Bericht

endDate
string
Example: endDate=2024-12-31T23:59:59.000Z

Enddatum für den Bericht

groupBy
string
Enum: "day" "week" "month" "category" "product" "payment_method"
Example: groupBy=day

Gruppierung der Berichtsdaten

Responses

Umsatzbericht je Kategorie

Verkaufte Menge, Umsatz und Anteil je Kategorie im Zeitraum. Scope read und Modulrecht Auswertung.

Authorizations:
JWT-authAPI-token
path Parameters
organizationId
required
any <uuid>

ID der Organisation

query Parameters
eventId
string
Example: eventId=550e8400-e29b-41d4-a716-446655440000

Filter nach Event-ID

startDate
string
Example: startDate=2024-01-01T00:00:00.000Z

Startdatum für den Bericht

endDate
string
Example: endDate=2024-12-31T23:59:59.000Z

Enddatum für den Bericht

groupBy
string
Enum: "day" "week" "month" "category" "product" "payment_method"
Example: groupBy=day

Gruppierung der Berichtsdaten

Responses

Netto-Abgleich Produkte und Kategorien

Produkt- und Kategoriezeilen zeigen den Warenwert netto (Storno und erstattete Mengen ab, Rabatt anteilig, ohne Pfand und Trinkgeld). Hier steht, was keiner Position gehört: itemsRevenue + unassignedRefunds (Kulanz-Erstattungen ohne Position, negativ) + tips = netRevenue (wie totalRevenue im Umsatzbericht). Die Summe der gerundeten Zeilen kann bei Rabatten um Cent von itemsRevenue abweichen. Scope read und Modulrecht Auswertung.

Authorizations:
JWT-authAPI-token
path Parameters
organizationId
required
any <uuid>

ID der Organisation

query Parameters
eventId
string
Example: eventId=550e8400-e29b-41d4-a716-446655440000

Filter nach Event-ID

startDate
string
Example: startDate=2024-01-01T00:00:00.000Z

Startdatum für den Bericht

endDate
string
Example: endDate=2024-12-31T23:59:59.000Z

Enddatum für den Bericht

groupBy
string
Enum: "day" "week" "month" "category" "product" "payment_method"
Example: groupBy=day

Gruppierung der Berichtsdaten

Responses

Umsatz je Gerät

Bestellungen und Umsatz je Kasse im Zeitraum. Scope read und Modulrecht Auswertung.

Authorizations:
JWT-authAPI-token
path Parameters
organizationId
required
any <uuid>

ID der Organisation

query Parameters
eventId
string
Example: eventId=550e8400-e29b-41d4-a716-446655440000

Filter nach Event-ID

startDate
string
Example: startDate=2024-01-01T00:00:00.000Z

Startdatum für den Bericht

endDate
string
Example: endDate=2024-12-31T23:59:59.000Z

Enddatum für den Bericht

groupBy
string
Enum: "day" "week" "month" "category" "product" "payment_method"
Example: groupBy=day

Gruppierung der Berichtsdaten

Responses

Bestandsbericht

Aktueller Bestand aller Produkte mit Bestandsführung samt Warnung bei leerem Bestand. Scope read und Modulrecht Auswertung.

Authorizations:
JWT-authAPI-token
path Parameters
organizationId
required
any <uuid>

ID der Organisation

Responses

Bestandsbewegungen

Alle Bestandsbewegungen (Verkauf, Korrektur, Inventur) im Zeitraum, optional je Veranstaltung. Scope read und Modulrecht Auswertung.

Authorizations:
JWT-authAPI-token
path Parameters
organizationId
required
any <uuid>

ID der Organisation

query Parameters
eventId
string
Example: eventId=550e8400-e29b-41d4-a716-446655440000

Filter nach Event-ID

startDate
string
Example: startDate=2024-01-01T00:00:00.000Z

Startdatum für den Bericht

endDate
string
Example: endDate=2024-12-31T23:59:59.000Z

Enddatum für den Bericht

groupBy
string
Enum: "day" "week" "month" "category" "product" "payment_method"
Example: groupBy=day

Gruppierung der Berichtsdaten

Responses

Bericht exportieren (CSV, Excel, JSON)

type wählt den Bericht, format das Dateiformat; die Antwort ist ein Download (Content-Disposition: attachment). Scope read und Modulrecht Auswertung.

Authorizations:
JWT-authAPI-token
path Parameters
organizationId
required
any <uuid>

ID der Organisation

query Parameters
format
required
string
Enum: "csv" "excel" "json"
Example: format=csv

Exportformat des Berichts

eventId
string
Example: eventId=550e8400-e29b-41d4-a716-446655440000

Filter nach Event-ID

startDate
string
Example: startDate=2024-01-01T00:00:00.000Z

Startdatum für den Bericht

endDate
string
Example: endDate=2024-12-31T23:59:59.000Z

Enddatum für den Bericht

groupBy
string
Enum: "day" "week" "month" "category" "product" "payment_method"
Example: groupBy=day

Gruppierung der Berichtsdaten

type
string
Enum: "sales" "products" "payments" "hourly" "channels" "categories" "devices" "inventory"

Welcher Bericht exportiert wird (Standard: sales)

Responses

Systemstatus

Geräte (verbunden/offline), Drucker, wartende Druckaufträge und offene Bestellungen der Organisation auf einen Blick. Scope read und Modulrecht Auswertung.

Authorizations:
JWT-authAPI-token
path Parameters
organizationId
required
any <uuid>

ID der Organisation

Responses

Letzte Aktivitäten

Die jüngsten Bestellungen, Zahlungen und Druckaufträge der Organisation als Verlauf (höchstens 20 je Art). Scope read und Modulrecht Auswertung.

Authorizations:
JWT-authAPI-token
path Parameters
organizationId
required
any <uuid>

ID der Organisation

Responses

Bestellungen (nur lesen)

Bestellungen lesen und auswerten. Anlegen, Kassieren, Stornieren und Erstatten sind der Kasse und der App vorbehalten.

Bestellungen auflisten

Bestellungen der Organisation, neueste zuerst, seitenweise (höchstens 100 je Seite) und filterbar nach Veranstaltung, Status, Zahlart, Gerät und Zeitraum; includeItems=true liefert die Positionen mit. Scope read. Anlegen, Stornieren und Erstatten sind der Kasse und der App vorbehalten.

Authorizations:
JWT-authAPI-token
path Parameters
organizationId
required
string <uuid>

ID der Organisation

query Parameters
page
number >= 1
Default: 1
Example: page=1

Seite, beginnend bei 1

limit
number [ 1 .. 500 ]
Default: 20
Example: limit=50

Anzahl pro Seite (max. 100)

eventId
string
Example: eventId=550e8400-e29b-41d4-a716-446655440000

Filter nach Event-ID

status
string
Enum: "open" "in_progress" "ready" "completed" "cancelled"
Example: status=open

Filter nach Bestellstatus

paymentStatus
string
Enum: "unpaid" "partly_paid" "paid" "refunded"
Example: paymentStatus=pending

Filter nach Zahlungsstatus

source
string
Enum: "pos" "online" "qr_order"
Example: source=pos

Filter nach Bestellquelle

fulfillmentType
string
Enum: "table_service" "counter_pickup"
Example: fulfillmentType=counter_pickup

Filter nach Erfüllungstyp

dateFrom
string
Example: dateFrom=2024-01-01T00:00:00.000Z

Startdatum für Filterung

dateTo
string
Example: dateTo=2024-12-31T23:59:59.000Z

Enddatum für Filterung

includeItems
boolean
Example: includeItems=true

Bestellpositionen einschließen

q
string
Example: q=Burger

Suche: Bestell-/Tagesnummer, Tisch, Name oder Produkt

displayStatus
string
Example: displayStatus=unpaid,refunded

Status wie in der Kasse (kommagetrennt): in_kitchen, ready, completed, unpaid, cancelled, partly_refunded, refunded

paymentMethod
string
Example: paymentMethod=cash,sumup

Zahlart (kommagetrennt): cash, card, sumup, discount

deviceId
string

Nur Bestellungen dieses Geräts

Responses

Response Schema: application/json
data
Array of objects
object

Seitenangaben

Response samples

Content type
application/json
{
  • "data": [
    ],
  • "meta": {
    }
}

Bestellstatistik

Anzahl, Umsatz, Durchschnittsbon und Pfand über alle Bestellungen, die zu den Filtern passen — ohne Seitenwechsel; stornierte zählen in count, aber nicht in die Beträge. Scope read.

Authorizations:
JWT-authAPI-token
path Parameters
organizationId
required
string <uuid>

ID der Organisation

query Parameters
page
number >= 1
Default: 1
Example: page=1

Seite, beginnend bei 1

limit
number [ 1 .. 500 ]
Default: 20
Example: limit=50

Anzahl pro Seite (max. 100)

eventId
string
Example: eventId=550e8400-e29b-41d4-a716-446655440000

Filter nach Event-ID

status
string
Enum: "open" "in_progress" "ready" "completed" "cancelled"
Example: status=open

Filter nach Bestellstatus

paymentStatus
string
Enum: "unpaid" "partly_paid" "paid" "refunded"
Example: paymentStatus=pending

Filter nach Zahlungsstatus

source
string
Enum: "pos" "online" "qr_order"
Example: source=pos

Filter nach Bestellquelle

fulfillmentType
string
Enum: "table_service" "counter_pickup"
Example: fulfillmentType=counter_pickup

Filter nach Erfüllungstyp

dateFrom
string
Example: dateFrom=2024-01-01T00:00:00.000Z

Startdatum für Filterung

dateTo
string
Example: dateTo=2024-12-31T23:59:59.000Z

Enddatum für Filterung

includeItems
boolean
Example: includeItems=true

Bestellpositionen einschließen

q
string
Example: q=Burger

Suche: Bestell-/Tagesnummer, Tisch, Name oder Produkt

displayStatus
string
Example: displayStatus=unpaid,refunded

Status wie in der Kasse (kommagetrennt): in_kitchen, ready, completed, unpaid, cancelled, partly_refunded, refunded

paymentMethod
string
Example: paymentMethod=cash,sumup

Zahlart (kommagetrennt): cash, card, sumup, discount

deviceId
string

Nur Bestellungen dieses Geräts

Responses

Bestellung abrufen

Eine Bestellung mit Positionen und Zahlungen. Scope read.

Authorizations:
JWT-authAPI-token
path Parameters
organizationId
required
string <uuid>

ID der Organisation

orderId
required
string <uuid>

ID der Bestellung

Responses

Geräte (nur lesen)

Kassen und Displays der Organisation lesen. Koppeln, sperren und löschen geht nur in der App.

Geräte auflisten

Kassen und Displays der Organisation mit Status, seitenweise (page, limit). Scope read; koppeln, sperren und löschen geht nur in der App.

Authorizations:
JWT-authAPI-token
path Parameters
organizationId
required
string <uuid>

ID der Organisation

query Parameters
page
number >= 1
Default: 1
Example: page=1

Seite, beginnend bei 1

limit
number [ 1 .. 500 ]
Default: 20
Example: limit=20

Einträge je Seite (höchstens 500)

Responses

Gerät abrufen

Ein Gerät der Organisation mit Einstellungen und letztem Kontakt. Scope read.

Authorizations:
JWT-authAPI-token
path Parameters
organizationId
required
string <uuid>

ID der Organisation

deviceId
required
string <uuid>

ID des Geräts

Responses

Gerätestatistik

Bestellungen, Zahlungen und Umsatz, die über dieses Gerät liefen, dazu Online-Status und letzter Kontakt. Scope read.

Authorizations:
JWT-authAPI-token
path Parameters
organizationId
required
string <uuid>

ID der Organisation

deviceId
required
string <uuid>

ID des Geräts

Responses

IDs der verbundenen Geräte

Liefert die IDs der Geräte, die gerade per WebSocket mit der API verbunden sind. Scope read.

Authorizations:
JWT-authAPI-token
path Parameters
organizationId
required
string <uuid>

ID der Organisation

Responses

Assistent

KI-gestützte Hilfen. Nur verfügbar, wenn der Assistent für die Organisation aktiviert ist.

Icon-Vorschläge für Produktnamen

Schlägt zu Produktnamen passende Icons aus @openeos/pos-icons vor: Stufe 1 ohne Modell (Namen und Suchbegriffe der Icons), Stufe 2 fragt bei unklaren Namen das Klassifikationsmodell. icon ist die Referenz pos-icon:<id>. Scope read; 404 AI_DISABLED ohne Anbieter, 403 ASSISTANT_DISABLED ohne Opt-in der Organisation.

Authorizations:
JWT-authAPI-token
path Parameters
organizationId
required
string <uuid>

ID der Organisation

Request Body schema: application/json
required
names
required
Array of strings

Produktnamen (1–100)

Responses

Request samples

Content type
application/json
{
  • "names": [
    ]
}

API-Zugänge

API-Tokens der Organisation ausstellen und widerrufen — nur mit Anmeldung (JWT) als Administrator, nicht per Token.

API-Zugänge auflisten

Alle Tokens der Organisation, auch widerrufene und abgelaufene, neueste zuerst. Vom Geheimnis bleibt nur tokenPrefix sichtbar. Nur mit Anmeldung (JWT) als Administrator — nicht per Token.

Authorizations:
JWT-auth
path Parameters
organizationId
required
string <uuid>

ID der Organisation

Responses

API-Zugang anlegen

Stellt einen Token mit Name, Scopes und optionalem Ablauf aus. Das Geheimnis (data.token, oeos_…) kommt genau einmal in dieser Antwort; gespeichert wird nur ein Hash. Höchstens 20 aktive Tokens je Organisation (409 API_TOKEN_LIMIT_REACHED). Nur mit Anmeldung als Administrator.

Authorizations:
JWT-auth
path Parameters
organizationId
required
string <uuid>

ID der Organisation

Request Body schema: application/json
required
name
required
string <= 100 characters

Wofür der Token gedacht ist — erscheint in der Übersicht

scopes
required
Array of strings
Items Enum: "read" "catalog:write" "events:write" "tables:write" "staff:write" "devices:write" "settings:write"

Was der Token darf. Schreib-Scopes schließen read nicht ein — wer lesen und schreiben will, gibt beides an.

expiresAt
string

ISO-8601. Ohne Angabe läuft der Token nicht ab

Responses

Request samples

Content type
application/json
{
  • "name": "Claude Desktop",
  • "scopes": [
    ],
  • "expiresAt": "2027-01-01T00:00:00.000Z"
}

API-Zugang widerrufen

Widerruft einen Token sofort; der Eintrag bleibt mit revokedAt in der Liste. Jeder Administrator der Organisation darf jeden Token der Organisation widerrufen. Nur mit Anmeldung.

Authorizations:
JWT-auth
path Parameters
organizationId
required
string <uuid>

ID der Organisation

id
required
string <uuid>

ID des Tokens

Responses