Files
cfw-autumn/apps/docs/mintlify/changelog/changelog.mdx
mintlify[bot] ef8367c4af Document checkout_session_params subscription_data merge behavior (#998)
Generated-By: mintlify-agent

Co-authored-by: mintlify[bot] <109931778+mintlify[bot]@users.noreply.github.com>
2026-03-17 17:09:39 +00:00

402 lines
24 KiB
Plaintext

---
title: "Changelog"
mode: "center"
description: "Some new things we've shipped at Autumn HQ"
---
<Update label="March 17th 2026">
## Express, Elysia, and Web Standard adapters for `autumn-js`
The `autumn-js` SDK now ships adapters for Express, Elysia, and any framework that uses the Fetch API `Request`/`Response` objects. You can set up the `autumnHandler` in your backend with a single import — no manual request parsing required.
- **Express**: Import from `autumn-js/express` and mount with `app.use()`. Requires `express.json()` before the handler
- **Elysia / Web Standard**: Import from `autumn-js/webStandard` and use with Elysia's `.mount()`, Cloudflare Workers, Deno, or any Fetch-based runtime
- **Existing adapters**: Next.js (`autumn-js/next`) and Hono (`autumn-js/hono`) continue to work as before
See the [setup guide](/documentation/getting-started/setup) for framework-specific code examples.
## Explicit customer creation required for `check` and `track`
The `/check` and `/track` endpoints no longer auto-create customers. If you call these endpoints with a `customer_id` that doesn't exist, the API now returns a `customer_not_found` error instead of silently creating the customer.
This change encourages explicit customer lifecycle management and prevents accidental customer creation from typos or stale IDs.
- **Create customers first**: Call [`customers.getOrCreate`](/documentation/customers/creating-customers) during signup or login before using `check` or `track`
- **Handle the error**: If a customer doesn't exist, the API returns error code `customer_not_found`
## `autumn-js` SDK 1.0.0
The `autumn-js` SDK has been promoted from beta to stable at version `1.0.0`.
## New framework adapters
The `autumn-js` SDK now includes adapters for Express, Elysia, and any Web Standard compatible runtime (Cloudflare Workers, Deno). Import from the adapter that matches your backend:
| Framework | Import path |
| --- | --- |
| Next.js | `autumn-js/next` |
| Hono | `autumn-js/hono` |
| Elysia / Web Standard | `autumn-js/webStandard` |
| Express | `autumn-js/express` |
| Other | `autumn-js/backend` |
See the [setup guide](/documentation/getting-started/setup) and the [`autumnHandler` reference](/react/hooks/autumn-handler) for full examples.
<AccordionGroup>
<Accordion title="Improvements">
- Express adapter for `autumnHandler` via `autumn-js/express` - [#979](https://github.com/useautumn/autumn/pull/979)
- Web Standard adapter for `autumnHandler` via `autumn-js/webStandard` (Elysia, Cloudflare Workers, Deno) - [#979](https://github.com/useautumn/autumn/pull/979)
- Explicit customer creation required for `check` and `track` endpoints - [#968](https://github.com/useautumn/autumn/pull/968)
- `autumn-js` SDK promoted to `1.0.0` stable release - [#968](https://github.com/useautumn/autumn/pull/968)
- New Express, Elysia, and Web Standard adapters for `autumnHandler` - [#985](https://github.com/useautumn/autumn/pull/985)
- Improved API reference field descriptions for preview endpoints - [#985](https://github.com/useautumn/autumn/pull/985)
</Accordion>
<Accordion title="Bug fixes">
- `checkout_session_params.subscription_data` (including `metadata`) is now properly deep-merged with Autumn's internal parameters instead of being overwritten - [#996](https://github.com/useautumn/autumn/pull/996)
</Accordion>
</AccordionGroup>
</Update>
<Update label="March 16th 2026">
## Balance and usage carry-over on plan upgrades
You can now preserve a customer's remaining balances and usage when they upgrade plans. Two new parameters on `billing.attach` give you fine-grained control over what happens to consumable features during an immediate upgrade.
- **`carry_over_balances`**: Unused credits or balances from the old plan are carried forward to the new one — so customers don't lose what they've already paid for
- **`carry_over_usages`**: Prior usage is deducted from the new plan's allowance, preventing customers from getting a free reset on upgrade
- **Per-feature control**: Optionally scope carry-over to specific features using `feature_ids`
See the [attach API reference](/api-reference/billing/attach) for details.
## Feature flags in customer and entity responses
Boolean features are now returned as a dedicated `flags` object on customer and entity API responses. This makes it easier to check on/off feature access without calling the `check` endpoint separately.
- **Separate from balances**: Flags live under `flags` in the response, clearly separated from consumable balances
- **Available everywhere**: Returned on customer get, list, entity get, and entity create endpoints
- **Includes metadata**: Each flag shows the originating plan, expiration, and feature ID
See the [check endpoint](/api-reference/core/check) and [customer endpoints](/api-reference/customers/getOrCreateCustomer) for the updated response format.
<AccordionGroup>
<Accordion title="Improvements">
- Balance carry-over on immediate plan upgrades via `carry_over_balances` - [#861](https://github.com/useautumn/autumn/pull/861)
- Usage carry-over on immediate plan upgrades via `carry_over_usages` - [#875](https://github.com/useautumn/autumn/pull/875)
- Boolean features returned as `flags` in customer and entity objects - [#950](https://github.com/useautumn/autumn/pull/950)
- Updated API, SDKs, and frontend with new flag fields - [#951](https://github.com/useautumn/autumn/pull/951)
</Accordion>
<Accordion title="Bug Fixes">
- Fixed customer retrieval query causing errors in certain configurations - [#958](https://github.com/useautumn/autumn/pull/958), [#959](https://github.com/useautumn/autumn/pull/959)
- Fixed trial upgrade reliability when unsetting trial periods - [#958](https://github.com/useautumn/autumn/pull/958)
</Accordion>
</AccordionGroup>
</Update>
<Update label="March 13th 2026">
## Autumn Checkout
We've launched Autumn Checkout — a hosted confirm-before-charge flow that gives customers a clear preview before completing their purchase.
When a customer with a saved payment method subscribes or updates their plan, they're now sent to Autumn Checkout instead of being charged directly. This lets them review exact pricing — including prorations, usage charges, and discounts — before confirming.
- **Preview before you pay**: Customers see immediate charges and next-cycle estimates before confirming
- **Works everywhere**: Supports new subscriptions, plan upgrades, and quantity updates
- **Handles edge cases**: Built-in flows for 3DS authentication, payment failures, and action-required states
- **No API changes**: Just follow the `paymentUrl` returned by `billing.attach` or `billing.update`
<AccordionGroup>
<Accordion title="How it works">
When you call `billing.attach` or `billing.update`, the returned `paymentUrl` routes customers to:
- **Stripe Checkout** — if they don't have a saved payment method
- **Autumn Checkout** — if they do, so they can review and confirm the charge
After confirmation, customers are redirected to your `successUrl`.
</Accordion>
</AccordionGroup>
</Update>
<Update label="February 25th 2026">
## Volume-Based Tiered Pricing
You can now choose between graduated and volume-based tiered pricing for your plans. With volume pricing, the entire usage quantity falls into a single tier instead of splitting across tiers — useful for models where the per-unit price depends on total consumption.
- **Two tier modes**: Choose graduated (split across tiers) or volume (single tier applies to all units)
- **Backward compatible**: Existing graduated plans work without changes; volume is opt-in via `tier_behavior`
- **Full stack**: Supported in the plan editor, attach/checkout previews, Stripe invoices, and the API
## Batch Attach
Attach multiple plans to a customer in a single API request. Each plan can have its own customization, feature quantities, and trial settings — all validated and applied atomically with a distributed lock.
- **One request, multiple plans**: Attach several plans at once with per-plan customization
- **Preview support**: Preview the combined batch before committing via `/billing.preview_multi_attach`
- **Concurrency safe**: Distributed lock prevents conflicting concurrent attaches
## Lazy Entitlement Resets
Entitlement resets now happen lazily on read, so customers see fresh balances instantly without waiting for a cron cycle. An atomic Postgres function and Redis Lua script prevent double-resets under concurrency.
- **Instant resets**: Stale entitlements are reset the moment they're fetched
- **Atomic & safe**: Per-row locking in Postgres and atomic Redis Lua patching prevent double-resets
- **Hardened cron fallback**: Batch reset cron bounded with max iterations and timeouts
<AccordionGroup>
<Accordion title="Improvements">
- Volume-based tiered pricing alongside graduated pricing - [#765](https://github.com/useautumn/autumn/pull/765)
- Batch attach: attach multiple plans in one request - [#815](https://github.com/useautumn/autumn/pull/815)
- Lazy entitlement resets for instant balance refreshes - [#800](https://github.com/useautumn/autumn/pull/800), [#802](https://github.com/useautumn/autumn/pull/802)
- Atomic Redis updates for customer data and entities (CRDT-safe) - [#812](https://github.com/useautumn/autumn/pull/812), [#813](https://github.com/useautumn/autumn/pull/813)
- Mobile navigation with sticky top bar and slide-in sidebar - [#760](https://github.com/useautumn/autumn/pull/760)
- 12/24-hour date and time picker for balance reset scheduling - [#760](https://github.com/useautumn/autumn/pull/760)
- Stripe coupon support in attach discount dropdown - [#819](https://github.com/useautumn/autumn/pull/819)
- Metadata on Stripe invoice line items (product ID, price ID, coupon IDs) - [#817](https://github.com/useautumn/autumn/pull/817)
- RPC router for Plans (create/get/update/delete) - [#750](https://github.com/useautumn/autumn/pull/750)
- RPC router for Features (list/get/create/update/delete) - [#762](https://github.com/useautumn/autumn/pull/762)
- Hardened reset cron with bounded batches and timeouts - [#808](https://github.com/useautumn/autumn/pull/808)
- Customer filter and UI cleanups - [#755](https://github.com/useautumn/autumn/pull/755)
- Unit tests GitHub Action - [#801](https://github.com/useautumn/autumn/pull/801)
</Accordion>
<Accordion title="Bug Fixes">
- Fixed scheduled switches failing when a Stripe coupon was deleted - [#759](https://github.com/useautumn/autumn/pull/759)
- Fixed events table showing empty - [#822](https://github.com/useautumn/autumn/pull/822)
- Fixed customer balance UI - [#816](https://github.com/useautumn/autumn/pull/816)
- Fixed balance subrow to always show /granted - [#779](https://github.com/useautumn/autumn/pull/779), [#780](https://github.com/useautumn/autumn/pull/780)
- Fixed attach dashboard one-off products - [#789](https://github.com/useautumn/autumn/pull/789)
- Fixed create customer body expand - [#787](https://github.com/useautumn/autumn/pull/787)
- Fixed Vercel marketplace status not ready - [#778](https://github.com/useautumn/autumn/pull/778)
- Fixed discounts on upgrades in legacy attach - [#772](https://github.com/useautumn/autumn/pull/772)
- Fixed invoice without payment method - [#770](https://github.com/useautumn/autumn/pull/770)
- Fixed SQS client restart - [#767](https://github.com/useautumn/autumn/pull/767), [#768](https://github.com/useautumn/autumn/pull/768)
- Fixed impersonation - [#793](https://github.com/useautumn/autumn/pull/793)
- Fixed reset for past-due customer entitlements - [#805](https://github.com/useautumn/autumn/pull/805), [#806](https://github.com/useautumn/autumn/pull/806)
- Fixed zero denominator issue - [#746](https://github.com/useautumn/autumn/pull/746)
- Fixed Vercel transfer request blocking - [#744](https://github.com/useautumn/autumn/pull/744)
- Fixed discounts on scheduled subscriptions - [#742](https://github.com/useautumn/autumn/pull/742)
- Fixed invoice cron race condition - [#747](https://github.com/useautumn/autumn/pull/747)
- Fixed custom plan detection in subscription updates - [#784](https://github.com/useautumn/autumn/pull/784)
- Fixed success URL handling for v2 attach checkout - [#786](https://github.com/useautumn/autumn/pull/786)
- Fixed preview attach concurrency lock - [#758](https://github.com/useautumn/autumn/pull/758)
</Accordion>
<Accordion title="API">
- New `POST /billing.multi_attach` and `POST /billing.preview_multi_attach` for batch plan attaches - [#815](https://github.com/useautumn/autumn/pull/815)
- New `POST /billing.setup_payment` for collecting payment methods before plan attach - [#797](https://github.com/useautumn/autumn/pull/797)
- New attach/update subscription V1 params: `plan_id`, `feature_quantities`, `customize`, `free_trial`, `transition_rules` - [#749](https://github.com/useautumn/autumn/pull/749), [#752](https://github.com/useautumn/autumn/pull/752)
- RPC endpoints for Plans: `/plans.create`, `/plans.get`, `/plans.update`, `/plans.delete` - [#750](https://github.com/useautumn/autumn/pull/750)
- RPC endpoints for Features: `/features.list`, `/features.get`, `/features.create`, `/features.update`, `/features.delete` - [#762](https://github.com/useautumn/autumn/pull/762)
- Added `PATCH /customers/:customer_id` for partial updates - [#774](https://github.com/useautumn/autumn/pull/774)
- Metadata added to Stripe invoice line items - [#817](https://github.com/useautumn/autumn/pull/817)
- V2 API docs with multi-version OpenAPI specs and SDK generation pipeline - [#773](https://github.com/useautumn/autumn/pull/773)
</Accordion>
</AccordionGroup>
</Update>
<Update
label="January 12th 2026"
>
## Dynamic onboarding prompts
We've added a new in-app onboarding guide to help you get your billing set up in less than 30 minutes.
- **Docs in app**: Access documentation directly within the dashboard
- **3 prompts → full billing setup**: Complete your entire billing configuration in just 3 steps
- **Dynamic code snippets**: Get code snippets and prompts tailored to your specific pricing config
- **Real-time updates**: See your progress update as you complete each step
<br />
<Frame style={{ width: "500px" }}>
<img src="/assets/changelog/onboarding-prompts.png" />
</Frame>
<br />
<AccordionGroup>
<Accordion title="Improvements">
- Code cleanup and refactoring in Stripe billing plan evaluation system - [#525](https://github.com/useautumn/autumn/pull/525)
- Added `customerId` to request context for improved tracking and observability - [#520](https://github.com/useautumn/autumn/pull/520)
- Improved cache verification workflow with free product filtering and Sentry alert tags - [#519](https://github.com/useautumn/autumn/pull/519)
- Major Redis Lua refactor with cache versioning, filtering, and safer updates - [#512](https://github.com/useautumn/autumn/pull/512)
</Accordion>
<Accordion title="Bug Fixes">
- Fixed multi-region cache deletion to delete from all configured regions - [#539](https://github.com/useautumn/autumn/pull/539)
- Fixed import path casing issue for createProrationinvoice - [#537](https://github.com/useautumn/autumn/pull/537)
- Fixed TypeScript type compatibility in BullMQ worker - [#538](https://github.com/useautumn/autumn/pull/538)
- Fixed type annotations in OpenAPI definitions and RevenueCat mappings - [#533](https://github.com/useautumn/autumn/pull/533), [#534](https://github.com/useautumn/autumn/pull/534)
- Fixed migration logic for product downgrades and cancellations - [#529](https://github.com/useautumn/autumn/pull/529)
- Fixed subscription migration to prevent auto-uncanceling during version updates - [#527](https://github.com/useautumn/autumn/pull/527)
- Fixed `included_usage` calculation in V1.2 API backward compatibility layer - [#526](https://github.com/useautumn/autumn/pull/526)
- Implemented Redis-first caching for add-to-balance operations - [#524](https://github.com/useautumn/autumn/pull/524)
- Simplified Stripe webhook cache refresh strategy - [#523](https://github.com/useautumn/autumn/pull/523)
- Removed redundant `plan_version` field from subscription API schema - [#522](https://github.com/useautumn/autumn/pull/522)
- Fixed duplicate features in plan editor when closing edit feature sheet - [#508](https://github.com/useautumn/autumn/pull/508)
</Accordion>
<Accordion title="API">
- Added `entity_id` parameter support to legacy balance update endpoint - [#532](https://github.com/useautumn/autumn/pull/532)
- Added `/configs/push` and `/configs/nuke` endpoints for managing organization configuration in sandbox environments - [#521](https://github.com/useautumn/autumn/pull/521)
- Implemented idempotency protection for billing endpoints using `idempotency-key` header - [#516](https://github.com/useautumn/autumn/pull/516)
- Added new `POST /customers/list` V2 endpoint with plan filtering, subscription status filtering, and search functionality - [#518](https://github.com/useautumn/autumn/pull/518), [#517](https://github.com/useautumn/autumn/pull/517)
</Accordion>
</AccordionGroup>
</Update>
<Update
label="December 26th 2025"
>
## Add to balance in the dashboard
Merry Christmas! 🎄
You can now add to a customer's balance directly from the dashboard. This is useful for giving extra credits to a customer.
You can input a positive or negative value in this field.
<br />
<Frame style={{ width: "400px" }}>
<img src="/assets/changelog/add-to-balance.png" />
</Frame>
<br />
<AccordionGroup>
<Accordion title="Improvements">
- Balance management enhancements with atomic "Add to Balance" feature - [#503](https://github.com/useautumn/autumn/pull/503)
- Product copy workflow streamlined with direct environment selection - [#501](https://github.com/useautumn/autumn/pull/501)
- Plan feature sheet with discard/update actions and change detection - [#499](https://github.com/useautumn/autumn/pull/499)
- Base price display logic centralized into reusable utility - [#488](https://github.com/useautumn/autumn/pull/488)
- Stripe secret key authentication always available, improved UI - [#491](https://github.com/useautumn/autumn/pull/491)
- Console logs removed from production builds for cleaner output - [#487](https://github.com/useautumn/autumn/pull/487)
- Sign-in flow simplified by removing onboarding redirect logic - [#484](https://github.com/useautumn/autumn/pull/484)
- Enter key handler added for email sign-in and cache improvements - [#483](https://github.com/useautumn/autumn/pull/483)
- Plan editor UI enhanced with better pricing configuration - [#481](https://github.com/useautumn/autumn/pull/481)
- Hono dependency pinned to exact version for build consistency - [#494](https://github.com/useautumn/autumn/pull/494)
- UI refinements and number formatting improvements - [#500](https://github.com/useautumn/autumn/pull/500)
</Accordion>
<Accordion title="Bug Fixes">
- Add-on products no longer carry usage from main products - [#502](https://github.com/useautumn/autumn/pull/502)
- Base price display component type handling fixed - [#496](https://github.com/useautumn/autumn/pull/496)
- Invoice checkout cache invalidation fixed for null customer IDs - [#490](https://github.com/useautumn/autumn/pull/490)
- One-off products properly handled during subscription upgrades - [#489](https://github.com/useautumn/autumn/pull/489)
- Sandbox redirect logic restored for non-deployed organizations - [#486](https://github.com/useautumn/autumn/pull/486)
- Dashboard checkout success URL fixed for production environments - [#485](https://github.com/useautumn/autumn/pull/485)
- Transfer endpoint cache clearing URL pattern corrected - [#482](https://github.com/useautumn/autumn/pull/482)
- Cache race condition in attach flow resolved with timestamp guards - [#479](https://github.com/useautumn/autumn/pull/479)
</Accordion>
<Accordion title="API">
- RevenueCat payment processor integration added and reverted - [#497](https://github.com/useautumn/autumn/pull/497), [#495](https://github.com/useautumn/autumn/pull/495), [#435](https://github.com/useautumn/autumn/pull/435), [#493](https://github.com/useautumn/autumn/pull/493)
- Added manual secret key override to Hono `autumnHandler`
- Added `checkoutSessionParams` to `PricingTable` component from `autumn-js/react`
- Added `new_billing_subscription` to the `attach` endpoint, allowing you to create a new Stripe subscription instead of combining with an existing one
</Accordion>
</AccordionGroup>
</Update>
<Update
label="December 24th 2025"
>
## RevenueCat integration
We just released a new integration with RevenueCat, to let you manage your mobile app subscriptions and billing with Autumn.
This is especially helpful for users that have a mix of web and mobile users, and want to manage their billing in one place.
- **RevenueCat integration**: [Documentation](/documentation/external-providers/revenuecat)
<Note>
This is currently in beta, please reach out to us on [Discord](https://discord.gg/STqxY92zuS) or email us at hey@useautumn.com to get access.
</Note>
<br />
<Frame style={{ width: "500px" }}>
<img src="/assets/changelog/revenuecat.png" />
</Frame>
</Update>
<Update
label="December 18th 2025"
>
## List and aggregate events endpoints
We just released two new endpoints to retrieve usage data that your customers have sent to Autumn.
You can use this to display a billing event log, and a timeseries chart of usage data, so you can provide first-class billing observability out of the box!
- **List Events**: [React hooks](/react/hooks/useListEvents) and [API reference](/api-reference/events/list-events)
- **Aggregate Events**: [React hooks](/react/hooks/useAggregateEvents) and [API reference](/api-reference/events/aggregate-events)
<br />
<Frame style={{ width: "300px" }}>
<img src="/assets/changelog/event-list.png" />
</Frame>
<Frame style={{ width: "300px" }}>
<img src="/assets/changelog/event-aggregate.png" />
</Frame>
</Update>
<Update
label="December 16th 2025"
>
## Stripe customer portal link within the customer page
You can now open a customer's Stripe customer portal directly from the customer page. You can quickly preview this and send to customers that want to manage their payment methods or see past invoices.
<Frame style={{ width: "300px" }}>
<img src="/assets/changelog/customer-portal.png" alt="Stripe customer portal" />
</Frame>
<br />
</Update>
<Update
label="December 10th 2025"
>
## Usage columns in your customer list
Preview a customer's current credit balances straight from the customer list. Now you can see who's worth peeking into!
<Frame style={{ width: "400px" }}>
<img src="/assets/changelog/usage-columns.png" alt="Usage columns" />
</Frame>
</Update>
<Update
label="December 5th 2025"
>
## Autumn is live in us-east
Autumn is live on US-East! Previously all requests were hitting our us-west DB.
Now, we're reading and writing from multiple Redis caches, so both checking feature balances and tracking usage events are faster and more reliable.
More regions coming soon!
<Frame style={{ width: "400px" }}>
<img src="/assets/changelog/us-east.png" alt="US-East region" />
</Frame>
</Update>
<Update
label="December 1st 2025"
>
## Dark mode
Dark mode is here. No need to say more. We know you guys are all night owls.
We also shipped an entirely new design for the plan editor and customer pages, to make managing your plans and customers easier.
<Frame style={{ width: "400px" }}>
<img src="/assets/changelog/dark-mode.png" alt="Dark mode" />
</Frame>
</Update>