Repository navigation
v0.7.0
A one-command Docker install, late usage billed, issued invoices that never change, a complete API reference, and fixes from a pre-launch check. One database migration.
Before you upgrade
- Every usage event needs its own
idempotency_key.POST /v1/usage-events,/batchand/backfillrefuse an event without one, or with one longer than 255 characters, with 422. Pick one key per event and send the same key when you retry it. TheIdempotency-Keyheader does not count. The LiteLLM integration already sends keys. - Invoices are built 1 to 2 hours after a period ends (was within an hour), so usage that arrives a little late is billed. Webhooks, charges and dunning move later by the same amount; invoice dates do not. Set
INVOICE_GRACE_PERIOD=0for the old timing. - A scheduled cancel takes effect up to an hour later. The subscription stays
activeuntil then, thoughcanceled_atis still the date you set. - Removing a meter's last price can be refused (409) while a plan with a live subscription uses that meter.
- Run migrations first, as for any upgrade. This release adds four columns.
What changed
Install
deploy/compose/quickstart.shstarts Velox from the release images with only Docker and git, prints a login and a test key, and./quickstart.sh demoruns token usage through to an invoice. (#959)- Login works in Safari when Velox runs at
http://localhost. docker psno longer shows healthy containers as unhealthy, and nginx follows the API after it is recreated.
Billing
- Usage that arrives within the grace window after a period ends is billed on that period's invoice. (#961)
- An issued invoice or credit note keeps the customer and company details it was issued with. Editing them later no longer changes old PDFs or the hosted page. (#964)
- Several changes made just after a period ended, before its invoice, acted on the wrong period. They now apply to the new one. (#961)
- Usage that matches no price is counted and logged, including on spend-threshold invoices. (#981)
- A retried usage event without a key was billed twice. Keys are now required. (#980)
Payments
- A void, write-off or bank payment waits for a card charge in progress. (#975)
- A Stripe rate limit during a charge no longer parks the invoice. (#978)
- A card payment and its Stripe webhook arriving together no longer deadlock. (#989)
Margin and LiteLLM
- Provider cost no longer counts prompt-cache reads twice for LiteLLM calls that send
cost_breakdown. - The margin card and API name their currencies and do not compute a margin across two currencies.
API
- The API reference documents 175 operations, up from 68: every route you call. (#962)
- An unknown dunning policy answers 404, and error responses carry
typeandcodein the right fields.
Docs
- About 80 sentences across the README and the main docs now claim only what the code does.
Every change, with its reasoning: CHANGELOG.