PlayaOS Developer Docs
SDK Guides

Application Form

Embed the PlayaOS application form into your own website.

The <ApplicationForm> component from @playaos/react renders a complete multi-step camp application directly in your React app. No PlayaOS branding, no redirects — applicants never leave your domain.

Custom Fields

Each camp's application form can have different fields. Pass arbitrary data via custom_fields:

{
  "first_name": "Jane",
  "last_name": "Doe",
  "email": "jane@example.com",
  "custom_fields": {
    "skill_level": "beginner",
    "availability": ["mornings"],
    "anything_else": "I love pickleball!"
  }
}

Custom fields are stored in the custom_fields JSONB column — they appear in your admin dashboard and are queryable via the API.

Required fields

Only three fields are required for external camps:

FieldPurpose
first_nameApplicant's first name
last_nameApplicant's last name
emailApplicant's email (used for profile lookup)

All other PlayaOS wizard fields (how_heard, shelter_type, ticket_status, etc.) are optional. Your custom fields go in custom_fields.

Duplicate submissions

If an applicant with the same email already has an application for the current year, the form returns { error: "An application already exists for this email", code: "duplicate" } with a 409 status. Handle this in your UI — show a "You've already applied" message instead of the form.

Server-side submission

If you prefer to handle form logic yourself (rather than using the drop-in <ApplicationForm> component), POST directly to the embed API:

curl -X POST https://your-camp.playaos.app/api/embed/v1/applications \
  -H "Content-Type: application/json" \
  -H "X-Camp-Key: pk_live_YOUR_EMBED_CAMP_KEY" \
  -d '{
    "first_name": "Jane",
    "last_name": "Doe",
    "email": "jane@example.com",
    "custom_fields": { "skill_level": "intermediate" }
  }'

Response (201 Created):

{
  "applicationId": "550e8400-e29b-41d4-a716-446655440000",
  "status": "pending"
}

BRC Pickleball Club Integration

BRC Pickleball Club (brcpickleballclub.com) uses a custom interest form on their own site. The form collects:

  • Standard fields: name, email, phone (mapped to first_name, last_name, email)
  • Custom fields: skill_level, preferred_position, availability, referrer

These are passed as custom_fields to the embed endpoint. The PlayaOS admin can filter and review applications by custom field values.

See the Quickstart for the full walkthrough.