Help Center
Getting Started Guides
Practical walkthroughs for the most common Guildhall workflows: creating events, joining communities, managing stores, and getting timezone/calendar behavior right.
Help Center
Practical walkthroughs for the most common Guildhall workflows: creating events, joining communities, managing stores, and getting timezone/calendar behavior right.
Use this guide when you want to integrate your store website, automation tools, or internal systems with Guildhall.
Website Scheduler./api/v1Authorization: Bearer YOUR_TOKENContent-Type: application/jsonRecommended request headers:
Authorization: Bearer gh_store_xxxxx
Accept: application/json
Content-Type: application/json
GET /api/v1/events list events you can managePOST /api/v1/events create an event, or upsert by external identityGET /api/v1/events/<event_id> fetch one event with instancesPATCH /api/v1/events/<event_id> update event fieldsDELETE /api/v1/events/<event_id> delete an eventGET /api/v1/events/<event_id>/instances list event instancesGET /api/v1/events/<event_id>/invite-links list store invite links for an eventPOST /api/v1/events/<event_id>/invite-links create an invite linkPOST /api/v1/events/<event_id>/invite-links/<invite_id>/revoke revoke an invite linkGET /api/v1/events/<event_id>/instances/<instance_id>/attendance list attendance rows and summaryPOST /api/v1/events/<event_id>/instances/<instance_id>/attendance create or update attendanceDELETE /api/v1/events/<event_id>/instances/<instance_id>/attendance/<attendance_id> remove attendanceGuildhall supports two attendance target types for a single event instance:
user_id: attach attendance directly to an existing Guildhall accountinvited_email: attach attendance to an email address even if that person does not have an account yetThis lets stores record attendance for walk-ins, counter signups, or league participants before they register.
Important behavior:
user_id or invited_email.invited_email rows can use going, not_going, or invited.For attendee display:
{
"title": "Friday Commander Night",
"description": "Casual pods, all levels welcome.",
"event_type": "in_person",
"location_mode": "address",
"location_address": "123 Main St, York, PA 17401",
"zip_code": "17401",
"timezone": "America/New_York",
"start_datetime": "2026-03-06T19:00:00Z",
"end_datetime": "2026-03-06T23:00:00Z",
"recurrence_pattern": "weekly",
"recurrence_until": "2026-06-30",
"audience_scope": "public",
"conversation_visibility": "attendees",
"max_attendees": 40,
"ticket_event_fee_cents": 500,
"ticket_store_credit_cents": 500,
"external_source": "store_site",
"external_uid": "evt_2026_03_06_fri_commander"
}
{
"scope": "series",
"custom_description": "Show this code at the register to join weekly commander nights.",
"expires_at": "2026-04-01T23:59:59Z",
"max_uses": 250
}
{
"user_id": "user_uuid",
"status": "going"
}
{
"invited_email": "player@example.com",
"status": "going",
"send_email": false
}
{
"id": "attendance_uuid",
"event_id": "event_uuid",
"event_instance_id": "instance_uuid",
"status": "going",
"target_type": "email",
"user_id": null,
"user": null,
"invited_email": "player@example.com",
"added_by_id": "store_owner_uuid"
}
curl -sS \
-H "Authorization: Bearer $GUILDHALL_STORE_TOKEN" \
-H "Accept: application/json" \
"https://your-domain/api/v1/events?limit=50&offset=0&include_instances=true"
curl -sS -X POST \
-H "Authorization: Bearer $GUILDHALL_STORE_TOKEN" \
-H "Content-Type: application/json" \
-d '{"scope":"event","max_uses":100}' \
"https://your-domain/api/v1/events/$EVENT_ID/invite-links"
curl -sS -X POST \
-H "Authorization: Bearer $GUILDHALL_STORE_TOKEN" \
-H "Content-Type: application/json" \
-d '{"invited_email":"player@example.com","status":"going","send_email":false}' \
"https://your-domain/api/v1/events/$EVENT_ID/instances/$INSTANCE_ID/attendance"
scope must be event or series.user_id or invited_email.status must be going, not_going, or invited.invited_email must be a valid email address.send_email is optional for email-backed attendance and defaults to true.status, even before an account exists.user_id.invited_email and the correct status.send_email: false for in-person counter workflows where you do not want an email sent immediately.