# Webhooks and freshness

> Xero notifies you about four categories — contacts, invoices, credit notes and subscriptions. QuickBooks notifies you about most. NetSuite does not notify you at all. None of them sends the data — every notification is an instruction to go and fetch.

Source: https://lopifi.com/apis/webhooks-and-freshness
Part of: Lopifi — US GAAP books on autopilot, reviewed by a CPA (https://lopifi.com)

---

**How do you find out something changed?** Freshness is a property your interface must state. Poll-based sources have an age, and the user is entitled to see it.

## Divergences between Xero, QuickBooks Online and NetSuite

### Every webhook is a notification, not a feed

You receive 'invoice X changed' and must fetch the invoice. That fetch counts against the same rate limit as everything else, so a burst of webhooks during a bulk edit in the ledger's own UI can exhaust your minute budget and delay everything else.

**Handling:** Enqueue notifications, coalesce duplicates for the same record, and fetch through the same limiter as the rest of the sync. Never fetch inline in the webhook handler — return 2xx first.

### Xero disables an endpoint that fails validation

The intent-to-receive handshake must succeed before any business logic runs: Xero sends signed and deliberately mis-signed requests and expects 200 and 401 respectively, within five seconds. A slow or failing endpoint gets turned off rather than retried indefinitely. A deployment that breaks the signature check silently stops all notifications.

**Handling:** Verify the signature and return 2xx within the timeout, before any processing. Monitor for the absence of webhooks as an alarm condition — silence looks identical to nothing happening.

### NetSuite has no webhooks

The substitutes are a user event SuiteScript that calls out on save — which puts your endpoint's availability in the path of the customer's ability to save a record — or scheduled polling on lastmodifieddate.

**Handling:** Poll by default. Offer the script only where the customer's own team maintains it, and never let a callout block a save.
