Skip to main content
PUT
PUT /rest/settings — Bulk-update tenant settings

Authorizations

Authorization
string
header
required

Bearer-Token, erhalten über den Login-Endpunkt (POST /rest/login).

Body

application/json

Validation for the bulk settings update.

export_format is validated against {@see ExportFormat}, the single source of truth for export formats. The previous hardcoded list (csv,lodas,zucchetti) predates that enum: lodas was the C++/stamp.json spelling for DATEV LODAS, which the enum encodes as datev ({@see ExportFormat::DatevLodas}). The list was therefore both too narrow (no csv_extended, datev_lug, agenda, projects) and inconsistent with every other consumer of the format value (ExportController resolves ?format= through the enum).

Decision: accept the enum values, and keep the legacy spelling working by normalizing lodas to datev in {@see prepareForValidation()} instead of rejecting it. Old clients (and tenants whose value was imported from stamp.json as lodas) keep saving successfully, while every new write stores the canonical enum value. Stored legacy lodas values are read-only strings (Tenant::exportFormat()) and are intentionally left untouched — no data migration is performed here.

language is a deliberate subset of {@see Locale}: only the two locales the tenant-wide default is offered for today. It references the enum cases so a renamed/removed locale breaks at compile time instead of silently drifting.

company_name
string
Maximum string length: 255
timezone
string
language
enum<string>
Available options:
de,
en
terminal_message
string | null
Maximum string length: 500
card_format
enum<string>
Available options:
dec_10,
dec_6,
hex_6,
hex_14
zucchetti_terminal_key
string | null
Maximum string length: 255
datev_berater_nr
string | null
Maximum string length: 20
datev_mandanten_nr
string | null
Maximum string length: 20
auto_clockout_time
string | null
Pattern: ^\d+$
night_shift_boundary
string | null
Pattern: ^\d+$
auto_approve_corrections_minutes
integer | null
Required range: 1 <= x <= 120
compliance_min_rest_hours
integer
Required range: 10 <= x <= 11
compliance_night_start
integer
Required range: 22 <= x <= 24
compliance_night_end
integer
Required range: 5 <= x <= 7
compliance_min_free_sundays
integer
Required range: 6 <= x <= 15
compliance_average_period_weeks
integer
Required range: 4 <= x <= 52
compliance_night_worker_avg_weeks
integer
Required range: 4 <= x <= 8
vacation_carryover_cutoff
string
Pattern: ^(0[1-9]|1[0-2])-(0[1-9]|[12]\d|3[01])$
vacation_extra_expiry
string | null
Pattern: ^(0[1-9]|1[0-2])-(0[1-9]|[12]\d|3[01])$
vacation_rounding_enabled
enum<string>
Available options:
0,
1
vacation_waiting_period_enabled
enum<string>
Available options:
0,
1
vacation_waiting_period_display_mode
enum<string>
Available options:
anteilig,
voll_mit_hinweis,
zurueckhalten
vacation_reminder_channels
string
Pattern: ^(inbox|push|email)(,(inbox|push|email))*$
pause_staged
enum<string>
Available options:
0,
1
export_format
enum<string>

Registry of all file-based export formats. Adding a new export (e.g. Agenda Lohn und Gehalt) means: implement ExportProvider, add a case here, add the i18n label in the frontend.

Available options:
csv,
csv_extended,
datev,
datev_lug,
agenda,
zucchetti,
projects
roster.auto_pause_mode
enum<string>

Automatic minimum-pause deduction mode for roster days (tenant setting roster.auto_pause_mode).

Available options:
off,
legal,
planned,
max_of_both
roster.no_show_detection
enum<string>
Available options:
0,
1
roster.clock_in_window_minutes
integer | null
Required range: 1 <= x <= 1440
roster.capture_capping
enum<string>
Available options:
off,
shift_start,
shift_bounds
roster.capture_rounding
enum<string>
Available options:
off,
5,
10,
15
roster.capture_rounding_mode
enum<string>
Available options:
employer,
nearest
roster.flag_unplanned_capture
enum<string>
Available options:
0,
1
roster.unplanned_tolerance_minutes
integer
Required range: 0 <= x <= 1440
roster.enforce_work_areas
enum<string>
Available options:
0,
1
roster.fairness_window_weeks
integer
Required range: 1 <= x <= 52
roster.wish_budget_per_month
integer
Required range: 1 <= x <= 100
roster.auto_post_open_on_understaffing
enum<string>
Available options:
0,
1
roster.self_service_swap_auto_approve
enum<string>
Available options:
0,
1
roster.acknowledgement_window_hours
integer
Required range: 1 <= x <= 336
payroll.surcharge_source
enum<string>
Available options:
flags,
rules

Response

data
object
required