This release brings flexible pricing for self-service wallet top-ups, webhook delivery events with resend, editable payment gateway integrations, Stripe payment-method and 3-D Secure fixes, split-by-meter-property pricing in Desk, and a range of invoicing, quote and meter improvements.
Delete events by reference
Events (meter data) can now be deleted using their reference as a path parameter on the delete endpoint, in addition to the resource id. Previously deleting by reference was only possible via a POST, which made it hard to trace; you can now remove a specific event directly by the reference you sent when ingesting it.
Use non-required meter values and properties in calculations and pricing rules
The required flag on a meter value or property now only governs event validation on ingest; it no longer gates what can be referenced elsewhere. Non-required values and properties can now be used in meter value calculations and in pricing rule conditions, and Desk offers them in the usage-metric and pricing-rule editors. This lets you build calculations and conditional pricing on optional usage data without forcing it onto every event.
Flexible pricing for on-demand top-ups
A new FLEXIBLE pricing type lets a customer choose how much to pay within a range and receive wallet credits in proportion to the amount. You set a minimum and maximum amount and a credit conversion rate on a one-off, on-demand product item; the customer pays anything within the range (for example between $20 and $100) and is granted the matching number of wallet credits. It is charged through the on-demand flow, so it fits self-service wallet top-ups where the customer decides the amount.
Create pricing groups directly on a schedule You can now create pricing groups directly on a pricing plan schedule, without linking them to a pricing plan version, via the pricing group API. This complements pricing defined directly on a schedule, so a schedule’s stand-alone pricing can also include grouped, selectable options rather than only flat pricings.
Split pricing by meter property in Desk Split pricing by meter property is now available in Desk. When a usage-based product item’s meter has meter properties, you can define split pricing on the pricing item config directly in the UI, instead of only through the API. This unblocks setting up contracts that rely on splitting usage across a property (for example per region or per SKU) without hand-crafting the configuration over the API.
Leave the expiry date empty on an upgrade quote
The quote upgrade flow now allows leaving the expiry date empty (expired_at can be null), matching the other quote flows, so an upgrade quote no longer has to carry an expiry date.
Quote flow improvements A set of UX refinements to the quote creation flow in Desk, streamlining the steps and interactions when building a quote.
Clearer “price per X units” on invoices Usage prices expressed per a number of units (for example a price per 1,000 API calls) are now displayed more clearly on invoices, so the unit basis of a charge is easier to read on the document.
Stripe payment method options by currency and amount, and 3-D Secure handling Stripe payment method options are now filtered by the payment’s currency and amount limits, so only methods that actually support that currency and amount are returned; previously a payment in one currency could be offered methods that don’t support it. Alongside this, the Stripe authorisation flow and 3-D Secure handling were fixed so payments complete correctly after 3DS validation, and a Stripe customer is created when needed so the payment method can be stored rather than the payment being taken as a guest.
Webhook delivery events You can now inspect and replay individual webhook deliveries. New read endpoints return the delivery events for a webhook, each including the action that triggered the delivery, the HTTP status code your endpoint returned, the request payload, and any failure details. A resend action lets you re-trigger a delivery after fixing an outage on your side, and Desk adds a matching view in the Developers area to browse a webhook’s delivery events and resend one.
Edit payment gateway integrations
Payment gateway integrations can now be edited after creation. PATCH /integrations/{id} accepts updates to the integration’s name, description and reference, so a typo or a rename no longer requires deleting and recreating the integration. In Desk, Adyen payment gateway integrations now have an Edit option (rotate the API key, update name, description and reference, and configure AFP blocks), and the AFP fields for PLATFORM-type Adyen integrations can now be filled in.
This release brings invoice export to your ERP from a workflow, Stripe in the hosted checkout, price indexing on schedules that carry their own pricing, and a broad set of pricing, quote and subscription improvements in Desk.
Events can be ingested against a specific subscription, by passing a pricing plan subscription id or reference on POST /v1/events/ingest, which is useful when you want usage attributed to one subscription directly. The Event panel now shows that pricing plan subscription, and the subscription id is included in the event metadata, so it’s clear which subscription an event was booked against.
Price indexing when copying a schedule now also works for schedules that define their pricing directly, rather than by referencing a pricing plan version. This closes the gap between two recent additions, pricing defined directly on a schedule and indexing all prices by a percentage when copying, so direct-priced schedules can be indexed the same way as plan-based ones.
Accepting an upgrade quote shows a modal to update the customer’s details, but a sales representative only had view access to customers and was blocked at that step. Sales representatives now have a customer-contributor capability, so they can complete the acceptance flow without being handed broader customer-management rights.
When an approval request for a subscription is cancelled, the subscription is now set back to DRAFT, so it clearly reflects that it still needs to go through approval rather than being left in an in-between state.
When multiple subscriptions are combined onto a single invoice, prices configured including tax and prices configured excluding tax are now handled correctly together on that combined invoice, so the totals are right regardless of how each subscription’s prices were set up.
You can now filter customers by whether they are processing-only, in both the API and Desk, making it easier to find and work with this group of customers.
Stripe payments are now supported in the hosted payment web experience, so customers paying through the hosted checkout can pay via Stripe.
For externally-created payments that Solvimon only receives, rather than initiates, the payment acceptor is no longer required: paymentAcceptorResourceId may be null, since the payment method and acceptor don’t exist in the platform.
A new workflow action lets you export an invoice to your ERP as part of a workflow, so finalised invoices can flow into your accounting system automatically instead of being exported by hand.
The following field is now deprecated. It continues to work for backwards compatibility, but we recommend not relying on it.
total_number_of_pages (paginated list responses): no longer supported; kept only as a legacy page-count value for compatibility.This release brings mid-term subscription upgrades, pricing directly on a schedule, custom fields on price plans and product items, conditional coupon discounts, new payment capabilities (direct authorisation and reverse), a redesigned quote creation flow, attachments on subscriptions, and a range of invoicing, reporting and Desk improvements.
Event processing details The event processing details panel has been reworked so you can see exactly how an event was handled. The event timeline now uses a compact card design that lets you scan the full processing history at a glance, and the panel includes the raw ingest data received for the event. Understanding why an event was priced, persisted or skipped no longer requires leaving Desk or digging through logs.
Conditional discounts (discounts that apply only when certain conditions are met) can now be attached to coupons. Previously you had to configure a conditional discount on each subscription individually; now you can define it once as a coupon and apply the same standardised discount across many subscriptions, with less manual work and less room for inconsistency.
You can now define conditions directly on the pricing item config of a TIERING pricing metric (tiering_conditions). This lets you vary how tiered event pricing is applied based on the conditions you set, giving you finer control over usage-based charging without splitting it across multiple product items. This is available via the API for now; support in Desk will follow soon.
Price plans can now carry custom fields, so you can enrich a plan with your own structured metadata, for example to categorise plans as Trial vs Standard. Those custom field values are also available as a criterion in the price plan search, letting you find and group plans by your own categorisation rather than only by name or ID.
Product items now support custom fields as well, letting you attach additional structured data to an item. This is especially useful for integrations: for example, you can store the identifiers needed to map a product item onto a product or revenue line in an external ERP, so downstream systems can reconcile against your own references.
When you copy a schedule you can now index all price overrides at once by a percentage, instead of recalculating and re-entering each price by hand. A tedious, error-prone task, such as applying an annual price increase across a customer’s negotiated prices, becomes a single action.
A pricing plan schedule can now carry its own pricing directly, through an optional pricing_categories field with the same structure as a pricing plan version (pricings, items, configs and bands, including pricing groups). Until now a schedule could only get its pricing by referencing a pricing plan version or by resolving it from a rate card. Defining bespoke pricing on the schedule itself is ideal for one-off, customer-specific arrangements that don’t warrant a separate pricing plan version. See Custom pricing for the other ways to tailor pricing per subscription.
Creating a quote now uses a redesigned init flow that simplifies the steps from “new quote” to a ready-to-send document, making the starting point clearer and faster to work through.
A new CPQ content block automatically generates the VAT and company registration details on a quote, filling them in directly from the quote’s data. Instead of copying these legal details in by hand for every quote, the block keeps them accurate and consistent with the underlying quote, reducing manual effort and mistakes on outgoing documents.
Upgrade quotes now support mid-term upgrades: upgrading a subscription part-way through a billing period. When such an upgrade is accepted and activated, the fee for the original subscription is credited pro rata for the unused part of the period, and the new subscription’s fee is invoiced in full, so the customer is billed correctly for the switch. The upgrade quoting flow lets you choose the crediting options that apply, and the quote view now shows direct links to the subscriptions the upgrade moves from and to, so the relationship between the old and new subscription is always traceable.
Once a quote is published, a share message now appears at the top of the page, making it immediately obvious that the quote is ready and how to send it to the customer.
order_by parameter was provided, so the Quotes page now consistently shows all matching quotes.You can now add attachments to subscriptions, the same way you already can on other resources. Keep supporting documents, such as signed agreements and purchase orders, together with the subscription they belong to.
The billing cycle and invoice date can now be realigned while the current period is still open, rather than only after it has closed, giving you more flexibility to correct or adjust billing timing when it matters. In addition, when creating a schedule, Desk now offers an option to realign the invoice date to the schedule’s start date directly at creation time.
Inactive add-ons are now hidden by default on active, voided and cancelled subscriptions, keeping the subscription view focused on what’s actually in effect. When you do need to see them, a “Show inactive addons” option in the context menu brings them back into view.
The invoice list and invoice preview now refresh automatically after a subscription is saved or activated, so you immediately see the resulting invoices and preview reflect your changes without a manual page refresh.
A customer can now have up to 10 parents, up from the previous limit of 5, provided the additional parents are non-processing customers. This gives more headroom for modelling complex account hierarchies, such as reporting or grouping structures, without being constrained by the old cap.
You can now credit an invoice and create a corrected copy of it in a single API call. This is designed for the common correction scenario where a finalised invoice had the wrong details, for example an incorrect address or tax setting, and you want to credit the original and reissue a fixed version in one step rather than as two separate actions.
Invoices can now be filtered by billing period date. This is especially valuable when the invoice date is only set at finalisation, as it is for customers who define the invoice date when the invoice goes to FINAL, because in those cases the invoice date alone no longer tells you which period an invoice covers. Filtering on the billing period date surfaces the invoices for a given period, even for backdated subscriptions or invoices.
Payments can now be authorised directly through the /payments/authorise action using a new DIRECT payment context type. This supports flows where you want to authorise a payment on its own, independent of the usual invoice-driven context.
A new reverse action lets you reverse a payment that has not yet been captured at the payment provider. Previously a refund would fail in this situation, because an uncaptured payment has to be cancelled rather than refunded. With the reverse action, Solvimon determines whether the payment needs to be cancelled or refunded and performs the correct operation, so you no longer have to track the capture state yourself or handle the two cases differently in your integration.
The invoice tax report now includes the tax note code (tax_categories.notes) and the “Invoice to Final at” timestamp (updated_to_final_at), and the invoice header report now also includes “Invoice to Final at”. These additions help you reconcile tax reporting and see exactly when each invoice was finalised.
The Price Plan Subscription report now includes an “Enabled Pricings IDs” column, listing the enabled pricings from the subscription’s schedule. You can see, per subscription, exactly which pricings are active directly in the report, which is useful for auditing and analysis without opening each subscription individually.
Platforms that send email through their own (non-SYSTEM) email integration can now set the invoice template name used for their outgoing emails. This gives you control over the template applied to your invoice emails when you bring your own email account, rather than being limited to the system default.
Draft pricing plans now have an “Activate pricing plan” button in a bottom bar, matching the pattern already used on products, so activating a plan is available right where you’re working.
When a resource is archived, its reference is now suffixed, so you can immediately reuse the original reference for a new resource instead of running into a uniqueness conflict.
Metric filter availability logic has been fixed and the filter labels renamed, so the available filters are correct and clearer to understand.
The first product card is now expanded automatically when a new subscription’s pricing plan is rendered on the subscription timeline, so the most relevant details are visible straight away.
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.
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 catalog, 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.
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.
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.
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.
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.)
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.
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.
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.
Metronome integration Added a Metronome integration to Desk, available under Settings → Integrations, for syncing your usage and billing data with Metronome.
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.
Clearer revenue item labels The revenue item panel now uses clearer labels (“Add revenue item”, “Revenue type”) to better describe what you’re configuring.
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 new PROCESSING_ONLY role. Use the roles field instead.forceInitOnHold (invoice credit request): deprecated in favour of the snake_case force_init_on_hold field.SLL currency: deprecated; use SLE instead.This release adds conditional discounts, duplicating pricings within a pricing group, filtering invoices that have credit invoices, payment improvements, and a set of invoicing and Desk fixes.
Conditional discounts
You can now attach conditions to a discount, so it only applies when the condition is met: for example, apply a percentage discount only when the invoice total (before taxes) is above or below a threshold you set. This lets you model common commercial arrangements such as volume-based or minimum-spend discounts directly in the pricing configuration instead of handling them manually. Conditional discounts are configured on the pricing plan schedule (POST/PATCH /pricing-plan-schedules) and returned when you read it.
Duplicate pricings within a pricing group Building pricing groups is now faster: you can duplicate an existing pricing and add it as an additional option in the group via a new “Duplicate pricing” action in the context menu, which opens the “Add pricing” panel pre-filled from the original, so you no longer have to re-enter a near-identical price from scratch.
Filter invoices that have credit invoices Invoice search now offers an option to filter for invoices that have credit invoices linked to them, making it easier to find and review invoices that have been (partially) credited.
order_by) had stopped returning invoices with the newest first; they now do again.Payment improvements Payments can now be filtered by their external reference, so you can look a payment up directly by the reference from your own system. In addition, an invoice’s paid quantity and payment status are now kept up to date as payments change, so the invoice always reflects the true payment state.
Guidance in the meter creation panel The meter creation panel now includes inline help, giving extra context about meters, values and properties while you set them up.
This release brings coupons for the first period, quote fields for CRM sync, manual invoice sending, Adyen onboarding (KYC), richer cost predictions, self-service sandbox provisioning, and a broad set of invoicing and Desk fixes.
Coupons for the first period Coupons can now be configured to apply to the first period only, so you can give a customer an introductory discount on their first invoice without it carrying over to subsequent periods.
First invoice amount stored on the quote The result of a quote’s invoice preview, in particular the first invoice amount, is now stored in a field on the quote. This makes the expected first-invoice value directly available on the quote, so it can be surfaced or synced to an external system such as a CRM (for example Salesforce) without recomputing it.
Custom field on the quote object Quotes can now carry a custom field of their own, letting you store an external identifier (such as a CRM organisation ID) directly on the quote for reconciliation with your other systems.
Send invoices manually You can now configure, at platform level, that invoices are only sent manually rather than automatically, giving you a final review step and full control over when an invoice actually goes out to the customer.
Resubmit an e-invoice even when it succeeded
It’s now possible to resubmit an e-invoice from the UI even when its status is already SUCCESS or IGNORE. Previously resubmission was only allowed for e-invoices that hadn’t reached those states; you can now re-send when needed regardless of the current status.
Adyen onboarding (KYC)
This release adds support for Adyen KYC onboarding. A new POST /v1/adyen/kyc/sessions endpoint creates a hosted-onboarding session for a legal entity, and Desk now surfaces the onboarding flow: a warning banner appears on the Payments overview when an active Adyen integration has an unverified legal entity, with an “Update details” action that opens Adyen’s hosted onboarding, and the onboarding component now lives on the payout page. In addition, payment-method tokenization initiated from Desk now uses the correct Moto shopper interaction instead of Ecommerce.
More detail in the cost prediction response
The cost prediction response now includes the wallet balance and the invoice_id, so a prediction carries more of the context you need to act on it without additional lookups.
Invoice usage report file-to-file transfer Invoice usage reports can now be delivered via file-to-file transfer. This is far more efficient for very large usage report files, which can be streamed and synced directly instead of being processed line by line.
Self-service sandbox provisioning You can now provision a sandbox self-service, without manual setup on our side. A sandbox token is requested with an email address and a captcha (for bot protection), and a new sandbox platform is created automatically, including a default payments (Adyen) system integration, so you can start testing payments straight away.
Choose a role when creating an API key
When creating an API key you can now choose its role, ADMINISTRATOR or READ_ONLY, so you can hand out read-only keys where full access isn’t needed.
end_at that the backend assigns itself.