REST API¶
DiKAS offers a comprehensive REST API with over 500 public endpoints across more than 60 sections. This allows you to integrate DiKAS into your existing infrastructure. (Internal and legacy /rest/ endpoints are intentionally hidden from the public reference.)
Authentication¶
The API uses JWT bearer tokens for authentication.
Request a Token¶
Response:
{
"data": {
"accessToken": "eyJhbGciOiJIUzI1NiIs...",
"refreshToken": "dGhpcyBpcyBhIH...",
"expiresIn": 3600
},
"isSuccess": true
}
Use the Token¶
Set the token in the Authorization header:
Refresh the Token¶
POST /api/v1/auth/refresh
Content-Type: application/json
{
"accessToken": "eyJhbGciOiJI...",
"refreshToken": "dGhpcyBpcyBh..."
}
API Format¶
All responses follow this schema:
On errors:
{
"data": null,
"isSuccess": false,
"message": "Artikel nicht gefunden",
"errors": ["Artikel mit ID 'art_123' existiert nicht"]
}
Endpoint Overview¶
Articles¶
| Method | Endpoint | Description |
|---|---|---|
GET |
/api/v1/articles |
Retrieve all articles |
GET |
/api/v1/articles/{id} |
Retrieve a single article |
POST |
/api/v1/articles |
Create an article |
PUT |
/api/v1/articles/{id} |
Update an article |
DELETE |
/api/v1/articles/{id} |
Delete an article |
GET |
/api/v1/article-groups |
Retrieve all article groups |
POST |
/api/v1/article-groups |
Create an article group |
Example: Create an article
POST /api/v1/articles
Authorization: Bearer eyJ...
Content-Type: application/json
{
"name": "Cola 0,3l",
"price": 3.50,
"taxClass": 0,
"groupId": "artgrp_abc123"
}
Response (201 Created):
{
"data": {
"id": "art_def456",
"name": "Cola 0,3l",
"price": 3.50,
"taxClass": 0,
"groupId": "artgrp_abc123",
"isActive": true,
"createdDate": "2026-03-05T18:30:00Z",
"changedDate": "2026-03-05T18:30:00Z"
},
"isSuccess": true
}
Customers¶
| Method | Endpoint | Description |
|---|---|---|
GET |
/api/v1/customers |
All customers |
GET |
/api/v1/customers/{id} |
Single customer |
POST |
/api/v1/customers |
Create customer |
PUT |
/api/v1/customers/{id} |
Update customer |
DELETE |
/api/v1/customers/{id} |
Delete customer |
POST |
/api/v1/customers/{id}/credit |
Top up customer credit |
POST |
/api/v1/customers/{id}/payout |
Pay out customer credit |
GET |
/api/v1/customers/{id}/transactions |
Credit history |
Tables¶
| Method | Endpoint | Description |
|---|---|---|
GET |
/api/v1/tables |
All tables |
GET |
/api/v1/tables/{id} |
Single table |
POST |
/api/v1/tables |
Create table |
POST |
/api/v1/tables/{id}/gang |
Change course |
POST |
/api/v1/tables/{id}/cleaned |
Mark as cleaned |
Orders & Payments¶
| Method | Endpoint | Description |
|---|---|---|
POST |
/api/v1/open-bons |
Place order |
POST |
/api/v1/open-bons/batch |
Multiple orders |
POST |
/api/v1/payments/direct-sale |
Direct sale |
POST |
/api/v1/payments/table |
Table payment |
GET |
/api/v1/receipts |
Retrieve receipts |
POST |
/api/v1/receipts/{id}/void |
Void a receipt |
Staff¶
| Method | Endpoint | Description |
|---|---|---|
GET |
/api/v1/staff |
All employees |
POST |
/api/v1/staff |
Create employee |
POST |
/api/v1/staff/switch |
Staff switch |
End-of-Day Report¶
| Method | Endpoint | Description |
|---|---|---|
POST |
/api/v1/day-close |
Perform end-of-day report |
GET |
/api/v1/day-close |
All end-of-day reports |
GET |
/api/v1/day-close/{id} |
Single end-of-day report |
Reports¶
| Method | Endpoint | Description |
|---|---|---|
GET |
/api/v1/reports/revenue |
Revenue report |
GET |
/api/v1/reports/top-articles |
Best & worst sellers |
GET |
/api/v1/reports/wgr |
Article groups |
GET |
/api/v1/reports/weekly |
Weekly report |
Additional Endpoints¶
| Area | Prefix | Endpoints |
|---|---|---|
| Vouchers | /api/v1/vouchers |
CRUD, Redeem |
| Banking | /api/v1/bank-transfers |
CRUD, Import |
| FinTS | /api/v1/fints |
Retrieval, TAN |
| DATEV | /api/v1/datev |
Export, Send |
| Invoices | /api/v1/invoices |
CRUD, PDF |
| Subscriptions | /api/v1/subscriptions |
CRUD, Billing |
| Dunning | /api/v1/dunning |
Create, Send |
| Expenses | /api/v1/spendings |
CRUD, Attachments |
| Time tracking | /api/v1/time-tracking |
Clock in/out, Reports |
| Workshop | /api/v1/work-orders |
CRUD, Status |
| Backup | /api/v1/restore |
Upload |
| Config | /api/v1/config |
Read, Write |
Legacy API¶
For compatibility with existing integrations, there are legacy endpoints under /rest/:
| Endpoint | Description |
|---|---|
/rest/cp/add/{key}/{plu} |
Book article |
/rest/extern/customer/{key}/... |
Customer CRUD |
/rest/extern/voucher/{key}/... |
Voucher CRUD |
/rest/online/{key}/... |
Online orders |
/rest/disco/guest/pay/{key}[/{card}] |
Pay and check out a disco card (e.g. payment kiosk) |
Payment kiosks: workplace and printer
For /rest/disco/guest/pay one API key is enough for several payment kiosks. The workplace comes from the key (Admin → Settings → API keys); none is needed in the call (WorkplaceId may be null). Each kiosk names its receipt printer in the Printer field of the payment order – as printer id or as IP, also with port (192.168.1.52:9100), case-insensitive. If it is unknown or empty, the receipt prints on the workplace's target printer or the default printer; the payment does not fail because of it.
Unknown articles
If the till does not know an article of an online order (neither id, article number nor name), DiKAS creates it itself for order, open and pay – with the shop's name and price and the business's normal tax rate, without an article group. Nothing is created without a name, a deactivated article remains a rejection (Article not found), and at most 20 new articles are created per order.
Legacy endpoints use API keys instead of JWT tokens.
SignalR (Real-time)¶
For real-time updates (kitchen display, workshop, table status):
const connection = new signalR.HubConnectionBuilder()
.withUrl("/hubs/dikas", {
accessTokenFactory: () => jwtToken
})
.build();
connection.on("OrderCreated", (data) => {
console.log("Neue Bestellung:", data);
});
connection.on("TableStatusChanged", (data) => {
console.log("Tisch-Status:", data);
});
await connection.start();
Swagger / OpenAPI¶
The complete API reference with 565 public endpoints (60 sections) and schemas:
→ API Reference (Swagger) — Interactive documentation with search functionality
On a running DiKAS instance, Swagger is also directly accessible at https://<server>/swagger.
Next Step¶
→ Backup & Restore — Data backup