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

# Changelog

> What we’ve been shipping at Flexprice lately

<Update label="May 4th 2026">
  ## Scheduled subscription cancellation

  Subscriptions can now be cancelled at a specific future date — set `cancel_at` on the cancel request and the subscription stays active until that date, then terminates automatically.

  * **`cancel_at` parameter**: Pass a future timestamp to the cancel endpoint to schedule termination at a precise point in time
  * **Validation**: The API enforces that `cancel_at` must be strictly in the future, returning a clear error if the date has already passed
  * **Existing modes preserved**: Immediate and end-of-period cancellation continue to work unchanged alongside scheduled cancellation

  <br />

  ## Metadata filtering

  Customers and plans can now be filtered by arbitrary metadata key-value pairs — useful for multi-tenant setups, account segmentation, and custom tagging.

  * **JSONB GIN indexes**: Metadata columns are now indexed with PostgreSQL GIN indexes for performant key-value lookups at scale
  * **Customer and plan APIs**: Both the customer list and plan list endpoints accept `metadata` key-value filters via a shared `MetadataFilter` struct
  * **Dashboard query builder**: The filter popover now supports metadata key-value pair inputs with a dedicated UI component

  <br />

  ## Subscription line item search

  A new search endpoint lets you query subscription line items across subscriptions with full filtering and pagination support.

  * **Search endpoint**: `POST /v1/subscriptions/lineitems/search` accepts a `SubscriptionLineItemFilter` body with status, price, and date filters
  * **Pagination**: Results are paginated and sortable — no need to fetch the entire subscription to inspect individual line items
  * **Dashboard UI**: The subscription edit charges section now uses this endpoint for filtering and browsing line items directly

  <br />

  ## Usage analytics export

  Usage analytics data can now be exported to CSV from both the API and the dashboard — covering per-customer, per-meter breakdowns for any billing period.

  * **Export API**: New endpoint returns a CSV of usage analytics including external customer IDs, meter breakdowns, and metadata fields
  * **Metadata columns**: Credit usage reports now include additional metadata fields configured on the export, with nil-safe handling for missing external IDs
  * **Dashboard UI**: Usage analytics pages now expose a download button for CSV exports

  <br />

  ## Webhook retry job configuration

  The Temporal-based stale webhook retry job is now fully configurable via server config — enabling per-deployment tuning without code changes.

  * **Kill switch**: Set `enabled: false` to disable the retry job entirely for a deployment
  * **Rate limiting**: `rate_limit` (default: 5/s) caps delivery throughput within each cron run using a token-bucket limiter
  * **Tenant exclusions**: `excluded_tenants` skips specific tenant IDs from retry processing
  * **Event-type allowlist**: `allowed_event_types` restricts retries to specific webhook event names — empty list retries all types
  * **Max attempts**: `max_attempts` (default: 5) replaces the hardcoded failure-count threshold in the retry query

  <br />

  **Other changes**

  <AccordionGroup>
    <Accordion title="Improvements">
      * Inherited subscription usage now includes child account events in the usage pipeline — parent subscriptions aggregate usage from all attached child customers
      * Billing service methods refactored to accept structured DTO inputs with validation, replacing positional argument chains
      * Subscription billing schedule decommissioned and replaced with the unified `SubscriptionBilling` Temporal schedule
      * Environment name can now be updated from the settings page
      * System event domain repository added for structured event querying in the webhook pipeline
    </Accordion>

    <Accordion title="Fixes">
      * Analytics merge now correctly aggregates `PriceResponses` from child accounts when computing parent subscription usage
      * Metadata filter nil-check corrected in in-memory store to use map lookup instead of index-0 access
      * Customer ID filtering optimized in `GetUsage` and `matchesBaseFilters` for the in-memory event store
      * Subscription future date restriction removed — subscriptions can now be created with a `start_date` in the future without a validation error
    </Accordion>

    <Accordion title="API">
      * New `POST /v1/subscriptions/lineitems/search` endpoint for filtering and paginating subscription line items
      * `cancel_at` parameter added to `CancelSubscriptionRequest` for scheduled future cancellation
      * Customer list API now accepts `metadata` key-value filters via `MetadataFilter` in the request body
      * Usage analytics export endpoint added with support for external customer ID resolution and partial-count logging
    </Accordion>
  </AccordionGroup>
</Update>

<Update label="April 27th 2026">
  ## Subscription trial periods

  Subscriptions can now be created with a trial period — pass `trial_period_days` on creation and Flexprice automatically sets the trial window, then transitions to paid billing when the trial ends.

  * **`trial_period_days` on create**: Pass a non-negative integer to set the trial length; if omitted, the value is inherited from the plan's recurring fixed prices (must be uniform across prices)
  * **Temporal trial end workflow**: A Temporal workflow handles trial expiry — updates subscription status, computes the first invoice, and activates billing at the correct period boundary
  * **Inherited subscription cascading**: Trial end processing propagates to child subscriptions when the parent trial expires
  * **Validation**: `trial_period_days` and explicit `trial_start`/`trial_end` are mutually exclusive — the API returns a clear error if both are provided

  <br />

  ## Temporal-native scheduling

  Cron jobs are now managed as Temporal schedules — replacing the legacy cron HTTP endpoints with durable, observable, and pauseable Temporal workflows.

  * **Temporal schedules**: All recurring billing jobs are now registered as Temporal schedules at worker startup
  * **Legacy endpoints removed**: The deprecated cron trigger HTTP endpoints have been removed from the API surface
  * **Subscription billing schedule**: The `SubscriptionBillingPeriods` legacy schedule is replaced by the unified `SubscriptionBilling` Temporal schedule

  <br />

  ## Add-on lifecycle controls

  Add-on subscriptions now support fine-grained lifecycle configuration — set a custom billing cadence, proration behavior, and effective end date when attaching an add-on to a subscription.

  * **Billing cadence**: Choose the billing frequency for the add-on independently of the base subscription cadence
  * **Proration behavior**: Select whether mid-cycle add-on changes are prorated or charged at full price
  * **Effective end date**: Set an explicit termination date for the add-on without cancelling the base subscription
  * **Dashboard UI**: The add-on dialog now exposes these controls under an advanced options section

  <br />

  **Other changes**

  <AccordionGroup>
    <Accordion title="Improvements">
      * Future subscription start dates are now allowed — the restriction requiring `start_date` to be in the past or present has been removed
      * Invoice pagination added to the customer invoice tab — large invoice lists no longer load all at once
      * Add-on subscription query cache is invalidated on add or cancel, keeping the subscription detail page in sync
      * Event names are now trimmed of leading/trailing whitespace at ingestion and query time for consistent matching
      * Subscription pause and resume endpoints removed — use cancellation or trial periods instead
    </Accordion>

    <Accordion title="Fixes">
      * Billing anchor adjusted for anniversary-cycle subscriptions to prevent unintended prorated charges on the first invoice
      * Date handling corrected for add-on line items when the subscription entity type resolves effective dates
      * Inherited subscription invoicing customer logic corrected — child subscriptions now invoice to the correct parent customer
    </Accordion>

    <Accordion title="API">
      * `trial_period_days` parameter added to `POST /v1/subscriptions` — sets the trial window at subscription creation
      * `proration_behavior` field added to subscription line item create and modify requests
      * Pause and resume subscription endpoints removed from the API
    </Accordion>
  </AccordionGroup>
</Update>

<Update label="April 20th 2026">
  ## Billing anchor

  Anniversary-cycle subscriptions now support a custom billing anchor date — override the default subscription start date to align billing renewals to a specific day of the month.

  * **`billing_anchor` parameter**: Pass a timestamp on subscription creation when `billing_cycle` is `anniversary` to pin the billing renewal date to that day
  * **Validation**: The API enforces that `billing_anchor` is only accepted for anniversary billing cycles — passing it with other cycle types returns a validation error
  * **Next billing date**: The first billing period end is computed from the anchor date, so proration on the initial period reflects the actual anchor offset

  <br />

  ## Backdated credit grant catch-up

  Credit grants now retroactively apply to subscriptions created after the grant's start date — a catch-up loop issues the missed credit grant applications for all elapsed billing periods.

  * **Catch-up loop**: When a subscription is created and a credit grant already has elapsed periods, the system issues one `CreditGrantApplication` per missed period in sequence
  * **Inherited subscriptions**: The catch-up logic mirrors across inherited child subscriptions, keeping credit entitlements consistent across the parent-child billing hierarchy
  * **EE parity**: The enterprise edition credit grant service runs the same catch-up path, ensuring consistent behavior across deployment tiers

  <br />

  ## Invoice downloads

  Invoices can now be downloaded as CSV or PDF directly from the customer portal and the customer invoice tab in the dashboard.

  * **Format picker**: A dialog lets users choose between PDF and CSV before initiating the download
  * **Customer portal**: The invoice download button in the customer-facing portal now surfaces both formats with distinct icons
  * **Sorting**: Customer invoices can be sorted by billing period start date, making it easier to locate invoices for a specific period

  <br />

  ## Webhook manual retry

  Failed webhook deliveries can now be retried manually via a new retry endpoint — useful for re-sending events after a destination outage without waiting for the automatic retry job.

  * **Retry endpoint**: `POST /v1/webhooks/{id}/retry` re-queues a failed webhook event for immediate redelivery
  * **Svix and native support**: The retry logic works across both the Svix-managed and native webhook delivery backends

  <br />

  **Other changes**

  <AccordionGroup>
    <Accordion title="Improvements">
      * OTel trace attributes now include a `region` field for region-aware observability in multi-region deployments
      * Environment list API now returns only `PUBLISHED` environments by default
      * Stale branch and stale PR GitHub Actions added to automate repository hygiene — branches older than 2 months and PRs idle for 15 days are flagged automatically
      * Wallet top-up conversion rate display improved — conversion rates are now shown clearly in the wallet UI
      * Credit grant tab on the plan detail page now filters to `PUBLISHED` grants only
    </Accordion>

    <Accordion title="Fixes">
      * Stripe invoice `due_date` is now always set when using `send_invoice` collection mode — previously missing in some flows
      * Webhook publisher nil-guard added for `systemEventRepo` to prevent panics on deployments without the system event store wired
      * Coupon percentage type now correctly excludes currency from the payload — fixing validation errors on currency-agnostic percentage coupons
      * Invoice nil pointer dereference in `IsFinalizationDue` resolved
    </Accordion>

    <Accordion title="API">
      * `POST /v1/webhooks/{id}/retry` endpoint added for manual webhook redelivery
      * `billing_anchor` parameter added to `POST /v1/subscriptions` for anniversary billing cycle anchor date override
    </Accordion>
  </AccordionGroup>
</Update>

<Update label="April 13th 2026">
  ## Environment cloning

  Duplicate an entire environment — all published features and plans are cloned into a new target environment via a Temporal workflow, preserving entitlement relationships and configuration.

  * **Temporal workflow**: `EnvironmentCloneWorkflow` runs two sequential activities — features are cloned first (so plan entitlements resolve correctly), then plans are cloned with ID remapping
  * **Cross-env ID mapping**: Source entity IDs are mapped to their cloned counterparts in the target environment, keeping references intact
  * **Dashboard support**: Environment cloning is accessible from the environment management UI — select a source and target environment to kick off the clone

  <br />

  ## One-time charges

  Prices can now be configured as one-time charges using `billing_period: ONETIME` — a cleaner model that separates cadence from charge type and integrates directly into the subscription billing pipeline.

  * **`BILLING_PERIOD_ONETIME`**: One-time charges are now identified by `billing_period` rather than `billing_cadence`, with the cadence defaulting to `RECURRING` — a data migration normalizes existing records
  * **Auto-inclusion**: Subscriptions automatically include `ONETIME` prices during billing cycle evaluation — no explicit line item attachment required
  * **Period ordering**: The period comparison utilities now handle `ONETIME` correctly for sorting and validation alongside standard billing periods
  * **Validation**: The minimum billing period count check no longer applies to one-time prices

  <br />

  ## AI-assisted pricing setup - Prompt to Plan

  Prompt to Plan introduces a new way to set up billing in Flexprice. Instead of manually configuring plans, prices, meters, and entitlements, you can describe your pricing model in plain English and generate a working configuration.

  * **Chat-based setup**: Describe subscription, usage-based, or hybrid pricing models conversationally and get a complete configuration back
  * **Full model support**: The workflow covers metered features with overages and limits, credit-based pricing with grants and expiration, add-ons, and entitlements
  * **Preview before publishing**: Review the generated setup before pushing it live — nothing is saved until you confirm
  * **Templates**: Pre-built templates based on real-world pricing models are available as starting points and can be customized and deployed directly

  <br />

  ## Zoho Books integration

  Connect Flexprice to Zoho Books for automated invoice synchronization — invoices finalized in Flexprice are pushed to Zoho Books via a Temporal workflow with OAuth-backed authentication.

  * **OAuth connection**: Authenticate with Zoho Books via the integrations page — the OAuth flow stores connection metadata and tokens for the tenant
  * **Invoice sync workflow**: `ZohoBooksInvoiceSyncWorkflow` runs on invoice finalization and pushes the invoice payload to Zoho Books
  * **Connection management**: The integrations UI shows connection status and supports re-authentication

  <br />

  ## Mid-cycle subscription modification

  Subscriptions can now be modified mid-cycle — change line item quantities with a full proration preview before committing.

  * **Proration preview**: Call the modification preview endpoint to see the prorated credit and debit line items before applying the change
  * **Quantity change dialog**: The dashboard surfaces a quantity modification dialog on subscription line items with a summary of the expected invoice impact
  * **Proration moved outside transaction**: The proration calculation is now performed outside the database transaction to avoid long-held locks during wallet lookups

  <br />

  **Other changes**

  <AccordionGroup>
    <Accordion title="Improvements">
      * Meter usage pipeline added — a dedicated pipeline processes feature usage events and maps them to meter usage records for downstream billing
      * Feature lookup keys can now be auto-generated from the feature name — reducing manual input when creating features
      * Customer invoice summary now includes invoices billed to parent customers, giving a complete view of charges for child accounts
      * Invoice table in the customer view now shows a `Billing Entity` column and a `Subscription Customer` column for parent-child billing scenarios
      * Usage benchmark service added with ClickHouse-backed storage for tracking event processing latency
    </Accordion>

    <Accordion title="Fixes">
      * Subscription `BillingCadence` now defaults to `RECURRING` in `CreateSubscriptionRequest` validation — prevents misconfigured subscriptions when cadence is omitted
      * Meter usage list lookup now cached in-process per event name — reduces ClickHouse round-trips for high-volume ingestion
      * Unique hash generation in meter usage fixed to correctly deduplicate cache entries
    </Accordion>

    <Accordion title="API">
      * New `POST /v1/ai/pricing/parse` endpoint powers the Prompt to Plan chat workflow — accepts pricing descriptions and returns structured plan, price, meter, and entitlement configurations
      * New `POST /v1/subscriptions/{id}/modify/preview` endpoint returns a prorated invoice preview before applying a subscription modification
      * Environment clone endpoint added to trigger the `EnvironmentCloneWorkflow` for a source/target environment pair
    </Accordion>
  </AccordionGroup>
</Update>

<Update label="April 6th 2026">
  ## Inherited subscriptions

  Subscriptions now support an inheritance model — a parent subscription can propagate charges, cancellations, and billing configuration to child subscriptions attached to the same customer.

  * **Subscription types**: Subscriptions are now typed as `STANDALONE`, `PARENT`, or `INHERITED` — controlling how billing is routed and how cancellations cascade
  * **Inherited subscription creation**: Create subscriptions that inherit from a parent, with automatic customer resolution and unified code paths for create and modify operations
  * **Cascade cancellation**: Cancelling a parent subscription automatically propagates cancellation to all inherited child subscriptions
  * **Validation guards**: The API prevents creating standalone or parent subscriptions on customers that already have an inherited subscription, avoiding conflicting billing hierarchies
  * **Dashboard support**: The subscription edit page now shows an inherited subscriptions section for managing child subscriptions from the parent view

  <br />

  ## SDK v2.1

  The Flexprice Go, Python, and TypeScript SDKs have been updated to v2.1, with major developer experience improvements across error handling, idempotency, and pagination.

  * **Error utilities**: New `errorutils` package provides typed helpers — `IsNotFound`, `IsValidation`, `IsConflict` — for clean error handling without string matching
  * **Per-request idempotency**: `WithIdempotencyKey` option lets you attach an idempotency key to any mutating request without modifying global config
  * **Auto-pagination**: List endpoints now support automatic pagination — iterate over all results without managing page tokens manually
  * **Retry configuration**: Read-only `POST` operations (like usage queries and previews) now retry automatically; retry settings are configurable globally or per-request
  * **SDK examples**: Comprehensive end-to-end examples added for Go, TypeScript, and Python covering the full subscription and billing lifecycle

  <br />

  <Card icon="code" horizontal={true} href="/api-reference/introduction" title="API Reference" />

  <br />

  ## Invoice internal preview

  Preview invoice charges before finalization with a new internal preview endpoint — useful for validating billing logic before committing to an invoice.

  * **Preview endpoint**: New `POST /v1/invoices/internal/preview` computes a draft invoice view without persisting any state — returns line items, totals, and applied discounts
  * **PDF force regeneration**: The invoice PDF URL endpoint now accepts a `force_generate` parameter to regenerate PDFs on demand, bypassing the cached version

  <br />

  ## Usage charge arrear constraint

  Usage-based charges are now constrained to arrear billing — the API enforces that usage charges cannot be configured for advance billing.

  * **Arrear-only enforcement**: Prices with usage charge models are validated at creation and update time to ensure they are always billed in arrear, preventing misconfigured advance billing setups

  <br />

  ## Entitlement usage reset period

  Plan entitlements can now be configured with a usage reset period directly from the plan builder.

  * **Reset period UX**: The plan creation and edit flow now includes a reset period selector for entitlements — configure how frequently usage limits reset (daily, weekly, monthly, etc.) without leaving the dashboard

  <br />

  **Other changes**

  <AccordionGroup>
    <Accordion title="Improvements">
      * Customer list now defaults to filtering by `PUBLISHED` status — inactive customers are hidden by default with the ability to clear the filter
      * Invoice finalization delay reduced from 5 days to 2 hours — integrations and async workflows have a shorter window before invoices are sealed
      * Temporal invoice workflows now start with a configurable delay, giving downstream systems time to react before processing begins
      * System events enhanced with entity type and entity ID fields, and a new `event_name` column for structured audit log queries
      * OTel log level filtering now respected in the pipeline — debug-level noise no longer propagates to exporters configured for higher levels
      * Temporal worker concurrency defaults reduced to prevent out-of-memory kills under high load
      * API error messages extracted and displayed more accurately throughout the dashboard — network and validation errors now surface actionable text instead of raw response objects
    </Accordion>

    <Accordion title="Fixes">
      * Revenue dashboard date range filter now includes UTC-inclusive period boundaries — data at period edges was previously excluded
      * ClickHouse aggregator queries no longer use the `FINAL` keyword — removes read inconsistencies on tables with frequent merges
      * Invoice computation now correctly identifies inherited subscriptions and skips re-computation when appropriate
      * Credit purchased invoice payment status flow corrected — status transitions now follow the expected finalization sequence
      * Subscription invoice draft idempotency key now includes `billing_reason` — prevents duplicate drafts across different billing triggers within the same period
      * Duplicate draft event publishing removed from `CreateInvoice` — downstream consumers no longer receive redundant `invoice.drafted` events
      * Invoice PDF generation now handles nil line items without panicking
    </Accordion>

    <Accordion title="API">
      * New `POST /v1/invoices/internal/preview` endpoint for computing a preview invoice without persisting state
      * Subscription type field (`STANDALONE`, `PARENT`, `INHERITED`) added to the subscriptions API with filtering support
      * New endpoint for modifying subscription inheritance — add or remove inherited subscriptions from a parent
      * `force_generate` parameter added to the invoice PDF URL endpoint for on-demand PDF regeneration
      * Go SDK v2.1.0 and v2.1.1 released with error utilities, idempotency key support, auto-pagination, and configurable retry strategy
      * TypeScript SDK updated to use `CustomerFromLookup` type for customer resolution responses
    </Accordion>
  </AccordionGroup>
</Update>

<Update label="March 30th 2026">
  ## Revenue dashboard

  Visualize revenue across your customer base with a new analytics dashboard — filterable by time period with per-customer breakdowns.

  * **Time-series graphs**: View total revenue and usage trends over configurable date ranges (this month, this quarter, this year, and prior-period comparisons)
  * **Per-customer breakdown**: Each customer row shows total revenue, usage-based revenue, and fixed revenue with drill-down links to customer details
  * **Flexible filtering**: Filter by custom date ranges or preset periods — results are sorted by total revenue descending for quick identification of top accounts

  <br />

  ## Invoice compute workflow

  Trigger invoice computation on demand via API — synchronously for immediate results or asynchronously via Temporal for large invoices.

  * **Sync and async modes**: Call `POST /v1/invoices/:id/compute` with `?sync=true` for blocking execution, or default async mode that returns a workflow ID for polling
  * **Temporal-backed processing**: Async compute runs as a durable Temporal workflow with automatic retries, 10-minute timeout, and exponential backoff
  * **Deferred credits and taxes**: Subscription invoice computation now applies only coupons during draft — credit deductions and tax calculations are deferred to finalization, preventing premature wallet debits

  <br />

  <Card icon="book-open" horizontal={true} href="/docs/invoices/overview" title="Invoices - Documentation" />

  <br />

  ## Scheduled subscription cancellation

  Cancel subscriptions on a specific future date instead of only immediately or at period end.

  * **Scheduled date cancellation**: New `scheduled_date` cancellation type accepts a `cancel_at` timestamp for precise future cancellation scheduling
  * **Guard validations**: The scheduled date must be in the future — the API rejects past dates with a clear validation error
  * **Dashboard support**: The subscription cancellation dialog in the dashboard now includes the scheduled cancellation option with a date picker

  <br />

  <Card icon="book-open" horizontal={true} href="/docs/subscriptions/view" title="Subscriptions - Documentation" />

  <br />

  ## Integration events system

  Integrations now react to system events in real time — invoice finalization and customer creation automatically trigger vendor sync workflows.

  * **Event-driven dispatch**: A dedicated Kafka consumer group listens to `system_events` and routes `invoice.finalized` and `customer.created` events to the appropriate provider sync workflows
  * **Integration mapping link**: New `POST /v1/integrations/link` endpoint manually links Flexprice entities to external provider records with provider-specific side effects (e.g., Razorpay customer metadata sync)
  * **Configurable rate limits**: Integration event processing supports per-tenant consumer group isolation and configurable rate limits via `integration_events` settings

  <br />

  **Other changes**

  <AccordionGroup>
    <Accordion title="Improvements">
      * OpenTelemetry observability expanded with a generic exporter, configurable protocol, health-check filtering, and structured OTel log fields
      * PostgreSQL → ClickHouse sync added for prices, subscriptions, and subscription line items for analytics workloads
      * Wallet balance calculation now excludes future-period draft invoices from pending balance to avoid overstating committed spend
      * Default invoice finalization delay increased to 10 minutes — gives integrations and async workflows time to complete before sealing
      * Skipped invoices are now hidden from search results and restricted to subscription invoice types only
      * Razorpay payment links now enforce a minimum expiration buffer to prevent premature link expiry
      * Commitment bucket fill logic capped with `now()` for period end to prevent future-dated empty bucket entries
      * Temporal workflow configuration now supports max concurrent workflow limits
      * SDK READMEs updated with webhook handling documentation for all supported languages
    </Accordion>

    <Accordion title="Fixes">
      * Fixed credit deduction timing — credits and taxes on subscription invoices are now deferred to finalization instead of being applied during draft computation
      * Fixed silent zero-usage bug — `GetDistinctEventNames` failures now return errors instead of silently zeroing meter usage
      * Fixed calendar billing period end calculation for quarterly and half-yearly subscriptions
      * Fixed invoice compute API to correctly handle recomputation of skipped and draft invoices
      * Removed `final` keyword from ClickHouse event queries to avoid read inconsistencies
      * Deprecated parent customer hierarchy removed from the frontend customer views
    </Accordion>

    <Accordion title="API">
      * New `POST /v1/invoices/:id/compute` endpoint with sync and async modes for on-demand invoice computation
      * New `POST /v1/integrations/link` endpoint to manually map Flexprice entities to external provider records
      * New `POST /v1/dashboard/revenue-dashboard` endpoint for per-customer revenue analytics with time-series data
      * Subscription cancellation API now accepts `scheduled_date` cancellation type with a `cancel_at` field
    </Accordion>
  </AccordionGroup>
</Update>

<Update label="March 23rd 2026">
  ## Paddle payment integration

  Accept payments through Paddle with full checkout, customer sync, and webhook support — no custom code required.

  * **Checkout overlay**: Customers complete payments via Paddle's hosted checkout, embedded directly in your billing flow with JWT-signed checkout URLs
  * **Bidirectional customer sync**: Customers are automatically synced between Flexprice and Paddle, with deduplication and address management
  * **Webhook processing**: Transaction completions, customer creation, and address updates from Paddle are processed automatically with built-in idempotency
  * **Enhanced error handling**: Multi-layer idempotency checks on invoice sync prevent duplicate Paddle transactions on retries

  <br />

  <Frame>
    <img src="https://mintcdn.com/flexprice/uJsvNTj9Z8LNqd9N/images/docs/integrations/paddle/connection.png?fit=max&auto=format&n=uJsvNTj9Z8LNqd9N&q=85&s=e386422b4d4f480762b029f4665608d6" alt="Paddle connection setup" style={{ borderRadius: '0.5rem' }} width="2438" height="1722" data-path="images/docs/integrations/paddle/connection.png" />
  </Frame>

  <br />

  <Card icon="book-open" horizontal={true} href="/integrations/paddle/connection-setup" title="Paddle connection setup - Documentation" />

  <br />

  ## Multi-cadence billing

  A single subscription can now contain line items with different billing periods — monthly, quarterly, and annual charges all on one subscription.

  * **Mixed billing periods**: Assign different billing cadences (monthly, quarterly, annual) to individual line items within the same subscription
  * **Smart invoice inclusion**: Line items are automatically included on the correct invoices based on their cadence and invoice timing (advance or arrear)
  * **Flexible cancellation strategies**: Choose between immediate, minimum-period-end, or maximum-period-end cancellation to honor varying commitment lengths

  <br />

  <Card icon="book-open" horizontal={true} href="/docs/product-catalogue/plans/create" title="Creating a plan - Documentation" />

  <br />

  ## Bulk event ingestion

  Ingest raw events in bulk for backfills, testing, and high-throughput pipelines with a new dedicated API endpoint.

  * **Bulk raw event API**: New `POST /v1/events/raw/bulk` endpoint accepts up to 1,000 raw events per request for async processing via Kafka
  * **Ingestion filter**: Allowlist specific external customer IDs for live billing while preserving all raw events — ideal for controlled pilot rollouts
  * **Sequential usage fetch**: New `GetUsageBulkSync` method provides reliable, sequential meter usage lookups with per-meter timeout protection for billing accuracy

  <br />

  <Card icon="book-open" horizontal={true} href="/docs/event-ingestion/sending-events" title="Sending events - Documentation" />

  <br />

  ## Draft subscriptions

  Create subscriptions in a draft state before activating them, allowing configuration and invoice preview before going live.

  * **Draft lifecycle**: Create subscriptions with `DRAFT` status that skip invoice generation and payment processing until explicitly activated
  * **Invoice preview**: Preview estimated charges for draft subscriptions before activation
  * **Dashboard support**: Draft subscriptions now appear in customer subscription lists and support activation with configurable start dates

  <br />

  ## Invoice overpaid tracking

  Track and display overpaid amounts when customers pay more than the invoice total.

  * **Overpaid amount display**: Invoices now show an `overpaid_amount` field when the payment exceeds the amount due
  * **Status visibility**: A new "Overpaid" payment status is displayed in invoice tables and detail views

  <br />

  **Other changes**

  <AccordionGroup>
    <Accordion title="Improvements">
      * Webhook delivery now uses Kafka for reliable, distributed event processing — in-memory PubSub support has been removed
      * Sentry logging enhanced with log-level filtering, unique per-request trace IDs, and health endpoint noise reduction
      * Multi-addon entitlement fetching improved to support multiple instances of the same add-on per subscription
      * Onboarding experience refreshed with welcome banners, embedded video tutorials, and quick-start guide cards
      * MCP scope annotations added to Swagger documentation for better AI-agent interoperability
      * Webhook event types now documented in the OpenAPI spec
      * Go Docker image bumped to golang:1.24-alpine
    </Accordion>

    <Accordion title="Fixes">
      * Fixed inactive line item handling for previous billing period calculations
      * Invoice idempotency key generation scoped to minute-level precision to prevent duplicate invoices within the same billing cycle
      * Add-on line item termination now correctly handled during subscription cancellation
      * Webhook secrets are now obscured in API responses for improved security
      * Reverted overly strict settings validation that blocked certain configuration reads
    </Accordion>

    <Accordion title="API">
      * New `POST /v1/events/raw/bulk` endpoint for bulk raw event ingestion
      * Subscriptions API now supports listing and filtering by `DRAFT` status
      * Event ingestion filter setting added for customer-level allowlisting
      * GitHub release step added for Go SDK CI pipeline
    </Accordion>
  </AccordionGroup>
</Update>

<Update label="March 16th 2026">
  ## Organization members & dashboard access

  Invite teammates to your organization and manage dashboard access from the Flexprice UI.

  * Invite and manage team members within your organization directly from the dashboard.

  <br />

  ## Feature grouping

  Organize features into logical groups for cleaner plan configuration and customer-facing entitlement display.

  * **Logical feature groups**: Group related features together for better organization and clarity

  <br />

  <Frame>
    <img src="https://mintcdn.com/flexprice/e623HncqcXkRezhb/public/images/docs/Groups/create-feature-with-grouping.png?fit=max&auto=format&n=e623HncqcXkRezhb&q=85&s=3f613a5661905bf45cabab3e6790ccbb" alt="Create feature with group" style={{ borderRadius: '0.5rem' }} width="3420" height="1970" data-path="public/images/docs/Groups/create-feature-with-grouping.png" />
  </Frame>

  <br />

  <Card icon="book-open" horizontal={true} href="/docs/product-catalogue/groups/feature-grouping" title="Feature grouping - Documentation" />

  <br />

  **Other changes**

  <AccordionGroup>
    <Accordion title="Improvements">
      * General UI optimizations for improved performance and consistency
      * Enhanced navigation and visual polish across the dashboard
    </Accordion>
  </AccordionGroup>
</Update>

<Update label="March 9th 2026">
  ## Settings overhaul

  Settings have been restructured for faster navigation and a clearer separation of tenant, billing, and integration configurations.

  * **Revamped settings**: Improved organization and discoverability of configuration options

  <br />

  <Card icon="book-open" horizontal={true} href="/docs/settings/settings" title="Settings - Documentation" />

  <br />

  ## Custom dashboard theming

  Personalize the Flexprice dashboard with your brand colors and visual preferences.

  * **Theme customization**: Apply custom colors and branding to match your organization’s identity

  <br />

  **Other changes**

  <AccordionGroup>
    <Accordion title="Improvements">
      * Sentry spans now include user ID for more actionable error attribution and debugging
    </Accordion>
  </AccordionGroup>
</Update>

<Update label="March 2nd 2026">
  ## Plan cloning

  Duplicate an existing plan with all its prices and configuration as a starting point for a new plan.

  * **Clone plans**: Quickly create new plans based on existing configurations

  <br />

  <Frame>
    <img src="https://mintlify.s3.us-west-1.amazonaws.com/flexprice/public/images/docs/Product%20catalogue/Plans/Cloning%20a%20plan/navigate.png" alt="Clone plan from plan menu" style={{ borderRadius: '0.5rem' }} />
  </Frame>

  <br />

  <Card icon="book-open" horizontal={true} href="/docs/product-catalogue/plans/clone" title="Cloning a plan - Documentation" />

  <br />

  ## Multiple billing periods

  A single plan can now support multiple billing cadences (monthly, annual, etc.) simultaneously.

  * **Flexible billing cadences**: Offer customers different billing period options within the same plan

  <br />

  <br />

  <Card icon="book-open" horizontal={true} href="/docs/product-catalogue/plans/create" title="Creating a plan - Documentation" />

  <br />

  ## Price grouping

  Added support for grouping in prices for better organization and display.

  * **Group prices**: Organize related prices into logical groups

  <br />

  <Frame>
    <img src="https://mintcdn.com/flexprice/o8li027exqawQxCQ/public/images/docs/Groups/assign-group-to-charges.png?fit=max&auto=format&n=o8li027exqawQxCQ&q=85&s=1de76dcce01c51d4987a5875bcd37cc7" alt="Assign group to plan charges" style={{ borderRadius: '0.5rem' }} width="3418" height="1968" data-path="public/images/docs/Groups/assign-group-to-charges.png" />
  </Frame>

  <br />

  <Card icon="book-open" horizontal={true} href="/docs/product-catalogue/groups/charges-grouping" title="Charges grouping - Documentation" />

  <br />
</Update>

<Update label="February 23rd 2026">
  ## Wallet alerts

  Real-time wallet balance monitoring with configurable alert thresholds.

  * **Real-time balance event processing**: Wallet alert triggers now process all balance events with improved cache handling for accuracy
  * **Ongoing balance notifications**: Low-balance alerts are sent continuously as the wallet balance stays below threshold, not just on first breach
  * **Alert cache expiration**: Alert cache entries now expire after a configurable max-alive window to prevent stale suppression of alerts

  <br />

  <Frame>
    <img src="https://mintcdn.com/flexprice/czhJosCa19seN_JL/public/images/docs/Wallet/low_balance_alert/configure-alert-settings.png?fit=max&auto=format&n=czhJosCa19seN_JL&q=85&s=61ba7144b02256814943c1dfdb6b479d" alt="Wallet alert settings" style={{ borderRadius: '0.5rem' }} width="3420" height="1970" data-path="public/images/docs/Wallet/low_balance_alert/configure-alert-settings.png" />
  </Frame>

  <br />

  <Card icon="book-open" horizontal={true} href="/docs/wallet/low-balance-alert" title="Low balance alert - Documentation" />

  <br />

  ## API cleanup

  Simplified the onboarding surface by removing deprecated APIs.

  * **Deprecated tenant APIs removed**: Removed deprecated tenant creation APIs to streamline onboarding

  <br />

  <Card icon="code" horizontal={true} href="/api-reference/introduction" title="API Reference" />

  <br />

  **Other changes**

  <AccordionGroup>
    <Accordion title="Improvements">
      * Plan-level price sync lock implemented with a configurable TTL (default 2 hours) to prevent conflicting concurrent updates
    </Accordion>
  </AccordionGroup>
</Update>

<Update label="February 16th 2026">
  ## Parent subscriptions

  Group related subscriptions under a parent for consolidated billing and hierarchy management.

  * **Subscription hierarchy**: Organize subscriptions with parent-child relationships

  <br />

  <Card icon="code" horizontal={true} href="/api-reference/subscriptions/update-subscription" title="Update subscription - API Reference" />

  <br />

  ## Commitment duration

  Define minimum commitment periods on subscriptions to enforce contract terms.

  * **Backend support**: Define commitment periods programmatically via API
  * **Dashboard configuration**: Configure and view commitment durations directly from the subscription management dashboard

  <br />

  <Card icon="book-open" horizontal={true} href="/docs/subscriptions/commitment" title="Commitment - Documentation" />

  <br />

  ## Multiple instance add-ons

  Attach the same add-on multiple times to a single subscription with independent quantities and pricing.

  * **Flexible add-on instances**: Support for multiple instances of the same add-on per subscription

  <br />

  <Card icon="code" horizontal={true} href="/api-reference/addons/create-addon" title="Create add-ons - API Reference" />

  <br />

  ## Custom analytics

  Build and view custom usage and revenue breakdowns tailored to your business metrics.

  * **Custom dashboards**: Create analytics views specific to your business needs
  * **Overridden price tracking**: Analytics now reflect overridden prices accurately

  <br />

  <Frame>
    <img src="https://mintcdn.com/flexprice/o8li027exqawQxCQ/public/images/docs/Groups/analytics-usage-breakdown.png?fit=max&auto=format&n=o8li027exqawQxCQ&q=85&s=c6d60bb28c499ab5519d9d7ea6fa005d" alt="Usage breakdown by group in analytics" style={{ borderRadius: '0.5rem' }} width="3420" height="1966" data-path="public/images/docs/Groups/analytics-usage-breakdown.png" />
  </Frame>

  <br />

  **Other changes**

  <AccordionGroup>
    <Accordion title="Improvements">
      * Temporal workflow history and filters for better observability into background job execution
      * VAPI pricing units added to support voice API consumption-based billing
      * Edit subscription UI improvements
    </Accordion>

    <Accordion title="API">
      * Charges search API now supports filtering for more precise query results
    </Accordion>
  </AccordionGroup>
</Update>

<Update label="February 9th 2026">
  ## Credit grant editing

  Modify the amount, expiry, or metadata of existing credit grants without needing to void and recreate them.

  * **Edit existing grants**: Update credit grant details directly without voiding

  <br />

  <Card icon="code" horizontal={true} href="/api-reference/credit-grants/update-credit-grant" title="Update credit grant - API Reference" />

  <br />

  ## Prepaid and postpaid wallets

  Choose between prepaid balance top-ups or postpaid usage-based wallet modes per customer.

  * **Wallet modes**: Configure wallets as prepaid or postpaid based on customer needs

  <br />

  <Card icon="book-open" horizontal={true} href="/docs/wallet/prepaid-and-promotional" title="Prepaid & promotional credits - Documentation" />

  <br />

  ## Backdated pricing

  Create and update prices with past effective dates to accurately reflect historical billing arrangements.

  * **Backdated price creation**: Create prices with a past effective date
  * **Retroactive price updates**: Update existing prices retroactively to correct or adjust past pricing configurations

  <br />
</Update>

<Update label="February 2nd 2026">
  ## Sentry and observability improvements

  We've reduced noise and improved traceability for background workflows.

  * **Repository-level span reduction**: Disabled repository-level Sentry span creation to reduce quota usage
  * **Temporal integration**: Integrated Sentry into Temporal workflows via a dedicated worker interceptor, improving traceability for background tasks

  <br />

  ## Wallet & credit accuracy

  Enhanced wallet logic to correctly compute and expose credits available breakdown when retrieving real-time balance.

  * **Transaction status verifiction**: Wallet eligibility logic now verifies transaction status is completed before applying credits
  * **Workflow optimizations**: Overall wallet workflow optimizations for performance and correctness

  <br />

  ## Subscription API enhancements

  Added a new API to fetch a subscription by ID with a minimal response and optional expand parameters.

  <Card icon="code" horizontal={true} href="/api-reference/subscriptions/get-subscription-v2" title="Get Subscription - API Reference" />

  <br />

  ## Pricing & revenue analytics

  Pricing validation and analytics capabilities have been extended.

  * **Maximum active prices**: Added validation for the maximum number of active prices to prevent configuration errors
  * **Currency-segregated revenue trends**: Revenue analytics extended to support currency-segregated revenue trends, recent subscriptions, and invoice payment status reporting

  <br />

  ## Add-ons & usage pricing

  Add-on line item commitment support added to better model commitment/overage patterns.

  * **Usage-based prices within add-ons**: Support for usage-based prices within add-ons was introduced, enabling richer usage billing models
  * **Add-on line item commitment**: Support for add-on line item commitment was added

  <br />

  **Other changes**

  <AccordionGroup>
    <Accordion title="Improvements">
      * Logging cleanup: enhanced content and removed unnecessary entity logs
      * Internal workflow changes to improve consistency and reduce noise in observability
    </Accordion>

    <Accordion title="Fixes">
      * Subscription start date precision normalized to milliseconds for consistency
    </Accordion>

    <Accordion title="API">
      * The new subscription retrieval API with minimal response and expand parameters provides a leaner query option for clients
    </Accordion>
  </AccordionGroup>
</Update>

<Update label="January 28th 2026">
  ## Bulk import and export in the dashboard

  You can now import features and prices and run managed S3 exports from the UI. Billing and credit usage reports are available for download.

  * **Import features and prices**: Added UI support for importing features and prices, matching backend bulk-import capabilities.

  <br />

  <Frame>
    <img src="https://mintcdn.com/flexprice/EwCoA6WJrMg0zK3d/public/images/docs/Changelog/prices_bulk_import.png?fit=max&auto=format&n=EwCoA6WJrMg0zK3d&q=85&s=e52ff76295668c273289a877083ac2d4" alt="Bulk import interface" style={{ borderRadius: '0.5rem' }} width="1676" height="374" data-path="public/images/docs/Changelog/prices_bulk_import.png" />
  </Frame>

  <br />

  * **S3 exports**: Managed exports and downloadable reports for billing and credit usage

  <Card icon="book-open" horizontal={true} href="/docs/data-exports/amazon-s3/export" title="S3 Export - Documentation" />

  <br />

  ## Dashboard analytics improvements

  Revenue trends and customer usage are clearer and more accurate in the dashboard.

  * **Currency-segregated revenue**: Revenue trends and invoice payment status now reflect the correct metrics in the UI
  * **Customer usage**: Improved visibility into usage at the customer level

  <br />

  <Frame>
    <img src="https://mintcdn.com/flexprice/EwCoA6WJrMg0zK3d/public/images/docs/Changelog/curr_segregated_revenue.png?fit=max&auto=format&n=EwCoA6WJrMg0zK3d&q=85&s=8df43cfc81a08530504f5588e95559df" alt="Currency-segregated revenue trends" style={{ borderRadius: '0.5rem' }} width="1762" height="476" data-path="public/images/docs/Changelog/curr_segregated_revenue.png" />
  </Frame>

  <br />

  ## Region and routing stability

  The frontend region selector now correctly handles US-region routing, including [us.flexprice.io](http://us.flexprice.io).

  <br />

  **Other changes**

  <AccordionGroup>
    <Accordion title="Improvements">
      * Improved filtering, sorting, and usability across pricing, feature, and subscription lists
      * Enhanced subscription views with clearer overrides and metadata
      * Add-on configuration UI improved, supporting commitments and usage-based context
      * Query builder supports multi-select "Select All"
      * UI polish across revenue charts and subscription tables
    </Accordion>

    <Accordion title="Fixes">
      * Fixed onboarding issues for organization name and tenant persistence
      * Improved loading and error states in analytics views
      * Fixed revenue tooltip inconsistencies from partial invoice data
    </Accordion>

    <Accordion title="API">
      * Improved frontend integration with updated analytics and usage APIs
      * Customer usage views backed by existing usage endpoints
    </Accordion>
  </AccordionGroup>
</Update>

<Update label="January 21st 2026">
  ## Wallet and credit balance correctness

  Wallet balances are now more accurate and transparent. Credits available reflect what customers can actually use, and wallet operations are safe under concurrency.

  * **Wallet balances**: Clear `credits available breakdown`, improving transparency and accuracy
  * **Top-ups**: Purchased credit top-ups now correctly contribute to usable credit balances
  * **Eligibility**: Credit eligibility now strictly applies only to completed transactions
  * **Advisory locking**: Wallet operations are protected with advisory locking to reduce race conditions under concurrency

  <Card icon="code" horizontal={true} href="/api-reference/wallets/get-wallet-balance" title="Get Wallet Balance - API Reference" />

  <br />

  ## Add-on pricing flexibility

  Add-ons now support usage-based pricing and commit-and-overage billing.

  * **Usage-based pricing**: Add usage-based prices to add-ons
  * **Add-on line-item commitments**: Introduced to support commit-and-overage billing models

  <br />

  ## Caching and performance groundwork

  Introduced a Redis cache layer with environment-specific key prefixes to support multi-environment deployments safely.

  <br />

  **Other changes**

  <AccordionGroup>
    <Accordion title="Improvements">
      * Added validation to prevent exceeding the maximum number of active prices
      * Extended feature filters to support `not-contains` queries
      * Improved wallet balance performance using the updated balance API path
      * Logging noise reduced by removing unnecessary debug and print statements
    </Accordion>

    <Accordion title="Fixes">
      * Subscription start dates normalized to millisecond precision
      * Reduced unnecessary observability overhead by removing redundant spans from data layers
    </Accordion>

    <Accordion title="API">
      * Added a lightweight subscription fetch-by-ID API with optional expand parameters
      * Removed support for fetching inactive prices via lookup keys
      * Analytics APIs now expose recent subscriptions and invoice payment status
    </Accordion>
  </AccordionGroup>
</Update>

<Update label="January 14th 2026">
  ## Import, export, and workflow foundations

  Backend support for bulk import and S3 exports is in place. Invoice processing and workflow reliability are improved.

  * **Bulk import**: Added backend support for bulk importing `prices` and `features`
  * **S3 exports**: Added managed  `S3 export support` for reports such as credit usage
  * **Invoice and usage**: Improved invoice processing alignment with feature usage tracking
  * **Workflows**: Strengthened workflow reliability with improved Temporal identity handling and timeout tuning

  <Card icon="book-open" horizontal={true} href="/docs/data-exports/amazon-s3/export" title="S3 Export - Documentation" />

  <br />

  ## Subscription and credit grant controls

  You can cancel future subscription grants and set end dates on credit grants.

  * **Cancel future grants**: Added support for cancelling future subscription grants
  * **Credit grant end-date**: Added end-date support for credit grants

  <br />

  **Other changes**

  <AccordionGroup>
    <Accordion title="Improvements">
      * Reintroduced price lookup keys in a controlled and validated manner
      * Improved tenant and environment isolation for exports
      * General workflow stability and timeout tuning
    </Accordion>

    <Accordion title="Fixes">
      * Fixed wallet balance discrepancies affecting “credits available”
      * Improved reliability of scheduled background workflows
    </Accordion>

    <Accordion title="API">
      * Import and export endpoints for prices and features made available
    </Accordion>
  </AccordionGroup>
</Update>

<Note>
  For release history before these updates, see our [GitHub releases](https://github.com/flexprice/flexprice/releases).
</Note>
