What this audit checks
Authentication & access
- Access token present and not within 7 days of its 30-day expiry
- Refresh-token rotation succeeding; no refresh failure in the last 24h
- Required read scopes granted: MERCHANT_PROFILE_READ, ITEMS_READ, ORDERS_READ, CUSTOMERS_READ, INVENTORY_READ
- Default location_id resolved; multi-location merchants have a rollup or fan-out strategy set
- Production base URL in use (connect.squareup.com, not the sandbox host) for live integrations
Catalogue & inventory health
- Items missing a SKU below threshold (SKU-less items break inventory and cross-channel parity)
- POS-sellable items not visible online (ecom_visibility in HIDDEN, UNINDEXED, UNAVAILABLE) flagged as underused online channel
- Out-of-stock variations still ecom_visibility VISIBLE on Square Online
- Negative or implausible on-hand counts in the Inventory API
- POS to Online inventory drift: variation on-hand differs between channels (root oversell risk)
- Zero-priced visible items (price_money.amount of 0 with ecom_visibility VISIBLE)
Order & fulfilment health
- Order completion rate at or above 95% (COMPLETED over OPEN plus COMPLETED plus CANCELED)
- Cancellation rate within expected band; no spike vs prior period
- Open orders not piling up beyond 2x the 30-day average (fulfilment backlog)
- Canceled orders in the last 24h below threshold
- Fulfilment state progressing; no orders stuck in PROPOSED or RESERVED beyond SLA
Customer & retention
- Repeat customer rate at or above 25% on a 30-day window
- Customer Directory fragmentation: same email_address across creation_source TERMINAL (POS) and ONLINE_STORE not unified into one profile
- Email-opted-in share of the Directory healthy and not eroding (preferences_email_unsubscribed trend)
- New-customer capture by source (POS vs online) tracked for channel-of-first-touch attribution
Payments & refunds
- Refund rate below baseline; no refund spike signalling a quality or fulfilment regression
- Refund amount reconciles against originating order total_money (no orphan refunds)
- Payment success rate healthy; declines and failures within expected band
- Net revenue after refunds reconciles against gross order revenue for the window
Cross-channel revenue at risk
- POS vs Online inventory parity: SKUs with a POS-to-online on-hand mismatch sized as oversell exposure
- Square inventory vs marketplace listings: SKUs out of stock on Square but still active on Amazon / eBay / Walmart
- Square online orders unattributed despite an active email-marketing sibling (Mailchimp / Klaviyo)
- High-value Square customers (spend above P90) unengaged on email (last_open_at older than 90 days)
Severity thresholds
| Signal | Warn | Critical |
|---|---|---|
refund_rate | 2 | 5 |
cancellation_rate | 5 | 10 |
conversion_rate | 1.5 | - |
out_of_stock_count | 3 | 10 |
fulfillment_rate | 95 | - |
Data sources
GET https://connect.squareup.com/v2/locations- Active locations, capabilities, POS-only vs online-enabled classificationGET https://connect.squareup.com/v2/catalog/list- Unified Catalog items, ecom_visibility, sku, price_money, present_at_all_locationsPOST https://connect.squareup.com/v2/orders/search- Orders by location with state, source_name (channel), total_money, customer_idPOST https://connect.squareup.com/v2/inventory/counts/batch-retrieve- On-hand counts per variation per location for POS-to-online drift detectionGET https://connect.squareup.com/v2/customers- Customer Directory, email_address, creation_source for fragmentation diagnosticGET https://connect.squareup.com/v2/payments- Payment outcomes for success rate and net-revenue reconciliationGET https://connect.squareup.com/v2/refunds- Refund objects for refund rate and order reconciliationPOST https://connect.squareup.com/oauth2/token- Refresh-token rotation health (30-day token lifetime)