Changelog

Changes to the Flint API, SDKs, and docs

Newest first. A change that alters a request or response shape ships as a new API version, and your integration keeps its pinned version until you upgrade it. The upgrade guide covers pinning, testing a newer version, and rolling back.

  • Breaking change
  • API

API version 2026-09-07

Requests that send Flint-Version: 2026-09-07 or newer get these changes. Requests pinned to an earlier version keep the previous shape.

  1. Balance transaction fee charges are positive and fee credits are negative.

    Response and request shapeAffects
    • BalanceTransaction
  2. Balance transactions use occurred_at for the transaction timestamp.

    Response and request shapeAffects
    • BalanceTransaction
  3. Tax categories use line_item_tax_category for items and charge_tax_category for charges.

    Response and request shapeAffects
    • AvailableModifier
    • Bundle
    • CreateBundleRequest
    • CreateModifierInput
    • Modifier
    • ModifierInput
    • ModifierOverride
    • OrderCalculatedLineItemTax
    • OrderDraftLineItemTaxInput
    • OrderLineItemTax
    • ProductVariant
    • ProductVariantInput
    • PublicResolvedModifierOption
    • UpdateBundleRequest
    • UpdateProductVariantRequest
    • DeliveryMethodConfiguration
    • DeliveryMethodConfigurationCreateInput
    • DeliveryMethodConfigurationInput
    • DeliveryOptionProjection
    • OrderCalculatedChargeTax

Read the upgrade guideSee which of your routes are affected

  • Breaking change
  • API
  • Inventory

Shared money inputs and inventory tracking names

Money inputs use Money: an integer amount in minor units and a required currency. Delivery pricing maps now require each amount's currency to match its map key, for example "USD": {"amount": 900, "currency": "USD"}. Requested tips and flat order taxes still require an amount of at least 1 minor unit.

Breaking: ad hoc order lines use inventory_tracking instead of inventory_requirement. Set it explicitly to not_tracked or tracked. Order line snapshots expose the same setting at inventory_snapshot.inventory_tracking. Validation errors use INVENTORY_TRACKING_REQUIRED and INVENTORY_TRACKING_INVALID.

For tracked ad hoc lines, each inventory_demands entry accepts only inventory_item_id and quantity_per_line_item_unit. Bundle component and component snapshot IDs remain available on responses. The catalog inventory relationship revision is no longer part of the public response.

  • Breaking change
  • API
  • Inventory

Multi-location inventory, allocation, and reservations

Inventory has its own API. Stock is tracked per location, demand is routed across locations, and checkout holds real claims instead of decrementing a counter.

  • Inventory API: inventory items and per-location levels, adjustments, safety stock, policies, transfers, counts, and merchant-owned reservations. Read levels to inspect stock; create a reservation when your integration needs to hold it.
  • Locations API: create and manage locations, publish their geography, and enable them for inventory. Identity, geography, and the inventory block are versioned independently so concurrent writes cannot silently overwrite each other.
  • Allocation policies: rank locations into priority groups to decide which one serves demand. Single-location merchants can skip policies entirely and route to a fixed location.
  • New webhook events use the inventory. prefix, alongside order.inventory_exception.created and order.inventory_exception.resolved. See the event catalog.

Breaking: product variants no longer carry their own stock count. quantity_available and enforce_inventory_limit have been removed from ProductVariant. A variant now declares inventory_tracking (not_tracked or tracked) and points inventory_item_id at an inventory item whose quantities live on per-location levels. Tracking is never inferred from a product being physical, so a variant you do not explicitly mark tracked sells without a stock check.

Idempotency keys are required on quantity-changing commands. Adjustments and reservation transitions reject a request with no Idempotency-Key. Flint will not generate one, because a generated key cannot protect the case that matters: the request succeeded and you never received the response. Reusing a key with identical input returns the original result and its original level projections.

  • Breaking change
  • Payments
  • API

One all-in processing fee on every payment

Payments now report a single Flint processing fee, and the fields around it are provider-neutral.

  • processing_fee_money on payment intents replaces platform_fee_money. It is Flint's complete all-in price to process the payment, not a provider cost with a markup on top, so your net is captured_money minus this one field. The fee is final at card capture or ACH success; canceled payments and failures before success have none, and refunds do not return or revise it.
  • Balance transaction fee_money is documented as Flint's own fee on the movement. Refund, dispute, and return entries carry no Flint fee; an instant payout carries its own.
  • processor_fee and flint_fee balance transaction types are no longer part of the public ledger. What Flint pays its providers is Flint's cost and never appears as a deduction on your payments.

New Processing fees and Reconciliation guides cover the fee lifecycle and matching deposits back to the ledger.

  • Docs
  • API

New developer docs with a generated API reference

The developer docs have been rebuilt:

  • Generated API reference: every endpoint is now documented from the same contract the server runs, with request and response schemas, realistic examples, and cURL plus Node SDK samples generated from that contract, so they do not drift.
  • Webhook event catalog at /docs/webhooks/events and an error code catalog, both generated from server code.
  • Agent-ready docs: append .md to any page URL for raw Markdown, fetch /llms.txt or /llms-full.txt, or connect your editor to the docs MCP server at https://developers.withflintpay.com/mcp.
  • Dark mode and a refreshed design that matches the Flint dashboard.