Prices commands

Reference for the `revenexx prices` commands — every subcommand with a runnable example.

Auto-generated. This page is generated from the revenexx CLI by tools/sync-cli-reference.mjs. Don't edit it by hand — your changes will be overwritten.

Every revenexx prices subcommand. The example shows the required arguments; the options table lists every flag the command accepts, with a ✓ marking required flags. Some flag names carry a -_ (e.g. --attribute-_values) — that is the exact token the CLI accepts, so copy them verbatim. Run revenexx prices <command> --help for the live options.

entries-adjust

Bash
revenexx prices entries-adjust \
    --list-id ''
FlagRequiredDescription
--list-id <list-id>The price list the entries belong to. An id no list in this tenant has answers 404 rather than an empty page.
--amount <amount>Absolute change added to every unit price, in the list's currency.
--dry-run [value]true writes nothing and answers the same preview — what the Cockpit dialog shows before it commits.
--percent <percent>Relative change in percent: 5 raises by 5 %, -10 cuts by 10 %.
--rounding <rounding>Ending the computed prices snap to (nearest match). Omit to use the tenant's bulk_adjust_rounding setting.
--sku-prefix <sku-prefix>Restrict the change to entries whose SKU starts with this (a prefix, case-sensitive, no wildcards). Entries identified only by product_id never match a prefix. Omit to change the whole list.

entries-bulk

Bash
revenexx prices entries-bulk \
    --list-id '' \
    --entries one two three
FlagRequiredDescription
--list-id <list-id>The price list the entries belong to. An id no list in this tenant has answers 404 rather than an empty page.
--entries [entries...]At most 5000 rows per call — send a large book in chunks.
--mode <mode>Default 'upsert': a row naming a rung the list already has (same product/sku AND quantity_min) updates it. 'append' always inserts — a re-run then duplicates the ladder, which is what makes an ambiguous tier table.

entries-create

Bash
revenexx prices entries-create \
    --list-id ''
FlagRequiredDescription
--list-id <list-id>The price list the entries belong to. An id no list in this tenant has answers 404 rather than an empty page.
--metadata <metadata>Free-form bag: whatever JSON object you write round-trips exactly, and this app never reads it. Its keys are yours.
--price-type <price-type>Default 'standard'; 'on_request' is the explicit no-price marker — it STOPS resolution for this item on this list and answers "price on request" even where a cheaper list exists.
--product-id <product-id>The product this rung prices. An entry needs product_id or sku — the row CHECK enforces it.
--quantity-min <quantity-min>Tier threshold (Staffelpreis): this price applies from this quantity upwards (default 1). The rungs of one item are the entries sharing its identity; the highest threshold at or below the requested quantity wins.
--sku <sku>The article number this rung prices (alternative to product_id). Matched exactly on resolve — never normalised or case-folded.
--unit <unit>Unit of measure the price is per — free text, neither validated nor converted here. A resolve call’s \
--unit-price <unit-price>Price for ONE unit of \
--valid-from <valid-from>Start of this entry’s own validity (ISO 8601) — how a promo price is expressed: a second rung, live only for its window. null = open-ended.
--valid-until <valid-until>End of this entry’s own validity; null = open-ended. Outside it the rung is skipped and the ladder resolves as if it were not there.

entries-delete

Bash
revenexx prices entries-delete \
    --list-id '' \
    --id ''
FlagRequiredDescription
--list-id <list-id>The price list the entries belong to. An id no list in this tenant has answers 404 rather than an empty page.
--id <id>The price entry, by id. An entry that belongs to a different list answers 404.

entries-get

Bash
revenexx prices entries-get \
    --list-id '' \
    --id ''
FlagRequiredDescription
--list-id <list-id>The price list the entries belong to. An id no list in this tenant has answers 404 rather than an empty page.
--id <id>The price entry, by id. An entry that belongs to a different list answers 404.

entries-ladder

Bash
revenexx prices entries-ladder \
    --list-id '' \
    --base-price 9.99
FlagRequiredDescription
--list-id <list-id>The price list the entries belong to. An id no list in this tenant has answers 404 rather than an empty page.
--base-price <base-price>Price for ONE unit at the FIRST tier, in the list’s currency and on the list’s tax basis — a decimal amount in major units (19.90), never minor units/cents.
--discount-percent <discount-percent>Discount applied per tier, COMPOUNDED down the ladder rather than off the base price: 5 gives 19.90 / 18.91 / 17.96. Default 0.
--product-id <product-id>The item the ladder prices.
--quantities [quantities...]Tier thresholds, ascending — an array of numbers or a comma-separated string ('1, 10, 50'). Duplicates are collapsed and the set is sorted. Default 1, 10, 50, at most 50 tiers.
--replace [value]Default true: the item's existing entries in this list are removed first, so the ladder IS the ladder. false appends.
--rounding <rounding>Ending the computed prices snap to (nearest match). Omit to use the tenant's bulk_adjust_rounding setting.
--sku <sku>The item the ladder prices (alternative to product_id).
--unit <unit>Unit of measure carried onto every generated tier. Free text, neither validated nor converted.

entries-list

Bash
revenexx prices entries-list \
    --list-id ''
FlagRequiredDescription
--list-id <list-id>The price list the entries belong to. An id no list in this tenant has answers 404 rather than an empty page.
--id <id>Filter to one entry by id, within this list.
--product-id <product-id>Filter to one product — the whole tier ladder that prices it, in this list.
--sku <sku>Filter by exact SKU. Not a prefix and not case-insensitive — the bulk adjust route is where \
--price-type <price-type>Filter by entry type. \
--quantity-min <quantity-min>Filter to one exact tier threshold — \
--unit-price <unit-price>Filter to entries at one exact amount, in the list’s currency and on its tax basis. Equality, not a range — \
--unit <unit>Filter by exact unit of measure.
--valid-from <valid-from>Exact equality on the start of the entry’s own validity — matched to the stored microsecond, not a range. This app publishes no from/until query; narrow a period client-side, or by \
--valid-until <valid-until>Exact equality on the end of the entry’s own validity — matched to the stored microsecond, not a range. This app publishes no from/until query; narrow a period client-side, or by \
--created-at <created-at>Exact equality on the creation instant — matched to the stored microsecond, not a range. This app publishes no from/until query; narrow a period client-side, or by \
--updated-at <updated-at>Exact equality on the last change — a bulk adjust only writes the rows whose price actually moved — matched to the stored microsecond, not a range. This app publishes no from/until query; narrow a period client-side, or by \
--limit <limit>Page size (default 50, max 200).
--offset <offset>Row offset for pagination (default 0).
--order <order>Sort by one column: 'column' | 'column.asc' | 'column.desc'. A bare column sorts ascending. Anything else is refused with 400.
--filter <column=value>Filter rows by column equality (repeatable).

entries-replace

Bash
revenexx prices entries-replace \
    --list-id '' \
    --entries one two three
FlagRequiredDescription
--list-id <list-id>The price list the entries belong to. An id no list in this tenant has answers 404 rather than an empty page.
--entries [entries...]The complete new entry set (set semantics).

entries-update

Bash
revenexx prices entries-update \
    --list-id '' \
    --id ''
FlagRequiredDescription
--list-id <list-id>The price list the entries belong to. An id no list in this tenant has answers 404 rather than an empty page.
--id <id>The price entry, by id. An entry that belongs to a different list answers 404.
--metadata <metadata>Free-form bag: whatever JSON object you write round-trips exactly, and this app never reads it. Its keys are yours.
--price-type <price-type>Default 'standard'; 'on_request' is the explicit no-price marker — it STOPS resolution for this item on this list and answers "price on request" even where a cheaper list exists.
--product-id <product-id>The product this rung prices. An entry needs product_id or sku — the row CHECK enforces it.
--quantity-min <quantity-min>Tier threshold (Staffelpreis): this price applies from this quantity upwards (default 1). The rungs of one item are the entries sharing its identity; the highest threshold at or below the requested quantity wins.
--sku <sku>The article number this rung prices (alternative to product_id). Matched exactly on resolve — never normalised or case-folded.
--unit <unit>Unit of measure the price is per — free text, neither validated nor converted here. A resolve call’s \
--unit-price <unit-price>Price for ONE unit of \
--valid-from <valid-from>Start of this entry’s own validity (ISO 8601) — how a promo price is expressed: a second rung, live only for its window. null = open-ended.
--valid-until <valid-until>End of this entry’s own validity; null = open-ended. Outside it the rung is skipped and the ladder resolves as if it were not there.

lists-create

Bash
revenexx prices lists-create \
    --code dealer-de \
    --name Dealer prices
FlagRequiredDescription
--code <code>Unique list code per tenant — the handle every import and integration addresses this list by. A code already in use answers 409.
--name <name>Operator-facing name, shown wherever a human picks a list.
--channel-id <channel-id>Scope: only this sales channel. Beats the open lists, loses to contact and organization.
--contact-id <contact-id>Scope: only this contact. The most specific scope there is — it beats organization, channel and every open list, whatever their priority.
--currency <currency>ISO 4217 code (default EUR) — the currency of EVERY amount in this list, since entries carry none of their own. Resolution only considers lists matching the currency of the call; nothing is ever converted.
--description <description>Free text for whoever maintains the list — why it exists and who it is for. Never shown to a buyer.
--is-default [value]The fallback list. Within its group it sorts LAST, so it wins only where nothing more specific priced the item. Use prices.lists.make-default to move the flag rather than setting it here — two defaults leave a tie to row order.
--labels <labels>Localised names, keyed by language tag — {"de": "Händlerpreise", "en": "Dealer prices"}. Omit to show \
--metadata <metadata>Free-form bag: whatever JSON object you write round-trips exactly, and this app never reads it. Its keys are yours — ERP provenance is the usual content.
--organization-id <organization-id>Scope: only buyers of this organization. Beats channel-scoped and open lists.
--priority <priority>Tie-break WITHIN a specificity group (higher wins, default 0). It never beats scope: an organization list at 0 still wins over an open list at 100.
--requires-auth [value]Gate: when true the list resolves only for an authenticated buyer (contact or organization context); anonymous resolve calls get on_request. Default false (open to everyone).
--status <status>Default 'active' — only active lists resolve. 'inactive' retires a list without deleting its prices.
--tax-basis <tax-basis>Whether the amounts in this list are net (tax excluded) or gross (tax included) — the one fact a price cannot be without. Omit (null) to inherit the tenant's tax_inclusive_default setting; the resolve answer names which of the two decided under tax_basis_source.
--tax-included [value]LEGACY mirror of tax_basis. false is the column default and is NOT read as a statement of intent; true is read as gross, and only where tax_basis is null. Prefer tax_basis.
--valid-from <valid-from>Start of the validity window of the WHOLE list (ISO 8601); null = open-ended. Outside it the list is not a candidate at all.
--valid-until <valid-until>End of the validity window of the whole list; null = open-ended. Lets a season expire on its own instead of being deactivated by hand.

lists-defaults

Bash
revenexx prices lists-defaults

lists-delete

Bash
revenexx prices lists-delete \
    --id ''
FlagRequiredDescription
--id <id>The price list, by id.

lists-get

Bash
revenexx prices lists-get \
    --id ''
FlagRequiredDescription
--id <id>The price list, by id.

lists-list

Bash
revenexx prices lists-list
FlagRequiredDescription
--id <id>Filter to one list by id. The same row \
--code <code>Filter by the exact list code — the unique per-tenant handle every integration joins on.
--name <name>Filter by the exact operator-facing name. Exact match, not a search: prefer \
--description <description>Filter by the exact description text. Exact match, not a search.
--currency <currency>Filter to one ISO 4217 currency. Resolution only ever considers lists in the currency of the call, so this is how to see the set a given quote can draw on.
--status <status>Filter by status. Only \
--priority <priority>Filter to one exact priority value — the tie-break within a specificity group.
--is-default [value]Filter to the default list — the one \
--tax-basis <tax-basis>Filter by declared basis. \
--tax-included [value]Filter by the legacy gross mirror. \
--requires-auth [value]Filter to the lists that resolve only for an authenticated buyer — what an anonymous storefront will never see.
--contact-id <contact-id>Filter to the lists scoped to one contact — the most specific buyer scope there is.
--organization-id <organization-id>Filter to the lists scoped to one organization.
--channel-id <channel-id>Filter to the lists scoped to one sales channel.
--valid-from <valid-from>Exact equality on the start of the list’s validity window — matched to the stored microsecond, not a range. This app publishes no from/until query; narrow a period client-side, or by \
--valid-until <valid-until>Exact equality on the end of the list’s validity window — matched to the stored microsecond, not a range. This app publishes no from/until query; narrow a period client-side, or by \
--created-at <created-at>Exact equality on the creation instant — matched to the stored microsecond, not a range. This app publishes no from/until query; narrow a period client-side, or by \
--updated-at <updated-at>Exact equality on the last change — matched to the stored microsecond, not a range. This app publishes no from/until query; narrow a period client-side, or by \
--limit <limit>Page size (default 50, max 200).
--offset <offset>Row offset for pagination (default 0).
--order <order>Sort by one column: 'column' | 'column.asc' | 'column.desc'. A bare column sorts ascending. Anything else is refused with 400.
--filter <column=value>Filter rows by column equality (repeatable).

lists-make-default

Bash
revenexx prices lists-make-default \
    --list-id '' \
    --data '{ "key": "value" }'
FlagRequiredDescription
--list-id <list-id>The price list the entries belong to. An id no list in this tenant has answers 404 rather than an empty page.
--data <data>Request body

lists-update

Bash
revenexx prices lists-update \
    --id ''
FlagRequiredDescription
--id <id>The price list, by id.
--channel-id <channel-id>Scope: only this sales channel. Beats the open lists, loses to contact and organization.
--code <code>Unique list code per tenant — the handle every import and integration addresses this list by. A code already in use answers 409.
--contact-id <contact-id>Scope: only this contact. The most specific scope there is — it beats organization, channel and every open list, whatever their priority.
--currency <currency>ISO 4217 code (default EUR) — the currency of EVERY amount in this list, since entries carry none of their own. Resolution only considers lists matching the currency of the call; nothing is ever converted.
--description <description>Free text for whoever maintains the list — why it exists and who it is for. Never shown to a buyer.
--is-default [value]The fallback list. Within its group it sorts LAST, so it wins only where nothing more specific priced the item. Use prices.lists.make-default to move the flag rather than setting it here — two defaults leave a tie to row order.
--labels <labels>Localised names, keyed by language tag — {"de": "Händlerpreise", "en": "Dealer prices"}. Omit to show \
--metadata <metadata>Free-form bag: whatever JSON object you write round-trips exactly, and this app never reads it. Its keys are yours — ERP provenance is the usual content.
--name <name>Operator-facing name, shown wherever a human picks a list.
--organization-id <organization-id>Scope: only buyers of this organization. Beats channel-scoped and open lists.
--priority <priority>Tie-break WITHIN a specificity group (higher wins, default 0). It never beats scope: an organization list at 0 still wins over an open list at 100.
--requires-auth [value]Gate: when true the list resolves only for an authenticated buyer (contact or organization context); anonymous resolve calls get on_request. Default false (open to everyone).
--status <status>Default 'active' — only active lists resolve. 'inactive' retires a list without deleting its prices.
--tax-basis <tax-basis>Whether the amounts in this list are net (tax excluded) or gross (tax included) — the one fact a price cannot be without. Omit (null) to inherit the tenant's tax_inclusive_default setting; the resolve answer names which of the two decided under tax_basis_source.
--tax-included [value]LEGACY mirror of tax_basis. false is the column default and is NOT read as a statement of intent; true is read as gross, and only where tax_basis is null. Prefer tax_basis.
--valid-from <valid-from>Start of the validity window of the WHOLE list (ISO 8601); null = open-ended. Outside it the list is not a candidate at all.
--valid-until <valid-until>End of the validity window of the whole list; null = open-ended. Lets a season expire on its own instead of being deactivated by hand.

resolve

Bash
revenexx prices resolve \
    --items one two three
FlagRequiredDescription
--items [items...]Items to price, at most 200 per call — a whole cart or a whole product listing in one round trip. The answer holds one entry per item, in this order.
--at <at>The instant every validity window — list and entry — is evaluated at (ISO 8601). Default now. This is how a promo price is previewed before it starts, and it is echoed as \
--channel-id <channel-id>Buyer context: the sales channel. Third scope — beats the open lists, loses to contact and organization.
--contact-id <contact-id>Buyer context: the contact this quote is for. The most specific scope — a list naming this contact beats every other list, whatever their priority. Sending it (or organization_id) is also what makes the buyer AUTHENTICATED for \
--currency <currency>ISO 4217 code the quote is wanted in. ONLY lists in this currency are candidates and nothing is ever converted, so a wrong value here is not a rounding difference — it is no price at all. Omit to take the buyer market’s currency, then the tenant’s default_currency; \
--market-id <market-id>Buyer context: the market, as a uuid pin for older callers. Prefer the \
--organization-id <organization-id>Buyer context: the organization the buyer belongs to. Second most specific scope; also counts as authenticated.

vocabularies-get

Bash
revenexx prices vocabularies-get \
    --name list-statuses
FlagRequiredDescription
--name <name>The vocabulary name — the part after the dot in the qualified id.

vocabularies-list

Bash
revenexx prices vocabularies-list
FlagRequiredDescription
--filter <column=value>Filter rows by column equality (repeatable).
Was this page helpful?