Skip to main content
This page is a field-level lookup. For task steps, see how to add a product and how to manage products. For the reasoning behind these fields, see products: concepts, point in time: quantity, and period of time: quantity.

Product fields

Type and subtype compatibility

Credits or custom currency and on/off are both on the roadmap. The subtype selector in the dashboard’s product creation flow currently disables them, so quantity is the only subtype you can select for either product type today. Point in time products are charged per event. Period of time products are charged for access or capacity held across a window. See products: concepts for why this split exists, and how to add a product for where this choice is made.

Product status

Archiving is intended to be permanent. There is no supported way to move a product back to active or inactive once it’s archived. Status changes are currently API-only. The dashboard doesn’t have status controls yet. See how to change a product’s status for the task steps.

How product changes ripple into contracts and invoices

An already-created pricing preset is the one thing that can’t be edited or removed once created (see What is not yet supported), only added to. Contracts and invoices reference a product by ID rather than copying its fields, which is why the changes above are visible to contracts and invoices immediately, without any recomputation step. The dashboard’s product creation flow requires a pricing preset and a usage-tracking configuration in the same flow, so a product created from the dashboard always has pricing attached from the start. The API is more permissive: product creation and pricing creation are separate calls, so an API-created product can exist with no pricing at all until a preset is explicitly attached. The type-change restriction described above only applies once a pricing preset exists: for an unpriced product, type is still open.

Pricing presets

A product can carry more than one pricing preset. One preset per product can be marked default, which is the one used when the product is added to a contract, unless a different preset is explicitly selected for that contract. A pricing preset is defined in two parts: the rate itself, and how usage is tracked to determine the quantity that rate applies to.

Rate fields

Usage tracking fields

Quantity source vs. quantity type

These are two independent axes, easy to conflate since the UI presents them close together: Both point in time and period of time products support on demand and recurring quantity types. On demand is not equivalent to a “one-off invoice.” A one-off invoice is a contract set up to produce a single invoice ever, a separate, invoice-level construct that Zenskar’s v3 does not support. On demand and recurring both still get invoiced on whatever cadence the contract specifies; the distinction is about whether the billing relationship renews on its own, not about invoice count. See how to add a product: phase 3 for the step-by-step flow, and point in time: quantity or period of time: quantity for how this axis plays out differently by product type.

Deletion behavior

A product cannot be deleted while any contract still references it. Deleting a product soft-deletes its pricing presets along with it. Already-finalized invoices retain their historical data regardless, since the underlying records are kept for audit purposes even after deletion. Deletion is currently API-only. There’s no delete action in the dashboard yet. See how to delete a product for the task steps, and products: concepts for why deletion works this way.

Tax configuration

Tax identity is attached to the product, not the contract, since the product is the SKU that determines the applicable tax category. Each product carries a tax code. Pricing presets separately specify whether the price is tax-inclusive or tax-exclusive. Zenskar combines the product’s tax category with the pricing’s tax nature to determine the applicable tax rate and value for invoicing. Tax rates are managed at the organization level, under sales tax settings, and can pull from Avalara or be managed manually for geographies where Avalara is not used.

What is not yet supported

  • Product groups and bundles.
  • Editing or deleting an already-created pricing preset. Pricing can only be added, not changed or removed, once created.
  • Custom attributes on the product schema are supported in the data model, but not yet exposed in the contract or product UI.
  • Changing a product’s status, or deleting a product, from the dashboard. Both are available today only through the API.