> 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/required-selections.md).

# Required Selections

Manage required selections: an ordered set of options a registrant must choose exactly one of during checkout (e.g. shirt size, bib pickup day). The first option is always the free path (its price is forced to $0). Requires the merchandise\_management scope. Images are not settable through the API.

## GET /api/v1/events/{handle}/required\_selections

> List the event's required selections

````json
{"openapi":"3.1.0","info":{"title":"Movemint API","version":"1.0"},"tags":[{"name":"Required Selections","description":"Manage required selections: an ordered set of options a registrant must\nchoose exactly one of during checkout (e.g. shirt size, bib pickup day).\nThe first option is always the free path (its price is forced to $0).\nRequires the merchandise_management scope. Images are not settable through\nthe API.\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":{"RequiredSelection":{"type":"object","required":["id","title","subtitle","requirement_scope","applies_to_all_sub_events","sub_event_ids","visibility","options"],"properties":{"id":{"type":"integer","format":"int64"},"title":{"type":"string"},"subtitle":{"type":"string","nullable":true},"requirement_scope":{"type":"string","enum":["per_cart","per_person","per_registration"]},"applies_to_all_sub_events":{"type":"boolean"},"sub_event_ids":{"type":"array","items":{"type":"integer","format":"int64"}},"visibility":{"type":"string","enum":["Shown","Hidden"]},"options":{"type":"array","items":{"$ref":"#/components/schemas/RequiredSelectionOption"}}}},"RequiredSelectionOption":{"type":"object","required":["id","name","description","category","free","price_cents","quantity","active","offer_shipping","variants"],"properties":{"id":{"type":"integer","format":"int64"},"name":{"type":"string"},"description":{"type":"string","nullable":true},"category":{"type":"string","enum":["clothing","food","lodging","other","other_non_taxable","athletic_membership"]},"free":{"type":"boolean","description":"True for the first option, whose price is forced to $0."},"price_cents":{"type":"integer"},"quantity":{"type":"integer","nullable":true},"active":{"type":"boolean"},"offer_shipping":{"type":"boolean"},"variants":{"type":"array","items":{"$ref":"#/components/schemas/RequiredSelectionVariant"}}}},"RequiredSelectionVariant":{"type":"object","required":["id","title","quantity"],"properties":{"id":{"type":"integer","format":"int64"},"title":{"type":"string"},"quantity":{"type":"integer","nullable":true}}},"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}/required_selections":{"get":{"tags":["Required Selections"],"summary":"List the event's required selections","operationId":"listRequiredSelections","parameters":[{"$ref":"#/components/parameters/EventHandle"}],"responses":{"200":{"description":"Required selections","content":{"application/json":{"schema":{"type":"object","required":["required_selections"],"properties":{"required_selections":{"type":"array","items":{"$ref":"#/components/schemas/RequiredSelection"}}}}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/EventNotFound"}}}}}}
````

## Create a required selection

> The first option is always the free path (its price is forced to $0). Returns 422 if no option has a name and category, or if a scoped selection lists no sub-events.<br>

````json
{"openapi":"3.1.0","info":{"title":"Movemint API","version":"1.0"},"tags":[{"name":"Required Selections","description":"Manage required selections: an ordered set of options a registrant must\nchoose exactly one of during checkout (e.g. shirt size, bib pickup day).\nThe first option is always the free path (its price is forced to $0).\nRequires the merchandise_management scope. Images are not settable through\nthe API.\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":{"CreateRequiredSelectionRequest":{"allOf":[{"$ref":"#/components/schemas/RequiredSelectionWritableFields"},{"type":"object","required":["title","options"]}]},"RequiredSelectionWritableFields":{"type":"object","properties":{"title":{"type":"string"},"description":{"type":"string"},"requirement_scope":{"type":"string","enum":["per_registration","per_person","per_cart"],"description":"Defaults to per_registration."},"applies_to_all_sub_events":{"type":"boolean","description":"Defaults to true. Set false to restrict to sub_event_ids."},"sub_event_ids":{"type":"array","items":{"type":"integer"},"description":"Required when applies_to_all_sub_events is false."},"options":{"type":"array","description":"The first option is the free path (its price is forced to $0).","items":{"type":"object","required":["name","category"],"properties":{"id":{"type":"integer","description":"Existing option id to keep/edit; omit to add a new option."},"name":{"type":"string"},"description":{"type":"string"},"category":{"type":"string","enum":["clothing","food","lodging","other","other_non_taxable","athletic_membership"]},"price_cents":{"type":"integer","minimum":0},"quantity":{"type":"integer","minimum":0},"active":{"type":"boolean"},"offer_shipping":{"type":"boolean"},"variants":{"type":"array","items":{"type":"object","required":["title"],"properties":{"id":{"type":"integer","description":"Existing variant id to keep/edit; omit to add a new variant."},"title":{"type":"string"},"quantity":{"type":"integer","minimum":0}}}}}}}}},"RequiredSelection":{"type":"object","required":["id","title","subtitle","requirement_scope","applies_to_all_sub_events","sub_event_ids","visibility","options"],"properties":{"id":{"type":"integer","format":"int64"},"title":{"type":"string"},"subtitle":{"type":"string","nullable":true},"requirement_scope":{"type":"string","enum":["per_cart","per_person","per_registration"]},"applies_to_all_sub_events":{"type":"boolean"},"sub_event_ids":{"type":"array","items":{"type":"integer","format":"int64"}},"visibility":{"type":"string","enum":["Shown","Hidden"]},"options":{"type":"array","items":{"$ref":"#/components/schemas/RequiredSelectionOption"}}}},"RequiredSelectionOption":{"type":"object","required":["id","name","description","category","free","price_cents","quantity","active","offer_shipping","variants"],"properties":{"id":{"type":"integer","format":"int64"},"name":{"type":"string"},"description":{"type":"string","nullable":true},"category":{"type":"string","enum":["clothing","food","lodging","other","other_non_taxable","athletic_membership"]},"free":{"type":"boolean","description":"True for the first option, whose price is forced to $0."},"price_cents":{"type":"integer"},"quantity":{"type":"integer","nullable":true},"active":{"type":"boolean"},"offer_shipping":{"type":"boolean"},"variants":{"type":"array","items":{"$ref":"#/components/schemas/RequiredSelectionVariant"}}}},"RequiredSelectionVariant":{"type":"object","required":["id","title","quantity"],"properties":{"id":{"type":"integer","format":"int64"},"title":{"type":"string"},"quantity":{"type":"integer","nullable":true}}},"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"}}},"ValidationError":{"type":"object","description":"A validation error response with a list of error messages","required":["errors"],"properties":{"errors":{"type":"array","items":{"type":"string"},"description":"List of validation error messages"}}}},"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}/required_selections":{"post":{"tags":["Required Selections"],"summary":"Create a required selection","description":"The first option is always the free path (its price is forced to $0). Returns 422 if no option has a name and category, or if a scoped selection lists no sub-events.\n","operationId":"createRequiredSelection","parameters":[{"$ref":"#/components/parameters/EventHandle"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateRequiredSelectionRequest"}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"type":"object","required":["required_selection"],"properties":{"required_selection":{"$ref":"#/components/schemas/RequiredSelection"}}}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/EventNotFound"},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationError"}}}}}}}}}
````

## GET /api/v1/events/{handle}/required\_selections/{id}

> Get a required selection

````json
{"openapi":"3.1.0","info":{"title":"Movemint API","version":"1.0"},"tags":[{"name":"Required Selections","description":"Manage required selections: an ordered set of options a registrant must\nchoose exactly one of during checkout (e.g. shirt size, bib pickup day).\nThe first option is always the free path (its price is forced to $0).\nRequires the merchandise_management scope. Images are not settable through\nthe API.\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"}},"ResourceId":{"name":"id","in":"path","required":true,"description":"The ID of the resource","schema":{"type":"integer","format":"int64"}}},"schemas":{"RequiredSelection":{"type":"object","required":["id","title","subtitle","requirement_scope","applies_to_all_sub_events","sub_event_ids","visibility","options"],"properties":{"id":{"type":"integer","format":"int64"},"title":{"type":"string"},"subtitle":{"type":"string","nullable":true},"requirement_scope":{"type":"string","enum":["per_cart","per_person","per_registration"]},"applies_to_all_sub_events":{"type":"boolean"},"sub_event_ids":{"type":"array","items":{"type":"integer","format":"int64"}},"visibility":{"type":"string","enum":["Shown","Hidden"]},"options":{"type":"array","items":{"$ref":"#/components/schemas/RequiredSelectionOption"}}}},"RequiredSelectionOption":{"type":"object","required":["id","name","description","category","free","price_cents","quantity","active","offer_shipping","variants"],"properties":{"id":{"type":"integer","format":"int64"},"name":{"type":"string"},"description":{"type":"string","nullable":true},"category":{"type":"string","enum":["clothing","food","lodging","other","other_non_taxable","athletic_membership"]},"free":{"type":"boolean","description":"True for the first option, whose price is forced to $0."},"price_cents":{"type":"integer"},"quantity":{"type":"integer","nullable":true},"active":{"type":"boolean"},"offer_shipping":{"type":"boolean"},"variants":{"type":"array","items":{"$ref":"#/components/schemas/RequiredSelectionVariant"}}}},"RequiredSelectionVariant":{"type":"object","required":["id","title","quantity"],"properties":{"id":{"type":"integer","format":"int64"},"title":{"type":"string"},"quantity":{"type":"integer","nullable":true}}},"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}/required_selections/{id}":{"get":{"tags":["Required Selections"],"summary":"Get a required selection","operationId":"getRequiredSelection","parameters":[{"$ref":"#/components/parameters/EventHandle"},{"$ref":"#/components/parameters/ResourceId"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","required":["required_selection"],"properties":{"required_selection":{"$ref":"#/components/schemas/RequiredSelection"}}}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/EventNotFound"}}}}}}
````

## Delete a required selection

> Refused (422) when any option already has orders.

````json
{"openapi":"3.1.0","info":{"title":"Movemint API","version":"1.0"},"tags":[{"name":"Required Selections","description":"Manage required selections: an ordered set of options a registrant must\nchoose exactly one of during checkout (e.g. shirt size, bib pickup day).\nThe first option is always the free path (its price is forced to $0).\nRequires the merchandise_management scope. Images are not settable through\nthe API.\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"}},"ResourceId":{"name":"id","in":"path","required":true,"description":"The ID of the resource","schema":{"type":"integer","format":"int64"}}},"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"}}},"ValidationError":{"type":"object","description":"A validation error response with a list of error messages","required":["errors"],"properties":{"errors":{"type":"array","items":{"type":"string"},"description":"List of validation error messages"}}}}},"paths":{"/api/v1/events/{handle}/required_selections/{id}":{"delete":{"tags":["Required Selections"],"summary":"Delete a required selection","description":"Refused (422) when any option already has orders.","operationId":"deleteRequiredSelection","parameters":[{"$ref":"#/components/parameters/EventHandle"},{"$ref":"#/components/parameters/ResourceId"}],"responses":{"200":{"description":"Deleted","content":{"application/json":{"schema":{"type":"object","required":["ok"],"properties":{"ok":{"type":"boolean","enum":[true]}}}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/EventNotFound"},"422":{"description":"Has orders","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationError"}}}}}}}}}
````

## Update a required selection

> Sending \`options\` replaces the whole option set: include an option's id (and each variant's id) to keep it, omit the id to add a new one. An option or variant with existing orders cannot be removed (422).<br>

````json
{"openapi":"3.1.0","info":{"title":"Movemint API","version":"1.0"},"tags":[{"name":"Required Selections","description":"Manage required selections: an ordered set of options a registrant must\nchoose exactly one of during checkout (e.g. shirt size, bib pickup day).\nThe first option is always the free path (its price is forced to $0).\nRequires the merchandise_management scope. Images are not settable through\nthe API.\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"}},"ResourceId":{"name":"id","in":"path","required":true,"description":"The ID of the resource","schema":{"type":"integer","format":"int64"}}},"schemas":{"UpdateRequiredSelectionRequest":{"description":"Partial update: send only the fields to change. Omit `options` to leave the option set untouched; include it to replace the entire set (an option's id keeps it, no id adds it), where the first option is always the free path.\n","allOf":[{"$ref":"#/components/schemas/RequiredSelectionWritableFields"}]},"RequiredSelectionWritableFields":{"type":"object","properties":{"title":{"type":"string"},"description":{"type":"string"},"requirement_scope":{"type":"string","enum":["per_registration","per_person","per_cart"],"description":"Defaults to per_registration."},"applies_to_all_sub_events":{"type":"boolean","description":"Defaults to true. Set false to restrict to sub_event_ids."},"sub_event_ids":{"type":"array","items":{"type":"integer"},"description":"Required when applies_to_all_sub_events is false."},"options":{"type":"array","description":"The first option is the free path (its price is forced to $0).","items":{"type":"object","required":["name","category"],"properties":{"id":{"type":"integer","description":"Existing option id to keep/edit; omit to add a new option."},"name":{"type":"string"},"description":{"type":"string"},"category":{"type":"string","enum":["clothing","food","lodging","other","other_non_taxable","athletic_membership"]},"price_cents":{"type":"integer","minimum":0},"quantity":{"type":"integer","minimum":0},"active":{"type":"boolean"},"offer_shipping":{"type":"boolean"},"variants":{"type":"array","items":{"type":"object","required":["title"],"properties":{"id":{"type":"integer","description":"Existing variant id to keep/edit; omit to add a new variant."},"title":{"type":"string"},"quantity":{"type":"integer","minimum":0}}}}}}}}},"RequiredSelection":{"type":"object","required":["id","title","subtitle","requirement_scope","applies_to_all_sub_events","sub_event_ids","visibility","options"],"properties":{"id":{"type":"integer","format":"int64"},"title":{"type":"string"},"subtitle":{"type":"string","nullable":true},"requirement_scope":{"type":"string","enum":["per_cart","per_person","per_registration"]},"applies_to_all_sub_events":{"type":"boolean"},"sub_event_ids":{"type":"array","items":{"type":"integer","format":"int64"}},"visibility":{"type":"string","enum":["Shown","Hidden"]},"options":{"type":"array","items":{"$ref":"#/components/schemas/RequiredSelectionOption"}}}},"RequiredSelectionOption":{"type":"object","required":["id","name","description","category","free","price_cents","quantity","active","offer_shipping","variants"],"properties":{"id":{"type":"integer","format":"int64"},"name":{"type":"string"},"description":{"type":"string","nullable":true},"category":{"type":"string","enum":["clothing","food","lodging","other","other_non_taxable","athletic_membership"]},"free":{"type":"boolean","description":"True for the first option, whose price is forced to $0."},"price_cents":{"type":"integer"},"quantity":{"type":"integer","nullable":true},"active":{"type":"boolean"},"offer_shipping":{"type":"boolean"},"variants":{"type":"array","items":{"$ref":"#/components/schemas/RequiredSelectionVariant"}}}},"RequiredSelectionVariant":{"type":"object","required":["id","title","quantity"],"properties":{"id":{"type":"integer","format":"int64"},"title":{"type":"string"},"quantity":{"type":"integer","nullable":true}}},"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"}}},"ValidationError":{"type":"object","description":"A validation error response with a list of error messages","required":["errors"],"properties":{"errors":{"type":"array","items":{"type":"string"},"description":"List of validation error messages"}}}},"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}/required_selections/{id}":{"patch":{"tags":["Required Selections"],"summary":"Update a required selection","description":"Sending `options` replaces the whole option set: include an option's id (and each variant's id) to keep it, omit the id to add a new one. An option or variant with existing orders cannot be removed (422).\n","operationId":"updateRequiredSelection","parameters":[{"$ref":"#/components/parameters/EventHandle"},{"$ref":"#/components/parameters/ResourceId"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateRequiredSelectionRequest"}}}},"responses":{"200":{"description":"Updated","content":{"application/json":{"schema":{"type":"object","required":["required_selection"],"properties":{"required_selection":{"$ref":"#/components/schemas/RequiredSelection"}}}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/EventNotFound"},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationError"}}}}}}}}}
````
