# Attend > Help articles and the API reference for Attend, Hack Club's event platform. - [Attend Help](https://attend.hackclub.com/docs/index.md): Everything you need to get from "you're invited!" to walking through the doors of a Hack Club event. - [Welcome to Attend](https://attend.hackclub.com/docs/participants/01-welcome-to-attend.md) - [Logging in to Attend](https://attend.hackclub.com/docs/participants/02-logging-in.md) - [Completing your onboarding](https://attend.hackclub.com/docs/participants/03-completing-onboarding.md) - [Adding your travel details](https://attend.hackclub.com/docs/participants/04-travel-details.md) - [Flying as an unaccompanied minor](https://attend.hackclub.com/docs/participants/05-unaccompanied-minors.md) - [Signing your documents](https://attend.hackclub.com/docs/participants/06-signing-documents.md) - [Physical (paper) documents](https://attend.hackclub.com/docs/participants/07-physical-documents.md) - [Your parent or guardian's part](https://attend.hackclub.com/docs/participants/08-guardian-consent.md) - [Your dashboard & registration status](https://attend.hackclub.com/docs/participants/09-dashboard-and-status.md) - [Your ticket & wallet passes](https://attend.hackclub.com/docs/participants/10-tickets-and-wallet-passes.md) - [Event day: checking in](https://attend.hackclub.com/docs/participants/11-event-day-check-in.md) - [Messages from organizers](https://attend.hackclub.com/docs/participants/12-messages-from-organizers.md) - [Connecting Slack](https://attend.hackclub.com/docs/participants/13-connecting-slack.md) - [Your public profile](https://attend.hackclub.com/docs/participants/14-public-profile.md) - [Updating your info & appearance](https://attend.hackclub.com/docs/participants/15-updating-your-info.md) - [Your badge link](https://attend.hackclub.com/docs/participants/18-badge-link.md) - [Reporting an incident](https://attend.hackclub.com/docs/participants/16-reporting-an-incident.md) - [Troubleshooting & FAQ](https://attend.hackclub.com/docs/participants/17-troubleshooting.md) - [Incidents: your log and Hack Club HQ](https://attend.hackclub.com/docs/organizers/reporting-incidents.md) - [API overview](https://attend.hackclub.com/docs/api-introduction.md): REST API for Attend, Hack Club's event management platform. - [Create a mobile token](https://attend.hackclub.com/docs/api-reference/authentication/create-a-mobile-token.md): Exchange a Hack Club OAuth authorization code, or a signed session token, for a mobile bearer token. Public — no bearer token required. - [Revoke the current token (log out)](https://attend.hackclub.com/docs/api-reference/authentication/revoke-the-current-token-log-out.md) - [Rotate the current token](https://attend.hackclub.com/docs/api-reference/authentication/rotate-the-current-token.md): Revoke the current mobile token and issue a fresh one. - [Current user profile](https://attend.hackclub.com/docs/api-reference/account/current-user-profile.md) - [Look up an event admin by Slack ID](https://attend.hackclub.com/docs/api-reference/account/look-up-an-event-admin-by-slack-id.md): Global admins only. Finds a member of the admin help Slack channel by the Slack ID Hack Club Auth verified (the profile override is ignored) and lists the events they run that haven't ended: those where they are an event admin, ops or safeguarding lead, plus every event in a series they belong to. G… - [List accessible events](https://attend.hackclub.com/docs/api-reference/account/list-accessible-events.md): All events for a global admin, otherwise the events the user is assigned to, ordered by start date. - [Register a push token](https://attend.hackclub.com/docs/api-reference/push-tokens/register-a-push-token.md): Upsert a push-notification token for the current user. Platform is auto-detected (`expo` for Expo tokens, otherwise `unknown`). - [Delete a push token](https://attend.hackclub.com/docs/api-reference/push-tokens/delete-a-push-token.md) - [List inbox messages](https://attend.hackclub.com/docs/api-reference/inbox/list-inbox-messages.md): Organizer messages delivered to the signed-in user's registrations, across all their events, newest first — one entry per message however many channels it arrived on. Only deliveries that actually arrived are listed. Needs only a signed-in person; the account must have a participant profile. This is… - [Get an inbox message](https://attend.hackclub.com/docs/api-reference/inbox/get-an-inbox-message.md): One delivered message, keyed by **message** id — the id a push notification carries — not a delivery id. Opening it marks every delivery of the message to this user read, as on the web. A message that was never delivered to the user is a `404`. - [Report form options](https://attend.hackclub.com/docs/api-reference/incident-reports/report-form-options.md): What the confidential report form offers, prefilled from the caller's account the way the web form prefills a signed-in reporter. `events` are the Attend events a report can be about (running, or ended within the last six months); `emergency_allowed` is false for events that ended over a month ago,… - [File an incident report](https://attend.hackclub.com/docs/api-reference/incident-reports/file-an-incident-report.md): Files a confidential report to Hack Club HQ, linked to the caller's account — the app's version of the public `/incident` form. A bearer token is a signed-in person, so there is no Turnstile challenge. Filing sends the same notifications as the web: an email and Slack post to HQ, a confirmation text… - [Add emails to the ban list](https://attend.hackclub.com/docs/api-reference/bans/add-emails-to-the-ban-list.md): Ban one person from every event. A ban holds one or more emails, so send all of a person's addresses in a single call rather than creating a ban per address. Omitting `expires_at` makes the ban indefinite. - [List series](https://attend.hackclub.com/docs/api-reference/series/list-series.md): With a **series API key**, returns exactly one series — the one the key belongs to. This is how a client discovers its own series when all it has been given is a key. - [Get one series](https://attend.hackclub.com/docs/api-reference/series/get-one-series.md): The series plus a compact list of its events. Pass `current` as the id to mean "whichever series this key belongs to". - [List the events in a series](https://attend.hackclub.com/docs/api-reference/series/list-the-events-in-a-series.md): Summary records for every event in the series, earliest start first (events with no start date last). - [Create an event in the series](https://attend.hackclub.com/docs/api-reference/series/create-an-event-in-the-series.md): **Requires a series API key.** A mobile token, a global API token and an event API key are all refused with `403` — an event has to land in a series, and only a series key names one unambiguously. - [Get one event in the series](https://attend.hackclub.com/docs/api-reference/series/get-one-event-in-the-series.md): An event outside the series returns `404`, not `403` — from this key's point of view it does not exist. - [Update an event in the series](https://attend.hackclub.com/docs/api-reference/series/update-an-event-in-the-series.md): One series key updates any event in its series — that is the point of a series key. Accepts the same fields as the web's event settings form and setup wizard (basics, schedule, location, module toggles); send only the fields you want to change. - [Setup progress](https://attend.hackclub.com/docs/api-reference/event-setup/setup-progress.md): Which steps of the setup wizard this event has left. `remaining` lists the keys of `steps` that are still false; an event whose setup was never completed stays a draft. - [Configure waivers](https://attend.hackclub.com/docs/api-reference/event-setup/configure-waivers.md): Points the event at its DocuSeal waiver templates. - [Finish setup](https://attend.hackclub.com/docs/api-reference/event-setup/finish-setup.md): Takes the event out of draft. Idempotent — an event that is already set up keeps its original completion time. Requires a support email: it is the from and reply-to address on every participant and guardian email, so without one the event cannot open. - [List staff](https://attend.hackclub.com/docs/api-reference/event-staff/list-staff.md): Everyone with a role on this event, plus the catalogue of roles so a client never has to hardcode them. Event admins only (global admins and series members count as event admins). - [Add a staff member](https://attend.hackclub.com/docs/api-reference/event-staff/add-a-staff-member.md): Gives someone a role on the event and emails them about it. Someone who has never signed in to Attend gets a shell account now, which links up on their first sign-in — `account_created` says whether that happened. - [Remove a staff member](https://attend.hackclub.com/docs/api-reference/event-staff/remove-a-staff-member.md): Removes this event role. Access that comes from a *series* role can't be removed here — it is inherited, so removing the row would either do nothing or silently contradict the series. - [Change a staff member's role](https://attend.hackclub.com/docs/api-reference/event-staff/change-a-staff-members-role.md) - [List participants](https://attend.hackclub.com/docs/api-reference/participants/list-participants.md): Full per-participant records for an event. Sensitive medical, dietary, safeguarding, and contact fields are only included for global admins and safeguarding leads. Not available to event API keys. - [Invite a participant](https://attend.hackclub.com/docs/api-reference/participants/invite-a-participant.md): Send an event invitation email and put the person on the roster. - [Search participants](https://attend.hackclub.com/docs/api-reference/participants/search-participants.md): Case-insensitive search by name, email, or id. Returns up to 20 matches. Not available to event API keys. - [Look up a registration by email](https://attend.hackclub.com/docs/api-reference/participants/look-up-a-registration-by-email.md): Read-only check of whether an email or Slack ID is registered for the event. Pass exactly one of `email` or `slack_id`; sending both is a 422. The response echoes whichever one was matched on and leaves the other null. Safe to call on every sign-in; never mutates. Looking up by `email` is available… - [Minimal roster](https://attend.hackclub.com/docs/api-reference/participants/minimal-roster.md): Identity-only roster (no sensitive PII), excluding withdrawn and rejected registrations. Available to event API keys. - [Get a participant](https://attend.hackclub.com/docs/api-reference/participants/get-a-participant.md): Full detailed record for one registration, including personal, accommodation, consent, and guardian sections (and sensitive medical / accessibility / safeguarding detail for permitted callers). Not available to event API keys. - [Remove a participant from the event](https://attend.hackclub.com/docs/api-reference/participants/remove-a-participant-from-the-event.md): Deletes this registration — the profile, travel, consents and scans attached to it — and revokes this event's invitation for their email, so the original invitation link can no longer re-create the registration. The person's Attend account and their registrations for other events survive. Event admi… - [Update a participant](https://attend.hackclub.com/docs/api-reference/participants/update-a-participant.md): Edits the person and/or where their registration stands. Only the keys you send are written. - [List notes](https://attend.hackclub.com/docs/api-reference/notes/list-notes.md): Notes on a participant's registration, newest first. User tokens only. - [Create a note](https://attend.hackclub.com/docs/api-reference/notes/create-a-note.md): Add a note authored by the current user. User tokens only. - [List scans](https://attend.hackclub.com/docs/api-reference/scans/list-scans.md): Recent scans for the event. Pass `since` for incremental sync (oldest-first, up to 500); otherwise the latest 100 are returned. - [Record a scan](https://attend.hackclub.com/docs/api-reference/scans/record-a-scan.md): Record a QR / NFC / manual scan for a participant. Pass `client_scan_id` for idempotency — a repeat returns the existing scan with `deduplicated: true`. `badge_token` accepts either an assigned NFC badge belonging to the selected event or an active Hack Club passport. Passport scans work regardless… - [Undo scans for a participant](https://attend.hackclub.com/docs/api-reference/scans/undo-scans-for-a-participant.md): Delete a participant's scans (all, or just one context) and clear their check-in if no check-in scans remain. Despite the name, `id` is a participant_event id (matched first) or participant id — not a scan id. - [List scan contexts](https://attend.hackclub.com/docs/api-reference/scan-contexts/list-scan-contexts.md) - [List stays](https://attend.hackclub.com/docs/api-reference/stays/list-stays.md): Every stay at the event with its eligibility options, so an integration can look up the stay and option ids the roster endpoints take. The main stays with `enrollment: everyone` include everyone with accommodation and have no roster. - [List a stay's roster](https://attend.hackclub.com/docs/api-reference/stays/list-a-stays-roster.md): Everyone on an eligible-only stay's roster. Filter by `external_reference` to find the entry for an order. - [Add someone to a stay's roster](https://attend.hackclub.com/docs/api-reference/stays/add-someone-to-a-stays-roster.md): Puts a registered participant on an eligible-only stay's roster, which makes them part of that stay's rooming pool. Identify them by `participant_event_id` or by `email` (matched case-insensitively against this event's registrations; Attend doesn't register anyone here). Sending someone who's alread… - [Remove someone from a stay's roster](https://attend.hackclub.com/docs/api-reference/stays/remove-someone-from-a-stays-roster.md): Takes someone off the roster, e.g. after a refund. Any room they had in this stay is given up too; their other stays are untouched. - [Show the travel calendar](https://attend.hackclub.com/docs/api-reference/travel-calendar/show-the-travel-calendar.md): Day-grouped inbound and outbound travel for participants with completed registrations, across all transport modes. Includes pickup-state summaries and accepts an event API key. - [Show the travel calendar (legacy path)](https://attend.hackclub.com/docs/api-reference/travel-calendar/show-the-travel-calendar-legacy-path.md): Deprecated alias for `/events/{event_id}/travel`. - [List Slack blasts](https://attend.hackclub.com/docs/api-reference/slack-blasts/list-slack-blasts.md) - [Send a Slack blast](https://attend.hackclub.com/docs/api-reference/slack-blasts/send-a-slack-blast.md): Broadcast a message to every completed participant with a linked Slack account, and enqueue delivery. - [Get a Slack blast](https://attend.hackclub.com/docs/api-reference/slack-blasts/get-a-slack-blast.md) - [List messages](https://attend.hackclub.com/docs/api-reference/messages/list-messages.md): Every broadcast on the event, drafts included, newest first. Open to anyone with access to the event (any event role, a series role on its series, or a global admin) — the same rule as the web composer. API keys are refused: a message is attributed to the person who sends it. - [Create a draft message](https://attend.hackclub.com/docs/api-reference/messages/create-a-draft-message.md): Saves a draft attributed to the caller. Nothing is sent: preview it, then call `send_now`. `participant_event_ids` only counts when `audience` is `specific_participants`; `group_ids` narrows any attendee audience. Both are folded into the message's audience filters and read back as top-level arrays. - [Composer options](https://attend.hackclub.com/docs/api-reference/messages/composer-options.md): The composer's pick lists: audiences (the groups audience only when the event has groups enabled), channels (SMS is flagged `disabled` when Twilio is switched off in settings), the event's groups and participants, and the defaults a new message starts from. - [Get a message](https://attend.hackclub.com/docs/api-reference/messages/get-a-message.md): The message with its deliveries grouped per recipient, and what the caller can do with it next. For callers in a PII-restricted role (`limited`), an SMS delivery's `recipient_identifier` — a phone number — is `null`; email addresses and Slack IDs are still shown. - [Delete a message](https://attend.hackclub.com/docs/api-reference/messages/delete-a-message.md): Deletes any message that isn't `sending` or `completed` — drafts, scheduled and cancelled messages, and failed sends. A message that is sending or has completed is kept. - [Update a message](https://attend.hackclub.com/docs/api-reference/messages/update-a-message.md): Edits a draft or scheduled message. Send the whole set of picks: audience filters are rebuilt from `participant_event_ids` and `group_ids` on every update, so omitting them clears them. A message that has started sending can't be edited. - [Preview a message](https://attend.hackclub.com/docs/api-reference/messages/preview-a-message.md): Step two of the composer: how many people the message would reach (and up to 20 of their names), and how it renders on each channel it uses. Channel renderings are `null` for channels the message doesn't use. Only drafts and scheduled messages can be previewed. - [Send a message](https://attend.hackclub.com/docs/api-reference/messages/send-a-message.md): Sends a draft or scheduled message now — unless its `scheduled_at` is still in the future, in which case it is marked `scheduled` and goes out at that time. Safe against a double tap: a second call after the send has started is a `422` and changes nothing. - [Cancel a scheduled message](https://attend.hackclub.com/docs/api-reference/messages/cancel-a-scheduled-message.md) - [Retry failed deliveries](https://attend.hackclub.com/docs/api-reference/messages/retry-failed-deliveries.md): Puts every failed delivery back in the queue and sets the message to `sending`. - [Retry one delivery](https://attend.hackclub.com/docs/api-reference/messages/retry-one-delivery.md): Puts a single failed delivery back in the queue. - [Send to new recipients](https://attend.hackclub.com/docs/api-reference/messages/send-to-new-recipients.md): Sends an already-sent message to everyone who has joined its audience since, as catch-up deliveries. `new_recipient_count` on the message says how many that would be. Only for a message that has finished sending (`completed` or `failed`); a match of nobody new is a `200` with a notice saying so. - [List incidents](https://attend.hackclub.com/docs/api-reference/incidents/list-incidents.md): The event's incident log, newest first, limited to what the caller may see: incidents shared with one of their roles on this event, plus the ones they reported. Requires a role on the event itself (or global admin) — series membership alone does not open the incident log; the event's `can_view_incid… - [Log an incident](https://attend.hackclub.com/docs/api-reference/incidents/log-an-incident.md): Logs an incident reported by the caller. Anyone with a role on the event can log one. - [Incident form options](https://attend.hackclub.com/docs/api-reference/incidents/incident-form-options.md): What the log and edit forms offer: categories, the S0–S3 incident scale, statuses, the roles an incident can be shared with and the default share, plus the participants and staff on this event an incident can name. `reporter_phone` prefills the escalation callback number from the caller's Hack Club… - [Get an incident](https://attend.hackclub.com/docs/api-reference/incidents/get-an-incident.md): One incident, for someone it is shared with by role or who reported it. A reporter who holds none of its roles gets a receipt: what they submitted and where it stands, with `actions_taken` `null` and an empty `timeline` — the casework belongs to the people handling it. `permissions` says what the ca… - [Update an incident](https://attend.hackclub.com/docs/api-reference/incidents/update-an-incident.md): Edits the incident, including who it is shared with. Needs a role the incident is shared with — reporting it is not enough. Send only the fields you want to change. If the incident was posted to Slack, the change is posted to its thread. - [Escalate an incident to HQ](https://attend.hackclub.com/docs/api-reference/incidents/escalate-an-incident-to-hq.md): Files a confidential report to Hack Club HQ from this incident, with the same notifications a report from the public form triggers (email, Slack, a confirmation text, and phone calls for an S0). Anyone who can see the incident, its reporter included, can escalate it. Idempotent: escalating an incide… - [Comment on an incident](https://attend.hackclub.com/docs/api-reference/incidents/comment-on-an-incident.md): Adds a comment to the incident's timeline, for anyone who can see the incident. A `new_status` sent with the comment is applied only when the caller may update the incident; from a reporter who holds none of its roles it is silently dropped and the comment is still saved. If the incident was posted… - [Ensure an NFC badge token](https://attend.hackclub.com/docs/api-reference/nfc-badges/ensure-an-nfc-badge-token.md): Create an event-scoped badge token for the participant if one does not exist. - [Confirm an NFC badge assignment](https://attend.hackclub.com/docs/api-reference/nfc-badges/confirm-an-nfc-badge-assignment.md) - [Reset an NFC badge token](https://attend.hackclub.com/docs/api-reference/nfc-badges/reset-an-nfc-badge-token.md) - [Search airports](https://attend.hackclub.com/docs/api-reference/travel/search-airports.md): Search airports by keyword. **Authenticated with the web session cookie, not a bearer token.** Returns an empty list for terms shorter than 2 characters. - [Validate a flight](https://attend.hackclub.com/docs/api-reference/travel/validate-a-flight.md): Validate a flight code + date and return matching legs and airline info. **Authenticated with the web session cookie, not a bearer token.** Always responds `200`; check the `valid` field. ## OpenAPI Specs - [openapi](/docs/openapi.yml) This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.