Saltar a contenido
v26.3

Referencia de la API

API REST completa con 341 endpoints en 34 áreas. Autenticación mediante token JWT-Bearer (consulte REST API).


Resumen

Área Endpoints Descripción
Analytics 5 Analítica
ArticleImport 13 Importación de artículos
Articles 15 Artículos y grupos de artículos
Auth 6 Login, token, refresh
AutoBeleg 14
BankTransfer 7
Banking 50 FinTS, consulta de cuenta, SEPA
CustomerGroups 4 Grupos de clientes
Customers 16 Maestro de clientes, saldo, documentos
Delivery 18 Servicio de entrega
Dunning 3 Reclamación de pagos (3 niveles)
Export 6 DSFinV-K, GDPdU
Geocoding 3 Geocoding
Invoice 18 Facturas de clientes, PDF
MenuCard 9 Gestión de cartas
OpenBons 9 Pedidos abiertos (servicio de mesa)
OptionTemplates 5 Plantillas de opciones
Payments 2 Realizar pagos
Receipts 12 Recibos de caja, anulación
Reports 7 Informes de ventas, artículos y personal
Reservations 8 Reservas de mesa
SavedTransfer 8
SepaMandate 7 Mandatos SEPA
Spendings 9 Gastos / Retiros de efectivo
StockBookings 4
StockInventory 2
StockOrders 5
Stocks 5 Gestión de almacén
Subscription 7 Suscripciones
Tables 20 Mesas, grupos de mesas, estado
TimeTracking 8 Control de horario
Vouchers 9 Vales / Cupones
WhatsApp 10 Integración con WhatsApp
Workshop 17 Órdenes de taller

Analytics

Método Endpoint Descripción
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.

ArticleImport

Método Endpoint Descripción
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 (CreateImportProfileRequest)
Campo Tipo Obligatorio Descripción
name string?
description string?
sourceFormat string?
presetId string?
csvSettings object
excelSettings object
columnMappings array[ColumnMappingDto]?
valueTransforms array[ValueTransformDto]?
defaultGroupId string?
defaultTaxRate number
conflictMode string?
matchField string?
Request Body: PUT /api/v1/article-import/profiles/{id} (UpdateImportProfileRequest)
Campo Tipo Obligatorio Descripción
name string?
description string?
sourceFormat string?
presetId string?
csvSettings object
excelSettings object
columnMappings array[ColumnMappingDto]?
valueTransforms array[ValueTransformDto]?
defaultGroupId string?
defaultTaxRate number?
conflictMode string?
matchField string?

Articles

Método Endpoint Descripción
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
POST /api/v1/articles/groups
DELETE /api/v1/articles/groups/{documentId}
PUT /api/v1/articles/groups/{documentId}
GET /api/v1/articles/search
DELETE /api/v1/articles/{id}
GET /api/v1/articles/{id} Get a single article by its document id.
PUT /api/v1/articles/{id}
PUT /api/v1/articles/{id}/icon
POST /api/v1/articles/{id}/images
DELETE /api/v1/articles/{id}/images/{name}
GET /api/v1/articles/{id}/images/{name}
Request Body: POST /api/v1/articles/groups (CreateArticleGroupRequest)
Campo Tipo Obligatorio Descripción
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} (UpdateArticleGroupRequest)
Campo Tipo Obligatorio Descripción
name string?
shortName string?
description string?
color string?
background string?
sortOrder integer?
displayType integer?
isActive boolean?
printOption object
extraPrintOptions array[ExtraPrintOptionDto]?
extraArticleIds array[string]?
rules array[ArticleRuleDto]?
optionGroups array[ArticleOptionGroupDto]?

Auth

Método Endpoint Descripción
POST /api/v1/auth/change-password Change password for the currently logged-in user.
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.
Request Body: POST /api/v1/auth/login (LoginRequest)
Campo Tipo Obligatorio Descripción
username string? Username for authentication.
password string? Password for authentication.
Request Body: POST /api/v1/auth/login/card (CardLoginRequest)
Campo Tipo Obligatorio Descripción
cardId string? Card ID from NFC/RFID reader.

AutoBeleg

Método Endpoint Descripción
GET /api/v1/autobeleg/entries
GET /api/v1/autobeleg/entries/{id}
PUT /api/v1/autobeleg/entries/{id}
GET /api/v1/autobeleg/entries/{id}/attachments/{fileName}
POST /api/v1/autobeleg/entries/{id}/convert
POST /api/v1/autobeleg/entries/{id}/ignore
POST /api/v1/autobeleg/fetch
GET /api/v1/autobeleg/rules
POST /api/v1/autobeleg/rules
DELETE /api/v1/autobeleg/rules/{id}
PUT /api/v1/autobeleg/rules/{id}
POST /api/v1/autobeleg/simulate
GET /api/v1/autobeleg/stats
POST /api/v1/autobeleg/test-connection
Request Body: POST /api/v1/autobeleg/rules (CreateAutoBelegRuleRequest)
Campo Tipo Obligatorio Descripción
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} (UpdateAutoBelegRuleRequest)
Campo Tipo Obligatorio Descripción
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

Método Endpoint Descripción
GET /api/v1/bank-transfers
DELETE /api/v1/bank-transfers/{id}
GET /api/v1/bank-transfers/{id}
GET /api/v1/bank-transfers/{id}/invoices
POST /api/v1/bank-transfers/{id}/send-emails
GET /api/v1/bank-transfers/{id}/sepa
POST /api/v1/bank-transfers/{id}/submit-fints
Request Body: POST /api/v1/bank-transfers/{id}/submit-fints (SubmitFinTsRequest)
Campo Tipo Obligatorio Descripción
bankAccountId string?

Banking

Método Endpoint Descripción
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
POST /api/v1/banking/recompute-hashes Recompute deduplication hashes for all transactions (one-time fix after hash algorithm change)
POST /api/v1/banking/reconcile Restablecer las facturas del periodo y conciliarlas de nuevo con los movimientos bancarios
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 (MatchBankEntryRequest)
Campo Tipo Obligatorio Descripción
entryIndex integer
invoiceId string?
customerId string?
status integer
Request Body: POST /api/v1/banking/accounts (CreateBankAccountRequest)
Campo Tipo Obligatorio Descripción
name string?
iban string?
bic string?
blz string?
finTsUrl string?
userId string?
pin string?
accountHolder string?
tanMethod string?
isDefault boolean

CustomerGroups

Método Endpoint Descripción
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 (CreateCustomerGroupRequest)
Campo Tipo Obligatorio Descripción
name string?
description string?
defaultDiscount number?
color string?
sortOrder integer
isActive boolean
Request Body: PUT /api/v1/customer-groups/{id} (UpdateCustomerGroupRequest)
Campo Tipo Obligatorio Descripción
name string?
description string?
defaultDiscount number?
color string?
sortOrder integer?
isActive boolean?

Customers

Método Endpoint Descripción
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.
Request Body: POST /api/v1/customers/{id}/payout (PayoutRequest)
Campo Tipo Obligatorio Descripción
amount number

Delivery

Método Endpoint Descripción
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
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}
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 (CreateDeliveryOrderRequest)
Campo Tipo Obligatorio Descripción
orderType integer
customerId string?
customerName string?
customerPhone string?
street string?
houseNumber string?
zipCode string?
city string?
requestedTime string?
items array[DeliveryOrderItemRequest]?
notes string?
source string?
externalOrderId string?
isPaid boolean
paymentMethod string?
latitude number?
longitude number?
Request Body: PUT /api/v1/delivery/{id}/status (UpdateDeliveryStatusRequest)
Campo Tipo Obligatorio Descripción
status integer

Dunning

Método Endpoint Descripción
POST /api/v1/dunning/execute
GET /api/v1/dunning/preview/{customerId} Preview the dunning email for a specific customer.
POST /api/v1/dunning/simulate

Export

Método Endpoint Descripción
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 (StartExportRequest)
Campo Tipo Obligatorio Descripción
startDate string
endDate string
Request Body: POST /api/v1/export/dsfinvk (StartExportRequest)
Campo Tipo Obligatorio Descripción
startDate string
endDate string

Geocoding

Método Endpoint Descripción
GET /api/v1/geocoding/geocode
GET /api/v1/geocoding/place-details Obtener Google Place Details (finaliza una sesión de autocompletado).
Devuelve la dirección completa con coordenadas.
GET /api/v1/geocoding/search

Invoice

Método Endpoint Descripción
GET /api/v1/invoices
POST /api/v1/invoices
POST /api/v1/invoices/bulk-close
GET /api/v1/invoices/overview
POST /api/v1/invoices/write-off
DELETE /api/v1/invoices/{id}
GET /api/v1/invoices/{id}
PUT /api/v1/invoices/{id}
POST /api/v1/invoices/{id}/cancel
POST /api/v1/invoices/{id}/credit-note
POST /api/v1/invoices/{id}/duplicate
GET /api/v1/invoices/{id}/email-preview Preview the email that would be sent for this invoice.
POST /api/v1/invoices/{id}/payment
GET /api/v1/invoices/{id}/payment-journal
GET /api/v1/invoices/{id}/pdf
POST /api/v1/invoices/{id}/send
PUT /api/v1/invoices/{id}/sepa-status
GET /api/v1/invoices/{id}/xml
Request Body: POST /api/v1/invoices (CreateInvoiceRequest)
Campo Tipo Obligatorio Descripción
customerId string?
positions array[InvoicePositionRequest]?
paymentTermDays integer
isBankDebit boolean
notes string?
billingCompanyName string?
billingName string?
billingStreet string?
billingZipCode string?
billingCity string?
Request Body: PUT /api/v1/invoices/{id} (UpdateInvoiceRequest)
Campo Tipo Obligatorio Descripción
customerId string?
positions array[InvoicePositionRequest]?
paymentTermDays integer
isBankDebit boolean
notes string?
billingCompanyName string?
billingName string?
billingStreet string?
billingZipCode string?
billingCity string?
Método Endpoint Descripción
DELETE /api/v1/menu-card/custom-template
GET /api/v1/menu-card/custom-template
POST /api/v1/menu-card/custom-template
GET /api/v1/menu-card/default-template
GET /api/v1/menu-card/excel
GET /api/v1/menu-card/pdf
GET /api/v1/menu-card/settings
PUT /api/v1/menu-card/settings
GET /api/v1/menu-card/template
Request Body: PUT /api/v1/menu-card/settings (UpdateMenuCardSettingsRequest)
Campo Tipo Obligatorio Descripción
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?

OpenBons

Método Endpoint Descripción
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 (CreateOpenBonRequest)
Campo Tipo Obligatorio Descripción
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[CreateOpenBonExtraOptionRequest]? Extra options/modifiers.
extraDescription string? Additional notes/description.
Request Body: POST /api/v1/open-bons/batch (CreateOpenBonsBatchRequest)
Campo Tipo Obligatorio Descripción
tableId string?
subTableName string?
customerGroupId string?
printerId string?
workplaceId string?
items array[BatchOpenBonItem]?

OptionTemplates

Método Endpoint Descripción
GET /api/v1/option-templates
POST /api/v1/option-templates
DELETE /api/v1/option-templates/{id}
GET /api/v1/option-templates/{id}
PUT /api/v1/option-templates/{id}
Request Body: POST /api/v1/option-templates (CreateOptionTemplateRequest)
Campo Tipo Obligatorio Descripción
name string?
description string?
isActive boolean
sortOrder integer
groups array[ArticleOptionGroupDto]?
Request Body: PUT /api/v1/option-templates/{id} (UpdateOptionTemplateRequest)
Campo Tipo Obligatorio Descripción
name string?
description string?
isActive boolean?
sortOrder integer?
groups array[ArticleOptionGroupDto]?

Payments

Método Endpoint Descripción
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 (ProcessTablePaymentRequest)
Campo Tipo Obligatorio Descripción
tableId string? Table ID to pay.
openBonIds array[string]? Specific open bon IDs to pay (null = pay all).
items array[PartialPaymentItemRequest]? Partial payment items (alternative to OpenBonIds).

Allows paying a partial quantity of an item. | | payments | array[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). |

Request Body: POST /api/v1/payments/direct (ProcessDirectSaleRequest)
Campo Tipo Obligatorio Descripción
items array[DirectSaleItemRequest]? Items to sell.
payments array[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).

Receipts

Método Endpoint Descripción
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 (VoidReceiptRequest)
Campo Tipo Obligatorio Descripción
reason string?
terminalId string?
Request Body: POST /api/v1/receipts/{id}/change-payment (ChangePaymentTypeRequest)
Campo Tipo Obligatorio Descripción
newPaymentMethod string?

Reports

Método Endpoint Descripción
GET /api/v1/reports/article-stats Get article statistics (bestseller/worst seller).
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.

Reservations

Método Endpoint Descripción
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).
POST /api/v1/reservations/{id}/cancel Cancel a reservation.
POST /api/v1/reservations/{id}/confirm Confirm a reservation.
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 (CreateReservationRequest)
Campo Tipo Obligatorio Descripción
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.

SavedTransfer

Método Endpoint Descripción
GET /api/v1/saved-transfers
POST /api/v1/saved-transfers
DELETE /api/v1/saved-transfers/{id}
GET /api/v1/saved-transfers/{id}
PUT /api/v1/saved-transfers/{id}
POST /api/v1/saved-transfers/{id}/complete
POST /api/v1/saved-transfers/{id}/execute
POST /api/v1/saved-transfers/{id}/reset
Request Body: POST /api/v1/saved-transfers (CreateSavedTransferRequest)
Campo Tipo Obligatorio Descripción
recipientName string?
recipientIban string?
recipientBic string?
amount number
purpose string?
endToEndId string?
bankAccountId string?
Request Body: PUT /api/v1/saved-transfers/{id} (UpdateSavedTransferRequest)
Campo Tipo Obligatorio Descripción
recipientName string?
recipientIban string?
recipientBic string?
amount number
purpose string?
endToEndId string?
bankAccountId string?

SepaMandate

Método Endpoint Descripción
GET /api/v1/sepa-mandates
POST /api/v1/sepa-mandates
GET /api/v1/sepa-mandates/sign/{token}
POST /api/v1/sepa-mandates/sign/{token}
GET /api/v1/sepa-mandates/{id}
POST /api/v1/sepa-mandates/{id}/revoke
POST /api/v1/sepa-mandates/{id}/send
Request Body: POST /api/v1/sepa-mandates (CreateSepaMandateCommand)
Campo Tipo Obligatorio Descripción
customerId string?
debtorName string?
debtorIban string?
debtorBic string?
mandateType integer
Request Body: POST /api/v1/sepa-mandates/sign/{token} (SignMandateRequest)
Campo Tipo Obligatorio Descripción
signatureImageBase64 string?

Spendings

Método Endpoint Descripción
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 (CreateSpendingRequest)
Campo Tipo Obligatorio Descripción
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} (UpdateSpendingRequest)
Campo Tipo Obligatorio Descripción
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).

StockBookings

Método Endpoint Descripción
GET /api/v1/stock-bookings Get open stock bookings.
POST /api/v1/stock-bookings Create a new stock booking.
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.
Request Body: POST /api/v1/stock-bookings (CreateStockBookingRequest)
Campo Tipo Obligatorio Descripción
items array[StockBookingItemRequest]?
targetStock string?
workplaceName string?
distributorId string?
targetPrinter string?

StockInventory

Método Endpoint Descripción
GET /api/v1/stock-inventory Get inventory overview for all stocks.
GET /api/v1/stock-inventory/{stockId} Get inventory for a specific stock.

StockOrders

Método Endpoint Descripción
GET /api/v1/stock-orders Get open stock orders.
POST /api/v1/stock-orders Create a new stock order.
GET /api/v1/stock-orders/{id} Get a stock order by ID.
PUT /api/v1/stock-orders/{id} Update an existing stock order.
PUT /api/v1/stock-orders/{id}/status Update the status of a stock order.
Request Body: POST /api/v1/stock-orders (CreateStockOrderRequest)
Campo Tipo Obligatorio Descripción
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[StockOrderPositionRequest]?
Request Body: PUT /api/v1/stock-orders/{id} (UpdateStockOrderRequest)
Campo Tipo Obligatorio Descripción
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[StockOrderPositionRequest]?

Stocks

Método Endpoint Descripción
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 (CreateStockRequest)
Campo Tipo Obligatorio Descripción
name string?
stockType integer
isCookingMonitor boolean
Request Body: PUT /api/v1/stocks/{id} (UpdateStockRequest)
Campo Tipo Obligatorio Descripción
name string?
stockType integer?
isCookingMonitor boolean?
minMaxRules array[StockMinMaxRuleRequest]?
articleOrder array[string]?

Subscription

Método Endpoint Descripción
GET /api/v1/subscriptions
POST /api/v1/subscriptions
POST /api/v1/subscriptions/generate
POST /api/v1/subscriptions/simulate
DELETE /api/v1/subscriptions/{id}
GET /api/v1/subscriptions/{id}
PUT /api/v1/subscriptions/{id}
Request Body: POST /api/v1/subscriptions (CreateSubscriptionRequest)
Campo Tipo Obligatorio Descripción
customerId string?
name string?
description string?
positions array[InvoicePositionRequest]?
interval integer
startDate string
endDate string?
isBankDebit boolean
paymentTermDays integer
billingCompanyName string?
billingName string?
billingStreet string?
billingZipCode string?
billingCity string?
billingCountry string?
isNettoMode boolean
Request Body: PUT /api/v1/subscriptions/{id} (UpdateSubscriptionRequest)
Campo Tipo Obligatorio Descripción
name string?
description string?
positions array[InvoicePositionRequest]?
interval integer
endDate string?
isBankDebit boolean
paymentTermDays integer
isActive boolean
billingCompanyName string?
billingName string?
billingStreet string?
billingZipCode string?
billingCity string?
billingCountry string?
isNettoMode boolean

Tables

Método Endpoint Descripción
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 Código QR como PNG para la sesión de mesa.
GET /api/v1/tables/{id}/session Consultar la sesión QR activa de una mesa.
POST /api/v1/tables/{id}/session Generar/regenerar la sesión QR de una mesa.
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 Restablecer la llamada de camarero (cuando el camarero abre la mesa).
Request Body: POST /api/v1/tables/groups (CreateTableGroupRequest)
Campo Tipo Obligatorio Descripción
name string?
description string?
color string?
icon string?
sortOrder integer
isActive boolean
bonPrefix string?
showPlan boolean
useSeats boolean
seatCount integer
isPayOffsite boolean
Request Body: POST /api/v1/tables (CreateTableRequest)
Campo Tipo Obligatorio Descripción
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

Método Endpoint Descripción
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 (RecordTimeStampRequest)
Campo Tipo Obligatorio Descripción
userId string?
type integer
note string?
timestamp string?
Request Body: PUT /api/v1/time-tracking/sheets/{id}/stamps/{index} (EditTimeStampRequest)
Campo Tipo Obligatorio Descripción
newTimestamp string?
newType integer?
newNote string?

Vouchers

Método Endpoint Descripción
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.
Request Body: POST /api/v1/vouchers (CreateVoucherRequest)
Campo Tipo Obligatorio Descripción
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[VoucherArticleRequest]? Optional articles redeemable with the voucher.
Request Body: POST /api/v1/vouchers/{id}/redeem (RedeemVoucherRequest)
Campo Tipo Obligatorio Descripción
amount number Amount to redeem from the voucher.
bonId string? Optional receipt/bon ID for tracking.

WhatsApp

Método Endpoint Descripción
GET /api/v1/whatsapp/messages
POST /api/v1/whatsapp/send
POST /api/v1/whatsapp/send/invoice/{invoiceId}
POST /api/v1/whatsapp/send/work-order/{workOrderId}
GET /api/v1/whatsapp/templates
POST /api/v1/whatsapp/templates
DELETE /api/v1/whatsapp/templates/{id}
GET /api/v1/whatsapp/templates/{id}
PUT /api/v1/whatsapp/templates/{id}
POST /api/v1/whatsapp/test
Request Body: POST /api/v1/whatsapp/send (SendWhatsAppRequest)
Campo Tipo Obligatorio Descripción
to string?
templateName string?
language string?
parameters object?
contextType integer
contextId string?
customerId string?
Request Body: POST /api/v1/whatsapp/templates (CreateWhatsAppTemplateRequest)
Campo Tipo Obligatorio Descripción
name string?
metaTemplateName string?
language string?
contextType integer
parameterMappings array[WhatsAppParameterMappingDto]?
hasDocument boolean
isDefault boolean
isActive boolean
description string?

Workshop

Método Endpoint Descripción
GET /api/v1/workshop/orders
POST /api/v1/workshop/orders
GET /api/v1/workshop/orders/search
GET /api/v1/workshop/orders/{id}
POST /api/v1/workshop/orders/{id}/activities
DELETE /api/v1/workshop/orders/{id}/activities/{index}
POST /api/v1/workshop/orders/{id}/cancel
POST /api/v1/workshop/orders/{id}/complete
POST /api/v1/workshop/orders/{id}/invoice
PUT /api/v1/workshop/orders/{id}/items
POST /api/v1/workshop/orders/{id}/materials
DELETE /api/v1/workshop/orders/{id}/materials/{index}
POST /api/v1/workshop/orders/{id}/pause
POST /api/v1/workshop/orders/{id}/print-label
POST /api/v1/workshop/orders/{id}/reopen
POST /api/v1/workshop/orders/{id}/resume
POST /api/v1/workshop/orders/{id}/start
Request Body: POST /api/v1/workshop/orders (CreateWorkOrderRequest)
Campo Tipo Obligatorio Descripción
customerId string?
faultDescription string?
bikeDescription string?
frameNumber string?
estimatedCompletionDate string?
printLabel boolean
printerId string?
Request Body: POST /api/v1/workshop/orders/{id}/activities (AddActivityRequest)
Campo Tipo Obligatorio Descripción
description string?
durationMinutes integer