API-Referenz¶
Vollständige REST API, gegliedert nach Bereichen.
Keine feste Endpunktzahl mehr
Hier stand jahrelang eine eingefrorene Zahl („565 Endpoints in 60 Bereichen"). Sie war beim Lesen dieser Seite regelmäßig veraltet. Die verbindliche, immer aktuelle Liste ist die Referenz selbst — sie wird aus dem laufenden Server erzeugt.
Die Referenz ist nicht öffentlich erreichbar
Seit dem 30.07.2026 ist /swagger nur noch in der Entwicklung bzw. mit ausdrücklicher
Freischaltung (Swagger:Enabled=true) aufrufbar — auf produktiven Instanzen bewusst nicht.
Authentifizierung via JWT-Bearer-Token (siehe REST API).
Übersicht¶
| Bereich | Endpoints | Beschreibung |
|---|---|---|
| Absences | 6 | |
| Analytics | 5 | Analytik |
| ArticleDescription | 9 | Artikelbeschreibungen / Bilder |
| ArticleImport | 13 | Artikel-Import |
| Articles | 18 | Artikel und Artikelgruppen |
| Auth | 8 | Login, Token, Refresh |
| AutoBeleg | 14 | |
| BankTransfer | 7 | |
| Banking | 51 | FinTS, Kontoabruf, SEPA |
| Belege | 9 | |
| CustomerGroups | 4 | Kundengruppen |
| Customers | 17 | Kundenstamm, Guthaben, Dokumente |
| Datev | 6 | DATEV-Export |
| DayClose | 6 | Tagesabschluss / Z-Bericht |
| Delivery | 20 | Lieferservice |
| Disco | 23 | Disco-Modul |
| DiscoConfig | 5 | |
| DiscoStats | 4 | |
| DiscoTurnstile | 2 | |
| Distributors | 5 | |
| Dunning | 3 | Mahnwesen (3 Stufen) |
| Exchanges | 6 | Schichtwechsel |
| Export | 6 | DSFinV-K, GDPdU |
| Forms | 1 | |
| Haccp | 14 | HACCP |
| Invoice | 18 | Kundenrechnungen, PDF |
| MenuCard | 9 | Speisekarten-Verwaltung |
| OnlineCheckout | 17 | Online-Checkout |
| OnlineMenu | 4 | Online-Speisekarte |
| OnlineShopConfig | 13 | |
| OpenBons | 9 | Offene Bestellungen (Tischbetrieb) |
| OptionTemplates | 5 | Optionsvorlagen |
| Payments | 2 | Zahlungen durchführen |
| PublicReceipt | 2 | |
| PublicReservations | 7 | |
| Receipts | 12 | Kassenbons, Storno |
| Reports | 9 | Umsatz-, Artikel-, Personalberichte |
| Reservations | 12 | Tischreservierungen |
| SavedTransfer | 8 | |
| Seats | 1 | |
| SepaMandate | 7 | SEPA-Mandate |
| ShiftPositions | 5 | |
| ShiftSwaps | 6 | |
| ShiftTemplates | 5 | |
| Shifts | 20 | |
| ShopAccount | 12 | |
| Spendings | 9 | Ausgaben / Barentnahmen |
| Staff | 10 | Personal, Rollen, PIN |
| StaffAvailabilities | 4 | |
| StockBookings | 7 | |
| StockInventory | 2 | |
| StockOrders | 8 | |
| StockTakes | 6 | |
| Stocks | 5 | Lagerverwaltung |
| Support | 6 | |
| TableOrder | 8 | Tisch-Selbstbestellung |
| Tables | 20 | Tische, Tischgruppen, Status |
| TimeTracking | 8 | Zeiterfassung |
| Vouchers | 10 | Gutscheine |
| Workshop | 17 | Werkstatt-Aufträge |
Absences¶
| Methode | Endpoint | Beschreibung |
|---|---|---|
| GET | /api/v1/absences |
List absences, optionally filtered by date range, staff member and status. |
| POST | /api/v1/absences |
Create an absence for a staff member (manager action; status is set explicitly). |
| GET | /api/v1/absences/my |
List the current user's own absences. |
| POST | /api/v1/absences/request |
File an absence request for the current user (self-service; goes to a manager for approval). |
| DELETE | /api/v1/absences/{id} |
Delete an absence. |
| PUT | /api/v1/absences/{id} |
Update an existing absence — dates, type, approval status or note. |
Request Body: POST /api/v1/absences (Dikas.Api.Contracts.V1.Requests.HR.CreateAbsenceRequest)
| Feld | Typ | Pflicht | Beschreibung |
|---|---|---|---|
staffId |
string? | ||
type |
integer | ||
startDate |
string? | ||
endDate |
string? | ||
status |
integer | ||
note |
string? |
Request Body: POST /api/v1/absences/request (Dikas.Api.Contracts.V1.Requests.HR.RequestAbsenceRequest)
| Feld | Typ | Pflicht | Beschreibung |
|---|---|---|---|
type |
integer | ||
startDate |
string? | ||
endDate |
string? | ||
note |
string? |
Analytics¶
| Methode | Endpoint | Beschreibung |
|---|---|---|
| GET | /api/v1/analytics/customer-insights |
Get customer insights analytics for a date range. |
| GET | /api/v1/analytics/disco-stats |
Get disco analytics for a date range. |
| GET | /api/v1/analytics/online-orders |
Get online orders analytics for a date range. |
| GET | /api/v1/analytics/staff-performance |
Get staff performance analytics for a date range. |
| GET | /api/v1/analytics/workshop-stats |
Get workshop analytics for a date range. |
ArticleDescription¶
| Methode | Endpoint | Beschreibung |
|---|---|---|
| GET | /api/v1/article-descriptions |
List the web descriptions for all articles. |
| DELETE | /api/v1/article-descriptions/{articleId} |
Delete an article's web description, including its uploaded images. |
| GET | /api/v1/article-descriptions/{articleId} |
Get the web description for a single article. Returns 404 if none has been created yet. |
| PUT | /api/v1/article-descriptions/{articleId} |
Create or overwrite the web description for an article. |
| POST | /api/v1/article-descriptions/{articleId}/ai-description |
Generate an AI-suggested web description for an article from its name. |
| POST | /api/v1/article-descriptions/{articleId}/images |
Upload a gallery image (multipart) for an article, with an optional caption. The image is converted to WebP and a thumbnail is generated. |
| PUT | /api/v1/article-descriptions/{articleId}/images/reorder |
Set the display order of an article's gallery images. |
| DELETE | /api/v1/article-descriptions/{articleId}/images/{attachmentName} |
Remove a single image from an article's gallery. |
| GET | /api/v1/article-descriptions/{articleId}/images/{attachmentName} |
Fetch a stored article image by attachment name. Publicly accessible so the online shop can render it without authentication. |
Request Body: PUT /api/v1/article-descriptions/{articleId} (Dikas.Api.Application.Features.OnlineOrder.Contracts.UpdateArticleDescriptionRequest)
| Feld | Typ | Pflicht | Beschreibung |
|---|---|---|---|
longDescription |
string? | ||
webTitle |
string? | ||
seoDescription |
string? | ||
ingredients |
string? | ||
nutritionInfo |
string? | ||
preparationTimeMinutes |
integer? | ||
spicyLevel |
integer | ||
isVegan |
boolean | ||
isVegetarian |
boolean | ||
isGlutenFree |
boolean | ||
showOnline |
boolean | ||
onlineSortOrder |
integer |
Request Body: PUT /api/v1/article-descriptions/{articleId}/images/reorder (Dikas.Api.Application.Features.OnlineOrder.Contracts.ReorderImagesRequest)
| Feld | Typ | Pflicht | Beschreibung |
|---|---|---|---|
attachmentNames |
array[string]? |
ArticleImport¶
| Methode | Endpoint | Beschreibung |
|---|---|---|
| POST | /api/v1/article-import/ai-extract |
|
| POST | /api/v1/article-import/ai-suggest |
|
| POST | /api/v1/article-import/ai/allergens |
|
| POST | /api/v1/article-import/ai/description |
|
| POST | /api/v1/article-import/analyze |
|
| POST | /api/v1/article-import/execute |
|
| GET | /api/v1/article-import/profiles |
|
| POST | /api/v1/article-import/profiles |
|
| DELETE | /api/v1/article-import/profiles/{id} |
|
| GET | /api/v1/article-import/profiles/{id} |
|
| PUT | /api/v1/article-import/profiles/{id} |
|
| GET | /api/v1/article-import/target-fields |
|
| GET | /api/v1/article-import/template |
Request Body: POST /api/v1/article-import/profiles (Dikas.Api.Contracts.V1.Requests.ERP.CreateImportProfileRequest)
| Feld | Typ | Pflicht | Beschreibung |
|---|---|---|---|
name |
string? | ||
description |
string? | ||
sourceFormat |
string? | ||
presetId |
string? | ||
csvSettings |
object | ||
excelSettings |
object | ||
columnMappings |
array[Dikas.Api.Contracts.V1.Requests.ERP.ColumnMappingDto]? | ||
valueTransforms |
array[Dikas.Api.Contracts.V1.Requests.ERP.ValueTransformDto]? | ||
defaultGroupId |
string? | ||
defaultTaxRate |
number | ||
conflictMode |
string? | ||
matchField |
string? |
Request Body: PUT /api/v1/article-import/profiles/{id} (Dikas.Api.Contracts.V1.Requests.ERP.UpdateImportProfileRequest)
| Feld | Typ | Pflicht | Beschreibung |
|---|---|---|---|
name |
string? | ||
description |
string? | ||
sourceFormat |
string? | ||
presetId |
string? | ||
csvSettings |
object | ||
excelSettings |
object | ||
columnMappings |
array[Dikas.Api.Contracts.V1.Requests.ERP.ColumnMappingDto]? | ||
valueTransforms |
array[Dikas.Api.Contracts.V1.Requests.ERP.ValueTransformDto]? | ||
defaultGroupId |
string? | ||
defaultTaxRate |
number? | ||
conflictMode |
string? | ||
matchField |
string? |
Articles¶
| Methode | Endpoint | Beschreibung |
|---|---|---|
| GET | /api/v1/articles |
List articles, optionally filtered by group, with paging. |
| POST | /api/v1/articles |
Create a new article. |
| GET | /api/v1/articles/barcode/{barcode} |
Look up the article that carries a given barcode (e.g. from a scanner). |
| GET | /api/v1/articles/groups |
List article groups, optionally filtered to active-only or a parent group. |
| POST | /api/v1/articles/groups |
Create a new article group. |
| DELETE | /api/v1/articles/groups/{documentId} |
Delete an article group. |
| PUT | /api/v1/articles/groups/{documentId} |
Update an article group. |
| PUT | /api/v1/articles/groups/{documentId}/move |
Verschiebt eine Gruppe im Hierarchiebaum: zu einer anderen Hauptgruppe (Reparenting), eine |
| Ebene hoeher/tiefer, oder nur die Reihenfolge innerhalb der aktuellen Elterngruppe. | ||
| GET | /api/v1/articles/search |
Search articles by name or article number, optionally scoped to a group. |
| DELETE | /api/v1/articles/{id} |
Delete an article. |
| GET | /api/v1/articles/{id} |
Get a single article by its document id. |
| PUT | /api/v1/articles/{id} |
Update an existing article. |
| PUT | /api/v1/articles/{id}/icon |
Set an article's primary image (icon) to one of its already-uploaded gallery images. |
| GET | /api/v1/articles/{id}/images |
List an article's gallery images. |
| POST | /api/v1/articles/{id}/images |
Upload an image to an article's gallery (max 10MB; JPEG/PNG/GIF/WebP). Converted to WebP |
| with a thumbnail; the first uploaded image becomes the primary image. | ||
| PUT | /api/v1/articles/{id}/images/reorder |
Reorder an article's gallery images (full replacement of the sort order by image name). |
| DELETE | /api/v1/articles/{id}/images/{name} |
Delete an article image (and its thumbnail). |
| GET | /api/v1/articles/{id}/images/{name} |
Download an article image by name. |
Request Body: POST /api/v1/articles/groups (Dikas.Api.Contracts.V1.Requests.ERP.CreateArticleGroupRequest)
| Feld | Typ | Pflicht | Beschreibung |
|---|---|---|---|
groupId |
string? | ||
name |
string? | ||
shortName |
string? | ||
description |
string? | ||
color |
string? | ||
background |
string? | ||
sortOrder |
integer | ||
displayType |
integer | ||
isActive |
boolean |
Request Body: PUT /api/v1/articles/groups/{documentId} (Dikas.Api.Contracts.V1.Requests.ERP.UpdateArticleGroupRequest)
| Feld | Typ | Pflicht | Beschreibung |
|---|---|---|---|
name |
string? | ||
shortName |
string? | ||
description |
string? | ||
color |
string? | ||
background |
string? | ||
sortOrder |
integer? | ||
displayType |
integer? | ||
isActive |
boolean? | ||
printOption |
object | ||
extraPrintOptions |
array[Dikas.Api.Contracts.V1.Requests.ERP.ExtraPrintOptionDto]? | ||
extraArticleIds |
array[string]? | ||
rules |
array[Dikas.Api.Contracts.V1.Requests.ERP.ArticleRuleDto]? | ||
optionGroups |
array[Dikas.Api.Contracts.V1.Requests.ERP.ArticleOptionGroupDto]? |
Auth¶
| Methode | Endpoint | Beschreibung |
|---|---|---|
| POST | /api/v1/auth/change-password |
Change password for the currently logged-in user. |
| PUT | /api/v1/auth/language |
Update the UI language preference of the currently logged-in user (persistiert am |
| Mitarbeiter-Objekt, wirkt beim naechsten Login auf jedem Geraet). | ||
| POST | /api/v1/auth/login |
Log in with username and password and receive JWT tokens. |
| POST | /api/v1/auth/login/card |
Authenticate with NFC/RFID card. |
| POST | /api/v1/auth/logout |
Logout and invalidate refresh token. |
| GET | /api/v1/auth/me |
Get current user information. |
| POST | /api/v1/auth/refresh |
Exchange a refresh token for a new access token. |
| PUT | /api/v1/auth/ui-scale |
Update the UI scale preference (Komfort-Modus "Anzeige: Normal/Gross") of the currently |
| logged-in user — persistiert am Mitarbeiter-Objekt, wirkt beim naechsten Login auf jedem | ||
| Geraet. Gleiche Mechanik wie M:Dikas.Api.Web.Controllers.V1.System.AuthController.UpdateLanguage(Dikas.Api.Contracts.V1.Requests.System.UpdateLanguageRequest). |
Request Body: POST /api/v1/auth/login (Dikas.Api.Contracts.V1.Requests.System.LoginRequest)
| Feld | Typ | Pflicht | Beschreibung |
|---|---|---|---|
username |
string? | Username for authentication. | |
password |
string? | Password for authentication. |
Request Body: POST /api/v1/auth/login/card (Dikas.Api.Contracts.V1.Requests.System.CardLoginRequest)
| Feld | Typ | Pflicht | Beschreibung |
|---|---|---|---|
cardId |
string? | Card ID from NFC/RFID reader. |
AutoBeleg¶
| Methode | Endpoint | Beschreibung |
|---|---|---|
| GET | /api/v1/autobeleg/entries |
List captured entries, optionally filtered by status and date range (paged via skip/take). |
| GET | /api/v1/autobeleg/entries/{id} |
Get a single captured entry by ID. |
| PUT | /api/v1/autobeleg/entries/{id} |
Update a captured entry (e.g. correct amount, supplier or category before converting it). |
| GET | /api/v1/autobeleg/entries/{id}/attachments/{fileName} |
Download an entry's source attachment (e.g. the original PDF or image) by file name. |
| POST | /api/v1/autobeleg/entries/{id}/convert |
Convert a captured entry into a bookkeeping receipt/voucher. |
| POST | /api/v1/autobeleg/entries/{id}/ignore |
Mark a captured entry as ignored so it is skipped and not converted. |
| POST | /api/v1/autobeleg/fetch |
Trigger an IMAP fetch to pull new documents from the mailbox and create matching entries. |
| GET | /api/v1/autobeleg/rules |
List all automatic-capture rules. |
| POST | /api/v1/autobeleg/rules |
Create a new capture rule that matches incoming documents and turns them into entries. |
| DELETE | /api/v1/autobeleg/rules/{id} |
Delete a capture rule. |
| PUT | /api/v1/autobeleg/rules/{id} |
Update an existing capture rule. |
| POST | /api/v1/autobeleg/simulate |
Dry-run the capture rules and preview which entries would be created, without saving anything. |
| GET | /api/v1/autobeleg/stats |
Get capture statistics (e.g. entry counts per status). |
| POST | /api/v1/autobeleg/test-connection |
Test the configured IMAP mailbox connection. |
Request Body: POST /api/v1/autobeleg/rules (Dikas.Api.Contracts.V1.Requests.Customer.CreateAutoBelegRuleRequest)
| Feld | Typ | Pflicht | Beschreibung |
|---|---|---|---|
name |
string? | ||
senderEmail |
string? | ||
senderPattern |
string? | ||
subjectPattern |
string? | ||
fixedAmount |
number? | ||
defaultAccountMode |
integer | ||
defaultAmountNormal |
number | ||
defaultAmountReduced |
number | ||
defaultAmountTaxFree |
number | ||
defaultComment |
string? | ||
expenseCategoryId |
string? | ||
imapAccountId |
string? | ||
isActive |
boolean |
Request Body: PUT /api/v1/autobeleg/rules/{id} (Dikas.Api.Contracts.V1.Requests.Customer.UpdateAutoBelegRuleRequest)
| Feld | Typ | Pflicht | Beschreibung |
|---|---|---|---|
name |
string? | ||
senderEmail |
string? | ||
senderPattern |
string? | ||
subjectPattern |
string? | ||
fixedAmount |
number? | ||
defaultAccountMode |
integer? | ||
defaultAmountNormal |
number? | ||
defaultAmountReduced |
number? | ||
defaultAmountTaxFree |
number? | ||
defaultComment |
string? | ||
expenseCategoryId |
string? | ||
imapAccountId |
string? | ||
isActive |
boolean? |
BankTransfer¶
| Methode | Endpoint | Beschreibung |
|---|---|---|
| GET | /api/v1/bank-transfers |
List all bank transfers and their status. |
| DELETE | /api/v1/bank-transfers/{id} |
Delete a bank transfer. |
| GET | /api/v1/bank-transfers/{id} |
Get a bank transfer by ID. |
| GET | /api/v1/bank-transfers/{id}/invoices |
List the invoices settled by this transfer. |
| POST | /api/v1/bank-transfers/{id}/send-emails |
Email the linked invoices (remittance advice) to their recipients. |
| GET | /api/v1/bank-transfers/{id}/sepa |
Download the generated SEPA credit-transfer XML (pain.001) for this transfer. |
| POST | /api/v1/bank-transfers/{id}/submit-fints |
Submit the transfer to the bank via FinTS/HBCI online banking. |
Request Body: POST /api/v1/bank-transfers/{id}/submit-fints (Dikas.Api.Web.Controllers.V1.Customer.SubmitFinTsRequest)
| Feld | Typ | Pflicht | Beschreibung |
|---|---|---|---|
bankAccountId |
string? |
Banking¶
| Methode | Endpoint | Beschreibung |
|---|---|---|
| GET | /api/v1/banking/accounts |
|
| POST | /api/v1/banking/accounts |
|
| DELETE | /api/v1/banking/accounts/{id} |
|
| GET | /api/v1/banking/accounts/{id} |
|
| PUT | /api/v1/banking/accounts/{id} |
|
| GET | /api/v1/banking/aging-report |
|
| POST | /api/v1/banking/auto-match |
|
| GET | /api/v1/banking/cashflow-projection |
|
| GET | /api/v1/banking/expense-categories |
|
| POST | /api/v1/banking/expense-categories |
|
| DELETE | /api/v1/banking/expense-categories/{id} |
|
| PUT | /api/v1/banking/expense-categories/{id} |
|
| GET | /api/v1/banking/expense-summary |
|
| POST | /api/v1/banking/fints/balance |
|
| GET | /api/v1/banking/fints/bank-lookup |
|
| POST | /api/v1/banking/fints/batch-transfer |
|
| POST | /api/v1/banking/fints/direct-debit |
|
| POST | /api/v1/banking/fints/fetch |
|
| GET | /api/v1/banking/fints/protocol-log/{sessionToken} |
Returns a sanitized protocol log for a FinTS session (for diagnostic display before reporting). |
| POST | /api/v1/banking/fints/report-issue |
Reports a SEPA issue with sanitized protocol log to the DiKAS team. |
| DELETE | /api/v1/banking/fints/sessions/{id} |
|
| POST | /api/v1/banking/fints/tan |
|
| POST | /api/v1/banking/fints/transfer |
|
| POST | /api/v1/banking/fints/vop-confirm/{sessionId} |
Confirms a VoP (Verification of Payee) name mismatch and proceeds with the transfer. |
| Called when the user acknowledges a non-matching name and wants to continue. | ||
| POST | /api/v1/banking/import |
|
| GET | /api/v1/banking/invoice-search |
|
| GET | /api/v1/banking/open-items/export |
|
| GET | /api/v1/banking/overpayments |
|
| POST | /api/v1/banking/overpayments/{invoiceId}/redistribute |
|
| POST | /api/v1/banking/overpayments/{invoiceId}/refund |
|
| GET | /api/v1/banking/payment-journal |
|
| POST | /api/v1/banking/payment-reminders |
|
| GET | /api/v1/banking/pending-transfers |
Ueberweisungs-Bestaetigungen, die der automatisierte Abgleich nicht eindeutig aufloesen |
| konnte (mehrdeutiger Treffer) oder deren Polling-Fenster abgelaufen ist, ohne einen | ||
| Zahlungseingang zu finden. Nur fuer Support/Admin - dieser Pfad bestaetigt Geldeingaenge | ||
| und triggert Lizenz-Reaktivierung, daher kein allgemeiner Banking-Zugriff. | ||
| POST | /api/v1/banking/recompute-hashes |
Recompute deduplication hashes for all transactions (one-time fix after hash algorithm change) |
| POST | /api/v1/banking/reconcile |
Rechnungen im Zeitraum zurücksetzen und gegen Bankbewegungen neu abgleichen |
| POST | /api/v1/banking/sepa |
|
| GET | /api/v1/banking/sessions/{id} |
|
| POST | /api/v1/banking/sessions/{id}/complete |
|
| PUT | /api/v1/banking/sessions/{id}/match |
|
| GET | /api/v1/banking/statements |
|
| POST | /api/v1/banking/statements/fetch |
|
| POST | /api/v1/banking/statements/import |
|
| DELETE | /api/v1/banking/statements/{id} |
|
| GET | /api/v1/banking/transactions |
|
| PUT | /api/v1/banking/transactions/{id}/categorize |
|
| PUT | /api/v1/banking/transactions/{id}/ignore |
|
| PUT | /api/v1/banking/transactions/{id}/match |
|
| POST | /api/v1/banking/transactions/{id}/multi-match |
|
| POST | /api/v1/banking/transactions/{id}/sepa-return |
|
| PUT | /api/v1/banking/transactions/{id}/unmatch |
|
| GET | /api/v1/banking/validate-iban |
Validates an IBAN and returns bank information (BIC, bank name) if derivable. |
Request Body: PUT /api/v1/banking/sessions/{id}/match (Dikas.Api.Contracts.V1.Requests.Customer.MatchBankEntryRequest)
| Feld | Typ | Pflicht | Beschreibung |
|---|---|---|---|
entryIndex |
integer | ||
invoiceId |
string? | ||
customerId |
string? | ||
status |
integer |
Request Body: POST /api/v1/banking/accounts (Dikas.Api.Contracts.V1.Requests.Customer.CreateBankAccountRequest)
| Feld | Typ | Pflicht | Beschreibung |
|---|---|---|---|
name |
string? | ||
iban |
string? | ||
bic |
string? | ||
blz |
string? | ||
finTsUrl |
string? | ||
userId |
string? | ||
pin |
string? | ||
accountHolder |
string? | ||
tanMethod |
string? | ||
isDefault |
boolean |
Belege¶
| Methode | Endpoint | Beschreibung |
|---|---|---|
| GET | /api/v1/belege |
List Belege with optional date-range filters. |
| POST | /api/v1/belege |
Create a new Beleg. |
| POST | /api/v1/belege/extract |
Best-effort AI Vision extraction of the 5 header fields (total, tax, date, company, invoice |
| number) from a receipt photo/PDF. Does NOT persist anything — the client pre-fills the capture | ||
| form and the user saves via the normal create + attachment flow. When the AI service is not | ||
configured (offline appliance/MAUI), returns available: false with no fields and no 500, |
||
| so the client silently falls back to manual entry. | ||
| DELETE | /api/v1/belege/{id} |
Delete a Beleg (soft delete). |
| GET | /api/v1/belege/{id} |
Get a Beleg by ID. |
| PUT | /api/v1/belege/{id} |
Update an existing Beleg (header fields + tax breakdown). Attachments and capturer stay untouched. |
| POST | /api/v1/belege/{id}/attachments |
Upload an attachment (photo/PDF) to a Beleg. |
| DELETE | /api/v1/belege/{id}/attachments/{name} |
Delete an attachment from a Beleg. |
| GET | /api/v1/belege/{id}/attachments/{name} |
Download an attachment from a Beleg. |
Request Body: POST /api/v1/belege (Dikas.Api.Contracts.V1.Requests.CashPoint.CreateBelegRequest)
| Feld | Typ | Pflicht | Beschreibung |
|---|---|---|---|
receiptDate |
string? | The date on the receipt / capture date. Defaults to today if not set. | |
amount |
number? | Optional amount on the receipt. | |
note |
string? | Optional free-text note/comment. | |
company |
string? | Issuer/company name (Aussteller), optional. | |
invoiceNumber |
string? | Invoice/receipt number (Rechnungsnummer), optional. | |
taxAmount |
number? | Tax amount (Steuerbetrag), optional. Wird bei gesetzten Dikas.Api.Contracts.V1.Requests.CashPoint.CreateBelegRequest.TaxLines ignoriert und |
serverseitig als Summe der Zeilen berechnet. |
| taxRate | number? | | Tax rate in percent (Steuersatz), optional. Bei mehreren Dikas.Api.Contracts.V1.Requests.CashPoint.CreateBelegRequest.TaxLines null. |
| taxLines | array[Dikas.Api.Contracts.V1.Requests.CashPoint.BelegTaxLineRequest]? | | Optionale MwSt-Aufschlüsselung nach Satz (mehrere Sätze möglich). Ist sie gesetzt, ist sie
führend: der Server leitet TaxAmount (Summe) und TaxRate (nur bei genau einem Satz) daraus ab. |
| expenseCategoryId | string? | | |
Request Body: PUT /api/v1/belege/{id} (Dikas.Api.Contracts.V1.Requests.CashPoint.CreateBelegRequest)
| Feld | Typ | Pflicht | Beschreibung |
|---|---|---|---|
receiptDate |
string? | The date on the receipt / capture date. Defaults to today if not set. | |
amount |
number? | Optional amount on the receipt. | |
note |
string? | Optional free-text note/comment. | |
company |
string? | Issuer/company name (Aussteller), optional. | |
invoiceNumber |
string? | Invoice/receipt number (Rechnungsnummer), optional. | |
taxAmount |
number? | Tax amount (Steuerbetrag), optional. Wird bei gesetzten Dikas.Api.Contracts.V1.Requests.CashPoint.CreateBelegRequest.TaxLines ignoriert und |
serverseitig als Summe der Zeilen berechnet. |
| taxRate | number? | | Tax rate in percent (Steuersatz), optional. Bei mehreren Dikas.Api.Contracts.V1.Requests.CashPoint.CreateBelegRequest.TaxLines null. |
| taxLines | array[Dikas.Api.Contracts.V1.Requests.CashPoint.BelegTaxLineRequest]? | | Optionale MwSt-Aufschlüsselung nach Satz (mehrere Sätze möglich). Ist sie gesetzt, ist sie
führend: der Server leitet TaxAmount (Summe) und TaxRate (nur bei genau einem Satz) daraus ab. |
| expenseCategoryId | string? | | |
CustomerGroups¶
| Methode | Endpoint | Beschreibung |
|---|---|---|
| GET | /api/v1/customer-groups |
Get all customer groups. |
| POST | /api/v1/customer-groups |
Create a new customer group. |
| DELETE | /api/v1/customer-groups/{id} |
Delete a customer group (soft delete). |
| PUT | /api/v1/customer-groups/{id} |
Update an existing customer group. |
Request Body: POST /api/v1/customer-groups (Dikas.Api.Contracts.V1.Requests.Customer.CreateCustomerGroupRequest)
| Feld | Typ | Pflicht | Beschreibung |
|---|---|---|---|
name |
string? | ||
description |
string? | ||
defaultDiscount |
number? | ||
color |
string? | ||
sortOrder |
integer | ||
isActive |
boolean |
Request Body: PUT /api/v1/customer-groups/{id} (Dikas.Api.Contracts.V1.Requests.Customer.UpdateCustomerGroupRequest)
| Feld | Typ | Pflicht | Beschreibung |
|---|---|---|---|
name |
string? | ||
description |
string? | ||
defaultDiscount |
number? | ||
color |
string? | ||
sortOrder |
integer? | ||
isActive |
boolean? |
Customers¶
| Methode | Endpoint | Beschreibung |
|---|---|---|
| GET | /api/v1/customers |
Get all customers. |
| POST | /api/v1/customers |
Create a new customer. |
| DELETE | /api/v1/customers/all |
Delete all customers (hard delete). |
| GET | /api/v1/customers/card/{cardId} |
Search customer by card ID. |
| DELETE | /api/v1/customers/without-receipts |
Delete all customers that have no receipts (hard delete). |
| DELETE | /api/v1/customers/{id} |
Delete a customer. |
| GET | /api/v1/customers/{id} |
Get a customer by ID. |
| PUT | /api/v1/customers/{id} |
Update an existing customer. |
| GET | /api/v1/customers/{id}/account-transactions |
Get account (balance) transactions for a customer. |
| POST | /api/v1/customers/{id}/documents |
Upload a document for a customer. Max 5MB. |
| DELETE | /api/v1/customers/{id}/documents/{name} |
Delete a customer document. |
| GET | /api/v1/customers/{id}/documents/{name} |
Download a customer document. |
| GET | /api/v1/customers/{id}/invoice-summary |
Get invoice summary for a customer (fast lookup). |
| POST | /api/v1/customers/{id}/payout |
Payout from customer AccountBalance (not BonusBalance). |
| GET | /api/v1/customers/{id}/point-transactions |
Get loyalty point transactions for a customer. |
| POST | /api/v1/customers/{id}/portal-invite |
Send a portal invitation email to a customer. |
| POST | /api/v1/customers/{id}/settle |
Settle an open customer receivable (e.g. a Disco Schuldschein): the customer pays in and |
| the account balance is credited back towards zero. |
Request Body: POST /api/v1/customers/{id}/payout (Dikas.Api.Contracts.V1.Requests.Customer.PayoutRequest)
| Feld | Typ | Pflicht | Beschreibung |
|---|---|---|---|
amount |
number |
Request Body: POST /api/v1/customers/{id}/settle (Dikas.Api.Contracts.V1.Requests.Customer.SettleBalanceRequest)
| Feld | Typ | Pflicht | Beschreibung |
|---|---|---|---|
amount |
number | ||
method |
string? |
Datev¶
| Methode | Endpoint | Beschreibung |
|---|---|---|
| GET | /api/v1/datev/config |
Get DATEV configuration. |
| PUT | /api/v1/datev/config |
Update DATEV configuration (full replace). |
| POST | /api/v1/datev/export |
Start a DATEV export. |
| GET | /api/v1/datev/export/{sessionId}/download |
Download completed DATEV export as ZIP. |
| GET | /api/v1/datev/export/{sessionId}/status |
Check export status. |
| POST | /api/v1/datev/send |
Send DATEV export via email to tax advisor. |
Request Body: POST /api/v1/datev/export (Dikas.Api.Contracts.V1.Requests.CashPoint.StartDatevExportRequest)
| Feld | Typ | Pflicht | Beschreibung |
|---|---|---|---|
startDate |
string | ||
endDate |
string | ||
mode |
integer |
Request Body: POST /api/v1/datev/send (Dikas.Api.Contracts.V1.Requests.CashPoint.SendDatevExportRequest)
| Feld | Typ | Pflicht | Beschreibung |
|---|---|---|---|
startDate |
string | ||
endDate |
string | ||
mode |
integer |
DayClose¶
| Methode | Endpoint | Beschreibung |
|---|---|---|
| GET | /api/v1/day-close |
Get list of day closes with optional date filtering. |
| POST | /api/v1/day-close |
Perform day close. |
| GET | /api/v1/day-close/open-days |
Get business dates that have exchanges but no completed day close (oldest first). |
| GET | /api/v1/day-close/preview |
Get preview of day close data. |
| GET | /api/v1/day-close/{id} |
Get a day close by ID. |
| GET | /api/v1/day-close/{id}/print |
Get print bon for a day close. |
Request Body: POST /api/v1/day-close (Dikas.Api.Contracts.V1.Requests.CashPoint.PerformDayCloseRequest)
| Feld | Typ | Pflicht | Beschreibung |
|---|---|---|---|
businessDate |
string? | Business date to close (default: today). | |
force |
boolean | Force close even with warnings. | |
notes |
string? | Notes. |
Delivery¶
| Methode | Endpoint | Beschreibung |
|---|---|---|
| GET | /api/v1/delivery |
|
| POST | /api/v1/delivery |
|
| PUT | /api/v1/delivery/assign |
|
| GET | /api/v1/delivery/by-number/{number} |
|
| POST | /api/v1/delivery/dispatch |
|
| GET | /api/v1/delivery/driver-jobs |
Fahrer-Ansicht: eigene offene Aufträge + annehmbare (ohne Fahrer) für den angemeldeten Benutzer. |
| POST | /api/v1/delivery/optimize-route |
|
| POST | /api/v1/delivery/place |
Places a delivery/pickup order with kitchen bons (no payment). |
| POST | /api/v1/delivery/send-route |
|
| GET | /api/v1/delivery/stats |
|
| DELETE | /api/v1/delivery/{id} |
|
| GET | /api/v1/delivery/{id} |
|
| POST | /api/v1/delivery/{id}/accept |
Der angemeldete Fahrer nimmt einen noch nicht zugeordneten Lieferauftrag selbst an. |
| GET | /api/v1/delivery/{id}/bons |
Gets unpaid OpenBons for a delivery order. |
| POST | /api/v1/delivery/{id}/complete-payment |
|
| POST | /api/v1/delivery/{id}/load-for-edit |
Loads a delivery order with OpenBons for editing in cashpoint. |
| POST | /api/v1/delivery/{id}/pay |
|
| PUT | /api/v1/delivery/{id}/reassign-driver |
|
| PUT | /api/v1/delivery/{id}/status |
|
| POST | /api/v1/delivery/{id}/void-item |
Voids a single item from an unpaid delivery order. |
Request Body: POST /api/v1/delivery (Dikas.Api.Contracts.V1.Requests.CashPoint.CreateDeliveryOrderRequest)
| Feld | Typ | Pflicht | Beschreibung |
|---|---|---|---|
orderType |
integer | ||
customerId |
string? | ||
customerName |
string? | ||
customerPhone |
string? | ||
street |
string? | ||
houseNumber |
string? | ||
zipCode |
string? | ||
city |
string? | ||
requestedTime |
string? | ||
items |
array[Dikas.Api.Contracts.V1.Requests.CashPoint.DeliveryOrderItemRequest]? | ||
notes |
string? | ||
source |
string? | ||
externalOrderId |
string? | ||
isPaid |
boolean | ||
paymentMethod |
string? | ||
latitude |
number? | ||
longitude |
number? | ||
fixedDeliveryFee |
number? | Fixe Liefergebühr (Plattform-Bestellungen): überspringt Zonen-Gebühr und Mindestbestellwert-Aufschlag. |
Request Body: PUT /api/v1/delivery/{id}/status (Dikas.Api.Contracts.V1.Requests.CashPoint.UpdateDeliveryStatusRequest)
| Feld | Typ | Pflicht | Beschreibung |
|---|---|---|---|
status |
integer |
Disco¶
| Methode | Endpoint | Beschreibung |
|---|---|---|
| POST | /api/v1/disco/book |
Book an article on a guest's card (bar/counter order). |
| POST | /api/v1/disco/book/batch |
Book multiple articles at once on a guest's card (batch booking from bar/counter). |
| POST | /api/v1/disco/book/{guestId}/{bonIndex}/void |
Void (storno) a booked item on a guest's card. |
| POST | /api/v1/disco/close-all |
Close all open disco guest cards (used during day close). |
| Pre-paid cards are settled, remaining open cards are cancelled. | ||
| POST | /api/v1/disco/enter |
Enter a guest into the disco (card scan at entrance). |
| GET | /api/v1/disco/guest/{cardId} |
Get a guest by card ID. |
| GET | /api/v1/disco/guest/{cardId}/checkout |
Checkout info for a card: what it still owes, what the prepaid balance covers and whether it can |
| leave automatically (self-checkout / mobile exit / turnstile). Does not change anything. | ||
| POST | /api/v1/disco/guest/{cardId}/collect-storno |
Collect (Nachkassieren) a previously storno'd card at the till: re-bills the written-off |
| consumption as revenue (without a second stock movement) and clears the non-payer flag. | ||
| POST | /api/v1/disco/guest/{cardId}/image |
Save a guest's photo (captured at entrance). |
| POST | /api/v1/disco/guest/{cardId}/lock |
Lock a guest's card (prevent further bookings). |
| GET | /api/v1/disco/guest/{cardId}/status |
Status of a scanned card regardless of state — surfaces blocked/storno'd cards (which the |
open-only guest/{cardId} lookup hides) so the bar/wardrobe can show "Gesperrt seit …". |
||
| POST | /api/v1/disco/guest/{cardId}/storno |
Cancel (Storno) a whole card: block it, flag it as a non-payer (Steckbrief) and book the |
| remaining consumption as a stock loss (Schwund). The card stays settleable at the till. | ||
| POST | /api/v1/disco/guest/{cardId}/topup |
Top up a guest's prepaid credit (UploadAccount) at the exit register. |
| Amount is freely choosable. Remaining credit is refunded at checkout. | ||
| POST | /api/v1/disco/guest/{cardId}/transfer |
Transfer a guest's data to a new card (lost/damaged card replacement). |
| POST | /api/v1/disco/guest/{cardId}/unlock |
Unlock a guest's card (allow bookings again). |
| GET | /api/v1/disco/guests |
Get all currently active (inside) guests. |
| POST | /api/v1/disco/leave |
Process a guest leaving the disco (card scan at exit with payment). |
| POST | /api/v1/disco/leave-combined |
Settle several open guest cards ("Pärchen") together on ONE receipt and close them all. |
| Each card keeps its own minimum-consumption/entry/comps/prepaid; the per-card net amounts are | ||
| summed into a single bill that the supplied payments settle. | ||
| POST | /api/v1/disco/personal/close-all |
Settle all open personal (staff) cards as Eigenverbrauch. |
| POST | /api/v1/disco/personal/{cardId}/close |
Settle a single personal (staff) card: Eigenverbrauch allowance is free, the rest is paid via the |
| request payments (like a normal customer payment), then the card is closed. | ||
| POST | /api/v1/disco/table/book-on-card |
Transfer a table's open positions onto a Disco guest card (Disco table mode). |
| Replaces the cash/EC payment: the positions move to the card (billed at exit), the card | ||
| limit is enforced, and the table is freed. Returns the updated guest, or a limit error. | ||
| POST | /api/v1/disco/terminal/pay |
Process a self-service EC payment at the info terminal. |
| The guest scans their card, the open amount is automatically sent to the EC terminal. | ||
| POST | /api/v1/disco/wardrobe/return/{guestId}/{bonIndex} |
Return a wardrobe item: strips the #number from the bon's article name. |
| The charge remains, only the number is removed to mark the item as returned. |
Request Body: POST /api/v1/disco/enter (Dikas.Api.Contracts.V1.Disco.EnterGuestRequest)
| Feld | Typ | Pflicht | Beschreibung |
|---|---|---|---|
guestId |
string? | ||
gender |
integer | ||
enterGroupId |
string? | ||
ruleId |
string? | ||
workplaceId |
string? | ||
workplaceName |
string? | ||
isReEnter |
boolean | ||
isPersonal |
boolean | ||
image |
string? | ||
paymentMethod |
string? | ||
payments |
array[Dikas.Api.Contracts.V1.Disco.LeavePaymentEntry]? | Payments for the entry fee collected at entry (Bar/EC/Kundenguthaben/Split incl. partial). |
Request Body: POST /api/v1/disco/leave (Dikas.Api.Contracts.V1.Disco.LeaveGuestFullRequest)
| Feld | Typ | Pflicht | Beschreibung |
|---|---|---|---|
cardId |
string? | ||
payments |
array[Dikas.Api.Contracts.V1.Disco.LeavePaymentEntry]? | ||
tipAmount |
number | ||
customerId |
string? | ||
isBewirtungsbeleg |
boolean |
DiscoConfig¶
| Methode | Endpoint | Beschreibung |
|---|---|---|
| GET | /api/v1/disco/entergroups |
Get all enter groups. |
| POST | /api/v1/disco/entergroups |
Create a new enter group. |
| DELETE | /api/v1/disco/entergroups/{id} |
Delete an enter group. |
| GET | /api/v1/disco/entergroups/{id} |
Get an enter group by ID. |
| PUT | /api/v1/disco/entergroups/{id} |
Update an enter group. |
Request Body: POST /api/v1/disco/entergroups (Dikas.Api.Contracts.V1.Disco.CreateEnterGroupRequest)
| Feld | Typ | Pflicht | Beschreibung |
|---|---|---|---|
name |
string? | ||
isEnabled |
boolean | ||
showInCashpoint |
boolean | ||
weekDays |
array[integer]? | ||
cardLimit |
integer | ||
enterOnLeave |
boolean | ||
pfand |
number | ||
background |
string? | ||
sortOrder |
integer | ||
rules |
array[Dikas.Api.Contracts.V1.Disco.EnterGroupRuleDto]? | ||
enterTax |
number | ||
customerGroup |
string? | ||
u18 |
boolean | Whole group is U18 (Jugendschutz applies to all guests entering on it). |
Request Body: PUT /api/v1/disco/entergroups/{id} (Dikas.Api.Contracts.V1.Disco.UpdateEnterGroupRequest)
| Feld | Typ | Pflicht | Beschreibung |
|---|---|---|---|
name |
string? | ||
isEnabled |
boolean? | ||
showInCashpoint |
boolean? | ||
weekDays |
array[integer]? | ||
cardLimit |
integer? | ||
enterOnLeave |
boolean? | ||
pfand |
number? | ||
background |
string? | ||
sortOrder |
integer? | ||
rules |
array[Dikas.Api.Contracts.V1.Disco.EnterGroupRuleDto]? | ||
enterTax |
number? | ||
customerGroup |
string? | ||
u18 |
boolean? |
DiscoStats¶
| Methode | Endpoint | Beschreibung |
|---|---|---|
| GET | /api/v1/disco/daylog/{date} |
Get the day log for a specific date. |
| GET | /api/v1/disco/personal/{ownerId}/activity |
Get a staff member's disco activity (personal cards: consumption, Storno, Bruch) for the admin tab. |
| GET | /api/v1/disco/search |
Search guests by card ID, name, or date range. |
| GET | /api/v1/disco/stats |
Get current disco statistics (guest counts, revenue, breakdowns). |
DiscoTurnstile¶
| Methode | Endpoint | Beschreibung |
|---|---|---|
| GET | /api/v1/disco/turnstile/{key}/{cardId} |
Gate check: GET /api/v1/disco/turnstile/{key}/{cardId}. |
200 → card may leave (with optional Restguthaben as refund); 402 → still owes; 423 → locked; |
||
| 409 → already settled; 404 → unknown card; 401 → invalid/missing key. | ||
| POST | /api/v1/disco/turnstile/{key}/{cardId} |
Gate check: GET /api/v1/disco/turnstile/{key}/{cardId}. |
200 → card may leave (with optional Restguthaben as refund); 402 → still owes; 423 → locked; |
||
| 409 → already settled; 404 → unknown card; 401 → invalid/missing key. |
Distributors¶
| Methode | Endpoint | Beschreibung |
|---|---|---|
| GET | /api/v1/distributors |
Get all distributors. |
| POST | /api/v1/distributors |
Create a new distributor. |
| DELETE | /api/v1/distributors/{id} |
Delete a distributor (soft delete). |
| GET | /api/v1/distributors/{id} |
Get a distributor by ID. |
| PUT | /api/v1/distributors/{id} |
Update an existing distributor (only set fields are overwritten). |
Request Body: POST /api/v1/distributors (Dikas.Api.Contracts.V1.Requests.ERP.CreateDistributorRequest)
| Feld | Typ | Pflicht | Beschreibung |
|---|---|---|---|
name |
string? | ||
name2 |
string? | ||
street |
string? | ||
zip |
string? | ||
city |
string? | ||
country |
string? | ||
phone |
string? | ||
email |
string? | ||
fax |
string? | ||
web |
string? | ||
customerNumber |
string? | ||
minOrderValue |
number? | ||
leadTimeDays |
integer? | ||
notes |
string? | ||
isActive |
boolean |
Request Body: PUT /api/v1/distributors/{id} (Dikas.Api.Contracts.V1.Requests.ERP.UpdateDistributorRequest)
| Feld | Typ | Pflicht | Beschreibung |
|---|---|---|---|
name |
string? | ||
name2 |
string? | ||
street |
string? | ||
zip |
string? | ||
city |
string? | ||
country |
string? | ||
phone |
string? | ||
email |
string? | ||
fax |
string? | ||
web |
string? | ||
customerNumber |
string? | ||
minOrderValue |
number? | ||
leadTimeDays |
integer? | ||
notes |
string? | ||
isActive |
boolean? |
Dunning¶
| Methode | Endpoint | Beschreibung |
|---|---|---|
| POST | /api/v1/dunning/execute |
|
| GET | /api/v1/dunning/preview/{customerId} |
Preview the dunning email for a specific customer. |
| POST | /api/v1/dunning/simulate |
Exchanges¶
| Methode | Endpoint | Beschreibung |
|---|---|---|
| GET | /api/v1/exchanges |
List exchanges, optionally filtered by business date, date range, status, and personal ID. |
| GET | /api/v1/exchanges/current |
Get the current open exchange for the logged-in user. |
| POST | /api/v1/exchanges/open |
Open a new exchange/shift. |
| GET | /api/v1/exchanges/{id} |
Get exchange by ID. |
| POST | /api/v1/exchanges/{id}/close |
Close an exchange/shift. |
| GET | /api/v1/exchanges/{id}/print |
Get print bon for a closed exchange. |
Request Body: POST /api/v1/exchanges/open (Dikas.Api.Contracts.V1.Requests.CashPoint.OpenExchangeRequest)
| Feld | Typ | Pflicht | Beschreibung |
|---|---|---|---|
startingCash |
number | Starting cash amount. | |
workplaceId |
string? | Workplace ID. | |
deviceId |
string? | Device ID. | |
notes |
string? | Notes. |
Request Body: POST /api/v1/exchanges/{id}/close (Dikas.Api.Contracts.V1.Requests.CashPoint.CloseExchangeRequest)
| Feld | Typ | Pflicht | Beschreibung |
|---|---|---|---|
actualCash |
number | Actual counted cash amount. | |
paymentVolumes |
array[Dikas.Api.Contracts.V1.Requests.CashPoint.PaymentVolumeRequest]? | Payment volumes with actual counted amounts per method. | |
notes |
string? | Closing notes. |
Export¶
| Methode | Endpoint | Beschreibung |
|---|---|---|
| POST | /api/v1/export/dsfinvk |
|
| GET | /api/v1/export/dsfinvk/{sessionId} |
|
| GET | /api/v1/export/dsfinvk/{sessionId}/download |
|
| POST | /api/v1/export/gdpdu |
|
| GET | /api/v1/export/gdpdu/{sessionId} |
|
| GET | /api/v1/export/gdpdu/{sessionId}/download |
Request Body: POST /api/v1/export/gdpdu (Dikas.Api.Contracts.V1.Requests.Export.StartExportRequest)
| Feld | Typ | Pflicht | Beschreibung |
|---|---|---|---|
startDate |
string | ||
endDate |
string |
Request Body: POST /api/v1/export/dsfinvk (Dikas.Api.Contracts.V1.Requests.Export.StartExportRequest)
| Feld | Typ | Pflicht | Beschreibung |
|---|---|---|---|
startDate |
string | ||
endDate |
string |
Forms¶
| Methode | Endpoint | Beschreibung |
|---|---|---|
| POST | /api/v1/forms/submit |
Request Body: POST /api/v1/forms/submit (Dikas.Api.Application.Features.Forms.Commands.SubmitFormCommand)
| Feld | Typ | Pflicht | Beschreibung |
|---|---|---|---|
formType |
string? | ||
subject |
string? | ||
honeypot |
string? | ||
fields |
array[Dikas.Api.Application.Features.Forms.Commands.FormFieldItem]? |
Haccp¶
| Methode | Endpoint | Beschreibung |
|---|---|---|
| GET | /api/v1/haccp/logs |
|
| POST | /api/v1/haccp/logs |
|
| GET | /api/v1/haccp/logs/{id} |
|
| PUT | /api/v1/haccp/logs/{id}/approve |
Freigabe eines abgeschlossenen Protokolls durch den Verantwortlichen. |
| PUT | /api/v1/haccp/logs/{id}/complete |
|
| GET | /api/v1/haccp/logs/{id}/excel |
Protokoll als Excel-Datei (FlexCel). |
| GET | /api/v1/haccp/logs/{id}/pdf |
Protokoll als PDF (Seitenumbruch, eingebettete Fotos, Unterschriftszeilen). |
| POST | /api/v1/haccp/logs/{id}/photos/{entryIndex} |
|
| GET | /api/v1/haccp/logs/{id}/photos/{name} |
|
| GET | /api/v1/haccp/summary |
HACCP-Compliance-Kennzahlen fuer das Dashboard. |
| GET | /api/v1/haccp/templates |
|
| POST | /api/v1/haccp/templates |
|
| DELETE | /api/v1/haccp/templates/{id} |
|
| PUT | /api/v1/haccp/templates/{id} |
Request Body: POST /api/v1/haccp/templates (Dikas.Api.Contracts.V1.Requests.ERP.CreateHaccpTemplateRequest)
| Feld | Typ | Pflicht | Beschreibung |
|---|---|---|---|
name |
string? | ||
description |
string? | ||
category |
integer | ||
frequency |
integer | ||
isActive |
boolean | ||
sortOrder |
integer | ||
items |
array[Dikas.Api.Contracts.V1.Requests.ERP.HaccpTemplateItemDto]? |
Request Body: PUT /api/v1/haccp/templates/{id} (Dikas.Api.Contracts.V1.Requests.ERP.UpdateHaccpTemplateRequest)
| Feld | Typ | Pflicht | Beschreibung |
|---|---|---|---|
name |
string? | ||
description |
string? | ||
category |
integer? | ||
frequency |
integer? | ||
isActive |
boolean? | ||
sortOrder |
integer? | ||
items |
array[Dikas.Api.Contracts.V1.Requests.ERP.HaccpTemplateItemDto]? |
Invoice¶
| Methode | Endpoint | Beschreibung |
|---|---|---|
| GET | /api/v1/invoices |
List invoices with paging. Filter by customer, status(es), date range, dunning level or free-text search. |
| POST | /api/v1/invoices |
Create a new customer invoice with positions and billing details. |
| POST | /api/v1/invoices/bulk-close |
Bulk-close open invoices up to a cutoff date. |
| GET | /api/v1/invoices/overview |
Get an open-items overview of unpaid invoices, grouped (default: by dunning level). |
| POST | /api/v1/invoices/write-off |
Write off all open invoices of a customer as uncollectible. |
| DELETE | /api/v1/invoices/{id} |
Delete an invoice. |
| GET | /api/v1/invoices/{id} |
Get an invoice by ID. |
| PUT | /api/v1/invoices/{id} |
Update an invoice's positions and billing details. |
| POST | /api/v1/invoices/{id}/cancel |
Cancel an invoice. |
| POST | /api/v1/invoices/{id}/credit-note |
Create a credit note (Gutschrift) against the invoice. |
| POST | /api/v1/invoices/{id}/duplicate |
Create a copy of an existing invoice as a new draft. |
| GET | /api/v1/invoices/{id}/email-preview |
Preview the email that would be sent for this invoice. |
| POST | /api/v1/invoices/{id}/payment |
Record a (partial) payment against the invoice. |
| GET | /api/v1/invoices/{id}/payment-journal |
List the payment journal entries recorded for the invoice. |
| GET | /api/v1/invoices/{id}/pdf |
Download the invoice as a PDF. |
| POST | /api/v1/invoices/{id}/send |
Send the invoice to the customer (marks it as sent; emails the PDF unless disabled in the request). |
| PUT | /api/v1/invoices/{id}/sepa-status |
Update the SEPA direct-debit status of the invoice (e.g. after a bank return/failure). |
| GET | /api/v1/invoices/{id}/xml |
Download the invoice as e-invoice XML (e.g. ZUGFeRD/XRechnung). |
Request Body: POST /api/v1/invoices (Dikas.Api.Contracts.V1.Requests.Customer.CreateInvoiceRequest)
| Feld | Typ | Pflicht | Beschreibung |
|---|---|---|---|
customerId |
string? | ||
positions |
array[Dikas.Api.Contracts.V1.Requests.Customer.InvoicePositionRequest]? | ||
paymentTermDays |
integer | ||
isBankDebit |
boolean | ||
notes |
string? | ||
billingCompanyName |
string? | ||
billingName |
string? | ||
billingStreet |
string? | ||
billingZipCode |
string? | ||
billingCity |
string? | ||
discountPercent |
number | Rechnungs-Gesamtrabatt in % (wirkt nach dem Positionsrabatt auf das Netto). |
Request Body: PUT /api/v1/invoices/{id} (Dikas.Api.Contracts.V1.Requests.Customer.UpdateInvoiceRequest)
| Feld | Typ | Pflicht | Beschreibung |
|---|---|---|---|
customerId |
string? | ||
positions |
array[Dikas.Api.Contracts.V1.Requests.Customer.InvoicePositionRequest]? | ||
paymentTermDays |
integer | ||
isBankDebit |
boolean | ||
notes |
string? | ||
billingCompanyName |
string? | ||
billingName |
string? | ||
billingStreet |
string? | ||
billingZipCode |
string? | ||
billingCity |
string? | ||
discountPercent |
number | Rechnungs-Gesamtrabatt in % (wirkt nach dem Positionsrabatt auf das Netto). |
MenuCard¶
| Methode | Endpoint | Beschreibung |
|---|---|---|
| DELETE | /api/v1/menu-card/custom-template |
Remove the uploaded custom Excel template and clear its metadata. |
| GET | /api/v1/menu-card/custom-template |
Download the previously uploaded custom Excel template. Returns 404 if none is stored. |
| POST | /api/v1/menu-card/custom-template |
Upload a custom Excel template (.xls/.xlsx, max 5 MB) to use when rendering the menu card. |
| GET | /api/v1/menu-card/default-template |
Download the built-in default menu-card Excel template, pre-filled from the current settings. |
| GET | /api/v1/menu-card/excel |
Export the menu card as an Excel workbook (speisekarte.xlsx). |
| GET | /api/v1/menu-card/pdf |
Render the current menu card as a PDF document. |
| GET | /api/v1/menu-card/settings |
Get the menu-card layout settings (title, columns, page format, and what to show). |
| PUT | /api/v1/menu-card/settings |
Update the menu-card layout settings. |
| GET | /api/v1/menu-card/template |
Download a blank Excel template for editing the menu card offline. |
Request Body: PUT /api/v1/menu-card/settings (Dikas.Api.Contracts.V1.Requests.Config.UpdateMenuCardSettingsRequest)
| Feld | Typ | Pflicht | Beschreibung |
|---|---|---|---|
restaurantName |
string? | ||
subtitle |
string? | ||
footerText |
string? | ||
showAllergens |
boolean | ||
showArticleNumbers |
boolean | ||
showDescriptions |
boolean | ||
showPrices |
boolean | ||
showGroupDescriptions |
boolean | ||
columnCount |
integer | ||
pageFormat |
string? | ||
fontSize |
integer | ||
groupIds |
array[string]? | ||
headerColor |
string? | ||
currency |
string? |
OnlineCheckout¶
| Methode | Endpoint | Beschreibung |
|---|---|---|
| POST | /api/v1/online-checkout/create |
Bestellung erstellen |
| GET | /api/v1/online-checkout/customer-lookup |
Kunde anhand E-Mail nachschlagen (für wiederkehrende Gäste) |
| GET | /api/v1/online-checkout/geocoding/geocode |
Geocodierung (öffentlich, für Shop-Checkout) |
| GET | /api/v1/online-checkout/geocoding/place-details |
Place-Details (öffentlich, für Shop-Checkout) |
| GET | /api/v1/online-checkout/geocoding/search |
Adresssuche (öffentlich, für Shop-Checkout) |
| GET | /api/v1/online-checkout/history |
Bestellverlauf des Kunden |
| GET | /api/v1/online-checkout/pending |
Offene Online-Bestellungen (POS) |
| GET | /api/v1/online-checkout/stripe-key |
Stripe Publishable Key abfragen |
| GET | /api/v1/online-checkout/today |
Alle heutigen Online-Bestellungen (POS-Übersicht) |
| POST | /api/v1/online-checkout/validate-address |
Lieferadresse validieren |
| GET | /api/v1/online-checkout/{id} |
Bestellstatus abfragen |
| POST | /api/v1/online-checkout/{id}/cancel |
Bestellung stornieren (nur vor Bestaetigung) |
| POST | /api/v1/online-checkout/{id}/confirm |
Bestellung bestaetigen (POS/Admin) |
| POST | /api/v1/online-checkout/{id}/init-payment |
Zahlung initiieren (Stripe PaymentIntent erstellen) |
| POST | /api/v1/online-checkout/{id}/reject |
Bestellung ablehnen (POS/Admin) |
| PUT | /api/v1/online-checkout/{id}/status |
Status aktualisieren (POS/Admin) |
| POST | /api/v1/online-checkout/{id}/verify-payment |
Zahlung serverseitig verifizieren und Bestellung als bezahlt markieren (Fallback ohne Webhook) |
Request Body: POST /api/v1/online-checkout/create (Dikas.Api.Application.Features.OnlineOrder.Contracts.CreateOnlineOrderRequest)
| Feld | Typ | Pflicht | Beschreibung |
|---|---|---|---|
orderType |
integer | ||
customerId |
string? | ||
customerEmail |
string? | ||
customerName |
string? | ||
customerPhone |
string? | ||
street |
string? | ||
houseNumber |
string? | ||
zipCode |
string? | ||
city |
string? | ||
deliveryNotes |
string? | ||
tableId |
string? | ||
items |
array[Dikas.Api.Application.Features.OnlineOrder.Contracts.OnlineOrderItemRequest]? | ||
requestedTime |
string? | ||
paymentMethod |
string? | ||
kitchenNotes |
string? |
Request Body: POST /api/v1/online-checkout/{id}/reject (Dikas.Api.Web.Controllers.V1.OnlineOrder.RejectRequest)
| Feld | Typ | Pflicht | Beschreibung |
|---|---|---|---|
reason |
string? |
OnlineMenu¶
| Methode | Endpoint | Beschreibung |
|---|---|---|
| GET | /api/v1/online-menu/menu |
Get the published menu grouped by category, with prices, images, dietary info and selectable options. |
| GET | /api/v1/online-menu/shop-info |
Get public shop information: name, branding and legal/contact details. |
| GET | /api/v1/online-menu/status |
Get whether the shop is currently open for orders, plus the next open or current close time. |
| GET | /api/v1/online-menu/tables/{tableId} |
Resolve a table by ID for QR table ordering (name and area). Returns 404 for unknown or deleted tables. |
OnlineShopConfig¶
| Methode | Endpoint | Beschreibung |
|---|---|---|
| GET | /api/v1/online-shop/banner |
Fetch the shop banner image. Publicly accessible for the storefront; returns 404 if none is set. |
| POST | /api/v1/online-shop/banner |
Upload the shop banner image (multipart). The image is converted to WebP. |
| GET | /api/v1/online-shop/config |
Get the full online-shop configuration, creating a default one on first access. |
| PUT | /api/v1/online-shop/config |
Update the online-shop configuration (branding, hours, payment, legal texts, article/group visibility, etc.). |
| GET | /api/v1/online-shop/favicon |
Fetch the shop favicon. Publicly accessible for the storefront; returns 404 if none is set. |
| POST | /api/v1/online-shop/favicon |
Upload the shop favicon (multipart). The image is converted to WebP. |
| POST | /api/v1/online-shop/generate-impressum |
Generate Impressum (legal notice) HTML from the stored company data and return it. |
| POST | /api/v1/online-shop/generate-legal |
Regenerate all legal pages (Impressum, privacy policy, terms, right of withdrawal) from company data and save them. |
| POST | /api/v1/online-shop/initialize |
Initialize the shop with sensible defaults, pre-filling company data from the license and generating legal pages. |
| GET | /api/v1/online-shop/logo |
Fetch the shop logo image. Publicly accessible for the storefront; returns 404 if none is set. |
| POST | /api/v1/online-shop/logo |
Upload the shop logo (multipart). The image is converted to WebP. |
| POST | /api/v1/online-shop/stripe/test |
Stripe-Verbindung testen |
| GET | /api/v1/online-shop/themes |
List the available shop themes. |
OpenBons¶
| Methode | Endpoint | Beschreibung |
|---|---|---|
| GET | /api/v1/open-bons |
Get all open bons with optional filtering. |
| POST | /api/v1/open-bons |
Create a new open bon (add item to order). |
| POST | /api/v1/open-bons/batch |
Book a round of items onto a table (the main "place order" call). |
| GET | /api/v1/open-bons/kitchen |
Get open bons for kitchen display (filtered by work status and kitchen print option). |
| POST | /api/v1/open-bons/move |
Move open bon items to a different table. |
| GET | /api/v1/open-bons/table/{tableId}/summary |
Get a table's running tab: all open (unpaid) items and the current total. |
| PUT | /api/v1/open-bons/{id} |
Update an open bon item. |
| POST | /api/v1/open-bons/{id}/void |
Void/cancel an open bon item. |
| PATCH | /api/v1/open-bons/{id}/work-status |
Update the work status of an open bon (kitchen workflow). |
Request Body: POST /api/v1/open-bons (Dikas.Api.Contracts.V1.Requests.Gastro.CreateOpenBonRequest)
| Feld | Typ | Pflicht | Beschreibung |
|---|---|---|---|
bonId |
string? | Existing bon ID to add to, or null to create new. | |
tableId |
string? | Table ID for the order. | |
subTableName |
string? | Sub-table name (e.g., "Gast 1"). | |
seatNumber |
integer? | Seat number for seat-based ordering. | |
articleId |
string? | Article to order. | |
customerGroupId |
string? | Customer group for pricing. | |
price |
number? | Override price (null = use article price). | |
count |
number | Quantity to order. | |
gang |
string? | Course number. | |
extraOptions |
array[Dikas.Api.Contracts.V1.Requests.Gastro.CreateOpenBonExtraOptionRequest]? | Extra options/modifiers. | |
extraDescription |
string? | Additional notes/description. | |
workplaceId |
string? | Workplace this order was created at (optional). |
Request Body: POST /api/v1/open-bons/batch (Dikas.Api.Contracts.V1.Requests.Gastro.CreateOpenBonsBatchRequest)
| Feld | Typ | Pflicht | Beschreibung |
|---|---|---|---|
tableId |
string? | ||
subTableName |
string? | ||
customerGroupId |
string? | ||
printerId |
string? | ||
workplaceId |
string? | ||
items |
array[Dikas.Api.Contracts.V1.Requests.Gastro.BatchOpenBonItem]? |
OptionTemplates¶
| Methode | Endpoint | Beschreibung |
|---|---|---|
| GET | /api/v1/option-templates |
List all option templates. |
| POST | /api/v1/option-templates |
Create a new option template. |
| DELETE | /api/v1/option-templates/{id} |
Delete an option template. Returns 404 if it does not exist. |
| GET | /api/v1/option-templates/{id} |
Get a single option template by ID. |
| PUT | /api/v1/option-templates/{id} |
Update an existing option template. |
Request Body: POST /api/v1/option-templates (Dikas.Api.Contracts.V1.Requests.ERP.CreateOptionTemplateRequest)
| Feld | Typ | Pflicht | Beschreibung |
|---|---|---|---|
name |
string? | ||
description |
string? | ||
isActive |
boolean | ||
sortOrder |
integer | ||
groups |
array[Dikas.Api.Contracts.V1.Requests.ERP.ArticleOptionGroupDto]? |
Request Body: PUT /api/v1/option-templates/{id} (Dikas.Api.Contracts.V1.Requests.ERP.UpdateOptionTemplateRequest)
| Feld | Typ | Pflicht | Beschreibung |
|---|---|---|---|
name |
string? | ||
description |
string? | ||
isActive |
boolean? | ||
sortOrder |
integer? | ||
groups |
array[Dikas.Api.Contracts.V1.Requests.ERP.ArticleOptionGroupDto]? |
Payments¶
| Methode | Endpoint | Beschreibung |
|---|---|---|
| POST | /api/v1/payments/direct |
Ring up and pay an over-the-counter sale in one call (no table involved). |
| POST | /api/v1/payments/table |
Pay a table's open orders and close them into a receipt. |
Request Body: POST /api/v1/payments/table (Dikas.Api.Contracts.V1.Requests.CashPoint.ProcessTablePaymentRequest)
| Feld | Typ | Pflicht | Beschreibung |
|---|---|---|---|
tableId |
string? | Table ID to pay. | |
openBonIds |
array[string]? | Specific open bon IDs to pay (null = pay all). | |
items |
array[Dikas.Api.Contracts.V1.Requests.CashPoint.PartialPaymentItemRequest]? | Partial payment items (alternative to OpenBonIds). |
Allows paying a partial quantity of an item. |
| payments | array[Dikas.Api.Contracts.V1.Requests.CashPoint.PaymentEntryRequest]? | | Payment entries. |
| customerId | string? | | Customer ID to link. |
| tipAmount | number | | Tip amount. |
| cashGiven | number | | Cash amount given by customer (for change calculation). |
| notes | string? | | Notes. |
| printerId | string? | | Target printer ID for auto-printing the receipt bon. |
| autoPrint | boolean | | When true, print the receipt even if no explicit PrinterId is set (uses DefaultPrinterId). |
| isBewirtungsbeleg | boolean | | When true, marks the receipt as a Bewirtungsbeleg (§4 Abs. 5 Nr. 2 EStG). |
| bewirtungTipAmount | number | | Tip amount for Bewirtungsbeleg (included in total for 70% calculation). |
| depositOverageMode | integer | | Abschluss bei Reservierungs-Anzahlung > Verbrauch (negative Netto-Summe):
0 = normal (Zahlung erforderlich), 1 = Überschuss an Gast auszahlen (Rückgeld),
2 = Mindestverzehr (Überschuss verfällt, Gutschrift auf Verbrauch gedeckelt). |
Request Body: POST /api/v1/payments/direct (Dikas.Api.Contracts.V1.Requests.CashPoint.ProcessDirectSaleRequest)
| Feld | Typ | Pflicht | Beschreibung |
|---|---|---|---|
items |
array[Dikas.Api.Contracts.V1.Requests.CashPoint.DirectSaleItemRequest]? | Items to sell. | |
payments |
array[Dikas.Api.Contracts.V1.Requests.CashPoint.PaymentEntryRequest]? | Payment entries. | |
customerId |
string? | Customer ID to link. | |
customerGroupId |
string? | Customer group for pricing. | |
tipAmount |
number | Tip amount. | |
cashGiven |
number | Cash amount given by customer (for change calculation). | |
notes |
string? | Notes. | |
payoutAmount |
number | Payout amount from customer account balance (0 = no payout). | |
printerId |
string? | Target printer ID for auto-printing the receipt bon. | |
autoPrint |
boolean | When true, print the receipt even if no explicit PrinterId is set (uses DefaultPrinterId). | |
workplaceId |
string? | Workplace ID for price resolution and tracking. | |
isBewirtungsbeleg |
boolean | When true, marks the receipt as a Bewirtungsbeleg (§4 Abs. 5 Nr. 2 EStG). | |
bewirtungTipAmount |
number | Tip amount for Bewirtungsbeleg (included in total for 70% calculation). |
PublicReceipt¶
| Methode | Endpoint | Beschreibung |
|---|---|---|
| GET | /api/v1/public/receipt/{id}/{secKey} |
Öffentliche, anzeige-freundliche Beleg-Daten (für mobilen QR-Code-Beleg). |
| GET | /api/v1/public/receipt/{id}/{secKey}/pdf |
Öffentliches Beleg-PDF (für mobilen QR-Code-Beleg). |
PublicReservations¶
| Methode | Endpoint | Beschreibung |
|---|---|---|
| POST | /api/v1/public/reservations |
Online-Reservierung anlegen (Status: Ausstehend, wird vom Personal bestätigt). |
| GET | /api/v1/public/reservations/availability |
Verfügbare Zeitslots für ein Datum und eine Personenzahl. |
| POST | /api/v1/public/reservations/cancel |
Reservierung stornieren (bis 1 Stunde vorher, per Nummer + E-Mail). |
| GET | /api/v1/public/reservations/lookup |
Reservierung per Nummer + E-Mail nachschlagen. |
| GET | /api/v1/public/reservations/status |
Ist die Online-Reservierung aktiviert? (für die Shop-Navigation) |
| POST | /api/v1/public/reservations/{id}/deposit/init |
Anzahlung starten — liefert Stripe ClientSecret + PublishableKey. |
| POST | /api/v1/public/reservations/{id}/deposit/verify |
Anzahlung serverseitig verifizieren (Fallback ohne Webhook). |
Request Body: POST /api/v1/public/reservations (Dikas.Api.Application.Features.Gastro.Commands.CreatePublicReservationCommand)
| Feld | Typ | Pflicht | Beschreibung |
|---|---|---|---|
guestName |
string? | ||
guestPhone |
string? | ||
guestEmail |
string? | ||
reservationDateTime |
string | ||
guestCount |
integer | ||
notes |
string? |
Receipts¶
| Methode | Endpoint | Beschreibung |
|---|---|---|
| GET | /api/v1/receipts |
Get all receipts with optional filtering. |
| GET | /api/v1/receipts/today |
Get today's receipts. |
| GET | /api/v1/receipts/{id} |
Get a receipt by ID. |
| POST | /api/v1/receipts/{id}/assign-customer |
Assign a customer to an existing receipt (for Bewirtungsbeleg >=250€). |
| POST | /api/v1/receipts/{id}/bewirtungsbeleg/email |
Send Bewirtungsbeleg PDF via email. |
| GET | /api/v1/receipts/{id}/bewirtungsbeleg/pdf |
Download a Bewirtungsbeleg as PDF. |
| POST | /api/v1/receipts/{id}/change-payment |
Change the payment type of a receipt. |
| POST | /api/v1/receipts/{id}/email |
Send receipt as PDF + ZUGFeRD-XML via email. |
| GET | /api/v1/receipts/{id}/pdf |
Download a receipt as PDF. |
| GET | /api/v1/receipts/{id}/print |
Get print bon for a receipt. |
| POST | /api/v1/receipts/{id}/reopen |
Reopen a receipt: voids it and re-books items as open bons. |
| POST | /api/v1/receipts/{id}/void |
Void/cancel a receipt. |
Request Body: POST /api/v1/receipts/{id}/void (Dikas.Api.Web.Controllers.V1.CashPoint.VoidReceiptRequest)
| Feld | Typ | Pflicht | Beschreibung |
|---|---|---|---|
reason |
string? | ||
terminalId |
string? |
Request Body: POST /api/v1/receipts/{id}/change-payment (Dikas.Api.Web.Controllers.V1.CashPoint.ChangePaymentTypeRequest)
| Feld | Typ | Pflicht | Beschreibung |
|---|---|---|---|
newPaymentMethod |
string? |
Reports¶
| Methode | Endpoint | Beschreibung |
|---|---|---|
| GET | /api/v1/reports/article-stats |
Get article statistics (bestseller/worst seller). |
| GET | /api/v1/reports/daily-aggregate |
Get lightweight daily revenue aggregates (gross/tax/net/receipt count per day). |
| Served from pre-computed sums (CouchDB map/reduce view) — response time is | ||
| independent of the number of receipts in the range. Ideal for dashboards. | ||
| GET | /api/v1/reports/dayclose |
Get day close history. |
| GET | /api/v1/reports/financial-overview |
Get financial overview for a year with optional comparison year. |
| GET | /api/v1/reports/hourly |
Get hourly revenue breakdown. |
| GET | /api/v1/reports/points |
Get loyalty points report. |
| GET | /api/v1/reports/revenue |
Get revenue report for a date range. |
| GET | /api/v1/reports/staff-discounts |
Get staff discount report for a date range. |
| GET | /api/v1/reports/stock |
Get stock report: stock value, consumption and loss overview per stock. |
| Requires stock.view permission. |
Reservations¶
| Methode | Endpoint | Beschreibung |
|---|---|---|
| GET | /api/v1/reservations |
Get all reservations with optional filtering. |
| POST | /api/v1/reservations |
Create a reservation for a guest. |
| GET | /api/v1/reservations/today |
Get today's reservations. |
| GET | /api/v1/reservations/upcoming |
Get upcoming reservations (next 7 days). |
| GET | /api/v1/reservations/{id} |
Get a single reservation by ID. |
| PUT | /api/v1/reservations/{id} |
Update reservation details (guest, time, party size, table, notes). |
| POST | /api/v1/reservations/{id}/cancel |
Cancel a reservation. |
| POST | /api/v1/reservations/{id}/confirm |
Confirm a reservation. |
| POST | /api/v1/reservations/{id}/deposit/forfeit |
Bezahlte Anzahlung einbehalten (No-Show-Gebühr, Personal-Entscheidung). |
| POST | /api/v1/reservations/{id}/deposit/refund |
Bezahlte Anzahlung an den Gast zurückerstatten (Personal-Entscheidung). |
| POST | /api/v1/reservations/{id}/seat |
Mark a reservation as seated. |
| PATCH | /api/v1/reservations/{id}/status |
Update a reservation's status. |
Request Body: POST /api/v1/reservations (Dikas.Api.Contracts.V1.Requests.Gastro.CreateReservationRequest)
| Feld | Typ | Pflicht | Beschreibung |
|---|---|---|---|
guestName |
string? | Guest name. | |
guestPhone |
string? | Guest phone. | |
guestEmail |
string? | Guest email. | |
customerId |
string? | Customer ID if existing customer. | |
reservationDateTime |
string | Reservation date and time. | |
durationMinutes |
integer | Duration in minutes (default: 120). | |
guestCount |
integer | Number of guests. | |
tableId |
string? | Preferred table ID. | |
source |
string? | Source (Manual, Phone, Email, Website, Resmio, OpenTable). | |
externalReferenceId |
string? | External reference ID. | |
notes |
string? | Special requests/notes. | |
internalNotes |
string? | Internal notes. |
Request Body: PUT /api/v1/reservations/{id} (Dikas.Api.Contracts.V1.Requests.Gastro.UpdateReservationRequest)
| Feld | Typ | Pflicht | Beschreibung |
|---|---|---|---|
guestName |
string? | ||
guestPhone |
string? | ||
guestEmail |
string? | ||
reservationDateTime |
string? | ||
durationMinutes |
integer? | ||
guestCount |
integer? | ||
tableId |
string? | ||
notes |
string? | ||
internalNotes |
string? |
SavedTransfer¶
| Methode | Endpoint | Beschreibung |
|---|---|---|
| GET | /api/v1/saved-transfers |
List saved transfer templates, optionally filtered by status. |
| POST | /api/v1/saved-transfers |
Create a new saved transfer template. |
| DELETE | /api/v1/saved-transfers/{id} |
Delete a saved transfer template. |
| GET | /api/v1/saved-transfers/{id} |
Get a saved transfer template by ID. |
| PUT | /api/v1/saved-transfers/{id} |
Update a saved transfer template. |
| POST | /api/v1/saved-transfers/{id}/complete |
Mark the saved transfer as completed/paid. |
| POST | /api/v1/saved-transfers/{id}/execute |
Execute the saved transfer via FinTS/HBCI online banking. |
| POST | /api/v1/saved-transfers/{id}/reset |
Reset the saved transfer back to its initial (pending) state. |
Request Body: POST /api/v1/saved-transfers (Dikas.Api.Contracts.V1.Requests.Customer.CreateSavedTransferRequest)
| Feld | Typ | Pflicht | Beschreibung |
|---|---|---|---|
recipientName |
string? | ||
recipientIban |
string? | ||
recipientBic |
string? | ||
amount |
number | ||
purpose |
string? | ||
endToEndId |
string? | ||
bankAccountId |
string? |
Request Body: PUT /api/v1/saved-transfers/{id} (Dikas.Api.Contracts.V1.Requests.Customer.UpdateSavedTransferRequest)
| Feld | Typ | Pflicht | Beschreibung |
|---|---|---|---|
recipientName |
string? | ||
recipientIban |
string? | ||
recipientBic |
string? | ||
amount |
number | ||
purpose |
string? | ||
endToEndId |
string? | ||
bankAccountId |
string? |
Seats¶
| Methode | Endpoint | Beschreibung |
|---|---|---|
| GET | /api/v1/seats |
Aktuell belegte Seats (= aktive Geräte) inkl. Limit (N) und Belegungszeitpunkt. |
SepaMandate¶
| Methode | Endpoint | Beschreibung |
|---|---|---|
| GET | /api/v1/sepa-mandates |
List a customer's SEPA mandates. The customerId query parameter is required. |
| POST | /api/v1/sepa-mandates |
Create a new SEPA direct-debit mandate for a customer. |
| GET | /api/v1/sepa-mandates/sign/{token} |
Public: load a mandate by its signing token for the customer-facing signature page. |
| POST | /api/v1/sepa-mandates/sign/{token} |
Public: submit the customer's signature (base64 image) to complete and activate the mandate. |
| GET | /api/v1/sepa-mandates/{id} |
Get a SEPA mandate by ID. |
| POST | /api/v1/sepa-mandates/{id}/revoke |
Revoke an active mandate so it can no longer be used for collection. |
| POST | /api/v1/sepa-mandates/{id}/send |
Send the mandate to the customer for signature (generates a token-based signing link). |
Request Body: POST /api/v1/sepa-mandates (Dikas.Api.Application.Features.Portal.Commands.CreateSepaMandateCommand)
| Feld | Typ | Pflicht | Beschreibung |
|---|---|---|---|
customerId |
string? | ||
debtorName |
string? | ||
debtorIban |
string? | ||
debtorBic |
string? | ||
mandateType |
integer |
Request Body: POST /api/v1/sepa-mandates/sign/{token} (Dikas.Api.Web.Controllers.V1.Customer.SignMandateRequest)
| Feld | Typ | Pflicht | Beschreibung |
|---|---|---|---|
signatureImageBase64 |
string? |
ShiftPositions¶
| Methode | Endpoint | Beschreibung |
|---|---|---|
| GET | /api/v1/shift-positions |
List all shift positions. |
| POST | /api/v1/shift-positions |
Create a new shift position. |
| DELETE | /api/v1/shift-positions/{id} |
Delete a shift position. |
| GET | /api/v1/shift-positions/{id} |
Get a shift position by ID. |
| PUT | /api/v1/shift-positions/{id} |
Update a shift position — name, colour, icon, sort order or active flag. |
Request Body: POST /api/v1/shift-positions (Dikas.Api.Contracts.V1.Requests.HR.CreateShiftPositionRequest)
| Feld | Typ | Pflicht | Beschreibung |
|---|---|---|---|
name |
string? | ||
color |
string? | ||
icon |
string? | ||
sortOrder |
integer | ||
isActive |
boolean |
Request Body: PUT /api/v1/shift-positions/{id} (Dikas.Api.Contracts.V1.Requests.HR.UpdateShiftPositionRequest)
| Feld | Typ | Pflicht | Beschreibung |
|---|---|---|---|
name |
string? | ||
color |
string? | ||
icon |
string? | ||
sortOrder |
integer | ||
isActive |
boolean |
ShiftSwaps¶
| Methode | Endpoint | Beschreibung |
|---|---|---|
| GET | /api/v1/shift-swaps |
List all shift swaps, optionally filtered by status. |
| POST | /api/v1/shift-swaps |
Offer one of the current user's shifts up for a swap. |
| GET | /api/v1/shift-swaps/my |
List shift swaps relevant to the current user — offered by them or open for them to take. |
| POST | /api/v1/shift-swaps/{id}/accept |
Accept an offered shift swap as the taking colleague (still pending manager approval). |
| POST | /api/v1/shift-swaps/{id}/approve |
Approve an accepted swap (manager action); the shift is reassigned to the accepting colleague. |
| POST | /api/v1/shift-swaps/{id}/reject |
Reject a shift swap (manager action); the shift stays with its original owner. |
Request Body: POST /api/v1/shift-swaps (Dikas.Api.Contracts.V1.Requests.HR.OfferShiftSwapRequest)
| Feld | Typ | Pflicht | Beschreibung |
|---|---|---|---|
shiftId |
string? | ||
note |
string? |
ShiftTemplates¶
| Methode | Endpoint | Beschreibung |
|---|---|---|
| GET | /api/v1/shift-templates |
List all shift templates. |
| POST | /api/v1/shift-templates |
Create a new shift template. |
| DELETE | /api/v1/shift-templates/{id} |
Delete a shift template. |
| GET | /api/v1/shift-templates/{id} |
Get a shift template by ID. |
| PUT | /api/v1/shift-templates/{id} |
Update a shift template — name, times, break, position, sort order or active flag. |
Request Body: POST /api/v1/shift-templates (Dikas.Api.Contracts.V1.Requests.HR.CreateShiftTemplateRequest)
| Feld | Typ | Pflicht | Beschreibung |
|---|---|---|---|
name |
string? | ||
startTime |
string? | ||
endTime |
string? | ||
breakMinutes |
integer | ||
positionId |
string? | ||
sortOrder |
integer | ||
isActive |
boolean |
Request Body: PUT /api/v1/shift-templates/{id} (Dikas.Api.Contracts.V1.Requests.HR.UpdateShiftTemplateRequest)
| Feld | Typ | Pflicht | Beschreibung |
|---|---|---|---|
name |
string? | ||
startTime |
string? | ||
endTime |
string? | ||
breakMinutes |
integer | ||
positionId |
string? | ||
sortOrder |
integer | ||
isActive |
boolean |
Shifts¶
| Methode | Endpoint | Beschreibung |
|---|---|---|
| GET | /api/v1/shifts |
List shifts within a date range, optionally filtered by staff member or position; includes drafts by default. |
| POST | /api/v1/shifts |
Create one or more shifts in a single batch. |
| POST | /api/v1/shifts/auto-plan |
Auto-generate a shift plan for a week from templates, staff availabilities and positions. |
| GET | /api/v1/shifts/config |
Get the shift-planning configuration — week start, default day times, enabled validation checks and surcharges. |
| PUT | /api/v1/shifts/config |
Update the shift-planning configuration. |
| POST | /api/v1/shifts/confirm-read |
Record that the current user has read the published plan for a week (creates a read receipt). |
| POST | /api/v1/shifts/copy-week |
Copy all shifts from one week to another, optionally as drafts. |
| GET | /api/v1/shifts/live-productivity |
Get live productivity metrics for the currently active shifts (e.g. labour cost against revenue). |
| GET | /api/v1/shifts/my |
Get the current user's personal shift plan for a date range. |
| GET | /api/v1/shifts/payroll-export |
Export worked shift hours as a payroll CSV (Lohnarten) for a date range. |
| GET | /api/v1/shifts/print |
Render the week's roster as a printable PDF (Dienstplan). |
| POST | /api/v1/shifts/publish-week |
Publish all draft shifts of a week, making them visible to staff. Returns the number of shifts published. |
| GET | /api/v1/shifts/read-receipts |
List read receipts for a week — which staff have acknowledged the published plan. |
| GET | /api/v1/shifts/report |
Get a shift report over a date range, optionally scoped to a single staff member. |
| GET | /api/v1/shifts/today |
Get the current user's shift for a given day, or null if none is scheduled. |
| GET | /api/v1/shifts/validate |
Run the labour-law and planning checks for a week and return the resulting warnings and errors. |
| GET | /api/v1/shifts/week-summary |
Get aggregate totals for a week — scheduled hours, labour cost and staffing. |
| DELETE | /api/v1/shifts/{id} |
Delete a shift. |
| PUT | /api/v1/shifts/{id} |
Update a single shift — date, times, break, position, assignee, status or note. |
| POST | /api/v1/shifts/{id}/claim |
Claim an open (unassigned) shift for the current user. |
Request Body: POST /api/v1/shifts (Dikas.Api.Contracts.V1.Requests.HR.CreateShiftsRequest)
| Feld | Typ | Pflicht | Beschreibung |
|---|---|---|---|
items |
array[Dikas.Api.Contracts.V1.Requests.HR.ShiftItemRequest]? |
Request Body: PUT /api/v1/shifts/{id} (Dikas.Api.Contracts.V1.Requests.HR.UpdateShiftRequest)
| Feld | Typ | Pflicht | Beschreibung |
|---|---|---|---|
date |
string? | ||
startTime |
string? | ||
endTime |
string? | ||
breakMinutes |
integer | ||
positionId |
string? | ||
staffId |
string? | ||
status |
integer | ||
note |
string? |
ShopAccount¶
| Methode | Endpoint | Beschreibung |
|---|---|---|
| POST | /api/v1/shop-account/forgot-password |
|
| POST | /api/v1/shop-account/login |
|
| GET | /api/v1/shop-account/me |
|
| GET | /api/v1/shop-account/orders |
|
| POST | /api/v1/shop-account/orders/{id}/bewirtungsbeleg |
Bewirtungsbeleg als PDF (Anlass/Teilnehmer optional; leer = Linien zum handschriftlichen Ausfüllen). |
| POST | /api/v1/shop-account/orders/{id}/bewirtungsbeleg/email |
Bewirtungsbeleg per E-Mail an den Kunden senden. |
| GET | /api/v1/shop-account/orders/{id}/receipt |
Fiskalischen Beleg der Bestellung als PDF herunterladen (wird bei Bedarf erzeugt). |
| POST | /api/v1/shop-account/orders/{id}/receipt/email |
Beleg der Bestellung per E-Mail an den Kunden senden. |
| GET | /api/v1/shop-account/orders/{id}/reorder |
Aus einer früheren Bestellung einen aktuellen Warenkorb bauen (revalidiert gegen die Karte). |
| POST | /api/v1/shop-account/refresh |
|
| POST | /api/v1/shop-account/register |
|
| POST | /api/v1/shop-account/reset-password |
Request Body: POST /api/v1/shop-account/register (Dikas.Api.Application.Features.OnlineOrder.Commands.ShopRegisterCommand)
| Feld | Typ | Pflicht | Beschreibung |
|---|---|---|---|
email |
string? | ||
password |
string? | ||
firstName |
string? | ||
lastName |
string? | ||
phone |
string? |
Request Body: POST /api/v1/shop-account/login (Dikas.Api.Application.Features.Portal.Commands.PortalLoginCommand)
| Feld | Typ | Pflicht | Beschreibung |
|---|---|---|---|
email |
string? | ||
password |
string? |
Spendings¶
| Methode | Endpoint | Beschreibung |
|---|---|---|
| GET | /api/v1/spendings |
List spendings with optional filters. |
| POST | /api/v1/spendings |
Create a new spending entry. |
| POST | /api/v1/spendings/migrate-categories |
Migrate old SpendingTypes (OperationalConfig) to ExpenseCategories |
| and update existing spendings. | ||
| DELETE | /api/v1/spendings/{id} |
Delete a spending entry (soft delete). |
| GET | /api/v1/spendings/{id} |
Get a spending entry by ID. |
| PUT | /api/v1/spendings/{id} |
Update an existing spending entry. |
| POST | /api/v1/spendings/{id}/attachments |
Upload an attachment to a spending entry. |
| DELETE | /api/v1/spendings/{id}/attachments/{name} |
Delete an attachment from a spending entry. |
| GET | /api/v1/spendings/{id}/attachments/{name} |
Download an attachment from a spending entry. |
Request Body: POST /api/v1/spendings (Dikas.Api.Contracts.V1.Requests.CashPoint.CreateSpendingRequest)
| Feld | Typ | Pflicht | Beschreibung |
|---|---|---|---|
comment |
string? | Description/comment. | |
accountType |
integer | Account type (Kontotyp). | |
accountMode |
integer | Account mode: 0=NotSet, 1=Expense, 2=Transfer, 3=Income, 4=DeferredPayment. | |
expenseCategoryId |
string? | ||
receiptDate |
string | Receipt/booking date. | |
amountNormal |
number | Gross amount at 19% tax rate. | |
amountReduced |
number | Gross amount at 7% tax rate. | |
amountTaxFree |
number | Gross amount at 0% tax rate. |
Request Body: PUT /api/v1/spendings/{id} (Dikas.Api.Contracts.V1.Requests.CashPoint.UpdateSpendingRequest)
| Feld | Typ | Pflicht | Beschreibung |
|---|---|---|---|
comment |
string? | Description/comment (optional partial update). | |
accountType |
integer? | Account type (optional partial update). | |
accountMode |
integer? | Account mode (optional partial update). | |
expenseCategoryId |
string? | ||
receiptDate |
string? | Receipt/booking date (optional partial update). | |
amountNormal |
number? | Gross amount at 19% (optional partial update). | |
amountReduced |
number? | Gross amount at 7% (optional partial update). | |
amountTaxFree |
number? | Gross amount at 0% (optional partial update). |
Staff¶
| Methode | Endpoint | Beschreibung |
|---|---|---|
| GET | /api/v1/staff |
Get all staff members with optional filtering. |
| POST | /api/v1/staff |
Create a new staff member. |
| GET | /api/v1/staff/roles |
Get available roles and permissions. |
| DELETE | /api/v1/staff/{id} |
Delete a staff member (soft delete). |
| GET | /api/v1/staff/{id} |
Get a staff member by ID. |
| PUT | /api/v1/staff/{id} |
Update an existing staff member. |
| DELETE | /api/v1/staff/{id}/photo |
Delete staff photo. |
| GET | /api/v1/staff/{id}/photo |
Get staff photo (full size). |
| POST | /api/v1/staff/{id}/photo |
Upload a staff photo. Converts to WebP with thumbnail. |
| GET | /api/v1/staff/{id}/photo/thumb |
Get staff photo thumbnail. |
StaffAvailabilities¶
| Methode | Endpoint | Beschreibung |
|---|---|---|
| GET | /api/v1/staff-availabilities |
List staff availabilities, optionally filtered to a single staff member. |
| POST | /api/v1/staff-availabilities |
Create an availability window for a staff member. |
| DELETE | /api/v1/staff-availabilities/{id} |
Delete an availability window. |
| PUT | /api/v1/staff-availabilities/{id} |
Update an availability window — day of week, times, type or note. |
Request Body: POST /api/v1/staff-availabilities (Dikas.Api.Contracts.V1.Requests.HR.CreateStaffAvailabilityRequest)
| Feld | Typ | Pflicht | Beschreibung |
|---|---|---|---|
staffId |
string? | ||
dayOfWeek |
integer | ||
fromTime |
string? | ||
toTime |
string? | ||
type |
integer | ||
note |
string? |
Request Body: PUT /api/v1/staff-availabilities/{id} (Dikas.Api.Contracts.V1.Requests.HR.UpdateStaffAvailabilityRequest)
| Feld | Typ | Pflicht | Beschreibung |
|---|---|---|---|
dayOfWeek |
integer | ||
fromTime |
string? | ||
toTime |
string? | ||
type |
integer | ||
note |
string? |
StockBookings¶
| Methode | Endpoint | Beschreibung |
|---|---|---|
| GET | /api/v1/stock-bookings |
Get open stock bookings. |
| POST | /api/v1/stock-bookings |
Create a new stock booking. |
| GET | /api/v1/stock-bookings/history |
Get the booking journal (all booked movements), filterable by stock, article and date range, paged. |
| DELETE | /api/v1/stock-bookings/{id} |
Delete a stock booking that has not been booked yet. |
| GET | /api/v1/stock-bookings/{id} |
Get a stock booking by ID. |
| POST | /api/v1/stock-bookings/{id}/process |
Process (execute) a stock booking, updating inventory. |
| PUT | /api/v1/stock-bookings/{id}/status |
Update the workflow status of a stock booking (request workflow: New ↔ InDelivery). |
Request Body: POST /api/v1/stock-bookings (Dikas.Api.Contracts.V1.Requests.ERP.CreateStockBookingRequest)
| Feld | Typ | Pflicht | Beschreibung |
|---|---|---|---|
items |
array[Dikas.Api.Contracts.V1.Requests.ERP.StockBookingItemRequest]? | ||
targetStock |
string? | ||
workplaceName |
string? | ||
distributorId |
string? | ||
targetPrinter |
string? |
Request Body: PUT /api/v1/stock-bookings/{id}/status (Dikas.Api.Contracts.V1.Requests.ERP.UpdateStockBookingStatusRequest)
| Feld | Typ | Pflicht | Beschreibung |
|---|---|---|---|
status |
integer | Target status: 0=New, 120=InDelivery. |
StockInventory¶
| Methode | Endpoint | Beschreibung |
|---|---|---|
| GET | /api/v1/stock-inventory |
Get inventory overview for all stocks. |
| GET | /api/v1/stock-inventory/{stockId} |
Get inventory for a specific stock. |
StockOrders¶
| Methode | Endpoint | Beschreibung |
|---|---|---|
| GET | /api/v1/stock-orders |
Get open stock orders. |
| POST | /api/v1/stock-orders |
Create a new stock order. |
| GET | /api/v1/stock-orders/proposal |
Get a reorder proposal for a stock (default: main stock) based on min/max rules, |
| grouped by supplier and rounded up to full order units (Gebinde). | ||
| GET | /api/v1/stock-orders/{id} |
Get a stock order by ID. |
| PUT | /api/v1/stock-orders/{id} |
Update an existing stock order. |
| POST | /api/v1/stock-orders/{id}/receive |
Record a (partial) goods receipt for a stock order. |
| Quantities are given in order units (Gebinde) as the delta of this delivery. | ||
| POST | /api/v1/stock-orders/{id}/send |
Send a stock order via email to the supplier (distributor email, fallback: order email). |
| Advances the order status to Ordered if still below. | ||
| PUT | /api/v1/stock-orders/{id}/status |
Update the status of a stock order. |
Request Body: POST /api/v1/stock-orders (Dikas.Api.Contracts.V1.Requests.ERP.CreateStockOrderRequest)
| Feld | Typ | Pflicht | Beschreibung |
|---|---|---|---|
targetStock |
string? | ||
distributorId |
string? | ||
company |
string? | ||
name2 |
string? | ||
street |
string? | ||
city |
string? | ||
zip |
string? | ||
country |
string? | ||
email |
string? | ||
fax |
string? | ||
distCustId |
string? | ||
comment |
string? | ||
deliveryDate |
string? | ||
positions |
array[Dikas.Api.Contracts.V1.Requests.ERP.StockOrderPositionRequest]? |
Request Body: PUT /api/v1/stock-orders/{id} (Dikas.Api.Contracts.V1.Requests.ERP.UpdateStockOrderRequest)
| Feld | Typ | Pflicht | Beschreibung |
|---|---|---|---|
targetStock |
string? | ||
company |
string? | ||
name2 |
string? | ||
street |
string? | ||
city |
string? | ||
zip |
string? | ||
country |
string? | ||
email |
string? | ||
fax |
string? | ||
distCustId |
string? | ||
comment |
string? | ||
deliveryDate |
string? | ||
positions |
array[Dikas.Api.Contracts.V1.Requests.ERP.StockOrderPositionRequest]? |
StockTakes¶
| Methode | Endpoint | Beschreibung |
|---|---|---|
| GET | /api/v1/stock-takes |
Get stock takes, optionally filtered by stock location (most recent 100). |
| POST | /api/v1/stock-takes |
Start a new stock take for a stock location. |
| GET | /api/v1/stock-takes/{id} |
Get a stock take by ID. |
| PUT | /api/v1/stock-takes/{id} |
Merge counted quantities into an open stock take. |
| POST | /api/v1/stock-takes/{id}/cancel |
Cancel an open stock take without booking any differences. |
| POST | /api/v1/stock-takes/{id}/complete |
Complete an open stock take: differences are recorded as a Correction audit booking |
| and the inventory is set to the counted values. |
Request Body: POST /api/v1/stock-takes (Dikas.Api.Contracts.V1.Requests.ERP.StartStockTakeRequest)
| Feld | Typ | Pflicht | Beschreibung |
|---|---|---|---|
stockId |
string? |
Request Body: PUT /api/v1/stock-takes/{id} (Dikas.Api.Contracts.V1.Requests.ERP.UpdateStockTakeCountsRequest)
| Feld | Typ | Pflicht | Beschreibung |
|---|---|---|---|
items |
array[Dikas.Api.Contracts.V1.Requests.ERP.StockTakeCountItemRequest]? |
Stocks¶
| Methode | Endpoint | Beschreibung |
|---|---|---|
| GET | /api/v1/stocks |
Get all stock locations. |
| POST | /api/v1/stocks |
Create a new stock location. |
| DELETE | /api/v1/stocks/{id} |
Delete a stock location (system stocks cannot be deleted). |
| GET | /api/v1/stocks/{id} |
Get a stock location by ID. |
| PUT | /api/v1/stocks/{id} |
Update an existing stock location. |
Request Body: POST /api/v1/stocks (Dikas.Api.Contracts.V1.Requests.ERP.CreateStockRequest)
| Feld | Typ | Pflicht | Beschreibung |
|---|---|---|---|
name |
string? | ||
stockType |
integer | ||
isCookingMonitor |
boolean |
Request Body: PUT /api/v1/stocks/{id} (Dikas.Api.Contracts.V1.Requests.ERP.UpdateStockRequest)
| Feld | Typ | Pflicht | Beschreibung |
|---|---|---|---|
name |
string? | ||
stockType |
integer? | ||
isCookingMonitor |
boolean? | ||
minMaxRules |
array[Dikas.Api.Contracts.V1.Requests.ERP.StockMinMaxRuleRequest]? | ||
articleOrder |
array[string]? |
Support¶
| Methode | Endpoint | Beschreibung |
|---|---|---|
| GET | /api/v1/support |
|
| POST | /api/v1/support/for-customer |
Telefon-Fall: Support legt ein neues Ticket im Namen eines Kunden an (Rollen-Gate siehe Klasse). |
| DELETE | /api/v1/support/{id} |
Falsch aufgenommenes Ticket entfernen (Soft-Delete, Audit-Log). Admin-only (siehe Handler). |
| GET | /api/v1/support/{id} |
|
| POST | /api/v1/support/{id}/answer |
|
| POST | /api/v1/support/{id}/status |
Request Body: POST /api/v1/support/for-customer (Dikas.Api.Application.Features.Portal.Support.CreateSupportTicketForCustomerCommand)
| Feld | Typ | Pflicht | Beschreibung |
|---|---|---|---|
customerId |
string? | ||
subject |
string? | ||
category |
string? | ||
message |
string? |
Request Body: POST /api/v1/support/{id}/answer (Dikas.Api.Application.Features.Portal.Support.AnswerSupportTicketCommand)
| Feld | Typ | Pflicht | Beschreibung |
|---|---|---|---|
id |
string? | ||
answer |
string? | ||
close |
boolean |
TableOrder¶
| Methode | Endpoint | Beschreibung |
|---|---|---|
| GET | /api/v1/table-order/{token} |
Tisch-Info per QR-Token laden. |
| GET | /api/v1/table-order/{token}/bill |
Rechnung für Self-Payment. |
| POST | /api/v1/table-order/{token}/call-waiter |
Kellner rufen. |
| GET | /api/v1/table-order/{token}/menu |
Speisekarte laden (nutzt bestehende OnlineMenu-Query). |
| POST | /api/v1/table-order/{token}/order |
Bestellung aufgeben (Auto-Confirm oder als OnlineOrder). |
| GET | /api/v1/table-order/{token}/orders |
Eigene Bestellungen/Bons für diesen Platz. |
| POST | /api/v1/table-order/{token}/pay |
Self-Payment initiieren (Stripe/PayPal Intent erstellen). |
| POST | /api/v1/table-order/{token}/pay/confirm |
Self-Payment bestätigen (nach Stripe/PayPal Callback). |
Request Body: POST /api/v1/table-order/{token}/order (Dikas.Api.Application.Features.OnlineOrder.Contracts.TableOrderCreateRequest)
| Feld | Typ | Pflicht | Beschreibung |
|---|---|---|---|
items |
array[Dikas.Api.Application.Features.OnlineOrder.Contracts.TableOrderItem]? | ||
kitchenNotes |
string? |
Request Body: POST /api/v1/table-order/{token}/pay (Dikas.Api.Application.Features.OnlineOrder.Contracts.TableOrderPayRequest)
| Feld | Typ | Pflicht | Beschreibung |
|---|---|---|---|
paymentProvider |
string? | ||
payEntireTable |
boolean | ||
tipAmount |
number |
Tables¶
| Methode | Endpoint | Beschreibung |
|---|---|---|
| GET | /api/v1/tables |
Get all tables. |
| POST | /api/v1/tables |
Create a new table. |
| GET | /api/v1/tables/groups |
Get all table groups. |
| POST | /api/v1/tables/groups |
Create a new table group. |
| DELETE | /api/v1/tables/groups/{id} |
Delete a table group. |
| GET | /api/v1/tables/groups/{id} |
Get a table group by ID. |
| PUT | /api/v1/tables/groups/{id} |
Update a table group. |
| POST | /api/v1/tables/guest |
Find or create a guest table by customer ID. |
| POST | /api/v1/tables/guest/by-card/{cardId} |
Find or create a guest table by NFC card ID. |
| DELETE | /api/v1/tables/{id} |
Delete a table. |
| GET | /api/v1/tables/{id} |
Get a table by ID. |
| PUT | /api/v1/tables/{id} |
Update a table. |
| POST | /api/v1/tables/{id}/cleaned |
Mark a table as cleaned (transitions from Cleaning to Free). |
| POST | /api/v1/tables/{id}/gang |
Change the gang (course) for all open bons on a table. |
| GET | /api/v1/tables/{id}/qr |
QR-Code als PNG für Tisch-Session. |
| GET | /api/v1/tables/{id}/session |
Aktive QR-Session für Tisch abfragen. |
| POST | /api/v1/tables/{id}/session |
QR-Session für Tisch generieren/regenerieren. |
| PATCH | /api/v1/tables/{id}/status |
Update a table's status. |
| POST | /api/v1/tables/{id}/viewed |
Mark a table as viewed (resets aging timer for all clients). |
| DELETE | /api/v1/tables/{id}/waiter-call |
Kellner-Ruf zurücksetzen (wenn Kellner den Tisch öffnet). |
Request Body: POST /api/v1/tables/groups (Dikas.Api.Contracts.V1.Requests.Gastro.CreateTableGroupRequest)
| Feld | Typ | Pflicht | Beschreibung |
|---|---|---|---|
name |
string? | ||
description |
string? | ||
color |
string? | ||
icon |
string? | ||
sortOrder |
integer | ||
isActive |
boolean | ||
bonPrefix |
string? | ||
showPlan |
boolean | ||
useSeats |
boolean | ||
discoBookingMode |
integer | ||
seatCount |
integer | ||
isPayOffsite |
boolean |
Request Body: POST /api/v1/tables (Dikas.Api.Contracts.V1.Requests.Gastro.CreateTableRequest)
| Feld | Typ | Pflicht | Beschreibung |
|---|---|---|---|
tableNumber |
string? | ||
name |
string? | ||
groupId |
string? | ||
seats |
integer | ||
positionX |
integer | ||
positionY |
integer | ||
width |
integer | ||
height |
integer | ||
shape |
string? | ||
color |
string? | ||
sortOrder |
integer | ||
isActive |
boolean | ||
rotation |
integer | ||
printTableId |
integer? | ||
extraBonText |
string? | ||
background |
string? | ||
isDecorative |
boolean | ||
decorationType |
string? | ||
beverageTableNr |
integer? | ||
customFields |
object? |
TimeTracking¶
| Methode | Endpoint | Beschreibung |
|---|---|---|
| GET | /api/v1/time-tracking/active-workers |
Get all currently active (clocked-in) workers for supervisor dashboard. |
| GET | /api/v1/time-tracking/report |
Get time report for a date range. |
| GET | /api/v1/time-tracking/report/excel |
Export time report as Excel file. |
| DELETE | /api/v1/time-tracking/sheets/{id}/stamps/{index} |
Delete a time stamp (admin). |
| PUT | /api/v1/time-tracking/sheets/{id}/stamps/{index} |
Edit an existing time stamp (admin correction). |
| GET | /api/v1/time-tracking/sheets/{userId}/{year}/{month} |
Get a time sheet for a user/year/month (admin view). |
| POST | /api/v1/time-tracking/stamp |
Clock a worker in or out, or start/end a break. |
| GET | /api/v1/time-tracking/status/{userId} |
Get current time tracking status for a user (POS display). |
Request Body: POST /api/v1/time-tracking/stamp (Dikas.Api.Contracts.V1.Requests.HR.RecordTimeStampRequest)
| Feld | Typ | Pflicht | Beschreibung |
|---|---|---|---|
userId |
string? | ||
type |
integer | ||
note |
string? | ||
timestamp |
string? |
Request Body: PUT /api/v1/time-tracking/sheets/{id}/stamps/{index} (Dikas.Api.Contracts.V1.Requests.HR.EditTimeStampRequest)
| Feld | Typ | Pflicht | Beschreibung |
|---|---|---|---|
newTimestamp |
string? | ||
newType |
integer? | ||
newNote |
string? |
Vouchers¶
| Methode | Endpoint | Beschreibung |
|---|---|---|
| GET | /api/v1/vouchers |
Get all vouchers with optional filtering. |
| POST | /api/v1/vouchers |
Create a new voucher. |
| POST | /api/v1/vouchers/batch |
Batch-create multiple vouchers with the same settings. |
| POST | /api/v1/vouchers/import |
Import a voucher with a pre-existing serial number. |
| Checks for duplicate serials and rejects if already exists. | ||
| GET | /api/v1/vouchers/search/{serial} |
Search for a voucher by serial number. |
| Supports 6-digit number (e.g. 481293), legacy V+number (e.g. V000001), or text serial. | ||
| GET | /api/v1/vouchers/{id} |
Get a voucher by ID. |
| POST | /api/v1/vouchers/{id}/close |
Manually close a voucher. |
| POST | /api/v1/vouchers/{id}/redeem |
Redeem (use) a voucher partially or fully. |
| POST | /api/v1/vouchers/{id}/topup |
Top up (recharge) a voucher. |
| PUT | /api/v1/vouchers/{id}/valid-to |
F-6: Change/extend a voucher's validity date (null = unlimited). |
Request Body: POST /api/v1/vouchers (Dikas.Api.Contracts.V1.Requests.CashPoint.CreateVoucherRequest)
| Feld | Typ | Pflicht | Beschreibung |
|---|---|---|---|
amount |
number | Voucher value. | |
articleId |
string? | Optional article ID linked to the voucher. | |
name |
string? | Optional voucher name/description. | |
taxClass |
integer | Tax class (0 = normal, 1 = reduced, etc.). | |
validDays |
integer? | Optional validity period in days from now. Null = unlimited. | |
serial |
string? | Optional custom serial code. If not set, an alphanumeric code is auto-generated. | |
articles |
array[Dikas.Api.Contracts.V1.Requests.CashPoint.VoucherArticleRequest]? | Optional articles redeemable with the voucher. |
Request Body: POST /api/v1/vouchers/{id}/redeem (Dikas.Api.Contracts.V1.Requests.CashPoint.RedeemVoucherRequest)
| Feld | Typ | Pflicht | Beschreibung |
|---|---|---|---|
amount |
number | Amount to redeem from the voucher. | |
bonId |
string? | Optional receipt/bon ID for tracking. |
Workshop¶
| Methode | Endpoint | Beschreibung |
|---|---|---|
| GET | /api/v1/workshop/orders |
List work orders, optionally filtered by status, customer and date range (capped by limit). |
| POST | /api/v1/workshop/orders |
Create a new work order (repair/service job) for a customer, optionally printing a label. |
| GET | /api/v1/workshop/orders/search |
Search work orders by free-text query (e.g. order number, customer or frame number). |
| GET | /api/v1/workshop/orders/{id} |
Get a work order by ID. |
| POST | /api/v1/workshop/orders/{id}/activities |
Add a labour activity (description and duration) to the work order. |
| DELETE | /api/v1/workshop/orders/{id}/activities/{index} |
Remove a labour activity from the work order by its list index. |
| POST | /api/v1/workshop/orders/{id}/cancel |
Cancel the work order. |
| POST | /api/v1/workshop/orders/{id}/complete |
Mark the work order as completed (finalizes labour and total cost). |
| POST | /api/v1/workshop/orders/{id}/invoice |
Turn the completed work order into a customer invoice. |
| PUT | /api/v1/workshop/orders/{id}/items |
Replace the work order's activities and materials in a single call. |
| POST | /api/v1/workshop/orders/{id}/materials |
Add a material/part (article and quantity) to the work order. |
| DELETE | /api/v1/workshop/orders/{id}/materials/{index} |
Remove a material/part from the work order by its list index. |
| POST | /api/v1/workshop/orders/{id}/pause |
Pause the work order (stops time tracking). |
| POST | /api/v1/workshop/orders/{id}/print-label |
Generate the work order's label as raw printer data. |
| POST | /api/v1/workshop/orders/{id}/reopen |
Reopen a completed or cancelled work order. |
| POST | /api/v1/workshop/orders/{id}/resume |
Resume a paused work order (resumes time tracking). |
| POST | /api/v1/workshop/orders/{id}/start |
Start the work order (begins time tracking). |
Request Body: POST /api/v1/workshop/orders (Dikas.Api.Contracts.V1.Requests.Workshop.CreateWorkOrderRequest)
| Feld | Typ | Pflicht | Beschreibung |
|---|---|---|---|
customerId |
string? | ||
faultDescription |
string? | ||
bikeDescription |
string? | ||
frameNumber |
string? | ||
estimatedCompletionDate |
string? | ||
printLabel |
boolean | ||
printerId |
string? |
Request Body: POST /api/v1/workshop/orders/{id}/activities (Dikas.Api.Contracts.V1.Requests.Workshop.AddActivityRequest)
| Feld | Typ | Pflicht | Beschreibung |
|---|---|---|---|
description |
string? | ||
durationMinutes |
integer |