☀️🏖️ Summer is in full swing and we’re not euro-maxxing so this release packs a good bunch of goodies: usage limits with threshold webhooks across the customer hierarchy, a send-webhook workflow action, localized email templates, flexible pricing and tiering conditions in Desk, a guided billing metric setup, and a credit-and-duplicate flow for invoices. Payment error details in Desk and a tidied-up invoice creation flow round out the release.
Usage limits with threshold alerts on the customer hierarchy
You can now store usage limits per customer and get alerted when consumption approaches them, which is the building block for pay-as-you-go platforms that give each end user (modelled as a processing-only child customer) a soft cap. A new UsageLimit resource is managed through POST /v1/usage-limits: it links a customer_id to a meter_value_calculation_id with a limit (a number, amount or credits) and a scope. SELF limits the customer’s own usage; CHILDREN sets a default limit for each child, resolved by walking up the hierarchy to the nearest parent, and a child’s own SELF limit for the same metric overrides its parent’s default.
Alerting is configured through a new USAGE workflow trigger type: the workflow holds the thresholds (percentages of the resolved limit, or absolute values) while the limit itself stays per customer, so one platform-level workflow covers every customer and seat. Each threshold crossing fires the workflow’s actions once per billing period.
Two supporting pieces ship alongside it. GET /v1/usage-limits/status returns the current-period consumption against the resolved limit per customer (with include_children=true to cover a whole hierarchy), giving you the numbers for an in-product usage dashboard. And POST /v1/workflows/init idempotently ensures a workflow and its actions exist by reference, creating them when missing and leaving them untouched otherwise, so provisioning can be scripted safely.
Send a webhook as a workflow action
A new SEND_WEBHOOK action type delivers a workflow’s trigger payload to one of your registered webhooks, referenced by webhook_id in the action’s send_webhook block. Combined with usage-limit workflows this produces usage.threshold_reached notifications carrying the customer, the metric, the threshold that was crossed, the resolved limit and the consumption, so your platform can react to usage events in real time.
Localized email templates
Send-email workflow actions gained a localize_template_names toggle. When enabled, the action appends the end customer’s locale to the template name at send time (for example credit.invoice_en-us) and looks that template up with your email provider, falling back to the base template when no localized variant exists. This matches the behaviour of the legacy Paragon email integration, so platforms sending invoice emails in their customers’ languages can migrate to native workflows without losing localization. Desk exposes the toggle, and the support email field from the previous release, in the send-email action settings.
Flexible pricing in Desk
Flexible pricing, where the customer chooses how much to pay within a band and receives wallet credits in proportion, could previously only be configured through the API. The Desk pricing editor now supports the FLEXIBLE pricing type directly, including the minimum and maximum amounts and the credit conversion, so self-service top-up pricing can be set up without code.
Tiering conditions in Desk
The pricing item config editor now includes an editor for tiering_conditions, the filter that decides which events count toward a config’s tier for product items with a tiering metric. You build the same AND/OR/XOR expression tree used for product item conditions, using the properties of the tiering meter; a config without tiering conditions keeps counting every tiering event. The editor only appears when the product item actually has a tiering meter value calculation, matching the API’s validation.
Clearer tiering tables and custom unit names Tiering tables in Desk now state explicitly which range each tier covers, and custom unit names you define on a product item are now used consistently across the pricing screens instead of a generic “units”. Pricing screens now read the way you’d explain the pricing to a customer, which makes it easier to spot a misconfigured tier before it reaches an invoice.
Guided billing metric setup Picking the billing metric while setting up a revenue item was redesigned into a guided flow, so you can create a new product and its pricing in one go without first learning how meters, meter values and calculation methods fit together. You select the meter, then the meter values and properties attached to it, then the usage metric (calculation method), and a summary text describes what the resulting metric measures. Anything missing can be created inline; choosing “add” opens the meter panel pre-filled for the meter you were configuring, so first-time setups no longer bounce between the products and meters areas. This flow is new and we’re actively shaping it, so if it helps (or gets in your way), tell us: we’d love to hear how it works for your setup.
Edit metric filters on active product items Metric filters on a product item can now be edited while the item is active, instead of requiring a new draft version for a filter change. Small corrections, like excluding a test event type you forgot to filter out, no longer force you through a full version cycle.
Navigation cleanup Features moved out of the product catalog submenu, and the products list now loads 50 items per page so most catalogs fit on a single page.
Credit and duplicate an invoice in Desk The credit flow in Desk can now credit an invoice and create a duplicate in one action, which is the common way to correct a finalized invoice: the credit note cancels the original and the duplicate gives you an editable draft to fix and re-send. Previously this combination was only available through the API.
Pricing plan schedules on the invoice
Invoices now expose a read-only pricing_plan_schedule_ids field listing the pricing plan schedules the invoice bills for, next to the existing pricing_plan_subscription_ids. Because an invoice can span multiple subscriptions and can include usage and pay-in-advance fees from different schedules around a cut-over, this is a list; it lets you trace every line back to the schedule that produced it without expanding each line.
Invoice creation flow cleanup Creating an invoice in Desk was reworded and tidied up, so occasional users, like a support agent issuing a one-off correction, can find the right action without guessing what a button does: the one-off invoice action and button were renamed to say what they do, the report request form was rebuilt, the two “Add” buttons on the invoice were joined into one, the list filters now sit on a single row, and the paid status filter uses a clearer select component.
Payment error details in Desk
When a payment ends in an error, the payment side panel now shows the result details including the external_reason returned by the payment service provider (for example a missing acquirer account for a card type and currency), so you can diagnose a failed payment without pulling the raw API response.
Subscription form and overview cleanup The new-subscription form and the subscription overview page were decluttered: redundant fields and sections were removed and the remaining information was regrouped, making the common path through creating and inspecting a subscription shorter.
This release introduces automatic wallet top-ups, workflow trigger conditions with configurable email variables, rate card discounts below the invoice level, richer usage reports, and Paragon multi-account support, alongside a broad set of Desk improvements across invoices, products, subscriptions and event ingestion.
Automatic wallet top-ups
Wallets can now be topped up automatically when their balance runs low, so a customer on credit-based pricing never stalls because their credits ran out. You create a config through POST /v1/auto-top-up-configs with the wallet_id, a threshold (an amount or a number of credits, matching the wallet’s denomination), the pricing_plan_schedule_id and pricing_item_id of a one-off on-demand item that grants credits to the wallet, and the payment_method_id to charge. Whenever the balance drops below the threshold, the charge is executed through the existing on-demand flow against the stored payment method. Configs can be switched on and off through the activate and deactivate actions, and this also works with flexible pricing items.
Wallet grants are no longer prorated When a subscription change starts mid-period, pricing item configs that carry wallet grants are now charged at the full price and grant the full number of credits, instead of being prorated. This makes mid-period upgrades work as customers expect for credit bundles: someone who runs out of credits halfway through the month and upgrades receives the complete credit allowance of the new tier immediately. Items without wallet grants are still prorated as before.
Discounts on rate cards at every level
Rate cards previously only accepted discounts on the invoice total; a discount on a product, product item or condition was rejected. Discounts within subscription schedules can now target all levels, including a new product_item_meter_property_conditions clause type for discounting a specific meter-property condition of a product item. This removes a common blocker for platforms that offer their merchants item-specific discounts but want the bulk-update convenience of rate cards.
Fixed amounts for tiered pricing on amount-based metrics in Desk When a usage metric is amount-based, Desk previously only offered percentage-based tier prices even though the API already accepted fixed amounts. The pricing editor now lets you choose between a percentage and a fixed amount per tier, so this setup no longer requires the API.
Copy pricing plans with indexing across currencies and billing periods Copying a pricing plan that combines multiple currencies and/or multiple billing periods now carries the pricing indexing configuration over to the copy, instead of dropping it.
Equals comparator is no longer offered for discount conditions, in the API and in Desk. A discount condition compares against a usage total, where an exact-equality match is ambiguous; the remaining comparators (greater/less than) express the intent unambiguously.Guided product setup in Desk The product catalog area of Desk received a set of usability improvements: the new-product modal was streamlined, selecting a revenue type now explains what each type means, the empty state points you to the next step, and naming was aligned across the UI (including renaming the pricing “amount type” to “Tax behavior”, which is what it controls). Activating a product item now shows a confirmation overlay summarizing the effect before you commit.
Ingest page improvements in Desk The manual ingest page (now called “Ingest event”) is easier to work with: the meter and reference fields are searchable selectors, and typing a name that doesn’t exist yet offers to create the meter on the spot, building on dynamic meter creation. Existing meters are summarized in a card instead of raw input fields, the code example was restyled, and the Events menu was reordered to Events, Meters, Files, Reprocessing log.
Trigger conditions
Workflow triggers now support an optional conditions tree that gates whether the workflow’s actions run. A condition node is either a COMPARISON (a single trigger field evaluated against a value) or a GROUP combining nested conditions with an AND/OR operator, so you can express rules such as “only run this action for credit invoices”. Conditions are evaluated when the trigger fires, and each execution records the evaluated tree in conditions_result_tree, so you can see in the execution audit exactly why a workflow did or did not run.
Date format and support email in email actions
Send-email workflow actions gained two configuration fields. date_format controls how date variables such as invoice_date and invoice_due_date are rendered in the email, so dates can match your locale or house style (for example DD.MM.YYYY instead of YYYY-MM-DD). support_email is exposed to email templates as the support_email variable and falls back to the action’s reply-to address when not set.
Fetch a single action execution
A workflow action execution can now be fetched directly through GET /v1/workflow-action-executions/{id}, instead of misusing the search endpoint to look up one record. Desk uses this to show the details of a single execution.
Invoice screen improvements in Desk The invoice detail screen now combines the summary and invoice details into one view, shows a “Credited” label next to the status of an invoice that has been credited, and drops the due date column from invoice tables where it added noise. The context menu actions were reordered by frequency of use, and adding items to a one-off invoice received copy and interaction improvements.
Original or current customer details on one-off invoice credits The choice between keeping the original customer details or using the customer’s current details, introduced for standard credit notes in the previous release, is now also available when crediting a one-off invoice.
Clearer billing timing and currency selection in Desk The subscription form now explains the difference between Exact and Calendar billing when you pick a billing timing, and shows a billing currency selector when the selected plan supports multiple currencies, so multi-currency plans can be subscribed in the right currency without leaving Desk.
Paragon multi-account setup
Platforms that run multiple instances of the same ERP integration (for example one Xero account per billing entity) can now model this through Paragon’s multi-account authorization. A new ERP integration type with the PARAGON_MULTI_ACCOUNT variant represents one Paragon multi-account as a single Solvimon integration, and a paragon_external_ids custom field on the synced resources controls routing: webhook deliveries are fanned out per account, each carrying the X-Paragon-Credential header for the target account, so every object lands in the right ERP instance.
Usage report improvements
The usage report now breaks the currency conversion chain into its two actual steps and shows the tax-inclusive cost. New columns: Cost Amount Quantity Including Tax (the event’s cost in the invoice currency including tax), Billable Metric Quantity and Billable Metric Currency (the metric in its original currency), Pricing Currency, Metric to Pricing Exchange Rate, and Pricing to Invoice Exchange Rate. Previously only a single exchange rate between the metric currency and the invoice currency was reported, which hid the intermediate pricing-currency conversion. The precision of the cost amount quantity movement columns was increased as well.
AI chat on Insights The Insights area now embeds an AI chat assistant, so you can ask questions about the data behind your dashboards in natural language instead of composing filters by hand.
Redesigned side panels and schedule actions Side panels across Desk were restyled with a consistent footer and close button, the subscription and quote view screens use explicit action buttons on schedules, and “Expand all” on pricing plan schedules now renders expanded sections only when they scroll into view, keeping large plans responsive.
X-CLIENT-VERSION header, which could block portal API requests from the browser.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 plan groups
A new PricingPlanGroup resource lets you group related 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 and per-seat product items gain a “Billing period” field to set this cadence without editing the pricing period.
Cancellation reason When cancelling a subscription you can now pass an optional free-text cancellation reason on the POST /v1/pricing-plan-subscriptions/{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 in Desk now carries over its indexing overrides, so a copied schedule keeps the index adjustments you already configured instead of resetting them.
Payment status on invoices
Invoices now expose a 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.
Keep original customer details on a credit note When crediting a standard invoice 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.
Reverse a payment A new reverse action, POST /v1/payments/{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. Previously you had to determine capture state yourself and choose between cancel and refund, and a refund on an uncaptured payment would fail.
Dynamic variables in quote templates
Quote templates and drafts now support dynamic variables such as {{quote.customer.name}}, which are hydrated with the quote’s own data when the quote is rendered. 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.
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. 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.
Action executions on the workflow detail page A workflow’s detail page in Desk now includes a table of its action executions, so you can see what a workflow has run and monitor its activity from one place.
Type to search meter property enum values Selecting a value from a list-type (enum) meter property now supports typing to filter the options, instead of only scrolling. This is noticeably faster for long lists such as country codes.
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.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.