Settings
Reading settings
GET /settings/definitions lists every setting you can change, with its default value. A setting you have never written
takes that default.
GET /settings lists the settings you have written, with their values and when each took effect. GET /settings/{key}
returns one of them, and answers 404 for a setting you have never written. Both take asOf to read the settings as they
were, or will be, at another time; a value written to take effect later appears from then on.
require.homogeneous.currency
Description
When enabled, this setting enforces that all pricelists involved in a price query have the same currency. This is useful when you want to ensure consistent pricing without implicit currency conversions.
Default value: false
Behavior
| Condition | Result |
|---|---|
| All pricelists have the same currency | Request proceeds normally |
| Pricelists have different currencies | Returns HTTP 400 with error message |
currency_code parameter provided and doesn't match pricelist currency | Returns HTTP 400 with error message |
Error Responses
Heterogeneous currencies:
{
"status": 400,
"error": "Bad Request",
"message": "Heterogeneous currencies found in pricelists: [EUR, SEK]. All pricelists must have the same currency when setting require.homogeneous.currency is enabled."
}
Currency mismatch:
{
"status": 400,
"error": "Bad Request",
"message": "Pricelist currency EUR does not match requested currency SEK"
}
Configuration
Enable via the settings API:
PUT /settings/require.homogeneous.currency
Content-Type: application/json
{ "value": "true" }
Use Cases
- B2B pricing: Ensure customers always see prices in their contracted currency
- Regional stores: Prevent accidental cross-currency price comparisons
- Compliance: Enforce single-currency invoicing requirements
require.homogeneous.vat_mode
Description
When enabled, this setting enforces that all pricelists involved in a price query have the same VAT mode (all NET or all GROSS). This prevents mixing of price types that could lead to incorrect price comparisons.
Behavior
| Condition | Result |
|---|---|
| All pricelists are NET | Request proceeds normally |
| All pricelists are GROSS | Request proceeds normally |
| Mix of NET and GROSS pricelists | Returns HTTP 400 with error message |
Error Response
{
"timestamp": "2026-01-13T06:45:00.000Z",
"status": 400,
"error": "Bad Request",
"message": "Heterogeneous VAT modes found in pricelists: [NET, GROSS]. All pricelists must have the same VAT mode when setting require.homogeneous.vat_mode is enabled."
}
Configuration
Enable via the settings API:
PUT /settings/require.homogeneous.vat_mode
Content-Type: application/json
{ "value": "true" }
Use Cases
- Consistent pricing display: Ensure all prices shown are either all tax-inclusive or all tax-exclusive
- Invoice generation: Prevent mixing of NET and GROSS prices on the same document
- Price comparison accuracy: Avoid comparing prices with different VAT treatments
Related Settings
require.homogeneous.currency- Enforces same currency across pricelists
strict.article.validation
Description
When enabled, Quantaprice accepts a price only for a SKU whose article exists and is not deleted. This keeps prices for unknown or removed products out.
Default value: false
Behavior
| Condition | Result |
|---|---|
| The SKU is an article, active at the price's start | The price is written |
| The SKU has no article, or its article is deleted or not yet in force at the price's start | The price is refused, an unchanged one too: 400 for a single price, listed in failed in a batch |
Configuration
Enable via the settings API:
PUT /settings/strict.article.validation
Content-Type: application/json
{ "value": "true" }
Use Cases
- Data integrity: Ensure prices are only created for known products
- Migration safety: Catch typos or stale SKU references in bulk imports
- Workflow enforcement: Require article registration before pricing
strict.pricelist.validation
Description
When enabled, Quantaprice requires that all pricelists referenced in price uploads already exist before accepting the prices. This prevents price data from being uploaded to non-existent pricelists.
Default value: false
Behavior
| Condition | Result |
|---|---|
| A pricelist with the code has been created | The price is written |
| No pricelist with the code has ever been created | The price is refused: 400 for a single price, listed in failed in a batch |
Without this setting, a price for an unknown pricelist code is stored and appears once a pricelist with that code is created.
Configuration
Enable via the settings API:
PUT /settings/strict.pricelist.validation
Content-Type: application/json
{ "value": "true" }
Use Cases
- Data integrity: Ensure prices are only uploaded to known pricelists
- Migration safety: Catch incorrect pricelist codes in bulk imports
- Workflow enforcement: Require pricelist creation before price uploads
ingest.skip.dedup
Description
Bulk-load mode. Normally, a price identical to the current one is accepted but stores nothing and records no change. With this setting on, that check is skipped and every price is written, which makes very large loads faster.
Default value: false
Turn it on for a large first load and off when the load is done: while it is on, re-sending unchanged prices stores redundant versions and, with change events on, records a change for each.
Configuration
PUT /settings/ingest.skip.dedup
Content-Type: application/json
{ "value": "true" }
See Loading Data.
default.tax.area
Description
The tax area for prices with VAT where a request may leave it out and does: the console's article pages, and API reads such as GET /price/pricelists-for-sku/{sku}. POST /price/query always needs a tax_area.
Default value: SE
fx.rate.auto.update
Description
When enabled, Quantaprice fetches exchange rates from the European Central Bank (ECB) every 24 hours. There is no fixed time of day.
Default value: true
Behavior
| Condition | Result |
|---|---|
| Enabled and ECB publishes new rates | Rates are fetched and stored automatically every 24 hours |
| Enabled but ECB has no new rates (weekend/holiday) | No update; last available rates remain active |
| Disabled | No automatic fetching; rates must be uploaded manually via POST /fx/daily or triggered via POST /fx/fetch |
Configuration
PUT /settings/fx.rate.auto.update
Content-Type: application/json
{ "value": "true" }
Use Cases
- Hands-off FX management: Keep rates current automatically for multi-currency pricing
- Daily price recalculation: Ensure price queries always use the latest exchange rates
Rates are stored per EUR, and a conversion between two other currencies goes through EUR. See FX Rates.
change.events.enabled
Description
When enabled, Quantaprice delivers change events to your registered webhooks. The changelog records every change whatever this setting says, and can always be polled.
Webhook deliveries must be included in your plan; this setting turns them on for your tenant.
Default value: false
Behavior
| Condition | Result |
|---|---|
| Enabled, and included in your plan | Changes are delivered to active webhooks |
| Disabled, or not included in your plan | Nothing is delivered to webhooks; the changelog is unaffected |
Configuration
PUT /settings/change.events.enabled
Content-Type: application/json
{ "value": "true" }
Use Cases
- Data synchronization: Poll the changelog to keep external systems in sync with Quantaprice
- Downstream updates: Use webhooks for near real-time notification when prices change
- Audit trail: Track what changed, when, and by whom
- Event-driven workflows: Trigger downstream processes on pricing updates
See Change Events for full documentation on the changelog and webhook systems.
retention.enabled, retention.max.versions, retention.history.ms
Description
Limit how much price history is kept per SKU and pricelist. Available when your plan includes history retention; your plan also sets the largest values you can choose.
| Setting | Default | Effect |
|---|---|---|
retention.enabled | false | Turns retention on |
retention.max.versions | 0 | Keep at most this many versions; 0 means no limit |
retention.history.ms | 2592000000 (30 days) | Keep versions from the last N milliseconds |
The version in force, anything scheduled after it, and the most recent few versions are always kept. See Historical Pricing.
Configuration
PUT /settings/retention.enabled
Content-Type: application/json
{ "value": "true" }
See also
- Querying Prices — settings like
require.homogeneous.currencyaffect query behaviour. - Change Events —
change.events.enabledcontrols the webhook deliveries described there. - FX Rates —
fx.rate.auto.updatecontrols whether rates are fetched from the ECB. - API Reference — full spec for
PUT /settings/{key}.