Version 5.0.0

August 20, 2026

Initial release.

Added

  • OAuth2 connection to FreshBooks, with token refresh serialised under a mutex so concurrent queue workers cannot invalidate each other's one-time-use refresh token.
  • Commerce orders become FreshBooks invoices: line items, line and order discounts, shipping, per-line percentage taxes derived from Commerce's tax rates, and inclusive tax split out of the price so the totals still match.
  • Customers become FreshBooks clients, matched on email so repeat guest checkouts do not accumulate duplicates.
  • Successful transactions become FreshBooks payments; refunds become credit notes.
  • Claim → reconcile → create protocol, so a retry after a failed or interrupted sync adopts the invoice it already created rather than creating a second one.
  • Totals are computed the way FreshBooks computes them and compared with the order before anything is sent; a mismatch is either reconciled with a rounding line or refused outright.
  • FreshBooks callbacks bring invoice status and paid amounts back into Craft, with HMAC verification and a re-fetch-don't-trust policy on the payload.
  • CP section listing every invoice with its state, a preview of exactly what will be sent, and a FreshBooks panel on Commerce's order edit screen.
  • Console commands for backfills, retries, pulls, connection health and callback management.
  • Connection log with redacted payloads and configurable retention.