> For the complete documentation index, see [llms.txt](https://movemint.gitbook.io/movemint-developer-docs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://movemint.gitbook.io/movemint-developer-docs/open-api-specification/core-resources/waivers.md).

# Waivers

Read an event's waivers and copy them onto other events. Requires the `waivers` scope.

## List an event's waivers

> Returns the event's active event-level waivers. Waivers attached to a\
> single sub-event are not included. \`content\_excerpt\` is the start of\
> the waiver text with formatting removed.<br>

````json
{"openapi":"3.1.0","info":{"title":"Movemint API","version":"1.0"},"tags":[{"name":"Waivers","description":"Read an event's waivers and copy them onto other events.\nRequires the `waivers` scope.\n"}],"servers":[{"url":"https://www.movemint.cc","description":"Production"}],"security":[{"bearerAuth":[]},{"oauth2":[]}],"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"JWT","description":"Pass the access token in the `Authorization` header:\n```\nAuthorization: Bearer YOUR_ACCESS_TOKEN\n```\n"},"oauth2":{"type":"oauth2","description":"OAuth 2.0 authentication using the Authorization Code or Client\nCredentials grant flow.\n","flows":{"authorizationCode":{"authorizationUrl":"https://www.movemint.cc/oauth/authorize","tokenUrl":"https://www.movemint.cc/oauth/token","refreshUrl":"https://www.movemint.cc/oauth/token","scopes":{}},"clientCredentials":{"tokenUrl":"https://www.movemint.cc/oauth/token","scopes":{}}}}},"parameters":{"EventHandle":{"name":"handle","in":"path","required":true,"description":"The unique handle (slug) of the event","schema":{"type":"string"}}},"schemas":{"WaiverSummary":{"type":"object","required":["id","title","content_excerpt","show_full_waiver","apply_to_volunteers"],"properties":{"id":{"type":"integer"},"title":{"type":"string"},"content_excerpt":{"type":"string","description":"The start of the waiver text, as plain text"},"show_full_waiver":{"type":"boolean","nullable":true},"apply_to_volunteers":{"type":"boolean"}}},"OAuthError":{"type":"object","required":["error"],"properties":{"error":{"type":"string","description":"Machine-readable error code"},"error_description":{"type":"string","description":"Human-readable description of the error"}}},"Error":{"type":"object","description":"A generic error response","required":["error"],"properties":{"error":{"type":"string","description":"Human-readable error message"}}}},"responses":{"Unauthorized":{"description":"Unauthorized - invalid or missing token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OAuthError"}}}},"Forbidden":{"description":"Forbidden - user is not an admin of this event","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"EventNotFound":{"description":"Event not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"paths":{"/api/v1/events/{handle}/waivers":{"get":{"tags":["Waivers"],"summary":"List an event's waivers","description":"Returns the event's active event-level waivers. Waivers attached to a\nsingle sub-event are not included. `content_excerpt` is the start of\nthe waiver text with formatting removed.\n","operationId":"listEventWaivers","parameters":[{"$ref":"#/components/parameters/EventHandle"}],"responses":{"200":{"description":"The event's active event-level waivers","content":{"application/json":{"schema":{"type":"object","required":["waivers"],"properties":{"waivers":{"type":"array","items":{"$ref":"#/components/schemas/WaiverSummary"}}}}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/EventNotFound"}}}}}}
````

## Copy an event's waivers to other events

> Copies this event's active event-level waivers onto the events in\
> \`target\_event\_handles\`, any events you can change. To copy onto every\
> event in a group, list them with GET /api/v1/groups/{handle}/events\
> first. Pass \`waiver\_ids\` to copy only some of the waivers.\
> \
> Nothing is overwritten. A target that already has a waiver with the\
> same title (on the event or on one of its sub-events) keeps its own\
> and is listed in \`skipped\` with reason \`already\_has\_waiver\`. A target\
> that has already ended is skipped with \`event\_ended\`, and one whose\
> admin role does not grant \`waivers\` with \`not\_permitted\`.\
> \
> These return \`422\` and copy nothing: a missing, empty or non-list\
> \`target\_event\_handles\`, or more than 200 of them; a target that isn't\
> an event you can change (reported by handle); this event named as a\
> target; a waiver id that isn't an active event-level waiver on this\
> event; this event having no such waivers, or one that fails\
> validation; and an empty or non-list \`waiver\_ids\`. Returns \`201\` when\
> at least one waiver was copied and \`200\` when everything was skipped.<br>

````json
{"openapi":"3.1.0","info":{"title":"Movemint API","version":"1.0"},"tags":[{"name":"Waivers","description":"Read an event's waivers and copy them onto other events.\nRequires the `waivers` scope.\n"}],"servers":[{"url":"https://www.movemint.cc","description":"Production"}],"security":[{"bearerAuth":[]},{"oauth2":[]}],"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"JWT","description":"Pass the access token in the `Authorization` header:\n```\nAuthorization: Bearer YOUR_ACCESS_TOKEN\n```\n"},"oauth2":{"type":"oauth2","description":"OAuth 2.0 authentication using the Authorization Code or Client\nCredentials grant flow.\n","flows":{"authorizationCode":{"authorizationUrl":"https://www.movemint.cc/oauth/authorize","tokenUrl":"https://www.movemint.cc/oauth/token","refreshUrl":"https://www.movemint.cc/oauth/token","scopes":{}},"clientCredentials":{"tokenUrl":"https://www.movemint.cc/oauth/token","scopes":{}}}}},"parameters":{"EventHandle":{"name":"handle","in":"path","required":true,"description":"The unique handle (slug) of the event","schema":{"type":"string"}}},"schemas":{"CopyWaiversRequest":{"type":"object","required":["target_event_handles"],"properties":{"waiver_ids":{"type":"array","items":{"type":"integer"},"description":"Waivers to copy, from GET /api/v1/events/{handle}/waivers. Omit to copy all of them."},"target_event_handles":{"type":"array","items":{"type":"string"},"description":"Events to copy onto (at most 200)."}}},"CopyWaiversResult":{"type":"object","required":["source_event_handle","copied","skipped","created"],"properties":{"source_event_handle":{"type":"string"},"copied":{"type":"array","items":{"type":"object","required":["event_handle","event_name","waivers"],"properties":{"event_handle":{"type":"string"},"event_name":{"type":"string","nullable":true},"waivers":{"type":"array","items":{"type":"object","required":["id","title"],"properties":{"id":{"type":"integer"},"title":{"type":"string"}}}}}}},"skipped":{"type":"array","items":{"type":"object","required":["event_handle","event_name","waiver_title","reason"],"properties":{"event_handle":{"type":"string"},"event_name":{"type":"string","nullable":true},"waiver_title":{"type":"string","nullable":true,"description":"Null when the whole event was skipped"},"reason":{"type":"string","enum":["already_has_waiver","duplicate_in_source","event_ended","not_permitted"]}}}},"created":{"type":"array","description":"Every waiver created, flattened across events","items":{"type":"object","required":["id"],"properties":{"id":{"type":"integer"}}}}}},"OAuthError":{"type":"object","required":["error"],"properties":{"error":{"type":"string","description":"Machine-readable error code"},"error_description":{"type":"string","description":"Human-readable description of the error"}}},"Error":{"type":"object","description":"A generic error response","required":["error"],"properties":{"error":{"type":"string","description":"Human-readable error message"}}}},"responses":{"Unauthorized":{"description":"Unauthorized - invalid or missing token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OAuthError"}}}},"Forbidden":{"description":"Forbidden - user is not an admin of this event","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"EventNotFound":{"description":"Event not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"paths":{"/api/v1/events/{handle}/waiver_copies":{"post":{"tags":["Waivers"],"summary":"Copy an event's waivers to other events","description":"Copies this event's active event-level waivers onto the events in\n`target_event_handles`, any events you can change. To copy onto every\nevent in a group, list them with GET /api/v1/groups/{handle}/events\nfirst. Pass `waiver_ids` to copy only some of the waivers.\n\nNothing is overwritten. A target that already has a waiver with the\nsame title (on the event or on one of its sub-events) keeps its own\nand is listed in `skipped` with reason `already_has_waiver`. A target\nthat has already ended is skipped with `event_ended`, and one whose\nadmin role does not grant `waivers` with `not_permitted`.\n\nThese return `422` and copy nothing: a missing, empty or non-list\n`target_event_handles`, or more than 200 of them; a target that isn't\nan event you can change (reported by handle); this event named as a\ntarget; a waiver id that isn't an active event-level waiver on this\nevent; this event having no such waivers, or one that fails\nvalidation; and an empty or non-list `waiver_ids`. Returns `201` when\nat least one waiver was copied and `200` when everything was skipped.\n","operationId":"copyEventWaivers","parameters":[{"$ref":"#/components/parameters/EventHandle"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CopyWaiversRequest"}}}},"responses":{"200":{"description":"Nothing was copied; every target was skipped","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CopyWaiversResult"}}}},"201":{"description":"Waivers copied","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CopyWaiversResult"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/EventNotFound"},"422":{"description":"The request can't be applied as given; see the description above","content":{"application/json":{"schema":{"type":"object","required":["errors"],"properties":{"errors":{"type":"string"}}}}}}}}}}}
````

## Undo a waiver copy (Movemint AI only)

> Deletes waivers a copy created. Reachable only through Movemint AI's\
> undo flow; any other token receives \`403\` with error\
> \`undo\_only\_endpoint\`. Only waivers a copy in the same conversation\
> created can be removed, and one already deleted counts as removed.\
> All-or-nothing: if any of the waivers has been signed or edited since,\
> none are removed. \`403\` also covers a role that doesn't grant waivers\
> on every affected event.<br>

````json
{"openapi":"3.1.0","info":{"title":"Movemint API","version":"1.0"},"tags":[{"name":"Waivers","description":"Read an event's waivers and copy them onto other events.\nRequires the `waivers` scope.\n"}],"servers":[{"url":"https://www.movemint.cc","description":"Production"}],"security":[{"bearerAuth":[]},{"oauth2":[]}],"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"JWT","description":"Pass the access token in the `Authorization` header:\n```\nAuthorization: Bearer YOUR_ACCESS_TOKEN\n```\n"},"oauth2":{"type":"oauth2","description":"OAuth 2.0 authentication using the Authorization Code or Client\nCredentials grant flow.\n","flows":{"authorizationCode":{"authorizationUrl":"https://www.movemint.cc/oauth/authorize","tokenUrl":"https://www.movemint.cc/oauth/token","refreshUrl":"https://www.movemint.cc/oauth/token","scopes":{}},"clientCredentials":{"tokenUrl":"https://www.movemint.cc/oauth/token","scopes":{}}}}},"parameters":{"EventHandle":{"name":"handle","in":"path","required":true,"description":"The unique handle (slug) of the event","schema":{"type":"string"}}},"responses":{"Unauthorized":{"description":"Unauthorized - invalid or missing token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OAuthError"}}}},"Forbidden":{"description":"Forbidden - user is not an admin of this event","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"EventNotFound":{"description":"Event not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"schemas":{"OAuthError":{"type":"object","required":["error"],"properties":{"error":{"type":"string","description":"Machine-readable error code"},"error_description":{"type":"string","description":"Human-readable description of the error"}}},"Error":{"type":"object","description":"A generic error response","required":["error"],"properties":{"error":{"type":"string","description":"Human-readable error message"}}}}},"paths":{"/api/v1/events/{handle}/waiver_copies":{"delete":{"tags":["Waivers"],"summary":"Undo a waiver copy (Movemint AI only)","description":"Deletes waivers a copy created. Reachable only through Movemint AI's\nundo flow; any other token receives `403` with error\n`undo_only_endpoint`. Only waivers a copy in the same conversation\ncreated can be removed, and one already deleted counts as removed.\nAll-or-nothing: if any of the waivers has been signed or edited since,\nnone are removed. `403` also covers a role that doesn't grant waivers\non every affected event.\n","operationId":"undoEventWaiverCopy","parameters":[{"$ref":"#/components/parameters/EventHandle"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["waiver_ids"],"properties":{"waiver_ids":{"type":"array","items":{"type":"integer"}}}}}}},"responses":{"200":{"description":"The waivers were removed","content":{"application/json":{"schema":{"type":"object","required":["removed"],"properties":{"removed":{"type":"array","items":{"type":"integer"}}}}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/EventNotFound"},"422":{"description":"`waiver_ids` is empty or not a list of ids, a waiver wasn't created\nby this conversation's copy, or one has been signed or edited\n","content":{"application/json":{"schema":{"type":"object","required":["errors"],"properties":{"errors":{"type":"string"}}}}}}}}}}}
````
