API Reference¶
Complete REST API with 565 endpoints in 60 sections. Authentication via JWT bearer token (see REST API).
Overview¶
| Section | Endpoints | Description |
|---|---|---|
| Absences | 6 | |
| Analytics | 5 | Analytics |
| ArticleDescription | 9 | Article descriptions / images |
| ArticleImport | 13 | Article import |
| Articles | 18 | Articles and article groups |
| Auth | 8 | Login, token, refresh |
| AutoBeleg | 14 | |
| BankTransfer | 7 | |
| Banking | 51 | FinTS, account retrieval, SEPA |
| Belege | 9 | |
| CustomerGroups | 4 | Customer groups |
| Customers | 17 | Customer master data, balance, documents |
| Datev | 6 | DATEV export |
| DayClose | 6 | Day close / Z report |
| Delivery | 20 | Delivery service |
| Disco | 23 | Disco module |
| DiscoConfig | 5 | |
| DiscoStats | 4 | |
| DiscoTurnstile | 2 | |
| Distributors | 5 | |
| Dunning | 3 | Dunning (3 stages) |
| Exchanges | 6 | Shift changes |
| Export | 6 | DSFinV-K, GDPdU |
| Forms | 1 | |
| Haccp | 14 | HACCP |
| Invoice | 18 | Customer invoices, PDF |
| MenuCard | 9 | Menu card management |
| OnlineCheckout | 17 | Online checkout |
| OnlineMenu | 4 | Online menu |
| OnlineShopConfig | 13 | |
| OpenBons | 9 | Open orders (table service) |
| OptionTemplates | 5 | Option templates |
| Payments | 2 | Process payments |
| PublicReceipt | 2 | |
| PublicReservations | 7 | |
| Receipts | 12 | Receipts, cancellation |
| Reports | 9 | Revenue, article, staff reports |
| Reservations | 12 | Table reservations |
| SavedTransfer | 8 | |
| Seats | 1 | |
| SepaMandate | 7 | SEPA mandates |
| ShiftPositions | 5 | |
| ShiftSwaps | 6 | |
| ShiftTemplates | 5 | |
| Shifts | 20 | |
| ShopAccount | 12 | |
| Spendings | 9 | Spendings / cash withdrawals |
| Staff | 10 | Staff, roles, PIN |
| StaffAvailabilities | 4 | |
| StockBookings | 7 | |
| StockInventory | 2 | |
| StockOrders | 8 | |
| StockTakes | 6 | |
| Stocks | 5 | Stock management |
| Support | 6 | |
| TableOrder | 8 | Table self-ordering |
| Tables | 20 | Tables, table groups, status |
| TimeTracking | 8 | Time tracking |
| Vouchers | 10 | Vouchers |
| Workshop | 17 | Workshop orders |
Absences¶
| Method | Endpoint | Description |
|---|---|---|
| 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)
| Field | Type | Required | Description |
|---|---|---|---|
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)
| Field | Type | Required | Description |
|---|---|---|---|
type |
integer | ||
startDate |
string? | ||
endDate |
string? | ||
note |
string? |
Analytics¶
| Method | Endpoint | Description |
|---|---|---|
| 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¶
| Method | Endpoint | Description |
|---|---|---|
| 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)
| Field | Type | Required | Description |
|---|---|---|---|
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)
| Field | Type | Required | Description |
|---|---|---|---|
attachmentNames |
array[string]? |
ArticleImport¶
| Method | Endpoint | Description |
|---|---|---|
| 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)
| Field | Type | Required | Description |
|---|---|---|---|
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)
| Field | Type | Required | Description |
|---|---|---|---|
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¶
| Method | Endpoint | Description |
|---|---|---|
| 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)
| Field | Type | Required | Description |
|---|---|---|---|
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)
| Field | Type | Required | Description |
|---|---|---|---|
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¶
| Method | Endpoint | Description |
|---|---|---|
| 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)
| Field | Type | Required | Description |
|---|---|---|---|
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)
| Field | Type | Required | Description |
|---|---|---|---|
cardId |
string? | Card ID from NFC/RFID reader. |
AutoBeleg¶
| Method | Endpoint | Description |
|---|---|---|
| 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)
| Field | Type | Required | Description |
|---|---|---|---|
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)
| Field | Type | Required | Description |
|---|---|---|---|
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¶
| Method | Endpoint | Description |
|---|---|---|
| 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)
| Field | Type | Required | Description |
|---|---|---|---|
bankAccountId |
string? |
Banking¶
| Method | Endpoint | Description |
|---|---|---|
| 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)
| Field | Type | Required | Description |
|---|---|---|---|
entryIndex |
integer | ||
invoiceId |
string? | ||
customerId |
string? | ||
status |
integer |
Request Body: POST /api/v1/banking/accounts (Dikas.Api.Contracts.V1.Requests.Customer.CreateBankAccountRequest)
| Field | Type | Required | Description |
|---|---|---|---|
name |
string? | ||
iban |
string? | ||
bic |
string? | ||
blz |
string? | ||
finTsUrl |
string? | ||
userId |
string? | ||
pin |
string? | ||
accountHolder |
string? | ||
tanMethod |
string? | ||
isDefault |
boolean |
Belege¶
| Method | Endpoint | Description |
|---|---|---|
| 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)
| Field | Type | Required | Description |
|---|---|---|---|
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)
| Field | Type | Required | Description |
|---|---|---|---|
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¶
| Method | Endpoint | Description |
|---|---|---|
| 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)
| Field | Type | Required | Description |
|---|---|---|---|
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)
| Field | Type | Required | Description |
|---|---|---|---|
name |
string? | ||
description |
string? | ||
defaultDiscount |
number? | ||
color |
string? | ||
sortOrder |
integer? | ||
isActive |
boolean? |
Customers¶
| Method | Endpoint | Description |
|---|---|---|
| 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)
| Field | Type | Required | Description |
|---|---|---|---|
amount |
number |
Request Body: POST /api/v1/customers/{id}/settle (Dikas.Api.Contracts.V1.Requests.Customer.SettleBalanceRequest)
| Field | Type | Required | Description |
|---|---|---|---|
amount |
number | ||
method |
string? |
Datev¶
| Method | Endpoint | Description |
|---|---|---|
| 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)
| Field | Type | Required | Description |
|---|---|---|---|
startDate |
string | ||
endDate |
string | ||
mode |
integer |
Request Body: POST /api/v1/datev/send (Dikas.Api.Contracts.V1.Requests.CashPoint.SendDatevExportRequest)
| Field | Type | Required | Description |
|---|---|---|---|
startDate |
string | ||
endDate |
string | ||
mode |
integer |
DayClose¶
| Method | Endpoint | Description |
|---|---|---|
| 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)
| Field | Type | Required | Description |
|---|---|---|---|
businessDate |
string? | Business date to close (default: today). | |
force |
boolean | Force close even with warnings. | |
notes |
string? | Notes. |
Delivery¶
| Method | Endpoint | Description |
|---|---|---|
| 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)
| Field | Type | Required | Description |
|---|---|---|---|
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)
| Field | Type | Required | Description |
|---|---|---|---|
status |
integer |
Disco¶
| Method | Endpoint | Description |
|---|---|---|
| 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)
| Field | Type | Required | Description |
|---|---|---|---|
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)
| Field | Type | Required | Description |
|---|---|---|---|
cardId |
string? | ||
payments |
array[Dikas.Api.Contracts.V1.Disco.LeavePaymentEntry]? | ||
tipAmount |
number | ||
customerId |
string? | ||
isBewirtungsbeleg |
boolean |
DiscoConfig¶
| Method | Endpoint | Description |
|---|---|---|
| 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)
| Field | Type | Required | Description |
|---|---|---|---|
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)
| Field | Type | Required | Description |
|---|---|---|---|
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¶
| Method | Endpoint | Description |
|---|---|---|
| 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¶
| Method | Endpoint | Description |
|---|---|---|
| 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¶
| Method | Endpoint | Description |
|---|---|---|
| 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)
| Field | Type | Required | Description |
|---|---|---|---|
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)
| Field | Type | Required | Description |
|---|---|---|---|
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¶
| Method | Endpoint | Description |
|---|---|---|
| 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¶
| Method | Endpoint | Description |
|---|---|---|
| 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)
| Field | Type | Required | Description |
|---|---|---|---|
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)
| Field | Type | Required | Description |
|---|---|---|---|
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¶
| Method | Endpoint | Description |
|---|---|---|
| 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)
| Field | Type | Required | Description |
|---|---|---|---|
startDate |
string | ||
endDate |
string |
Request Body: POST /api/v1/export/dsfinvk (Dikas.Api.Contracts.V1.Requests.Export.StartExportRequest)
| Field | Type | Required | Description |
|---|---|---|---|
startDate |
string | ||
endDate |
string |
Forms¶
| Method | Endpoint | Description |
|---|---|---|
| POST | /api/v1/forms/submit |
Request Body: POST /api/v1/forms/submit (Dikas.Api.Application.Features.Forms.Commands.SubmitFormCommand)
| Field | Type | Required | Description |
|---|---|---|---|
formType |
string? | ||
subject |
string? | ||
honeypot |
string? | ||
fields |
array[Dikas.Api.Application.Features.Forms.Commands.FormFieldItem]? |
Haccp¶
| Method | Endpoint | Description |
|---|---|---|
| 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)
| Field | Type | Required | Description |
|---|---|---|---|
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)
| Field | Type | Required | Description |
|---|---|---|---|
name |
string? | ||
description |
string? | ||
category |
integer? | ||
frequency |
integer? | ||
isActive |
boolean? | ||
sortOrder |
integer? | ||
items |
array[Dikas.Api.Contracts.V1.Requests.ERP.HaccpTemplateItemDto]? |
Invoice¶
| Method | Endpoint | Description |
|---|---|---|
| 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)
| Field | Type | Required | Description |
|---|---|---|---|
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)
| Field | Type | Required | Description |
|---|---|---|---|
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¶
| Method | Endpoint | Description |
|---|---|---|
| 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)
| Field | Type | Required | Description |
|---|---|---|---|
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¶
| Method | Endpoint | Description |
|---|---|---|
| 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)
| Field | Type | Required | Description |
|---|---|---|---|
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)
| Field | Type | Required | Description |
|---|---|---|---|
reason |
string? |
OnlineMenu¶
| Method | Endpoint | Description |
|---|---|---|
| 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¶
| Method | Endpoint | Description |
|---|---|---|
| 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¶
| Method | Endpoint | Description |
|---|---|---|
| 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)
| Field | Type | Required | Description |
|---|---|---|---|
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)
| Field | Type | Required | Description |
|---|---|---|---|
tableId |
string? | ||
subTableName |
string? | ||
customerGroupId |
string? | ||
printerId |
string? | ||
workplaceId |
string? | ||
items |
array[Dikas.Api.Contracts.V1.Requests.Gastro.BatchOpenBonItem]? |
OptionTemplates¶
| Method | Endpoint | Description |
|---|---|---|
| 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)
| Field | Type | Required | Description |
|---|---|---|---|
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)
| Field | Type | Required | Description |
|---|---|---|---|
name |
string? | ||
description |
string? | ||
isActive |
boolean? | ||
sortOrder |
integer? | ||
groups |
array[Dikas.Api.Contracts.V1.Requests.ERP.ArticleOptionGroupDto]? |
Payments¶
| Method | Endpoint | Description |
|---|---|---|
| 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)
| Field | Type | Required | Description |
|---|---|---|---|
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)
| Field | Type | Required | Description |
|---|---|---|---|
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¶
| Method | Endpoint | Description |
|---|---|---|
| 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¶
| Method | Endpoint | Description |
|---|---|---|
| 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)
| Field | Type | Required | Description |
|---|---|---|---|
guestName |
string? | ||
guestPhone |
string? | ||
guestEmail |
string? | ||
reservationDateTime |
string | ||
guestCount |
integer | ||
notes |
string? |
Receipts¶
| Method | Endpoint | Description |
|---|---|---|
| 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)
| Field | Type | Required | Description |
|---|---|---|---|
reason |
string? | ||
terminalId |
string? |
Request Body: POST /api/v1/receipts/{id}/change-payment (Dikas.Api.Web.Controllers.V1.CashPoint.ChangePaymentTypeRequest)
| Field | Type | Required | Description |
|---|---|---|---|
newPaymentMethod |
string? |
Reports¶
| Method | Endpoint | Description |
|---|---|---|
| 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¶
| Method | Endpoint | Description |
|---|---|---|
| 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)
| Field | Type | Required | Description |
|---|---|---|---|
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)
| Field | Type | Required | Description |
|---|---|---|---|
guestName |
string? | ||
guestPhone |
string? | ||
guestEmail |
string? | ||
reservationDateTime |
string? | ||
durationMinutes |
integer? | ||
guestCount |
integer? | ||
tableId |
string? | ||
notes |
string? | ||
internalNotes |
string? |
SavedTransfer¶
| Method | Endpoint | Description |
|---|---|---|
| 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)
| Field | Type | Required | Description |
|---|---|---|---|
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)
| Field | Type | Required | Description |
|---|---|---|---|
recipientName |
string? | ||
recipientIban |
string? | ||
recipientBic |
string? | ||
amount |
number | ||
purpose |
string? | ||
endToEndId |
string? | ||
bankAccountId |
string? |
Seats¶
| Method | Endpoint | Description |
|---|---|---|
| GET | /api/v1/seats |
Aktuell belegte Seats (= aktive Geräte) inkl. Limit (N) und Belegungszeitpunkt. |
SepaMandate¶
| Method | Endpoint | Description |
|---|---|---|
| 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)
| Field | Type | Required | Description |
|---|---|---|---|
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)
| Field | Type | Required | Description |
|---|---|---|---|
signatureImageBase64 |
string? |
ShiftPositions¶
| Method | Endpoint | Description |
|---|---|---|
| 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)
| Field | Type | Required | Description |
|---|---|---|---|
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)
| Field | Type | Required | Description |
|---|---|---|---|
name |
string? | ||
color |
string? | ||
icon |
string? | ||
sortOrder |
integer | ||
isActive |
boolean |
ShiftSwaps¶
| Method | Endpoint | Description |
|---|---|---|
| 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)
| Field | Type | Required | Description |
|---|---|---|---|
shiftId |
string? | ||
note |
string? |
ShiftTemplates¶
| Method | Endpoint | Description |
|---|---|---|
| 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)
| Field | Type | Required | Description |
|---|---|---|---|
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)
| Field | Type | Required | Description |
|---|---|---|---|
name |
string? | ||
startTime |
string? | ||
endTime |
string? | ||
breakMinutes |
integer | ||
positionId |
string? | ||
sortOrder |
integer | ||
isActive |
boolean |
Shifts¶
| Method | Endpoint | Description |
|---|---|---|
| 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)
| Field | Type | Required | Description |
|---|---|---|---|
items |
array[Dikas.Api.Contracts.V1.Requests.HR.ShiftItemRequest]? |
Request Body: PUT /api/v1/shifts/{id} (Dikas.Api.Contracts.V1.Requests.HR.UpdateShiftRequest)
| Field | Type | Required | Description |
|---|---|---|---|
date |
string? | ||
startTime |
string? | ||
endTime |
string? | ||
breakMinutes |
integer | ||
positionId |
string? | ||
staffId |
string? | ||
status |
integer | ||
note |
string? |
ShopAccount¶
| Method | Endpoint | Description |
|---|---|---|
| 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)
| Field | Type | Required | Description |
|---|---|---|---|
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)
| Field | Type | Required | Description |
|---|---|---|---|
email |
string? | ||
password |
string? |
Spendings¶
| Method | Endpoint | Description |
|---|---|---|
| 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)
| Field | Type | Required | Description |
|---|---|---|---|
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)
| Field | Type | Required | Description |
|---|---|---|---|
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¶
| Method | Endpoint | Description |
|---|---|---|
| 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¶
| Method | Endpoint | Description |
|---|---|---|
| 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)
| Field | Type | Required | Description |
|---|---|---|---|
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)
| Field | Type | Required | Description |
|---|---|---|---|
dayOfWeek |
integer | ||
fromTime |
string? | ||
toTime |
string? | ||
type |
integer | ||
note |
string? |
StockBookings¶
| Method | Endpoint | Description |
|---|---|---|
| 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)
| Field | Type | Required | Description |
|---|---|---|---|
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)
| Field | Type | Required | Description |
|---|---|---|---|
status |
integer | Target status: 0=New, 120=InDelivery. |
StockInventory¶
| Method | Endpoint | Description |
|---|---|---|
| GET | /api/v1/stock-inventory |
Get inventory overview for all stocks. |
| GET | /api/v1/stock-inventory/{stockId} |
Get inventory for a specific stock. |
StockOrders¶
| Method | Endpoint | Description |
|---|---|---|
| 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)
| Field | Type | Required | Description |
|---|---|---|---|
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)
| Field | Type | Required | Description |
|---|---|---|---|
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¶
| Method | Endpoint | Description |
|---|---|---|
| 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)
| Field | Type | Required | Description |
|---|---|---|---|
stockId |
string? |
Request Body: PUT /api/v1/stock-takes/{id} (Dikas.Api.Contracts.V1.Requests.ERP.UpdateStockTakeCountsRequest)
| Field | Type | Required | Description |
|---|---|---|---|
items |
array[Dikas.Api.Contracts.V1.Requests.ERP.StockTakeCountItemRequest]? |
Stocks¶
| Method | Endpoint | Description |
|---|---|---|
| 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)
| Field | Type | Required | Description |
|---|---|---|---|
name |
string? | ||
stockType |
integer | ||
isCookingMonitor |
boolean |
Request Body: PUT /api/v1/stocks/{id} (Dikas.Api.Contracts.V1.Requests.ERP.UpdateStockRequest)
| Field | Type | Required | Description |
|---|---|---|---|
name |
string? | ||
stockType |
integer? | ||
isCookingMonitor |
boolean? | ||
minMaxRules |
array[Dikas.Api.Contracts.V1.Requests.ERP.StockMinMaxRuleRequest]? | ||
articleOrder |
array[string]? |
Support¶
| Method | Endpoint | Description |
|---|---|---|
| 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)
| Field | Type | Required | Description |
|---|---|---|---|
customerId |
string? | ||
subject |
string? | ||
category |
string? | ||
message |
string? |
Request Body: POST /api/v1/support/{id}/answer (Dikas.Api.Application.Features.Portal.Support.AnswerSupportTicketCommand)
| Field | Type | Required | Description |
|---|---|---|---|
id |
string? | ||
answer |
string? | ||
close |
boolean |
TableOrder¶
| Method | Endpoint | Description |
|---|---|---|
| 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)
| Field | Type | Required | Description |
|---|---|---|---|
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)
| Field | Type | Required | Description |
|---|---|---|---|
paymentProvider |
string? | ||
payEntireTable |
boolean | ||
tipAmount |
number |
Tables¶
| Method | Endpoint | Description |
|---|---|---|
| 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)
| Field | Type | Required | Description |
|---|---|---|---|
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)
| Field | Type | Required | Description |
|---|---|---|---|
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¶
| Method | Endpoint | Description |
|---|---|---|
| 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)
| Field | Type | Required | Description |
|---|---|---|---|
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)
| Field | Type | Required | Description |
|---|---|---|---|
newTimestamp |
string? | ||
newType |
integer? | ||
newNote |
string? |
Vouchers¶
| Method | Endpoint | Description |
|---|---|---|
| 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)
| Field | Type | Required | Description |
|---|---|---|---|
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)
| Field | Type | Required | Description |
|---|---|---|---|
amount |
number | Amount to redeem from the voucher. | |
bonId |
string? | Optional receipt/bon ID for tracking. |
Workshop¶
| Method | Endpoint | Description |
|---|---|---|
| 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)
| Field | Type | Required | Description |
|---|---|---|---|
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)
| Field | Type | Required | Description |
|---|---|---|---|
description |
string? | ||
durationMinutes |
integer |