Summary
Add an official ticket transfer and resale marketplace so attendees can safely resell tickets at organizer-controlled prices with transfer fees.
Problem
No official transfer or resale mechanism. Attendees who cannot attend resort to unauthorized channels (Facebook, Craigslist) creating fraud risk and zero revenue for organizers. An official marketplace captures transfer fees and prevents counterfeit tickets.
Scope
Ticket transfer
- Attendee initiates transfer via public order page
- Recipient receives email with claim link (signed URL, 48hr expiry)
- On claim: attendee record updated with new name/email, QR code regenerated, old QR invalidated
- Original attendee notified of successful transfer
- Transfer logged in order audit trail
Resale listing
- Attendee lists ticket for resale at a price (within organizer-set bounds)
resale_listings table: attendee_id, event_id, product_id, asking_price, max_price, min_price, status (active/sold/cancelled/expired), listed_at, expires_at
- Organizer configures per-event: resale_enabled, max_markup_percentage (e.g. 120% of face value), transfer_fee_percentage, transfer_fee_fixed
- Public resale page:
/events/{short_id}/resale
Purchase flow
- Buyer purchases resale ticket through standard checkout
- Transfer fee split: percentage to organizer, remainder to original attendee
- Payment via existing payment gateway (Stripe payout to seller via Connect, or credit to account balance)
- On purchase: automatic transfer triggered, old QR invalidated, new QR issued
Anti-fraud
- One active listing per attendee per ticket
- Listing auto-expires 24hrs before event
- Price caps enforced server-side
- Seller identity verified via order email match
- Velocity limit: max 5 resale purchases per buyer per event
Implementation
- Create
Services/Domain/Resale/ with ResaleListingService, TicketTransferService
- Create
resale_listings migration
- Add transfer/resale routes (public + authenticated)
- Add
transfer_fee_percentage and resale_enabled to event_settings
Tests
- Transfer updates attendee record and regenerates QR
- Old QR code invalidated after transfer
- Resale listing respects price caps
- Transfer fee calculated correctly
- Listing auto-expires before event
- Velocity limit enforced on buyers
Summary
Add an official ticket transfer and resale marketplace so attendees can safely resell tickets at organizer-controlled prices with transfer fees.
Problem
No official transfer or resale mechanism. Attendees who cannot attend resort to unauthorized channels (Facebook, Craigslist) creating fraud risk and zero revenue for organizers. An official marketplace captures transfer fees and prevents counterfeit tickets.
Scope
Ticket transfer
Resale listing
resale_listingstable: attendee_id, event_id, product_id, asking_price, max_price, min_price, status (active/sold/cancelled/expired), listed_at, expires_at/events/{short_id}/resalePurchase flow
Anti-fraud
Implementation
Services/Domain/Resale/with ResaleListingService, TicketTransferServiceresale_listingsmigrationtransfer_fee_percentageandresale_enabledto event_settingsTests