Skip to content

Ticket Resale Marketplace #15

Description

@chmunyas

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions