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

# Changelog

> A history of additions, deprecations, and breaking changes to the Arcus ERP API.

<Update label="2026-07-08" description="v3.221.1" tags={["New","Improved","Fixed","API"]}>
  **This release makes fulfillment and returns safer and more flexible while improving order visibility, search, documents, and accounting workflows.**

  <Card title="Safer fulfillment automation defaults">
    Arcus now defaults card capture to manual and auto-buy label behavior to off unless you explicitly enable it. This helps prevent accidental charges, label purchases, shipment emails, and fulfillment on orders that were not meant to ship automatically.
  </Card>

  ### New features

  * **RMA receive, inspect, and disposition workflow.** Returns can now move through a clearer warehouse-to-office flow with Receive and Inspect, an Inspected step, and an optional setting to require disposition before refund. Teams can separate warehouse receiving from office-side refund decisions without changing the core return lifecycle.
  * **First-class shipping and processing-fee refunds.** Return refunds can now include outbound shipping, shipping tax, and processing-fee refunds with previewed totals and persisted values. This makes partial refunds and keep-fee scenarios much easier to handle accurately.
  * **Cancellation fee automation and billing corrections.** You can now configure cancellation fee rules and apply retained fees directly in the refund and cancel flow. A new billing correction flow also lets teams close stranded balances after partial or shipping-only refunds without leaving orders stuck in aging.
  * **Per-bank check layouts and numbering.** Accounts payable check settings can now be managed per bank account, including numbering, layouts, and register visibility of the drawn-on bank. This gives finance teams more control when different bank accounts require different printed check formats.
  * **Payment instrument details shown across internal views.** Arcus now stores and displays payment instrument snapshots such as card brand and last four digits on internal payment surfaces. Staff can quickly confirm which card or bank account was used without relying on generic payment labels.
  * **Expanded order and returns settings in the UI.** A range of backend-supported settings are now available directly in Admin, including delinquency controls, return processing defaults, kit shortfall behavior, vendor return terms, and purchase order terms. Operators no longer need raw API calls for these options.
  * **Legacy IDs added to global search.** Search now matches legacy external IDs for orders, accounts, and products, making it easier to find migrated records using familiar identifiers from prior systems.

  ### Improvements

  * **Order detail redesign and clearer line-item math.** The order detail page has been reorganized for easier scanning, with cleaner status chips, better notes and customer sections, improved line actions, and a unified breakdown card. Line savings, totals, discounts, fees, and all-in amounts now tie together more clearly across the page.
  * **Order, invoice, and email document presentation is more consistent.** PDFs and emails now share one money display grammar, customer-safe coupon labels, clearer payment references, and reliable rendering of customer PO numbers. You can also choose whether serial numbers appear inline, as a separate attachment, or not at all.
  * **Packing slips and packet printing are easier to use.** Packing slips now show product names correctly, better handle long names, and all packets can be printed as one combined PDF in package order. This reduces manual reprints and makes multi-package fulfillment easier to manage.
  * **Fulfillment and pickup flows are clearer.** Pickup orders now follow a more accurate awaiting-pickup flow, pickup-ready emails use the correct location, and pickup packing can bypass shipping-box requirements. The fulfillment tab also has a cleaner toolbar and improved package actions.
  * **Search relevance and result quality improved.** Search now ranks SKU and part number matches more accurately, supports compacted tracking number matching, includes carrier and payment context in results, and shows account type badges. This makes everyday lookup faster and more reliable.
  * **Command and status visuals are more accessible.** Status badges, muted text, and several order and returns views were retuned for stronger WCAG contrast and clearer hierarchy. Important actions and status indicators are easier to read across the app.
  * **Account list and duplicate detection are much faster.** Performance improvements significantly speed up account sorting and duplicate detection on large datasets. This reduces timeouts and makes customer account maintenance more responsive.

  ### Bug fixes

  * **Unpaid orders are blocked more reliably from shipping.** Fulfillment guards now correctly treat due-on-receipt terms as pay-now instead of deferred terms. This closes a gap that could allow unpaid orders to ship when they should have been blocked.
  * **Auto-Fulfill is restricted to pickup-class orders.** The one-click Auto-Fulfill action is now limited to pickup and will-call orders unless an explicit override is used by another controlled workflow. This helps prevent accidental label purchase and shipment on delivery orders.
  * **Returns tax and refund posting are more accurate.** Refunds issued before disposition now pre-settle correctly so sales tax reversals post to the right accounts. Related return flows also now handle shipping, fee, store-credit, and channel-refund combinations more consistently.
  * **Tax recalculation uses fresh discount data.** Arcus now refreshes per-line coupon allocation before building tax lines, which prevents stale taxable amounts after item, quantity, or price changes. This avoids one-pass over-collection that previously corrected only on a later recalculation.
  * **Manual invoicing and undo fulfillment protect AR accuracy.** Whole-order invoicing is now blocked on partially fulfilled orders, and undoing fulfillment now keeps invoice and line statuses aligned with the reversed accounting state. This prevents receivable balances from overstating what was actually recognized.
  * **Quote acceptance and quote status displays are fixed.** Customer quote acceptance no longer treats future expiration dates as already expired, and customer-facing quote pages now use the same expiration logic throughout. This restores acceptance for valid quotes and keeps status badges honest.
  * **Refund amount validation is stricter across payment methods.** Refund APIs now consistently enforce the cents-based amount contract across all refund types. This prevents under-refunds caused by dollar amounts being interpreted as cents on non-card refunds.
  * **PDF downloads open correctly instead of returning JSON.** Several finance and returns PDFs, including refund receipts, credit memos, vendor returns, and AP remittances, now open as real PDFs in the browser. Users also get a clearer error if a document cannot be rendered.
  * **Shopify-imported orders no longer fail PDF generation.** Line totals on imported taxed orders are now folded correctly so document generation does not fail on math checks. This resolves blank-tab PDF failures for affected imported orders.
  * **Serial and repack fulfillment is more resilient.** Re-running fulfillment on already packed serial-tracked pickup orders no longer fails with an internal error. Arcus now preserves the serial-linked package data it must keep and only rebuilds what is safe to rebuild.
  * **Null-location purchasing data no longer disappears from On PO views.** On-order quantities now correctly include purchase orders without an assigned location across product detail, reorder, and related purchasing views. This prevents undercounting inbound inventory and over-ordering.
  * **Shipping rule selection is more accurate.** Channel-based shipping rules now match correctly, FedEx Ground versus Home Delivery selection respects address type, and per-rule auto-buy behavior no longer depends on unrelated entity-wide toggles. This makes automated carrier selection more trustworthy.
  * **Portal-off emails no longer show portal-only calls to action.** Customer emails now fail closed when the portal is disabled, suppressing links that should not be shown. This avoids sending customers to unusable portal pages.
  * **Scheduler-created draft PO shell cleanup is fixed.** Automatic purchase order creation now avoids producing repeated empty draft shells and can safely reuse or clean up failed shells. This reduces purchasing noise from background automation.
  * **Realtime followers keep working when the leader tab changes.** Follower browser tabs now stay in sync on connection status and refresh auth independently when needed. This reduces false Offline indicators and prevents save failures from expired shared sessions.

  ### API

  * **Order GL movements are available through a dedicated resource filter.** Developers can now fetch journal entries tied to an order, including reversals and related fulfillment, shipping, and payment activity. This makes order-level accounting timelines easier to build against the API.
  * **New endpoints and payload support for billing corrections and richer return refunds.** API flows now support billing corrections, shipping-refund fields, processing-fee refunds, register selection for return cash refunds, and marketplace refund intent threading. These additions help integrators model more complete post-sale workflows.
  * **More reliable document and workflow responses.** Several PDF and fulfillment-related API responses were standardized so clients receive the expected file or structured error behavior. This reduces special-case handling for document viewers and automation clients.
</Update>

<Update label="2026-07-06" description="v3.221.1" tags={["New","Improved","Fixed","API","Breaking"]}>
  **This release strengthens returns, payables, and realtime reliability while making key workflows clearer and safer for day-to-day operations.**

  <Card title="Redesigned returns workspace">
    Returns now have a rebuilt create flow and detail experience with clearer financials, linked documents, movement history, and more accurate refund previews. Teams can work through RMAs with fewer dead ends and better visibility into what will happen before money is issued.
  </Card>

  ### New features

  * **Return item photo evidence.** Warehouse and service teams can now attach photos to individual return line items during receiving and review them later from the return record. This helps document damage, condition, and disputes at the line level.
  * **Vendor return detail page.** Vendor returns now have a dedicated detail page with status tracking, linked documents, GL movements, warranty trail, and clearer actions. It is easier to follow the full return-to-vendor lifecycle from one place.
  * **PO un-receive workflow.** Purchasing teams can now reverse eligible receipts when items were received in error. The workflow includes eligibility checks, GL handling, and inventory corrections so stock and accounting stay aligned.
  * **Returns receiving consolidated in Warehouse.** Warehouse returns queues have been folded into a single receiving surface. Staff can move between waiting and in-holding returns without switching between duplicate tabs.
  * **Returns settings consolidation.** Returns configuration now lives in one clearer settings area with one save path. This reduces missed settings updates and exposes key return policy and settlement controls directly in the UI.
  * **Coupon spend by GL account report.** Accounting teams can now review coupon discount activity by GL account. This makes it easier to audit promotional spending when discounts are routed to different accounts.
  * **AP remittances for every payment method.** Remittance generation and emailing now work across all payables tender types, not just checks. Vendors can receive consistent payment detail regardless of how they were paid.
  * **Organization close and entity teardown controls.** Admins now get stronger close and teardown workflows with step-up verification, readiness states, and explicit execution steps. This adds more control and confidence to high-risk administrative actions.

  ### Improvements

  * **Vendor bill workbench and bill detail refresh.** Entering and reviewing vendor bills is now much clearer, with full-page bill entry, stronger PO and GRNI linking, better terms handling, improved line editing, and a redesigned bill detail page. AP teams can review history, linked documents, payments, and GL impact more easily.
  * **Payables and accounting UI cleanup.** AP Bills, GRNI, Recurring Bills, Vendor Credits, 1099 Vendors, Pay Bills, Check Register, and other accounting views received layout, table, link, and filter improvements. Common tasks are easier to scan, navigate, and work through on real-world screen sizes.
  * **Smarter AI vendor bill proposals.** AI-assisted vendor bill entry now provides better per-line GL and line-type suggestions, a stronger review screen before confirmation, and links back to the created bill. It also learns a vendor's default expense account when a clear pattern is confirmed.
  * **Bank routing and external AP payments.** AP disbursements now route more accurately to the selected bank account, and external payment methods are easier to use in Pay Bills and Quick Pay. This supports record-only ACH and external payments without forcing a Plaid-based workflow.
  * **Registers and deposits workflow polish.** Register and deposit screens now better reflect real drawer math, simplify actions, and remove misleading options from physical deposit workflows. This helps cash handling staff understand what belongs in the drawer versus what settles directly to the bank.
  * **PO detail enhancements.** Purchase order detail now includes clearer summaries, expected delivery and tracking fields, inventory movement visibility, and a more usable action bar. PO PDFs also show the vendor part number when available.
  * **Realtime and scanner resilience.** WebSocket reconnects, scanner presence, serial capture, and live refresh behavior are more reliable across tabs and devices. Warehouse staff should see fewer stale screens, missed updates, and reconnect loops.
  * **Forced reload What's New dialog improvements.** The What's New experience shown during forced reloads is now larger and easier to read, with a better scrolling release list. This makes upgrade guidance clearer during refresh events.

  ### Bug fixes

  * **Quote conversion now carries deposits and terms correctly.** Converting a quote to a sales order now works from draft quotes and correctly carries over deposits and payment terms. This prevents failed conversions, duplicate orders on retries, and lost payment context.
  * **Returns math, status, and settlement corrections.** A broad set of returns fixes improves refund math, tax conservation, fee handling, source-settled messaging, status gating, close behavior, and linked financial records. These changes reduce over-refunds, prevent misleading balances, and keep return accounting accurate across more edge cases.
  * **Credit card surcharge totals on split payments.** Processing fees now accumulate correctly when an order is charged in multiple card transactions. This prevents undercharging and incorrect refund-due calculations on multi-charge orders.
  * **Vendor credit accounting and lifecycle fixes.** Vendor credits now behave more consistently when issued, applied, voided, received from vendor returns, and shown in related payables screens. This helps prevent stranded balances and keeps AP balances aligned with GL.
  * **Refund and credit memo reliability.** Refunds now better handle multi-invoice payment applications, and credit memo void and reissue flows are more reliable. This reduces dead-end refund attempts and avoids false success states in reversal workflows.
  * **AR, AP, and reporting accuracy fixes.** This release fixes several aging, KPI, running balance, date, CSV export, tax liability, and report edge cases across AR and AP. Financial views now better match the underlying accounting truth.
  * **Product and billing lookup fixes.** Product lookups used by AP bill workflows now resolve correctly in more cases, and duplicate invoice and overbilling checks are enforced more consistently on bill create and edit. This reduces bad saves and confusing raw IDs.
  * **Null-link and navigation hardening.** More screens now degrade gracefully when related records are missing instead of crashing or linking to invalid destinations. This especially improves reliability for migrated or partial historical data.
  * **Android and touch activity auto-lock fixes.** Scanner devices now reset inactivity timers from both touch and scan activity. This helps prevent devices from locking in the middle of packaging or receiving work.

  ### API

  * **Expanded returns and payables API coverage.** The API now supports newer returns, vendor return, remittance, organization close, and teardown workflows used by the updated product surfaces. OpenAPI and SDKs were refreshed to reflect the latest contract.
  * **Richer response data for key workflows.** Several endpoints now return more useful detail, such as carried payment context on quote conversion, improved refund and return preview data, and broader bill and journal linkage. Integrators can show more accurate status and financial context without extra custom logic.

  ### Breaking changes

  * **AP payment void now requires a reason.** API clients voiding AP payments must now provide a reason. Integrations should update any payment-reversal calls before upgrading.
  * **Returns validation is stricter on create and update.** Several returns endpoints now reject invalid or incomplete inputs that were previously accepted or silently ignored, including empty item lists, invalid item references, zero or negative quantities, and certain edits to closed returns. Integrations should review return creation and edit payloads for stricter validation.

  ### Technical details

  <AccordionGroup>
    <Accordion title="Returns and refunds, re-engineered end to end">
      The refund experience was unified into one code path across order and RMA screens (RefundPanel / RefundBreakdown / RefundDestinationAllocator), closing a four-way net-math divergence where the detail page, create flow, worklist, and preview estimate could each show a different number. A new refund-only return type makes a real, per-line, fee-aware RMA drive the same server preview as a physical return, instead of a bare order refund with no record. The intermittent "Return not found" flash after receive-and-dispose was a React Query cache-shape collision between the receive dock and the detail page, now resolved. A P0 heal corrected deferred-percentage restocking-fee sentinels that corrupted previews and an unclamped store-credit disbursement (one live customer had been over-credited); affected credit memos were healed. Refund panels now filter out voided or abandoned Stripe payment-intent rows before offering returnable tenders, and kit-return COGS reversal rolls the leaf-component cost up so the journal ties to the cent.

      API behavior (historical-import carve-out preserved): POST /returns now rejects header-only creates (422 items\_required), unknown alias keys return\_items / order\_id (400 unknown\_body\_key), and invalid item rows (422 invalid\_item, reject-never-skip). Fee rules use a decimal fraction for discount\_value on fee effects (0.15 = 15 percent); a whole-percent value returns 422 fee\_percentage\_exceeds\_100.
    </Accordion>

    <Accordion title="Safer entity deletion: step-up MFA, Danger Zone, and org close">
      Destructive entity delete, ownership transfer, and organization close now require an MFA step-up challenge (new mfa\_step\_up\_challenges table plus a step-up modal), with an email-code fallback so an owner can never be locked out. The teardown clean-verifier now asserts all seven file-storage asset prefixes, secure secret-store entries, and 231 tables are fully cleared before a delete is considered complete. A new organization teardown execute path with a per-entity verifier fixes scheduled organization closes that could get stuck and never finish. Verified on dev with a real 769,000-row entity delete: the isolation and no-junk audit was a definitive pass with all nine sibling entities byte-intact.
    </Accordion>

    <Accordion title="Accounts Payable: full-page Bill Workbench and correct bank routing">
      Vendor bill entry moved from cramped modals to a full-page workbench with open-PO and GRNI line linking, a hardened duplicate-invoice guard, real payment terms, and cleaner landed-cost entry; every AP list surface (Bills, Recurring Bills, GRNI, Vendor Credits, Pay Bills, Check Register) was raised to the PO-detail design grammar with status counts and real search and pagination. Disbursement bank routing reached parity with AR receive-payment: the GL credit leg now honors the operator-selected bank account instead of a hardcoded system account, enforced by a new foreign key (prod verified 18,201 clean and 0 contaminated, now validated on all three environments). A reverse-a-paid-and-closed-bill flow was added after researching NetSuite, Acumatica, and Odoo.

      API (breaking): voiding an AP payment now requires a reason (422 void\_reason\_required) and adds typed conflicts (409 payment\_already\_voided, 409 historical\_row\_immutable, 409 credit\_restore\_conflict, 422 ach\_payment\_not\_voidable, 422 payment\_reconciled\_blocks\_void); the response now includes a void summary.
    </Accordion>

    <Accordion title="Realtime reliability: the scanner, serial lag, and the two-tab crash">
      <Frame caption="Open Arcus in two tabs: before, they reloaded each other into oblivion; after, they share one identity and stay in sync.">
        <img src="https://mintcdn.com/arcuserp/V_sVmK5RCGOvSK7H/images/changelog/realtime-two-tab-sync.png?fit=max&auto=format&n=V_sVmK5RCGOvSK7H&q=85&s=fe9a1b7ecc74cd06eaa292a82d9ed0b9" alt="Two-tab reload storm, before and after" width="2400" height="1040" data-path="images/changelog/realtime-two-tab-sync.png" />
      </Frame>

      Four connected problems that all surfaced at the warehouse scanner were root-caused and fixed:

      * **Two tabs reloaded each other (100 percent reproducible).** The signed-in user was written to browser local storage under two different ID namespaces (the Arcus database user id in some paths, the sign-in provider's subject id in others). The cross-tab "did the user change?" check compared those as raw strings, so every tab boot looked like a different user to the other tab and triggered a mutual reload storm (measured at 822 reloads in five minutes). Fixed by making the comparison understand both namespaces, plus a reload debounce that survives the reload itself.
      * **Scanner "disconnected until reload."** Five stacked failures: the Android app auto-locked after five minutes and killed the heartbeat; the WebSocket baked in the app-boot token (which expires after 24h) and only refreshed on some disconnect codes, not the one browsers actually see; the REST layer never checked token expiry, so background refetches kept succeeding and hid the dead socket; deaf connections (server record gone, socket still open) kept getting answered so the client never reconnected; and the UI did not reflect recovery while manual serial entry was wrongly blocked.
      * **Serial scans lagged one to three seconds.** The capture wizard read cache keys that the capture and release actions never invalidated, and the backend fired realtime broadcasts fire-and-forget, but the serverless runtime freezes the moment the function returns, so broadcasts did not go out until the next request (one to 30 seconds later). Fixed by invalidating the correct keys and adding a broadcast-flush latency cap.
      * **Saves looked stale app-wide.** A card read one cache key while its save invalidated a different one, and several UI pieces were subscribed to event names the backend never emits. Both corrected.

      Two quieter data bugs were caught along the way: a serial-number concurrency race where fast scanning could silently drop a serial from the record (real evidence found on prod), and inverted package cache keys so an edit in one place did not refresh the same package elsewhere.
    </Accordion>

    <Accordion title="AI vendor-bill entry from a PDF">
      Arcus AI now reads a vendor invoice PDF and drafts a vendor bill with smart per-line GL and line-type classification, presented on a confirm-card for line-by-line review and edit before anything posts. The original source document attaches to the created bill, an eager Ask mode speeds review, a "View bill" deep link jumps to the result, PO-only landed freight is respected, and the model learns from each confirmation. The human stays in control end to end.
    </Accordion>

    <Accordion title="Accounting production-readiness and payments accuracy">
      A controller-persona audit closed a batch of GL correctness gaps (six additive migrations plus gated data heals) and de-squished accounting tables across every screen so identifiers, dates, and six-figure dollar amounts stay readable and unwrapped. Separately, credit-card surcharges now accumulate correctly across orders charged in multiple payments (a per-payment surcharge amount is the single source of truth), where a multi-charge order previously kept only the last charge's slice and could under-collect.
    </Accordion>
  </AccordionGroup>
</Update>

<Update label="2026-07-02" description="v3.221.1" tags={["New","Improved","Fixed"]}>
  **This release improves AR accuracy for terms orders, keeps operator refunds from cancelling open orders, and strengthens several accounting and banking workflows.**

  <Card title="Terms orders now stay open and accurate across AR">
    Orders placed on payment terms now remain collectible instead of being treated like cash payments. AR balances, aging, customer statements, order payment summaries, and invoice emails now show the true amount due, with safeguards and correction tools applied for previously affected records.
  </Card>

  ### New features

  * **Check printing now supports darker, bolder text.** You can now choose normal, medium, bold, or extra bold text for printed checks. This helps improve legibility on physical checks without shifting field alignment or affecting MICR output.
  * **Historical credit memos can be imported as standalone records.** Arcus now supports bulk creation of historical AR credit memos for migrated data. This helps imported customer balances and aging match prior systems more accurately.

  ### Improvements

  * **Refunds can preserve open orders for re-payment.** Processing a full pre-fulfillment refund from the operator workflow no longer cancels the order by default. The order stays open, the balance due is restored, and the customer can be charged again with the same or a different payment method.
  * **AR and account screens show clearer payment and terms details.** Customer and order views now better distinguish cash payments from on-terms balances, including due dates and terms visibility in more places. This makes collections, credit review, and customer conversations easier and more accurate.
  * **Plaid syncing better tracks the correct bank account.** Imported bank transactions now retain source account identity more reliably, even when multiple accounts are connected under one Plaid item. This reduces the chance of unreconciled transactions appearing under the wrong bank account.
  * **Migrated accounting data imports are more complete and accurate.** Historical migration tools now better link payments to orders, import standalone credits, enrich customer terms and address details, preserve purchase order titles, and improve attachment and inventory history loading. Customers working through data migrations should see more accurate drill-through and historical reporting.

  ### Bug fixes

  * **Re-issuing invoices after a void now works for fulfilled orders.** You can now re-issue an invoice on a fulfilled order without hitting a dead end. The related accounting reversals are restored correctly so the replacement invoice can be collected as expected.
  * **Voided invoice reversals now include missing accounting lines.** Void and re-issue flows now reverse additional discount, fee, and fulfillment accounting lines that could previously be left behind. This improves journal accuracy and reduces stranded balances.
  * **Cancellation fee invoices no longer fail on unpaid order cancellations.** Cancelling an unpaid order with a configured cancellation fee now creates the fee invoice correctly instead of returning an error.
  * **Return detail check printing now opens the printable check correctly.** Printing a check from return details now uses the proper printable output instead of opening raw response data. The print window also closes more cleanly if the request fails.
</Update>

<Update label="2026-07-02" description="v3.221.1" tags={["New","Improved","Fixed","API","Breaking"]}>
  **This release makes bank reconciliation faster and safer, while improving payment routing, payout syncing, reorder planning, and historical migration fidelity.**

  <Card title="New bank transaction Feed Inbox and reconciliation baseline tools">
    You can now review bank transactions in dedicated For Review, Categorized, and Excluded views, then start reconciliation from a cleaner baseline. New baseline, exclude, restore, cancel, and edit workflows make it much easier to clean up old unreconciled activity without posting extra GL entries.
  </Card>

  ### New features

  * **Direct-to-bank payment routing.** Payments received by wire, ACH, and other external methods can now be posted directly to the bank account they actually hit instead of flowing through clearing first. This works across order payments, account-level receive payment, reconciliation add flows, and refunds.
  * **Durable excluded bank transactions.** Bank transactions can now be marked as excluded with a reason and restored later when needed. Excluded items stay suppressed during re-syncs so teams can keep their bank feed clean without losing auditability.
  * **Automatic Stripe payout polling.** Arcus can now pull Stripe payouts on a schedule in addition to webhook processing. This helps prevent missed payout entries and makes payout accounting more reliable if webhook delivery is interrupted.
  * **Reorder planning controls by location.** You can now disable reorder planning for non-buying or non-stocking locations. This removes false demand signals and keeps reorder recommendations focused on the locations that should actually generate purchase demand.

  ### Improvements

  * **Smarter reconciliation matching and large-session handling.** Reconciliation matching now uses a more reliable tiered matching strategy with better confidence scoring, duplicate detection, and ambiguity handling. Large reconciliation sessions also load more safely with payload caps, truncation indicators, and windowed fetching to reduce timeouts.
  * **Better Plaid account mapping for multi-account connections.** When linking Plaid, Arcus now matches accounts more accurately and keeps transaction sync scoped to the correct bank account. This reduces cross-account confusion for businesses that connect several accounts under one Plaid item.
  * **Deposit lifecycle and drawer accuracy updates.** Deposit clearing is now handled at the deposit level, register close posting is more resilient, and drawer cash expectations use a single consistent calculation. Bounced checks also update payment status more accurately when other tenders remain on the order.
  * **More reliable reorder recommendations.** Reorder planning now uses a single demand calculation across reports and panels, adds velocity-aware overbuy caps, respects vendor minimums more appropriately, and supports a full workbench view for all products. New settings let you control slow-mover behavior, per-line order caps, and whether migrated sales history should be included in demand planning.
  * **Historical migration fidelity for accounting and CRM.** Historical imports now preserve more source detail, including customer notes, unapplied vendor payments, per-document references, true vendor bill balances, historical accounting periods, line descriptions, and more accurate GL drill-through links. This improves migration accuracy for companies moving historical data into Arcus.

  ### Bug fixes

  * **Direct-to-bank reconciliation now posts to the correct bank.** Fixed an issue where some reconciliation-created payments could still land in clearing instead of the selected bank account. Payments created from bank feed matching now consistently debit the bank account from the statement line.
  * **Unapplied remainder follows the selected deposit bank.** When a payment was only partially applied, the remaining unapplied amount now stays in the same destination bank account instead of being stranded in a clearing account.
  * **Friendly validation for deposit bank selection.** Fixed cases where invalid deposit bank selections could surface as generic server errors. Users now get clearer validation messages when a payment method or bank choice is not allowed.
  * **Deposit clear and revert actions no longer fail.** Fixed an issue that could cause errors when marking bank deposits cleared or undoing that action. Deposit clearing workflows should now complete successfully.
  * **Free-text order and PO lines keep their descriptions.** Manual freight, service, and other non-catalog lines now retain their titles and descriptions instead of showing as blank or untitled. This improves readability on migrated and native documents.
  * **Shopify imports no longer fail on overly long customer names.** Arcus now safely truncates unusually long imported name fields so paid Shopify orders are not dropped during import.

  ### API

  * **New bank transaction and reconciliation endpoints.** The API now supports excluding, restoring, and bulk excluding bank transactions, creating reconciliation baselines, and editing or canceling reconciliation sessions. These endpoints are documented in the public OpenAPI spec and client collections.

  ### Breaking changes

  * **Manual ACH deposit items are no longer accepted.** ACH deposit items are now rejected to prevent double-counting, because ACH receipts are expected to settle through payout flows instead of manual deposit entry. Review any custom workflows or integrations that were creating ACH deposit items directly.
</Update>

<Update label="2026-06-30" description="v3.221.1" tags={["New","Improved","Fixed","API"]}>
  **This release strengthens cash handling and deposit accuracy, adds smarter purchasing tools, and improves refunds, AI results, and everyday usability.**

  <Card title="Reconcile an open register without closing it">
    You can now count a drawer, book any over or short amount, and keep the session open for businesses that deposit cash throughout the day. This keeps register balances and accounting aligned even when drawers are not formally closed between deposits.
  </Card>

  ### New features

  * **Purchasing coverage what-if panel.** The reorder workflow now includes a live coverage panel in both the PO wizard and reorder report. Buyers can see demand windows, seasonal context, on-PO impact, suggested quantities, and projected stock coverage before placing an order.
  * **Flexible RMA refund destination choices.** Returns can now be refunded to the original payment method, issued as store credit, or paid by check. This gives accounting teams the same refund flexibility on RMAs that they already have in order refunds.
  * **Expanded register session details.** Register sessions now show a clearer summary, a chronological drawer journal with running balance, checks received, and deposits made from that drawer. This makes it much easier to audit cash activity during a shift.
  * **Arcus AI full-screen result tables.** AI result tables are now easier to read, with frozen first-column support, better handling for long text, and a full-screen in-app table view with sorting, column controls, density options, and resizable columns.

  ### Improvements

  * **Smarter reorder recommendations.** Reorder suggestions now account for incoming purchase orders, classify items by coverage status, and focus the default view on products that truly need ordering. The report also hides inactive catalog noise by default, adds relevance sorting, and keeps estimated totals aligned with what is actually visible on screen.
  * **More reliable vendor lead-time intelligence.** Lead-time and vendor performance calculations now ignore historical import noise and treat zero-day manual lead times as missing rather than real baselines. This produces more trustworthy reorder planning until enough native receipts exist to build real vendor trends.
  * **Registers now focus on cash and checks only.** Card activity has been removed from register session views and totals so drawers reflect only physical tenders that actually sit in the register. Register screens and reports are now simpler and more operationally accurate.
  * **Deposit totals now include ACH and external payments.** Bank deposits now correctly track ACH and external or wire amounts in deposit totals, headers, and deposit slips. This gives a complete deposit value instead of understating totals when non-cash items are included.
  * **Safer cash movement tracking in registers.** Register cash movements now use stricter movement types and can record a reason for cash-out activity. This helps prevent incorrect entries from distorting expected drawer balances.
  * **AI result formatting and chart selection are more accurate.** Arcus AI now formats dates, text, and numeric results more reliably based on actual data types, avoids misleading charts for rank or index fields, and prefers money-only chart series when appropriate. Clarifying questions are also presented more cleanly for faster follow-up.
  * **RMA refund screen is easier to use.** The RMA refund modal now uses a wider, cleaner layout that makes destination choices, refund breakdowns, and accounting impact easier to review, especially on larger screens.

  ### Bug fixes

  * **Register cash balances and deposits now stay in sync.** Several fixes improve drawer accuracy across cash sales, change given, check sales, deposits from open sessions, and close-time posting. Together, these changes prevent understated drawer balances, stranded amounts, and deposit limits that did not match actual cash on hand.
  * **Cash over and short amounts now post correctly.** When a counted drawer differs from the expected amount, Arcus now records the variance to Cash Over/Short and updates the register balance accordingly. This ensures shortages and overages are reflected in accounting instead of being only informational.
  * **Sales tax subledger now ties to the general ledger.** Sales tax balances are now computed from posted journal activity so the tax subledger matches the GL to the cent. This corrects cases where tax liability could appear negative or out of sync after imported history.
  * **External payment deposit candidates no longer include negative rows.** Negative external or wire transactions, such as refund-related rows, are now excluded from deposit candidate lists. This prevents invalid items from appearing in the deposit workflow.
  * **Nested overlays now close correctly with Escape.** Pressing Escape now dismisses only the topmost modal or drawer instead of closing multiple layers at once. This makes complex workflows with nested overlays much safer to use.
  * **Package template box pickers now show the full list.** The box selector in package templates now loads the full available set instead of stopping early on larger lists. This prevents valid box products from being hidden.
  * **Historical order and account creation is more robust.** Order creation now safely falls back to a default allocation strategy when no account is attached, and very long contact names are trimmed to fit supported limits. This prevents avoidable failures when importing or creating edge-case records.
  * **Serial number labels were corrected for affected fulfilled items.** A serial capture issue that stored QR test suffixes instead of the real serial values was corrected for impacted records. This restores accurate serial visibility in inventory and fulfillment history.
  * **RMA refunds no longer auto-allocate against non-returnable tenders.** Refund allocation now excludes non-returnable tender types such as store credit, credit memos, terms, and discounts. Users are guided to valid refund methods when no returnable payment source exists.

  ### API

  * **New register reconciliation endpoint.** A new endpoint lets integrators reconcile an open register session by submitting the counted cash amount, booking any variance, and keeping the session open. This supports deposit-driven register operations without requiring a close.
  * **Reorder coverage endpoint for what-if planning.** A new purchasing endpoint returns coverage details, demand windows, seasonal signals, live position, and suggested ordering data for selected products. It powers the new coverage panel and can also be used by custom purchasing workflows.
  * **Deposit item types now include ACH and external values.** Deposit payloads and related UI now consistently recognize ACH and external or wire item types. API clients can rely on these values being handled as first-class deposit components.
</Update>

<Update label="2026-06-29" description="v3.221.1" tags={["Fixed"]}>
  **This release makes vendor selection easier across purchasing and payables, while keeping quantity-based coupon discounts accurate as orders change.**

  <Card title="Vendor search now works across all vendor pickers">
    Vendor selectors in purchasing, AP bills, vendor returns, and Pay Bills now use server-side search instead of small preloaded lists. This means you can reliably find vendors even when you have a large vendor directory.
  </Card>

  ### Bug fixes

  * **Per-unit coupons now recalculate when order quantities change.** Quantity-based discounts now update correctly every time an order is edited. This fixes cases where a per-unit coupon could keep an old discount amount after line quantities increased, decreased, or otherwise changed.
</Update>

<Update label="2026-06-29" description="v3.221.1" tags={["New","Improved","Fixed","API","Breaking"]}>
  **This release sharpens purchasing decisions, cleans up order and return totals, and makes payments and deposits more reliable.**

  <Card title="Smarter reorder planning across the purchasing workflow">
    Purchasing teams now get more accurate reorder recommendations based on real shipped demand, observed supplier lead times, EOQ logic, seasonal context, and price-break analysis. The reorder workbench, product supply and demand views, and PO wizard now present clearer metrics and explanations so buyers can act with more confidence.
  </Card>

  ### New features

  * **Return fee rules can now be managed through the coupon engine.** You can now create adjustment rules that apply to returns, sales orders, or both, giving teams one consistent way to manage restocking and handling fees. Return settings were also simplified so fee management is easier to understand and maintain.
  * **Check receipts and register deposits are now connected end to end.** Check payments recorded from invoice applications now flow into the register and deposit workflow correctly, and order payment history shows applied amounts with check numbers. Cash deposits also now show drawer balance, float, and cash sales, with a quick-fill option to deposit cash sales while keeping the float.

  ### Improvements

  * **Below Reorder Point workbench is easier to scan.** The purchasing workbench now uses a calmer layout with cleaner risk indicators, better alignment for quantities and costs, clearer stockout wording, and less visual noise. Estimated cost also falls back more intelligently when vendor pricing is missing or zero.
  * **Order and return totals are clearer for users and customers.** Order detail screens now separate line subtotals from allocated order-level coupons and tax so totals no longer conflict across grids and popovers. Return views, PDFs, and customer-facing portal pages now show clearer goods, tax, restocking, fee, and net refund breakdowns.
  * **Late shipment detection is more trustworthy.** Packages are no longer flagged late unless there is tracking evidence and a carrier on file. This reduces false positives for shipments that were never properly registered with tracking.

  ### Bug fixes

  * **Discounted orders now recalculate sales tax correctly.** Arcus now re-allocates coupons and re-nets tax after discount changes across order creation, conversion, duplication, and coupon edits. This fixes cases where discounted orders could show incorrect taxable amounts or over-collected tax.
  * **Refund calculations are more accurate across complex return scenarios.** Several return calculation issues were fixed, including missing tax in cash refunds, dropped restocking fees, misleading even-swap previews, and discount allocation on partial kit shipments. These updates help refund amounts, on-screen totals, and accounting stay in sync.
  * **Fulfillment line statuses now update correctly.** Line items now reflect their actual fulfillment state instead of staying stuck as pending after shipment activity. This improves accuracy in order detail screens and warehouse workflows.
  * **Supply and demand figures are more reliable.** Products now show more accurate on-order, safety stock, and reorder values even in edge cases such as missing balance rows or zero-cost products. Receiving inventory also avoids a recompute bottleneck that could previously cause intermittent failures.
  * **Accounting safeguards were tightened for payments, AP, and journals.** Fixes in this release improve AR balance refresh after refunds, prevent AP and credit memo over-disbursement edge cases, stop duplicate discount journal posting, and keep coupon usage counts in sync. These changes reduce reconciliation surprises without changing normal workflows.
  * **Customer RMA portal now shows full refund composition.** Customers can now see goods, tax, restocking, and net refund amounts on shared RMA pages when that detail is available. This makes refund math easier to verify without contacting support.

  ### API

  * **Coupons can be scoped by document type.** Coupon and adjustment rules now support explicit document-type targeting, so order rules do not accidentally apply during return evaluation and return fee rules do not apply to sales orders. API clients can manage this behavior with the new document-type scope field, and invalid values are rejected.
  * **Return APIs expose clearer refund breakdown data.** Return responses now include the data needed to show goods and tax refund breakdowns separately where supported. This helps customer portals and custom integrations present net refund calculations more clearly.

  ### Breaking changes

  * **Check payments applied to invoices now require a check number.** If your integration records check payments through invoice application flows, it must now provide a check number. This ensures check payments can be tracked consistently through order history, register activity, and deposits.
</Update>

<Update label="2026-06-28" description="v3.221.0" tags={["New","Improved","Fixed","API","Breaking"]}>
  **This release delivers a major returns overhaul, better shipment visibility, stronger coupon tools, and safer money-handling across payments and refunds.**

  <Card title="Unified return creation with live refund preview">
    Creating returns is now faster and more consistent across Arcus. Staff can start a return from the returns list or an order, choose lines and reasons, add adjustments, and see the expected net refund before submitting.
  </Card>

  ### New features

  * **Smarter return policies and fee controls.** Arcus now snapshots the return policy on each order so later policy edits do not change eligibility for past purchases. You can also manage final-sale flags plus product, category, and default restocking and handling fees with more predictable fee recalculation as return quantities change.
  * **Automated refund follow-up for eligible RMAs.** You can now choose whether approved returns settle manually, on receipt, or after carrier delivery. Accounting also gets a new RMAs ready for refund worklist so outstanding customer refunds are easier to find and clear.
  * **Return inspection upgrades.** Return inspections now support a refurbish disposition, condition-based suggested next steps, and file and video evidence on the return record. This helps teams document returns more clearly and route inventory correctly.
  * **Rate shopping for customer and vendor return labels.** Customer returns and vendor RTV labels now support live carrier rate shopping instead of a single blind choice. Staff can also fix an invalid ship-from address inline and retry label rating without leaving the workflow.
  * **Returns by reason analytics.** A new returns by reason report adds SKU-level visibility into why products come back. Teams can filter and analyze return trends more easily from the reporting area.
  * **Shipment tracking maps across more surfaces.** Shipment tracking now includes the dark map experience in the shipment drawer, public tracking page, and customer portal. The map can show origin, destination, and latest package progress using carrier event location data.
  * **Coupon campaigns, per-unit discounts, and multi-reward promotions.** Promotions can now be grouped into campaigns, discounts can apply per unit, and a single promotion can include multiple rewards such as a percentage discount plus a free item. The coupon builder also adds clearer guidance and a more accurate live preview.
  * **Arcus AI self-service and document matching improvements.** Users can now update their own profile photo through Arcus AI. Arcus AI can also suggest purchase order matches while creating vendor bills, helping AP teams link bills to the right PO faster.
  * **Per-account control for transactional emails.** Transactional customer emails can now be turned off for a specific account when that template allows it. This gives teams more flexibility without changing the global unsubscribe behavior.
  * **Arcus Go mobile dashboard foundation.** The Arcus Go mobile companion app now includes a redesigned dashboard experience with cleaner visuals, period comparison, and mobile-friendly charts. This lays the groundwork for faster on-the-go visibility into revenue and order trends.

  ### Improvements

  * **Clearer refund breakdowns for returns and order refunds.** Refund screens now show a more complete breakdown of goods, tax, restocking, handling, and card-fee treatment. This gives accounting and service teams a clearer view of what will be refunded versus retained before they finalize a refund.
  * **Processing fee compliance and payment entry usability.** Credit card surcharge settings now enforce a 3 percent hard cap and include stronger compliance guidance. The collect payment screen also updates fee previews live, shows the true card charge total, and handles split cash payments more clearly.
  * **Better statement and order documents.** AR statement emails can now include the statement PDF attachment, and order PDFs now present totals more accurately. Shipment exception and delay emails were also rewritten in a calmer, more customer-friendly tone.
  * **Broader but safer Arcus AI data access.** Arcus AI can now read from a much wider set of business data that the signed-in user is allowed to access, while sensitive secrets remain blocked. Responses can also better understand who the current user is when interpreting requests like "my" or "my accounts".

  ### Bug fixes

  * **Return creation no longer leaves behind orphan records.** Submitting an ineligible return, such as for a final-sale item, now fails cleanly without creating incomplete return headers. Final-sale lines are also disabled consistently across staff and portal return flows.
  * **Return refund math and accounting corrections.** Several return calculations were corrected so previews and posted refunds stay accurate to the cent. Fixes include proper goods-versus-tax proration, handling and restocking fee treatment, card-fee refund accounting, and better refund routing for external payment sources.
  * **Refund allocation starts with usable defaults.** Split refunds for multi-tender orders now open with a suggested allocation already filled in. This removes the confusing zero-dollar starting state and helps staff issue refunds with fewer manual steps.
  * **Undo fulfillment and packable item handling are more reliable.** Undoing fulfillment now fully supports revise and re-fulfill workflows without leaving blocked order lines or stranded inventory and accounting effects. Fulfillment logic also excludes non-packable virtual kit parents and service lines more consistently.
  * **Shipment status accuracy improved.** Packages now move to delivered or returned in the lifecycle status when carrier events confirm that outcome, and older mismatches can be corrected safely. Delivered packages also display the right status across shipment views instead of appearing stuck in transit.
  * **Shipment alerts no longer send false late or exception emails.** Customer shipment alerts are now stricter about requiring real carrier evidence before sending late or exception notices. This reduces false alarms for delivered packages or shipments that never fully registered for tracking.
  * **Historical return reporting filter fixed.** The returns by reason report now handles historical data filtering correctly instead of failing on some queries. This restores reliable reporting when excluding imported history.
  * **Audit compliance exports are more reliable.** Large compliance report CSV exports are now capped and marked as truncated instead of failing with a server error. Users are guided to narrow the date range when they need a complete export.
  * **Coupon usage, rollups, and reward cleanup fixes.** Several coupon issues were corrected, including over-decrementing usage counts on multi-reward promotions, campaign rollup inaccuracies, reward cleanup edge cases, and editing errors in campaign routes. These fixes make promotion reporting and lifecycle handling more dependable.
  * **Return attachment uploads and suggested dispositions fixed.** Attachment upload links for return evidence now work correctly through the v1 file flow, and suggested return dispositions no longer disappear because of a server-side error. Return teams should see more reliable inspection guidance and upload behavior.
  * **Shopify payment and allocation recovery fixes.** Shopify unpaid-order resync now stops retrying resolved orders and avoids hiding failed captures. Marketplace import also no longer creates phantom reserved inventory for virtual kit-variant parent lines.
  * **Shipment and delivery backfills for older records.** Older packages and shipments with stale status data can now be healed more safely, including a one-time delivered status correction for pre-cutover shipments. This improves operational reporting without triggering unwanted emails or accounting side effects.

  ### API

  * **New dashboard timeseries endpoint.** A new read-only GET /dashboard/timeseries endpoint returns revenue and order series for a date range, with automatic day, week, or month bucketing. It also supports previous-period and previous-year comparisons for dashboard and mobile reporting.
  * **New returns and refund support endpoints.** The API now adds read-only endpoints for previewing return net refunds and refund breakdowns, plus list and rating endpoints that support RMAs ready for refund, customer return-label rates, and vendor RTV label rates. These additions make it easier to build accurate return and accounting experiences on top of Arcus.
  * **New returns reporting endpoint.** GET /reports/returns-by-reason is now available for return reason analytics with SKU-level reporting support. This endpoint powers the new returns reporting experience.

  ### Breaking changes

  * **Coupon delete now performs a real delete with in-use protection.** Deleting a coupon now permanently removes unused coupons instead of simply deactivating them. If a coupon has already been used, the delete request is blocked with a 409 response and you should deactivate it instead.
</Update>

<Update label="2026-06-26" description="v3.221.0" tags={["New","Improved","Fixed","API","Breaking"]}>
  **This release adds first-class fulfillment reversal, stronger Shopify and coupon automation, and important safety fixes across orders, refunds, inventory, and API access.**

  <Card title="Undo Fulfillment is now first-class">
    You can now reverse a fulfillment directly in Arcus when an order needs to be corrected after shipment work has started. The system also rolls back related inventory, accounting, serial handling, labels, and order state together so corrections stay consistent.
  </Card>

  ### New features

  * **Paid orders can now be revised from the order screen.** Teams can now intentionally revise a paid but not yet shipped order from the web app using a guided Revise Order flow with a required reason. This makes legitimate post-payment changes possible without resorting to workarounds.
  * **In-app What's New and forced reload experience.** Users now see a full-page update prompt when a new frontend build is available, with release highlights pulled from the changelog. The flow waits briefly before hard-blocking so it does not interrupt a half-finished form without warning.
  * **Shopify listing mapping tools expanded.** Shopify mapping screens now support richer product search, variant-aware matching, re-pointing active listings, and mapping multiple listings to one Arcus product. This makes it easier to manage alias listings and keep imported orders tied to the correct products.
  * **Shopify variant price sync for alias listings.** Arcus can now push base list prices to existing Shopify variants across alias listings without creating duplicate Shopify products. Price sync respects both connector-level and per-listing controls so merchants can opt in safely.
  * **Scanner device heartbeat support.** Scanner devices can now report their presence continuously while in use, helping shared workstations show whether a device is truly online. This improves confidence when assigning and using scanners in fulfillment.
  * **Arcus AI assistant feels faster and more natural.** The AI assistant now streams responses more smoothly, shows clearer live thinking progress, and handles read-only questions more gracefully even when you are in action-focused modes. Customers should notice a more responsive and less jarring assistant experience.

  ### Improvements

  * **Coupon auto-apply now updates on order header changes.** Automatic coupons are now re-evaluated when you change order-level fields such as account, sales channel, pricing tier, origin, or delivery method. Discounts appear or are removed immediately instead of waiting for a line item edit.
  * **Coupon builder prevents invalid free-item setups.** The coupon builder now blocks configurations that looked valid in the UI but could never actually add a free reward item. It also preserves readable product and category names when reopening larger scoped coupons and refreshes pricing tier choices correctly after entity changes.
  * **Zero-value orders can auto-resolve as paid.** Orders that total to zero, including fully discounted orders, now move into a paid state automatically when appropriate. This prevents free replacement or promotional orders from getting stuck behind payment gates.
  * **Pack suggestions and station updates are more accurate.** Packing suggestions now respect real preset quantities and product unit conversions, improving carton recommendations for ounce-based and other non-default measurements. Pack-created updates also appear live in fulfillment views without needing a manual refresh.
  * **Printing is now asynchronous and more reliable.** Print requests are now queued and processed in the background instead of holding up the order workflow. This reduces long waits, avoids false printer offline messages, and gives better status updates as jobs move from queued to printed.
  * **Scanner and websocket recovery is more responsive.** Fulfillment screens now recover faster from stale browser connections and sleeping devices. First scans after idle should appear sooner, and scanner presence updates are pushed more reliably after login or reclaim events.
  * **Shopify order and listing maintenance tooling improved.** This release adds safer workflows for rebinding alias listings, backfilling missing listing mirrors, repairing affected live Shopify kit orders, tightening unknown SKU defaults, and validating shipping method mapping defaults. Together these changes reduce import mismatches and make Shopify listing administration safer.

  ### Bug fixes

  * **Shipped and packed order lines are now properly locked everywhere.** Orders with fulfilled lines or partially packed physical goods can no longer be revised through override paths that were only meant for unpaid-state exceptions. This closes a case where already-shipped lines could still be edited and financial balances reopened incorrectly.
  * **Refund cap protection is stronger under concurrency.** Concurrent refunds against the same payment are now serialized more safely so Arcus does not over-disburse card or ACH refunds during race conditions. This reduces the risk of duplicate outward refunds when multiple attempts happen at once.
  * **External-tender returns now refund to clearing accounts correctly.** Returns tied to external tenders now route through the correct book-only refund path instead of failing as if a Stripe refund were required. This fixes blocked refunds for migrated orders and Shopify external payment scenarios.
  * **Inventory reversal and re-fulfillment accounting were corrected.** Several edge cases in undo fulfillment and re-fulfillment now restore and re-consume inventory correctly, including split packages, repeated undo and re-fulfill cycles, and multi-layer FIFO consumption. This prevents lost units, overstated stock, and related valuation drift.
  * **Undo eligibility now respects the real first ship date.** The undo window for fulfillment is now anchored to the first physical shipment rather than only the final fully fulfilled timestamp. Partially fulfilled orders can no longer bypass the configured time limit indefinitely.
  * **Shopify unfulfill retries now reach Shopify correctly.** Arcus now preserves the fulfillment identifiers needed to retry a failed Shopify unfulfill operation. Previously, some retries could be marked as successful without actually canceling fulfillment in Shopify.
  * **Amazon and eBay undo attempts now fail loudly instead of silently diverging.** If an undo flow reaches a marketplace that does not support the same fulfillment reversal behavior, Arcus now records that clearly instead of quietly leaving marketplace status out of sync. This makes intervention needs visible to operators.
  * **Shopify external payment deduplication was hardened.** Repeated Shopify payment updates no longer risk inserting duplicate external payment records for the same reference. This helps keep paid and refunded statuses accurate after refund-related webhook activity.
  * **Coupons now clamp fixed discounts to the current subtotal.** Fixed-amount discounts are now capped against the latest eligible subtotal in all cases. This prevents discounts from exceeding the order value and avoids negative order totals when lines are reduced or removed.
  * **Multi-scan serial capture works correctly.** Serial capture no longer breaks after the first successful scan in affected barcode modes. Users can continue scanning additional serials without needing to remove earlier captures.
  * **Order package cleanup handles serial-linked items more safely.** Deleting or unpacking an unfulfilled package now correctly releases linked serials first. This avoids failures when package items still had captured serial references.
  * **Tenant data isolation was tightened.** Several shared list endpoints now enforce entity scoping consistently, preventing unscoped access to records such as pricing levels, categories, payment terms, sales channels, and general ledger accounts. Customers benefit from stronger tenant isolation and cleaner picker results.
  * **Dev deployment reliability improved under parallel releases.** Concurrent deployments are less likely to interfere with each other during packaging and upload steps. This reduces failed release attempts during busy deployment windows.

  ### API

  * **Undo fulfillment is available through the public API.** The new fulfillment reversal capability is exposed through the same canonical backend flow used by the app, so API clients can reverse eligible fulfillments with the same business rules and protections.
  * **Order header updates now trigger coupon re-evaluation in API flows.** PATCH-style order updates through the API now recalculate automatic coupon eligibility when relevant header fields change. Integrations no longer need a follow-up line edit to get the correct discounts.
  * **Order line edit protections now apply consistently to API overrides.** API attempts to add, update, or delete lines on shipped or partially packed orders now honor the same physical-goods lock rules as the application. This closes an override gap that previously allowed unsafe edits in some edge cases.

  ### Breaking changes

  * **Several list endpoints now require explicit entity context.** API callers must now provide valid entity scoping when requesting shared reference lists such as pricing levels, categories, payment terms, sales channels, and chart of accounts data. Requests that previously returned unscoped results will now be rejected.
</Update>

<Update label="2026-06-26" description="v3.221.0" tags={["New","Improved","Fixed","API"]}>
  **This release makes fulfillment safer and more reliable with label-required shipping controls, better live updates, and more dependable printing and scanner behavior.**

  <Card title="Prevent shipping fulfillment without a label">
    You can now require a shipping label before a parcel shipment can be marked fulfilled, helping prevent orders from being sent without tracking or postage. Pickup orders and freight shipments are excluded, and authorized overrides are still available when needed.
  </Card>

  ### New features

  * **Optional label-required fulfillment rule.** A new Shipping setting lets your team require a label before fulfilling parcel shipments. The fulfillment screen now clearly blocks ineligible packages and explains why, so operators can fix the issue before shipping.

  ### Improvements

  * **Printing settings are clearer for each user.** Printing settings now clearly show that printer assignments and auto-print options are personal to each user, not shared across the team. A warning also appears when both auto-print options are enabled so you can avoid duplicate label printing.
  * **Fulfillment history is easier to work through.** Fulfilled packages now sort with the most recently fulfilled first, making recent work easier to find. Additional filters for carrier, account, date range, and search help teams locate shipments faster.
  * **Single-printer fulfillment printing is more flexible.** If no separate document printer is set, fulfillment can now use the label printer for both the shipping label and packing slip. This reduces setup friction for stations that use one printer for everything.

  ### Bug fixes

  * **Manual serial entry now saves exactly what you type.** Manually entered serial numbers are now accepted as typed instead of being forced through barcode scan parsing rules. This fixes cases where valid serials were rejected during manual capture.
  * **Shared fulfillment stations now update scanner capture live.** Serial capture screens now refresh in real time even when the scanner is tied to a different user than the person logged into the workstation. This makes shared stations more reliable during warehouse operations.
  * **Fulfillment screens refresh correctly after changes.** Order fulfillment views now update live after label purchases, voids, printing activity, ETA changes, freight dispatches, and related package changes. Teams no longer need to reload pages to see the latest status.
  * **Printer status indicator now reflects real live availability.** The printer status indicator in the header now responds to real-time printer availability instead of relying on a stale cached list. This helps teams see offline printers quickly and avoid failed print attempts.
  * **Auto-print fulfillment preference no longer resets unexpectedly.** The auto-print-on-fulfill preference is now saved more reliably and will not be unintentionally cleared during loading or save timing issues. This helps preserve each user's printing setup.

  ### API

  * **Package listing supports more fulfillment filters.** Package list endpoints now support additional filtering for carrier, account, and fulfillment date ranges, with the same support carried into the v1 endpoint for parity. This makes it easier to build shipment dashboards and reporting tools.
  * **Scanner heartbeat endpoint is available.** A scanner heartbeat endpoint is now registered for clients that want to report device presence or keepalive status. This prepares scanner integrations for more reliable online status handling.
</Update>

<Update label="2026-05-22" tags={["New","Improved","Fixed"]}>
  **App-wide search, smarter shipping, recurring accounting templates, and a sweep of permission, AR, and fulfillment fixes.**

  ### New features

  * **App-wide master search.** A new global search palette spans 11 record types (accounts, products, orders, invoices, POs, returns, packages, GL accounts, activity, communications, settings) with permission-filtered scopes, a redesigned panel, and match-context that shows *why* a result matched and disambiguates same-named accounts.
  * **Shipping rules suggestion engine + Pack-with-Arcus auto-buy.** A rules engine recommends carrier and service at pack time, and Pack-with-Arcus can buy the label automatically when a rule matches confidently, with a full audit trail. See [Shipping rules](/support/settings/shipping-rules) and [Packing](/support/fulfillment/packing).
  * **Auto-insurance from product toggle.** Products with `apply_freight_insurance` now drive insurance automatically at rate-shop and label-buy, with no per-order toggling. See [Shipments and rate preview](/support/fulfillment/shipments-rate-preview).
  * **Recurring journal entry templates.** Build recurring JEs from a wizard with six industry-standard starter templates (rent, depreciation, prepaid expense, accruals, allocations, payroll). See [Recurring journal entries](/support/accounting/recurring-journal-entries).
  * **Bulk-recognize pending leases.** Recognize multiple ASC 842 pending-recognition leases in one pass, with a guard against future-dated commencement. See [Leases](/support/accounting/leases).
  * **Bulk-reactivate recurring bill templates.** Reactivate paused recurring vendor bills in bulk, with an amber KPI banner that surfaces inactive templates. See [Recurring bills](/support/accounting/recurring-bills).
  * **Scheduled email send.** Schedule outbound customer emails for a later send time, with a dedicated Scheduled tab in the email log. See [Email log](/support/communications/email-log).
  * **Order share-token expiry detection.** Customer-share order links now detect expiry and surface a Regenerate CTA inline.
  * **Manual order hold.** Place a draft or open order on manual hold via a dedicated endpoint and order action. See [Order exceptions](/support/orders/order-exceptions).
  * **Serial capture, full flow.** RMA serial validation, 40+ UX improvements on capture, partial-capture, order-state gates, scanner connection status across surfaces, and a serial appendix on PDFs and CS-visible order detail. See [Serial capture](/support/fulfillment/serial-capture).
  * **Edit Package modal hardening.** Item-add now enforces item-on-order and quantity-cap invariants, with clearer disabled-state tooltips. See [Label reprint, void, and repack](/support/fulfillment/label-reprint-void-repack).
  * **Pickup no-show queue.** A dedicated page mirroring the late-shipments queue for orders the customer never picked up. See [Pickup no-show](/support/fulfillment/pickup-no-show).
  * **Operator-driven data export.** A new admin surface lets operators self-serve CSV exports of core records. See [Data export](/support/settings/data-export).
  * **PrintNode job status.** A poll-based job-status endpoint and a Check button on the printer dropdown confirm whether the last print actually landed. See [PrintNode](/support/fulfillment/printnode).
  * **Printer selection in the user dropdown.** Pick your default printer from the header user menu without leaving the page you're on.
  * **Damaged-unit photo evidence on PO receive.** Attach photos when receiving damaged units against a PO. See [Receive](/support/inventory/receive).
  * **Marketplace fee + processing fee tracking.** Channel fees and processing fees are now tracked per order and booked to GL. See [Marketplace connectors](/support/integrations/marketplace-connectors).
  * **Quarantine columns on inventory subledger detail.** Quarantined quantities are surfaced inline on subledger detail rows. See [Transactions](/support/inventory/transactions).
  * **System-generated entity codes.** New entities are assigned a collision-safe `ENT-NNNNN` code automatically. See [Entity settings](/support/settings/entity).
  * **API: copy product photo by URL.** `POST /v1/products/:id/images` ingests a product photo from a URL into Arcus storage. See the [Products API reference](/api-reference).
  * **API: polymorphic slug lookup.** GET endpoints for accounts, products, and purchase orders now accept either an ID or a slug.
  * **Shopify public-app OAuth.** The public-app OAuth flow is live for the Shopify App Store listing. See [Marketplace connectors](/support/integrations/marketplace-connectors).
  * **RingCentral voicemail + SMS webhook.** RingCentral message-store events now flow into the communications log. See [RingCentral](/support/integrations/ringcentral).

  ### Improvements

  * **Faster search.** GL, activity-log, and communications search are now index-backed; a trigram over-match fix and a TOASTed-blob fix drop a worst-case query from \~18.7s to \~148ms.
  * **Faster GL subledger reconciliation.** The subledger-reconciliation detail view is re-indexed and restructured; a former 29s timeout now clears cleanly. See [GL reconciliation integrity](/support/accounting/gl-reconciliation-integrity).
  * **Compact carrier icons everywhere.** Operational surfaces now use compact circular monogram icons for every carrier.
  * **PackPilot leftover messages.** PackPilot now shows a per-reason explanation and a dimmed comparison when a box can't be used, instead of a generic decline. See [Packing](/support/fulfillment/packing).
  * **Shopify Configure modal.** Platform filter, scoped accounting tab (Shopify-only), and a sweep of UI fixes across six tabs.
  * **Connector accounting tabs re-homed.** Stripe, eBay, and Amazon accounting configuration now lives on the connector itself, with grid UX fixes throughout.
  * **Realtime refresh across settings.** Sixteen settings sections now refresh automatically when another user changes them, instead of requiring a reload.
  * **PDF refresh.** Customer-facing PDFs use dynamic line-item rows, cleaner typography, and better long-content wrapping; payment-instructions auto-detect banking patterns and mask sensitive values.

  ### Bug fixes

  * **AR figures, one source of truth.** Dashboard, AR management, invoices, /ar/summary, and /credit-summary now converge on a single canonical reader, so totals match across screens. See [AR management](/support/accounting/ar-management).
  * **Voided invoices no longer inflate revenue.** The dashboard revenue tile and analytics revenue queries exclude voided invoices via the canonical two-mode predicate. See [Dashboard calendar](/support/accounting/dashboard-calendar).
  * **Order-level discount now reduces taxable base.** A P1 overcharge where order-level discounts weren't reducing tax is fixed; a one-time backfill corrects previously overcharged orders. See [Sales tax liability](/support/accounting/sales-tax-liability).
  * **Restock disposition restores inventory and reverses GL.** Restocking a return now restores inventory, reverses the original COGS/Inventory entry, and records the refund payable. See [Customer returns](/support/returns/customer-returns).
  * **Fulfillment GL posting.** Fulfillment journal entries now post DR COGS / CR Inventory correctly, fixing a balance-sheet integrity gap.
  * **Refund math + refund JE write-back.** Refund duplicate-GL fix, refund JE id write-back, and multi-package tax idempotency.
  * **Refund / void Separation of Duties.** SoD is now configurable and aware of single-user setups.
  * **Kit handling.** Kit-component allocated regression fixed; kit receive on returns no longer trips the negative-balance guard; kit-parent on-hand and opening-balance subledger integrity tightened.
  * **PO receive 500.** A missing `KIT_COST_REVALUATION` journal-source enum value caused PO receive to 500 in some accounts; fixed.
  * **Vendor bill JE dates.** Vendor-bill JE entry dates are clamped to the posting date and never future.
  * **Vendor credit applications.** `VENDOR_CREDIT_APPLICATION` is now a recognized journal-source type, ending a class of AP posting errors.
  * **Customer Credits GL account.** GL account 2300 is renamed from "Customer Escrow" to "Customer Credits" to remove name collisions.
  * **JE entry date timezone shift.** Entry-date timezone shift fixed; JE list now shows the creator.
  * **Profile self-edit.** Self-edits to your own profile work again under restricted roles.
  * **Permission gating sweep.** Nine previously ungated mutation domains are now permission-gated; dashboard financial widgets and settings nav links are hidden for roles that can't use them; warehouse and accountant role defaults narrowed (warehouse `accounts.view`, accountant `users.view`, viewer/auditor financial-read scope tightened). See [Roles and permissions](/support/settings/roles-permissions).
  * **Coupons / pricing policies / templates** GET endpoints are now permission-gated, and warehouse navigation hides them.
  * **Customer-share invoice URL.** Two-mode invoice predicate fix ends a P0 where some customer-share document URLs returned the wrong document.
  * **Open POs count.** The nav badge and the Open POs list now query the same canonical source, ending count mismatches. See [Create and manage POs](/support/purchasing/create-manage-pos).
  * **Returns list account name.** The returns list now resolves the customer account name properly. See [Customer returns](/support/returns/customer-returns).
  * **Unmatched receipts.** Real payment-application objects are now inlined on unmatched-receipt rows in the AR bank-feed workspace. See [Bank feed match workspace](/support/accounting/bank-feed-match-workspace).
  * **Shipments page.** Credentialed fetches now work end-to-end (CORS), and shipped packages without a tracking number are now displayed instead of hidden.
  * **Fulfillment messaging.** The fulfillment decoration pipeline now returns a real result or error instead of an opaque modal.
  * **Order detail.** Variant-order confirm, kit explosion guard, entity-scoped items query, and a clearer SQLSTATE mapping fix three order-detail edge cases.
  * **Bin assignment.** Bin assignment is now conditional on the bin-tracking setting, so non-bin warehouses no longer see spurious bin prompts. See [Bin setup](/support/warehouse/bin-setup).
  * **Cancel Order CTA.** Draft and open orders now have a prominent Cancel Order action on the detail page. See [Order lifecycle](/support/orders/order-lifecycle).
  * **Walk-in pack** path now goes through the standard fulfillment guards. See [Walk-in pack](/support/fulfillment/walk-in-pack).
  * **Wave-pick and no-show selects.** Native `<select>` controls on fulfillment-adjacent pages are canonicalized to the styled control.
  * **Printer dropdown after entity switch.** The printer list no longer shows stale entries after switching entities.
  * **Refund-due CTA URL.** The refund-due action now routes to the correct payments section. See [Customer returns](/support/returns/customer-returns).
</Update>

<Update label="2026-05-15" tags={["New","Improved","Fixed"]}>
  **Accounting depth, faster purchasing, smarter fulfillment, and safer entity management.**

  ### New features

  * **AR bank reconciliation, multi-invoice mode.** The match workspace now groups customer payments against multiple open invoices with an auto-suggest matcher and a dedicated unmatched-receipts queue, with live updates as activity comes in. See [Bank feed match workspace](/support/accounting/bank-feed-match-workspace).
  * **Payment wizard, multi-invoice mode.** Apply a single customer payment across several invoices in one atomic step, with new entry points from the customer record and AR aging. See [Record payment](/support/orders/record-payment) and [AR management](/support/accounting/ar-management).
  * **AR and AP aging dashboard tiles + DSO.** The accounting dashboard adds AR and AP aging tiles and a DSO tile, with net-of-credit-balance exposure for AR. See [Dashboard calendar](/support/accounting/dashboard-calendar).
  * **Customer deposits, before a sales order exists.** Take and track a customer deposit before a sales order is written, with a dedicated subledger that later applies cleanly to the resulting order or invoice. See [Record payment](/support/orders/record-payment).
  * **Vendor prepayments, before a bill exists.** Mirror of the above on the AP side: pay a vendor before a bill is recorded and reconcile when the bill arrives. See [Pay bills](/support/accounting/pay-bills).
  * **Vendor bill write-off.** Write off the open balance on an AP bill with a posted, audit-trailed adjustment. See [AP bills](/support/accounting/ap-bills).
  * **Customer statements with opening + running balance.** Statements now show an opening balance and a chronological running balance, matching how most customers reconcile. See [AR management](/support/accounting/ar-management).
  * **GL year-end close + retained earnings rollover.** Closing the last period of a fiscal year now rolls income and expense into retained earnings automatically, and Arcus suggests the close when it detects the last-period flip. See [Period close](/support/accounting/period-close).
  * **Fiscal year reopen.** Reopen a closed fiscal year (for example, to post a late audit adjustment) with a controlled, logged action. See [Period close](/support/accounting/period-close).
  * **Finance charges and late fees.** Automatic finance-charge assessment with flat-fee and percentage modes, optional caps, and surface on customer statements. See [AR management](/support/accounting/ar-management).
  * **Multi-vendor reorder wizard.** The reorder wizard now spans multiple vendors in one pass, honors MOQ overrides, and exposes on-hand inventory inline. See [Reorder report](/support/purchasing/reorder-report).
  * **"Pay bills due in N days" filter.** A new quick filter and date param on the Pay Bills screen for prioritizing upcoming payments. See [Pay bills](/support/accounting/pay-bills).
  * **Create Return and Issue Refund on the order action bar.** Both actions are now top-level buttons on the order page so they are discoverable without drilling into a menu. See [Customer returns](/support/returns/customer-returns).
  * **Per-location box availability in PackPilot.** PackPilot suggestions now respect the box inventory at the location actually shipping the order, so packers stop seeing boxes that aren't on their shelf. See [Packing](/support/fulfillment/packing).
  * **Location lifecycle: delete, retire, reactivate.** Locations now have a full lifecycle with system-location protection, so unused warehouses can be retired without breaking history. See [Settings overview](/support/settings/overview).
  * **Entity and organization teardown with Danger Zone.** Inline per-tile Delete on the entity admin screen plus a guarded Danger Zone for full entity or organization removal, with a deactivate-first flow for young entities. See [Entity settings](/support/settings/entity) and [Organization access](/support/settings/organization-access).
  * **Manage Access rework.** The Manage Access screen has a cleaner two-row layout, an entity selector, and consolidated user-access management. See [Users](/support/settings/users) and [Organization access](/support/settings/organization-access).

  ### Improvements

  * **Marketplace outbound retry parity** across Amazon and eBay connectors so retry behavior is consistent between channels. See [Integrations](/support/settings/integrations).
  * **Vendor account picker** now disambiguates same-named vendor accounts inline, instead of showing duplicate rows.
  * **Invoice settings** consolidated into a single screen with clearer partial-payment UX. See [Document numbering](/support/settings/document-numbering) and [AR management](/support/accounting/ar-management).
  * **Purchase order wizard polish** plus a Send-to-Vendor action and stricter PO document fields. See [Create and manage POs](/support/purchasing/create-manage-pos).

  ### Bug fixes

  * **Return eligibility** had three edge cases where ineligible returns could slip through; the decision tree now closes those holes.
  * **Reorder wizard** previously showed zero POs in some accounts; the wizard state is now hydrated correctly.
  * **PO detail and document** screens had three surface defects affecting display and editing; all three are fixed.
  * **Refund amounts** now compute from a single source of truth, so partial-refund math is consistent across order, invoice, and payment surfaces.
  * **Return quantity over-cap** now returns a clear, human-readable hint instead of a raw machine code.
  * **Auto-fulfillment** correctly surfaces the "serial number required" message and no longer double-fulfills when called twice in quick succession.
  * **Drop-ship cascade** is now atomic - partial failures roll back instead of leaving an order in a split state.
  * **Auto-pack** respects the missing-tag gate, so untagged orders stop slipping into the packing queue.
  * **Walk-in pack** path now goes through the same fulfillment guard checks as the rest of the system.
  * **MFA email enrollment** no longer invalidates the first code when a second is sent, and surfaces send failures instead of silently dropping them.
  * **Entity logo and file uploads** previously failed with a 403 on the presigned upload; uploads now succeed end-to-end.
  * **Onboarding wizard** no longer overwrites a random system location when confirming the default warehouse; the step is now clearly framed as confirming a pre-seeded warehouse. See [Quick start](/support/getting-started/quick-start).
  * **Customer credit balance** is now reflected in AR aging exposure (gross and net of credit).
  * **Dashboard unpaid-invoices action** routes to the Invoices screen with the Open tab pre-selected, not to Orders.
  * **Packing presets** CRUD now reads and writes the correct configuration store, so saved presets persist.
</Update>

<Update label="2026-05-12" tags={["API"]}>
  **Accounting + GL cluster, scope rendering, expand registry expansion, dev-tab fixes.**

  * Added accounting / GL endpoints to the spec: GL accounts CRUD, journal entries (with approve, reject, reverse), fiscal periods (close, reopen), bank accounts, recurring journal entries, customer credits, deposits, dimension masters (departments, classes, projects), financial reports (trial balance, P and L, balance sheet, cash flow, AR aging, AP aging).
  * Webhook concepts page rewritten with the canonical 118-event catalog across 14 families and the correct retry schedule (1m, 5m, 30m, 2h, 12h, 24h).
  * `?expand[]=` registry expanded to 23 resource types: kit, variant, channel\_listing, marketplace\_order, vendor\_credit, vendor\_return, credit\_memo, ap\_payment, printed\_check, label, tracking\_event added.
  * Required-scope badges now render under each operation as a Mintlify Note callout.
  * Pagination max `limit` raised from 100 to 500 for bulk catalog scans.
  * 6 missing component definitions added (`Limit`, `StartingAfter`, `EndingBefore`, `Fields`, `IdempotencyKey`, `Error`).
  * Docs domain `docs.arcuserp.com` confirmed live via Mintlify CNAME.
</Update>

<Update label="2026-05-01" tags={["New"]}>
  **Initial public release of the Arcus ERP API.**

  ### New resources

  * **Accounts** -- `GET/POST/PATCH/DELETE /v1/accounts`
  * **Orders** -- `GET/POST/PATCH/DELETE /v1/orders` (quotes, sales orders, invoices, purchase orders, returns)
  * **Products** -- `GET/POST/PATCH/DELETE /v1/products`
  * **Inventory** -- `GET/POST /v1/inventory` (balances, transactions, adjustments)
  * **Fulfillment** -- `GET/POST/PATCH /v1/fulfillment` (packages, labels, shipments)
  * **Returns** -- `GET/POST/PATCH /v1/returns`
  * **Purchasing** -- `GET/POST/PATCH /v1/purchase-orders`
  * **Payments** -- `GET/POST /v1/payments`
  * **Accounting** -- `GET/POST /v1/accounting` (GL accounts, journal entries)
  * **Master data** -- Locations, Payment Terms, Units of Measure, Sales Channels, Pricing Levels, Product Categories, Tags
  * **Integrations** -- `GET/PATCH /v1/integrations` (connector configuration, read-only credential status)
  * **Webhooks** -- `GET/POST/PATCH/DELETE /v1/webhooks`
  * **Activity** -- `GET /v1/activity` (audit log)
  * **Migration** -- `GET/POST /v1/migrations` (bulk import jobs)

  ### New capabilities

  * **Cursor pagination** on all list endpoints
  * **Expand** (`?expand[]=`) -- Stripe-style related-resource hydration, depth 4, 10 paths max
  * **Idempotency** (`Idempotency-Key` header) -- 24-hour replay window
  * **Versioning** (`Arcus-Version` header) -- date-based version pinning
  * **Conditional requests** (ETag/`If-None-Match`) -- 304 Not Modified support
  * **Sparse fieldsets** (`?fields=`) -- reduce response payload size
  * **Rate limiting** -- per-key sliding window, standard 300 req/min
  * **Webhook signatures** (HMAC-SHA256, `Arcus-Signature` header)
  * **Sunset headers** on deprecated endpoints
</Update>

***

*Future releases will be listed here. Follow [github.com/arcuserp](https://github.com/arcuserp) for release announcements.*
