{
"error": "Category can't be blank",
"errors": [
"Category can't be blank"
]
}
Incidents
Log an incident
Logs an incident reported by the caller. Anyone with a role on the event
can log one.
Send escalate: true with an escalation object to also file a
confidential report to Hack Club HQ in the same call. Both halves are
validated before anything is saved, so a failed escalation (a missing
callback number, say) leaves no log entry behind; its errors come back
prefixed Escalation:. Behavior, safeguarding and other incidents that
are escalated are also posted to the Fire Dept Slack channel; medical
incidents stay HQ-only.
A medical incident must name at least one participant and one helping
staff member, and list the medication when medication_dispensed is
true.
POST
/
events
/
{event_id}
/
incidents
curl --request POST \ --url https://attend.hackclub.com/api/v1/events/{event_id}/incidents \ --header 'Authorization: Bearer <token>' \ --header 'Content-Type: application/json' \ --data '{ "incident": { "category": "behavior", "severity": "s2", "summary": "Shoving in the queue", "details": "Two attendees shoved each other.", "visible_to_roles": [ "event_admin" ] }}'
Says whether the escalation went through. An incident can be logged while the HQ report fails to file; retry with POST /events/{event_id}/incidents/{id}/escalate.
Example:
"Incident logged and escalated to Hack Club HQ."
Was this page helpful?
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Attend","description":"Help articles and the API reference for Attend, Hack Club's event platform.","colors":{"primary":"#ec3750","light":"#ff6b7d","dark":"#d42f46"},"favicon":"https://mintcdn.com/hack-club/JxHviSe0hsr-zlFr/favicon.png?fit=max\u0026auto=format\u0026n=JxHviSe0hsr-zlFr\u0026q=85\u0026s=c87622b7179125623f4fd97cb75760c9","navbar":{"links":[{"href":"https://attend.hackclub.com","label":"Attend"}],"primary":{"type":"github","href":"https://github.com/hackclub/attend"}},"footer":{"socials":{"github":"https://github.com/hackclub/attend","website":"https://hackclub.com"}},"styling":{"latex":false},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"hack-club","hasAudioNarration":false,"actualSubdomain":"hack-club","customDomains":["attend.hackclub.com"],"gitSource":{"type":"github","owner":"hackclub","repo":"attend","deployBranch":"main","contentDirectory":"docs","isPrivate":true,"mountPath":"","label":""},"chroma":{"latestBuiltDeploymentHistoryId":"6aec497507f9eeebb2937881","collectionId":"ef92b0b0-73f7-4666-9b5f-a79f3e716254","liveDeploymentHistoryId":"6aec497507f9eeebb2937881","schemaVersion":"v3"},"feedback":{"thumbs":true,"agentFeedback":false},"entitlements":{"AI_CHAT":{"status":"ENABLED"},"WEB_MCP":{"status":"ENABLED"},"NARRATION":{"status":"ENABLED"}},"buildId":"6aec497507f9eeebb2937881","clientVersion":"0.0.4067","searchFilterCounts":[{"language":"default","tag":"API reference","count":74},{"language":"default","tag":"Endpoints","count":73},{"language":"default","tag":"Help","count":21},{"language":"default","tag":"Messages","count":12},{"language":"default","tag":"Participants","count":8},{"language":"default","tag":"Incidents","count":7},{"language":"default","tag":"Series","count":6},{"language":"default","tag":"Your event","count":5},{"language":"default","tag":"Getting started","count":4},{"language":"default","tag":"Travel","count":4}],"searchSettings":{"showContentSnippets":true}},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableContextualStarterQuestions":false,"enableAskAiSearchBar":true,"deflection":{"enabled":true,"email":"[email protected]"}},"basePath":"/docs","hasChatPermissions":true,"hasWebMcpPermissions":true,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"rbac-expansion","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"vite-origin","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-serve","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"live-agents","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[],"page":{"pagePath":"api-reference/incidents/log-an-incident","slug":"/api-reference/incidents/log-an-incident","pageMetadata":{"title":"Log an incident","description":"Logs an incident reported by the caller. Anyone with a role on the event\ncan log one.\n\nSend `escalate: true` with an `escalation` object to also file a\nconfidential report to Hack Club HQ in the same call. Both halves are\nvalidated before anything is saved, so a failed escalation (a missing\ncallback number, say) leaves no log entry behind; its errors come back\nprefixed `Escalation:`. Behavior, safeguarding and other incidents that\nare escalated are also posted to the Fire Dept Slack channel; medical\nincidents stay HQ-only.\n\nA medical incident must name at least one participant and one helping\nstaff member, and list the medication when `medication_dispensed` is\ntrue.\n","deprecated":null,"version":null,"sidebarTitle":"Log an incident","openapi":"/openapi.yml post /events/{event_id}/incidents","href":"/api-reference/incidents/log-an-incident","autogeneratedByOpenApi":true},"description":{"compiledSource":"\"use strict\";\nconst {Fragment: _Fragment, jsx: _jsx, jsxs: _jsxs} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n code: \"code\",\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsxs(_Fragment, {\n children: [_jsx(_components.p, {\n children: \"Logs an incident reported by the caller. Anyone with a role on the event\\ncan log one.\"\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"Send \", _jsx(_components.code, {\n children: \"escalate: true\"\n }), \" with an \", _jsx(_components.code, {\n children: \"escalation\"\n }), \" object to also file a\\nconfidential report to Hack Club HQ in the same call. Both halves are\\nvalidated before anything is saved, so a failed escalation (a missing\\ncallback number, say) leaves no log entry behind; its errors come back\\nprefixed \", _jsx(_components.code, {\n children: \"Escalation:\"\n }), \". Behavior, safeguarding and other incidents that\\nare escalated are also posted to the Fire Dept Slack channel; medical\\nincidents stay HQ-only.\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"A medical incident must name at least one participant and one helping\\nstaff member, and list the medication when \", _jsx(_components.code, {\n children: \"medication_dispensed\"\n }), \" is\\ntrue.\"]\n })]\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){return _jsx(_Fragment,{})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Log an incident","description":"Logs an incident reported by the caller. Anyone with a role on the event\ncan log one.\n\nSend `escalate: true` with an `escalation` object to also file a\nconfidential report to Hack Club HQ in the same call. Both halves are\nvalidated before anything is saved, so a failed escalation (a missing\ncallback number, say) leaves no log entry behind; its errors come back\nprefixed `Escalation:`. Behavior, safeguarding and other incidents that\nare escalated are also posted to the Fire Dept Slack channel; medical\nincidents stay HQ-only.\n\nA medical incident must name at least one participant and one helping\nstaff member, and list the medication when `medication_dispensed` is\ntrue.\n","deprecated":null,"version":null,"sidebarTitle":"Log an incident","openapi":"/openapi.yml post /events/{event_id}/incidents","href":"/api-reference/incidents/log-an-incident","autogeneratedByOpenApi":true}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[],"codeExamples":{}},"jsLinks":[],"openApiReferenceData":{"operation":{"tags":["Incidents"],"summary":"Log an incident","x-mint":{"href":"/api-reference/incidents/log-an-incident"},"description":"Logs an incident reported by the caller. Anyone with a role on the event\ncan log one.\n\nSend `escalate: true` with an `escalation` object to also file a\nconfidential report to Hack Club HQ in the same call. Both halves are\nvalidated before anything is saved, so a failed escalation (a missing\ncallback number, say) leaves no log entry behind; its errors come back\nprefixed `Escalation:`. Behavior, safeguarding and other incidents that\nare escalated are also posted to the Fire Dept Slack channel; medical\nincidents stay HQ-only.\n\nA medical incident must name at least one participant and one helping\nstaff member, and list the medication when `medication_dispensed` is\ntrue.\n","parameters":["a3633366-ed01-44e1-9059-72d5b27d268c"],"requestBody":"9cb1084b-3a0f-439f-9789-297ac17d2d78","responses":{"201":"1145a167-84fa-4be0-920f-bd72d792e942","401":"dfc77bf6-9ac6-4ea0-990b-eb3fa0df3ae9","403":"deb43679-ecc0-46e3-bc4f-e1675d7f2c0f","404":"075c707f-c9b3-4f98-8d9e-df46a4231fac","422":"45f1ae78-81b2-4fbf-98f9-0a8768646bb6"},"method":"post","type":"path","servers":["cdc77891-66a2-41cc-83da-2876c8717128","c9030575-29d2-4e8c-8e07-86c6cfeebdd3"],"security":["a99530a7-e390-40b8-a239-5b04fc3ebc3f"],"path":"/events/{event_id}/incidents","baseUrlOptions":["https://attend.hackclub.com/api/v1","http://localhost:3000/api/v1"],"title":"Log an incident","codeSamples":[],"requiredOnlyExamples":false,"requestExampleType":"generated","responseExampleType":"generated"},"dependencies":{"parameters":{"a3633366-ed01-44e1-9059-72d5b27d268c":{"name":"event_id","in":"path","required":true,"schema":{"type":"string","isRequired":true,"description":"Event id or slug.","uniqueKey":"","typeLabel":"string"},"description":"Event id or slug."}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["incident"],"properties":{"incident":{"type":"object","description":"Every incident field the API can write. On create, `category` and `severity` are required; on update send only what changes.","properties":{"category":{"type":"string","enum":["safeguarding","medical","behavior","other"],"uniqueKey":"incident.category","typeLabel":"enum\u003cstring>"},"severity":{"type":"string","enum":["s0","s1","s2","s3"],"uniqueKey":"incident.severity","typeLabel":"enum\u003cstring>"},"status":{"type":"string","enum":["open","in_review","closed"],"uniqueKey":"incident.status","typeLabel":"enum\u003cstring>"},"summary":{"type":"string","uniqueKey":"incident.summary","typeLabel":"string"},"details":{"type":"string","uniqueKey":"incident.details","typeLabel":"string"},"actions_taken":{"type":"string","uniqueKey":"incident.actions_taken","typeLabel":"string"},"location":{"type":"string","uniqueKey":"incident.location","typeLabel":"string"},"occurred_at":{"type":"string","format":"date-time","uniqueKey":"incident.occurred_at","typeLabel":"string\u003cdate-time>"},"visible_to_roles":{"type":"array","description":"Event roles that can see and handle the incident. The options endpoint returns the default (`event_admin`, `safeguarding_lead`).","items":{"type":"string","enum":["event_admin","ops","limited","safeguarding_lead","read_only"],"description":"`event_admin` runs the event; `ops` handles day-to-day logistics; `limited` is ops without a participant's most identifying details; `safeguarding_lead` sees full medical and safeguarding records; `read_only` looks and touches nothing.","uniqueKey":"incident.visible_to_roles.items.[INDEX]","typeLabel":"enum\u003cstring>"},"uniqueKey":"incident.visible_to_roles","typeLabel":"enum\u003cstring>[]"},"participant_event_ids":{"type":"array","description":"Participants involved, by participant_event id. Required (non-empty) for a medical incident.","items":{"type":"string","format":"uuid","uniqueKey":"incident.participant_event_ids.items.[INDEX]","typeLabel":"string\u003cuuid>"},"uniqueKey":"incident.participant_event_ids","typeLabel":"string\u003cuuid>[]"},"helping_staff_ids":{"type":"array","description":"Staff who helped, by user id. Required (non-empty) for a medical incident.","items":{"type":"string","format":"uuid","uniqueKey":"incident.helping_staff_ids.items.[INDEX]","typeLabel":"string\u003cuuid>"},"uniqueKey":"incident.helping_staff_ids","typeLabel":"string\u003cuuid>[]"},"medication_dispensed":{"type":"boolean","description":"Medical incidents only; ignored (and medications dropped) otherwise.","uniqueKey":"incident.medication_dispensed","typeLabel":"boolean"},"medications_attributes":{"type":"array","description":"Medication given. Send `id` to edit an existing row, and `_destroy: true` with it to remove one.","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid","uniqueKey":"incident.medications_attributes.items.[INDEX].id","typeLabel":"string\u003cuuid>"},"name":{"type":"string","uniqueKey":"incident.medications_attributes.items.[INDEX].name","typeLabel":"string"},"dose":{"type":"string","uniqueKey":"incident.medications_attributes.items.[INDEX].dose","typeLabel":"string"},"notes":{"type":"string","uniqueKey":"incident.medications_attributes.items.[INDEX].notes","typeLabel":"string"},"_destroy":{"type":"boolean","uniqueKey":"incident.medications_attributes.items.[INDEX]._destroy","typeLabel":"boolean"}},"uniqueKey":"incident.medications_attributes.items.[INDEX]","typeLabel":"object"},"uniqueKey":"incident.medications_attributes","typeLabel":"object[]"}},"isRequired":true,"uniqueKey":"incident","typeLabel":"object"},"escalate":{"type":"boolean","default":false,"description":"Also escalate to Hack Club HQ.","uniqueKey":"escalate","typeLabel":"boolean"},"escalation":{"type":"object","description":"What the HQ report needs beyond the incident itself.","properties":{"reporter_phone":{"type":"string","description":"Callback number, E.164. Defaults to the phone on the caller's Hack Club account; the report can't be filed without one.","example":"+14155550177","uniqueKey":"escalation.reporter_phone","typeLabel":"string"},"emergency_services_called":{"type":"boolean","default":false,"description":"True files the report as S0.","uniqueKey":"escalation.emergency_services_called","typeLabel":"boolean"}},"uniqueKey":"escalation","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"examples":{"log_only":{"title":"log_only","value":{"incident":{"category":"behavior","severity":"s2","summary":"Shoving in the queue","details":"Two attendees shoved each other.","visible_to_roles":["event_admin"]}}},"log_and_escalate":{"title":"log_and_escalate","value":{"incident":{"category":"behavior","severity":"s1","summary":"Harassment at lunch","details":"Reported by two attendees.","visible_to_roles":["event_admin","safeguarding_lead"]},"escalate":true,"escalation":{"reporter_phone":"+14155550177","emergency_services_called":false}}}},"exampleType":"examples"}},"exampleType":"examples"},"responses":{"1145a167-84fa-4be0-920f-bd72d792e942":{"description":"Incident logged (and escalated, if asked).","content":{"application/json":{"schema":{"type":"object","properties":{"incident":{"type":"object","description":"The full incident. For a reporter who holds none of the roles it is shared with, `actions_taken` is `null` and `timeline` is empty.","properties":{"id":{"type":"string","format":"uuid","uniqueKey":"incident.id","typeLabel":"string\u003cuuid>"},"category":{"type":"string","enum":["safeguarding","medical","behavior","other"],"uniqueKey":"incident.category","typeLabel":"enum\u003cstring>"},"severity":{"type":"string","enum":["s0","s1","s2","s3"],"uniqueKey":"incident.severity","typeLabel":"enum\u003cstring>"},"status":{"type":"string","enum":["open","in_review","closed"],"uniqueKey":"incident.status","typeLabel":"enum\u003cstring>"},"summary":{"oneOf":[{"type":"string","example":"Shoving in the queue","uniqueKey":"incident.summary.oneOf.0","typeLabel":"string"},{"type":"null","example":"Shoving in the queue","uniqueKey":"incident.summary.oneOf.1","typeLabel":"null"}],"uniqueKey":"incident.summary","typeLabel":"string | null"},"location":{"oneOf":[{"type":"string","uniqueKey":"incident.location.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"incident.location.oneOf.1","typeLabel":"null"}],"uniqueKey":"incident.location","typeLabel":"string | null"},"occurred_at":{"oneOf":[{"type":"string","format":"date-time","uniqueKey":"incident.occurred_at.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","format":"date-time","uniqueKey":"incident.occurred_at.oneOf.1","typeLabel":"null"}],"uniqueKey":"incident.occurred_at","typeLabel":"string\u003cdate-time> | null"},"created_at":{"type":"string","format":"date-time","uniqueKey":"incident.created_at","typeLabel":"string\u003cdate-time>"},"reported_by":{"type":"object","properties":{"id":{"type":"string","format":"uuid","uniqueKey":"incident.reported_by.id","typeLabel":"string\u003cuuid>"},"name":{"type":"string","uniqueKey":"incident.reported_by.name","typeLabel":"string"},"email":{"type":"string","format":"email","uniqueKey":"incident.reported_by.email","typeLabel":"string\u003cemail>"}},"uniqueKey":"incident.reported_by","typeLabel":"object"},"participant_names":{"type":"array","description":"Preferred (or legal first) names of the participants involved.","items":{"type":"string","uniqueKey":"incident.participant_names.items.[INDEX]","typeLabel":"string"},"uniqueKey":"incident.participant_names","typeLabel":"string[]"},"hq_report":{"oneOf":[{"type":"object","description":"The confidential HQ report, once the incident has been escalated.","properties":{"id":{"type":"string","format":"uuid","uniqueKey":"incident.hq_report.oneOf.0.id","typeLabel":"string\u003cuuid>"},"status":{"type":"string","enum":["open","in_review","resolved"],"uniqueKey":"incident.hq_report.oneOf.0.status","typeLabel":"enum\u003cstring>"},"created_at":{"type":"string","format":"date-time","uniqueKey":"incident.hq_report.oneOf.0.created_at","typeLabel":"string\u003cdate-time>"}},"uniqueKey":"incident.hq_report.oneOf.0","typeLabel":"object"},{"type":"null","description":"The confidential HQ report, once the incident has been escalated.","properties":{"id":{"type":"string","format":"uuid"},"status":{"type":"string","enum":["open","in_review","resolved"]},"created_at":{"type":"string","format":"date-time"}},"uniqueKey":"incident.hq_report.oneOf.1","typeLabel":"null"}],"uniqueKey":"incident.hq_report","typeLabel":"object | null"},"details":{"oneOf":[{"type":"string","uniqueKey":"incident.details.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"incident.details.oneOf.1","typeLabel":"null"}],"uniqueKey":"incident.details","typeLabel":"string | null"},"actions_taken":{"oneOf":[{"type":"string","description":"Casework — `null` for a reporter outside the shared roles.","uniqueKey":"incident.actions_taken.oneOf.0","typeLabel":"string"},{"type":"null","description":"Casework — `null` for a reporter outside the shared roles.","uniqueKey":"incident.actions_taken.oneOf.1","typeLabel":"null"}],"uniqueKey":"incident.actions_taken","typeLabel":"string | null"},"visible_to_roles":{"type":"array","description":"The event roles this incident is shared with.","items":{"type":"string","enum":["event_admin","ops","limited","safeguarding_lead","read_only"],"description":"`event_admin` runs the event; `ops` handles day-to-day logistics; `limited` is ops without a participant's most identifying details; `safeguarding_lead` sees full medical and safeguarding records; `read_only` looks and touches nothing.","uniqueKey":"incident.visible_to_roles.items.[INDEX]","typeLabel":"enum\u003cstring>"},"uniqueKey":"incident.visible_to_roles","typeLabel":"enum\u003cstring>[]"},"medication_dispensed":{"type":"boolean","uniqueKey":"incident.medication_dispensed","typeLabel":"boolean"},"medications":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid","uniqueKey":"incident.medications.items.[INDEX].id","typeLabel":"string\u003cuuid>"},"name":{"type":"string","uniqueKey":"incident.medications.items.[INDEX].name","typeLabel":"string"},"dose":{"oneOf":[{"type":"string","uniqueKey":"incident.medications.items.[INDEX].dose.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"incident.medications.items.[INDEX].dose.oneOf.1","typeLabel":"null"}],"uniqueKey":"incident.medications.items.[INDEX].dose","typeLabel":"string | null"},"notes":{"oneOf":[{"type":"string","uniqueKey":"incident.medications.items.[INDEX].notes.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"incident.medications.items.[INDEX].notes.oneOf.1","typeLabel":"null"}],"uniqueKey":"incident.medications.items.[INDEX].notes","typeLabel":"string | null"}},"uniqueKey":"incident.medications.items.[INDEX]","typeLabel":"object"},"uniqueKey":"incident.medications","typeLabel":"object[]"},"participants":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid","description":"The participant_event id.","uniqueKey":"incident.participants.items.[INDEX].id","typeLabel":"string\u003cuuid>"},"name":{"type":"string","example":"Jane Doe","uniqueKey":"incident.participants.items.[INDEX].name","typeLabel":"string"},"email":{"type":"string","format":"email","uniqueKey":"incident.participants.items.[INDEX].email","typeLabel":"string\u003cemail>"}},"uniqueKey":"incident.participants.items.[INDEX]","typeLabel":"object"},"uniqueKey":"incident.participants","typeLabel":"object[]"},"helping_staff":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid","uniqueKey":"incident.helping_staff.items.[INDEX].id","typeLabel":"string\u003cuuid>"},"name":{"type":"string","uniqueKey":"incident.helping_staff.items.[INDEX].name","typeLabel":"string"},"email":{"type":"string","format":"email","uniqueKey":"incident.helping_staff.items.[INDEX].email","typeLabel":"string\u003cemail>"}},"uniqueKey":"incident.helping_staff.items.[INDEX]","typeLabel":"object"},"uniqueKey":"incident.helping_staff","typeLabel":"object[]"},"timeline":{"type":"array","description":"Comments and changes, newest first. Empty for a reporter outside the shared roles.","items":{"type":"object","description":"A comment (`type: comment`) or a recorded change (`type: change`). The change a status-picking comment caused is folded into that comment.","properties":{"type":{"type":"string","enum":["comment","change"],"uniqueKey":"incident.timeline.items.[INDEX].type","typeLabel":"enum\u003cstring>"},"id":{"type":"string","uniqueKey":"incident.timeline.items.[INDEX].id","typeLabel":"string"},"created_at":{"type":"string","format":"date-time","uniqueKey":"incident.timeline.items.[INDEX].created_at","typeLabel":"string\u003cdate-time>"},"body":{"type":"string","description":"Comments only.","uniqueKey":"incident.timeline.items.[INDEX].body","typeLabel":"string"},"new_status":{"oneOf":[{"type":"string","description":"Comments only.","enum":["open","in_review","closed"],"uniqueKey":"incident.timeline.items.[INDEX].new_status.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","uniqueKey":"incident.timeline.items.[INDEX].new_status.oneOf.1","typeLabel":"null"}],"uniqueKey":"incident.timeline.items.[INDEX].new_status","typeLabel":"enum\u003cstring> | null"},"author_name":{"oneOf":[{"type":"string","description":"Comments only. Comments made from the Slack thread read `Fire Dept (\u003cSlack name>)`.","uniqueKey":"incident.timeline.items.[INDEX].author_name.oneOf.0","typeLabel":"string"},{"type":"null","description":"Comments only. Comments made from the Slack thread read `Fire Dept (\u003cSlack name>)`.","uniqueKey":"incident.timeline.items.[INDEX].author_name.oneOf.1","typeLabel":"null"}],"uniqueKey":"incident.timeline.items.[INDEX].author_name","typeLabel":"string | null"},"source":{"oneOf":[{"type":"string","description":"Comments only, e.g. `slack`.","uniqueKey":"incident.timeline.items.[INDEX].source.oneOf.0","typeLabel":"string"},{"type":"null","description":"Comments only, e.g. `slack`.","uniqueKey":"incident.timeline.items.[INDEX].source.oneOf.1","typeLabel":"null"}],"uniqueKey":"incident.timeline.items.[INDEX].source","typeLabel":"string | null"},"slack_url":{"oneOf":[{"type":"string","format":"uri","description":"Comments only — the Slack message, for comments made in Slack.","uniqueKey":"incident.timeline.items.[INDEX].slack_url.oneOf.0","typeLabel":"string\u003curi>"},{"type":"null","format":"uri","description":"Comments only — the Slack message, for comments made in Slack.","uniqueKey":"incident.timeline.items.[INDEX].slack_url.oneOf.1","typeLabel":"null"}],"uniqueKey":"incident.timeline.items.[INDEX].slack_url","typeLabel":"string\u003curi> | null"},"action":{"type":"string","enum":["created","updated"],"description":"Changes only.","uniqueKey":"incident.timeline.items.[INDEX].action","typeLabel":"enum\u003cstring>"},"actor_name":{"type":"string","description":"Changes only. `System` when no person made it.","uniqueKey":"incident.timeline.items.[INDEX].actor_name","typeLabel":"string"},"fields":{"type":"array","description":"Changes only — the humanized names of the fields that changed.","items":{"type":"string","uniqueKey":"incident.timeline.items.[INDEX].fields.items.[INDEX]","typeLabel":"string"},"uniqueKey":"incident.timeline.items.[INDEX].fields","typeLabel":"string[]"}},"uniqueKey":"incident.timeline.items.[INDEX]","typeLabel":"object"},"uniqueKey":"incident.timeline","typeLabel":"object[]"},"permissions":{"type":"object","description":"What the caller can do with this incident.","properties":{"update":{"type":"boolean","uniqueKey":"incident.permissions.update","typeLabel":"boolean"},"comment":{"type":"boolean","uniqueKey":"incident.permissions.comment","typeLabel":"boolean"},"change_status":{"type":"boolean","description":"Whether a `new_status` sent with a comment will be applied.","uniqueKey":"incident.permissions.change_status","typeLabel":"boolean"},"view_casework":{"type":"boolean","uniqueKey":"incident.permissions.view_casework","typeLabel":"boolean"},"escalate":{"type":"boolean","description":"False once the incident has been escalated.","uniqueKey":"incident.permissions.escalate","typeLabel":"boolean"}},"uniqueKey":"incident.permissions","typeLabel":"object"}},"uniqueKey":"incident","typeLabel":"object"},"notice":{"type":"string","description":"Says whether the escalation went through. An incident can be logged while the HQ report fails to file; retry with `POST /events/{event_id}/incidents/{id}/escalate`.","example":"Incident logged and escalated to Hack Club HQ.","uniqueKey":"notice","typeLabel":"string"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"incident":{"id":"3c90c3cc-0d44-4b50-8888-8dd25736052a","category":"safeguarding","severity":"s0","status":"open","summary":"Shoving in the queue","location":"\u003cstring>","occurred_at":"2023-11-07T05:31:56Z","created_at":"2023-11-07T05:31:56Z","reported_by":{"id":"3c90c3cc-0d44-4b50-8888-8dd25736052a","name":"\u003cstring>","email":"[email protected]"},"participant_names":["\u003cstring>"],"hq_report":{"id":"3c90c3cc-0d44-4b50-8888-8dd25736052a","status":"open","created_at":"2023-11-07T05:31:56Z"},"details":"\u003cstring>","actions_taken":"\u003cstring>","visible_to_roles":["event_admin"],"medication_dispensed":true,"medications":[{"id":"3c90c3cc-0d44-4b50-8888-8dd25736052a","name":"\u003cstring>","dose":"\u003cstring>","notes":"\u003cstring>"}],"participants":[{"id":"3c90c3cc-0d44-4b50-8888-8dd25736052a","name":"Jane Doe","email":"[email protected]"}],"helping_staff":[{"id":"3c90c3cc-0d44-4b50-8888-8dd25736052a","name":"\u003cstring>","email":"[email protected]"}],"timeline":[{"type":"comment","id":"\u003cstring>","created_at":"2023-11-07T05:31:56Z","body":"\u003cstring>","new_status":"open","author_name":"\u003cstring>","source":"\u003cstring>","slack_url":"\u003cstring>","action":"created","actor_name":"\u003cstring>","fields":["\u003cstring>"]}],"permissions":{"update":true,"comment":true,"change_status":true,"view_casework":true,"escalate":true}},"notice":"Incident logged and escalated to Hack Club HQ."}}},"exampleType":"generated"}},"exampleType":"generated"},"dfc77bf6-9ac6-4ea0-990b-eb3fa0df3ae9":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Unauthorized","uniqueKey":"error","typeLabel":"string"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":"Unauthorized"}}},"exampleType":"generated"}},"exampleType":"generated"},"deb43679-ecc0-46e3-bc4f-e1675d7f2c0f":{"description":"The caller's roles on this event don't allow this (see the operation's description), or the caller is an API key (`API key is not authorized for incidents`).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Unauthorized","uniqueKey":"error","typeLabel":"string"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":"Unauthorized"}}},"exampleType":"generated"}},"exampleType":"generated"},"075c707f-c9b3-4f98-8d9e-df46a4231fac":{"description":"Event or record not found.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Unauthorized","uniqueKey":"error","typeLabel":"string"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":"Unauthorized"}}},"exampleType":"generated"}},"exampleType":"generated"},"45f1ae78-81b2-4fbf-98f9-0a8768646bb6":{"description":"The record failed validation. `error` is every message as one sentence; `errors` lists them one by one.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Category can't be blank","uniqueKey":"error","typeLabel":"string"},"errors":{"type":"array","items":{"type":"string","uniqueKey":"errors.items.[INDEX]","typeLabel":"string"},"example":["Category can't be blank"],"uniqueKey":"errors","typeLabel":"string[]"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":"Category can't be blank","errors":["Category can't be blank"]}}},"exampleType":"generated"}},"exampleType":"generated"}},"security":{"a99530a7-e390-40b8-a239-5b04fc3ebc3f":{"bearerAuth":{"type":"http","scheme":"bearer","description":"Mobile token, global API token, series API key, or event API key. See Authentication above for which endpoints each one reaches.","scopes":[],"schemeName":"bearerAuth"}}},"servers":{"cdc77891-66a2-41cc-83da-2876c8717128":{"url":"https://attend.hackclub.com/api/v1","description":"Production"},"c9030575-29d2-4e8c-8e07-86c6cfeebdd3":{"url":"http://localhost:3000/api/v1","description":"Local development"}},"processedSecurityOptions":[{"schemes":[{"scheme":{"type":"http","scheme":"bearer","description":"Mobile token, global API token, series API key, or event API key. See Authentication above for which endpoints each one reaches.","scopes":[],"schemeName":"bearerAuth"},"schema":{"title":"Bearer Auth","type":"string","isRequired":true,"description":"Mobile token, global API token, series API key, or event API key. See Authentication above for which endpoints each one reaches.","format":"bearer","typeLabel":"string\u003cbearer>","deprecated":false},"schemeName":"bearerAuth","name":"Authorization"}],"title":"bearerAuth"}]},"originalFileLocation":"openapi.yml"},"subdomain":"hack-club","siteName":"Attend","title":"Log an incident - Attend","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-11-05T09:16:44.041Z","originalFileLocation":"api-reference/incidents/log-an-incident.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Logs an incident reported by the caller. Anyone with a role on the event can log one. Send escalate: true with an escalation object to also file a confidential report to Hack Club HQ in the same call. Both halves are validated before anything is saved, so a failed escalation (a missing callback number, say) leaves no log entry behind; its errors come back prefixed Escalation:. Behavior, safeguarding and other incidents that are escalated are also posted to the Fire Dept Slack channel; medical incidents stay HQ-only. A medical incident must name at least one participant and one helping staff member, and list the medication when medication_dispensed is true.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Attend\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/docs/mintlify-assets/_mintlify/favicons/hack-club/TahJjYfFb5J4CmpN/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/docs/mintlify-assets/_mintlify/favicons/hack-club/TahJjYfFb5J4CmpN/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/docs/mintlify-assets/_mintlify/favicons/hack-club/TahJjYfFb5J4CmpN/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/docs/mintlify-assets/_mintlify/favicons/hack-club/TahJjYfFb5J4CmpN/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/docs/mintlify-assets/_mintlify/favicons/hack-club/TahJjYfFb5J4CmpN/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/docs/mintlify-assets/_mintlify/favicons/hack-club/TahJjYfFb5J4CmpN/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/docs/mintlify-assets/_mintlify/favicons/hack-club/TahJjYfFb5J4CmpN/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/docs/mintlify-assets/_mintlify/favicons/hack-club/TahJjYfFb5J4CmpN/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/docs/mintlify-assets/_mintlify/favicons/hack-club/TahJjYfFb5J4CmpN/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Log an incident - Attend\">\u003cmeta data-mint-head property=\"og:description\" content=\"Logs an incident reported by the caller. Anyone with a role on the event can log one. Send escalate: true with an escalation object to also file a confidential report to Hack Club HQ in the same call. Both halves are validated before anything is saved, so a failed escalation (a missing callback number, say) leaves no log entry behind; its errors come back prefixed Escalation:. Behavior, safeguarding and other incidents that are escalated are also posted to the Fire Dept Slack channel; medical incidents stay HQ-only. A medical incident must name at least one participant and one helping staff member, and list the medication when medication_dispensed is true.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Attend\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://attend.hackclub.com/docs/api-reference/incidents/log-an-incident\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://hack-club.mintlify.app/_mintlify/api/og/v2?division=Incidents\u0026amp;title=Log+an+incident\u0026amp;description=Logs+an+incident+reported+by+the+caller.+Anyone+with+a+role+on+the+event%0Acan+log+one.%0A%0ASend+%60escalate%3A+true%60+with+an+%60escalation%60+object+to+also+file+a%0Aconfiden\u0026amp;theme=2570de8427322b889b74e8dd\u0026amp;signature=c2b6ccbdc39e09d8f18fee903377d079a16aa8ee7565ab8be5d31af6a73a4d56\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Log an incident - Attend\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Logs an incident reported by the caller. Anyone with a role on the event can log one. Send escalate: true with an escalation object to also file a confidential report to Hack Club HQ in the same call. Both halves are validated before anything is saved, so a failed escalation (a missing callback number, say) leaves no log entry behind; its errors come back prefixed Escalation:. Behavior, safeguarding and other incidents that are escalated are also posted to the Fire Dept Slack channel; medical incidents stay HQ-only. A medical incident must name at least one participant and one helping staff member, and list the medication when medication_dispensed is true.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://hack-club.mintlify.app/_mintlify/api/og/v2?division=Incidents\u0026amp;title=Log+an+incident\u0026amp;description=Logs+an+incident+reported+by+the+caller.+Anyone+with+a+role+on+the+event%0Acan+log+one.%0A%0ASend+%60escalate%3A+true%60+with+an+%60escalation%60+object+to+also+file+a%0Aconfiden\u0026amp;theme=2570de8427322b889b74e8dd\u0026amp;signature=c2b6ccbdc39e09d8f18fee903377d079a16aa8ee7565ab8be5d31af6a73a4d56\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/docs/mintlify-assets/_mintlify/favicons/hack-club/TahJjYfFb5J4CmpN/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Attend\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#ec3750\">\u003clink data-mint-head rel=\"canonical\" href=\"https://attend.hackclub.com/docs/api-reference/incidents/log-an-incident\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/docs/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/docs/api-reference/incidents/log-an-incident.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://attend.hackclub.com/#organization\",\"name\":\"Attend\",\"url\":\"https://attend.hackclub.com\"},{\"@type\":\"WebSite\",\"@id\":\"https://attend.hackclub.com/docs#website\",\"name\":\"Attend\",\"url\":\"https://attend.hackclub.com/docs\",\"publisher\":{\"@id\":\"https://attend.hackclub.com/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://attend.hackclub.com/docs/api-reference/incidents/log-an-incident#webpage\",\"url\":\"https://attend.hackclub.com/docs/api-reference/incidents/log-an-incident\",\"name\":\"Log an incident\",\"description\":\"Logs an incident reported by the caller. Anyone with a role on the event can log one. Send escalate: true with an escalation object to also file a confidential report to Hack Club HQ in the same call. Both halves are validated before anything is saved, so a failed escalation (a missing callback number, say) leaves no log entry behind; its errors come back prefixed Escalation:. Behavior, safeguarding and other incidents that are escalated are also posted to the Fire Dept Slack channel; medical incidents stay HQ-only. A medical incident must name at least one participant and one helping staff member, and list the medication when medication_dispensed is true.\",\"dateModified\":\"2026-11-05T09:16:44.041Z\",\"isPartOf\":{\"@id\":\"https://attend.hackclub.com/docs#website\"},\"breadcrumb\":{\"@id\":\"https://attend.hackclub.com/docs/api-reference/incidents/log-an-incident#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://attend.hackclub.com/docs/api-reference/incidents/log-an-incident#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Endpoints\",\"item\":\"https://attend.hackclub.com/docs/api-reference/authentication/create-a-mobile-token\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Incidents\",\"item\":\"https://attend.hackclub.com/docs/api-reference/incidents/list-incidents\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Log an incident\",\"item\":\"https://attend.hackclub.com/docs/api-reference/incidents/log-an-incident\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://attend.hackclub.com/docs/api-reference/incidents/log-an-incident#apireference\",\"headline\":\"Log an incident\",\"name\":\"Log an incident\",\"description\":\"Logs an incident reported by the caller. Anyone with a role on the event can log one. Send escalate: true with an escalation object to also file a confidential report to Hack Club HQ in the same call. Both halves are validated before anything is saved, so a failed escalation (a missing callback number, say) leaves no log entry behind; its errors come back prefixed Escalation:. Behavior, safeguarding and other incidents that are escalated are also posted to the Fire Dept Slack channel; medical incidents stay HQ-only. A medical incident must name at least one participant and one helping staff member, and list the medication when medication_dispensed is true.\",\"url\":\"https://attend.hackclub.com/docs/api-reference/incidents/log-an-incident\",\"mainEntityOfPage\":{\"@id\":\"https://attend.hackclub.com/docs/api-reference/incidents/log-an-incident#webpage\"},\"dateModified\":\"2026-11-05T09:16:44.041Z\",\"publisher\":{\"@id\":\"https://attend.hackclub.com/#organization\"},\"isPartOf\":{\"@id\":\"https://attend.hackclub.com/docs#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Attend\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Attend","nav":{"global":null,"tabs":[{"tab":"Help","pages":[{"title":"Help","href":""}]},{"tab":"Organizers","pages":[{"title":"Organizers","href":"/organizers/reporting-incidents"}]},{"tab":"API reference","groups":[{"group":"Overview","pages":[{"title":"API overview","href":"/api-introduction"}]},{"group":"Endpoints","pages":[{"group":"Authentication","pages":[{"title":"Create a mobile token","deprecated":null,"version":null,"sidebarTitle":"Create a mobile token","openapi":"/openapi.yml post /session","href":"/api-reference/authentication/create-a-mobile-token"},{"title":"Revoke the current token (log out)","deprecated":null,"version":null,"sidebarTitle":"Revoke the current token log out","openapi":"/openapi.yml delete /session","href":"/api-reference/authentication/revoke-the-current-token-log-out"},{"title":"Rotate the current token","deprecated":null,"version":null,"sidebarTitle":"Rotate the current token","openapi":"/openapi.yml post /session/refresh","href":"/api-reference/authentication/rotate-the-current-token"}]},{"group":"Account","pages":[{"title":"Current user profile","deprecated":null,"version":null,"sidebarTitle":"Current user profile","openapi":"/openapi.yml get /me","href":"/api-reference/account/current-user-profile"},{"title":"Look up an event admin by Slack ID","deprecated":null,"version":null,"sidebarTitle":"Look up an event admin by slack id","openapi":"/openapi.yml get /users/lookup","href":"/api-reference/account/look-up-an-event-admin-by-slack-id"},{"title":"List accessible events","deprecated":null,"version":null,"sidebarTitle":"List accessible events","openapi":"/openapi.yml get /events","href":"/api-reference/account/list-accessible-events"}]},{"group":"Push Tokens","pages":[{"title":"Register a push token","deprecated":null,"version":null,"sidebarTitle":"Register a push token","openapi":"/openapi.yml post /push_tokens","href":"/api-reference/push-tokens/register-a-push-token"},{"title":"Delete a push token","deprecated":null,"version":null,"sidebarTitle":"Delete a push token","openapi":"/openapi.yml delete /push_tokens/{token}","href":"/api-reference/push-tokens/delete-a-push-token"}]},{"group":"Inbox","pages":[{"title":"List inbox messages","deprecated":null,"version":null,"sidebarTitle":"List inbox messages","openapi":"/openapi.yml get /messages","href":"/api-reference/inbox/list-inbox-messages"},{"title":"Get an inbox message","deprecated":null,"version":null,"sidebarTitle":"Get an inbox message","openapi":"/openapi.yml get /messages/{id}","href":"/api-reference/inbox/get-an-inbox-message"}]},{"group":"Incident Reports","pages":[{"title":"Report form options","deprecated":null,"version":null,"sidebarTitle":"Report form options","openapi":"/openapi.yml get /incident_reports/options","href":"/api-reference/incident-reports/report-form-options"},{"title":"File an incident report","deprecated":null,"version":null,"sidebarTitle":"File an incident report","openapi":"/openapi.yml post /incident_reports","href":"/api-reference/incident-reports/file-an-incident-report"}]},{"group":"Bans","pages":[{"title":"Add emails to the ban list","deprecated":null,"version":null,"sidebarTitle":"Add emails to the ban list","openapi":"/openapi.yml post /bans","href":"/api-reference/bans/add-emails-to-the-ban-list"}]},{"group":"Series","pages":[{"title":"List series","deprecated":null,"version":null,"sidebarTitle":"List series","openapi":"/openapi.yml get /series","href":"/api-reference/series/list-series"},{"title":"Get one series","deprecated":null,"version":null,"sidebarTitle":"Get one series","openapi":"/openapi.yml get /series/{id}","href":"/api-reference/series/get-one-series"},{"title":"List the events in a series","deprecated":null,"version":null,"sidebarTitle":"List the events in a series","openapi":"/openapi.yml get /series/{series_id}/events","href":"/api-reference/series/list-the-events-in-a-series"},{"title":"Create an event in the series","deprecated":null,"version":null,"sidebarTitle":"Create an event in the series","openapi":"/openapi.yml post /series/{series_id}/events","href":"/api-reference/series/create-an-event-in-the-series"},{"title":"Get one event in the series","deprecated":null,"version":null,"sidebarTitle":"Get one event in the series","openapi":"/openapi.yml get /series/{series_id}/events/{id}","href":"/api-reference/series/get-one-event-in-the-series"},{"title":"Update an event in the series","deprecated":null,"version":null,"sidebarTitle":"Update an event in the series","openapi":"/openapi.yml patch /series/{series_id}/events/{id}","href":"/api-reference/series/update-an-event-in-the-series"}]},{"group":"Event Setup","pages":[{"title":"Setup progress","deprecated":null,"version":null,"sidebarTitle":"Setup progress","openapi":"/openapi.yml get /events/{event_id}/setup","href":"/api-reference/event-setup/setup-progress"},{"title":"Configure waivers","deprecated":null,"version":null,"sidebarTitle":"Configure waivers","openapi":"/openapi.yml put /events/{event_id}/setup/waivers","href":"/api-reference/event-setup/configure-waivers"},{"title":"Finish setup","deprecated":null,"version":null,"sidebarTitle":"Finish setup","openapi":"/openapi.yml post /events/{event_id}/setup/complete","href":"/api-reference/event-setup/finish-setup"}]},{"group":"Event Staff","pages":[{"title":"List staff","deprecated":null,"version":null,"sidebarTitle":"List staff","openapi":"/openapi.yml get /events/{event_id}/staff","href":"/api-reference/event-staff/list-staff"},{"title":"Add a staff member","deprecated":null,"version":null,"sidebarTitle":"Add a staff member","openapi":"/openapi.yml post /events/{event_id}/staff","href":"/api-reference/event-staff/add-a-staff-member"},{"title":"Remove a staff member","deprecated":null,"version":null,"sidebarTitle":"Remove a staff member","openapi":"/openapi.yml delete /events/{event_id}/staff/{id}","href":"/api-reference/event-staff/remove-a-staff-member"},{"title":"Change a staff member's role","deprecated":null,"version":null,"sidebarTitle":"Change a staff members role","openapi":"/openapi.yml patch /events/{event_id}/staff/{id}","href":"/api-reference/event-staff/change-a-staff-members-role"}]},{"group":"Participants","pages":[{"title":"List participants","deprecated":null,"version":null,"sidebarTitle":"List participants","openapi":"/openapi.yml get /events/{event_id}/participants","href":"/api-reference/participants/list-participants"},{"title":"Invite a participant","deprecated":null,"version":null,"sidebarTitle":"Invite a participant","openapi":"/openapi.yml post /events/{event_id}/participants","href":"/api-reference/participants/invite-a-participant"},{"title":"Search participants","deprecated":null,"version":null,"sidebarTitle":"Search participants","openapi":"/openapi.yml get /events/{event_id}/participants/search","href":"/api-reference/participants/search-participants"},{"title":"Look up a registration by email","deprecated":null,"version":null,"sidebarTitle":"Look up a registration by email","openapi":"/openapi.yml get /events/{event_id}/participants/lookup","href":"/api-reference/participants/look-up-a-registration-by-email"},{"title":"Minimal roster","deprecated":null,"version":null,"sidebarTitle":"Minimal roster","openapi":"/openapi.yml get /events/{event_id}/participants/roster","href":"/api-reference/participants/minimal-roster"},{"title":"Get a participant","deprecated":null,"version":null,"sidebarTitle":"Get a participant","openapi":"/openapi.yml get /events/{event_id}/participants/{id}","href":"/api-reference/participants/get-a-participant"},{"title":"Remove a participant from the event","deprecated":null,"version":null,"sidebarTitle":"Remove a participant from the event","openapi":"/openapi.yml delete /events/{event_id}/participants/{id}","href":"/api-reference/participants/remove-a-participant-from-the-event"},{"title":"Update a participant","deprecated":null,"version":null,"sidebarTitle":"Update a participant","openapi":"/openapi.yml patch /events/{event_id}/participants/{id}","href":"/api-reference/participants/update-a-participant"}]},{"group":"Notes","pages":[{"title":"List notes","deprecated":null,"version":null,"sidebarTitle":"List notes","openapi":"/openapi.yml get /events/{event_id}/participants/{participant_id}/notes","href":"/api-reference/notes/list-notes"},{"title":"Create a note","deprecated":null,"version":null,"sidebarTitle":"Create a note","openapi":"/openapi.yml post /events/{event_id}/participants/{participant_id}/notes","href":"/api-reference/notes/create-a-note"}]},{"group":"Scans","pages":[{"title":"List scans","deprecated":null,"version":null,"sidebarTitle":"List scans","openapi":"/openapi.yml get /events/{event_id}/scans","href":"/api-reference/scans/list-scans"},{"title":"Record a scan","deprecated":null,"version":null,"sidebarTitle":"Record a scan","openapi":"/openapi.yml post /events/{event_id}/scans","href":"/api-reference/scans/record-a-scan"},{"title":"Undo scans for a participant","deprecated":null,"version":null,"sidebarTitle":"Undo scans for a participant","openapi":"/openapi.yml delete /events/{event_id}/scans/{id}","href":"/api-reference/scans/undo-scans-for-a-participant"}]},{"group":"Scan Contexts","pages":[{"title":"List scan contexts","deprecated":null,"version":null,"sidebarTitle":"List scan contexts","openapi":"/openapi.yml get /events/{event_id}/scan_contexts","href":"/api-reference/scan-contexts/list-scan-contexts"}]},{"group":"Stays","pages":[{"title":"List stays","deprecated":null,"version":null,"sidebarTitle":"List stays","openapi":"/openapi.yml get /events/{event_id}/stays","href":"/api-reference/stays/list-stays"},{"title":"List a stay's roster","deprecated":null,"version":null,"sidebarTitle":"List a stays roster","openapi":"/openapi.yml get /events/{event_id}/stays/{stay_id}/roster","href":"/api-reference/stays/list-a-stays-roster"},{"title":"Add someone to a stay's roster","deprecated":null,"version":null,"sidebarTitle":"Add someone to a stays roster","openapi":"/openapi.yml post /events/{event_id}/stays/{stay_id}/roster","href":"/api-reference/stays/add-someone-to-a-stays-roster"},{"title":"Remove someone from a stay's roster","deprecated":null,"version":null,"sidebarTitle":"Remove someone from a stays roster","openapi":"/openapi.yml delete /events/{event_id}/stays/{stay_id}/roster/{id}","href":"/api-reference/stays/remove-someone-from-a-stays-roster"}]},{"group":"Travel Calendar","pages":[{"title":"Show the travel calendar","deprecated":null,"version":null,"sidebarTitle":"Show the travel calendar","openapi":"/openapi.yml get /events/{event_id}/travel","href":"/api-reference/travel-calendar/show-the-travel-calendar"},{"title":"Show the travel calendar (legacy path)","deprecated":true,"version":null,"sidebarTitle":"Show the travel calendar legacy path","openapi":"/openapi.yml get /events/{event_id}/airport_mode","href":"/api-reference/travel-calendar/show-the-travel-calendar-legacy-path"}]},{"group":"Slack Blasts","pages":[{"title":"List Slack blasts","deprecated":null,"version":null,"sidebarTitle":"List slack blasts","openapi":"/openapi.yml get /events/{event_id}/slack_blasts","href":"/api-reference/slack-blasts/list-slack-blasts"},{"title":"Send a Slack blast","deprecated":null,"version":null,"sidebarTitle":"Send a slack blast","openapi":"/openapi.yml post /events/{event_id}/slack_blasts","href":"/api-reference/slack-blasts/send-a-slack-blast"},{"title":"Get a Slack blast","deprecated":null,"version":null,"sidebarTitle":"Get a slack blast","openapi":"/openapi.yml get /events/{event_id}/slack_blasts/{id}","href":"/api-reference/slack-blasts/get-a-slack-blast"}]},{"group":"Messages","pages":[{"title":"List messages","deprecated":null,"version":null,"sidebarTitle":"List messages","openapi":"/openapi.yml get /events/{event_id}/messages","href":"/api-reference/messages/list-messages"},{"title":"Create a draft message","deprecated":null,"version":null,"sidebarTitle":"Create a draft message","openapi":"/openapi.yml post /events/{event_id}/messages","href":"/api-reference/messages/create-a-draft-message"},{"title":"Composer options","deprecated":null,"version":null,"sidebarTitle":"Composer options","openapi":"/openapi.yml get /events/{event_id}/messages/options","href":"/api-reference/messages/composer-options"},{"title":"Get a message","deprecated":null,"version":null,"sidebarTitle":"Get a message","openapi":"/openapi.yml get /events/{event_id}/messages/{id}","href":"/api-reference/messages/get-a-message"},{"title":"Delete a message","deprecated":null,"version":null,"sidebarTitle":"Delete a message","openapi":"/openapi.yml delete /events/{event_id}/messages/{id}","href":"/api-reference/messages/delete-a-message"},{"title":"Update a message","deprecated":null,"version":null,"sidebarTitle":"Update a message","openapi":"/openapi.yml patch /events/{event_id}/messages/{id}","href":"/api-reference/messages/update-a-message"},{"title":"Preview a message","deprecated":null,"version":null,"sidebarTitle":"Preview a message","openapi":"/openapi.yml get /events/{event_id}/messages/{id}/preview","href":"/api-reference/messages/preview-a-message"},{"title":"Send a message","deprecated":null,"version":null,"sidebarTitle":"Send a message","openapi":"/openapi.yml post /events/{event_id}/messages/{id}/send_now","href":"/api-reference/messages/send-a-message"},{"title":"Cancel a scheduled message","deprecated":null,"version":null,"sidebarTitle":"Cancel a scheduled message","openapi":"/openapi.yml post /events/{event_id}/messages/{id}/cancel","href":"/api-reference/messages/cancel-a-scheduled-message"},{"title":"Retry failed deliveries","deprecated":null,"version":null,"sidebarTitle":"Retry failed deliveries","openapi":"/openapi.yml post /events/{event_id}/messages/{id}/retry_failed","href":"/api-reference/messages/retry-failed-deliveries"},{"title":"Retry one delivery","deprecated":null,"version":null,"sidebarTitle":"Retry one delivery","openapi":"/openapi.yml post /events/{event_id}/messages/{id}/retry_delivery","href":"/api-reference/messages/retry-one-delivery"},{"title":"Send to new recipients","deprecated":null,"version":null,"sidebarTitle":"Send to new recipients","openapi":"/openapi.yml post /events/{event_id}/messages/{id}/send_to_new_recipients","href":"/api-reference/messages/send-to-new-recipients"}]},{"group":"Incidents","pages":[{"title":"List incidents","description":"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_incidents` flag in `GET /events` says whether it is open to the caller. API keys are refused: an incident is attributed to the person who logs it.","deprecated":null,"version":null,"sidebarTitle":"List incidents","openapi":"/openapi.yml get /events/{event_id}/incidents","href":"/api-reference/incidents/list-incidents"},{"title":"Log an incident","deprecated":null,"version":null,"sidebarTitle":"Log an incident","openapi":"/openapi.yml post /events/{event_id}/incidents","href":"/api-reference/incidents/log-an-incident"},{"title":"Incident form options","description":"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 account.","deprecated":null,"version":null,"sidebarTitle":"Incident form options","openapi":"/openapi.yml get /events/{event_id}/incidents/options","href":"/api-reference/incidents/incident-form-options"},{"title":"Get an incident","deprecated":null,"version":null,"sidebarTitle":"Get an incident","openapi":"/openapi.yml get /events/{event_id}/incidents/{id}","href":"/api-reference/incidents/get-an-incident"},{"title":"Update an incident","deprecated":null,"version":null,"sidebarTitle":"Update an incident","openapi":"/openapi.yml patch /events/{event_id}/incidents/{id}","href":"/api-reference/incidents/update-an-incident"},{"title":"Escalate an incident to HQ","deprecated":null,"version":null,"sidebarTitle":"Escalate an incident to hq","openapi":"/openapi.yml post /events/{event_id}/incidents/{id}/escalate","href":"/api-reference/incidents/escalate-an-incident-to-hq"},{"title":"Comment on an incident","deprecated":null,"version":null,"sidebarTitle":"Comment on an incident","openapi":"/openapi.yml post /events/{event_id}/incidents/{incident_id}/comments","href":"/api-reference/incidents/comment-on-an-incident"}]},{"group":"NFC Badges","pages":[{"title":"Ensure an NFC badge token","deprecated":null,"version":null,"sidebarTitle":"Ensure an nfc badge token","openapi":"/openapi.yml post /events/{event_id}/participant_events/{participant_event_id}/nfc_badge/ensure","href":"/api-reference/nfc-badges/ensure-an-nfc-badge-token"},{"title":"Confirm an NFC badge assignment","deprecated":null,"version":null,"sidebarTitle":"Confirm an nfc badge assignment","openapi":"/openapi.yml post /events/{event_id}/participant_events/{participant_event_id}/nfc_badge/confirm","href":"/api-reference/nfc-badges/confirm-an-nfc-badge-assignment"},{"title":"Reset an NFC badge token","deprecated":null,"version":null,"sidebarTitle":"Reset an nfc badge token","openapi":"/openapi.yml post /events/{event_id}/participant_events/{participant_event_id}/nfc_badge/reset","href":"/api-reference/nfc-badges/reset-an-nfc-badge-token"}]},{"group":"Travel","pages":[{"title":"Search airports","deprecated":null,"version":null,"sidebarTitle":"Search airports","openapi":"/openapi.yml get /travel/search_airports","href":"/api-reference/travel/search-airports"},{"title":"Validate a flight","deprecated":null,"version":null,"sidebarTitle":"Validate a flight","openapi":"/openapi.yml post /travel/validate_flight","href":"/api-reference/travel/validate-a-flight"}]}]}]}]},"basePath":"","title":"Log an incident - Attend","buildId":"dpl_9yaRmq8qi7yyMZn9oEWmKEdYMvGZ","deploymentId":"dpl_9yaRmq8qi7yyMZn9oEWmKEdYMvGZ","dynamics":["c2aa737661","2b790eda92","b0f84f53ff","a9bb46feb3"],"chunks":["OpenApiReferenceProvider-Bsljvftq.js","utils-BEZX0tmN.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-BrDD79Na.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-2c3Nf5XI.js","snippetPresets-CWWkg29k.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","ApiExamples-SJmWKHmz.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-BYc8UL58.js","shallow-UTXCq4wY.js","getApiPlaygroundDisplay-D1ZcrmBl.js","CodeSnippet-CTS7L7R4.js","CodeSnippets-MsBYl-gd.js","Page-BxumJvVQ.js","getPastedJson-C_5Mq0uv.js","icon-D7sYgD4k.js","MethodPill-B7Q6uD_j.js","DuplicateIcon-DXGzB8u_.js","createIcon-UDYg_Gk8.js","DynamicMarkdown-BBrVIqs3.js","SectionHeading-BxanXFN4.js","axios-vUo_bRtp.js","Markdown-DAhL0GAo.js","clsx-BZ8NiN2w.js","lib-DuNMoZ05.js","lib-B8HbPgcC.js","html-void-elements-mCSPHezU.js","dist-CpdUkuDP.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","AssistantPageLink-sMo3-CxC.js"]}