Every sale, every commission, every payout — tracked from the moment it lands
Stripe Connect onboarding for your org, automatic commission entries on terminal and online sales, refund-aware reversals, seven commission types, and a per-photographer dashboard with pending, this-month, total paid, and lifetime stats.




Stripe Connect Express onboarding for your organization
One click from your dashboard kicks off Stripe Connect Express onboarding. We create the account, store the connectAccountId on your org, and hand you the onboarding link. Status moves from PENDING through PENDING_VERIFICATION to ACTIVE as Stripe confirms identity, bank account, and tax info.
- Express accounts created via Stripe Connect API
- Onboarding link generated on demand from /dashboard/payouts/onboard
- stripeConnectAccountId persisted on the Organization model
- Status flow: PENDING → PENDING_VERIFICATION → ACTIVE
- Real-time requirements check via the status endpoint
- No bank-account UI we have to maintain — Stripe does it

Automatic commission entries on every sale
When a Stripe Terminal sale confirms, we create the Order, mark the gallery PAID, and write a Commission row tied to the photographer in the same database transaction. Online sales follow the same path through the Stripe webhook. Cash sales record on the kiosk and reconcile in the cash dashboard.
- Stripe Terminal confirms create Order + Commission atomically
- Online checkout webhook writes Commission on payment_succeeded
- Commission rate, gross amount, net amount stored per row
- Tied to userId, orderId or bookingId, and YYYY-MM month string
- Idempotent on Stripe payment intent — no duplicate commissions
- Indexed by month, status, isPaid, orderId for fast monthly rollups

Seven commission types — every revenue stream covered
Photo sales, digital passes, appointment bookings, QR referrals (the receptionist who scanned the guest in), automated sleeping-money sales (the abandoned cart that converted three days later), attendance bonuses, and package bookings each get their own commission type so reporting actually means something.
- PHOTO_SALE — kiosk + online photo sales
- DIGITAL_PASS_SALE — pre-arrival or on-site pass purchases
- APPOINTMENT_BOOKING — VIP / sunset / studio sessions
- QR_REFERRAL — receptionist's 5% on QR-driven bookings
- SLEEPING_MONEY — automated post-trip conversions
- ATTENDANCE_BONUS — staff attendance + reliability bonus
- PACKAGE_BOOKING — multi-session package commissions

Refund-aware reversals + monthly aggregation + CSV export
When a refund hits, the Commission row flips to REVERSED so it never shows up in payable totals. Monthly aggregation rolls every commission into a YYYY-MM bucket — the dashboard shows pending, this month, total paid, and lifetime side by side. CSV export takes 30 days of cash + commission activity in one click.
- 5 commission statuses: PENDING / APPROVED / PAID / REVERSED / ADJUSTED
- Refund webhook flips matching commission to REVERSED automatically
- Manual ADJUSTED status with notes field for one-off corrections
- Monthly bucket (YYYY-MM) for payroll and reporting
- Per-photographer dashboard: pending, this month, paid, lifetime
- Admin payout dashboard sees every photographer at once
- 30-day CSV export at /api/admin/cash/export

Everything included
No feature gates. No hidden upgrades. Get the full experience from day one.
Stripe Connect Express
One-click onboarding flow with persisted connectAccountId and live status.
Auto commission on Terminal
Stripe Terminal confirm writes Order + Commission atomically.
Auto commission on online sales
Stripe webhook creates Commission on payment_succeeded.
7 commission types
PHOTO_SALE, DIGITAL_PASS, BOOKING, QR_REFERRAL, SLEEPING_MONEY, ATTENDANCE, PACKAGE.
5 commission statuses
PENDING / APPROVED / PAID / REVERSED / ADJUSTED with notes for corrections.
Refund reversal
Refund webhook flips matching commission to REVERSED — no manual cleanup.
Monthly buckets
Every commission tagged YYYY-MM for payroll-friendly reporting.
Photographer payout dashboard
Pending / This Month / Total Paid / Lifetime stats per photographer.
Admin payout dashboard
Org-wide view of every photographer's pending and paid totals.
Idempotent payment handling
Stripe payment intent is the dedup key — replay-safe.
Indexed for speed
Indexed on userId, month, status, isPaid, orderId, bookingId.
30-day CSV export
/api/admin/cash/export downloads cash + commission activity for accounting.
Who it's for
Wedding + portrait photographers
Stripe Connect onboard, deliver galleries, get paid via Stripe transfers. Per-booking payout status (PENDING → HELD → RELEASED → PAID) shows exactly where each session stands. Refund handling flips the commission automatically.
Venues with photographer teams
Every team member sees their own pending and paid commissions. CEO sees everyone in /admin/payouts. Monthly aggregation makes payroll trivial — pull the YYYY-MM bucket, mark paid, done.
Receptionists earning QR referrals
QR_REFERRAL commission type captures the 5% receptionists earn for booking guests via their lobby QR codes. Tracked, reportable, and paid out the same way photographer commissions are.
Sleeping-money revenue
When the abandoned-cart email converts three days later, the photographer who shot the gallery still earns a SLEEPING_MONEY commission. No revenue gets lost between manual and automated channels.
Full feature list
Pixieset has no commission tracking. SmugMug has no team payouts. Resort photo platforms either lock you into their checkout or hand you a spreadsheet at the end of the month. Fotiqo writes a Commission row inside the same database transaction as the Order — refund a sale, the commission reverses; mark a month paid, every row updates at once.
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 payout tracking in action