Lightspeed integration help
Everything you need to know to get TimeCinch and Lightspeed Retail (X-Series) working together — from first connection to day-to-day operation. If you get stuck, email hello@timecinch.com and a real engineer will reply.
Getting started
Connecting Lightspeed takes about a minute.
- Open Settings in TimeCinch and scroll to the Integrations section.
- Click Connect Lightspeed. You'll be redirected to Lightspeed to authorize TimeCinch.
- Log in to Lightspeed (if you aren't already), review the requested permissions, and click Authorize.
- You'll land back in TimeCinch with the integration status showing Connected. The initial sync runs automatically over the next few minutes.
Only the business owner can connect Lightspeed. Staff accounts can't initiate or disconnect the integration.
First sync: we mirror customers, products, outlets, registers, users, taxes, and the last 90 days of sales. This happens in the background — you can keep working while it runs. The integration status panel shows progress and any errors.
What syncs
Here's every piece of data that moves between TimeCinch and Lightspeed, and what triggers the sync.
| Entity | Direction | Trigger |
|---|---|---|
| Customers | Both | Webhook on Lightspeed customer.update; auto-push to Lightspeed on first booking; 5-minute reconciliation cron as a safety net. |
| Sales | Both | TC → LS: on appointment checkout. LS → TC: on sale.update webhook + daily history pull for the last 90 days. |
| Products | LS → TC | Webhook on product.update; full mirror refreshed during initial connect and via the manual re-sync button. |
| Outlets, registers, users, taxes | LS → TC | Pulled at connect-time and on demand. Used to enrich sale pushes with the correct register, cashier, and tax ID. |
| Inventory adjustments | TC → LS | On appointment completion, for each back-bar product mapped to the service. |
| Loyalty earn | TC → LS (implicit) | Handled by Lightspeed itself when we push the sale with the customer attached. |
| Gift card balance + redemption | Both | Balance lookup at checkout (read); redemption posted as a payment split when the sale is pushed. |
| Customer tags (tc:*) | TC → LS | Daily for active customers; on key state changes (first visit, no-show, etc.). |
| Refunds / voids | LS → TC | Webhook on sale.update with a refund or void status; appointment status auto-adjusted. |
In addition to event-driven webhooks, a reconciliation job runs every 5 minutes to catch anything that slipped through — e.g. a webhook delivery that retried out of order or a Lightspeed update that arrived while TimeCinch was redeploying.
Setting up services
For Lightspeed sales to ring up correctly, each TimeCinch service needs to point at a corresponding Lightspeed product. This is a one-time setup.
Map a service to a Lightspeed product
- In Lightspeed, create a product representing the service (e.g. “Haircut — 45 min”). Set the price, tax class, and any loyalty rate you want applied.
- In TimeCinch, open Manage → Services and edit the service.
- Pick the matching product from the Lightspeed product picker. Save.
TimeCinch only ever pushes sales for services with a mapped product. If you forget to map one, the appointment still works inside TimeCinch — it just won't hit your register until you map it.
Add back-bar products
Back-bar products are consumables used during a service (color, developer, towels, etc.). Map them once and they auto-deduct on every appointment. See Inventory deduction below.
Payments
Lightspeed is the source of truth for payments. When you connect, TimeCinch stops trying to track payment state on its own and defers entirely to Lightspeed.
How it works
- When an appointment is checked out, TimeCinch pushes the sale to Lightspeed with status open.
- Your team rings up the customer in Lightspeed as usual — card, cash, gift card, split tender, anything.
- The moment Lightspeed marks the sale closed, a webhook fires and TimeCinch flips the appointment to paid.
- If the sale is voided or refunded later, TimeCinch updates the appointment status to match.
Manual override for cash / Venmo / etc.
If you take an off-Lightspeed payment (Venmo, Zelle, cash outside of any register), open the appointment in TimeCinch and click Mark paid manually. This won't create a sale in Lightspeed — it's an explicit override stored only in TimeCinch. We surface a small “Not in Lightspeed” pill on these appointments so they're obvious in reports.
Loyalty & gift cards
Loyalty earn
Loyalty earn is set up entirely in Lightspeed. TimeCinch pushes sales with the customer attached, and Lightspeed applies your loyalty earn rate automatically — exactly the same way it would for a retail sale.
To change the earn rate: open Lightspeed → Setup → Loyalty and adjust the rate. There's nothing to change in TimeCinch.
Gift card redemption at checkout
- Open the appointment in TimeCinch and click Apply gift card.
- Enter the gift card number. We look up the balance from Lightspeed in real time.
- Choose how much to apply (default: the full balance, up to the sale total).
- Push the sale. TimeCinch splits the payment line — gift card amount goes to the gift_card payment type, the remainder is paid normally in Lightspeed.
If the gift card balance covers the full sale, the appointment goes paid immediately. If there's a remainder, the sale stays open in Lightspeed until the rest is paid.
Inventory deduction
Map back-bar products to a service once and TimeCinch will auto-deduct them in Lightspeed every time that service is performed. No more guessing when you'll run out of color, developer, or towels.
Map back-bar
- In TimeCinch, open Manage → Services and pick a service.
- Under Back-bar products, click Add product.
- Pick the Lightspeed product (e.g. “Wella Developer 20 vol”) and enter the quantity used per appointment (e.g. 0.1 bottles).
- Repeat for every consumable. Save.
Each time you complete an appointment with that service, TimeCinch pushes an inventory adjustment to Lightspeed. Your stock counts stay accurate without anyone having to manually log usage.
Refunds & voids
Refunds and voids happen in Lightspeed; TimeCinch follows along.
- Voida sale in Lightspeed → the linked appointment in TimeCinch reverts to unpaid and the timeslot becomes editable again. If the appointment is in the past, it stays in the past — we don't delete history.
- Partial refund in Lightspeed → the appointment is annotated with the refund amount and flagged so you can follow up.
- Full refund in Lightspeed → the appointment is marked refunded and excluded from revenue reports.
You can always re-push a sale from the appointment if something gets out of sync — see Troubleshooting.
Troubleshooting
A sale didn't push
Most common cause: the service isn't mapped to a Lightspeed product. Open the service and add a mapping, then re-push the sale from the appointment detail page.
A customer is missing or duplicated
Click Sync customers now in Settings → Integrations. This forces a full reconciliation, which matches existing Lightspeed customers to TimeCinch customers by email and dedupes anything it created in error.
The integration shows “Disconnected”
Lightspeed's refresh tokens are single-use. If something interrupted a refresh (e.g. our service was down for maintenance during a refresh attempt), the connection can drop. Click Reconnect; the OAuth flow is fast and your historical data is retained.
Everything looks stale
Click Re-sync everything in Settings → Integrations. This triggers a full reload of customers, products, outlets, registers, users, taxes, and the last 90 days of sales. Takes a few minutes; safe to run any time.
Still stuck?
Email hello@timecinch.com with your business name and a description. A real engineer will reply, usually within a few hours during business days.
API scopes & why we need each one
When you connect Lightspeed, you authorize TimeCinch with a specific list of scopes. We follow least-privilege — we ask for what we use and nothing more.
| Scope | Used for |
|---|---|
| customers:read | Mirror your Lightspeed customers so bookings are linked to the right record. Also reads loyalty balances stored on the customer. |
| customers:write | Create new customers in Lightspeed when someone books for the first time on TimeCinch, and update tags + contact info. |
| products:read | Mirror your product catalog so you can map services and back-bar products from TimeCinch. |
| sales:read | Pull sale history and listen for sale-status changes (paid, voided, refunded) to keep appointments in sync. |
| sales:write | Push appointment sales to your Lightspeed register so they can be paid through your existing checkout flow. |
| outlets:read | Enrich sale pushes with the correct outlet — required by the Lightspeed API. |
| registers:read | Enrich sale pushes with the correct register so they ring up at the right station. |
| users:read | Attribute the sale to the right cashier (the staff member who performed the service). |
| taxes:read | Apply the right tax rate to each sale line — required by the Lightspeed API. |
| inventory:read | Read stock counts so we can show them beside service ↔ product mappings. |
| gift_cards:read | Look up gift card balances at checkout time so customers can redeem against an appointment. |
| gift_cards:write | Split the sale payment line onto the gift_card payment type when a customer redeems at checkout. |
| webhooks | Subscribe to events on your account (sale.update, customer.update, product.update, inventory.update) so changes flow back in real time. |
Data & security
We take Lightspeed merchant data seriously. The short version:
- No card data ever touches our servers — Lightspeed handles all PCI-scope work.
- Tokens are encrypted at rest in Supabase Postgres. Refresh tokens rotate on every use.
- Webhook deliveries are HMAC-SHA256 signed and verified with a timing-safe compare.
- Disconnecting voids your webhook subscriptions in Lightspeed and clears all mirrored data on our side.
Full details on the Lightspeed data handling page.
Support
We're a small team, which means you get direct access to the engineers who built the integration.
- Email: hello@timecinch.com
- Contact form: /contact — goes directly to the dev team
- Health status: /api/health/lightspeed
Please include your business name (or the email the account is registered under) so we can find your integration quickly.