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/json

Path 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/json

Request 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/json

Query 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/json

Request 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/json

Request 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