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:
| Field | Purpose |
|---|---|
first_name | Applicant's first name |
last_name | Applicant's last name |
email | Applicant'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.