Zum Inhalt
v26.3

API-Referenz

Vollständige REST API mit 565 Endpoints in 60 Bereichen. 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 revisionssicheres PDF (FlexCel).
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).
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