> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://docs.solvimon.com/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.solvimon.com/_mcp/server.

## Summary

This release introduces pricing plan groups, an invoice cadence that is independent of the pricing period, reverse-a-payment support, dynamic variables in quote templates, and a clearer payment status on invoices, alongside subscription, customer and integration improvements.

## Pricing

**Pricing plan groups**
A new `PricingPlanGroup` resource lets you group related [pricing plans](/platform-guides/products-and-pricing/pricing-plans) together with the rules for moving between them (upgrade, downgrade and cancellation timing). A pricing plan belongs to at most one group. Create and manage groups through `POST /pricing-plan-groups` and the accompanying CRUD endpoints; a read-only link field on the pricing plan shows the group it belongs to. This release adds the resource and its management API; executing an upgrade or downgrade on a subscription through a group follows in a later release.

**Invoice cadence independent of the pricing period**
Pricing item configs now support a `billing_period` that is separate from the `pricing_period`, so you can invoice on a different cadence than the one used to price usage (for example price per month, invoice per quarter). In Desk, single-cycle [recurring](/platform-guides/products-and-pricing/pricing-plans/recurring-pricing) and [per-seat](/platform-guides/products-and-pricing/pricing-plans/per-seat-pricing) product items gain a "Billing period" field to set this cadence without editing the pricing period.

## Subscriptions

**Cancellation reason**
When [cancelling a subscription](/platform-guides/customers-and-billing/subscriptions/subscription-lifecycle) you can now pass an optional free-text cancellation reason on the [POST /v1/pricing-plan-subscriptions/\{id}/cancel](https://docs.solvimon.com/api-docs/configuration-api/pricing-plan-subscriptions/post-pricing-plan-subscriptions-by-resource-id-cancel) request. It is persisted on the subscription and is available through both the API and the customer portal, so you can record why a subscription ended.

**Keep indexing overrides when copying a schedule**
[Copying a subscription schedule](/platform-guides/customers-and-billing/subscriptions/subscription-schedules) in Desk now carries over its indexing overrides, so a copied schedule keeps the index adjustments you already configured instead of resetting them.

## Invoices

**Payment status on invoices**
Invoices now expose a [`payment_status`](/platform-guides/invoicing/invoices/invoice-payment-status) field with the values `UNPAID`, `PARTIALLY_PAID`, `PAID` and `OVERPAID`, and Desk shows this status on the invoice screen. It gives a more precise view of collection state than the previous paid/unpaid boolean, including partial and over-payments.

**Finalize invoices in order**
An invoice can now only be made final once the previous period's invoice is already final. This prevents finalizing out of order, where changing an earlier period (for example through included volume) could retroactively affect a later invoice that was already [final](/platform-guides/invoicing/invoices/invoice-lifecycle).

**Keep original customer details on a credit note**
When [crediting a standard invoice](/platform-guides/invoicing/invoice-corrections/credit-invoices) you can now choose whether to keep the original customer details from the invoice being credited, or use the customer's current details in the platform. The choice is offered as a radio option in the credit note modal.

### Fixes

bug-fix

* The product item dropdown for adding a one-off line now shows a label for the product item type (Revenue or Deduction), so items with the same name in both categories can be told apart before adding the line.
* "Recent invoices" lists in Desk are now sorted by date instead of returning in an unsorted order.

## Payments

**Reverse a payment**
A new reverse action, [POST /v1/payments/\{id}/reverse](https://docs.solvimon.com/api-docs/transaction-api/payments/post-payments-by-resource-id-reverse), undoes a payment without you having to know its state at the payment service provider. If the payment has not been captured yet it is cancelled; if it has already been captured it is refunded, the same way as a [referenced refund](/platform-guides/invoicing/invoice-corrections/referenced-refunds-on-credited-invoices). Previously you had to determine capture state yourself and choose between cancel and refund, and a refund on an uncaptured payment would fail.

### Fixes

bug-fix

* The refund button on a payment now only appears when the payment is authorised. It was previously shown on payments in an error state, where a refund is not possible.
* Adyen recurring SEPA direct debit: two metadata field keys that exceeded Adyen's 20-character limit have been shortened, with backwards compatibility, so these payments no longer fail metadata validation.

## Quotes

**Dynamic variables in quote templates**
[Quote templates](/platform-guides/customers-and-billing/quoting/quote-templates) and drafts now support dynamic variables such as `{{customer.name}}`, which are hydrated with the quote's own data when the quote is rendered. To insert a variable, type `{{` in the content editor and select it from the list. This builds on quote templates from the previous release, letting a single template adapt to each customer and quote instead of carrying hard-coded values.

## Customers

**Filter customers by role**
The customer list in Desk can now be filtered by role (Self billing, Non processing, Processing only), using the `role` filter already supported by [POST /v1/customers/search](https://docs.solvimon.com/api-docs/configuration-api/customers/post-customers-search). This makes it quicker to narrow a large customer list to the group you care about.

**Notification preferences on by default for contacts**
Contacts now have notification preferences enabled by default, matching the behaviour already in place for customers, so newly added contacts receive the relevant notifications without extra configuration.

## Workflows

**Action executions on the workflow detail page**
A workflow's [detail page in Desk](/platform-guides/workflows/monitoring-and-audit) now includes a table of its action executions, so you can see what a workflow has run and monitor its activity from one place.

## Meters and events

**Type to search meter property enum values**
Selecting a value from a [list-type (enum) meter property](/platform-guides/meter-and-event-design/meter/meter-properties) now supports typing to filter the options, instead of only scrolling. This is noticeably faster for long lists such as country codes.

## Integrations

### Fixes

bug-fix

* AvaTax: an invoice is now synced to AvaTax again when it transitions to final, so the tax provider always holds the finalized version of the document.

## Deprecated API fields

The following field is now deprecated. It continues to work for backwards compatibility, but we recommend migrating to the replacement.

* **`paid`** (Invoice): deprecated in favour of `payment_status`, which distinguishes `UNPAID`, `PARTIALLY_PAID`, `PAID` and `OVERPAID` rather than a single boolean.