> ## Documentation Index
> Fetch the complete documentation index at: https://docs.useautumn.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Changelog

> Some new things we've shipped at Autumn HQ

<Update label="July 17th 2026">
  ## Multi-currency pricing and billing

  Plans can now be priced in **multiple currencies** end-to-end. Add `base_currency` and `additional_currencies` to any fixed, tiered, or usage-based price, and customers get billed in their resolved currency across checkout, invoices, top-ups, refunds, upgrades, and previews. Customers pick up a `currency` field that locks on their first paid attach — pass `currency` on [`billing.attach`](/api-reference/billing/attach) or [`billing.multi_attach`](/api-reference/billing/multiAttach) to choose, and attaches in a different currency return a clean `currency_mismatch` 400. Reach out to enable the `multi_currency` org flag.

  ## Licenses

  The full **licenses** stack is live: plans can offer other plans as assignable seats with `included` free counts, prepaid seat quantities, and per-customer overrides. New endpoints — [`licenses.attach`](/api-reference/licenses/attachLicense), [`licenses.release`](/api-reference/licenses/releaseLicense), [`licenses.list`](/api-reference/licenses/listLicenses), and [`licenses.list_assignments`](/api-reference/licenses/listLicenseAssignments) — let you provision, release, and inspect seats on entities, with balance tracking and dashboard management for the whole lifecycle. Priced licenses require the license plan to be attached to the customer first (via [`billing.attach`](/api-reference/billing/attach)); free licenses assign directly.

  ## List invoices endpoint

  Fetch a customer's invoices programmatically with the new [`invoices.list`](/api-reference/invoices/listInvoices) endpoint — the same data the dashboard uses, now available on the API for building portals, reconciliation flows, and audit tooling.

  ## Pay down overages on one-off add-ons

  One-off prepaid add-ons now **pay down existing overages** at attach time, so a customer who's already over their included balance immediately settles the outstanding usage on their next invoice instead of waiting for the cycle to close. Behavior is gated by the price's `persist_free_overage` flag for finer control.

  ## Back-sync carry usage on Stripe imports

  When you import an existing Stripe subscription that's mid-cycle on a usage feature, Autumn now **carries the already-consumed usage** into the new customer product so balances line up with what the customer has actually used, instead of resetting on import.

  ## Invoice-mode start for usage-in-arrears

  Subscriptions with usage-in-arrears pricing can now be started directly in **invoice mode** — useful for large customers you're billing outside checkout — without needing a card on file up front.

  ## Attach-time currency selection

  The [`billing.attach`](/api-reference/billing/attach) flow now accepts a `currency` parameter, and dashboard attach/preview sheets show amounts in the customer's currency. Pair with multi-currency plans to sell in EUR, GBP, or any additional currency you configure.

  <AccordionGroup>
    <Accordion title="Improvements">
      * Rollovers now carry to the best-candidate bucket on plan updates, so leftover balance doesn't disappear when you switch a customer between plans — [#2266](https://github.com/useautumn/autumn/pull/2266)
      * Multi-currency plan updates work through preview, save, and migration flows — [#2236](https://github.com/useautumn/autumn/pull/2236)
      * Multi-currency Stripe sync now imports historical subscriptions in their original currency — [#2227](https://github.com/useautumn/autumn/pull/2227)
      * Attach schedule now always defaults to **immediate**, so plans go live on save unless you explicitly schedule them — [#2232](https://github.com/useautumn/autumn/pull/2232)
      * Analytics dashboard refetches on window focus, so numbers stay fresh when you tab back in — [#2241](https://github.com/useautumn/autumn/pull/2241)
      * `billing.updated` webhooks now fire after the Stripe customer ID is persisted, so downstream consumers always see the linked Stripe record — [#2267](https://github.com/useautumn/autumn/pull/2267)
      * Plan **variants** now stamp their own `previous_price` history, so each variant keeps an independent price trail — [#2238](https://github.com/useautumn/autumn/pull/2238)
      * Consent screen shows the Autumn brand logo in the org selector — [#2249](https://github.com/useautumn/autumn/pull/2249)
      * Faster reset cron and invoice cron for large workspaces — [#2222](https://github.com/useautumn/autumn/pull/2222), [#2257](https://github.com/useautumn/autumn/pull/2257)
    </Accordion>

    <Accordion title="Bug fixes">
      * Coupon **scope** updates now apply cleanly to existing subscriptions instead of only new ones — [#2260](https://github.com/useautumn/autumn/pull/2260)
      * Catalog updates that reference customers across plan versions no longer error — [#2244](https://github.com/useautumn/autumn/pull/2244)
      * Non-consumable prepaid quantities update correctly on plan changes — [#2220](https://github.com/useautumn/autumn/pull/2220)
      * Dashboard no longer shows false "unsaved changes" errors when saving plans — [#2276](https://github.com/useautumn/autumn/pull/2276)
      * Entity creation is serialized per customer, avoiding duplicate rows under concurrent attaches — [#2242](https://github.com/useautumn/autumn/pull/2242)
      * Pending invoice cleanup cron backs off gracefully instead of retrying tight — [#2239](https://github.com/useautumn/autumn/pull/2239)
    </Accordion>
  </AccordionGroup>
</Update>

<Update label="July 10th 2026">
  ## Multi-update billing endpoint

  Cancel or uncancel multiple plans for a customer in a **single atomic request** with the new [`billing.multi_update`](/api-reference/billing/multiUpdate) endpoint. Updates are grouped per Stripe subscription and executed as one merged plan, so proration and invoicing land as a single combined result. Preview it first with [`billing.preview_multi_update`](/api-reference/billing/previewMultiUpdate) to see per-subscription and combined totals.

  ## Plan-inherited billing controls on customer reads

  API v2.3 customer and entity reads now include **plan-inherited** [billing controls](/documentation/customers/billing-controls) — `usage_limits`, `spend_limits`, `overage_allowed`, `auto_topups`, and `usage_alerts` — alongside customer-level overrides, with each entry tagged `source: "customer" | "plan"`. Inherited usage limits also return the current-window usage. Older clients keep the previous response shape.

  ## Eve: new default AI agent for Slack and dashboard chat

  Eve is now the default agent harness for Slack and the dashboard streaming chat, with in-thread approvals, follow-up questions, richer status updates, and interactive **catalog decision cards** for versioning and variant changes. Rejecting an approval in Slack or the web app now also clears the underlying suspension cleanly.

  ## Auto top-up failure webhook

  Subscribe to the new [`billing.auto_topup.failed`](/api-reference/webhooks/billingAutoTopupFailed) webhook to react to auto top-up charges that don't go through — pause features, notify the customer, or fall back to manual top-up.

  ## Expiring free recurring balances

  Free recurring balances can now carry an **`expires_at`** timestamp, and the [`balances.update`](/api-reference/balances/updateBalance) endpoint accepts `expires_at` so you can extend or shorten grants after the fact. The dashboard has matching controls in the balance sheet.

  ## Licenses (early)

  Foundational support for **licenses** has landed: a new licenses model, API schema, and a `licenses` field on the [`plans.list`](/api-reference/plans/listPlans) response. Reach out if you'd like to try it early.

  ## RevenueCat: email and fingerprint identifiers

  The [RevenueCat integration](/documentation/external-providers/revenuecat) now recognizes `autumn_customer_email` and `autumn_customer_fingerprint` subscriber attributes on incoming webhooks, so you can match RevenueCat purchases to Autumn customers by email or fingerprint instead of only by ID.

  ## Any-shape customer import

  [`billing.import`](/api-reference/billing/import) can now ingest customers from **any billing processor in any shape** — the processor and per-item `billable.processor` are configurable, and identity updates honor `dry_run`. Email-only `customer_data` payloads are validated before import runs.

  ## Property filters on usage limits

  [Usage limits](/documentation/modelling-pricing/spend-limits) now support **property filters**, so a single limit can target a subset of events (for example, only requests to a specific model or region) instead of the whole feature. `balances.limit_reached` also now fires for plan-level and percentage-based spend and usage limits.

  ## Copyable sandboxes

  Spin up a new sandbox as a **copy** of an existing one, so you can branch off staging or QA without rebuilding your catalog from scratch.

  ## billing.updated on manual sync

  Manual sync operations now emit the [`billing.updated`](/api-reference/webhooks/billingUpdated) webhook, so downstream consumers stay in sync when you re-pull state from Stripe by hand.

  <AccordionGroup>
    <Accordion title="Improvements">
      * `set_usage` now composes with usage windows: setting a balance no longer errors when a feature has an active window, and window caps still hold after the reset — [#2205](https://github.com/useautumn/autumn/pull/2205)
      * Auto top-up expand path returns `purchase_limit` for plan-inherited entries too — [#2205](https://github.com/useautumn/autumn/pull/2205)
      * Refund-last-payment is now exposed on the API — [#2179](https://github.com/useautumn/autumn/pull/2179)
      * Slack app: additional options for matching a Slack user to an Autumn user — [#2100](https://github.com/useautumn/autumn/pull/2100)
      * Archived plans now include an `archived` flag when pulled via the CLI — [#2152](https://github.com/useautumn/autumn/pull/2152)
      * Webhook tags: customer and entity IDs are sanitized to the Svix charset so deliveries don't fail on unusual characters — [#2150](https://github.com/useautumn/autumn/pull/2150)
      * Free first schedule phase is now supported in plan schedules — [#2137](https://github.com/useautumn/autumn/pull/2137)
      * Refreshed checkout favicon — [#2162](https://github.com/useautumn/autumn/pull/2162), [#2161](https://github.com/useautumn/autumn/pull/2161)
      * Cleaner subscription sheet tooltips, coupon error messages, and plan ID chip in mappings — [#2157](https://github.com/useautumn/autumn/pull/2157)
    </Accordion>

    <Accordion title="Bug fixes">
      * Renewal edge case that could mis-schedule the next cycle is fixed — [#2200](https://github.com/useautumn/autumn/pull/2200)
      * Manual `tax_rate_id` is now applied to one-time and deferred charges, not just recurring items — [#2204](https://github.com/useautumn/autumn/pull/2204)
      * `check` with a lock correctly returns `allowed: false` when the customer has no entitlement — [#2174](https://github.com/useautumn/autumn/pull/2174)
      * Promo minimum validation is now consistent across all billing flows — [#2168](https://github.com/useautumn/autumn/pull/2168)
      * ACH processing invoices are handled correctly through the past-due flow — [#2167](https://github.com/useautumn/autumn/pull/2167), [#2128](https://github.com/useautumn/autumn/pull/2128), [#2053](https://github.com/useautumn/autumn/pull/2053)
      * Skip overage billing when no overage is due, avoiding empty invoice items — [#2190](https://github.com/useautumn/autumn/pull/2190), [#2182](https://github.com/useautumn/autumn/pull/2182)
      * Cardinality gate no longer false-fires on legitimate usage — [#2184](https://github.com/useautumn/autumn/pull/2184)
      * Scheduled customer products now resync `starts_at` when a Stripe schedule is updated — [#2177](https://github.com/useautumn/autumn/pull/2177)
      * Filter button on the customers page is visible even when a customer only has expired products — [#2165](https://github.com/useautumn/autumn/pull/2165)
      * Variant Stripe product renames now propagate correctly — [#2149](https://github.com/useautumn/autumn/pull/2149)
      * Product cron trial expiry now paginates correctly at scale — [#2144](https://github.com/useautumn/autumn/pull/2144)
      * Schedule phase billing anchors are reset when the phase changes; Stripe anchor reset day is clamped to valid values — [#2133](https://github.com/useautumn/autumn/pull/2133), [#2115](https://github.com/useautumn/autumn/pull/2115)
      * Discount upgrades apply cleanly to the upgraded plan — [#1815](https://github.com/useautumn/autumn/pull/1815)
      * `billing.import` correctly updates `customer_data` and filters one-off / usage-based balances — [#2154](https://github.com/useautumn/autumn/pull/2154), [#2156](https://github.com/useautumn/autumn/pull/2156)
      * Assorted usage-window, coupon, and sync-back fixes — [#2159](https://github.com/useautumn/autumn/pull/2159), [#2186](https://github.com/useautumn/autumn/pull/2186)
    </Accordion>
  </AccordionGroup>
</Update>

<Update label="June 26th 2026">
  ## Multiple sandbox environments per org

  Organizations can now spin up **multiple sandboxes** alongside production — each with its own API keys, teams, color, and icon — so you can isolate staging, QA, demo, and per-engineer environments without juggling accounts. Provision, switch, edit, and tear down sandboxes directly from the dashboard.

  ## Per-customer JWT credentials

  Issue and rotate **per-customer JWT credentials** for the frontend SDK. State is now persisted in Postgres, so credentials survive restarts and can be managed cleanly per customer.

  ## Percentage-based spend limits

  [Spend limits](/documentation/modelling-pricing/spend-limits) now support a `usage_percentage` mode, letting you cap overage as a percentage of included usage instead of an absolute number — useful for plans where the included quota changes between tiers.

  ## Plan metadata

  Attach arbitrary **metadata to plans** and read it back through the API. Use it to tag plans with internal flags, feature gates, or marketing copy without forking your pricing model.

  ## List rewards endpoint

  New [rewards endpoint](/api-reference/rewards/redeemRewardCode) returns both coupons and feature grants in a single paginated response, making it easier to render available rewards in your own UI.

  ## Track events with custom timestamps

  The `track` endpoint now accepts an explicit `timestamp` field, so you can backfill events or record usage that happened earlier without losing chronological accuracy.

  ## Plan billing controls

  Custom plans get a refreshed **billing controls** panel — clearer toggles, keyboard-focusable tooltips, simplified auto top-up resolution, and improved copy throughout. See [custom plans](/documentation/customers/custom-plans).

  ## Dual-auth Stripe keys

  You can now connect Stripe using **either** OAuth or a restricted API key, and switch between them per organization. The Stripe Keys UI has been redesigned around the new dual-auth flow, with cleaner copy and a smoother delete experience.

  <AccordionGroup>
    <Accordion title="Improvements">
      * Add interval filter to the customers list page — [#2038](https://github.com/useautumn/autumn/pull/2038)
      * "Create more" mode in the create-entity dialog for bulk entity setup — [#1988](https://github.com/useautumn/autumn/pull/1988)
      * Plan editor: cleaner update logic and feature-creation flow — [#2035](https://github.com/useautumn/autumn/pull/2035)
      * Net payment terms UI refreshed inside the invoice settings accordion — [#2034](https://github.com/useautumn/autumn/pull/2034)
      * Customizable buttons in transactional emails — [#1991](https://github.com/useautumn/autumn/pull/1991)
      * Customer IDs now accept colons for namespaced identifiers — [#1995](https://github.com/useautumn/autumn/pull/1995)
      * Mobile dashboard cleanup, including card-style tables on small screens — [#2013](https://github.com/useautumn/autumn/pull/2013)
      * [RevenueCat import](/documentation/external-providers/revenuecat): paginated product list and raw-mapping escape hatch for custom field mapping — [#2040](https://github.com/useautumn/autumn/pull/2040)
      * MCP OAuth now grants Leaf scopes when only OIDC scopes are requested — [#2012](https://github.com/useautumn/autumn/pull/2012), [#2023](https://github.com/useautumn/autumn/pull/2023)
      * Website content negotiation: canonical URLs serve markdown to clients that ask for it — [#2004](https://github.com/useautumn/autumn/pull/2004), [#2007](https://github.com/useautumn/autumn/pull/2007), [#2009](https://github.com/useautumn/autumn/pull/2009)
      * Cleaner Stripe connect dialog and improved Stripe-related copy across the dashboard — [#2020](https://github.com/useautumn/autumn/pull/2020), [#2047](https://github.com/useautumn/autumn/pull/2047)
      * Customer portal now has rate limiting to protect against abuse — [#2033](https://github.com/useautumn/autumn/pull/2033)
    </Accordion>

    <Accordion title="Bug fixes">
      * Auto top-ups now charge the most recently attached plan's one-off price — [#2049](https://github.com/useautumn/autumn/pull/2049)
      * Event table filtering corrected so filters apply to the right columns — [#2005](https://github.com/useautumn/autumn/pull/2005)
      * Long event values no longer overflow the events table — [#2048](https://github.com/useautumn/autumn/pull/2048)
      * Trialing customers downgrading to Free are correctly anchored to trial end — [#2000](https://github.com/useautumn/autumn/pull/2000)
      * Sync no longer adds phantom allowance for imported prepaid Stripe items, and carries prepaid usage correctly when expiring a plan — [#1978](https://github.com/useautumn/autumn/pull/1978)
      * Hourly rollovers now enforce the configured max cap on the reset cron — [#2022](https://github.com/useautumn/autumn/pull/2022)
      * Rewards: reject duplicate reward IDs and promo codes, and clean up promos on delete — [#2031](https://github.com/useautumn/autumn/pull/2031)
      * Event ranking window aligned with the chart for accurate top-events lists — [#2003](https://github.com/useautumn/autumn/pull/2003)
      * Separate billing intervals render correctly in the plan editor — [#2001](https://github.com/useautumn/autumn/pull/2001), [#2042](https://github.com/useautumn/autumn/pull/2042), [#2043](https://github.com/useautumn/autumn/pull/2043)
      * Prevent horizontal overscroll on the marketing site — [#2019](https://github.com/useautumn/autumn/pull/2019)
      * MCP and Leaf auth edge cases resolved — [#2026](https://github.com/useautumn/autumn/pull/2026)
    </Accordion>
  </AccordionGroup>
</Update>

<Update label="June 19th 2026">
  ## Autumn Lakehouse

  Stream every event, balance change, and invoice straight into your own data warehouse via the new **Autumn Lakehouse**. Connect once and query Autumn data with the SQL engine of your choice — Snowflake, BigQuery, DuckDB, Athena, Spark, or anything else that speaks Apache Iceberg.

  See the [Lakehouse overview](/documentation/lakehouse/overview) and [connecting guide](/documentation/lakehouse/connecting) to get started.

  ## Instant customer products table

  The customer detail page now renders its products table immediately, with the rest of the list paginated in the background. Loading a customer with hundreds of products is no longer a wait.

  ## Weekly analytics granularity

  Analytics now supports a **weekly** bin size, and granularity options are tailored per time range (no more greyed-out choices). The granularity picker has moved into the time-period dropdown for fewer clicks.

  ## Plan version migrations: filter compiler & migrate dialog

  Plan version migrations get a new **filter compiler** for targeting exactly the customers you want, a refreshed migrate dialog, and clearer visibility into billing changes before you commit. See [custom plans](/documentation/customers/custom-plans).

  ## Rewards: boolean grants & first-time conditions

  Rewards can now grant **boolean features** (e.g. unlock an add-on as a perk) and can be gated to a customer's **first-time** purchase only. Useful for launch promos and onboarding incentives.

  ## OpenRouter support in the AI gateway

  The Autumn [AI gateway](/documentation/external-providers/openrouter) now supports OpenRouter as a provider, so you can meter and bill OpenRouter usage the same way as direct OpenAI, Anthropic, and others.

  <AccordionGroup>
    <Accordion title="Improvements">
      * New `carry_over_usages` option on [`billing.update`](/api-reference/billing/billingUpdate) to preserve usage across plan changes — [#1974](https://github.com/useautumn/autumn/pull/1974)
      * New `next_reset_at` parameter on [create balance](/api-reference/balances/createBalance) for scheduling the first reset — [#1950](https://github.com/useautumn/autumn/pull/1950)
      * Long-lived Stripe checkout sessions so links stay valid for longer — [#1976](https://github.com/useautumn/autumn/pull/1976)
      * Consolidated customer header actions, entity-scoped views, and direct Stripe Connect links from the customer page — [#1964](https://github.com/useautumn/autumn/pull/1964)
      * Separate billing intervals per price component — [#1961](https://github.com/useautumn/autumn/pull/1961)
      * Discounts now support a max-redemptions cap — [#1939](https://github.com/useautumn/autumn/pull/1939)
      * Past-due cancellations void the open invoice immediately — [#1948](https://github.com/useautumn/autumn/pull/1948)
      * Option to ignore past-due state and preserve the subscription — [#1963](https://github.com/useautumn/autumn/pull/1963)
      * Clearer error messages across the dashboard and API — [#1943](https://github.com/useautumn/autumn/pull/1943)
      * Refreshed reward selectors and coupon update confirmation — [#1928](https://github.com/useautumn/autumn/pull/1928)
      * Org logos now upload to S3 with reliable hosting — [#1225](https://github.com/useautumn/autumn/pull/1225)
      * Custom buttons in the dashboard — [#1987](https://github.com/useautumn/autumn/pull/1987)
      * AI credit systems are now treated as generic credit systems in the plan editor — [#1903](https://github.com/useautumn/autumn/pull/1903)
    </Accordion>

    <Accordion title="Bug fixes">
      * Patch migrations no longer skip custom products — [#1953](https://github.com/useautumn/autumn/pull/1953)
      * Multi-entity granted amounts now display correctly in balance sub-rows — [#1947](https://github.com/useautumn/autumn/pull/1947)
      * Free-trial dedup is now scoped per entity so each entity gets its own trial — [#1956](https://github.com/useautumn/autumn/pull/1956)
      * `billing.updated` webhook now fires on trial-to-paid conversion — [#1972](https://github.com/useautumn/autumn/pull/1972)
      * Tax and discounts now render correctly in [attach preview](/api-reference/billing/previewAttach) — [#1944](https://github.com/useautumn/autumn/pull/1944)
      * [`createSchedule`](/api-reference/billing/createSchedule) phases now snap to the cycle boundary — [#1975](https://github.com/useautumn/autumn/pull/1975)
      * Checkout page no longer renders blank on certain React versions — [#1937](https://github.com/useautumn/autumn/pull/1937)
      * Usage limits now respect the AI credit dimension — [#1912](https://github.com/useautumn/autumn/pull/1912)
      * Onboarding fee no longer double-charges in edge cases — [#1946](https://github.com/useautumn/autumn/pull/1946)
      * Environment selection and org switching in the dashboard — [#1952](https://github.com/useautumn/autumn/pull/1952), [#1970](https://github.com/useautumn/autumn/pull/1970)
      * Copy entity ID and allow duplicate plans in the sync editor — [#1957](https://github.com/useautumn/autumn/pull/1957)
      * Sync expire no longer fails on certain customer states — [#1967](https://github.com/useautumn/autumn/pull/1967)
      * Batch operations are now idempotent — [#1981](https://github.com/useautumn/autumn/pull/1981)
      * Slack admin and dashboard gate fixes — [#1986](https://github.com/useautumn/autumn/pull/1986), [#1984](https://github.com/useautumn/autumn/pull/1984)
      * CLI auth and Claude OAuth flows — [#1926](https://github.com/useautumn/autumn/pull/1926), [#1925](https://github.com/useautumn/autumn/pull/1925)
      * `atmn` CLI now exits with a non-zero code on interactive push/pull errors — [#1927](https://github.com/useautumn/autumn/pull/1927)
      * Copy product API call no longer fires with missing required fields — [#1585](https://github.com/useautumn/autumn/pull/1585)
      * Keyboard shortcut and scroll fixes in the dashboard — [#1915](https://github.com/useautumn/autumn/pull/1915), [#1942](https://github.com/useautumn/autumn/pull/1942)
    </Accordion>
  </AccordionGroup>
</Update>

<Update label="May 29th 2026">
  ## Autumn MCP server

  Autumn now ships an official **Model Context Protocol (MCP) server**, so AI assistants like Claude Desktop and Cursor can read and act on your Autumn data directly. The server is generated against the public API and respects your existing API key scopes (`customers:read`, `plans:read`, `billing:read`, `billing:write`) — no new permission model to learn.

  Install it as a Claude Desktop extension or wire it into Cursor with a single deeplink. Use it to look up customers, inspect plans, preview attaches, and run billing updates from your assistant.

  ## Org-level usage alerts

  Usage alerts can now be configured **once at the org level** and applied across every customer, instead of being attached plan by plan. Set a threshold and channel from settings, and Autumn fires alerts whenever any customer crosses the bar. The [`balances.usage_alert.triggered` webhook](/api-reference/webhooks/balancesUsageAlertTriggered) fires for both per-plan and org-level alerts.

  ## Vercel Marketplace: invoice mode and resource logs

  The Vercel integration now supports **invoice-mode billing** end to end and surfaces **per-resource logs** in the dashboard, so you can debug a Vercel customer's provisioning, auto top-ups, and invoice flow without leaving Autumn. The frontend was rebuilt around the new resource model, with fallbacks for identity edge cases.

  See the [Vercel Marketplace guide](/documentation/external-providers/vercel-marketplace).

  <AccordionGroup>
    <Accordion title="Improvements">
      * Official Autumn MCP server for Claude Desktop, Cursor, and other MCP clients — [#1715](https://github.com/useautumn/autumn/pull/1715), [#1740](https://github.com/useautumn/autumn/pull/1740), [#1741](https://github.com/useautumn/autumn/pull/1741)
      * Org-level usage alerts with shared thresholds across customers — [#1707](https://github.com/useautumn/autumn/pull/1707)
      * Vercel Marketplace invoice mode, resource logs, and refreshed frontend — [#1711](https://github.com/useautumn/autumn/pull/1711)
      * Preflight tax-address check before charging customers in taxable regions — [#1699](https://github.com/useautumn/autumn/pull/1699)
      * Automatically void uncollectible Stripe invoices instead of leaving them open — [#1732](https://github.com/useautumn/autumn/pull/1732)
      * New plan-version filters for [custom-plan migrations](/documentation/customers/custom-plans) — [#1718](https://github.com/useautumn/autumn/pull/1718)
      * Faster customer detail loads and smoother large entity lists — [#1712](https://github.com/useautumn/autumn/pull/1712)
      * Customer list filter by entity ID — [#1688](https://github.com/useautumn/autumn/pull/1688)
      * Refreshed dashboard theme and appearance controls — [#1679](https://github.com/useautumn/autumn/pull/1679)
      * Optimised product counts in the customer table — [#1690](https://github.com/useautumn/autumn/pull/1690)
      * Mobile fixes for the customer list view — [#1689](https://github.com/useautumn/autumn/pull/1689)
    </Accordion>

    <Accordion title="Bug fixes">
      * Stripe checkout no longer drops carry-over balances on plan changes — [#1708](https://github.com/useautumn/autumn/pull/1708)
      * Trial grants are now excluded from reward eligibility — [#1730](https://github.com/useautumn/autumn/pull/1730)
      * RevenueCat sync no longer fails with "entities not found" — [#1729](https://github.com/useautumn/autumn/pull/1729)
      * Tax IDs now render correctly in the attach preview — [#1728](https://github.com/useautumn/autumn/pull/1728)
      * Invalid email addresses are now rejected with a clearer error — [#1722](https://github.com/useautumn/autumn/pull/1722)
      * Sandbox usage alerts now respect their configured threshold — [#1706](https://github.com/useautumn/autumn/pull/1706)
      * Proration toggle now shows even when the customer has a past trial — [#1704](https://github.com/useautumn/autumn/pull/1704)
      * One-off prepaid items upgrade correctly without double carry-over — [#1676](https://github.com/useautumn/autumn/pull/1676), [#1695](https://github.com/useautumn/autumn/pull/1695)
      * Subscription metadata is preserved through checkout — [#1719](https://github.com/useautumn/autumn/pull/1719)
      * Price dropdown no longer loses its selected value when reopened — [#1720](https://github.com/useautumn/autumn/pull/1720)
      * Vercel auto top-ups no longer fail to process the resulting invoice — multiple fixes ([#1725](https://github.com/useautumn/autumn/pull/1725))
    </Accordion>
  </AccordionGroup>
</Update>

<Update label="May 28th 2026">
  ## Batch track and async track

  Two new ways to record usage when you don't need an immediate balance read:

  * [`POST /v1/balances.batch_track`](/api-reference/core/batchTrack) — enqueue up to **1000 usage events** in one request. Returns 202 immediately; balances are deducted by background workers.
  * **`async: true`** on the existing [`POST /v1/balances.track`](/api-reference/core/track) — same fire-and-forget shape for single-event callers that want the speed without switching to the batch endpoint.

  Both paths are intended for high-volume metering (event logging, per-action usage counters) where you'd previously be limited by the synchronous deduction's HTTP round-trip. Partial enqueue failures are logged server-side and do NOT surface as errors to the client — see the [batch track reference](/api-reference/core/batchTrack#partial-failure-semantics) for the trade-off.
</Update>

<Update label="May 20th 2026">
  ## `billing.updated` webhook

  A new **`billing.updated`** webhook fires whenever a customer's plans change — attaches, renewals, schedule activations, trial conversions, plan updates, and expirations all flow through a single event. The payload includes the customer, optional entity, and an array of `plan_changes` describing what was activated, scheduled, updated, or expired, with previous-state diffs.

  Use it to drive provisioning, lifecycle emails, CRM sync, and revenue reporting from one webhook instead of stitching together multiple events.

  See the [`billing.updated` webhook reference](/api-reference/webhooks/billingUpdated).

  ## Cursor-based pagination and list endpoints (API v2.3)

  The API is now at **v2.3**, introducing cursor-based pagination across list endpoints. Two new endpoints ship with it:

  * [`POST /v1/entities.list`](/api-reference/entities/listEntities) — list a customer's entities with filters and cursor pagination.
  * [`POST /v1/events.list`](/api-reference/events/listEvents) — paginate raw event history for a customer or feature.

  Cursor pagination replaces offset-based paging on heavy endpoints, giving stable results even while data changes between pages. Pass `start_cursor` to continue from a previous page.

  ## Manual auto top-ups from the dashboard

  You can now trigger an auto top-up for a customer directly from the dashboard, without waiting for the balance to cross the configured threshold. Useful for support flows, manual credit grants, or testing top-up wiring end to end.

  See the [auto top-ups guide](/documentation/modelling-pricing/auto-top-ups).

  ## Passkey sign-in for the dashboard

  Dashboard accounts now support **passkeys (WebAuthn)**. Register a passkey from your account settings to sign in with Face ID, Touch ID, Windows Hello, or a hardware key — no password required. Sign-in autofill is enabled so browsers can prompt for a passkey on the login screen.

  ## Vercel resource pre-provisioning

  For Vercel Marketplace installs, Autumn now provisions the customer product the moment a resource is created, using a Stripe preauth instead of waiting for the first invoice. New Vercel customers land in your dashboard with their plan attached and entitlements ready immediately.

  See the [Vercel Marketplace guide](/documentation/external-providers/vercel-marketplace).

  ## `plan_id` in analytics

  Analytics queries now group and filter by `plan_id`, so revenue, usage, and event charts can be sliced per plan. Plan selection in the dashboard analytics views drives the new dimension end to end.

  ## Customer API logs workbench

  The dashboard's customer detail view now includes a **workbench panel** showing recent API requests for that customer — endpoint, status, latency, and payload — so you can debug integrations without leaving the customer.

  ## Schedule editor: copy from previous phase

  When customizing a scheduled phase, you can now click **Copy from previous phase** to seed the product selector with the prior phase's items, then adjust from there. Faster than rebuilding a multi-item phase from scratch.

  ## Trial `on_end` behaviour for attach

  `billing.attach` accepts a new option to control what happens when a trial ends — convert to the paid plan, expire, or hand off to another product. The setting respects entity scoping so trials on one entity no longer disrupt others on the same customer.

  See the [attach API reference](/api-reference/billing/attach).

  <AccordionGroup>
    <Accordion title="Improvements">
      * `billing.updated` webhook with unified `plan_changes` payload — [#1637](https://github.com/useautumn/autumn/pull/1637)
      * API v2.3 with cursor-based pagination — [#1596](https://github.com/useautumn/autumn/pull/1596)
      * `POST /v1/entities.list` endpoint — [#1505](https://github.com/useautumn/autumn/pull/1505), [#1513](https://github.com/useautumn/autumn/pull/1513)
      * Paginated `POST /v1/events.list` endpoint — [#1596](https://github.com/useautumn/autumn/pull/1596)
      * Manual auto top-up trigger in dashboard — [#1532](https://github.com/useautumn/autumn/pull/1532)
      * Passkey (WebAuthn) sign-in and settings UI — [#1587](https://github.com/useautumn/autumn/pull/1587)
      * Vercel resource pre-provisioning with Stripe preauth — [#1578](https://github.com/useautumn/autumn/pull/1578)
      * `plan_id` dimension in analytics charts and tables — [#1568](https://github.com/useautumn/autumn/pull/1568), [#1613](https://github.com/useautumn/autumn/pull/1613)
      * Customer API logs workbench panel — [#1525](https://github.com/useautumn/autumn/pull/1525)
      * "Copy from previous phase" button in the schedule editor — [#1556](https://github.com/useautumn/autumn/pull/1556)
      * Trial `on_end` option on `billing.attach`, with entity-aware behaviour — [#1554](https://github.com/useautumn/autumn/pull/1554), [#1581](https://github.com/useautumn/autumn/pull/1581)
      * Live normalisation of expired auto top-up purchase-limit windows — [#1520](https://github.com/useautumn/autumn/pull/1520)
      * Command bar favourites for impersonating frequent orgs and users — [#1597](https://github.com/useautumn/autumn/pull/1597)
      * Settings page redesign with clearer navigation — [#1555](https://github.com/useautumn/autumn/pull/1555)
      * Dashboard analytics chart and table polish — [#1599](https://github.com/useautumn/autumn/pull/1599), [#1613](https://github.com/useautumn/autumn/pull/1613)
    </Accordion>

    <Accordion title="Bug fixes">
      * Stripe webhook race condition that could double-process events — [#1620](https://github.com/useautumn/autumn/pull/1620)
      * Checkout session race condition under high concurrency — [#1548](https://github.com/useautumn/autumn/pull/1548)
      * Attach now respects `tax_rate_id` overrides — [#1641](https://github.com/useautumn/autumn/pull/1641)
      * Attach correctly handles no-op billing changes — [#1586](https://github.com/useautumn/autumn/pull/1586)
      * Schedule sync no longer produces empty phases or duplicate items — [#1501](https://github.com/useautumn/autumn/pull/1501), [#1574](https://github.com/useautumn/autumn/pull/1574), [#1575](https://github.com/useautumn/autumn/pull/1575)
      * Schedule customize flow now correctly handles removed base prices on free plans — [#1556](https://github.com/useautumn/autumn/pull/1556)
      * Entity sync edge cases and item-log alignment fixed — [#1607](https://github.com/useautumn/autumn/pull/1607), [#1614](https://github.com/useautumn/autumn/pull/1614)
      * Custom item delete and ghost item issues in the plan editor — [#1517](https://github.com/useautumn/autumn/pull/1517), [#1628](https://github.com/useautumn/autumn/pull/1628), [#1629](https://github.com/useautumn/autumn/pull/1629)
      * Cancel flow now handles plans with a future `starts_at` — [#1507](https://github.com/useautumn/autumn/pull/1507)
      * Revert trial issue when reversing a recent attach — [#1635](https://github.com/useautumn/autumn/pull/1635)
      * Vercel: Stripe Tax disabled when org has no tax config; metadata is now optional — [#1558](https://github.com/useautumn/autumn/pull/1558)
      * Various Vercel marketplace bug fixes — [#1579](https://github.com/useautumn/autumn/pull/1579)
      * Duplicate Stripe customer ID handling — [#1528](https://github.com/useautumn/autumn/pull/1528)
      * Cache invalidation correctness on customer and plan edits — [#1531](https://github.com/useautumn/autumn/pull/1531), [#1612](https://github.com/useautumn/autumn/pull/1612)
      * Dashboard customer cache freshness — [#1612](https://github.com/useautumn/autumn/pull/1612)
      * Plan analytics: per-item parse failures no longer drop valid deductions; `$plan_id` alias normalised — [#1608](https://github.com/useautumn/autumn/pull/1608)
      * `list events` hook returns the correct response type — [#1633](https://github.com/useautumn/autumn/pull/1633)
      * Shadow flag evaluation fixes — [#1632](https://github.com/useautumn/autumn/pull/1632)
      * Webhook tag filtering improvements — [#1617](https://github.com/useautumn/autumn/pull/1617)
      * No-op plan PATCH now exits cleanly without spurious updates — [#1628](https://github.com/useautumn/autumn/pull/1628)
      * Database pool sizing and connection limits raised for higher throughput — [#1625](https://github.com/useautumn/autumn/pull/1625), [#1643](https://github.com/useautumn/autumn/pull/1643)
    </Accordion>
  </AccordionGroup>
</Update>

<Update label="May 7th 2026">
  ## Scheduled subscriptions with `starts_at`

  You can now schedule a plan to start at a future date by passing a `starts_at` Unix timestamp (milliseconds) to `billing.attach`. Future-dated attaches create a Stripe subscription schedule that activates on the start date — perfect for delayed onboarding, contract renewals, or sales-led handoffs.

  Pair `starts_at` with `ends_at` to grant access for a fixed window. One-off products now also support `ends_at` and are automatically cleaned up when the window expires.

  See the [attach API reference](/api-reference/billing/attach).

  ## Auto top-up succeeded webhook

  A new **`billing.auto_topup_succeeded`** webhook fires whenever an auto top-up is processed for a customer. The payload includes the customer ID, feature ID, quantity granted, threshold that triggered the top-up, post-top-up balance, and the full Stripe invoice (status, total, currency, hosted URL, and PDF link).

  Useful for sending receipts, syncing top-ups to your own ledger, or alerting customers that their card was charged. Supports both auto-charged and `send_invoice` modes.

  See the [auto top-up webhook reference](/api-reference/webhooks/billingAutoTopupSucceeded) and the [auto top-ups guide](/documentation/modelling-pricing/auto-top-ups).

  ## Promo codes in Autumn Checkout

  Customers can now apply promo codes directly in Autumn Checkout. The order summary surfaces a collapsed promo trigger that expands into an input — applied codes show their discount and expiry inline, and the totals update before confirmation.

  ## Discounts and coupons in subscription updates

  The dashboard's subscription update flow now supports applying discounts. Existing coupons are visible in the subscription detail sheet, and you can attach a discount when changing a plan or quantities.

  ## Tax and invoice credits in attach preview

  `billing.preview_attach` now returns two new optional fields:

  * **`tax`**: Tax breakdown for the immediate charge (total, inclusive/exclusive amounts, currency, calculation status). Powered by Stripe Tax — contact us to enable the tax flag on your organisation.
  * **`invoice_credits`**: The customer's available Stripe invoice credit balance, so you can show "Account credit" line items in custom checkouts.

  See the [preview attach reference](/api-reference/billing/previewAttach).

  ## `balances` field in `track` responses

  The `/track` endpoint now returns the affected feature balances — including a per-plan `breakdown` of grants, prepaid credits, usage, remaining, and rollovers — directly in the response. This removes the need for a follow-up `check` call after recording usage.

  See the [track endpoint](/api-reference/core/track).

  ## `processors` field on customer responses

  Customer endpoints (`get`, `getOrCreate`, `update`, `list`) now return a `processors` object listing every payment processor the customer is connected to: Stripe, Vercel, and RevenueCat. The field is omitted for customers not yet present in any processor.

  You can also filter `customers.list` by processor with the new `processors` query parameter.

  ## Auto top-up purchase limits in customer expand

  Expand `billing_controls.auto_topups.purchase_limit` on customer endpoints to retrieve the configured top-up rate limit, the current count of top-ups in the period, and the next reset timestamp. Useful for showing customers how close they are to their auto top-up cap.

  ## RevenueCat invoice sync

  RevenueCat-billed subscriptions now record full invoices on initial purchase, renewal, and refund events. Invoices appear alongside Stripe invoices in customer responses and the dashboard, giving you a unified view of revenue across processors.

  <AccordionGroup>
    <Accordion title="Improvements">
      * `starts_at` parameter on `billing.attach` for scheduled subscription start dates - [#1411](https://github.com/useautumn/autumn/pull/1411), [#1467](https://github.com/useautumn/autumn/pull/1467), [#1476](https://github.com/useautumn/autumn/pull/1476)
      * `ends_at` on one-off products with automatic expiry cron - [#1476](https://github.com/useautumn/autumn/pull/1476)
      * `billing.auto_topup_succeeded` webhook - [#1429](https://github.com/useautumn/autumn/pull/1429)
      * Promo code support in Autumn Checkout - [#1446](https://github.com/useautumn/autumn/pull/1446)
      * Discount support on subscription updates and coupon display in subscription detail - [#1463](https://github.com/useautumn/autumn/pull/1463)
      * Tax preview in `billing.preview_attach` - [#1417](https://github.com/useautumn/autumn/pull/1417), [#1424](https://github.com/useautumn/autumn/pull/1424)
      * Invoice credits preview in `billing.preview_attach` - [#1464](https://github.com/useautumn/autumn/pull/1464)
      * `balances` field returned in `/track` responses - [#1470](https://github.com/useautumn/autumn/pull/1470)
      * `processors` field and `processors` filter on customer endpoints - [#1490](https://github.com/useautumn/autumn/pull/1490)
      * `billing_controls.auto_topups.purchase_limit` expand on customer endpoints - [#1423](https://github.com/useautumn/autumn/pull/1423)
      * RevenueCat invoice recording on initial purchase, renewal, and refund - [#1490](https://github.com/useautumn/autumn/pull/1490)
      * OpenAPI spec, SDKs, and dashboard updated with `starts_at` / `ends_at` fields - [#1485](https://github.com/useautumn/autumn/pull/1485)
      * Checkout `enable_immediately` flow improvements - [#1415](https://github.com/useautumn/autumn/pull/1415)
      * API key sheet and table UI cleanup
    </Accordion>

    <Accordion title="Bug fixes">
      * Proration settings now visible during cross-entity free-to-paid attach - [#1491](https://github.com/useautumn/autumn/pull/1491)
      * Dashboard org switcher now lists the full set of organizations - [#1475](https://github.com/useautumn/autumn/pull/1475)
      * Balance validation no longer rejects valid edits - [#1477](https://github.com/useautumn/autumn/pull/1477)
      * Schedule sync edge cases fixed - [#1443](https://github.com/useautumn/autumn/pull/1443)
      * Orphaned customer products cleaned up correctly - [#1440](https://github.com/useautumn/autumn/pull/1440)
      * Auto-sync paid feature mapping on plan edits - [#1448](https://github.com/useautumn/autumn/pull/1448)
      * Member toolbar z-index fixed in the dashboard - [#1449](https://github.com/useautumn/autumn/pull/1449)
      * Prepaid price v2 fixes - [#1451](https://github.com/useautumn/autumn/pull/1451)
      * Vercel customer filtering when no Stripe is connected - [#1455](https://github.com/useautumn/autumn/pull/1455), [#1458](https://github.com/useautumn/autumn/pull/1458)
    </Accordion>
  </AccordionGroup>
</Update>

<Update label="March 23rd 2026">
  ## Usage alerts and `balances.limit_reached` webhook

  You can now configure **usage alerts** on customers and entities to get notified when usage crosses a threshold. Alerts are set via `billingControls.usageAlerts` and fire a `balances.usage_alert_triggered` webhook. Supports both absolute usage counts and percentage-of-allowance thresholds.

  A new **`balances.limit_reached`** webhook fires when a customer hits a usage limit — whether it's the included allowance, a max purchase cap, or a spend limit. See the [webhooks reference](/documentation/webhooks) and [spend limits & usage alerts guide](/documentation/modelling-pricing/spend-limits) for details.
</Update>

<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/fetch` 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/fetch`   |
  | 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/fetch` (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="https://mintcdn.com/autumn-b9b4c0fb/df8oGyhsA_ngL7c4/assets/changelog/onboarding-prompts.png?fit=max&auto=format&n=df8oGyhsA_ngL7c4&q=85&s=937920dd6ebb67b7b3b779acbafc17e5" width="2982" height="1680" data-path="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="https://mintcdn.com/autumn-b9b4c0fb/df8oGyhsA_ngL7c4/assets/changelog/add-to-balance.png?fit=max&auto=format&n=df8oGyhsA_ngL7c4&q=85&s=6337aaa69ad5f496bb4de04aa340aaf5" width="950" height="864" data-path="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](mailto:hey@useautumn.com) to get access.
  </Note>

  <br />

  <Frame style={{ width: "500px" }}>
    <img src="https://mintcdn.com/autumn-b9b4c0fb/df8oGyhsA_ngL7c4/assets/changelog/revenuecat.png?fit=max&auto=format&n=df8oGyhsA_ngL7c4&q=85&s=c35c3c7f5e30701b7fd6b9a10c0531b0" width="1512" height="966" data-path="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="https://mintcdn.com/autumn-b9b4c0fb/df8oGyhsA_ngL7c4/assets/changelog/event-list.png?fit=max&auto=format&n=df8oGyhsA_ngL7c4&q=85&s=43d4214ecc37ac14c6af005ac9044583" width="1156" height="610" data-path="assets/changelog/event-list.png" />
  </Frame>

  <Frame style={{ width: "300px" }}>
    <img src="https://mintcdn.com/autumn-b9b4c0fb/df8oGyhsA_ngL7c4/assets/changelog/event-aggregate.png?fit=max&auto=format&n=df8oGyhsA_ngL7c4&q=85&s=414350e7aa035b6061f065c7b36bbd41" width="1166" height="688" data-path="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="https://mintcdn.com/autumn-b9b4c0fb/df8oGyhsA_ngL7c4/assets/changelog/customer-portal.png?fit=max&auto=format&n=df8oGyhsA_ngL7c4&q=85&s=7e33d3a905415695611b9dda455feac8" alt="Stripe customer portal" width="1442" height="1188" data-path="assets/changelog/customer-portal.png" />
  </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="https://mintcdn.com/autumn-b9b4c0fb/df8oGyhsA_ngL7c4/assets/changelog/usage-columns.png?fit=max&auto=format&n=df8oGyhsA_ngL7c4&q=85&s=48cbc984e724aec9c790640409e7f4c8" alt="Usage columns" width="2496" height="1736" data-path="assets/changelog/usage-columns.png" />
  </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="https://mintcdn.com/autumn-b9b4c0fb/df8oGyhsA_ngL7c4/assets/changelog/us-east.png?fit=max&auto=format&n=df8oGyhsA_ngL7c4&q=85&s=e4baf0bb7aa5734c1e2d53a35611b837" alt="US-East region" width="1138" height="1124" data-path="assets/changelog/us-east.png" />
  </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="https://mintcdn.com/autumn-b9b4c0fb/df8oGyhsA_ngL7c4/assets/changelog/dark-mode.png?fit=max&auto=format&n=df8oGyhsA_ngL7c4&q=85&s=f47ee7f4622cd62c3b525a28de0e0947" alt="Dark mode" width="1034" height="706" data-path="assets/changelog/dark-mode.png" />
  </Frame>
</Update>
