Communities & Access Control
Communities are membership groups that gate access to resources and services. Members can receive booking quotas, access control grants, and exclusive booking permissions.
For general conventions, see JSON-API Conventions. For authentication, see Authentication.
Prerequisites
- Admin API: Bearer token with admin access +
?o={organization_id} - Customer API: Authenticated customer account for membership and invite actions
Concepts
| Entity | Description |
|---|---|
| Community | A named group with members, rules, and permissions |
| Community Account | A membership record linking a customer account to a community |
| Community Invite | An email invitation to join a community |
| Booking Pass | A quota voucher (e.g. "10x Yoga Class") granted to community members |
| Account Pass | A digital wallet pass (Apple/Google Wallet) for physical access |
Member Roles
| Role | Permissions |
|---|---|
member |
Standard access according to community rules |
manager |
Can manage members and settings |
visitor |
Limited/temporary access |
Member Statuses
| Status | Meaning |
|---|---|
accepted |
Active member |
pending |
Awaiting approval |
Memberships can be time-limited via start_date and end_date fields on the community account.
Creating a Community (Admin)
POST /api/v1/communities?o={org_id}
{
"data": {
"type": "communities",
"attributes": {
"name": "Premium Members",
"slug": "premium-members",
"is_private": true,
"allow_customer_requests": true,
"auto_join_enabled": false,
"include_all_services": false
}
}
}
Key Attributes
| Attribute | Type | Description |
|---|---|---|
name |
string | Display name |
slug |
string | URL-friendly identifier |
is_private |
boolean | Hidden from public listing if true |
allow_customer_requests |
boolean | Customers can request to join |
auto_join_enabled |
boolean | Enable automatic membership rules |
include_all_services |
boolean | Members can access all services |
welcome_text |
string | Shown to members on join |
Inviting Members (Admin)
Send email invitations to join:
POST /api/v1/communities/{community_id}/invites?o={org_id}
{
"emails": ["jane@example.com", "john@example.com"],
"role": "member",
"body": "You've been invited to our Premium Members community!",
"start_date": "2026-04-01",
"end_date": "2026-12-31",
"silent": false
}
| Field | Type | Required | Description |
|---|---|---|---|
emails |
string[] | Yes | Email addresses to invite |
role |
string | No | Member role (default: member) |
body |
string | No | Custom invitation message |
start_date |
string | No | Membership start date |
end_date |
string | No | Membership expiration date |
silent |
boolean | No | true to skip sending invitation emails |
If an email matches an existing customer account, the membership is created immediately.
Resend an Invitation
GET /api/v1/community-invites/{invite_id}/resend?o={org_id}
Auto-Join Rules
Communities can automatically add members based on:
| Trigger | Description |
|---|---|
| Booking | Customer books a service linked to the community |
| Subscription | Customer claims a plan subscription associated with the community |
| Email Domain | Customer's email domain matches a verified domain ownership |
Configure via the auto_join_settings attribute on the community resource. Use the sync endpoint to apply rules retroactively:
GET /api/v1/communities/{community_id}/sync-auto-join?o={org_id}
Returns the number of newly added members.
Customer Membership Actions
Community membership actions are documented in the customer API, not the public API.
Leave a Community
GET /api/v1/communities/{community_id}/leave
Accept an Invite
POST /api/v1/community-invites/{invite_id}/accept
Common Errors
| Error | Cause | Solution |
|---|---|---|
403 — not a member |
Action requires community membership | Join the community first |
422 — community is private |
Cannot join a private community directly | Request an invitation from an admin |
422 — already a member |
Duplicate join attempt | Check membership status before joining |