Register attendees on an event without taking payment, look them up or search by event, check them in, and remove one registration or every registration for a user on that event.
Use this page when you register people on an event, look them up, check them in, or remove registrations 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 |
|---|---|---|
| Register attendees | Add attendee (events.add_attendee) | POST /api/event/{event}/attendee/ or POST /api/attendee/ |
| List, get, or search | View attendee (events.view_attendee) | GET /api/attendee_search/, GET /api/attendee/, GET /api/attendee/{id}/ |
| Check in | Check in attendee (events.checkin_attendee) | PUT /api/attendee/checkin/ |
| Delete a registration | Delete attendee (events.delete_attendee) | DELETE /api/attendee/{id}/ or DELETE /api/attendee/remove/{event_pk}/ |
These permissions are chapter-scoped on the event’s chapter. Without the permission, Bevy returns 403.
Choose a register path
Bevy exposes two URLs that register attendees. Prefer the path under the event:
| Path | When to use it |
|---|---|
POST /api/event/{event}/attendee/ | Preferred for new integrations. Registers one or more attendees and does not process payment. |
POST /api/attendee/ | Legacy collection URL. Same job as the event path for in-person events. Documented as still under test and subject to change. Prefer the event path when you can. |
Important: Neither register path takes payment or runs checkout. Paid tickets stay on your usual ticket or Bevy Pay flow. The legacy POST /api/attendee/ path is documented for in-person events only and may still change — use POST /api/event/{event}/attendee/ for new work when you can.
Register attendees
Send a JSON body with:
event— the event ID (required in the body on both paths)attendees— an array of people to register
Each person needs first_name, last_name, and either email or an existing user ID (not both). Full request fields stay in Bevy API Reference.
Example (preferred path):
POST /api/event/456/attendee/
Content-Type: application/json
{
"event": 456,
"attendees": [
{
"first_name": "Jordan",
"last_name": "Lee",
"email": "jordan.lee@example.com"
}
]
}Register calls share a dedicated ceiling of 50 requests per hour per authenticated user (scope attendee_bulk_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.
Note: Even on POST /api/event/{event}/attendee/, include event in the JSON body. The path identifies the event for listing; create still reads the event ID from the body.
Look up and search attendees
Always scope reads with an event ID. Prefer search for lists:
- Search (preferred list):
GET /api/attendee_search/?event={id}— most performant list for an event. Optionalsearchfilters by name, email, ticket, audience, or cohost chapter. - List:
GET /api/attendee/?event={id}orGET /api/event/{event}/attendee/—eventis required on the flat list. - Get one:
GET /api/attendee/{id}/— use when you already have the attendee ID. Prefer search when you are finding people on an event.
Pagination and shared query patterns stay in Using public Bevy APIs and the matching operations in Bevy API Reference.
Check in attendees
Send PUT /api/attendee/checkin/ with the event and an array of attendee rows. Each row needs the attendee id and is_checked_in (true or false).
PUT /api/attendee/checkin/
Content-Type: application/json
{
"event": 456,
"attendees": [
{ "id": 7890, "is_checked_in": true }
]
}Check-in uses a separate ceiling of 60 requests per minute (scope attendee_checkin). It is not the 50-per-hour register limit.
Remove a registration
Two delete jobs:
| Job | Call |
|---|---|
| Remove one attendee row | DELETE /api/attendee/{id}/ |
| Remove every registration for one user on an event | DELETE /api/attendee/remove/{event_pk}/?userid={user_id} |
Important: DELETE /api/attendee/remove/{event_pk}/ removes that user’s registrations on the event — not every attendee on the event. Neither delete refunds payment. Bevy blocks delete when the registration is tied to a paid order.
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.