Skip to main content

Guestlist API

Create events, manage guest lists, process RSVPs, handle check-ins, and sell tickets with optional on-chain payment verification on Base.
Event data is stored in memory and does not persist across server restarts. Ticket purchases with a non-zero tier price are verified against the buyer’s USDC balance on Base mainnet.

List events

GET /api/guestlist
Returns all events.

Response

{
  "events": [
    {
      "id": "evt_abc123def",
      "name": "baseFM Launch Party",
      "date": "2026-04-15",
      "venue": "The Warehouse",
      "capacity": 200,
      "guestlist": [],
      "tiers": [
        { "name": "general", "price": "0", "count": 150 },
        { "name": "guestlist", "price": "0", "count": 50 }
      ]
    }
  ]
}

Get event

GET /api/guestlist?eventId=evt_abc123def
Returns a single event with its full guestlist.

Query parameters

ParameterTypeRequiredDescription
eventIdstringYesEvent identifier

Response

{
  "id": "evt_abc123def",
  "name": "baseFM Launch Party",
  "date": "2026-04-15",
  "venue": "The Warehouse",
  "capacity": 200,
  "guestlist": [
    {
      "id": "g_xyz789abc",
      "name": "Alice",
      "email": "alice@example.com",
      "wallet": "0xabc...123",
      "status": "confirmed",
      "tier": "vip",
      "timestamp": 1713139200000
    }
  ],
  "tiers": [
    { "name": "general", "price": "0", "count": 150 },
    { "name": "guestlist", "price": "0", "count": 50 }
  ]
}
FieldTypeDescription
idstringEvent identifier
namestringEvent name
datestringEvent date
venuestringEvent venue
capacitynumberMaximum number of guests
guestlistarrayList of guest objects
guestlist[].idstringGuest identifier
guestlist[].namestringGuest name
guestlist[].emailstringGuest email (optional)
guestlist[].walletstringGuest wallet address (optional)
guestlist[].statusstringOne of: pending, confirmed, checked-in, cancelled
guestlist[].tierstringOne of: vip, guestlist, general, press
guestlist[].timestampnumberUnix timestamp (milliseconds) when the guest was added
guestlist[].checkedInAtnumberUnix timestamp (milliseconds) when the guest checked in (only present after check-in)
tiersarrayAvailable ticket tiers
tiers[].namestringTier name
tiers[].pricestringTier price in token units (0 for free)
tiers[].countnumberNumber of spots in this tier

Errors

CodeDescription
404Event not found

Create event

POST /api/guestlist

Request body

FieldTypeRequiredDescription
actionstringYesMust be create-event
namestringYesEvent name
datestringYesEvent date
venuestringYesEvent venue
capacitynumberNoMaximum guests (default: 200)
tiersarrayNoTicket tiers. Defaults to general (150 spots) and guestlist (50 spots) tiers, both free.
{
  "action": "create-event",
  "name": "baseFM Launch Party",
  "date": "2026-04-15",
  "venue": "The Warehouse",
  "capacity": 200,
  "tiers": [
    { "name": "general", "price": "0", "count": 150 },
    { "name": "vip", "price": "10000000", "count": 50 }
  ]
}

Response

{
  "success": true,
  "event": {
    "id": "evt_abc123def",
    "name": "baseFM Launch Party",
    "date": "2026-04-15",
    "venue": "The Warehouse",
    "capacity": 200,
    "guestlist": [],
    "tiers": [
      { "name": "general", "price": "0", "count": 150 },
      { "name": "vip", "price": "10000000", "count": 50 }
    ]
  }
}

RSVP

POST /api/guestlist
Adds a guest to an event’s guestlist with pending status.

Request body

FieldTypeRequiredDescription
actionstringYesMust be rsvp
eventIdstringYesEvent identifier
namestringYesGuest name
emailstringNoGuest email
walletstringNoGuest wallet address
tierstringNoTicket tier (default: general). Options: vip, guestlist, general, press

Response

{
  "success": true,
  "guest": {
    "id": "g_xyz789abc",
    "name": "Alice",
    "email": "alice@example.com",
    "wallet": "0xabc...123",
    "status": "pending",
    "tier": "general",
    "timestamp": 1713139200000
  }
}

Errors

CodeDescription
400Event full — the guestlist has reached the event capacity
404Event not found

Check in

POST /api/guestlist
Marks a guest as checked in. You can identify the guest by either guestId or wallet.

Request body

FieldTypeRequiredDescription
actionstringYesMust be check-in
eventIdstringYesEvent identifier
guestIdstringConditionalGuest identifier (provide this or wallet)
walletstringConditionalGuest wallet address (provide this or guestId)

Response

{
  "success": true,
  "guest": {
    "id": "g_xyz789abc",
    "name": "Alice",
    "status": "checked-in",
    "tier": "vip",
    "timestamp": 1713139200000,
    "checkedInAt": 1713225600000
  }
}

Errors

CodeDescription
400Already checked in
404Event not found
404Guest not found

Buy ticket

POST /api/guestlist
Purchases a ticket for an event. When the tier price is non-zero, the buyer’s USDC balance on Base is verified before confirming.

Request body

FieldTypeRequiredDescription
actionstringYesMust be buy-ticket
eventIdstringYesEvent identifier
namestringYesBuyer name
emailstringNoBuyer email
walletstringYesBuyer wallet address (used for on-chain payment verification)
tierstringYesTicket tier to purchase

Response

{
  "success": true,
  "guest": {
    "id": "g_xyz789abc",
    "name": "Alice",
    "wallet": "0xabc...123",
    "status": "confirmed",
    "tier": "vip",
    "timestamp": 1713139200000
  }
}
Guests added via buy-ticket receive confirmed status immediately, unlike rsvp which creates guests with pending status.

Errors

CodeDescription
400Invalid tier — the specified tier does not exist for this event
400Insufficient payment — the wallet’s on-chain USDC balance is below the tier price
404Event not found

Common errors

CodeDescription
400Invalid action
500Internal error