Public Event API
These endpoints allow public access to event information, registration, and self check-in functionality.
Endpoints Overview
| Method | Endpoint | Description |
|---|---|---|
| GET | /public/events/{uuid} |
Get event details |
| POST | /public/events/{uuid}/register |
Register for an event |
| GET | /public/events/{uuid}/check |
Check registration status |
| POST | /public/events/{uuid}/check-in |
Self check-in |
| POST | /public/events/{uuid}/cancel |
Cancel registration |
Get Event Details
Retrieve public event information including registration fields and availability.
Request
GET https://api.canskan.com/public/events/{uuid}
Accept: application/jsonPath Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
uuid |
string | Yes | The event's unique identifier (UUID format) |
Response (200 OK)
{
"data": {
"id": "f90743ac-dbf5-4776-8f19-ebe1321268bf",
"name": "Tech Conference 2025",
"description": "Annual technology conference featuring industry leaders.",
"organization": {
"name": "Tech Corp",
"slug": "tech-corp"
},
"registration_fields": [
{
"key": "email",
"label": "Email Address",
"type": "email",
"required": true
},
{
"key": "first_name",
"label": "First Name",
"type": "text",
"required": true
},
{
"key": "last_name",
"label": "Last Name",
"type": "text",
"required": true
},
{
"key": "company",
"label": "Company",
"type": "text",
"required": false
}
],
"is_registration_open": true,
"checkin_period_type": "immediate",
"is_checkin_allowed": true,
"allow_self_checkin": true,
"seats": 500,
"attendees_count": 127
}
}Response Fields
| Field | Type | Description |
|---|---|---|
id |
string | Event UUID |
name |
string | Event name |
description |
string | Event description |
organization |
object | Organization hosting the event |
registration_fields |
array | Form fields required for registration |
is_registration_open |
boolean | Whether registration is currently open |
checkin_period_type |
string | Check-in period type: disabled, immediate, starts_on, date_range |
is_checkin_allowed |
boolean | Whether check-in is currently allowed |
allow_self_checkin |
boolean | Whether attendees can check themselves in |
seats |
integer|null | Maximum number of attendees (null = unlimited) |
attendees_count |
integer | Current number of registered attendees |
Registration Field Types
| Type | Description | Validation |
|---|---|---|
text |
Single-line text input | Max 255 characters |
email |
Email address | Valid email format |
phone |
Phone number | Max 20 characters |
date |
Date picker | Valid date format |
textarea |
Multi-line text | Max 5000 characters |
select |
Dropdown selection | Must match one of the options |
Error Responses
404 Not Found
{
"message": "Event not found or not available."
}Register for Event
Submit a registration for an event.
Request
POST https://api.canskan.com/public/events/{uuid}/register
Content-Type: application/json
Accept: application/jsonRequest Body
The request body should include all required fields defined in the event's registration_fields.
{
"email": "john@example.com",
"first_name": "John",
"last_name": "Doe",
"company": "Tech Corp"
}Response (201 Created)
{
"message": "Successfully registered for the event.",
"data": {
"id": 12345,
"email": "john@example.com",
"name": "John Doe",
"status": "confirmed",
"is_guest": false
}
}Response Fields
| Field | Type | Description |
|---|---|---|
id |
integer | Attendee ID |
email |
string | Registered email |
name |
string | Full name |
status |
string | Registration status: confirmed, pending, canceled |
is_guest |
boolean | Whether the attendee is a guest (no CANSKAN account) |
Error Responses
403 Forbidden - Registration Closed
{
"message": "Registration is closed for this event."
}409 Conflict - Already Registered
{
"message": "You are already registered for this event."
}422 Validation Error
{
"message": "Validation failed.",
"errors": {
"email": ["The email field is required."],
"first_name": ["The first name field is required."]
}
}Check Registration Status
Check if an email is already registered for an event.
Request
GET https://api.canskan.com/public/events/{uuid}/check?email=john@example.com
Accept: application/jsonQuery Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
email |
string | Yes | Email address to check |
Response (200 OK)
Registered:
{
"data": {
"is_registered": true,
"attendee": {
"id": 12345,
"name": "John Doe",
"email": "john@example.com",
"status": "confirmed",
"checked_in_at": "2025-12-08T14:30:00+00:00"
}
}
}Not Registered:
{
"data": {
"is_registered": false,
"attendee": null
}
}Error Responses
404 Not Found
{
"message": "Event not found."
}422 Validation Error
{
"message": "Email is required."
}Self Check-in
Allow an attendee to check themselves in to an event.
Request
POST https://api.canskan.com/public/events/{uuid}/check-in
Content-Type: application/json
Accept: application/jsonRequest Body
{
"email": "john@example.com"
}Response (200 OK)
{
"message": "Successfully checked in!",
"data": {
"id": 12345,
"email": "john@example.com",
"name": "John Doe",
"checked_in_at": "2025-12-08T14:30:00+00:00"
}
}Error Responses
403 Forbidden - Check-in Not Allowed
{
"message": "Check-in is not available for this event."
}403 Forbidden - Self Check-in Disabled
{
"message": "Self check-in is not enabled for this event. Please check in with event staff."
}404 Not Found - Not Registered
{
"message": "You are not registered for this event."
}409 Conflict - Already Checked In
{
"message": "You have already checked in at Dec 8, 2025 2:30 PM."
}Cancel Registration
Allow an attendee to cancel their registration for an event.
Request
POST https://api.canskan.com/public/events/{uuid}/cancel
Content-Type: application/json
Accept: application/jsonRequest Body
{
"email": "john@example.com"
}Response (200 OK)
{
"message": "Registration cancelled successfully."
}Error Responses
404 Not Found - Event Not Found
{
"message": "Event not found."
}404 Not Found - Not Registered
{
"message": "You are not registered for this event."
}422 Validation Error - Already Checked In
{
"message": "Cannot cancel after check-in."
}422 Validation Error - Already Cancelled
{
"message": "Registration is already cancelled."
}Usage Examples
Check-in Period Types
Events can have different check-in configurations:
| Type | Description |
|---|---|
disabled |
Check-in is completely disabled for this event |
immediate |
Check-in is allowed immediately after registration |
starts_on |
Check-in opens at a specific date/time |
date_range |
Check-in is only allowed within a specific date range |
The is_checkin_allowed field indicates whether check-in is currently permitted based on the event's configuration.
Rate Limiting
All public event endpoints are rate-limited:
- Limit: 60 requests per minute per IP
- Rate limit headers are included in all responses
X-RateLimit-Limit: 60
X-RateLimit-Remaining: 42
X-RateLimit-Reset: 1732099200