Skip to content

v0.7.0

Choose a tag to compare

@sagarsuperuser sagarsuperuser released this 14 Oct 17:15
· 319 commits to main since this release
bfa79fa

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, /batch and /backfill refuse 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. The Idempotency-Key header 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=0 for the old timing.
  • A scheduled cancel takes effect up to an hour later. The subscription stays active until then, though canceled_at is 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.sh starts Velox from the release images with only Docker and git, prints a login and a test key, and ./quickstart.sh demo runs token usage through to an invoice. (#959)
  • Login works in Safari when Velox runs at http://localhost.
  • docker ps no 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 type and code in 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.