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.