Join a chapter as the current user, batch-add other people, look up or remove members, manage the chapter team, and submit or list chapter application survey entries through the public API.
Use this page when you add people to a chapter, manage the chapter team, or work with chapter application surveys through the public API. Shared base URL, authentication, status codes, and account rate limits stay in Using public Bevy APIs. Parameter and field details stay in Bevy API Reference.
Permissions you need
| Action | Permission | Endpoint |
|---|---|---|
| Join as the current user / leave yourself | Authenticated caller (self only) | POST or DELETE /api/chapter/{chapter}/member/ |
| Batch-add members | Add chapter member (chapters.add_chaptermember) | POST /api/chapter/{chapter}/members/ |
| List or get a member | View chapter member (chapters.view_chaptermember) | GET /api/chapter/{chapter}/member/, GET /api/chapter/{chapter}/member/{id}/ |
| Remove another member | Delete chapter member (chapters.delete_chaptermember) | DELETE /api/chapter/{chapter}/member/{id}/ |
| List application entries | Add chapter member (chapters.add_chaptermember) | GET /api/chapter/{chapter_pk}/survey/{type}/entry/ |
| Add a team member | Add chapter team (chapters.add_chapterteam) | POST /api/chapter/{chapter}/team/ |
| List or get a team member | View chapter team (chapters.view_chapterteam) | GET /api/chapter/{chapter}/team/, GET /api/chapter/{chapter}/team/{id}/ |
| Update or reorder the team | Change chapter team (chapters.change_chapterteam) | PATCH / PUT /api/chapter/{chapter}/team/{id}/, PATCH /api/chapter/{chapter}/team/ |
| Remove a team member | Delete chapter team (chapters.delete_chapterteam) | DELETE /api/chapter/{chapter}/team/{id}/ |
These permissions are chapter-scoped. Without the permission, Bevy returns 403.
Join as the current user versus batch-add others
| Job | Call | When to use it |
|---|---|---|
| Join as the current authenticated user | POST /api/chapter/{chapter}/member/ | The caller becomes a member. Bevy always joins the authenticated user — not someone else. |
| Batch-add other people | POST /api/chapter/{chapter}/members/ | Organizers add one or many people by email. Requires chapters.add_chaptermember. |
Self-join means the authenticated caller asks Bevy to add themselves as a chapter member (POST /api/chapter/{chapter}/member/). It does not add someone else. That path only works when the chapter allows open join. Some chapters do not:
- Application required — the person must apply and get approved before they become a member.
- Invite only — an organizer must invite them; they cannot join themselves through this call.
For those chapters, Bevy returns 403 on the self-join path (for example, that the chapter requires an approved application or is invite only). Do not treat that as a transient failure and retry the same join call.
When the chapter requires an application, use the chapter application survey instead:
- Get the form:
GET /api/chapter/{chapter_pk}/survey/chapter_application/ - Submit answers:
POST /api/chapter/{chapter_pk}/survey/chapter_application/entry/
That creates a pending application. An organizer still reviews it before the person becomes a member. Submitting the survey is not the same as joining. Invite-only chapters need an invite or an organizer to add the person (for example through batch-add with chapters.add_chaptermember).
Note: Organizer batch-add (POST /api/chapter/{chapter}/members/) is a different job. It adds other people when you have permission. The self-join refusal above applies only to the caller joining themselves.
Batch-add chapter members
Send a JSON body with a members array. Each person needs email, first_name, and last_name. Set async to control how Bevy processes the import:
async: false(default) — creates members in the same request and returns the member rows.async: true— preferred for larger imports. Returns achapter_member_import_idand astatus_urlyou can poll.
When you assert consent for the people you import, include signup_consent: true and a consent_reason string. Full request fields stay in Bevy API Reference.
POST /api/chapter/12/members/
Content-Type: application/json
{
"async": true,
"signup_consent": true,
"consent_reason": "Imported from partner CRM with confirmed opt-in",
"members": [
{
"email": "jordan.lee@example.com",
"first_name": "Jordan",
"last_name": "Lee"
}
]
}Batch-add calls share a dedicated ceiling of 50 requests per hour per authenticated user (scope chapter_member_create), in addition to account-wide limits in Using public Bevy APIs. When you exceed a limit, Bevy returns 429 with a Retry-After header.
Look up and remove members
- List:
GET /api/chapter/{chapter}/member/ - Get one:
GET /api/chapter/{chapter}/member/{id}/ - Leave yourself:
DELETE /api/chapter/{chapter}/member/— marks the caller’s active membership as departed. - Remove another member:
DELETE /api/chapter/{chapter}/member/{id}/— requireschapters.delete_chaptermember.
Note: Removing a membership departs the person from the chapter. It does not delete their Bevy user account.
Manage the chapter team
Team endpoints live under /api/chapter/{chapter}/team/. Send one team member object per create — not an array.
| Job | Call |
|---|---|
| Add a team member | POST /api/chapter/{chapter}/team/ |
| List or get | GET /api/chapter/{chapter}/team/, GET /api/chapter/{chapter}/team/{id}/ |
| Update one member | PATCH or PUT /api/chapter/{chapter}/team/{id}/ |
| Reorder the whole team | PATCH /api/chapter/{chapter}/team/ with an order array of every team member ID |
| Remove from the team | DELETE /api/chapter/{chapter}/team/{id}/ |
On create, provide an existing user ID, or an email (with optional first_name / last_name) so Bevy can create a prospective user when needed. If you send both user and email, the email must match that user. You can set a visible title and a chapter role. Full fields stay in Bevy API Reference.
POST /api/chapter/12/team/
Content-Type: application/json
{
"email": "alex.nguyen@example.com",
"first_name": "Alex",
"last_name": "Nguyen",
"title": "Chapter Lead"
}PATCH /api/chapter/12/team/
Content-Type: application/json
{
"order": [45, 12, 88]
}Important: Reorder must include every current team member ID exactly once. Removing someone from the team does not delete their user account.
Team create calls are limited to 100 requests per hour (scope chapter_team_create_any). When the request also sends welcome emails (send_chapter_team_emails truthy), a tighter ceiling of 30 requests per hour (scope chapter_team_create) also applies — Bevy uses the stricter of the two.
Chapter application surveys
Use survey type chapter_application in the path:
- Get the survey (questions and fields):
GET /api/chapter/{chapter_pk}/survey/chapter_application/ - Submit an application entry:
POST /api/chapter/{chapter_pk}/survey/chapter_application/entry/ - List entries (organizers):
GET /api/chapter/{chapter_pk}/survey/chapter_application/entry/— requireschapters.add_chaptermember. Anonymous and non-manager callers receive 403.
Submitted entries land as pending. Organizers review them in Bevy; listing entries does not accept or decline an application by itself. Unauthenticated submissions share a dedicated ceiling of 10 requests per hour (scope chapter_application_anon).
Tip: For headers, authentication, and account-wide rate limits, see Using public Bevy APIs. For every parameter and response field, open the matching operation in Bevy API Reference.