Summary
This release brings dynamic meter creation during ingest (send events now, decide what to bill for later), quote templates, on-demand charging end-to-end (API and portal), a new Metronome integration, more control over credited invoices, and a range of subscription, invoicing and Desk improvements.
Event ingestion
Create meters on the fly during ingest
You can now feed Solvimon events without configuring meters first, and figure out what to bill for later. POST /v1/events/ingest can create meters, properties and values automatically for data that doesn’t exist yet: send the event, and Solvimon sets up the underlying meter on the fly.
This changes how you can approach metering. Instead of deciding up front which usage is billable, you can stream everything that might matter and treat that decision as a downstream one: some events stay as signals you observe and analyse, others become the basis of a charge once you attach pricing to them. It also streamlines onboarding, since getting a working event feed no longer depends on a fully configured meter catalogue, and it gives your metering setup room to evolve with your product, driven by the events you actually see rather than the ones you predicted.
A new meter_validation query parameter controls the behaviour: STATIC (the default, unchanged) requires the meter to already exist and rejects the event otherwise, while DYNAMIC creates whatever is missing and then processes the event against it. Concurrent creation of the same meter is handled safely, so two events racing to create the same meter won’t fail.
Pricing
Charge on-demand (one-off) pricing items Some charges don’t fit a recurring schedule: a one-time setup fee, or an add-on a customer buys on the spot. You can now flag selected one-off product items as “on-demand” and charge them on top of an existing subscription whenever you need to, on their own invoice and with an optional preview first. See On-demand charges.
- Retrieve all on-demand pricing items available for a schedule, so you can present them to your customers, for example as buy buttons in your own UI or portal.
- Charge one or more on-demand items, optionally previewing the resulting invoice before it is created, and optionally finalising it in a single step.
Nested pricing improvements in Desk Working with deeply nested pricings is now more manageable. You can collapse and expand individual nesting levels to focus on the part you’re editing, manage and edit the pricings per level, and expand or collapse all levels at once from the context menu, making complex pricing structures clearer to navigate and reason about.
Quotes
Quote templates You can now configure reusable quote templates in Desk that define the defaults for a quote, such as the pricing plan, subscription settings, and content blocks. When creating a new quote you can select a template to pre-fill it, so quotes start from a consistent, approved baseline instead of being built from scratch each time. This speeds up quote creation, reduces manual entry, and keeps quotes consistent across your sales and billing teams. Templates also support attachments, which are carried onto the quotes created from them.
New quote renderer enabled by default The new quote renderer is now the default for everyone, and the previous developer-tool toggle has been removed, so all quotes are produced by the new renderer without any opt-in. This release also adds the remaining translations and refinements needed to fully support it.
Set subscription custom fields when creating a quote When creating a quote (on quote init or on a quote upgrade), you can now set the custom fields for the subscription that the quote will create. The values are stored on the quote and carry over automatically once it is finalised into a subscription, so you don’t have to go back and fill them in afterwards.
Submit custom fields via URL parameter
Quote and subscription forms can now receive custom_fields through URL parameters (for v1/quotes/init, v1/quotes/upgrade and v1/pricing-plan-subscriptions/init). This makes it possible to pre-fill custom fields when the form is embedded in an iframe, for example in Salesforce, where the embedding page can’t control the request body, so values from the host system flow straight into the form.
Quotes only for active pricing plan versions Quotes can now only be created for active pricing plan versions. This closes a gap where a quote could be built on a draft pricing plan version and then finalised, resulting in an active subscription running on a draft plan: a state you generally never want in production.
Fixes
- Subscription details (terms) can now be edited correctly while building a quote, where previously saving appeared to be required but had no effect.
- Signers created from an existing contact are no longer shown as “Unknown Contact” when a quote is accepted; the contact is now resolved correctly.
Customer portal
Upgrade subscriptions with on-demand items The upgrade-subscription flow in the customer portal is now wired to the on-demand pricing endpoints, replacing the earlier placeholder behaviour. Your customers can upgrade their subscription and add on-demand items to it directly from the portal, in a self-service flow.
Quote attachments in the portal Attachments on a quote are now shown in the Quote Portal and can be downloaded by your customers, so any supporting documents you include on a quote are available to them directly. (Attachments can only be viewed and downloaded from the portal, not added.)
Invoices
Choose the source of truth for credit note details
When you credit a FINAL invoice, the credit note is created in DRAFT, and by default its customer and billing details are refreshed to the customer’s current values, which means a credit note can end up showing details that differ from the invoice it is crediting (for example if the address changed in the meantime). You can now control this explicitly with a new credit_details_source option:
CURRENT(default, unchanged behaviour): the credit note is refreshed with the customer’s current details.ORIGINAL: the customer and billing entity are copied over exactly from the original invoice, without a refresh. Use this when the credit note must mirror the invoice it credits, even if the customer’s address or details have since changed.
See Credit note customer details.
Fixes
- Fixed creating a one-off invoice for a billing entity when the platform’s default payment acceptor belonged to a different billing entity. One-off invoice creation now works correctly across billing entities, regardless of which one holds the platform default.
- Fixed a bug that prevented generating an invoice preview for a customer that has no address on file, so previews now work for these customers too.
- Fixed a case where, after copying a schedule and then changing its end date, the next billing period’s invoice could be skipped. Invoices are now generated reliably in this scenario.
Customers
New PROCESSING_ONLY customer role
Processing-only customers can now be expressed through the roles model with a dedicated PROCESSING_ONLY role, alongside the existing boolean flag; the two are kept in sync so existing integrations keep working unchanged. As with the previous flag, a customer with the PROCESSING_ONLY role cannot hold any other roles, keeping processing-only customers clearly distinct.
Subscriptions
Upgrade before the initial term has expired You can now upgrade a subscription even when its initial (committed) term has not yet ended. Previously this was blocked, forcing you to wait until the initial term expired before an upgrade could go through; now you can process the upgrade whenever the customer wants to move up.
Filter subscriptions by multiple statuses
The POST /v1/pricing-plan-subscriptions/search endpoint now lets you filter by multiple statuses in a single request, so you can retrieve, for example, all active and cancelled subscriptions at once instead of querying each status separately.
Fixes
- Fixed an issue when editing subscription terms where removing a custom field value stored an empty string instead of actually clearing the field. Empty custom fields are now correctly treated as “not set”, so clearing a value has the effect you’d expect.
Integrations
Metronome integration Added a Metronome integration to Desk, available under Settings → Integrations, for syncing your usage and billing data with Metronome.
Currencies
Added SLE and deprecated SLL
Added support for the new Sierra Leonean Leone (SLE) and deprecated the old SLL, following the currency’s redenomination, so conversions and pricing use the correct, current currency.
Desk
Clearer revenue item labels The revenue item panel now uses clearer labels (“Add revenue item”, “Revenue type”) to better describe what you’re configuring.
Fixes
- Fixed adding metric rules from the UI, which had stopped working.
- Fixed the context menu on the “Customize price rule header text” block not showing when the header text is long.
Deprecated API fields
The following fields and values are now deprecated. They continue to work for backwards compatibility, but we recommend migrating to the replacements.
processing_only(Customer): deprecated in favour of the newPROCESSING_ONLYrole. Use therolesfield instead.forceInitOnHold(invoice credit request): deprecated in favour of the snake_caseforce_init_on_holdfield.SLLcurrency: deprecated; useSLEinstead.