Developers
An API for creating and publishing events, reading details, importing passes and polling check-ins. Make a key in the organizer app under Team & settings, then try the endpoints below. The spec is at /api/v1/openapi.json and a plain-text summary for agents is at /llms.txt. To run RSVP on your own site, start with the step-by-step guide.
Enable Can create events on a key to create drafts, update core details and publish from your server. Use an external ID to retry creation safely. The look, questions, waiver, plus-ones, invite-only access, cancelling and deleting stay in the organizer app.
Run RSVP on your own site
You collect and verify RSVPs on your own site. Rollcall issues each guest a pass and QR code, and your door staff scan them with the Rollcall door app. All calls go to https://letsrollcall.com/api/v1 from your server. The examples use a made-up event, movie-night-2026.
1. Get a key
In the organizer app, open Team & settings, then the Organization tab, then API keys, then New key. Tick Can create events and Can create passes. The key is shown once, so copy it then. Keep it on your server and never put it in browser code.
export ROLLCALL_API_KEY=rc_live_...2. Create and publish the event
Pick your own externalId for the event (1 to 64 letters, digits, underscores or hyphens). Creating the same externalId twice returns the existing event with created: false and changes nothing, so the call is safe to retry. This makes a draft.
curl https://letsrollcall.com/api/v1/events \
-H "Authorization: Bearer $ROLLCALL_API_KEY" \
-H "Content-Type: application/json" \
--data '{"externalId":"movie-night-2026","title":"Movie Night",
"startsAt":"2026-11-14T19:00:00-08:00","endsAt":"2026-11-14T22:00:00-08:00",
"timezone":"America/Los_Angeles","capacity":150}'Change core details with PATCH. Address the event as ext:movie-night-2026. Omitted fields stay as they are.
curl https://letsrollcall.com/api/v1/events/ext:movie-night-2026 -X PATCH \
-H "Authorization: Bearer $ROLLCALL_API_KEY" \
-H "Content-Type: application/json" \
--data '{"title":"Movie Night on the Lawn"}'Publish when ready. The response contains the event's slug, which the pass calls need. Publishing twice is a 200 no-op. A cancelled event returns 409.
curl https://letsrollcall.com/api/v1/events/ext:movie-night-2026/publish -X POST \
-H "Authorization: Bearer $ROLLCALL_API_KEY"
# { "event": { "slug": "movie-night-k3m9x2q7ab", ... }, "asOf": "..." }The cover and colors, questions, waiver, plus-ones, invite-only access and cancelling stay in the organizer app. Set them there before you start importing guests.
3. Import each verified RSVP
When a guest RSVPs on your site and you have verified them, import them using the slug. Use your own RSVP id as the guest's externalId. You can send 1 to 100 guests in one request. A bad guest gets an error in its own entry and does not fail the rest.
curl https://letsrollcall.com/api/v1/events/movie-night-k3m9x2q7ab/passes \
-H "Authorization: Bearer $ROLLCALL_API_KEY" \
-H "Content-Type: application/json" \
--data '{"guests":[{"externalId":"rsvp_8841","name":"Sam Rivera",
"ageVerified":"attested","email":"sam@example.com"}]}'
# { "passes": [{ "externalId": "rsvp_8841", "created": true,
# "code": "...", "qrValue": "...", "status": "valid" }], "asOf": "..." }Store code and qrValue with your RSVP. Render the QR image from qrValue, not from the bare code, and put the image in your confirmation page or email. Retrying is safe: the same externalId never makes a second pass. It returns the current pass with created: false.
Other guest fields:
ageVerifiedis required:attestedorscanned. You vouch for it. Door staff still check ID.waiverAcceptedis{ version, at }. If the event has a waiver and you leave it out, the pass has statuswaiverand an emptyqrValue, so there is no QR to show yet.doorNoticeis a note of up to 140 characters for door staff. Age-gated events default it to Check ID.tagsis up to 20 labels, each 1 to 40 characters.phoneandemailare optional. A full event returns a per-guestCAPACITYerror.
Importing a pass does not check anyone in.
4. Look up or cancel a pass
If a guest loses their ticket, fetch the pass again by your RSVP id and re-send the QR code.
curl https://letsrollcall.com/api/v1/events/movie-night-k3m9x2q7ab/passes/rsvp_8841 \
-H "Authorization: Bearer $ROLLCALL_API_KEY"To cancel, send DELETE. The status becomes cancelled and qrValue is empty. Repeating it is a 200 no-op. Check-in history is kept.
curl https://letsrollcall.com/api/v1/events/movie-night-k3m9x2q7ab/passes/rsvp_8841 -X DELETE \
-H "Authorization: Bearer $ROLLCALL_API_KEY"5. At the door
Door staff scan guest QR codes with the Rollcall door app. Imported passes work the same as any other pass, including offline.
6. Read check-ins back
Poll the feed every 30 to 60 seconds. Pass the nextCursor from the last response as cursor. Leave it out the first time.
curl "https://letsrollcall.com/api/v1/events/movie-night-k3m9x2q7ab/checkins?cursor=$CURSOR" \
-H "Authorization: Bearer $ROLLCALL_API_KEY"- Save
nextCursorafter every response, even when the page is empty or short. - Deduplicate on the entry
id. - Entries appear about 10 seconds after the scan, after a short settle window.
atis the original scan time, even for an offline scan that synced later.- Match entries to your RSVPs with
pass.externalId. Walk-ups created at the door arrive aswalkup.createdwithexternalIdnull. - The feed also has
checkin.in,checkin.outandcheckin.undonerows. There are no webhooks.
Loading the API reference…