Settings
Configuration in Kontier lives at four levels, and the level a value lives at decides who it affects and when.
| Scope | Holds | Example |
|---|---|---|
| Organization | Things true of the company, and defaults for every workspace | Company name, tax profile, roles, default invoicing behaviour |
| Workspace | Overrides that should differ between live and sandbox | A sandbox-only payment term, a test e-invoicing channel |
| Entity | Things true of one record | A customer's payment terms, a plan's dunning policy |
| Deployment | Things the operator of the installation sets | Grace periods, retention windows |
Deployment settings are not yours to change; they belong to whoever runs the installation. Everything else is.
Over the API
The keyed organization settings are managed with the settings endpoints described in Read and write settings over the API. Some areas have their own endpoints as well, for example the organization profile and the e-invoicing channels; their pages say so.
Settings inherit down a ladder
A setting is resolved down a ladder: the platform default, then the organization, then the workspace, then, for settings that records can carry, the entity (a customer, then a subscription). The lowest level that holds a value wins; a level that holds none follows the one above it.
Code
Each setting has a lowest level it can be set at. Some stop at the organization (they describe the company), most reach the workspace, and a few reach records. Organizations below yours in an organization tree inherit your values too, unless a setting is marked as local to one organization.
A level above can also constrain the levels below it: lock a setting so it cannot be overridden, or bound it so a lower level may only choose inside a range or an allowed set.
Where a saved value lands
- Saved from a live workspace, a value lands at the organization by default, so it inherits into every workspace, sandboxes included. Choose the workspace level explicitly for an override that governs only the workspace you are in.
- Saved from a sandbox, a value lands on that sandbox only. An experiment in sandbox never changes live, and a sandbox cannot write at organization level.
Removing a level's own value makes it follow the level above again, or the platform default when there is none above.
Sandbox overrides stay in sandbox
A value you set while in sandbox applies to that sandbox only. When you are happy with it, set it again from live, or it will not be there when it matters.
Entity settings follow the same ladder: many of them shadow a workspace default. That is covered in Entity settings.
Unknown keys are refused
The settings store validates every key against its catalog. A key it does not
know is refused (400 VALIDATION, field code UNKNOWN_SETTING), and so is a
value of the wrong type or outside its range (field code INVALID_VALUE), so a
typo fails loudly rather than being saved
and read by nothing.
Read and write settings over the API
API keys can read and write the keyed settings. Every write is validated against the settings catalog.
| Call | Does |
|---|---|
GET /v1/organization/settings/catalog | Every key with its type, default and description |
GET /v1/organization/settings | The effective value of every setting, and where it came from |
GET /v1/organization/settings/resolve | Settings resolved for one entity, e.g. ?entity=customer:<id>, with the level that supplied each value and the level that locked or bounded it |
PUT /v1/organization/settings | Create or update values, and optionally a key's policy for the levels below |
DELETE /v1/organization/settings/{key} | Remove this level's own value so it follows the level above again |
GET /v1/organization/subtree-settings/own, GET /v1/organization/subtree-settings/below | What this organization set itself, and which organizations below hold their own value |
A PUT body groups values by type: settings for string, integer and boolean
keys (each in its wire spelling, so "true" and "30" are strings), lists
for list keys and amounts for money keys. level is organization or
workspace and follows the rules in
Where a saved value lands. To stop deciding a key
at a level, DELETE it instead of sending an empty value.
Copy finance on every email from this workspace
To lock or bound a key for the levels below, send its value together with an
entry under policies, for example
"settings": {"security.sign_in.require_mfa": "true"}, "policies": {"security.sign_in.require_mfa": {"policy": "locked"}}.
policy is default, bounded (with min/max, min_amount/max_amount or
allowed) or locked. Leaving policies out keeps the policy a key already has;
send default to lift a lock or bound.
What is organization-wide
Some things cannot differ between workspaces, because they describe the company rather than an environment:
- the company profile and tax identity
- security settings
- branding
- roles, members and invitations
- checkout links
- background job limits
Invoice numbers are per workspace
Invoice numbering series are kept per workspace. Finalising an invoice in sandbox uses the sandbox's own series and never consumes a number from your live sequence.
Choosing a scope
When you are deciding where to configure something:
| Question | Answer |
|---|---|
| Should it apply everywhere unless overridden? | Organization |
| Should it differ between live and sandbox? | Workspace override |
| Does it describe the company to the outside world? | Organization |
| Is it true of one customer, plan or subscription only? | Entity |
| Should every tenant on this installation share it? | Deployment, so not yours |
Where to go next
| Page | Covers |
|---|---|
| Organization settings | The company profile, tax identity, security and branding |
| Workspaces | What a workspace isolates, and sandbox |
| Entity settings | Configuration that lives on records, and what it shadows |