A real cash register, built into the same system as your card sales
Open and close registers per location per day, log every transaction with a staff PIN, hand cash between shifts with receiver confirmation, file expenses with receipts, and reconcile expected vs actual balance at end of day. CSV export for accounting.




One register per location per day — opened, closed, reconciled
Open the register at start of shift with a known opening balance. The system tracks cash in, cash out, expenses, and the expected balance in real time. At end of shift you enter the actual count, the system flags discrepancies, and the register transitions through OPEN → CLOSED → RECONCILED (or DISCREPANCY if the count doesn't match).
- Unique register per (locationId, date) — no double-counting
- Opening balance set at open, used as the reconciliation baseline
- Live totals: cash in, cash out, expenses, expected balance
- Actual balance entry at close with discrepancy auto-calc
- Status flow: OPEN → CLOSED → RECONCILED / DISCREPANCY
- Multi-location, multi-day — every register is separate

Five transaction types — every cash movement classified
Every cash movement gets a type so end-of-day reconciliation actually means something. Sales credit the register, change-given debits it, refunds debit it, adjustments correct keying mistakes, and expenses are tracked separately for accounting. Each transaction is tied to a staff member by staffId AND staff PIN.
- SALE — cash sale at the kiosk
- CHANGE_GIVEN — change handed back to a customer
- REFUND — cash refund (refund-policy enforced)
- ADJUSTMENT — manual correction with reason
- EXPENSE — cash spent on supplies or operations
- Indexed by register, staff, and order for fast audits

Staff PIN audit trail on every transaction
Every cash transaction stores the staffId of the person who handled it AND the staff PIN they entered. End-of-shift cash audits roll up by staffId, so if there's a discrepancy you can see exactly which staff member's transactions diverge from expected. Cash handovers between shifts require receiver confirmation before the cash is considered transferred.
- staffId + staffPin recorded on every CashTransaction
- Per-staff cash audit at end of shift
- CashHandover model: from-staff, to-staff, amount, denomination, notes
- Handover requires receiver confirmation (confirmedByReceiver flag)
- confirmedAt timestamp lets you see how long handovers sit unclaimed
- Refund linkage by orderId — every cash refund traces to its sale

Expenses with receipts + end-of-day reconciliation + CSV export
Cash expenses (a bag of ice for the kiosk, batteries for a camera) record with reason, staffId, optional approver, and a receipt URL. End-of-day reconciliation at /api/admin/reconciliation rolls cash + card + photographer totals for the date, scoped to your org and allowed locations. CSV export takes 30 days of activity in one click.
- CashExpense — amount, reason, staffId, approvedBy, receiptUrl
- Reconciliation endpoint: GET /api/admin/reconciliation?date=YYYY-MM-DD
- Reconciliation scoped to caller's org + allowed locations (audited)
- Cash + card + photographer totals rolled per date
- Per-venue dashboard at /v/[slug]/cash; admin-wide at /admin/cash
- 30-day CSV export at /api/admin/cash/export?days=30

Everything included
No feature gates. No hidden upgrades. Get the full experience from day one.
One register per location per day
Unique (locationId, date) constraint prevents double-counting.
Opening balance + live totals
Cash in, cash out, expenses, expected balance updated in real time.
End-of-shift actual count
Enter actual balance; system computes discrepancy automatically.
5 transaction types
SALE / CHANGE_GIVEN / REFUND / ADJUSTMENT / EXPENSE.
Staff PIN audit trail
Every transaction tagged with staffId + staffPin for shift audits.
Cash handovers
From-staff → to-staff with denomination, notes, and receiver confirmation.
Receiver-confirmed handovers
confirmedByReceiver flag + timestamp; unconfirmed handovers flagged.
Expense tracking with receipts
CashExpense — amount, reason, staffId, approver, receipt URL.
End-of-day reconciliation
Cash + card + photographer totals rolled per date, scoped to org.
Per-venue + admin dashboards
/v/[slug]/cash for venue CEOs; /admin/cash for HQ.
30-day CSV export
Cash + commission + handover data for accountants.
Refund linkage by orderId
Cash refunds always trace to the original sale.
Who it's for
Hotel kiosk that takes cash
Photographer opens the register at 09:00 with €100 float. Every cash sale, change-given, refund, and expense recorded with their PIN. At 22:00 they close — actual count vs expected balance. Discrepancy flag if they don't match.
Multi-shift water park
Morning shift hands cash to evening shift via CashHandover. Receiver confirms receipt with their PIN. If the handover sits unconfirmed, end-of-day reports flag it. No more 'I gave it to her, ask her' disputes.
Venue ops manager auditing staff
Per-staff cash audit shows every transaction with that staffId across the day. If one staff member's transactions consistently diverge from expected, the audit log tells you immediately — no need to scrub spreadsheets.
Accountant filing monthly reports
30-day CSV export at /api/admin/cash/export gives the accountant cash + commission + handover data for the month, ready to import into their software. End-of-day reconciliation is already done — they're verifying, not reconstructing.
Full feature list
Square handles cash but doesn't tie it to your photo gallery system. Generic POS tools track cash but not commissions or photographer payouts. Fotiqo's cash register is in the same database as the gallery, the order, the commission, and the refund — so end-of-day reconciliation rolls every revenue stream into one report.
Compare plans“Fotiqo has everything I need in one place. I stopped paying for four separate tools and my workflow is so much simpler now.”
Ready to get started?
Free to start. No credit card. No monthly fees on the Starter plan.
See cash management