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

# Deferrals

Configure participant deferrals (rolling registration credit forward to a future event). The API exposes the primary deferral schedule for an event; admin users with multi-tier deferrals continue to manage them via the admin UI.

## Read the event's primary deferral schedule

> Returns the active (lowest-position, not yet expired) deferral\
> schedule, or \`null\` if none exists.<br>

````json
{"openapi":"3.1.0","info":{"title":"Movemint API","version":"1.0"},"tags":[{"name":"Deferrals","description":"Configure participant deferrals (rolling registration credit forward to a\nfuture event). The API exposes the primary deferral schedule for an\nevent; admin users with multi-tier deferrals continue to manage them via\nthe admin UI.\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":{"DeferralSchedule":{"type":"object","required":["id","defer_to_event_id","defer_to_group_id","valid_until","timezone","discount_type","discount_amount"],"properties":{"id":{"type":"integer","format":"int64"},"defer_to_event_id":{"type":"integer","format":"int64","nullable":true,"description":"Event id participants get credit for, or null if the credit goes to a Group."},"defer_to_group_id":{"type":"integer","format":"int64","nullable":true,"description":"Group id participants get credit for, or null when defer_to_event_id is set."},"valid_until":{"type":"string","format":"date-time","nullable":true,"description":"Cutoff datetime for accepting deferral requests."},"timezone":{"type":"string","nullable":true,"description":"IANA timezone of the schedule."},"discount_type":{"type":"string","enum":["percentage","fixed_amount"]},"discount_amount":{"type":"integer","description":"0–100 when discount_type=percentage, integer cents when fixed_amount."}}},"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}/deferral_schedule":{"get":{"tags":["Deferrals"],"summary":"Read the event's primary deferral schedule","description":"Returns the active (lowest-position, not yet expired) deferral\nschedule, or `null` if none exists.\n","operationId":"getDeferralSchedule","parameters":[{"$ref":"#/components/parameters/EventHandle"}],"responses":{"200":{"description":"Deferral schedule (or null)","content":{"application/json":{"schema":{"type":"object","required":["deferral_schedule"],"properties":{"deferral_schedule":{"nullable":true,"oneOf":[{"$ref":"#/components/schemas/DeferralSchedule"}]}}}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/EventNotFound"}}}}}}
````

## Create, update, or remove the primary deferral schedule

> Pass \`allow\_deferrals: false\` to delete all deferral schedules for the\
> event. Otherwise pass the configuration fields; if a schedule already\
> exists it is updated in place, otherwise a new one is created.\
> The \`defer\_to\_event\_id\` must reference an event that already exists.<br>

````json
{"openapi":"3.1.0","info":{"title":"Movemint API","version":"1.0"},"tags":[{"name":"Deferrals","description":"Configure participant deferrals (rolling registration credit forward to a\nfuture event). The API exposes the primary deferral schedule for an\nevent; admin users with multi-tier deferrals continue to manage them via\nthe admin UI.\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":{"DeferralScheduleUpdate":{"type":"object","properties":{"allow_deferrals":{"type":"boolean","description":"Pass false to delete all deferral schedules for the event."},"defer_to_event_id":{"type":"integer","format":"int64","nullable":true,"description":"Required (when allow_deferrals is not false). Event id the participant will get credit for."},"valid_until":{"type":"string","format":"date-time","nullable":true},"timezone":{"type":"string","nullable":true},"discount_type":{"type":"string","enum":["percentage","fixed_amount"]},"discount_amount":{"type":"number","description":"0–100 when percentage; integer cents when fixed_amount."}}},"DeferralSchedule":{"type":"object","required":["id","defer_to_event_id","defer_to_group_id","valid_until","timezone","discount_type","discount_amount"],"properties":{"id":{"type":"integer","format":"int64"},"defer_to_event_id":{"type":"integer","format":"int64","nullable":true,"description":"Event id participants get credit for, or null if the credit goes to a Group."},"defer_to_group_id":{"type":"integer","format":"int64","nullable":true,"description":"Group id participants get credit for, or null when defer_to_event_id is set."},"valid_until":{"type":"string","format":"date-time","nullable":true,"description":"Cutoff datetime for accepting deferral requests."},"timezone":{"type":"string","nullable":true,"description":"IANA timezone of the schedule."},"discount_type":{"type":"string","enum":["percentage","fixed_amount"]},"discount_amount":{"type":"integer","description":"0–100 when discount_type=percentage, integer cents when fixed_amount."}}},"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}/deferral_schedule":{"patch":{"tags":["Deferrals"],"summary":"Create, update, or remove the primary deferral schedule","description":"Pass `allow_deferrals: false` to delete all deferral schedules for the\nevent. Otherwise pass the configuration fields; if a schedule already\nexists it is updated in place, otherwise a new one is created.\nThe `defer_to_event_id` must reference an event that already exists.\n","operationId":"updateDeferralSchedule","parameters":[{"$ref":"#/components/parameters/EventHandle"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeferralScheduleUpdate"}}}},"responses":{"200":{"description":"Schedule created/updated, or all schedules removed","content":{"application/json":{"schema":{"type":"object","required":["deferral_schedule"],"properties":{"deferral_schedule":{"nullable":true,"oneOf":[{"$ref":"#/components/schemas/DeferralSchedule"}]}}}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/EventNotFound"},"422":{"description":"Validation error or unknown defer_to_event_id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}}}
````
