For Developers
Create and manage events on The Guest List from your own platform, and get webhooks as RSVPs come in. Built for partners like Mahjongers who want their creators to send guests to a Guest List RSVP page.
Authentication
Every request needs your partner API key as a bearer token. Keys are issued by The Guest List team — reach out to get one.
Authorization: Bearer glk_xxxxxxxxxxxxxxxxxxxxxxxxBase URLs: https://theguestlist.social/api/partner and https://theguestlist.social/partner
Endpoints
/partner/eventsCreate a live or draft event. title is required; customSlug is normalized automatically.
Request body
{
"title": "Sunday Mahjong Open Play",
"description": "Beginner-friendly open play hosted by Jade Room.",
"date": "2026-07-12",
"time": "18:30",
"timezone": "Asia/Kolkata",
"location": "Jade Room Studio",
"address": "Hyderabad, Telangana",
"capacity": 16,
"tables": { "count": 4, "seatsPerTable": 4 },
"priceLabel": "Free RSVP",
"creatorHandle": "jaderoom",
"image": "https://example.com/cover.jpg",
"category": "mahjong",
"status": "live",
"customSlug": "jaderoom-sunday-open-play",
"source": "mahjongers",
"waitlistEnabled": true,
"customFields": [
{ "key": "mahjong_variant", "label": "Mahjong variant", "type": "select", "options": ["Chinese", "Riichi"] },
{ "key": "skill_level", "label": "Skill level", "type": "select", "options": ["Beginner", "Intermediate"] }
]
}Response
{
"eventId": "evt_123",
"id": "evt_123",
"slug": "jaderoom-sunday-open-play",
"rsvpUrl": "https://theguestlist.social/e/jaderoom-sunday-open-play",
"status": "live",
"rsvpStatus": "open",
"capacity": 16,
"seatsAvailable": 16,
"tables": { "tableCount": 4, "seatsPerTable": 4, "totalSeats": 16 }
}/partner/events/:idUpdate date, capacity, description, location, image, table setup, custom fields, or status.
Response
{
"eventId": "evt_123",
"status": "live",
"rsvpStatus": "open",
"capacity": 16,
"seatsAvailable": 12
}/partner/events/:id/publishMarks a draft event live and allows RSVPs.
Response
{ "eventId": "evt_123", "status": "live", "rsvpStatus": "open" }/partner/events/:id/unpublishMarks an event draft. Draft partner events keep their RSVP URL but do not accept RSVPs.
Response
{ "eventId": "evt_123", "status": "draft", "rsvpStatus": "closed" }/partner/events/:id/cancelCancels the event, blocks new RSVPs (410 Gone), and fires an event.cancelled webhook.
Response
{ "eventId": "evt_123", "status": "cancelled", "rsvpStatus": "cancelled" }/partner/events/:idGet RSVP URL, event status, capacity, table grouping, and creator mapping.
Response
{
"eventId": "evt_123",
"id": "evt_123",
"slug": "jaderoom-sunday-open-play",
"rsvpUrl": "https://theguestlist.social/e/jaderoom-sunday-open-play",
"status": "live",
"rsvpStatus": "open",
"title": "Sunday Mahjong Open Play",
"capacity": 16,
"confirmed": 12,
"waitlisted": 2,
"seatsAvailable": 4,
"priceLabel": "Free RSVP",
"tables": { "tableCount": 4, "seatsPerTable": 4, "totalSeats": 16 },
"full": false,
"source": "mahjongers",
"creatorHandle": "jaderoom"
}/partner/events/:id/rsvpsList RSVP rows for the creator dashboard, including seat count and custom field answers.
Response
{
"eventId": "evt_123",
"status": "live",
"rsvpStatus": "open",
"confirmed": 12,
"waitlisted": 2,
"capacity": 16,
"seatsAvailable": 4,
"rsvps": [
{
"id": "rsvp_1",
"name": "Ananya",
"email": "ananya@example.com",
"phone": "+91...",
"seatCount": 1,
"status": "confirmed",
"answers": { "Mahjong variant": "Chinese", "Skill level": "Beginner" },
"createdAt": "2026-07-01T10:00:00Z"
}
]
}Errors
Endpoints only return events/RSVPs created by your own API key — requesting another partner's event returns 404.
| Status | Meaning |
|---|---|
| 400 | Missing required field (e.g. title) |
| 401 | Missing or invalid API key |
| 404 | Event not found, or not owned by your key |
| 410 | Event has been cancelled (public RSVP endpoint) |
| 500 | Server error |
Webhooks
If your key has a webhook URL configured, we POST JSON to it as RSVPs change, signed with your webhook secret:
X-Guestlist-Signature: sha256=<hmac-sha256 of the raw body, using your webhook secret>| Event | Fires when |
|---|---|
| rsvp.created | A guest RSVPs to your event |
| waitlist.joined | A guest joins the waitlist |
| rsvp.cancelled | An RSVP is removed |
| event.full | The event reaches confirmed seat capacity |
| event.cancelled | You cancel the event via the API |
| guest.checked_in | The host checks a guest in at the door |
Payload shape
{
"type": "rsvp.created",
"eventId": "evt_123",
"creatorHandle": "jaderoom",
"rsvp": {
"id": "rsvp_1",
"name": "Ananya",
"email": "ananya@example.com",
"phone": "+91...",
"status": "confirmed",
"seatCount": 1,
"guestCount": 1
}
}(rsvp is omitted for event.full and event.cancelled.) Delivery is retried every 15 minutes for up to 5 attempts if your endpoint doesn't return a 2xx — make your handler idempotent.
Want a key?
Email hello@theguestlist.social to get a partner API key set up for your platform.