Jul 2, 2025
Commit #2 : Introducing The Invoice Workflow Support



Billing systems need to be precise, but reality is messier. Enterprise customers request custom features mid-cycle.
When your billing logic can't handle these real-world scenarios, finance teams fall back to spreadsheets, manual invoices, and duct-tape solutions that break audit trails and frustrate customers.
Today's update changes that. We're introducing invoice workflow features that handle the complexity of modern billing, so your finance team can focus on growing the business instead of patching billing gaps.
Here's what's new!
One-off Invoices
As soon as you start selling to enterprise customers, someone asks for:
Custom feature development
Onboarding and Implementation support
Paid support or training
Unforeseen one-time charges that don’t fit your clean subscription model
And when that happens? Your billing logic breaks, you fall back to spreadsheets and Stripe links, and it's duct-tape billing all over again.
Now you can create a one off invoice in Flexprice to account charges that aren't linked to a subscription or metered usage.
Creating a one-time invoice is as simple as raising any subscription or usage invoice
In case you want to do this via API - [Check our API docs]
Previously, you’re patching this via side emails or manual invoices. With Flexprice, it all lives in one system.
Custom invoice numbers
As the customer base grows and you expand across channels and geographies, your finance team starts dealing with new set of challenges:
Your accounting system is running its own invoice register
Country/region specific formats for compliance
Marketplaces issuing invoices on their own platform
Reserving invoice numbers for future invoices especially when selling to enterprises
That’s exactly what we’re fixing today:
Bring your own invoice numbers
With Flexprice, pass your own invoice number when creating invoices via API:
invoice_req = DtoCreateInvoiceRequest( external_customer_id="your_db_customer_id", invoice_number="CUSTOM-SEQ-001", invoice_type="ONE_OFF", # or "RECURRING" currency="USD", amount_due="1000", period_start=datetime.fromisoformat("2025-06-30T00:00:00+00:00"), line_items=[ DtoCreateInvoiceLineItemRequest( display_name="Implementation Fee", quantity="1", amount=1000 ) ] )
Example:
Imagine your accounting team follows this sequence for Singapore: SG-INV-20240628-001
Your reseller platform uses: RS-SEA-20240628-XYZ
And Flexprice? It normally follows: INV-202406-0052
Want to see how? [Check our API docs]
Credit balances with transparent ledger
Every prepaid usage product follows the same path: you start with a simple balance counter, add some expiration logic when customers complain. Then spend months debugging why the numbers don't add up when support tickets roll in.
And every time something breaks?
You explain credit math to your finance team
Support scrambles to calm annoyed customers
Product teams patch yet another edge case
We’ve all been there. So we fixed it.
What is wallet and credit separation?
Not all credits are created equal:
Free trial credits? Simple expiration, no accounting headaches
Purchased top-ups? Revenue recognition, refund tracking required
Subscription credits? Proration nightmares when plans change
Refund credits? Double-entry bookkeeping to avoid revenue leaks
Flexprice keeps them clean, labeled, and separate, so your balances stay predictable, and your customers stay happy.
How it works?
When topping up a wallet, pass a clear transaction reason:

Some of the available options are additional purchased credits, promotional or goodwill credits and check out our API docs to learn about the rest of the available options.
Backfill usage data
Despite clean invoices and clear wallets, inconsistencies can come up in the usage data reporting due to various reasons:
Usage events delayed within your system
Metering pipelines miscount
Product teams roll out features mid-cycle
Enterprise customers send manual reports post-invoice
How it works?
Re-ingest the missing usage events with desired timestamps
Trigger the regenerate invoice API
Flexprice recalculates the invoice based on the latest, correct data
This makes the life of finance teams easier as they do not need to hack in manual discounts or create one off invoices for corrections later.
# Specify your invoice ID invoice_id = "inv_01JXYZ..." # the ID of the invoice you want to recalculate # Call the recalculate method response = invoices_api.invoices_id_recalculate_post(id=invoice_id)
# Specify your invoice ID
invoice_id = "inv_01JXYZ..." # the ID of the invoice you want to recalculate
# Call the recalculate method
response = invoices_api.invoices_id_recalculate_post(id=invoice_id)
Want to see it in action? [Check our API docs.]
Credit notes (Refund workflow)
Finance teams occasionally find themselves in situations which require them to charge the customer less than the actual raised invoice. This can happen in case:
Product expectation mismatch or downtimes
Duplicate invoices due to manual error
Invoices calculation mistakes
Enterprise customers change their minds mid-cycle.
Flexprice now supports issuing credit notes against an invoice. When you issue a Credit Note, your customer sees:
Their original invoice
The Credit Note applied against it
The updated amount due
Wrapping up
These workflow improvements are just the beginning. Real billing operations involve dozens of edge cases, compliance requirements, and customer scenarios that standard solutions simply can't handle.
We're building Flexprice to eliminate the manual workarounds that slow down finance teams and frustrate customers. Every feature we ship is designed around one principle: your billing should work exactly how your business works.
→ If you have any questions, talk to us
→ Sign up for launch updates to get tomorrow’s drop in your inbox
See you on Day 03.
Blogs
Blogs
Blogs
More insights on billing
Insights on
billing and beyond
Explore expert tips, industry trends, and best practices for billing, pricing, and scaling revenue.