{"openapi":"3.1.0","info":{"title":"Eventail API","description":"Conference CFP and scheduling API. All endpoints require a bearer JWT issued by the configured identity provider.\n\nBeyond the responses documented per operation, any endpoint may return 400 for a malformed query string, 401 for a missing or invalid token, 406 or 415 when content negotiation fails, and 500 on server errors. Error bodies follow the JSON:API error format.\n\nRefused writes divide by status, so a client can branch before reading the error code. 403 means another caller could do this now and you cannot: the role or the relationship to the resource is what is missing. 409 means nobody could do it now, because the stored state conflicts with the request. 422 means the submitted document is wrong on its own terms, including where it disagrees with how the edition is configured.\n\nEvery response to an endpoint below carries an Eventail-Contract-Version header, holding an integer that rises by one whenever a change breaks a client written against the previous number. Anything a client can ignore, such as a new field or endpoint, leaves it alone. It is independent of this document's `version` field, which names the document rather than the contract, and of the release version. A client that reads it can tell whether it still understands this server before it has a token. The value this document was generated from is in `info.x-contract-version`.","version":"0.2.0","x-contract-version":2},"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"JWT"}}},"security":[{"bearerAuth":[]}],"paths":{"/editions":{"get":{"tags":["Editions"],"summary":"List editions","description":"Lists all editions, most recent start date first. Open to any authenticated subject, including integration tokens and subjects without a user record.","operationId":"listEditions","parameters":[{"name":"fields","in":"query","style":"deepObject","schema":{"type":"object","properties":{"edition":{"type":"string","description":"Comma-separated list of fields to include for this type. Leave empty to omit all fields. Allowed fields are: `name`, `startDate`, `endDate`, `timeZone`, `submissionDeadline`, `sessionFieldOptions`, `profileFieldOptions`"}},"additionalProperties":false}}],"responses":{"200":{"description":"All editions","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"edition"},"attributes":{"type":"object","properties":{"name":{"type":"string","minLength":1},"startDate":{"type":"string","format":"date"},"endDate":{"type":"string","format":"date"},"timeZone":{"type":"string"},"submissionDeadline":{"type":["string","null"],"format":"date-time"},"sessionFieldOptions":{"type":"object","properties":{"title":{"type":"object","properties":{"label":{"type":"string","minLength":1},"helperText":{"type":"string","minLength":1},"position":{"type":"integer"},"minLength":{"type":"integer","minimum":1},"maxLength":{"type":"integer","minimum":1}},"additionalProperties":false},"sessionType":{"type":"object","properties":{"label":{"type":"string","minLength":1},"helperText":{"type":"string","minLength":1},"position":{"type":"integer"}},"additionalProperties":false},"abstract":{"type":"object","properties":{"label":{"type":"string","minLength":1},"helperText":{"type":"string","minLength":1},"position":{"type":"integer"},"requirement":{"type":"string","enum":["optional","required"]},"minLength":{"type":"integer","minimum":1},"maxLength":{"type":"integer","minimum":1}},"required":["requirement"],"additionalProperties":false},"description":{"type":"object","properties":{"label":{"type":"string","minLength":1},"helperText":{"type":"string","minLength":1},"position":{"type":"integer"},"requirement":{"type":"string","enum":["optional","required"]},"minLength":{"type":"integer","minimum":1},"maxLength":{"type":"integer","minimum":1}},"required":["requirement"],"additionalProperties":false},"notes":{"type":"object","properties":{"label":{"type":"string","minLength":1},"helperText":{"type":"string","minLength":1},"position":{"type":"integer"},"requirement":{"type":"string","enum":["optional","required"]},"minLength":{"type":"integer","minimum":1},"maxLength":{"type":"integer","minimum":1}},"required":["requirement"],"additionalProperties":false},"track":{"type":"object","properties":{"label":{"type":"string","minLength":1},"helperText":{"type":"string","minLength":1},"position":{"type":"integer"},"requirement":{"type":"string","enum":["optional","required"]}},"required":["requirement"],"additionalProperties":false},"duration":{"type":"object","properties":{"label":{"type":"string","minLength":1},"helperText":{"type":"string","minLength":1},"position":{"type":"integer"},"requirement":{"type":"string","enum":["optional","required"]}},"required":["requirement"],"additionalProperties":false},"setupTime":{"type":"object","properties":{"label":{"type":"string","minLength":1},"helperText":{"type":"string","minLength":1},"position":{"type":"integer"},"requirement":{"type":"string","enum":["optional","required"]}},"required":["requirement"],"additionalProperties":false},"teardownTime":{"type":"object","properties":{"label":{"type":"string","minLength":1},"helperText":{"type":"string","minLength":1},"position":{"type":"integer"},"requirement":{"type":"string","enum":["optional","required"]}},"required":["requirement"],"additionalProperties":false},"teaserImage":{"type":"object","properties":{"label":{"type":"string","minLength":1},"helperText":{"type":"string","minLength":1},"position":{"type":"integer"},"requirement":{"type":"string","enum":["optional","required"]},"minWidth":{"type":"integer","minimum":1,"maximum":16383},"minHeight":{"type":"integer","minimum":1,"maximum":16383},"maxWidth":{"type":"integer","minimum":1,"maximum":16383},"maxHeight":{"type":"integer","minimum":1,"maximum":16383},"aspectRatio":{"type":"object","properties":{"width":{"type":"integer","minimum":1},"height":{"type":"integer","minimum":1}},"required":["width","height"],"additionalProperties":false}},"required":["requirement"],"additionalProperties":false}},"additionalProperties":false},"profileFieldOptions":{"type":"object","properties":{"displayName":{"type":"object","properties":{"label":{"type":"string","minLength":1},"helperText":{"type":"string","minLength":1},"position":{"type":"integer"},"minLength":{"type":"integer","minimum":1},"maxLength":{"type":"integer","minimum":1}},"additionalProperties":false},"emailAddress":{"type":"object","properties":{"label":{"type":"string","minLength":1},"helperText":{"type":"string","minLength":1},"position":{"type":"integer"},"minLength":{"type":"integer","minimum":1},"maxLength":{"type":"integer","minimum":1}},"additionalProperties":false},"avatar":{"type":"object","properties":{"label":{"type":"string","minLength":1},"helperText":{"type":"string","minLength":1},"position":{"type":"integer"},"requirement":{"type":"string","enum":["optional","required"]}},"required":["requirement"],"additionalProperties":false},"biography":{"type":"object","properties":{"label":{"type":"string","minLength":1},"helperText":{"type":"string","minLength":1},"position":{"type":"integer"},"requirement":{"type":"string","enum":["optional","required"]},"minLength":{"type":"integer","minimum":1},"maxLength":{"type":"integer","minimum":1}},"required":["requirement"],"additionalProperties":false},"availability":{"type":"object","properties":{"label":{"type":"string","minLength":1},"helperText":{"type":"string","minLength":1},"position":{"type":"integer"},"requirement":{"type":"string","enum":["optional","required"]}},"required":["requirement"],"additionalProperties":false}},"additionalProperties":false}},"required":["name","startDate","endDate","timeZone","submissionDeadline","sessionFieldOptions","profileFieldOptions"],"additionalProperties":false},"meta":{"type":"object","properties":{"version":{"type":"integer","description":"Counts writes to this edition. A write names the one it read and is refused with edition_changed if another has landed since."}},"required":["version"],"additionalProperties":false}},"required":["id","type","attributes","meta"]}},"meta":{"type":"object","properties":{"sessionFieldSpecs":{"type":"object","description":"What each built-in field is: the label and helper text it falls back to, whether it can be made optional, and which kind of value it holds.","properties":{"title":{"type":"object","properties":{"label":{"type":"string"},"helperText":{"type":"string"},"forceRequired":{"type":"boolean"},"type":{"type":"string","const":"string"}},"required":["label","forceRequired","type"],"additionalProperties":false},"sessionType":{"type":"object","properties":{"label":{"type":"string"},"helperText":{"type":"string"},"forceRequired":{"type":"boolean"},"type":{"type":"string","const":"relationship"}},"required":["label","forceRequired","type"],"additionalProperties":false},"abstract":{"type":"object","properties":{"label":{"type":"string"},"helperText":{"type":"string"},"forceRequired":{"type":"boolean"},"type":{"type":"string","const":"string"}},"required":["label","forceRequired","type"],"additionalProperties":false},"description":{"type":"object","properties":{"label":{"type":"string"},"helperText":{"type":"string"},"forceRequired":{"type":"boolean"},"type":{"type":"string","const":"string"}},"required":["label","forceRequired","type"],"additionalProperties":false},"notes":{"type":"object","properties":{"label":{"type":"string"},"helperText":{"type":"string"},"forceRequired":{"type":"boolean"},"type":{"type":"string","const":"string"}},"required":["label","forceRequired","type"],"additionalProperties":false},"track":{"type":"object","properties":{"label":{"type":"string"},"helperText":{"type":"string"},"forceRequired":{"type":"boolean"},"type":{"type":"string","const":"relationship"}},"required":["label","forceRequired","type"],"additionalProperties":false},"duration":{"type":"object","properties":{"label":{"type":"string"},"helperText":{"type":"string"},"forceRequired":{"type":"boolean"},"type":{"type":"string","const":"duration"}},"required":["label","forceRequired","type"],"additionalProperties":false},"setupTime":{"type":"object","properties":{"label":{"type":"string"},"helperText":{"type":"string"},"forceRequired":{"type":"boolean"},"type":{"type":"string","const":"duration"}},"required":["label","forceRequired","type"],"additionalProperties":false},"teardownTime":{"type":"object","properties":{"label":{"type":"string"},"helperText":{"type":"string"},"forceRequired":{"type":"boolean"},"type":{"type":"string","const":"duration"}},"required":["label","forceRequired","type"],"additionalProperties":false},"teaserImage":{"type":"object","properties":{"label":{"type":"string"},"helperText":{"type":"string"},"forceRequired":{"type":"boolean"},"type":{"type":"string","const":"file"},"imageDefaults":{"type":"object","description":"Default constraint values for the field.","properties":{"minWidth":{"type":"integer","minimum":1,"maximum":16383},"minHeight":{"type":"integer","minimum":1,"maximum":16383},"maxWidth":{"type":"integer","minimum":1,"maximum":16383},"maxHeight":{"type":"integer","minimum":1,"maximum":16383}},"required":["minWidth","minHeight","maxWidth","maxHeight"],"additionalProperties":false}},"required":["label","forceRequired","type","imageDefaults"],"additionalProperties":false}},"additionalProperties":false},"profileFieldSpecs":{"type":"object","description":"What each built-in field is: the label and helper text it falls back to, whether it can be made optional, and which kind of value it holds.","properties":{"displayName":{"type":"object","properties":{"label":{"type":"string"},"helperText":{"type":"string"},"forceRequired":{"type":"boolean"},"type":{"type":"string","const":"string"}},"required":["label","forceRequired","type"],"additionalProperties":false},"emailAddress":{"type":"object","properties":{"label":{"type":"string"},"helperText":{"type":"string"},"forceRequired":{"type":"boolean"},"type":{"type":"string","const":"string"}},"required":["label","forceRequired","type"],"additionalProperties":false},"avatar":{"type":"object","properties":{"label":{"type":"string"},"helperText":{"type":"string"},"forceRequired":{"type":"boolean"},"type":{"type":"string","const":"file"},"imageConstraints":{"type":"object","description":"Fixed constraint values for the field, not configurable per edition.","properties":{"minWidth":{"type":"integer","minimum":1,"maximum":16383},"minHeight":{"type":"integer","minimum":1,"maximum":16383},"maxWidth":{"type":"integer","minimum":1,"maximum":16383},"maxHeight":{"type":"integer","minimum":1,"maximum":16383},"aspectRatio":{"type":["object","null"],"properties":{"width":{"type":"integer","minimum":1},"height":{"type":"integer","minimum":1}},"required":["width","height"],"additionalProperties":false}},"required":["minWidth","minHeight","maxWidth","maxHeight","aspectRatio"],"additionalProperties":false}},"required":["label","forceRequired","type","imageConstraints"],"additionalProperties":false},"biography":{"type":"object","properties":{"label":{"type":"string"},"helperText":{"type":"string"},"forceRequired":{"type":"boolean"},"type":{"type":"string","const":"string"}},"required":["label","forceRequired","type"],"additionalProperties":false},"availability":{"type":"object","properties":{"label":{"type":"string"},"helperText":{"type":"string"},"forceRequired":{"type":"boolean"},"type":{"type":"string","const":"availability"}},"required":["label","forceRequired","type"],"additionalProperties":false}},"additionalProperties":false},"maxFileSize":{"type":"integer","description":"Bytes any single upload may reach, enforced by the store as a condition of the presigned post. Served here so a client can reject a file before asking for one."},"fileContentTypes":{"type":"array","items":{"type":"string"},"description":"Content types a signed post will be issued for. Served so a client can narrow its file picker to what an upload can succeed with."},"imageContentTypes":{"type":"array","items":{"type":"string"},"description":"The narrower set an image slot accepts on attach, a subset of fileContentTypes."}},"required":["sessionFieldSpecs","profileFieldSpecs","maxFileSize","fileContentTypes","imageContentTypes"],"additionalProperties":false}},"required":["data","meta"]}}}}}},"post":{"tags":["Editions"],"summary":"Create an edition","description":"Creates an edition with an empty draft schedule and a default session type. With a template edition relationship, its locations, session types, tracks and custom fields are copied into the new edition. Requires the manager role.","operationId":"createEdition","requestBody":{"required":true,"content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"type":{"type":"string","const":"edition"},"attributes":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":200},"startDate":{"type":"string","format":"date","examples":["2020-01-01"]},"endDate":{"type":"string","format":"date","examples":["2020-01-01"]},"timeZone":{"type":"string"},"submissionDeadline":{"anyOf":[{"type":"string","format":"date-time","examples":["2020-01-01T14:00:00Z"]},{"type":"null"}]},"sessionFieldOptions":{"type":"object","properties":{"title":{"type":"object","properties":{"label":{"type":"string","minLength":1,"maxLength":200},"helperText":{"type":"string","minLength":1,"maxLength":5000},"position":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"minLength":{"type":"integer","minimum":1,"maximum":9007199254740991},"maxLength":{"type":"integer","minimum":1,"maximum":9007199254740991}},"additionalProperties":false},"sessionType":{"type":"object","properties":{"label":{"type":"string","minLength":1,"maxLength":200},"helperText":{"type":"string","minLength":1,"maxLength":5000},"position":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"additionalProperties":false},"abstract":{"type":"object","properties":{"label":{"type":"string","minLength":1,"maxLength":200},"helperText":{"type":"string","minLength":1,"maxLength":5000},"position":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"requirement":{"type":"string","enum":["optional","required"]},"minLength":{"type":"integer","minimum":1,"maximum":9007199254740991},"maxLength":{"type":"integer","minimum":1,"maximum":9007199254740991}},"required":["requirement"],"additionalProperties":false},"description":{"type":"object","properties":{"label":{"type":"string","minLength":1,"maxLength":200},"helperText":{"type":"string","minLength":1,"maxLength":5000},"position":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"requirement":{"type":"string","enum":["optional","required"]},"minLength":{"type":"integer","minimum":1,"maximum":9007199254740991},"maxLength":{"type":"integer","minimum":1,"maximum":9007199254740991}},"required":["requirement"],"additionalProperties":false},"notes":{"type":"object","properties":{"label":{"type":"string","minLength":1,"maxLength":200},"helperText":{"type":"string","minLength":1,"maxLength":5000},"position":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"requirement":{"type":"string","enum":["optional","required"]},"minLength":{"type":"integer","minimum":1,"maximum":9007199254740991},"maxLength":{"type":"integer","minimum":1,"maximum":9007199254740991}},"required":["requirement"],"additionalProperties":false},"track":{"type":"object","properties":{"label":{"type":"string","minLength":1,"maxLength":200},"helperText":{"type":"string","minLength":1,"maxLength":5000},"position":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"requirement":{"type":"string","enum":["optional","required"]}},"required":["requirement"],"additionalProperties":false},"duration":{"type":"object","properties":{"label":{"type":"string","minLength":1,"maxLength":200},"helperText":{"type":"string","minLength":1,"maxLength":5000},"position":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"requirement":{"type":"string","enum":["optional","required"]}},"required":["requirement"],"additionalProperties":false},"setupTime":{"type":"object","properties":{"label":{"type":"string","minLength":1,"maxLength":200},"helperText":{"type":"string","minLength":1,"maxLength":5000},"position":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"requirement":{"type":"string","enum":["optional","required"]}},"required":["requirement"],"additionalProperties":false},"teardownTime":{"type":"object","properties":{"label":{"type":"string","minLength":1,"maxLength":200},"helperText":{"type":"string","minLength":1,"maxLength":5000},"position":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"requirement":{"type":"string","enum":["optional","required"]}},"required":["requirement"],"additionalProperties":false},"teaserImage":{"type":"object","properties":{"label":{"type":"string","minLength":1,"maxLength":200},"helperText":{"type":"string","minLength":1,"maxLength":5000},"position":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"requirement":{"type":"string","enum":["optional","required"]},"minWidth":{"type":"integer","minimum":1,"maximum":16383},"minHeight":{"type":"integer","minimum":1,"maximum":16383},"maxWidth":{"type":"integer","minimum":1,"maximum":16383},"maxHeight":{"type":"integer","minimum":1,"maximum":16383},"aspectRatio":{"type":"object","properties":{"width":{"type":"integer","minimum":1,"maximum":9007199254740991},"height":{"type":"integer","minimum":1,"maximum":9007199254740991}},"required":["width","height"],"additionalProperties":false}},"required":["requirement"],"additionalProperties":false}},"additionalProperties":false},"profileFieldOptions":{"type":"object","properties":{"displayName":{"type":"object","properties":{"label":{"type":"string","minLength":1,"maxLength":200},"helperText":{"type":"string","minLength":1,"maxLength":5000},"position":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"minLength":{"type":"integer","minimum":1,"maximum":9007199254740991},"maxLength":{"type":"integer","minimum":1,"maximum":9007199254740991}},"additionalProperties":false},"emailAddress":{"type":"object","properties":{"label":{"type":"string","minLength":1,"maxLength":200},"helperText":{"type":"string","minLength":1,"maxLength":5000},"position":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"minLength":{"type":"integer","minimum":1,"maximum":9007199254740991},"maxLength":{"type":"integer","minimum":1,"maximum":9007199254740991}},"additionalProperties":false},"avatar":{"type":"object","properties":{"label":{"type":"string","minLength":1,"maxLength":200},"helperText":{"type":"string","minLength":1,"maxLength":5000},"position":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"requirement":{"type":"string","enum":["optional","required"]}},"required":["requirement"],"additionalProperties":false},"biography":{"type":"object","properties":{"label":{"type":"string","minLength":1,"maxLength":200},"helperText":{"type":"string","minLength":1,"maxLength":5000},"position":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"requirement":{"type":"string","enum":["optional","required"]},"minLength":{"type":"integer","minimum":1,"maximum":9007199254740991},"maxLength":{"type":"integer","minimum":1,"maximum":9007199254740991}},"required":["requirement"],"additionalProperties":false},"availability":{"type":"object","properties":{"label":{"type":"string","minLength":1,"maxLength":200},"helperText":{"type":"string","minLength":1,"maxLength":5000},"position":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"requirement":{"type":"string","enum":["optional","required"]}},"required":["requirement"],"additionalProperties":false}},"additionalProperties":false}},"required":["name","startDate","endDate","timeZone","submissionDeadline"],"additionalProperties":false},"relationships":{"type":"object","properties":{"templateEdition":{"type":"object","properties":{"data":{"type":"object","properties":{"type":{"type":"string","const":"edition"},"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"required":["type","id"],"additionalProperties":false}},"required":["data"],"additionalProperties":false}}}},"required":["type","attributes"],"additionalProperties":false}},"required":["data"],"additionalProperties":false}}}},"responses":{"201":{"description":"The created edition","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"edition"},"attributes":{"type":"object","properties":{"name":{"type":"string","minLength":1},"startDate":{"type":"string","format":"date"},"endDate":{"type":"string","format":"date"},"timeZone":{"type":"string"},"submissionDeadline":{"type":["string","null"],"format":"date-time"},"sessionFieldOptions":{"type":"object","properties":{"title":{"type":"object","properties":{"label":{"type":"string","minLength":1},"helperText":{"type":"string","minLength":1},"position":{"type":"integer"},"minLength":{"type":"integer","minimum":1},"maxLength":{"type":"integer","minimum":1}},"additionalProperties":false},"sessionType":{"type":"object","properties":{"label":{"type":"string","minLength":1},"helperText":{"type":"string","minLength":1},"position":{"type":"integer"}},"additionalProperties":false},"abstract":{"type":"object","properties":{"label":{"type":"string","minLength":1},"helperText":{"type":"string","minLength":1},"position":{"type":"integer"},"requirement":{"type":"string","enum":["optional","required"]},"minLength":{"type":"integer","minimum":1},"maxLength":{"type":"integer","minimum":1}},"required":["requirement"],"additionalProperties":false},"description":{"type":"object","properties":{"label":{"type":"string","minLength":1},"helperText":{"type":"string","minLength":1},"position":{"type":"integer"},"requirement":{"type":"string","enum":["optional","required"]},"minLength":{"type":"integer","minimum":1},"maxLength":{"type":"integer","minimum":1}},"required":["requirement"],"additionalProperties":false},"notes":{"type":"object","properties":{"label":{"type":"string","minLength":1},"helperText":{"type":"string","minLength":1},"position":{"type":"integer"},"requirement":{"type":"string","enum":["optional","required"]},"minLength":{"type":"integer","minimum":1},"maxLength":{"type":"integer","minimum":1}},"required":["requirement"],"additionalProperties":false},"track":{"type":"object","properties":{"label":{"type":"string","minLength":1},"helperText":{"type":"string","minLength":1},"position":{"type":"integer"},"requirement":{"type":"string","enum":["optional","required"]}},"required":["requirement"],"additionalProperties":false},"duration":{"type":"object","properties":{"label":{"type":"string","minLength":1},"helperText":{"type":"string","minLength":1},"position":{"type":"integer"},"requirement":{"type":"string","enum":["optional","required"]}},"required":["requirement"],"additionalProperties":false},"setupTime":{"type":"object","properties":{"label":{"type":"string","minLength":1},"helperText":{"type":"string","minLength":1},"position":{"type":"integer"},"requirement":{"type":"string","enum":["optional","required"]}},"required":["requirement"],"additionalProperties":false},"teardownTime":{"type":"object","properties":{"label":{"type":"string","minLength":1},"helperText":{"type":"string","minLength":1},"position":{"type":"integer"},"requirement":{"type":"string","enum":["optional","required"]}},"required":["requirement"],"additionalProperties":false},"teaserImage":{"type":"object","properties":{"label":{"type":"string","minLength":1},"helperText":{"type":"string","minLength":1},"position":{"type":"integer"},"requirement":{"type":"string","enum":["optional","required"]},"minWidth":{"type":"integer","minimum":1,"maximum":16383},"minHeight":{"type":"integer","minimum":1,"maximum":16383},"maxWidth":{"type":"integer","minimum":1,"maximum":16383},"maxHeight":{"type":"integer","minimum":1,"maximum":16383},"aspectRatio":{"type":"object","properties":{"width":{"type":"integer","minimum":1},"height":{"type":"integer","minimum":1}},"required":["width","height"],"additionalProperties":false}},"required":["requirement"],"additionalProperties":false}},"additionalProperties":false},"profileFieldOptions":{"type":"object","properties":{"displayName":{"type":"object","properties":{"label":{"type":"string","minLength":1},"helperText":{"type":"string","minLength":1},"position":{"type":"integer"},"minLength":{"type":"integer","minimum":1},"maxLength":{"type":"integer","minimum":1}},"additionalProperties":false},"emailAddress":{"type":"object","properties":{"label":{"type":"string","minLength":1},"helperText":{"type":"string","minLength":1},"position":{"type":"integer"},"minLength":{"type":"integer","minimum":1},"maxLength":{"type":"integer","minimum":1}},"additionalProperties":false},"avatar":{"type":"object","properties":{"label":{"type":"string","minLength":1},"helperText":{"type":"string","minLength":1},"position":{"type":"integer"},"requirement":{"type":"string","enum":["optional","required"]}},"required":["requirement"],"additionalProperties":false},"biography":{"type":"object","properties":{"label":{"type":"string","minLength":1},"helperText":{"type":"string","minLength":1},"position":{"type":"integer"},"requirement":{"type":"string","enum":["optional","required"]},"minLength":{"type":"integer","minimum":1},"maxLength":{"type":"integer","minimum":1}},"required":["requirement"],"additionalProperties":false},"availability":{"type":"object","properties":{"label":{"type":"string","minLength":1},"helperText":{"type":"string","minLength":1},"position":{"type":"integer"},"requirement":{"type":"string","enum":["optional","required"]}},"required":["requirement"],"additionalProperties":false}},"additionalProperties":false}},"required":["name","startDate","endDate","timeZone","submissionDeadline","sessionFieldOptions","profileFieldOptions"],"additionalProperties":false},"meta":{"type":"object","properties":{"version":{"type":"integer","description":"Counts writes to this edition. A write names the one it read and is refused with edition_changed if another has landed since."}},"required":["version"],"additionalProperties":false}},"required":["id","type","attributes","meta"]},"meta":{"type":"object","properties":{"sessionFieldSpecs":{"type":"object","description":"What each built-in field is: the label and helper text it falls back to, whether it can be made optional, and which kind of value it holds.","properties":{"title":{"type":"object","properties":{"label":{"type":"string"},"helperText":{"type":"string"},"forceRequired":{"type":"boolean"},"type":{"type":"string","const":"string"}},"required":["label","forceRequired","type"],"additionalProperties":false},"sessionType":{"type":"object","properties":{"label":{"type":"string"},"helperText":{"type":"string"},"forceRequired":{"type":"boolean"},"type":{"type":"string","const":"relationship"}},"required":["label","forceRequired","type"],"additionalProperties":false},"abstract":{"type":"object","properties":{"label":{"type":"string"},"helperText":{"type":"string"},"forceRequired":{"type":"boolean"},"type":{"type":"string","const":"string"}},"required":["label","forceRequired","type"],"additionalProperties":false},"description":{"type":"object","properties":{"label":{"type":"string"},"helperText":{"type":"string"},"forceRequired":{"type":"boolean"},"type":{"type":"string","const":"string"}},"required":["label","forceRequired","type"],"additionalProperties":false},"notes":{"type":"object","properties":{"label":{"type":"string"},"helperText":{"type":"string"},"forceRequired":{"type":"boolean"},"type":{"type":"string","const":"string"}},"required":["label","forceRequired","type"],"additionalProperties":false},"track":{"type":"object","properties":{"label":{"type":"string"},"helperText":{"type":"string"},"forceRequired":{"type":"boolean"},"type":{"type":"string","const":"relationship"}},"required":["label","forceRequired","type"],"additionalProperties":false},"duration":{"type":"object","properties":{"label":{"type":"string"},"helperText":{"type":"string"},"forceRequired":{"type":"boolean"},"type":{"type":"string","const":"duration"}},"required":["label","forceRequired","type"],"additionalProperties":false},"setupTime":{"type":"object","properties":{"label":{"type":"string"},"helperText":{"type":"string"},"forceRequired":{"type":"boolean"},"type":{"type":"string","const":"duration"}},"required":["label","forceRequired","type"],"additionalProperties":false},"teardownTime":{"type":"object","properties":{"label":{"type":"string"},"helperText":{"type":"string"},"forceRequired":{"type":"boolean"},"type":{"type":"string","const":"duration"}},"required":["label","forceRequired","type"],"additionalProperties":false},"teaserImage":{"type":"object","properties":{"label":{"type":"string"},"helperText":{"type":"string"},"forceRequired":{"type":"boolean"},"type":{"type":"string","const":"file"},"imageDefaults":{"type":"object","description":"Default constraint values for the field.","properties":{"minWidth":{"type":"integer","minimum":1,"maximum":16383},"minHeight":{"type":"integer","minimum":1,"maximum":16383},"maxWidth":{"type":"integer","minimum":1,"maximum":16383},"maxHeight":{"type":"integer","minimum":1,"maximum":16383}},"required":["minWidth","minHeight","maxWidth","maxHeight"],"additionalProperties":false}},"required":["label","forceRequired","type","imageDefaults"],"additionalProperties":false}},"additionalProperties":false},"profileFieldSpecs":{"type":"object","description":"What each built-in field is: the label and helper text it falls back to, whether it can be made optional, and which kind of value it holds.","properties":{"displayName":{"type":"object","properties":{"label":{"type":"string"},"helperText":{"type":"string"},"forceRequired":{"type":"boolean"},"type":{"type":"string","const":"string"}},"required":["label","forceRequired","type"],"additionalProperties":false},"emailAddress":{"type":"object","properties":{"label":{"type":"string"},"helperText":{"type":"string"},"forceRequired":{"type":"boolean"},"type":{"type":"string","const":"string"}},"required":["label","forceRequired","type"],"additionalProperties":false},"avatar":{"type":"object","properties":{"label":{"type":"string"},"helperText":{"type":"string"},"forceRequired":{"type":"boolean"},"type":{"type":"string","const":"file"},"imageConstraints":{"type":"object","description":"Fixed constraint values for the field, not configurable per edition.","properties":{"minWidth":{"type":"integer","minimum":1,"maximum":16383},"minHeight":{"type":"integer","minimum":1,"maximum":16383},"maxWidth":{"type":"integer","minimum":1,"maximum":16383},"maxHeight":{"type":"integer","minimum":1,"maximum":16383},"aspectRatio":{"type":["object","null"],"properties":{"width":{"type":"integer","minimum":1},"height":{"type":"integer","minimum":1}},"required":["width","height"],"additionalProperties":false}},"required":["minWidth","minHeight","maxWidth","maxHeight","aspectRatio"],"additionalProperties":false}},"required":["label","forceRequired","type","imageConstraints"],"additionalProperties":false},"biography":{"type":"object","properties":{"label":{"type":"string"},"helperText":{"type":"string"},"forceRequired":{"type":"boolean"},"type":{"type":"string","const":"string"}},"required":["label","forceRequired","type"],"additionalProperties":false},"availability":{"type":"object","properties":{"label":{"type":"string"},"helperText":{"type":"string"},"forceRequired":{"type":"boolean"},"type":{"type":"string","const":"availability"}},"required":["label","forceRequired","type"],"additionalProperties":false}},"additionalProperties":false},"maxFileSize":{"type":"integer","description":"Bytes any single upload may reach, enforced by the store as a condition of the presigned post. Served here so a client can reject a file before asking for one."},"fileContentTypes":{"type":"array","items":{"type":"string"},"description":"Content types a signed post will be issued for. Served so a client can narrow its file picker to what an upload can succeed with."},"imageContentTypes":{"type":"array","items":{"type":"string"},"description":"The narrower set an image slot accepts on attach, a subset of fileContentTypes."}},"required":["sessionFieldSpecs","profileFieldSpecs","maxFileSize","fileContentTypes","imageContentTypes"],"additionalProperties":false}},"required":["data","meta"]}}}},"403":{"description":"Manager role required","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"errors":{"type":"array","minItems":1,"items":{"type":"object","properties":{"status":{"type":"string","description":"HTTP status code"},"code":{"type":"string"},"title":{"type":"string"},"detail":{"type":"string"},"source":{"type":"object","properties":{"pointer":{"type":"string"},"parameter":{"type":"string"},"header":{"type":"string"}}}},"required":["status"]}}},"required":["errors"]}}}},"404":{"description":"Template edition not found","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"errors":{"type":"array","minItems":1,"items":{"type":"object","properties":{"status":{"type":"string","description":"HTTP status code"},"code":{"type":"string"},"title":{"type":"string"},"detail":{"type":"string"},"source":{"type":"object","properties":{"pointer":{"type":"string"},"parameter":{"type":"string"},"header":{"type":"string"}}}},"required":["status"]}}},"required":["errors"]}}}},"422":{"description":"Invalid request body","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"errors":{"type":"array","minItems":1,"items":{"type":"object","properties":{"status":{"type":"string","description":"HTTP status code"},"code":{"type":"string"},"title":{"type":"string"},"detail":{"type":"string"},"source":{"type":"object","properties":{"pointer":{"type":"string"},"parameter":{"type":"string"},"header":{"type":"string"}}}},"required":["status"]}}},"required":["errors"]}}}}}}},"/editions/{editionId}":{"get":{"tags":["Editions"],"summary":"Retrieve an edition","description":"Retrieves a single edition. Open to any authenticated subject, including integration tokens and subjects without a user record.","operationId":"showEdition","parameters":[{"name":"editionId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"The edition","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"edition"},"attributes":{"type":"object","properties":{"name":{"type":"string","minLength":1},"startDate":{"type":"string","format":"date"},"endDate":{"type":"string","format":"date"},"timeZone":{"type":"string"},"submissionDeadline":{"type":["string","null"],"format":"date-time"},"sessionFieldOptions":{"type":"object","properties":{"title":{"type":"object","properties":{"label":{"type":"string","minLength":1},"helperText":{"type":"string","minLength":1},"position":{"type":"integer"},"minLength":{"type":"integer","minimum":1},"maxLength":{"type":"integer","minimum":1}},"additionalProperties":false},"sessionType":{"type":"object","properties":{"label":{"type":"string","minLength":1},"helperText":{"type":"string","minLength":1},"position":{"type":"integer"}},"additionalProperties":false},"abstract":{"type":"object","properties":{"label":{"type":"string","minLength":1},"helperText":{"type":"string","minLength":1},"position":{"type":"integer"},"requirement":{"type":"string","enum":["optional","required"]},"minLength":{"type":"integer","minimum":1},"maxLength":{"type":"integer","minimum":1}},"required":["requirement"],"additionalProperties":false},"description":{"type":"object","properties":{"label":{"type":"string","minLength":1},"helperText":{"type":"string","minLength":1},"position":{"type":"integer"},"requirement":{"type":"string","enum":["optional","required"]},"minLength":{"type":"integer","minimum":1},"maxLength":{"type":"integer","minimum":1}},"required":["requirement"],"additionalProperties":false},"notes":{"type":"object","properties":{"label":{"type":"string","minLength":1},"helperText":{"type":"string","minLength":1},"position":{"type":"integer"},"requirement":{"type":"string","enum":["optional","required"]},"minLength":{"type":"integer","minimum":1},"maxLength":{"type":"integer","minimum":1}},"required":["requirement"],"additionalProperties":false},"track":{"type":"object","properties":{"label":{"type":"string","minLength":1},"helperText":{"type":"string","minLength":1},"position":{"type":"integer"},"requirement":{"type":"string","enum":["optional","required"]}},"required":["requirement"],"additionalProperties":false},"duration":{"type":"object","properties":{"label":{"type":"string","minLength":1},"helperText":{"type":"string","minLength":1},"position":{"type":"integer"},"requirement":{"type":"string","enum":["optional","required"]}},"required":["requirement"],"additionalProperties":false},"setupTime":{"type":"object","properties":{"label":{"type":"string","minLength":1},"helperText":{"type":"string","minLength":1},"position":{"type":"integer"},"requirement":{"type":"string","enum":["optional","required"]}},"required":["requirement"],"additionalProperties":false},"teardownTime":{"type":"object","properties":{"label":{"type":"string","minLength":1},"helperText":{"type":"string","minLength":1},"position":{"type":"integer"},"requirement":{"type":"string","enum":["optional","required"]}},"required":["requirement"],"additionalProperties":false},"teaserImage":{"type":"object","properties":{"label":{"type":"string","minLength":1},"helperText":{"type":"string","minLength":1},"position":{"type":"integer"},"requirement":{"type":"string","enum":["optional","required"]},"minWidth":{"type":"integer","minimum":1,"maximum":16383},"minHeight":{"type":"integer","minimum":1,"maximum":16383},"maxWidth":{"type":"integer","minimum":1,"maximum":16383},"maxHeight":{"type":"integer","minimum":1,"maximum":16383},"aspectRatio":{"type":"object","properties":{"width":{"type":"integer","minimum":1},"height":{"type":"integer","minimum":1}},"required":["width","height"],"additionalProperties":false}},"required":["requirement"],"additionalProperties":false}},"additionalProperties":false},"profileFieldOptions":{"type":"object","properties":{"displayName":{"type":"object","properties":{"label":{"type":"string","minLength":1},"helperText":{"type":"string","minLength":1},"position":{"type":"integer"},"minLength":{"type":"integer","minimum":1},"maxLength":{"type":"integer","minimum":1}},"additionalProperties":false},"emailAddress":{"type":"object","properties":{"label":{"type":"string","minLength":1},"helperText":{"type":"string","minLength":1},"position":{"type":"integer"},"minLength":{"type":"integer","minimum":1},"maxLength":{"type":"integer","minimum":1}},"additionalProperties":false},"avatar":{"type":"object","properties":{"label":{"type":"string","minLength":1},"helperText":{"type":"string","minLength":1},"position":{"type":"integer"},"requirement":{"type":"string","enum":["optional","required"]}},"required":["requirement"],"additionalProperties":false},"biography":{"type":"object","properties":{"label":{"type":"string","minLength":1},"helperText":{"type":"string","minLength":1},"position":{"type":"integer"},"requirement":{"type":"string","enum":["optional","required"]},"minLength":{"type":"integer","minimum":1},"maxLength":{"type":"integer","minimum":1}},"required":["requirement"],"additionalProperties":false},"availability":{"type":"object","properties":{"label":{"type":"string","minLength":1},"helperText":{"type":"string","minLength":1},"position":{"type":"integer"},"requirement":{"type":"string","enum":["optional","required"]}},"required":["requirement"],"additionalProperties":false}},"additionalProperties":false}},"required":["name","startDate","endDate","timeZone","submissionDeadline","sessionFieldOptions","profileFieldOptions"],"additionalProperties":false},"meta":{"type":"object","properties":{"version":{"type":"integer","description":"Counts writes to this edition. A write names the one it read and is refused with edition_changed if another has landed since."}},"required":["version"],"additionalProperties":false}},"required":["id","type","attributes","meta"]},"meta":{"type":"object","properties":{"sessionFieldSpecs":{"type":"object","description":"What each built-in field is: the label and helper text it falls back to, whether it can be made optional, and which kind of value it holds.","properties":{"title":{"type":"object","properties":{"label":{"type":"string"},"helperText":{"type":"string"},"forceRequired":{"type":"boolean"},"type":{"type":"string","const":"string"}},"required":["label","forceRequired","type"],"additionalProperties":false},"sessionType":{"type":"object","properties":{"label":{"type":"string"},"helperText":{"type":"string"},"forceRequired":{"type":"boolean"},"type":{"type":"string","const":"relationship"}},"required":["label","forceRequired","type"],"additionalProperties":false},"abstract":{"type":"object","properties":{"label":{"type":"string"},"helperText":{"type":"string"},"forceRequired":{"type":"boolean"},"type":{"type":"string","const":"string"}},"required":["label","forceRequired","type"],"additionalProperties":false},"description":{"type":"object","properties":{"label":{"type":"string"},"helperText":{"type":"string"},"forceRequired":{"type":"boolean"},"type":{"type":"string","const":"string"}},"required":["label","forceRequired","type"],"additionalProperties":false},"notes":{"type":"object","properties":{"label":{"type":"string"},"helperText":{"type":"string"},"forceRequired":{"type":"boolean"},"type":{"type":"string","const":"string"}},"required":["label","forceRequired","type"],"additionalProperties":false},"track":{"type":"object","properties":{"label":{"type":"string"},"helperText":{"type":"string"},"forceRequired":{"type":"boolean"},"type":{"type":"string","const":"relationship"}},"required":["label","forceRequired","type"],"additionalProperties":false},"duration":{"type":"object","properties":{"label":{"type":"string"},"helperText":{"type":"string"},"forceRequired":{"type":"boolean"},"type":{"type":"string","const":"duration"}},"required":["label","forceRequired","type"],"additionalProperties":false},"setupTime":{"type":"object","properties":{"label":{"type":"string"},"helperText":{"type":"string"},"forceRequired":{"type":"boolean"},"type":{"type":"string","const":"duration"}},"required":["label","forceRequired","type"],"additionalProperties":false},"teardownTime":{"type":"object","properties":{"label":{"type":"string"},"helperText":{"type":"string"},"forceRequired":{"type":"boolean"},"type":{"type":"string","const":"duration"}},"required":["label","forceRequired","type"],"additionalProperties":false},"teaserImage":{"type":"object","properties":{"label":{"type":"string"},"helperText":{"type":"string"},"forceRequired":{"type":"boolean"},"type":{"type":"string","const":"file"},"imageDefaults":{"type":"object","description":"Default constraint values for the field.","properties":{"minWidth":{"type":"integer","minimum":1,"maximum":16383},"minHeight":{"type":"integer","minimum":1,"maximum":16383},"maxWidth":{"type":"integer","minimum":1,"maximum":16383},"maxHeight":{"type":"integer","minimum":1,"maximum":16383}},"required":["minWidth","minHeight","maxWidth","maxHeight"],"additionalProperties":false}},"required":["label","forceRequired","type","imageDefaults"],"additionalProperties":false}},"additionalProperties":false},"profileFieldSpecs":{"type":"object","description":"What each built-in field is: the label and helper text it falls back to, whether it can be made optional, and which kind of value it holds.","properties":{"displayName":{"type":"object","properties":{"label":{"type":"string"},"helperText":{"type":"string"},"forceRequired":{"type":"boolean"},"type":{"type":"string","const":"string"}},"required":["label","forceRequired","type"],"additionalProperties":false},"emailAddress":{"type":"object","properties":{"label":{"type":"string"},"helperText":{"type":"string"},"forceRequired":{"type":"boolean"},"type":{"type":"string","const":"string"}},"required":["label","forceRequired","type"],"additionalProperties":false},"avatar":{"type":"object","properties":{"label":{"type":"string"},"helperText":{"type":"string"},"forceRequired":{"type":"boolean"},"type":{"type":"string","const":"file"},"imageConstraints":{"type":"object","description":"Fixed constraint values for the field, not configurable per edition.","properties":{"minWidth":{"type":"integer","minimum":1,"maximum":16383},"minHeight":{"type":"integer","minimum":1,"maximum":16383},"maxWidth":{"type":"integer","minimum":1,"maximum":16383},"maxHeight":{"type":"integer","minimum":1,"maximum":16383},"aspectRatio":{"type":["object","null"],"properties":{"width":{"type":"integer","minimum":1},"height":{"type":"integer","minimum":1}},"required":["width","height"],"additionalProperties":false}},"required":["minWidth","minHeight","maxWidth","maxHeight","aspectRatio"],"additionalProperties":false}},"required":["label","forceRequired","type","imageConstraints"],"additionalProperties":false},"biography":{"type":"object","properties":{"label":{"type":"string"},"helperText":{"type":"string"},"forceRequired":{"type":"boolean"},"type":{"type":"string","const":"string"}},"required":["label","forceRequired","type"],"additionalProperties":false},"availability":{"type":"object","properties":{"label":{"type":"string"},"helperText":{"type":"string"},"forceRequired":{"type":"boolean"},"type":{"type":"string","const":"availability"}},"required":["label","forceRequired","type"],"additionalProperties":false}},"additionalProperties":false},"maxFileSize":{"type":"integer","description":"Bytes any single upload may reach, enforced by the store as a condition of the presigned post. Served here so a client can reject a file before asking for one."},"fileContentTypes":{"type":"array","items":{"type":"string"},"description":"Content types a signed post will be issued for. Served so a client can narrow its file picker to what an upload can succeed with."},"imageContentTypes":{"type":"array","items":{"type":"string"},"description":"The narrower set an image slot accepts on attach, a subset of fileContentTypes."}},"required":["sessionFieldSpecs","profileFieldSpecs","maxFileSize","fileContentTypes","imageContentTypes"],"additionalProperties":false}},"required":["data","meta"]}}}},"404":{"description":"Edition not found","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"errors":{"type":"array","minItems":1,"items":{"type":"object","properties":{"status":{"type":"string","description":"HTTP status code"},"code":{"type":"string"},"title":{"type":"string"},"detail":{"type":"string"},"source":{"type":"object","properties":{"pointer":{"type":"string"},"parameter":{"type":"string"},"header":{"type":"string"}}}},"required":["status"]}}},"required":["errors"]}}}}}},"patch":{"tags":["Editions"],"summary":"Update an edition","description":"Updates an edition. A change of dates or timezone moves the slots of the draft schedule and the availability given for the edition by the same number of days, each keeping the local time it was entered at. How far they travel comes from meta.startDateBecomes, the day the edition's current first day turns into, which is required whenever the dates change and the edition has anything scheduled or any availability. A change of timezone alone moves no days and needs none. Slots that no longer fit afterwards are deleted, leaving their sessions unscheduled, and availability is trimmed back to the edition or dropped; meta.settled on the response says what went. Published schedules keep the times they were published with. Requires the manager role.","operationId":"updateEdition","parameters":[{"name":"editionId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":true,"content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"type":{"type":"string","const":"edition"},"attributes":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":200},"startDate":{"type":"string","format":"date","examples":["2020-01-01"]},"endDate":{"type":"string","format":"date","examples":["2020-01-01"]},"timeZone":{"type":"string"},"submissionDeadline":{"anyOf":[{"type":"string","format":"date-time","examples":["2020-01-01T14:00:00Z"]},{"type":"null"}]},"sessionFieldOptions":{"type":"object","properties":{"title":{"type":"object","properties":{"label":{"type":"string","minLength":1,"maxLength":200},"helperText":{"type":"string","minLength":1,"maxLength":5000},"position":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"minLength":{"type":"integer","minimum":1,"maximum":9007199254740991},"maxLength":{"type":"integer","minimum":1,"maximum":9007199254740991}},"additionalProperties":false},"sessionType":{"type":"object","properties":{"label":{"type":"string","minLength":1,"maxLength":200},"helperText":{"type":"string","minLength":1,"maxLength":5000},"position":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"additionalProperties":false},"abstract":{"type":"object","properties":{"label":{"type":"string","minLength":1,"maxLength":200},"helperText":{"type":"string","minLength":1,"maxLength":5000},"position":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"requirement":{"type":"string","enum":["optional","required"]},"minLength":{"type":"integer","minimum":1,"maximum":9007199254740991},"maxLength":{"type":"integer","minimum":1,"maximum":9007199254740991}},"required":["requirement"],"additionalProperties":false},"description":{"type":"object","properties":{"label":{"type":"string","minLength":1,"maxLength":200},"helperText":{"type":"string","minLength":1,"maxLength":5000},"position":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"requirement":{"type":"string","enum":["optional","required"]},"minLength":{"type":"integer","minimum":1,"maximum":9007199254740991},"maxLength":{"type":"integer","minimum":1,"maximum":9007199254740991}},"required":["requirement"],"additionalProperties":false},"notes":{"type":"object","properties":{"label":{"type":"string","minLength":1,"maxLength":200},"helperText":{"type":"string","minLength":1,"maxLength":5000},"position":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"requirement":{"type":"string","enum":["optional","required"]},"minLength":{"type":"integer","minimum":1,"maximum":9007199254740991},"maxLength":{"type":"integer","minimum":1,"maximum":9007199254740991}},"required":["requirement"],"additionalProperties":false},"track":{"type":"object","properties":{"label":{"type":"string","minLength":1,"maxLength":200},"helperText":{"type":"string","minLength":1,"maxLength":5000},"position":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"requirement":{"type":"string","enum":["optional","required"]}},"required":["requirement"],"additionalProperties":false},"duration":{"type":"object","properties":{"label":{"type":"string","minLength":1,"maxLength":200},"helperText":{"type":"string","minLength":1,"maxLength":5000},"position":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"requirement":{"type":"string","enum":["optional","required"]}},"required":["requirement"],"additionalProperties":false},"setupTime":{"type":"object","properties":{"label":{"type":"string","minLength":1,"maxLength":200},"helperText":{"type":"string","minLength":1,"maxLength":5000},"position":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"requirement":{"type":"string","enum":["optional","required"]}},"required":["requirement"],"additionalProperties":false},"teardownTime":{"type":"object","properties":{"label":{"type":"string","minLength":1,"maxLength":200},"helperText":{"type":"string","minLength":1,"maxLength":5000},"position":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"requirement":{"type":"string","enum":["optional","required"]}},"required":["requirement"],"additionalProperties":false},"teaserImage":{"type":"object","properties":{"label":{"type":"string","minLength":1,"maxLength":200},"helperText":{"type":"string","minLength":1,"maxLength":5000},"position":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"requirement":{"type":"string","enum":["optional","required"]},"minWidth":{"type":"integer","minimum":1,"maximum":16383},"minHeight":{"type":"integer","minimum":1,"maximum":16383},"maxWidth":{"type":"integer","minimum":1,"maximum":16383},"maxHeight":{"type":"integer","minimum":1,"maximum":16383},"aspectRatio":{"type":"object","properties":{"width":{"type":"integer","minimum":1,"maximum":9007199254740991},"height":{"type":"integer","minimum":1,"maximum":9007199254740991}},"required":["width","height"],"additionalProperties":false}},"required":["requirement"],"additionalProperties":false}},"additionalProperties":false},"profileFieldOptions":{"type":"object","properties":{"displayName":{"type":"object","properties":{"label":{"type":"string","minLength":1,"maxLength":200},"helperText":{"type":"string","minLength":1,"maxLength":5000},"position":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"minLength":{"type":"integer","minimum":1,"maximum":9007199254740991},"maxLength":{"type":"integer","minimum":1,"maximum":9007199254740991}},"additionalProperties":false},"emailAddress":{"type":"object","properties":{"label":{"type":"string","minLength":1,"maxLength":200},"helperText":{"type":"string","minLength":1,"maxLength":5000},"position":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"minLength":{"type":"integer","minimum":1,"maximum":9007199254740991},"maxLength":{"type":"integer","minimum":1,"maximum":9007199254740991}},"additionalProperties":false},"avatar":{"type":"object","properties":{"label":{"type":"string","minLength":1,"maxLength":200},"helperText":{"type":"string","minLength":1,"maxLength":5000},"position":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"requirement":{"type":"string","enum":["optional","required"]}},"required":["requirement"],"additionalProperties":false},"biography":{"type":"object","properties":{"label":{"type":"string","minLength":1,"maxLength":200},"helperText":{"type":"string","minLength":1,"maxLength":5000},"position":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"requirement":{"type":"string","enum":["optional","required"]},"minLength":{"type":"integer","minimum":1,"maximum":9007199254740991},"maxLength":{"type":"integer","minimum":1,"maximum":9007199254740991}},"required":["requirement"],"additionalProperties":false},"availability":{"type":"object","properties":{"label":{"type":"string","minLength":1,"maxLength":200},"helperText":{"type":"string","minLength":1,"maxLength":5000},"position":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"requirement":{"type":"string","enum":["optional","required"]}},"required":["requirement"],"additionalProperties":false}},"additionalProperties":false}},"additionalProperties":false},"meta":{"type":"object","properties":{"version":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"startDateBecomes":{"type":"string","format":"date","examples":["2020-01-01"]}},"required":["version"],"additionalProperties":false}},"required":["type","attributes","meta"],"additionalProperties":false}},"required":["data"],"additionalProperties":false}}}},"responses":{"200":{"description":"The updated edition","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"edition"},"attributes":{"type":"object","properties":{"name":{"type":"string","minLength":1},"startDate":{"type":"string","format":"date"},"endDate":{"type":"string","format":"date"},"timeZone":{"type":"string"},"submissionDeadline":{"type":["string","null"],"format":"date-time"},"sessionFieldOptions":{"type":"object","properties":{"title":{"type":"object","properties":{"label":{"type":"string","minLength":1},"helperText":{"type":"string","minLength":1},"position":{"type":"integer"},"minLength":{"type":"integer","minimum":1},"maxLength":{"type":"integer","minimum":1}},"additionalProperties":false},"sessionType":{"type":"object","properties":{"label":{"type":"string","minLength":1},"helperText":{"type":"string","minLength":1},"position":{"type":"integer"}},"additionalProperties":false},"abstract":{"type":"object","properties":{"label":{"type":"string","minLength":1},"helperText":{"type":"string","minLength":1},"position":{"type":"integer"},"requirement":{"type":"string","enum":["optional","required"]},"minLength":{"type":"integer","minimum":1},"maxLength":{"type":"integer","minimum":1}},"required":["requirement"],"additionalProperties":false},"description":{"type":"object","properties":{"label":{"type":"string","minLength":1},"helperText":{"type":"string","minLength":1},"position":{"type":"integer"},"requirement":{"type":"string","enum":["optional","required"]},"minLength":{"type":"integer","minimum":1},"maxLength":{"type":"integer","minimum":1}},"required":["requirement"],"additionalProperties":false},"notes":{"type":"object","properties":{"label":{"type":"string","minLength":1},"helperText":{"type":"string","minLength":1},"position":{"type":"integer"},"requirement":{"type":"string","enum":["optional","required"]},"minLength":{"type":"integer","minimum":1},"maxLength":{"type":"integer","minimum":1}},"required":["requirement"],"additionalProperties":false},"track":{"type":"object","properties":{"label":{"type":"string","minLength":1},"helperText":{"type":"string","minLength":1},"position":{"type":"integer"},"requirement":{"type":"string","enum":["optional","required"]}},"required":["requirement"],"additionalProperties":false},"duration":{"type":"object","properties":{"label":{"type":"string","minLength":1},"helperText":{"type":"string","minLength":1},"position":{"type":"integer"},"requirement":{"type":"string","enum":["optional","required"]}},"required":["requirement"],"additionalProperties":false},"setupTime":{"type":"object","properties":{"label":{"type":"string","minLength":1},"helperText":{"type":"string","minLength":1},"position":{"type":"integer"},"requirement":{"type":"string","enum":["optional","required"]}},"required":["requirement"],"additionalProperties":false},"teardownTime":{"type":"object","properties":{"label":{"type":"string","minLength":1},"helperText":{"type":"string","minLength":1},"position":{"type":"integer"},"requirement":{"type":"string","enum":["optional","required"]}},"required":["requirement"],"additionalProperties":false},"teaserImage":{"type":"object","properties":{"label":{"type":"string","minLength":1},"helperText":{"type":"string","minLength":1},"position":{"type":"integer"},"requirement":{"type":"string","enum":["optional","required"]},"minWidth":{"type":"integer","minimum":1,"maximum":16383},"minHeight":{"type":"integer","minimum":1,"maximum":16383},"maxWidth":{"type":"integer","minimum":1,"maximum":16383},"maxHeight":{"type":"integer","minimum":1,"maximum":16383},"aspectRatio":{"type":"object","properties":{"width":{"type":"integer","minimum":1},"height":{"type":"integer","minimum":1}},"required":["width","height"],"additionalProperties":false}},"required":["requirement"],"additionalProperties":false}},"additionalProperties":false},"profileFieldOptions":{"type":"object","properties":{"displayName":{"type":"object","properties":{"label":{"type":"string","minLength":1},"helperText":{"type":"string","minLength":1},"position":{"type":"integer"},"minLength":{"type":"integer","minimum":1},"maxLength":{"type":"integer","minimum":1}},"additionalProperties":false},"emailAddress":{"type":"object","properties":{"label":{"type":"string","minLength":1},"helperText":{"type":"string","minLength":1},"position":{"type":"integer"},"minLength":{"type":"integer","minimum":1},"maxLength":{"type":"integer","minimum":1}},"additionalProperties":false},"avatar":{"type":"object","properties":{"label":{"type":"string","minLength":1},"helperText":{"type":"string","minLength":1},"position":{"type":"integer"},"requirement":{"type":"string","enum":["optional","required"]}},"required":["requirement"],"additionalProperties":false},"biography":{"type":"object","properties":{"label":{"type":"string","minLength":1},"helperText":{"type":"string","minLength":1},"position":{"type":"integer"},"requirement":{"type":"string","enum":["optional","required"]},"minLength":{"type":"integer","minimum":1},"maxLength":{"type":"integer","minimum":1}},"required":["requirement"],"additionalProperties":false},"availability":{"type":"object","properties":{"label":{"type":"string","minLength":1},"helperText":{"type":"string","minLength":1},"position":{"type":"integer"},"requirement":{"type":"string","enum":["optional","required"]}},"required":["requirement"],"additionalProperties":false}},"additionalProperties":false}},"required":["name","startDate","endDate","timeZone","submissionDeadline","sessionFieldOptions","profileFieldOptions"],"additionalProperties":false},"meta":{"type":"object","properties":{"version":{"type":"integer","description":"Counts writes to this edition. A write names the one it read and is refused with edition_changed if another has landed since."}},"required":["version"],"additionalProperties":false}},"required":["id","type","attributes","meta"]},"meta":{"type":"object","properties":{"sessionFieldSpecs":{"type":"object","description":"What each built-in field is: the label and helper text it falls back to, whether it can be made optional, and which kind of value it holds.","properties":{"title":{"type":"object","properties":{"label":{"type":"string"},"helperText":{"type":"string"},"forceRequired":{"type":"boolean"},"type":{"type":"string","const":"string"}},"required":["label","forceRequired","type"],"additionalProperties":false},"sessionType":{"type":"object","properties":{"label":{"type":"string"},"helperText":{"type":"string"},"forceRequired":{"type":"boolean"},"type":{"type":"string","const":"relationship"}},"required":["label","forceRequired","type"],"additionalProperties":false},"abstract":{"type":"object","properties":{"label":{"type":"string"},"helperText":{"type":"string"},"forceRequired":{"type":"boolean"},"type":{"type":"string","const":"string"}},"required":["label","forceRequired","type"],"additionalProperties":false},"description":{"type":"object","properties":{"label":{"type":"string"},"helperText":{"type":"string"},"forceRequired":{"type":"boolean"},"type":{"type":"string","const":"string"}},"required":["label","forceRequired","type"],"additionalProperties":false},"notes":{"type":"object","properties":{"label":{"type":"string"},"helperText":{"type":"string"},"forceRequired":{"type":"boolean"},"type":{"type":"string","const":"string"}},"required":["label","forceRequired","type"],"additionalProperties":false},"track":{"type":"object","properties":{"label":{"type":"string"},"helperText":{"type":"string"},"forceRequired":{"type":"boolean"},"type":{"type":"string","const":"relationship"}},"required":["label","forceRequired","type"],"additionalProperties":false},"duration":{"type":"object","properties":{"label":{"type":"string"},"helperText":{"type":"string"},"forceRequired":{"type":"boolean"},"type":{"type":"string","const":"duration"}},"required":["label","forceRequired","type"],"additionalProperties":false},"setupTime":{"type":"object","properties":{"label":{"type":"string"},"helperText":{"type":"string"},"forceRequired":{"type":"boolean"},"type":{"type":"string","const":"duration"}},"required":["label","forceRequired","type"],"additionalProperties":false},"teardownTime":{"type":"object","properties":{"label":{"type":"string"},"helperText":{"type":"string"},"forceRequired":{"type":"boolean"},"type":{"type":"string","const":"duration"}},"required":["label","forceRequired","type"],"additionalProperties":false},"teaserImage":{"type":"object","properties":{"label":{"type":"string"},"helperText":{"type":"string"},"forceRequired":{"type":"boolean"},"type":{"type":"string","const":"file"},"imageDefaults":{"type":"object","description":"Default constraint values for the field.","properties":{"minWidth":{"type":"integer","minimum":1,"maximum":16383},"minHeight":{"type":"integer","minimum":1,"maximum":16383},"maxWidth":{"type":"integer","minimum":1,"maximum":16383},"maxHeight":{"type":"integer","minimum":1,"maximum":16383}},"required":["minWidth","minHeight","maxWidth","maxHeight"],"additionalProperties":false}},"required":["label","forceRequired","type","imageDefaults"],"additionalProperties":false}},"additionalProperties":false},"profileFieldSpecs":{"type":"object","description":"What each built-in field is: the label and helper text it falls back to, whether it can be made optional, and which kind of value it holds.","properties":{"displayName":{"type":"object","properties":{"label":{"type":"string"},"helperText":{"type":"string"},"forceRequired":{"type":"boolean"},"type":{"type":"string","const":"string"}},"required":["label","forceRequired","type"],"additionalProperties":false},"emailAddress":{"type":"object","properties":{"label":{"type":"string"},"helperText":{"type":"string"},"forceRequired":{"type":"boolean"},"type":{"type":"string","const":"string"}},"required":["label","forceRequired","type"],"additionalProperties":false},"avatar":{"type":"object","properties":{"label":{"type":"string"},"helperText":{"type":"string"},"forceRequired":{"type":"boolean"},"type":{"type":"string","const":"file"},"imageConstraints":{"type":"object","description":"Fixed constraint values for the field, not configurable per edition.","properties":{"minWidth":{"type":"integer","minimum":1,"maximum":16383},"minHeight":{"type":"integer","minimum":1,"maximum":16383},"maxWidth":{"type":"integer","minimum":1,"maximum":16383},"maxHeight":{"type":"integer","minimum":1,"maximum":16383},"aspectRatio":{"type":["object","null"],"properties":{"width":{"type":"integer","minimum":1},"height":{"type":"integer","minimum":1}},"required":["width","height"],"additionalProperties":false}},"required":["minWidth","minHeight","maxWidth","maxHeight","aspectRatio"],"additionalProperties":false}},"required":["label","forceRequired","type","imageConstraints"],"additionalProperties":false},"biography":{"type":"object","properties":{"label":{"type":"string"},"helperText":{"type":"string"},"forceRequired":{"type":"boolean"},"type":{"type":"string","const":"string"}},"required":["label","forceRequired","type"],"additionalProperties":false},"availability":{"type":"object","properties":{"label":{"type":"string"},"helperText":{"type":"string"},"forceRequired":{"type":"boolean"},"type":{"type":"string","const":"availability"}},"required":["label","forceRequired","type"],"additionalProperties":false}},"additionalProperties":false},"maxFileSize":{"type":"integer","description":"Bytes any single upload may reach, enforced by the store as a condition of the presigned post. Served here so a client can reject a file before asking for one."},"fileContentTypes":{"type":"array","items":{"type":"string"},"description":"Content types a signed post will be issued for. Served so a client can narrow its file picker to what an upload can succeed with."},"imageContentTypes":{"type":"array","items":{"type":"string"},"description":"The narrower set an image slot accepts on attach, a subset of fileContentTypes."},"settled":{"type":"object","description":"What settling the edition's new dates removed. Absent only when neither the dates nor the zone changed; a change that turns out to move nothing still reports, with everything at zero.","properties":{"sessions":{"type":"array","description":"Sessions that lost at least one slot, each said once. The sessions themselves are untouched: a slot that cannot follow the edition is removed and its session waits to be scheduled again. slotsLeft of zero means it is nowhere in the draft, though a publication may still carry it.","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"title":{"type":"string"},"slotsRemoved":{"type":"integer","minimum":1},"slotsLeft":{"type":"integer","minimum":0}},"required":["id","title","slotsRemoved","slotsLeft"],"additionalProperties":false}},"trimmedAvailability":{"type":"integer","minimum":0,"description":"Intervals shortened rather than dropped whole, either by the edition no longer reaching them or by an edge landing in an hour that does not exist on the day it moved to."},"droppedAvailability":{"type":"integer","minimum":0,"description":"Intervals removed, having nothing left inside the edition."}},"required":["sessions","trimmedAvailability","droppedAvailability"],"additionalProperties":false}},"required":["sessionFieldSpecs","profileFieldSpecs","maxFileSize","fileContentTypes","imageContentTypes"],"additionalProperties":false}},"required":["data","meta"]}}}},"403":{"description":"Manager role required","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"errors":{"type":"array","minItems":1,"items":{"type":"object","properties":{"status":{"type":"string","description":"HTTP status code"},"code":{"type":"string"},"title":{"type":"string"},"detail":{"type":"string"},"source":{"type":"object","properties":{"pointer":{"type":"string"},"parameter":{"type":"string"},"header":{"type":"string"}}}},"required":["status"]}}},"required":["errors"]}}}},"404":{"description":"Edition not found","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"errors":{"type":"array","minItems":1,"items":{"type":"object","properties":{"status":{"type":"string","description":"HTTP status code"},"code":{"type":"string"},"title":{"type":"string"},"detail":{"type":"string"},"source":{"type":"object","properties":{"pointer":{"type":"string"},"parameter":{"type":"string"},"header":{"type":"string"}}}},"required":["status"]}}},"required":["errors"]}}}},"409":{"description":"Requiring a track while no track is offered to speakers (nothing_to_pick). The dates changed with something scheduled or some availability given, and meta.startDateBecomes was absent or fell outside the range that may be chosen (start_date_required). That range reaches back before the new first day, since leaving the schedule where it is means the old first day keeps its date. The error meta carries both it and the current first day. Also when meta.version names an older write than the edition has taken (edition_changed).","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"errors":{"type":"array","minItems":1,"items":{"type":"object","properties":{"status":{"type":"string","description":"HTTP status code"},"code":{"type":"string"},"title":{"type":"string"},"detail":{"type":"string"},"source":{"type":"object","properties":{"pointer":{"type":"string"},"parameter":{"type":"string"},"header":{"type":"string"}}}},"required":["status"]}}},"required":["errors"]}}}},"422":{"description":"Invalid request body","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"errors":{"type":"array","minItems":1,"items":{"type":"object","properties":{"status":{"type":"string","description":"HTTP status code"},"code":{"type":"string"},"title":{"type":"string"},"detail":{"type":"string"},"source":{"type":"object","properties":{"pointer":{"type":"string"},"parameter":{"type":"string"},"header":{"type":"string"}}}},"required":["status"]}}},"required":["errors"]}}}}}},"delete":{"tags":["Editions"],"summary":"Delete an edition","description":"Deletes an edition and everything below it: sessions, schedules and their slots, locations, tracks, session types, custom fields and responses. Requires the manager role.","operationId":"deleteEdition","parameters":[{"name":"editionId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"204":{"description":"No content"},"403":{"description":"Manager role required","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"errors":{"type":"array","minItems":1,"items":{"type":"object","properties":{"status":{"type":"string","description":"HTTP status code"},"code":{"type":"string"},"title":{"type":"string"},"detail":{"type":"string"},"source":{"type":"object","properties":{"pointer":{"type":"string"},"parameter":{"type":"string"},"header":{"type":"string"}}}},"required":["status"]}}},"required":["errors"]}}}},"404":{"description":"Edition not found","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"errors":{"type":"array","minItems":1,"items":{"type":"object","properties":{"status":{"type":"string","description":"HTTP status code"},"code":{"type":"string"},"title":{"type":"string"},"detail":{"type":"string"},"source":{"type":"object","properties":{"pointer":{"type":"string"},"parameter":{"type":"string"},"header":{"type":"string"}}}},"required":["status"]}}},"required":["errors"]}}}}}}},"/editions/{editionId}/confirm-reminders":{"post":{"tags":["Editions"],"summary":"Send confirmation reminders","description":"Mails a confirmation reminder to the hosts of every accepted session of the edition that is outside the reminder cooldown. Requires the manager role.","operationId":"sendConfirmReminders","parameters":[{"name":"editionId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":true,"content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"type":{"type":"string","const":"confirm_reminder_dispatch"}},"required":["type"],"additionalProperties":false}},"required":["data"],"additionalProperties":false}}}},"responses":{"200":{"description":"Reminder dispatch counts","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"meta":{"type":"object","properties":{"remindedSessions":{"type":"integer","minimum":0,"description":"Accepted sessions a reminder went out for"},"skippedSessions":{"type":"integer","minimum":0,"description":"Accepted sessions left alone, either within the reminder cooldown or without a host"}},"required":["remindedSessions","skippedSessions"]}},"required":["meta"]}}}},"403":{"description":"Manager role required","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"errors":{"type":"array","minItems":1,"items":{"type":"object","properties":{"status":{"type":"string","description":"HTTP status code"},"code":{"type":"string"},"title":{"type":"string"},"detail":{"type":"string"},"source":{"type":"object","properties":{"pointer":{"type":"string"},"parameter":{"type":"string"},"header":{"type":"string"}}}},"required":["status"]}}},"required":["errors"]}}}},"404":{"description":"Edition not found","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"errors":{"type":"array","minItems":1,"items":{"type":"object","properties":{"status":{"type":"string","description":"HTTP status code"},"code":{"type":"string"},"title":{"type":"string"},"detail":{"type":"string"},"source":{"type":"object","properties":{"pointer":{"type":"string"},"parameter":{"type":"string"},"header":{"type":"string"}}}},"required":["status"]}}},"required":["errors"]}}}},"422":{"description":"Invalid request body","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"errors":{"type":"array","minItems":1,"items":{"type":"object","properties":{"status":{"type":"string","description":"HTTP status code"},"code":{"type":"string"},"title":{"type":"string"},"detail":{"type":"string"},"source":{"type":"object","properties":{"pointer":{"type":"string"},"parameter":{"type":"string"},"header":{"type":"string"}}}},"required":["status"]}}},"required":["errors"]}}}}}}},"/editions/{editionId}/relationships/locations":{"patch":{"tags":["Locations"],"summary":"Reorder locations","description":"Sets the order of the locations of an edition, which is the order they are drawn as columns on a schedule. The list must name every location of the edition exactly once; positions are then assigned in the order given. Requires the manager role.","operationId":"reorderLocations","parameters":[{"name":"editionId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":true,"content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"type":{"const":"location"},"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"required":["id","type"],"additionalProperties":false}}},"required":["data"],"additionalProperties":false}}}},"responses":{"204":{"description":"No content"},"403":{"description":"Manager role required","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"errors":{"type":"array","minItems":1,"items":{"type":"object","properties":{"status":{"type":"string","description":"HTTP status code"},"code":{"type":"string"},"title":{"type":"string"},"detail":{"type":"string"},"source":{"type":"object","properties":{"pointer":{"type":"string"},"parameter":{"type":"string"},"header":{"type":"string"}}}},"required":["status"]}}},"required":["errors"]}}}},"404":{"description":"Edition not found","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"errors":{"type":"array","minItems":1,"items":{"type":"object","properties":{"status":{"type":"string","description":"HTTP status code"},"code":{"type":"string"},"title":{"type":"string"},"detail":{"type":"string"},"source":{"type":"object","properties":{"pointer":{"type":"string"},"parameter":{"type":"string"},"header":{"type":"string"}}}},"required":["status"]}}},"required":["errors"]}}}},"422":{"description":"The list does not match the edition's locations exactly (incomplete_order); the current ids are in the error meta","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"errors":{"type":"array","minItems":1,"items":{"type":"object","properties":{"status":{"type":"string","description":"HTTP status code"},"code":{"type":"string"},"title":{"type":"string"},"detail":{"type":"string"},"source":{"type":"object","properties":{"pointer":{"type":"string"},"parameter":{"type":"string"},"header":{"type":"string"}}}},"required":["status"]}}},"required":["errors"]}}}}}}},"/editions/{editionId}/locations":{"get":{"tags":["Locations"],"summary":"List locations","description":"Lists all locations of an edition. Open to any authenticated subject, including integration tokens and subjects without a user record. Availability is served to managers alone, and dropped from the include and the field set for everyone else.","operationId":"listLocations","parameters":[{"name":"editionId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"include","in":"query","schema":{"type":"array","items":{"type":"string","enum":["availabilities"]}}},{"name":"fields","in":"query","style":"deepObject","schema":{"type":"object","properties":{"location":{"type":"string","description":"Comma-separated list of fields to include for this type. Leave empty to omit all fields. Allowed fields are: `name`, `externalKey`, `position`, `venue`, `availabilities`"},"location_availability":{"type":"string","description":"Comma-separated list of fields to include for this type. Leave empty to omit all fields. Allowed fields are: `startsAt`, `endsAt`"}},"additionalProperties":false}}],"responses":{"200":{"description":"Locations of the edition","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"location"},"attributes":{"type":"object","properties":{"name":{"type":"string","minLength":1},"position":{"description":"Which column this room is, on a grid that reads left to right","type":"integer","minimum":0},"externalKey":{"type":["string","null"],"minLength":1}},"required":["name","externalKey","position"],"additionalProperties":false},"relationships":{"type":"object","properties":{"venue":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"venue"}},"required":["id","type"]}},"required":["data"]},"availabilities":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"location_availability"}},"required":["id","type"]}}},"required":["data"]}},"required":["venue"]}},"required":["id","type","attributes","relationships"]}},"included":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"location_availability"},"attributes":{"type":"object","description":"One stretch of time the location can be used for. A location with none of these is unconstrained and counts as usable throughout the edition; the first one added is what narrows it to the times given.","properties":{"startsAt":{"type":"string","format":"date-time"},"endsAt":{"type":"string","format":"date-time"}},"required":["startsAt","endsAt"],"additionalProperties":false}},"required":["id","type","attributes"]}]}}},"required":["data"]}}}},"404":{"description":"Edition not found","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"errors":{"type":"array","minItems":1,"items":{"type":"object","properties":{"status":{"type":"string","description":"HTTP status code"},"code":{"type":"string"},"title":{"type":"string"},"detail":{"type":"string"},"source":{"type":"object","properties":{"pointer":{"type":"string"},"parameter":{"type":"string"},"header":{"type":"string"}}}},"required":["status"]}}},"required":["errors"]}}}}}},"post":{"tags":["Locations"],"summary":"Create a location","description":"Creates a location in an edition. The availabilities given become the whole of what the location has, and overlapping or touching ones are merged. Requires the manager role.","operationId":"createLocation","parameters":[{"name":"editionId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":true,"content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"type":{"type":"string","const":"location"},"attributes":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":200},"externalKey":{"anyOf":[{"type":"string","minLength":1,"maxLength":200},{"type":"null"}]}},"required":["name","externalKey"],"additionalProperties":false},"relationships":{"type":"object","properties":{"venue":{"type":"object","properties":{"data":{"type":"object","properties":{"type":{"type":"string","const":"venue"},"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"required":["type","id"],"additionalProperties":false}},"required":["data"],"additionalProperties":false},"availabilities":{"type":"object","properties":{"data":{"maxItems":500,"type":"array","items":{"type":"object","properties":{"type":{"type":"string","const":"location_availability"},"lid":{"type":"string"}},"required":["type","lid"],"additionalProperties":false}}},"required":["data"],"additionalProperties":false}},"required":["venue","availabilities"],"additionalProperties":false}},"required":["type","attributes","relationships"],"additionalProperties":false},"included":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","const":"location_availability"},"lid":{"type":"string"},"attributes":{"type":"object","properties":{"startsAt":{"type":"string","format":"date-time","examples":["2020-01-01T14:00:00Z"]},"endsAt":{"type":"string","format":"date-time","examples":["2020-01-01T14:00:00Z"]}},"required":["startsAt","endsAt"],"additionalProperties":false}},"required":["type","lid","attributes"],"additionalProperties":false}]}}},"required":["data"],"additionalProperties":false}}}},"responses":{"201":{"description":"The created location","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"location"},"attributes":{"type":"object","properties":{"name":{"type":"string","minLength":1},"position":{"description":"Which column this room is, on a grid that reads left to right","type":"integer","minimum":0},"externalKey":{"type":["string","null"],"minLength":1}},"required":["name","externalKey","position"],"additionalProperties":false},"relationships":{"type":"object","properties":{"venue":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"venue"}},"required":["id","type"]}},"required":["data"]},"availabilities":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"location_availability"}},"required":["id","type"]}}},"required":["data"]}},"required":["venue"]}},"required":["id","type","attributes","relationships"]},"included":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"location_availability"},"attributes":{"type":"object","description":"One stretch of time the location can be used for. A location with none of these is unconstrained and counts as usable throughout the edition; the first one added is what narrows it to the times given.","properties":{"startsAt":{"type":"string","format":"date-time"},"endsAt":{"type":"string","format":"date-time"}},"required":["startsAt","endsAt"],"additionalProperties":false}},"required":["id","type","attributes"]}]}}},"required":["data"]}}}},"403":{"description":"Manager role required","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"errors":{"type":"array","minItems":1,"items":{"type":"object","properties":{"status":{"type":"string","description":"HTTP status code"},"code":{"type":"string"},"title":{"type":"string"},"detail":{"type":"string"},"source":{"type":"object","properties":{"pointer":{"type":"string"},"parameter":{"type":"string"},"header":{"type":"string"}}}},"required":["status"]}}},"required":["errors"]}}}},"404":{"description":"Edition or venue not found","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"errors":{"type":"array","minItems":1,"items":{"type":"object","properties":{"status":{"type":"string","description":"HTTP status code"},"code":{"type":"string"},"title":{"type":"string"},"detail":{"type":"string"},"source":{"type":"object","properties":{"pointer":{"type":"string"},"parameter":{"type":"string"},"header":{"type":"string"}}}},"required":["status"]}}},"required":["errors"]}}}},"409":{"description":"Another location in this edition already uses this external key (external_key_taken)","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"errors":{"type":"array","minItems":1,"items":{"type":"object","properties":{"status":{"type":"string","description":"HTTP status code"},"code":{"type":"string"},"title":{"type":"string"},"detail":{"type":"string"},"source":{"type":"object","properties":{"pointer":{"type":"string"},"parameter":{"type":"string"},"header":{"type":"string"}}}},"required":["status"]}}},"required":["errors"]}}}},"422":{"description":"Invalid request body, an availability ending before it starts (reversed_interval), one reaching outside the days of the edition (outside_edition), or one whose times carry anything finer than a minute (sub_minute_interval)","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"errors":{"type":"array","minItems":1,"items":{"type":"object","properties":{"status":{"type":"string","description":"HTTP status code"},"code":{"type":"string"},"title":{"type":"string"},"detail":{"type":"string"},"source":{"type":"object","properties":{"pointer":{"type":"string"},"parameter":{"type":"string"},"header":{"type":"string"}}}},"required":["status"]}}},"required":["errors"]}}}}}}},"/editions/{editionId}/locations/{locationId}":{"get":{"tags":["Locations"],"summary":"Show a location","description":"Retrieves a single location of an edition. Open to any authenticated subject, including integration tokens and subjects without a user record. Availability is served to managers alone, and dropped from the include and the field set for everyone else.","operationId":"showLocation","parameters":[{"name":"editionId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"locationId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"include","in":"query","schema":{"type":"array","items":{"type":"string","enum":["availabilities"]}}},{"name":"fields","in":"query","style":"deepObject","schema":{"type":"object","properties":{"location":{"type":"string","description":"Comma-separated list of fields to include for this type. Leave empty to omit all fields. Allowed fields are: `name`, `externalKey`, `position`, `venue`, `availabilities`"},"location_availability":{"type":"string","description":"Comma-separated list of fields to include for this type. Leave empty to omit all fields. Allowed fields are: `startsAt`, `endsAt`"}},"additionalProperties":false}}],"responses":{"200":{"description":"The location","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"location"},"attributes":{"type":"object","properties":{"name":{"type":"string","minLength":1},"position":{"description":"Which column this room is, on a grid that reads left to right","type":"integer","minimum":0},"externalKey":{"type":["string","null"],"minLength":1}},"required":["name","externalKey","position"],"additionalProperties":false},"relationships":{"type":"object","properties":{"venue":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"venue"}},"required":["id","type"]}},"required":["data"]},"availabilities":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"location_availability"}},"required":["id","type"]}}},"required":["data"]}},"required":["venue"]}},"required":["id","type","attributes","relationships"]},"included":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"location_availability"},"attributes":{"type":"object","description":"One stretch of time the location can be used for. A location with none of these is unconstrained and counts as usable throughout the edition; the first one added is what narrows it to the times given.","properties":{"startsAt":{"type":"string","format":"date-time"},"endsAt":{"type":"string","format":"date-time"}},"required":["startsAt","endsAt"],"additionalProperties":false}},"required":["id","type","attributes"]}]}}},"required":["data"]}}}},"404":{"description":"Edition or location not found","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"errors":{"type":"array","minItems":1,"items":{"type":"object","properties":{"status":{"type":"string","description":"HTTP status code"},"code":{"type":"string"},"title":{"type":"string"},"detail":{"type":"string"},"source":{"type":"object","properties":{"pointer":{"type":"string"},"parameter":{"type":"string"},"header":{"type":"string"}}}},"required":["status"]}}},"required":["errors"]}}}}}},"patch":{"tags":["Locations"],"summary":"Update a location","description":"Updates a location of an edition. The availabilities given replace every one the location had, so an empty array leaves it usable throughout the edition, and overlapping or touching ones are merged. Requires the manager role.","operationId":"updateLocation","parameters":[{"name":"editionId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"locationId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":true,"content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"type":{"type":"string","const":"location"},"attributes":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":200},"externalKey":{"anyOf":[{"type":"string","minLength":1,"maxLength":200},{"type":"null"}]}},"required":["name","externalKey"],"additionalProperties":false},"relationships":{"type":"object","properties":{"venue":{"type":"object","properties":{"data":{"type":"object","properties":{"type":{"type":"string","const":"venue"},"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"required":["type","id"],"additionalProperties":false}},"required":["data"],"additionalProperties":false},"availabilities":{"type":"object","properties":{"data":{"maxItems":500,"type":"array","items":{"type":"object","properties":{"type":{"type":"string","const":"location_availability"},"lid":{"type":"string"}},"required":["type","lid"],"additionalProperties":false}}},"required":["data"],"additionalProperties":false}},"required":["venue","availabilities"],"additionalProperties":false}},"required":["type","attributes","relationships"],"additionalProperties":false},"included":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","const":"location_availability"},"lid":{"type":"string"},"attributes":{"type":"object","properties":{"startsAt":{"type":"string","format":"date-time","examples":["2020-01-01T14:00:00Z"]},"endsAt":{"type":"string","format":"date-time","examples":["2020-01-01T14:00:00Z"]}},"required":["startsAt","endsAt"],"additionalProperties":false}},"required":["type","lid","attributes"],"additionalProperties":false}]}}},"required":["data"],"additionalProperties":false}}}},"responses":{"200":{"description":"The updated location","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"location"},"attributes":{"type":"object","properties":{"name":{"type":"string","minLength":1},"position":{"description":"Which column this room is, on a grid that reads left to right","type":"integer","minimum":0},"externalKey":{"type":["string","null"],"minLength":1}},"required":["name","externalKey","position"],"additionalProperties":false},"relationships":{"type":"object","properties":{"venue":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"venue"}},"required":["id","type"]}},"required":["data"]},"availabilities":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"location_availability"}},"required":["id","type"]}}},"required":["data"]}},"required":["venue"]}},"required":["id","type","attributes","relationships"]},"included":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"location_availability"},"attributes":{"type":"object","description":"One stretch of time the location can be used for. A location with none of these is unconstrained and counts as usable throughout the edition; the first one added is what narrows it to the times given.","properties":{"startsAt":{"type":"string","format":"date-time"},"endsAt":{"type":"string","format":"date-time"}},"required":["startsAt","endsAt"],"additionalProperties":false}},"required":["id","type","attributes"]}]}}},"required":["data"]}}}},"403":{"description":"Manager role required","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"errors":{"type":"array","minItems":1,"items":{"type":"object","properties":{"status":{"type":"string","description":"HTTP status code"},"code":{"type":"string"},"title":{"type":"string"},"detail":{"type":"string"},"source":{"type":"object","properties":{"pointer":{"type":"string"},"parameter":{"type":"string"},"header":{"type":"string"}}}},"required":["status"]}}},"required":["errors"]}}}},"404":{"description":"Edition, location or venue not found","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"errors":{"type":"array","minItems":1,"items":{"type":"object","properties":{"status":{"type":"string","description":"HTTP status code"},"code":{"type":"string"},"title":{"type":"string"},"detail":{"type":"string"},"source":{"type":"object","properties":{"pointer":{"type":"string"},"parameter":{"type":"string"},"header":{"type":"string"}}}},"required":["status"]}}},"required":["errors"]}}}},"409":{"description":"Another location in this edition already uses this external key (external_key_taken)","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"errors":{"type":"array","minItems":1,"items":{"type":"object","properties":{"status":{"type":"string","description":"HTTP status code"},"code":{"type":"string"},"title":{"type":"string"},"detail":{"type":"string"},"source":{"type":"object","properties":{"pointer":{"type":"string"},"parameter":{"type":"string"},"header":{"type":"string"}}}},"required":["status"]}}},"required":["errors"]}}}},"422":{"description":"Invalid request body, an availability ending before it starts (reversed_interval), one reaching outside the days of the edition (outside_edition), or one whose times carry anything finer than a minute (sub_minute_interval)","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"errors":{"type":"array","minItems":1,"items":{"type":"object","properties":{"status":{"type":"string","description":"HTTP status code"},"code":{"type":"string"},"title":{"type":"string"},"detail":{"type":"string"},"source":{"type":"object","properties":{"pointer":{"type":"string"},"parameter":{"type":"string"},"header":{"type":"string"}}}},"required":["status"]}}},"required":["errors"]}}}}}},"delete":{"tags":["Locations"],"summary":"Delete a location","description":"Deletes a location of an edition. Fails while slots still reference it. Requires the manager role.","operationId":"deleteLocation","parameters":[{"name":"editionId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"locationId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"204":{"description":"No content"},"403":{"description":"Manager role required","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"errors":{"type":"array","minItems":1,"items":{"type":"object","properties":{"status":{"type":"string","description":"HTTP status code"},"code":{"type":"string"},"title":{"type":"string"},"detail":{"type":"string"},"source":{"type":"object","properties":{"pointer":{"type":"string"},"parameter":{"type":"string"},"header":{"type":"string"}}}},"required":["status"]}}},"required":["errors"]}}}},"404":{"description":"Edition or location not found","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"errors":{"type":"array","minItems":1,"items":{"type":"object","properties":{"status":{"type":"string","description":"HTTP status code"},"code":{"type":"string"},"title":{"type":"string"},"detail":{"type":"string"},"source":{"type":"object","properties":{"pointer":{"type":"string"},"parameter":{"type":"string"},"header":{"type":"string"}}}},"required":["status"]}}},"required":["errors"]}}}},"409":{"description":"Location in use (entity_in_use)","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"errors":{"type":"array","minItems":1,"items":{"type":"object","properties":{"status":{"type":"string","description":"HTTP status code"},"code":{"type":"string"},"title":{"type":"string"},"detail":{"type":"string"},"source":{"type":"object","properties":{"pointer":{"type":"string"},"parameter":{"type":"string"},"header":{"type":"string"}}}},"required":["status"]}}},"required":["errors"]}}}}}}},"/editions/{editionId}/relationships/venues":{"patch":{"tags":["Venues"],"summary":"Reorder venues","description":"Sets the order of the venues of an edition. The list must name every venue of the edition exactly once; positions are then assigned in the order given. Requires the manager role.","operationId":"reorderVenues","parameters":[{"name":"editionId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":true,"content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"type":{"const":"venue"},"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"required":["id","type"],"additionalProperties":false}}},"required":["data"],"additionalProperties":false}}}},"responses":{"204":{"description":"No content"},"403":{"description":"Manager role required","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"errors":{"type":"array","minItems":1,"items":{"type":"object","properties":{"status":{"type":"string","description":"HTTP status code"},"code":{"type":"string"},"title":{"type":"string"},"detail":{"type":"string"},"source":{"type":"object","properties":{"pointer":{"type":"string"},"parameter":{"type":"string"},"header":{"type":"string"}}}},"required":["status"]}}},"required":["errors"]}}}},"404":{"description":"Edition not found","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"errors":{"type":"array","minItems":1,"items":{"type":"object","properties":{"status":{"type":"string","description":"HTTP status code"},"code":{"type":"string"},"title":{"type":"string"},"detail":{"type":"string"},"source":{"type":"object","properties":{"pointer":{"type":"string"},"parameter":{"type":"string"},"header":{"type":"string"}}}},"required":["status"]}}},"required":["errors"]}}}},"422":{"description":"The list does not match the edition's venues exactly (incomplete_order); the current ids are in the error meta","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"errors":{"type":"array","minItems":1,"items":{"type":"object","properties":{"status":{"type":"string","description":"HTTP status code"},"code":{"type":"string"},"title":{"type":"string"},"detail":{"type":"string"},"source":{"type":"object","properties":{"pointer":{"type":"string"},"parameter":{"type":"string"},"header":{"type":"string"}}}},"required":["status"]}}},"required":["errors"]}}}}}}},"/editions/{editionId}/venues":{"get":{"tags":["Venues"],"summary":"List venues","description":"Lists all venues of an edition. Open to any authenticated subject, including integration tokens and subjects without a user record.","operationId":"listVenues","parameters":[{"name":"editionId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"fields","in":"query","style":"deepObject","schema":{"type":"object","properties":{"venue":{"type":"string","description":"Comma-separated list of fields to include for this type. Leave empty to omit all fields. Allowed fields are: `name`, `address`, `externalKey`, `position`"}},"additionalProperties":false}}],"responses":{"200":{"description":"Venues of the edition","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"venue"},"attributes":{"type":"object","properties":{"name":{"type":"string","minLength":1},"address":{"type":["string","null"],"minLength":1},"externalKey":{"type":["string","null"],"minLength":1},"position":{"description":"Which venue this is, in the order an organizer put them in","type":"integer","minimum":0}},"required":["name","address","externalKey","position"],"additionalProperties":false}},"required":["id","type","attributes"]}}},"required":["data"]}}}},"404":{"description":"Edition not found","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"errors":{"type":"array","minItems":1,"items":{"type":"object","properties":{"status":{"type":"string","description":"HTTP status code"},"code":{"type":"string"},"title":{"type":"string"},"detail":{"type":"string"},"source":{"type":"object","properties":{"pointer":{"type":"string"},"parameter":{"type":"string"},"header":{"type":"string"}}}},"required":["status"]}}},"required":["errors"]}}}}}},"post":{"tags":["Venues"],"summary":"Create a venue","description":"Creates a venue in an edition. Requires the manager role.","operationId":"createVenue","parameters":[{"name":"editionId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":true,"content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"type":{"type":"string","const":"venue"},"attributes":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":200},"address":{"anyOf":[{"type":"string","minLength":1,"maxLength":500},{"type":"null"}]},"externalKey":{"anyOf":[{"type":"string","minLength":1,"maxLength":200},{"type":"null"}]}},"required":["name","address","externalKey"],"additionalProperties":false}},"required":["type","attributes"],"additionalProperties":false}},"required":["data"],"additionalProperties":false}}}},"responses":{"201":{"description":"The created venue","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"venue"},"attributes":{"type":"object","properties":{"name":{"type":"string","minLength":1},"address":{"type":["string","null"],"minLength":1},"externalKey":{"type":["string","null"],"minLength":1},"position":{"description":"Which venue this is, in the order an organizer put them in","type":"integer","minimum":0}},"required":["name","address","externalKey","position"],"additionalProperties":false}},"required":["id","type","attributes"]}},"required":["data"]}}}},"403":{"description":"Manager role required","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"errors":{"type":"array","minItems":1,"items":{"type":"object","properties":{"status":{"type":"string","description":"HTTP status code"},"code":{"type":"string"},"title":{"type":"string"},"detail":{"type":"string"},"source":{"type":"object","properties":{"pointer":{"type":"string"},"parameter":{"type":"string"},"header":{"type":"string"}}}},"required":["status"]}}},"required":["errors"]}}}},"404":{"description":"Edition not found","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"errors":{"type":"array","minItems":1,"items":{"type":"object","properties":{"status":{"type":"string","description":"HTTP status code"},"code":{"type":"string"},"title":{"type":"string"},"detail":{"type":"string"},"source":{"type":"object","properties":{"pointer":{"type":"string"},"parameter":{"type":"string"},"header":{"type":"string"}}}},"required":["status"]}}},"required":["errors"]}}}},"409":{"description":"Another venue in this edition already uses this external key (external_key_taken)","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"errors":{"type":"array","minItems":1,"items":{"type":"object","properties":{"status":{"type":"string","description":"HTTP status code"},"code":{"type":"string"},"title":{"type":"string"},"detail":{"type":"string"},"source":{"type":"object","properties":{"pointer":{"type":"string"},"parameter":{"type":"string"},"header":{"type":"string"}}}},"required":["status"]}}},"required":["errors"]}}}},"422":{"description":"Invalid request body","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"errors":{"type":"array","minItems":1,"items":{"type":"object","properties":{"status":{"type":"string","description":"HTTP status code"},"code":{"type":"string"},"title":{"type":"string"},"detail":{"type":"string"},"source":{"type":"object","properties":{"pointer":{"type":"string"},"parameter":{"type":"string"},"header":{"type":"string"}}}},"required":["status"]}}},"required":["errors"]}}}}}}},"/editions/{editionId}/venues/{venueId}":{"get":{"tags":["Venues"],"summary":"Show a venue","description":"Retrieves a single venue of an edition. Open to any authenticated subject, including integration tokens and subjects without a user record.","operationId":"showVenue","parameters":[{"name":"editionId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"venueId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"fields","in":"query","style":"deepObject","schema":{"type":"object","properties":{"venue":{"type":"string","description":"Comma-separated list of fields to include for this type. Leave empty to omit all fields. Allowed fields are: `name`, `address`, `externalKey`, `position`"}},"additionalProperties":false}}],"responses":{"200":{"description":"The venue","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"venue"},"attributes":{"type":"object","properties":{"name":{"type":"string","minLength":1},"address":{"type":["string","null"],"minLength":1},"externalKey":{"type":["string","null"],"minLength":1},"position":{"description":"Which venue this is, in the order an organizer put them in","type":"integer","minimum":0}},"required":["name","address","externalKey","position"],"additionalProperties":false}},"required":["id","type","attributes"]}},"required":["data"]}}}},"404":{"description":"Edition or venue not found","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"errors":{"type":"array","minItems":1,"items":{"type":"object","properties":{"status":{"type":"string","description":"HTTP status code"},"code":{"type":"string"},"title":{"type":"string"},"detail":{"type":"string"},"source":{"type":"object","properties":{"pointer":{"type":"string"},"parameter":{"type":"string"},"header":{"type":"string"}}}},"required":["status"]}}},"required":["errors"]}}}}}},"patch":{"tags":["Venues"],"summary":"Update a venue","description":"Updates a venue of an edition. Requires the manager role.","operationId":"updateVenue","parameters":[{"name":"editionId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"venueId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":true,"content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"type":{"type":"string","const":"venue"},"attributes":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":200},"address":{"anyOf":[{"type":"string","minLength":1,"maxLength":500},{"type":"null"}]},"externalKey":{"anyOf":[{"type":"string","minLength":1,"maxLength":200},{"type":"null"}]}},"required":["name","address","externalKey"],"additionalProperties":false}},"required":["type","attributes"],"additionalProperties":false}},"required":["data"],"additionalProperties":false}}}},"responses":{"200":{"description":"The updated venue","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"venue"},"attributes":{"type":"object","properties":{"name":{"type":"string","minLength":1},"address":{"type":["string","null"],"minLength":1},"externalKey":{"type":["string","null"],"minLength":1},"position":{"description":"Which venue this is, in the order an organizer put them in","type":"integer","minimum":0}},"required":["name","address","externalKey","position"],"additionalProperties":false}},"required":["id","type","attributes"]}},"required":["data"]}}}},"403":{"description":"Manager role required","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"errors":{"type":"array","minItems":1,"items":{"type":"object","properties":{"status":{"type":"string","description":"HTTP status code"},"code":{"type":"string"},"title":{"type":"string"},"detail":{"type":"string"},"source":{"type":"object","properties":{"pointer":{"type":"string"},"parameter":{"type":"string"},"header":{"type":"string"}}}},"required":["status"]}}},"required":["errors"]}}}},"404":{"description":"Edition or venue not found","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"errors":{"type":"array","minItems":1,"items":{"type":"object","properties":{"status":{"type":"string","description":"HTTP status code"},"code":{"type":"string"},"title":{"type":"string"},"detail":{"type":"string"},"source":{"type":"object","properties":{"pointer":{"type":"string"},"parameter":{"type":"string"},"header":{"type":"string"}}}},"required":["status"]}}},"required":["errors"]}}}},"409":{"description":"Another venue in this edition already uses this external key (external_key_taken)","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"errors":{"type":"array","minItems":1,"items":{"type":"object","properties":{"status":{"type":"string","description":"HTTP status code"},"code":{"type":"string"},"title":{"type":"string"},"detail":{"type":"string"},"source":{"type":"object","properties":{"pointer":{"type":"string"},"parameter":{"type":"string"},"header":{"type":"string"}}}},"required":["status"]}}},"required":["errors"]}}}},"422":{"description":"Invalid request body","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"errors":{"type":"array","minItems":1,"items":{"type":"object","properties":{"status":{"type":"string","description":"HTTP status code"},"code":{"type":"string"},"title":{"type":"string"},"detail":{"type":"string"},"source":{"type":"object","properties":{"pointer":{"type":"string"},"parameter":{"type":"string"},"header":{"type":"string"}}}},"required":["status"]}}},"required":["errors"]}}}}}},"delete":{"tags":["Venues"],"summary":"Delete a venue","description":"Deletes a venue of an edition. Fails while locations still reference it. Requires the manager role.","operationId":"deleteVenue","parameters":[{"name":"editionId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"venueId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"204":{"description":"No content"},"403":{"description":"Manager role required","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"errors":{"type":"array","minItems":1,"items":{"type":"object","properties":{"status":{"type":"string","description":"HTTP status code"},"code":{"type":"string"},"title":{"type":"string"},"detail":{"type":"string"},"source":{"type":"object","properties":{"pointer":{"type":"string"},"parameter":{"type":"string"},"header":{"type":"string"}}}},"required":["status"]}}},"required":["errors"]}}}},"404":{"description":"Edition or venue not found","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"errors":{"type":"array","minItems":1,"items":{"type":"object","properties":{"status":{"type":"string","description":"HTTP status code"},"code":{"type":"string"},"title":{"type":"string"},"detail":{"type":"string"},"source":{"type":"object","properties":{"pointer":{"type":"string"},"parameter":{"type":"string"},"header":{"type":"string"}}}},"required":["status"]}}},"required":["errors"]}}}},"409":{"description":"Venue in use (entity_in_use)","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"errors":{"type":"array","minItems":1,"items":{"type":"object","properties":{"status":{"type":"string","description":"HTTP status code"},"code":{"type":"string"},"title":{"type":"string"},"detail":{"type":"string"},"source":{"type":"object","properties":{"pointer":{"type":"string"},"parameter":{"type":"string"},"header":{"type":"string"}}}},"required":["status"]}}},"required":["errors"]}}}}}}},"/editions/{editionId}/tracks":{"get":{"tags":["Tracks"],"summary":"List tracks","description":"Lists the tracks of an edition. Open to any authenticated subject; internal tracks are only returned for team members and integration tokens.","operationId":"listTracks","parameters":[{"name":"editionId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Tracks of the edition","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"track"},"attributes":{"type":"object","properties":{"name":{"type":"string","minLength":1},"externalKey":{"type":["string","null"],"minLength":1},"description":{"type":"string"},"color":{"type":"string","format":"rgb","example":"#ff0000"},"internal":{"type":"boolean"}},"required":["name","externalKey","description","color","internal"],"additionalProperties":false}},"required":["id","type","attributes"]}}},"required":["data"]}}}},"404":{"description":"Edition not found","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"errors":{"type":"array","minItems":1,"items":{"type":"object","properties":{"status":{"type":"string","description":"HTTP status code"},"code":{"type":"string"},"title":{"type":"string"},"detail":{"type":"string"},"source":{"type":"object","properties":{"pointer":{"type":"string"},"parameter":{"type":"string"},"header":{"type":"string"}}}},"required":["status"]}}},"required":["errors"]}}}}}},"post":{"tags":["Tracks"],"summary":"Create a track","description":"Creates a track in an edition. Requires the manager role.","operationId":"createTrack","parameters":[{"name":"editionId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":true,"content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"type":{"type":"string","const":"track"},"attributes":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":200},"externalKey":{"anyOf":[{"type":"string","minLength":1,"maxLength":200},{"type":"null"}]},"description":{"type":"string","maxLength":5000},"color":{"type":"string","pattern":"^#[0-9A-Fa-f]{6}$"},"internal":{"type":"boolean"}},"required":["name","externalKey","description","color","internal"],"additionalProperties":false}},"required":["type","attributes"],"additionalProperties":false}},"required":["data"],"additionalProperties":false}}}},"responses":{"201":{"description":"The created track","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"track"},"attributes":{"type":"object","properties":{"name":{"type":"string","minLength":1},"externalKey":{"type":["string","null"],"minLength":1},"description":{"type":"string"},"color":{"type":"string","format":"rgb","example":"#ff0000"},"internal":{"type":"boolean"}},"required":["name","externalKey","description","color","internal"],"additionalProperties":false}},"required":["id","type","attributes"]}},"required":["data"]}}}},"403":{"description":"Manager role required","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"errors":{"type":"array","minItems":1,"items":{"type":"object","properties":{"status":{"type":"string","description":"HTTP status code"},"code":{"type":"string"},"title":{"type":"string"},"detail":{"type":"string"},"source":{"type":"object","properties":{"pointer":{"type":"string"},"parameter":{"type":"string"},"header":{"type":"string"}}}},"required":["status"]}}},"required":["errors"]}}}},"404":{"description":"Edition not found","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"errors":{"type":"array","minItems":1,"items":{"type":"object","properties":{"status":{"type":"string","description":"HTTP status code"},"code":{"type":"string"},"title":{"type":"string"},"detail":{"type":"string"},"source":{"type":"object","properties":{"pointer":{"type":"string"},"parameter":{"type":"string"},"header":{"type":"string"}}}},"required":["status"]}}},"required":["errors"]}}}},"409":{"description":"Another track in this edition already uses this external key (external_key_taken)","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"errors":{"type":"array","minItems":1,"items":{"type":"object","properties":{"status":{"type":"string","description":"HTTP status code"},"code":{"type":"string"},"title":{"type":"string"},"detail":{"type":"string"},"source":{"type":"object","properties":{"pointer":{"type":"string"},"parameter":{"type":"string"},"header":{"type":"string"}}}},"required":["status"]}}},"required":["errors"]}}}},"422":{"description":"Invalid request body","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"errors":{"type":"array","minItems":1,"items":{"type":"object","properties":{"status":{"type":"string","description":"HTTP status code"},"code":{"type":"string"},"title":{"type":"string"},"detail":{"type":"string"},"source":{"type":"object","properties":{"pointer":{"type":"string"},"parameter":{"type":"string"},"header":{"type":"string"}}}},"required":["status"]}}},"required":["errors"]}}}}}}},"/editions/{editionId}/tracks/{trackId}":{"get":{"tags":["Tracks"],"summary":"Show a track","description":"Retrieves a single track of an edition. Open to any authenticated subject, including integration tokens and subjects without a user record. An internal track answers as not found unless the caller may see internal ones.","operationId":"showTrack","parameters":[{"name":"editionId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"trackId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"The track","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"track"},"attributes":{"type":"object","properties":{"name":{"type":"string","minLength":1},"externalKey":{"type":["string","null"],"minLength":1},"description":{"type":"string"},"color":{"type":"string","format":"rgb","example":"#ff0000"},"internal":{"type":"boolean"}},"required":["name","externalKey","description","color","internal"],"additionalProperties":false}},"required":["id","type","attributes"]}},"required":["data"]}}}},"404":{"description":"Edition or track not found","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"errors":{"type":"array","minItems":1,"items":{"type":"object","properties":{"status":{"type":"string","description":"HTTP status code"},"code":{"type":"string"},"title":{"type":"string"},"detail":{"type":"string"},"source":{"type":"object","properties":{"pointer":{"type":"string"},"parameter":{"type":"string"},"header":{"type":"string"}}}},"required":["status"]}}},"required":["errors"]}}}}}},"patch":{"tags":["Tracks"],"summary":"Update a track","description":"Updates a track of an edition. Requires the manager role.","operationId":"updateTrack","parameters":[{"name":"editionId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"trackId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":true,"content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"type":{"type":"string","const":"track"},"attributes":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":200},"externalKey":{"anyOf":[{"type":"string","minLength":1,"maxLength":200},{"type":"null"}]},"description":{"type":"string","maxLength":5000},"color":{"type":"string","pattern":"^#[0-9A-Fa-f]{6}$"},"internal":{"type":"boolean"}},"required":["name","externalKey","description","color","internal"],"additionalProperties":false}},"required":["type","attributes"],"additionalProperties":false}},"required":["data"],"additionalProperties":false}}}},"responses":{"200":{"description":"The updated track","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"track"},"attributes":{"type":"object","properties":{"name":{"type":"string","minLength":1},"externalKey":{"type":["string","null"],"minLength":1},"description":{"type":"string"},"color":{"type":"string","format":"rgb","example":"#ff0000"},"internal":{"type":"boolean"}},"required":["name","externalKey","description","color","internal"],"additionalProperties":false}},"required":["id","type","attributes"]}},"required":["data"]}}}},"403":{"description":"Manager role required","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"errors":{"type":"array","minItems":1,"items":{"type":"object","properties":{"status":{"type":"string","description":"HTTP status code"},"code":{"type":"string"},"title":{"type":"string"},"detail":{"type":"string"},"source":{"type":"object","properties":{"pointer":{"type":"string"},"parameter":{"type":"string"},"header":{"type":"string"}}}},"required":["status"]}}},"required":["errors"]}}}},"404":{"description":"Edition or track not found","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"errors":{"type":"array","minItems":1,"items":{"type":"object","properties":{"status":{"type":"string","description":"HTTP status code"},"code":{"type":"string"},"title":{"type":"string"},"detail":{"type":"string"},"source":{"type":"object","properties":{"pointer":{"type":"string"},"parameter":{"type":"string"},"header":{"type":"string"}}}},"required":["status"]}}},"required":["errors"]}}}},"409":{"description":"Turning internal the last track speakers may pick while the edition requires one (nothing_to_pick). Another track in this edition already uses this external key (external_key_taken)","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"errors":{"type":"array","minItems":1,"items":{"type":"object","properties":{"status":{"type":"string","description":"HTTP status code"},"code":{"type":"string"},"title":{"type":"string"},"detail":{"type":"string"},"source":{"type":"object","properties":{"pointer":{"type":"string"},"parameter":{"type":"string"},"header":{"type":"string"}}}},"required":["status"]}}},"required":["errors"]}}}},"422":{"description":"Invalid request body","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"errors":{"type":"array","minItems":1,"items":{"type":"object","properties":{"status":{"type":"string","description":"HTTP status code"},"code":{"type":"string"},"title":{"type":"string"},"detail":{"type":"string"},"source":{"type":"object","properties":{"pointer":{"type":"string"},"parameter":{"type":"string"},"header":{"type":"string"}}}},"required":["status"]}}},"required":["errors"]}}}}}},"delete":{"tags":["Tracks"],"summary":"Delete a track","description":"Deletes a track of an edition. Sessions assigned to the track keep existing and lose their track assignment. Requires the manager role.","operationId":"deleteTrack","parameters":[{"name":"editionId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"trackId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"204":{"description":"No content"},"403":{"description":"Manager role required","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"errors":{"type":"array","minItems":1,"items":{"type":"object","properties":{"status":{"type":"string","description":"HTTP status code"},"code":{"type":"string"},"title":{"type":"string"},"detail":{"type":"string"},"source":{"type":"object","properties":{"pointer":{"type":"string"},"parameter":{"type":"string"},"header":{"type":"string"}}}},"required":["status"]}}},"required":["errors"]}}}},"404":{"description":"Edition or track not found","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"errors":{"type":"array","minItems":1,"items":{"type":"object","properties":{"status":{"type":"string","description":"HTTP status code"},"code":{"type":"string"},"title":{"type":"string"},"detail":{"type":"string"},"source":{"type":"object","properties":{"pointer":{"type":"string"},"parameter":{"type":"string"},"header":{"type":"string"}}}},"required":["status"]}}},"required":["errors"]}}}},"409":{"description":"Deleting the last track speakers may pick while the edition requires one (nothing_to_pick). Custom fields are scoped to this track and nothing else (scope_in_use). Deleting it would widen them to every track, so meta.customFields names each one with its title.","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"errors":{"type":"array","minItems":1,"items":{"type":"object","properties":{"status":{"type":"string","description":"HTTP status code"},"code":{"type":"string"},"title":{"type":"string"},"detail":{"type":"string"},"source":{"type":"object","properties":{"pointer":{"type":"string"},"parameter":{"type":"string"},"header":{"type":"string"}}}},"required":["status"]}}},"required":["errors"]}}}}}}},"/editions/{editionId}/session-types":{"get":{"tags":["Session Types"],"summary":"List session types","description":"Lists the session types of an edition. Open to any authenticated subject; internal session types are only returned for team members and integration tokens.","operationId":"listSessionTypes","parameters":[{"name":"editionId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Session types of the edition","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"session_type"},"attributes":{"type":"object","properties":{"name":{"type":"string","minLength":1},"externalKey":{"type":["string","null"],"minLength":1},"defaultDuration":{"type":"string","title":"Duration","format":"duration","example":"PT1H"},"internal":{"type":"boolean"},"selectionDefault":{"type":"boolean"}},"required":["name","externalKey","defaultDuration","internal","selectionDefault"],"additionalProperties":false}},"required":["id","type","attributes"]}}},"required":["data"]}}}},"404":{"description":"Edition not found","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"errors":{"type":"array","minItems":1,"items":{"type":"object","properties":{"status":{"type":"string","description":"HTTP status code"},"code":{"type":"string"},"title":{"type":"string"},"detail":{"type":"string"},"source":{"type":"object","properties":{"pointer":{"type":"string"},"parameter":{"type":"string"},"header":{"type":"string"}}}},"required":["status"]}}},"required":["errors"]}}}}}},"post":{"tags":["Session Types"],"summary":"Create a session type","description":"Creates a session type in an edition. The new session type is never the selection default. Requires the manager role.","operationId":"createSessionType","parameters":[{"name":"editionId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":true,"content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"type":{"type":"string","const":"session_type"},"attributes":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":200},"externalKey":{"anyOf":[{"type":"string","minLength":1,"maxLength":200},{"type":"null"}]},"defaultDuration":{"type":"string","format":"duration","examples":["PT1H"]},"internal":{"type":"boolean"}},"required":["name","externalKey","defaultDuration","internal"],"additionalProperties":false}},"required":["type","attributes"],"additionalProperties":false}},"required":["data"],"additionalProperties":false}}}},"responses":{"201":{"description":"The created session type","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"session_type"},"attributes":{"type":"object","properties":{"name":{"type":"string","minLength":1},"externalKey":{"type":["string","null"],"minLength":1},"defaultDuration":{"type":"string","title":"Duration","format":"duration","example":"PT1H"},"internal":{"type":"boolean"},"selectionDefault":{"type":"boolean"}},"required":["name","externalKey","defaultDuration","internal","selectionDefault"],"additionalProperties":false}},"required":["id","type","attributes"]}},"required":["data"]}}}},"403":{"description":"Manager role required","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"errors":{"type":"array","minItems":1,"items":{"type":"object","properties":{"status":{"type":"string","description":"HTTP status code"},"code":{"type":"string"},"title":{"type":"string"},"detail":{"type":"string"},"source":{"type":"object","properties":{"pointer":{"type":"string"},"parameter":{"type":"string"},"header":{"type":"string"}}}},"required":["status"]}}},"required":["errors"]}}}},"404":{"description":"Edition not found","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"errors":{"type":"array","minItems":1,"items":{"type":"object","properties":{"status":{"type":"string","description":"HTTP status code"},"code":{"type":"string"},"title":{"type":"string"},"detail":{"type":"string"},"source":{"type":"object","properties":{"pointer":{"type":"string"},"parameter":{"type":"string"},"header":{"type":"string"}}}},"required":["status"]}}},"required":["errors"]}}}},"409":{"description":"Another session type in this edition already uses this external key (external_key_taken)","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"errors":{"type":"array","minItems":1,"items":{"type":"object","properties":{"status":{"type":"string","description":"HTTP status code"},"code":{"type":"string"},"title":{"type":"string"},"detail":{"type":"string"},"source":{"type":"object","properties":{"pointer":{"type":"string"},"parameter":{"type":"string"},"header":{"type":"string"}}}},"required":["status"]}}},"required":["errors"]}}}},"422":{"description":"Invalid request body","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"errors":{"type":"array","minItems":1,"items":{"type":"object","properties":{"status":{"type":"string","description":"HTTP status code"},"code":{"type":"string"},"title":{"type":"string"},"detail":{"type":"string"},"source":{"type":"object","properties":{"pointer":{"type":"string"},"parameter":{"type":"string"},"header":{"type":"string"}}}},"required":["status"]}}},"required":["errors"]}}}}}}},"/editions/{editionId}/session-types/{sessionTypeId}":{"get":{"tags":["Session Types"],"summary":"Show a session type","description":"Retrieves a single session type of an edition. Open to any authenticated subject, including integration tokens and subjects without a user record. An internal session type answers as not found unless the caller may see internal ones.","operationId":"showSessionType","parameters":[{"name":"editionId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"sessionTypeId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"The session type","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"session_type"},"attributes":{"type":"object","properties":{"name":{"type":"string","minLength":1},"externalKey":{"type":["string","null"],"minLength":1},"defaultDuration":{"type":"string","title":"Duration","format":"duration","example":"PT1H"},"internal":{"type":"boolean"},"selectionDefault":{"type":"boolean"}},"required":["name","externalKey","defaultDuration","internal","selectionDefault"],"additionalProperties":false}},"required":["id","type","attributes"]}},"required":["data"]}}}},"404":{"description":"Edition or session type not found","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"errors":{"type":"array","minItems":1,"items":{"type":"object","properties":{"status":{"type":"string","description":"HTTP status code"},"code":{"type":"string"},"title":{"type":"string"},"detail":{"type":"string"},"source":{"type":"object","properties":{"pointer":{"type":"string"},"parameter":{"type":"string"},"header":{"type":"string"}}}},"required":["status"]}}},"required":["errors"]}}}}}},"patch":{"tags":["Session Types"],"summary":"Update a session type","description":"Updates a session type of an edition. Requires the manager role.","operationId":"updateSessionType","parameters":[{"name":"editionId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"sessionTypeId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":true,"content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"type":{"type":"string","const":"session_type"},"attributes":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":200},"externalKey":{"anyOf":[{"type":"string","minLength":1,"maxLength":200},{"type":"null"}]},"defaultDuration":{"type":"string","format":"duration","examples":["PT1H"]},"internal":{"type":"boolean"}},"required":["name","externalKey","defaultDuration","internal"],"additionalProperties":false}},"required":["type","attributes"],"additionalProperties":false}},"required":["data"],"additionalProperties":false}}}},"responses":{"200":{"description":"The updated session type","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"session_type"},"attributes":{"type":"object","properties":{"name":{"type":"string","minLength":1},"externalKey":{"type":["string","null"],"minLength":1},"defaultDuration":{"type":"string","title":"Duration","format":"duration","example":"PT1H"},"internal":{"type":"boolean"},"selectionDefault":{"type":"boolean"}},"required":["name","externalKey","defaultDuration","internal","selectionDefault"],"additionalProperties":false}},"required":["id","type","attributes"]}},"required":["data"]}}}},"403":{"description":"Manager role required","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"errors":{"type":"array","minItems":1,"items":{"type":"object","properties":{"status":{"type":"string","description":"HTTP status code"},"code":{"type":"string"},"title":{"type":"string"},"detail":{"type":"string"},"source":{"type":"object","properties":{"pointer":{"type":"string"},"parameter":{"type":"string"},"header":{"type":"string"}}}},"required":["status"]}}},"required":["errors"]}}}},"404":{"description":"Edition or session type not found","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"errors":{"type":"array","minItems":1,"items":{"type":"object","properties":{"status":{"type":"string","description":"HTTP status code"},"code":{"type":"string"},"title":{"type":"string"},"detail":{"type":"string"},"source":{"type":"object","properties":{"pointer":{"type":"string"},"parameter":{"type":"string"},"header":{"type":"string"}}}},"required":["status"]}}},"required":["errors"]}}}},"409":{"description":"Turning internal the last session type speakers may pick (nothing_to_pick). Another session type in this edition already uses this external key (external_key_taken)","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"errors":{"type":"array","minItems":1,"items":{"type":"object","properties":{"status":{"type":"string","description":"HTTP status code"},"code":{"type":"string"},"title":{"type":"string"},"detail":{"type":"string"},"source":{"type":"object","properties":{"pointer":{"type":"string"},"parameter":{"type":"string"},"header":{"type":"string"}}}},"required":["status"]}}},"required":["errors"]}}}},"422":{"description":"Invalid request body","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"errors":{"type":"array","minItems":1,"items":{"type":"object","properties":{"status":{"type":"string","description":"HTTP status code"},"code":{"type":"string"},"title":{"type":"string"},"detail":{"type":"string"},"source":{"type":"object","properties":{"pointer":{"type":"string"},"parameter":{"type":"string"},"header":{"type":"string"}}}},"required":["status"]}}},"required":["errors"]}}}}}},"delete":{"tags":["Session Types"],"summary":"Delete a session type","description":"Deletes a session type of an edition. The selection default cannot be deleted. Requires the manager role.","operationId":"deleteSessionType","parameters":[{"name":"editionId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"sessionTypeId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"204":{"description":"No content"},"403":{"description":"Manager role required","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"errors":{"type":"array","minItems":1,"items":{"type":"object","properties":{"status":{"type":"string","description":"HTTP status code"},"code":{"type":"string"},"title":{"type":"string"},"detail":{"type":"string"},"source":{"type":"object","properties":{"pointer":{"type":"string"},"parameter":{"type":"string"},"header":{"type":"string"}}}},"required":["status"]}}},"required":["errors"]}}}},"404":{"description":"Edition or session type not found","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"errors":{"type":"array","minItems":1,"items":{"type":"object","properties":{"status":{"type":"string","description":"HTTP status code"},"code":{"type":"string"},"title":{"type":"string"},"detail":{"type":"string"},"source":{"type":"object","properties":{"pointer":{"type":"string"},"parameter":{"type":"string"},"header":{"type":"string"}}}},"required":["status"]}}},"required":["errors"]}}}},"409":{"description":"Deleting the last session type speakers may pick (nothing_to_pick). Session type is the selection default (default_session_type), still in use by a session (entity_in_use), or the only one some custom fields are scoped to (scope_in_use, whose meta.customFields names each one with its title)","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"errors":{"type":"array","minItems":1,"items":{"type":"object","properties":{"status":{"type":"string","description":"HTTP status code"},"code":{"type":"string"},"title":{"type":"string"},"detail":{"type":"string"},"source":{"type":"object","properties":{"pointer":{"type":"string"},"parameter":{"type":"string"},"header":{"type":"string"}}}},"required":["status"]}}},"required":["errors"]}}}}}}},"/editions/{editionId}/session-types/{sessionTypeId}/default-promotion":{"post":{"tags":["Session Types"],"summary":"Promote a session type to the default","description":"Makes the session type the selection default of its edition and demotes the previous default. Requires the manager role.","operationId":"promoteSessionTypeDefault","parameters":[{"name":"editionId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"sessionTypeId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":true,"content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"type":{"type":"string","const":"session_type_default_promotion"}},"required":["type"],"additionalProperties":false}},"required":["data"],"additionalProperties":false}}}},"responses":{"204":{"description":"No content"},"403":{"description":"Manager role required","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"errors":{"type":"array","minItems":1,"items":{"type":"object","properties":{"status":{"type":"string","description":"HTTP status code"},"code":{"type":"string"},"title":{"type":"string"},"detail":{"type":"string"},"source":{"type":"object","properties":{"pointer":{"type":"string"},"parameter":{"type":"string"},"header":{"type":"string"}}}},"required":["status"]}}},"required":["errors"]}}}},"404":{"description":"Edition or session type not found","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"errors":{"type":"array","minItems":1,"items":{"type":"object","properties":{"status":{"type":"string","description":"HTTP status code"},"code":{"type":"string"},"title":{"type":"string"},"detail":{"type":"string"},"source":{"type":"object","properties":{"pointer":{"type":"string"},"parameter":{"type":"string"},"header":{"type":"string"}}}},"required":["status"]}}},"required":["errors"]}}}},"409":{"description":"Another session type became the default while this one was being promoted (default_promotion_conflict)","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"errors":{"type":"array","minItems":1,"items":{"type":"object","properties":{"status":{"type":"string","description":"HTTP status code"},"code":{"type":"string"},"title":{"type":"string"},"detail":{"type":"string"},"source":{"type":"object","properties":{"pointer":{"type":"string"},"parameter":{"type":"string"},"header":{"type":"string"}}}},"required":["status"]}}},"required":["errors"]}}}},"422":{"description":"Invalid request body","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"errors":{"type":"array","minItems":1,"items":{"type":"object","properties":{"status":{"type":"string","description":"HTTP status code"},"code":{"type":"string"},"title":{"type":"string"},"detail":{"type":"string"},"source":{"type":"object","properties":{"pointer":{"type":"string"},"parameter":{"type":"string"},"header":{"type":"string"}}}},"required":["status"]}}},"required":["errors"]}}}}}}},"/editions/{editionId}/custom-fields":{"get":{"tags":["Custom Fields"],"summary":"List custom fields","description":"Lists the custom fields of an edition. Open to any authenticated subject. Scoping is served in full, as bare resource identifiers: a caller who may not see a session type or track can still tell whether it is the one their session is on, and no resource for it is ever included.","operationId":"listCustomFields","parameters":[{"name":"editionId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"CustomFields of the edition","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"custom_field"},"attributes":{"type":"object","properties":{"externalKey":{"type":["string","null"],"minLength":1},"target":{"type":"string","enum":["per_proposal","per_host"]},"requirement":{"type":"string","enum":["always_optional","always_required","required_after_deadline"]},"title":{"type":"string","minLength":1},"helperText":{"type":"string"},"answerMaxLength":{"type":["integer","null"],"minimum":1,"description":"The longest answer a text question takes: options.maxLength where set, else 200 characters on a single line or 10000 on several, unless options.minLength exceeds that, which leaves it uncapped. Null for any other type and for an uncapped question. Served only on the custom field's own routes, never where a document embeds one."},"deadline":{"type":["string","null"],"format":"date-time"},"freezeAfter":{"type":["string","null"],"format":"date-time"},"position":{"type":"integer"},"confidential":{"type":"boolean","description":"Responses to confidential custom fields reach managers and admins, a caller who hosts the session a response belongs to, and the host who answered it. An integration never receives them, and one host does not see another's. A withheld response is absent from linkage as well as from the included resources, so it cannot be told apart from one that was never given."},"options":{"oneOf":[{"title":"Simple","type":"object","properties":{"type":{"type":"string","enum":["boolean","file","date","url"]}},"required":["type"]},{"title":"Number","type":"object","properties":{"type":{"type":"string","const":"number"},"min":{"type":"integer","minimum":0},"max":{"type":"integer","minimum":0}},"required":["type"]},{"title":"Text","type":"object","properties":{"type":{"type":"string","enum":["single_line_text","multi_line_text"]},"minLength":{"type":"integer","minimum":1},"maxLength":{"type":"integer","minimum":1}},"required":["type"]},{"title":"Choice","type":"object","properties":{"type":{"type":"string","enum":["single_choice","multiple_choice"]},"items":{"type":"array","minItems":1,"items":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"label":{"type":"string","minLength":1}},"required":["id","label"]}}},"required":["type","items"]}]}},"required":["externalKey","target","requirement","title","helperText","options","answerMaxLength","deadline","freezeAfter","position","confidential"],"additionalProperties":false},"relationships":{"type":"object","properties":{"sessionTypes":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"session_type"}},"required":["id","type"]}}},"required":["data"]},"tracks":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"track"}},"required":["id","type"]}}},"required":["data"]}},"required":["sessionTypes","tracks"]}},"required":["id","type","attributes","relationships"]}}},"required":["data"]}}}},"404":{"description":"Edition not found","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"errors":{"type":"array","minItems":1,"items":{"type":"object","properties":{"status":{"type":"string","description":"HTTP status code"},"code":{"type":"string"},"title":{"type":"string"},"detail":{"type":"string"},"source":{"type":"object","properties":{"pointer":{"type":"string"},"parameter":{"type":"string"},"header":{"type":"string"}}}},"required":["status"]}}},"required":["errors"]}}}}}},"post":{"tags":["Custom Fields"],"summary":"Create a custom field","description":"Creates a custom field in an edition. The referenced session types and tracks must belong to the same edition. Requires the manager role.","operationId":"createCustomField","parameters":[{"name":"editionId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":true,"content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"type":{"type":"string","const":"custom_field"},"attributes":{"type":"object","properties":{"externalKey":{"anyOf":[{"type":"string","minLength":1,"maxLength":200},{"type":"null"}]},"target":{"type":"string","enum":["per_proposal","per_host"]},"requirement":{"type":"string","enum":["always_optional","always_required","required_after_deadline"]},"options":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","const":"boolean"}},"required":["type"]},{"type":"object","properties":{"type":{"type":"string","const":"single_line_text"},"minLength":{"type":"integer","minimum":1,"maximum":9007199254740991},"maxLength":{"type":"integer","minimum":1,"maximum":9007199254740991}},"required":["type"]},{"type":"object","properties":{"type":{"type":"string","const":"multi_line_text"},"minLength":{"type":"integer","minimum":1,"maximum":9007199254740991},"maxLength":{"type":"integer","minimum":1,"maximum":9007199254740991}},"required":["type"]},{"type":"object","properties":{"type":{"type":"string","const":"single_choice"},"items":{"minItems":1,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"label":{"type":"string","minLength":1,"maxLength":200}},"required":["id","label"]}}},"required":["type","items"]},{"type":"object","properties":{"type":{"type":"string","const":"multiple_choice"},"items":{"minItems":1,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"label":{"type":"string","minLength":1,"maxLength":200}},"required":["id","label"]}}},"required":["type","items"]},{"type":"object","properties":{"type":{"type":"string","const":"number"},"min":{"type":"integer","minimum":0,"maximum":9007199254740991},"max":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["type"]},{"type":"object","properties":{"type":{"type":"string","const":"file"}},"required":["type"]},{"type":"object","properties":{"type":{"type":"string","const":"date"}},"required":["type"]},{"type":"object","properties":{"type":{"type":"string","const":"url"}},"required":["type"]}]},"title":{"type":"string","minLength":1,"maxLength":200},"helperText":{"type":"string","maxLength":5000},"deadline":{"anyOf":[{"type":"string","format":"date-time","examples":["2020-01-01T14:00:00Z"]},{"type":"null"}]},"freezeAfter":{"anyOf":[{"type":"string","format":"date-time","examples":["2020-01-01T14:00:00Z"]},{"type":"null"}]},"confidential":{"type":"boolean"}},"required":["externalKey","target","requirement","options","title","helperText","deadline","freezeAfter","confidential"]},"relationships":{"type":"object","properties":{"sessionTypes":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","const":"session_type"},"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"required":["type","id"],"additionalProperties":false}}},"required":["data"],"additionalProperties":false},"tracks":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","const":"track"},"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"required":["type","id"],"additionalProperties":false}}},"required":["data"],"additionalProperties":false}},"required":["sessionTypes","tracks"],"additionalProperties":false}},"required":["type","attributes","relationships"],"additionalProperties":false}},"required":["data"],"additionalProperties":false}}}},"responses":{"201":{"description":"The created custom field","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"custom_field"},"attributes":{"type":"object","properties":{"externalKey":{"type":["string","null"],"minLength":1},"target":{"type":"string","enum":["per_proposal","per_host"]},"requirement":{"type":"string","enum":["always_optional","always_required","required_after_deadline"]},"title":{"type":"string","minLength":1},"helperText":{"type":"string"},"answerMaxLength":{"type":["integer","null"],"minimum":1,"description":"The longest answer a text question takes: options.maxLength where set, else 200 characters on a single line or 10000 on several, unless options.minLength exceeds that, which leaves it uncapped. Null for any other type and for an uncapped question. Served only on the custom field's own routes, never where a document embeds one."},"deadline":{"type":["string","null"],"format":"date-time"},"freezeAfter":{"type":["string","null"],"format":"date-time"},"position":{"type":"integer"},"confidential":{"type":"boolean","description":"Responses to confidential custom fields reach managers and admins, a caller who hosts the session a response belongs to, and the host who answered it. An integration never receives them, and one host does not see another's. A withheld response is absent from linkage as well as from the included resources, so it cannot be told apart from one that was never given."},"options":{"oneOf":[{"title":"Simple","type":"object","properties":{"type":{"type":"string","enum":["boolean","file","date","url"]}},"required":["type"]},{"title":"Number","type":"object","properties":{"type":{"type":"string","const":"number"},"min":{"type":"integer","minimum":0},"max":{"type":"integer","minimum":0}},"required":["type"]},{"title":"Text","type":"object","properties":{"type":{"type":"string","enum":["single_line_text","multi_line_text"]},"minLength":{"type":"integer","minimum":1},"maxLength":{"type":"integer","minimum":1}},"required":["type"]},{"title":"Choice","type":"object","properties":{"type":{"type":"string","enum":["single_choice","multiple_choice"]},"items":{"type":"array","minItems":1,"items":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"label":{"type":"string","minLength":1}},"required":["id","label"]}}},"required":["type","items"]}]}},"required":["externalKey","target","requirement","title","helperText","options","answerMaxLength","deadline","freezeAfter","position","confidential"],"additionalProperties":false},"relationships":{"type":"object","properties":{"sessionTypes":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"session_type"}},"required":["id","type"]}}},"required":["data"]},"tracks":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"track"}},"required":["id","type"]}}},"required":["data"]}},"required":["sessionTypes","tracks"]}},"required":["id","type","attributes","relationships"]}},"required":["data"]}}}},"403":{"description":"Manager role required","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"errors":{"type":"array","minItems":1,"items":{"type":"object","properties":{"status":{"type":"string","description":"HTTP status code"},"code":{"type":"string"},"title":{"type":"string"},"detail":{"type":"string"},"source":{"type":"object","properties":{"pointer":{"type":"string"},"parameter":{"type":"string"},"header":{"type":"string"}}}},"required":["status"]}}},"required":["errors"]}}}},"404":{"description":"Edition not found, or a session type or track id outside this edition","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"errors":{"type":"array","minItems":1,"items":{"type":"object","properties":{"status":{"type":"string","description":"HTTP status code"},"code":{"type":"string"},"title":{"type":"string"},"detail":{"type":"string"},"source":{"type":"object","properties":{"pointer":{"type":"string"},"parameter":{"type":"string"},"header":{"type":"string"}}}},"required":["status"]}}},"required":["errors"]}}}},"409":{"description":"Another custom field with this target in this edition already uses this external key (external_key_taken)","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"errors":{"type":"array","minItems":1,"items":{"type":"object","properties":{"status":{"type":"string","description":"HTTP status code"},"code":{"type":"string"},"title":{"type":"string"},"detail":{"type":"string"},"source":{"type":"object","properties":{"pointer":{"type":"string"},"parameter":{"type":"string"},"header":{"type":"string"}}}},"required":["status"]}}},"required":["errors"]}}}},"422":{"description":"Invalid request body, or scoping on a per_host custom field (inapplicable_relationship)","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"errors":{"type":"array","minItems":1,"items":{"type":"object","properties":{"status":{"type":"string","description":"HTTP status code"},"code":{"type":"string"},"title":{"type":"string"},"detail":{"type":"string"},"source":{"type":"object","properties":{"pointer":{"type":"string"},"parameter":{"type":"string"},"header":{"type":"string"}}}},"required":["status"]}}},"required":["errors"]}}}}}}},"/editions/{editionId}/relationships/custom-fields":{"patch":{"tags":["Custom Fields"],"summary":"Reorder custom fields","description":"Sets the order of the custom fields of an edition. The list must name every custom field of the edition exactly once; positions are then assigned per target in the order given. Requires the manager role.","operationId":"reorderCustomFields","parameters":[{"name":"editionId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":true,"content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"type":{"const":"custom_field"},"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"required":["id","type"],"additionalProperties":false}}},"required":["data"],"additionalProperties":false}}}},"responses":{"204":{"description":"No content"},"403":{"description":"Manager role required","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"errors":{"type":"array","minItems":1,"items":{"type":"object","properties":{"status":{"type":"string","description":"HTTP status code"},"code":{"type":"string"},"title":{"type":"string"},"detail":{"type":"string"},"source":{"type":"object","properties":{"pointer":{"type":"string"},"parameter":{"type":"string"},"header":{"type":"string"}}}},"required":["status"]}}},"required":["errors"]}}}},"404":{"description":"Edition not found","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"errors":{"type":"array","minItems":1,"items":{"type":"object","properties":{"status":{"type":"string","description":"HTTP status code"},"code":{"type":"string"},"title":{"type":"string"},"detail":{"type":"string"},"source":{"type":"object","properties":{"pointer":{"type":"string"},"parameter":{"type":"string"},"header":{"type":"string"}}}},"required":["status"]}}},"required":["errors"]}}}},"422":{"description":"The list does not match the edition's custom fields exactly (incomplete_order); the current ids are in the error meta","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"errors":{"type":"array","minItems":1,"items":{"type":"object","properties":{"status":{"type":"string","description":"HTTP status code"},"code":{"type":"string"},"title":{"type":"string"},"detail":{"type":"string"},"source":{"type":"object","properties":{"pointer":{"type":"string"},"parameter":{"type":"string"},"header":{"type":"string"}}}},"required":["status"]}}},"required":["errors"]}}}}}}},"/editions/{editionId}/custom-fields/{customFieldId}":{"get":{"tags":["Custom Fields"],"summary":"Show a custom field","description":"Retrieves a single custom field of an edition. Open to any authenticated subject, including integration tokens and subjects without a user record. Scoping is served in full, as bare resource identifiers.","operationId":"showCustomField","parameters":[{"name":"editionId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"customFieldId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"The custom field","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"custom_field"},"attributes":{"type":"object","properties":{"externalKey":{"type":["string","null"],"minLength":1},"target":{"type":"string","enum":["per_proposal","per_host"]},"requirement":{"type":"string","enum":["always_optional","always_required","required_after_deadline"]},"title":{"type":"string","minLength":1},"helperText":{"type":"string"},"answerMaxLength":{"type":["integer","null"],"minimum":1,"description":"The longest answer a text question takes: options.maxLength where set, else 200 characters on a single line or 10000 on several, unless options.minLength exceeds that, which leaves it uncapped. Null for any other type and for an uncapped question. Served only on the custom field's own routes, never where a document embeds one."},"deadline":{"type":["string","null"],"format":"date-time"},"freezeAfter":{"type":["string","null"],"format":"date-time"},"position":{"type":"integer"},"confidential":{"type":"boolean","description":"Responses to confidential custom fields reach managers and admins, a caller who hosts the session a response belongs to, and the host who answered it. An integration never receives them, and one host does not see another's. A withheld response is absent from linkage as well as from the included resources, so it cannot be told apart from one that was never given."},"options":{"oneOf":[{"title":"Simple","type":"object","properties":{"type":{"type":"string","enum":["boolean","file","date","url"]}},"required":["type"]},{"title":"Number","type":"object","properties":{"type":{"type":"string","const":"number"},"min":{"type":"integer","minimum":0},"max":{"type":"integer","minimum":0}},"required":["type"]},{"title":"Text","type":"object","properties":{"type":{"type":"string","enum":["single_line_text","multi_line_text"]},"minLength":{"type":"integer","minimum":1},"maxLength":{"type":"integer","minimum":1}},"required":["type"]},{"title":"Choice","type":"object","properties":{"type":{"type":"string","enum":["single_choice","multiple_choice"]},"items":{"type":"array","minItems":1,"items":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"label":{"type":"string","minLength":1}},"required":["id","label"]}}},"required":["type","items"]}]}},"required":["externalKey","target","requirement","title","helperText","options","answerMaxLength","deadline","freezeAfter","position","confidential"],"additionalProperties":false},"relationships":{"type":"object","properties":{"sessionTypes":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"session_type"}},"required":["id","type"]}}},"required":["data"]},"tracks":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"track"}},"required":["id","type"]}}},"required":["data"]}},"required":["sessionTypes","tracks"]}},"required":["id","type","attributes","relationships"]}},"required":["data"]}}}},"404":{"description":"Edition or custom field not found","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"errors":{"type":"array","minItems":1,"items":{"type":"object","properties":{"status":{"type":"string","description":"HTTP status code"},"code":{"type":"string"},"title":{"type":"string"},"detail":{"type":"string"},"source":{"type":"object","properties":{"pointer":{"type":"string"},"parameter":{"type":"string"},"header":{"type":"string"}}}},"required":["status"]}}},"required":["errors"]}}}}}},"patch":{"tags":["Custom Fields"],"summary":"Update a custom field","description":"Updates a custom field of an edition. The target and the option type are immutable and must match the stored values. Requires the manager role.","operationId":"updateCustomField","parameters":[{"name":"editionId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"customFieldId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":true,"content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"type":{"type":"string","const":"custom_field"},"attributes":{"type":"object","properties":{"externalKey":{"anyOf":[{"type":"string","minLength":1,"maxLength":200},{"type":"null"}]},"target":{"type":"string","enum":["per_proposal","per_host"]},"requirement":{"type":"string","enum":["always_optional","always_required","required_after_deadline"]},"options":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","const":"boolean"}},"required":["type"]},{"type":"object","properties":{"type":{"type":"string","const":"single_line_text"},"minLength":{"type":"integer","minimum":1,"maximum":9007199254740991},"maxLength":{"type":"integer","minimum":1,"maximum":9007199254740991}},"required":["type"]},{"type":"object","properties":{"type":{"type":"string","const":"multi_line_text"},"minLength":{"type":"integer","minimum":1,"maximum":9007199254740991},"maxLength":{"type":"integer","minimum":1,"maximum":9007199254740991}},"required":["type"]},{"type":"object","properties":{"type":{"type":"string","const":"single_choice"},"items":{"minItems":1,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"label":{"type":"string","minLength":1,"maxLength":200}},"required":["id","label"]}}},"required":["type","items"]},{"type":"object","properties":{"type":{"type":"string","const":"multiple_choice"},"items":{"minItems":1,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"label":{"type":"string","minLength":1,"maxLength":200}},"required":["id","label"]}}},"required":["type","items"]},{"type":"object","properties":{"type":{"type":"string","const":"number"},"min":{"type":"integer","minimum":0,"maximum":9007199254740991},"max":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["type"]},{"type":"object","properties":{"type":{"type":"string","const":"file"}},"required":["type"]},{"type":"object","properties":{"type":{"type":"string","const":"date"}},"required":["type"]},{"type":"object","properties":{"type":{"type":"string","const":"url"}},"required":["type"]}]},"title":{"type":"string","minLength":1,"maxLength":200},"helperText":{"type":"string","maxLength":5000},"deadline":{"anyOf":[{"type":"string","format":"date-time","examples":["2020-01-01T14:00:00Z"]},{"type":"null"}]},"freezeAfter":{"anyOf":[{"type":"string","format":"date-time","examples":["2020-01-01T14:00:00Z"]},{"type":"null"}]},"confidential":{"type":"boolean"}},"required":["externalKey","target","requirement","options","title","helperText","deadline","freezeAfter","confidential"]},"relationships":{"type":"object","properties":{"sessionTypes":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","const":"session_type"},"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"required":["type","id"],"additionalProperties":false}}},"required":["data"],"additionalProperties":false},"tracks":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","const":"track"},"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"required":["type","id"],"additionalProperties":false}}},"required":["data"],"additionalProperties":false}},"required":["sessionTypes","tracks"],"additionalProperties":false}},"required":["type","attributes","relationships"],"additionalProperties":false}},"required":["data"],"additionalProperties":false}}}},"responses":{"200":{"description":"The updated custom field","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"custom_field"},"attributes":{"type":"object","properties":{"externalKey":{"type":["string","null"],"minLength":1},"target":{"type":"string","enum":["per_proposal","per_host"]},"requirement":{"type":"string","enum":["always_optional","always_required","required_after_deadline"]},"title":{"type":"string","minLength":1},"helperText":{"type":"string"},"answerMaxLength":{"type":["integer","null"],"minimum":1,"description":"The longest answer a text question takes: options.maxLength where set, else 200 characters on a single line or 10000 on several, unless options.minLength exceeds that, which leaves it uncapped. Null for any other type and for an uncapped question. Served only on the custom field's own routes, never where a document embeds one."},"deadline":{"type":["string","null"],"format":"date-time"},"freezeAfter":{"type":["string","null"],"format":"date-time"},"position":{"type":"integer"},"confidential":{"type":"boolean","description":"Responses to confidential custom fields reach managers and admins, a caller who hosts the session a response belongs to, and the host who answered it. An integration never receives them, and one host does not see another's. A withheld response is absent from linkage as well as from the included resources, so it cannot be told apart from one that was never given."},"options":{"oneOf":[{"title":"Simple","type":"object","properties":{"type":{"type":"string","enum":["boolean","file","date","url"]}},"required":["type"]},{"title":"Number","type":"object","properties":{"type":{"type":"string","const":"number"},"min":{"type":"integer","minimum":0},"max":{"type":"integer","minimum":0}},"required":["type"]},{"title":"Text","type":"object","properties":{"type":{"type":"string","enum":["single_line_text","multi_line_text"]},"minLength":{"type":"integer","minimum":1},"maxLength":{"type":"integer","minimum":1}},"required":["type"]},{"title":"Choice","type":"object","properties":{"type":{"type":"string","enum":["single_choice","multiple_choice"]},"items":{"type":"array","minItems":1,"items":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"label":{"type":"string","minLength":1}},"required":["id","label"]}}},"required":["type","items"]}]}},"required":["externalKey","target","requirement","title","helperText","options","answerMaxLength","deadline","freezeAfter","position","confidential"],"additionalProperties":false},"relationships":{"type":"object","properties":{"sessionTypes":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"session_type"}},"required":["id","type"]}}},"required":["data"]},"tracks":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"track"}},"required":["id","type"]}}},"required":["data"]}},"required":["sessionTypes","tracks"]}},"required":["id","type","attributes","relationships"]}},"required":["data"]}}}},"403":{"description":"Manager role required","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"errors":{"type":"array","minItems":1,"items":{"type":"object","properties":{"status":{"type":"string","description":"HTTP status code"},"code":{"type":"string"},"title":{"type":"string"},"detail":{"type":"string"},"source":{"type":"object","properties":{"pointer":{"type":"string"},"parameter":{"type":"string"},"header":{"type":"string"}}}},"required":["status"]}}},"required":["errors"]}}}},"404":{"description":"Edition or custom field not found, or a session type or track id outside this edition","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"errors":{"type":"array","minItems":1,"items":{"type":"object","properties":{"status":{"type":"string","description":"HTTP status code"},"code":{"type":"string"},"title":{"type":"string"},"detail":{"type":"string"},"source":{"type":"object","properties":{"pointer":{"type":"string"},"parameter":{"type":"string"},"header":{"type":"string"}}}},"required":["status"]}}},"required":["errors"]}}}},"409":{"description":"Target or option type does not match the stored value (conflict), a removed choice option carries a response (entity_in_use), or another custom field with this target in this edition already uses this external key (external_key_taken)","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"errors":{"type":"array","minItems":1,"items":{"type":"object","properties":{"status":{"type":"string","description":"HTTP status code"},"code":{"type":"string"},"title":{"type":"string"},"detail":{"type":"string"},"source":{"type":"object","properties":{"pointer":{"type":"string"},"parameter":{"type":"string"},"header":{"type":"string"}}}},"required":["status"]}}},"required":["errors"]}}}},"422":{"description":"Invalid request body, or scoping on a per_host custom field (inapplicable_relationship)","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"errors":{"type":"array","minItems":1,"items":{"type":"object","properties":{"status":{"type":"string","description":"HTTP status code"},"code":{"type":"string"},"title":{"type":"string"},"detail":{"type":"string"},"source":{"type":"object","properties":{"pointer":{"type":"string"},"parameter":{"type":"string"},"header":{"type":"string"}}}},"required":["status"]}}},"required":["errors"]}}}}}},"delete":{"tags":["Custom Fields"],"summary":"Delete a custom field","description":"Deletes a custom field of an edition together with its responses. Requires the manager role.","operationId":"deleteCustomField","parameters":[{"name":"editionId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"customFieldId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"204":{"description":"No content"},"403":{"description":"Manager role required","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"errors":{"type":"array","minItems":1,"items":{"type":"object","properties":{"status":{"type":"string","description":"HTTP status code"},"code":{"type":"string"},"title":{"type":"string"},"detail":{"type":"string"},"source":{"type":"object","properties":{"pointer":{"type":"string"},"parameter":{"type":"string"},"header":{"type":"string"}}}},"required":["status"]}}},"required":["errors"]}}}},"404":{"description":"Edition or custom field not found","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"errors":{"type":"array","minItems":1,"items":{"type":"object","properties":{"status":{"type":"string","description":"HTTP status code"},"code":{"type":"string"},"title":{"type":"string"},"detail":{"type":"string"},"source":{"type":"object","properties":{"pointer":{"type":"string"},"parameter":{"type":"string"},"header":{"type":"string"}}}},"required":["status"]}}},"required":["errors"]}}}}}}},"/editions/{editionId}/responses/{responseId}/file":{"get":{"tags":["Custom Fields"],"summary":"Mint a download URL for a file response","description":"Answers with a short-lived presigned URL for the file a response holds. The response has to be visible to the caller under the usual confidentiality rules; anything else, including a response that holds no file, answers 404. An integration is held to what /schedules/current already served it: non-confidential answers on confirmed sessions slotted in the current publication, and the per-host answers of those sessions' hosts.","operationId":"mintResponseFileUrl","parameters":[{"name":"editionId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"responseId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"OK","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"signed_get"},"attributes":{"type":"object","properties":{"url":{"description":"Presigned URL the file can be fetched from without credentials","type":"string","format":"uri"},"expiresIn":{"description":"Seconds the signature stays valid","type":"integer"}},"required":["url","expiresIn"],"additionalProperties":false}},"required":["id","type","attributes"]}},"required":["data"]}}}},"403":{"description":"Forbidden","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"errors":{"type":"array","minItems":1,"items":{"type":"object","properties":{"status":{"type":"string","description":"HTTP status code"},"code":{"type":"string"},"title":{"type":"string"},"detail":{"type":"string"},"source":{"type":"object","properties":{"pointer":{"type":"string"},"parameter":{"type":"string"},"header":{"type":"string"}}}},"required":["status"]}}},"required":["errors"]}}}},"404":{"description":"Edition not found, or the response or its file is not available (file_not_found)","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"errors":{"type":"array","minItems":1,"items":{"type":"object","properties":{"status":{"type":"string","description":"HTTP status code"},"code":{"type":"string"},"title":{"type":"string"},"detail":{"type":"string"},"source":{"type":"object","properties":{"pointer":{"type":"string"},"parameter":{"type":"string"},"header":{"type":"string"}}}},"required":["status"]}}},"required":["errors"]}}}}}}},"/editions/{editionId}/hosts":{"get":{"tags":["Hosts"],"summary":"List hosts","description":"Lists everyone with a host record in the edition, by display name, with cursor pagination. A record exists from the moment someone opens their profile for the edition, submits a session or accepts an invite, so the list includes people who have submitted nothing; `meta.sessionCount` on each is what tells them apart. Requires a team role. `filter[search]` matches the display name or, for a caller who may read it, the email address. `meta.total` counts what the filter matched across every page rather than the one served.","operationId":"listHosts","parameters":[{"name":"editionId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"fields","in":"query","style":"deepObject","schema":{"type":"object","properties":{"host":{"type":"string","description":"Comma-separated list of fields to include for this type. Leave empty to omit all fields. Allowed fields are: `displayName`, `emailAddress`, `biography`, `avatar`, `responses`, `availabilities`"}},"additionalProperties":false}},{"name":"filter","in":"query","style":"deepObject","schema":{"type":"object","properties":{"search":{"type":"string","minLength":1,"maxLength":200}},"additionalProperties":false}},{"name":"page","in":"query","style":"deepObject","schema":{"type":"object","properties":{"before":{"type":"string"},"after":{"type":"string"},"size":{"default":50,"type":"integer","minimum":1,"maximum":500}}}}],"responses":{"200":{"description":"OK","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"host"},"attributes":{"type":"object","properties":{"displayName":{"type":"string","minLength":1},"emailAddress":{"type":"string","format":"email"},"biography":{"type":"string"},"avatar":{"type":["object","null"],"properties":{"key":{"type":"string"},"filename":{"type":"string"},"url":{"type":"string","format":"uri"},"thumbnailUrl":{"type":"string","format":"uri"},"processing":{"type":"boolean","description":"True while the uploaded original is still what both urls serve. A downscaled version replaces them shortly after, so a poller can skip fetching the image until this turns false."}},"required":["key","filename","url","thumbnailUrl","processing"],"additionalProperties":false}},"required":["displayName","biography","avatar"],"additionalProperties":false,"description":"emailAddress is only present for managers and admins."},"relationships":{"type":"object","properties":{}},"meta":{"type":"object","properties":{"sessionCount":{"type":"integer","description":"Sessions of this edition the host is on, counted whatever state each is in, so a host who submitted and withdrew still shows one."}},"required":["sessionCount"],"additionalProperties":false}},"required":["id","type","attributes","meta"]}},"meta":{"type":"object","properties":{"total":{"type":"integer","description":"Hosts this caller's filters matched, across every page rather than the one served."}},"required":["total"],"additionalProperties":false}},"required":["data","meta"]}}}},"400":{"description":"Invalid query parameter","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"errors":{"type":"array","minItems":1,"items":{"type":"object","properties":{"status":{"type":"string","description":"HTTP status code"},"code":{"type":"string"},"title":{"type":"string"},"detail":{"type":"string"},"source":{"type":"object","properties":{"pointer":{"type":"string"},"parameter":{"type":"string"},"header":{"type":"string"}}}},"required":["status"]}}},"required":["errors"]}}}},"403":{"description":"Forbidden","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"errors":{"type":"array","minItems":1,"items":{"type":"object","properties":{"status":{"type":"string","description":"HTTP status code"},"code":{"type":"string"},"title":{"type":"string"},"detail":{"type":"string"},"source":{"type":"object","properties":{"pointer":{"type":"string"},"parameter":{"type":"string"},"header":{"type":"string"}}}},"required":["status"]}}},"required":["errors"]}}}},"404":{"description":"Edition not found","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"errors":{"type":"array","minItems":1,"items":{"type":"object","properties":{"status":{"type":"string","description":"HTTP status code"},"code":{"type":"string"},"title":{"type":"string"},"detail":{"type":"string"},"source":{"type":"object","properties":{"pointer":{"type":"string"},"parameter":{"type":"string"},"header":{"type":"string"}}}},"required":["status"]}}},"required":["errors"]}}}}}}},"/editions/{editionId}/hosts/{hostId}":{"get":{"tags":["Hosts"],"summary":"Show a host","description":"Retrieves a single host of an edition, with the answers that host gave to per-host custom fields. Requires global read access; a user without it reads nothing here, even for a session they host. An integration reads hosts through the current schedule document instead. The answers differ by caller: managers and admins see every answer, a team member reading their own host record also sees their own confidential answers, and everyone else sees only the non-confidential ones. The email address is limited to managers and admins, and so is `include=availabilities`, which is dropped rather than refused for anyone else.","operationId":"showHost","parameters":[{"name":"editionId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"hostId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"include","in":"query","schema":{"type":"array","items":{"type":"string","enum":["responses","availabilities"]},"default":["responses"]}},{"name":"fields","in":"query","style":"deepObject","schema":{"type":"object","properties":{"host":{"type":"string","description":"Comma-separated list of fields to include for this type. Leave empty to omit all fields. Allowed fields are: `displayName`, `emailAddress`, `biography`, `avatar`, `responses`, `availabilities`"}},"additionalProperties":false}}],"responses":{"200":{"description":"OK","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"host"},"attributes":{"type":"object","properties":{"displayName":{"type":"string","minLength":1},"emailAddress":{"type":"string","format":"email"},"biography":{"type":"string"},"avatar":{"type":["object","null"],"properties":{"key":{"type":"string"},"filename":{"type":"string"},"url":{"type":"string","format":"uri"},"thumbnailUrl":{"type":"string","format":"uri"},"processing":{"type":"boolean","description":"True while the uploaded original is still what both urls serve. A downscaled version replaces them shortly after, so a poller can skip fetching the image until this turns false."}},"required":["key","filename","url","thumbnailUrl","processing"],"additionalProperties":false}},"required":["displayName","biography","avatar"],"additionalProperties":false,"description":"emailAddress is only present for managers and admins."},"relationships":{"type":"object","properties":{"responses":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"response"}},"required":["id","type"]}}},"required":["data"]}},"required":["responses"]}},"required":["id","type","attributes","relationships"]},"included":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"response"},"attributes":{"type":"object","properties":{"value":{}},"required":["value"],"additionalProperties":false},"relationships":{"type":"object","properties":{"customField":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"custom_field"}},"required":["id","type"]}},"required":["data"]}},"required":["customField"]}},"required":["id","type","attributes","relationships"]},{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"host_availability"},"attributes":{"type":"object","description":"One stretch of time the host said they can present in. A host with none of these has not narrowed anything down and counts as available throughout the edition; the first one added is what limits them to the times given.","properties":{"startsAt":{"type":"string","format":"date-time"},"endsAt":{"type":"string","format":"date-time"}},"required":["startsAt","endsAt"],"additionalProperties":false}},"required":["id","type","attributes"]}]}}},"required":["data"]}}}},"400":{"description":"Invalid query parameter","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"errors":{"type":"array","minItems":1,"items":{"type":"object","properties":{"status":{"type":"string","description":"HTTP status code"},"code":{"type":"string"},"title":{"type":"string"},"detail":{"type":"string"},"source":{"type":"object","properties":{"pointer":{"type":"string"},"parameter":{"type":"string"},"header":{"type":"string"}}}},"required":["status"]}}},"required":["errors"]}}}},"403":{"description":"Forbidden","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"errors":{"type":"array","minItems":1,"items":{"type":"object","properties":{"status":{"type":"string","description":"HTTP status code"},"code":{"type":"string"},"title":{"type":"string"},"detail":{"type":"string"},"source":{"type":"object","properties":{"pointer":{"type":"string"},"parameter":{"type":"string"},"header":{"type":"string"}}}},"required":["status"]}}},"required":["errors"]}}}},"404":{"description":"Edition or host not found","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"errors":{"type":"array","minItems":1,"items":{"type":"object","properties":{"status":{"type":"string","description":"HTTP status code"},"code":{"type":"string"},"title":{"type":"string"},"detail":{"type":"string"},"source":{"type":"object","properties":{"pointer":{"type":"string"},"parameter":{"type":"string"},"header":{"type":"string"}}}},"required":["status"]}}},"required":["errors"]}}}}}}},"/editions/{editionId}/sessions":{"get":{"tags":["Sessions"],"summary":"List sessions","description":"Lists the edition's sessions, newest first, with cursor pagination. Open to any member of a team, whatever their role, and to superadmins; a speaker reads their own sessions through /me/sessions and the session's own route. Requested fields the caller may not see are dropped; a `fields[host]` naming only such fields yields host resources without an attributes member. `filter[state]` takes a comma separated list and matches any of them; `filter[track]` and `filter[sessionType]` each take one id; `filter[search]` matches part of a title, ignoring case, and is capped at 200 characters. `meta.total` counts everything this caller's filters matched, not the page. Cursors are keyed on the id this list is ordered by, so a cursor whose row was since deleted still resolves to the right place. A row created mid-walk sorts above the first page and a forward walk never sees it. `meta.total` is recounted per request, so it may differ between one page and the next. The links replay the request's filters, `first` is null on the first page, and there is no `last`. Each session carries `meta.hostTransitions` and `meta.managerTransitions`, the states this caller may move it to in each role from where it stands, and `meta.hosting`, whether they host it. A caller who hosts a session on the page is offered their host moves here as well as on the speaker's routes.","operationId":"listSessions","parameters":[{"name":"editionId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"include","in":"query","schema":{"type":"array","items":{"type":"string","enum":["hosts","hosts.responses","hosts.responses.customField","hosts.availabilities","responses","responses.customField","sessionType","track"]}}},{"name":"fields","in":"query","style":"deepObject","schema":{"type":"object","properties":{"host":{"type":"string","description":"Comma-separated list of fields to include for this type. Leave empty to omit all fields. Allowed fields are: `displayName`, `emailAddress`, `biography`, `avatar`, `responses`, `availabilities`"},"host_availability":{"type":"string","description":"Comma-separated list of fields to include for this type. Leave empty to omit all fields. Allowed fields are: `startsAt`, `endsAt`"},"session":{"type":"string","description":"Comma-separated list of fields to include for this type. Leave empty to omit all fields. Allowed fields are: `createdAt`, `state`, `title`, `abstract`, `description`, `notes`, `duration`, `setupTime`, `teardownTime`, `teaserImage`, `hosts`, `sessionType`, `track`, `responses`"},"response":{"type":"string","description":"Comma-separated list of fields to include for this type. Leave empty to omit all fields. Allowed fields are: `value`, `customField`"},"custom_field":{"type":"string","description":"Comma-separated list of fields to include for this type. Leave empty to omit all fields. Allowed fields are: `externalKey`, `target`, `requirement`, `title`, `helperText`, `options`, `deadline`, `freezeAfter`, `confidential`, `position`"},"session_type":{"type":"string","description":"Comma-separated list of fields to include for this type. Leave empty to omit all fields. Allowed fields are: `name`, `externalKey`, `defaultDuration`, `internal`, `selectionDefault`"},"track":{"type":"string","description":"Comma-separated list of fields to include for this type. Leave empty to omit all fields. Allowed fields are: `name`, `externalKey`, `description`, `color`, `internal`"}},"additionalProperties":false}},{"name":"filter","in":"query","style":"deepObject","schema":{"type":"object","properties":{"state":{"type":"string"},"track":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"sessionType":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"search":{"type":"string","minLength":1,"maxLength":200}},"additionalProperties":false}},{"name":"page","in":"query","style":"deepObject","schema":{"type":"object","properties":{"before":{"type":"string"},"after":{"type":"string"},"size":{"default":50,"type":"integer","minimum":1,"maximum":500}}}}],"responses":{"200":{"description":"OK","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"session"},"attributes":{"type":"object","properties":{"createdAt":{"type":"string","format":"date-time"},"state":{"type":"string","enum":["submitted","accepted","confirmed","rejected","withdrawn","canceled"]},"title":{"type":["string"],"minLength":1},"abstract":{"type":["string"]},"description":{"type":["string"]},"notes":{"type":["string"]},"duration":{"oneOf":[{"type":"string","title":"Duration","format":"duration","example":"PT1H"},{"type":"null"}]},"setupTime":{"oneOf":[{"type":"string","title":"Duration","format":"duration","example":"PT1H"},{"type":"null"}]},"teardownTime":{"oneOf":[{"type":"string","title":"Duration","format":"duration","example":"PT1H"},{"type":"null"}]},"teaserImage":{"type":["object","null"],"properties":{"key":{"type":"string"},"filename":{"type":"string"},"url":{"type":"string","format":"uri"},"thumbnailUrl":{"type":"string","format":"uri"},"processing":{"type":"boolean","description":"True while the uploaded original is still what both urls serve. A downscaled version replaces them shortly after, so a poller can skip fetching the image until this turns false."}},"required":["key","filename","url","thumbnailUrl","processing"],"additionalProperties":false}},"required":["createdAt","state","title","abstract","description","notes","duration","setupTime","teardownTime","teaserImage"],"additionalProperties":false},"relationships":{"type":"object","properties":{"hosts":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"host"}},"required":["id","type"]}}},"required":["data"]},"sessionType":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"session_type"}},"required":["id","type"]}},"required":["data"]},"track":{"type":"object","properties":{"data":{"oneOf":[{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"track"}},"required":["id","type"]},{"type":"null"}]}},"required":["data"]},"responses":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"response"}},"required":["id","type"]}}},"required":["data"]}},"required":["hosts","sessionType","track","responses"]},"meta":{"type":"object","properties":{"hostTransitions":{"type":"array","items":{"type":"string","enum":["submitted","accepted","confirmed","rejected","withdrawn","canceled"]},"description":"States this caller may move the session to as a host of it, empty where they host it but may make no move, or do not host it at all."},"managerTransitions":{"type":"array","items":{"type":"string","enum":["submitted","accepted","confirmed","rejected","withdrawn","canceled"]},"description":"States this caller may move the session to as a manager, empty for everyone else. Scoped separately from hostTransitions so each surface offers the moves of the role it is for: an organizer who submitted their own session decides on it where they organize, not where they speak."},"hosting":{"type":"boolean","description":"Whether this caller hosts the session. Not derivable from the transition lists: a manager receives managerTransitions without hosting it, and a host may receive hostTransitions empty."}},"required":["hostTransitions","managerTransitions","hosting"],"additionalProperties":false}},"required":["id","type","attributes","relationships","meta"]}},"meta":{"type":"object","properties":{"total":{"type":"integer","description":"Sessions this caller's filters matched, across every page rather than the one served."}},"required":["total"],"additionalProperties":false},"links":{"type":"object","properties":{"first":{"oneOf":[{"type":"string","format":"uri-reference"},{"type":"null"}]},"prev":{"oneOf":[{"type":"string","format":"uri-reference"},{"type":"null"}]},"next":{"oneOf":[{"type":"string","format":"uri-reference"},{"type":"null"}]}}},"included":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"host"},"attributes":{"type":"object","properties":{"displayName":{"type":"string","minLength":1},"emailAddress":{"type":"string","format":"email"},"biography":{"type":"string"},"avatar":{"type":["object","null"],"properties":{"key":{"type":"string"},"filename":{"type":"string"},"url":{"type":"string","format":"uri"},"thumbnailUrl":{"type":"string","format":"uri"},"processing":{"type":"boolean","description":"True while the uploaded original is still what both urls serve. A downscaled version replaces them shortly after, so a poller can skip fetching the image until this turns false."}},"required":["key","filename","url","thumbnailUrl","processing"],"additionalProperties":false}},"required":["displayName","biography","avatar"],"additionalProperties":false,"description":"emailAddress is only present for managers and admins."},"relationships":{"type":"object","properties":{"responses":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"response"}},"required":["id","type"]}}},"required":["data"]},"availabilities":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"host_availability"}},"required":["id","type"]}}},"required":["data"]}},"required":["responses"]}},"required":["id","type","attributes","relationships"]},{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"host_availability"},"attributes":{"type":"object","description":"One stretch of time the host said they can present in. A host with none of these has not narrowed anything down and counts as available throughout the edition; the first one added is what limits them to the times given.","properties":{"startsAt":{"type":"string","format":"date-time"},"endsAt":{"type":"string","format":"date-time"}},"required":["startsAt","endsAt"],"additionalProperties":false}},"required":["id","type","attributes"]},{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"response"},"attributes":{"type":"object","properties":{"value":{}},"required":["value"],"additionalProperties":false},"relationships":{"type":"object","properties":{"customField":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"custom_field"}},"required":["id","type"]}},"required":["data"]}},"required":["customField"]}},"required":["id","type","attributes","relationships"]},{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"custom_field"},"attributes":{"type":"object","properties":{"externalKey":{"type":["string","null"],"minLength":1},"target":{"type":"string","enum":["per_proposal","per_host"]},"requirement":{"type":"string","enum":["always_optional","always_required","required_after_deadline"]},"title":{"type":"string","minLength":1},"helperText":{"type":"string"},"deadline":{"type":["string","null"],"format":"date-time"},"freezeAfter":{"type":["string","null"],"format":"date-time"},"position":{"type":"integer"},"confidential":{"type":"boolean","description":"Responses to confidential custom fields reach managers and admins, a caller who hosts the session a response belongs to, and the host who answered it. An integration never receives them, and one host does not see another's. A withheld response is absent from linkage as well as from the included resources, so it cannot be told apart from one that was never given."},"options":{"oneOf":[{"title":"Simple","type":"object","properties":{"type":{"type":"string","enum":["boolean","file","date","url"]}},"required":["type"]},{"title":"Number","type":"object","properties":{"type":{"type":"string","const":"number"},"min":{"type":"integer","minimum":0},"max":{"type":"integer","minimum":0}},"required":["type"]},{"title":"Text","type":"object","properties":{"type":{"type":"string","enum":["single_line_text","multi_line_text"]},"minLength":{"type":"integer","minimum":1},"maxLength":{"type":"integer","minimum":1}},"required":["type"]},{"title":"Choice","type":"object","properties":{"type":{"type":"string","enum":["single_choice","multiple_choice"]},"items":{"type":"array","minItems":1,"items":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"label":{"type":"string","minLength":1}},"required":["id","label"]}}},"required":["type","items"]}]}},"required":["externalKey","target","title","options"],"additionalProperties":false,"description":"requirement, helperText, deadline, freezeAfter, position and confidential are absent for an integration token, which receives a custom field to render an answer rather than to run a submission."},"relationships":{"type":"object","properties":{"sessionTypes":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"session_type"}},"required":["id","type"]}}},"required":["data"]},"tracks":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"track"}},"required":["id","type"]}}},"required":["data"]}}}},"required":["id","type","attributes"]},{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"session_type"},"attributes":{"type":"object","properties":{"name":{"type":"string","minLength":1},"externalKey":{"type":["string","null"],"minLength":1},"defaultDuration":{"type":"string","title":"Duration","format":"duration","example":"PT1H"},"internal":{"type":"boolean"},"selectionDefault":{"type":"boolean"}},"required":["name","externalKey","defaultDuration","internal","selectionDefault"],"additionalProperties":false}},"required":["id","type","attributes"]},{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"track"},"attributes":{"type":"object","properties":{"name":{"type":"string","minLength":1},"externalKey":{"type":["string","null"],"minLength":1},"description":{"type":"string"},"color":{"type":"string","format":"rgb","example":"#ff0000"},"internal":{"type":"boolean"}},"required":["name","externalKey","description","color","internal"],"additionalProperties":false}},"required":["id","type","attributes"]}]}}},"required":["data","meta"]}}}},"403":{"description":"Forbidden","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"errors":{"type":"array","minItems":1,"items":{"type":"object","properties":{"status":{"type":"string","description":"HTTP status code"},"code":{"type":"string"},"title":{"type":"string"},"detail":{"type":"string"},"source":{"type":"object","properties":{"pointer":{"type":"string"},"parameter":{"type":"string"},"header":{"type":"string"}}}},"required":["status"]}}},"required":["errors"]}}}},"404":{"description":"Edition not found","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"errors":{"type":"array","minItems":1,"items":{"type":"object","properties":{"status":{"type":"string","description":"HTTP status code"},"code":{"type":"string"},"title":{"type":"string"},"detail":{"type":"string"},"source":{"type":"object","properties":{"pointer":{"type":"string"},"parameter":{"type":"string"},"header":{"type":"string"}}}},"required":["status"]}}},"required":["errors"]}}}}}},"post":{"tags":["Sessions"],"summary":"Create a session","description":"Submits a session to the edition. Requires an authenticated user; with `meta.selfService` the caller becomes a host, which requires the profile the edition asks them for to be complete; submitting for someone else requires the manager role, and only managers may submit after the submission deadline or pick an internal session type or track. The documented attributes and relationships are the widest set: which built-in fields exist, and whether each one is optional or required, follows the edition's `sessionFieldOptions`, and a field the edition does not configure is rejected with session_fields_changed, as is a create that leaves out one it does. Responses travel as included `response` resources referenced by local id from the `responses` relationship.","operationId":"createSession","parameters":[{"name":"editionId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":true,"content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"type":{"type":"string","const":"session"},"attributes":{"type":"object","properties":{"title":{"type":"string"},"abstract":{"type":"string"},"description":{"type":"string"},"notes":{"type":"string"},"duration":{"anyOf":[{"type":"string","format":"duration","examples":["PT1H"]},{"type":"null"}]},"setupTime":{"anyOf":[{"type":"string","format":"duration","examples":["PT1H"]},{"type":"null"}]},"teardownTime":{"anyOf":[{"type":"string","format":"duration","examples":["PT1H"]},{"type":"null"}]},"teaserImage":{"anyOf":[{"type":"object","properties":{"key":{"type":"string","minLength":1,"maxLength":255,"pattern":"^temp\\/[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}\\.[a-z0-9]+$"},"filename":{"type":"string","minLength":1,"maxLength":255,"pattern":"^[^\\p{Cc}\\u2028\\u2029\\u202a-\\u202e\\u2066-\\u2069]+$"}},"required":["key","filename"],"additionalProperties":false},{"type":"null"}]}},"required":["title","abstract","description","notes","duration","setupTime","teardownTime","teaserImage"],"additionalProperties":false},"relationships":{"type":"object","properties":{"sessionType":{"type":"object","properties":{"data":{"type":"object","properties":{"type":{"type":"string","const":"session_type"},"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"required":["type","id"],"additionalProperties":false}},"required":["data"],"additionalProperties":false},"responses":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","const":"response"},"lid":{"type":"string"}},"required":["type","lid"],"additionalProperties":false}}},"required":["data"],"additionalProperties":false},"track":{"type":"object","properties":{"data":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","const":"track"},"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"required":["type","id"],"additionalProperties":false},{"type":"null"}]}},"required":["data"],"additionalProperties":false}},"required":["sessionType","responses","track"],"additionalProperties":false},"meta":{"default":{},"type":"object","properties":{"selfService":{"default":false,"type":"boolean"}},"additionalProperties":false}},"required":["type","attributes","relationships"],"additionalProperties":false},"included":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","const":"response"},"lid":{"type":"string"},"attributes":{"type":"object","properties":{"value":{}},"required":["value"],"additionalProperties":false},"relationships":{"type":"object","properties":{"customField":{"type":"object","properties":{"data":{"type":"object","properties":{"type":{"type":"string","const":"custom_field"},"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"required":["type","id"],"additionalProperties":false}},"required":["data"],"additionalProperties":false}},"required":["customField"],"additionalProperties":false}},"required":["type","lid","attributes","relationships"],"additionalProperties":false}]}}},"required":["data"],"additionalProperties":false}}}},"responses":{"201":{"description":"Created","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"session"},"attributes":{"type":"object","properties":{"createdAt":{"type":"string","format":"date-time"},"state":{"type":"string","enum":["submitted","accepted","confirmed","rejected","withdrawn","canceled"]},"title":{"type":["string"],"minLength":1},"abstract":{"type":["string"]},"description":{"type":["string"]},"notes":{"type":["string"]},"duration":{"oneOf":[{"type":"string","title":"Duration","format":"duration","example":"PT1H"},{"type":"null"}]},"setupTime":{"oneOf":[{"type":"string","title":"Duration","format":"duration","example":"PT1H"},{"type":"null"}]},"teardownTime":{"oneOf":[{"type":"string","title":"Duration","format":"duration","example":"PT1H"},{"type":"null"}]},"teaserImage":{"type":["object","null"],"properties":{"key":{"type":"string"},"filename":{"type":"string"},"url":{"type":"string","format":"uri"},"thumbnailUrl":{"type":"string","format":"uri"},"processing":{"type":"boolean","description":"True while the uploaded original is still what both urls serve. A downscaled version replaces them shortly after, so a poller can skip fetching the image until this turns false."}},"required":["key","filename","url","thumbnailUrl","processing"],"additionalProperties":false}},"required":["createdAt","state","title","abstract","description","notes","duration","setupTime","teardownTime","teaserImage"],"additionalProperties":false},"relationships":{"type":"object","properties":{"hosts":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"host"}},"required":["id","type"]}}},"required":["data"]},"sessionType":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"session_type"}},"required":["id","type"]}},"required":["data"]},"track":{"type":"object","properties":{"data":{"oneOf":[{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"track"}},"required":["id","type"]},{"type":"null"}]}},"required":["data"]},"responses":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"response"}},"required":["id","type"]}}},"required":["data"]}},"required":["hosts","sessionType","track","responses"]},"meta":{"type":"object","properties":{"hostTransitions":{"type":"array","items":{"type":"string","enum":["submitted","accepted","confirmed","rejected","withdrawn","canceled"]},"description":"States this caller may move the session to as a host of it, empty where they host it but may make no move, or do not host it at all."},"managerTransitions":{"type":"array","items":{"type":"string","enum":["submitted","accepted","confirmed","rejected","withdrawn","canceled"]},"description":"States this caller may move the session to as a manager, empty for everyone else. Scoped separately from hostTransitions so each surface offers the moves of the role it is for: an organizer who submitted their own session decides on it where they organize, not where they speak."},"hosting":{"type":"boolean","description":"Whether this caller hosts the session. Not derivable from the transition lists: a manager receives managerTransitions without hosting it, and a host may receive hostTransitions empty."}},"required":["hostTransitions","managerTransitions","hosting"],"additionalProperties":false}},"required":["id","type","attributes","relationships","meta"]},"included":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"host"},"attributes":{"type":"object","properties":{"displayName":{"type":"string","minLength":1},"emailAddress":{"type":"string","format":"email"},"biography":{"type":"string"},"avatar":{"type":["object","null"],"properties":{"key":{"type":"string"},"filename":{"type":"string"},"url":{"type":"string","format":"uri"},"thumbnailUrl":{"type":"string","format":"uri"},"processing":{"type":"boolean","description":"True while the uploaded original is still what both urls serve. A downscaled version replaces them shortly after, so a poller can skip fetching the image until this turns false."}},"required":["key","filename","url","thumbnailUrl","processing"],"additionalProperties":false}},"required":["displayName","biography","avatar"],"additionalProperties":false,"description":"emailAddress is only present for managers and admins."},"relationships":{"type":"object","properties":{"responses":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"response"}},"required":["id","type"]}}},"required":["data"]}},"required":["responses"]}},"required":["id","type","attributes","relationships"]},{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"session_type"},"attributes":{"type":"object","properties":{"name":{"type":"string","minLength":1},"externalKey":{"type":["string","null"],"minLength":1},"defaultDuration":{"type":"string","title":"Duration","format":"duration","example":"PT1H"},"internal":{"type":"boolean"},"selectionDefault":{"type":"boolean"}},"required":["name","externalKey","defaultDuration","internal","selectionDefault"],"additionalProperties":false}},"required":["id","type","attributes"]},{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"track"},"attributes":{"type":"object","properties":{"name":{"type":"string","minLength":1},"externalKey":{"type":["string","null"],"minLength":1},"description":{"type":"string"},"color":{"type":"string","format":"rgb","example":"#ff0000"},"internal":{"type":"boolean"}},"required":["name","externalKey","description","color","internal"],"additionalProperties":false}},"required":["id","type","attributes"]},{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"response"},"attributes":{"type":"object","properties":{"value":{}},"required":["value"],"additionalProperties":false},"relationships":{"type":"object","properties":{"customField":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"custom_field"}},"required":["id","type"]}},"required":["data"]}},"required":["customField"]}},"required":["id","type","attributes","relationships"]}]}}},"required":["data"]}}}},"403":{"description":"Forbidden (forbidden, deadline_passed)","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"errors":{"type":"array","minItems":1,"items":{"type":"object","properties":{"status":{"type":"string","description":"HTTP status code"},"code":{"type":"string"},"title":{"type":"string"},"detail":{"type":"string"},"source":{"type":"object","properties":{"pointer":{"type":"string"},"parameter":{"type":"string"},"header":{"type":"string"}}}},"required":["status"]}}},"required":["errors"]}}}},"404":{"description":"Edition, session type, track or uploaded file not found (missing_file, whose meta echoes the upload's key and the attribute or customFieldId it was sent for)","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"errors":{"type":"array","minItems":1,"items":{"type":"object","properties":{"status":{"type":"string","description":"HTTP status code"},"code":{"type":"string"},"title":{"type":"string"},"detail":{"type":"string"},"source":{"type":"object","properties":{"pointer":{"type":"string"},"parameter":{"type":"string"},"header":{"type":"string"}}}},"required":["status"]}}},"required":["errors"]}}}},"422":{"description":"Unprocessable request (missing_responses, inapplicable_response, frozen_response, unknown_custom_field, duplicate_response, invalid_responses, incomplete_profile, session_fields_changed, unsupported_image_type, image_type_mismatch, image_file_too_large, image_too_small, image_too_large, aspect_ratio_mismatch, animated_image)","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"errors":{"type":"array","minItems":1,"items":{"type":"object","properties":{"status":{"type":"string","description":"HTTP status code"},"code":{"type":"string"},"title":{"type":"string"},"detail":{"type":"string"},"source":{"type":"object","properties":{"pointer":{"type":"string"},"parameter":{"type":"string"},"header":{"type":"string"}}}},"required":["status"]}}},"required":["errors"]}}}}}}},"/editions/{editionId}/sessions/{sessionId}":{"get":{"tags":["Sessions"],"summary":"Retrieve a session","description":"Retrieves a session with its hosts, track, session type and responses. Open to any authenticated user; those without global read access may read only sessions they host, and are refused with 403 otherwise. Responses to confidential custom fields are filtered by caller, and a withheld one is absent from linkage too.","operationId":"showSession","parameters":[{"name":"editionId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"sessionId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"OK","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"session"},"attributes":{"type":"object","properties":{"createdAt":{"type":"string","format":"date-time"},"state":{"type":"string","enum":["submitted","accepted","confirmed","rejected","withdrawn","canceled"]},"title":{"type":["string"],"minLength":1},"abstract":{"type":["string"]},"description":{"type":["string"]},"notes":{"type":["string"]},"duration":{"oneOf":[{"type":"string","title":"Duration","format":"duration","example":"PT1H"},{"type":"null"}]},"setupTime":{"oneOf":[{"type":"string","title":"Duration","format":"duration","example":"PT1H"},{"type":"null"}]},"teardownTime":{"oneOf":[{"type":"string","title":"Duration","format":"duration","example":"PT1H"},{"type":"null"}]},"teaserImage":{"type":["object","null"],"properties":{"key":{"type":"string"},"filename":{"type":"string"},"url":{"type":"string","format":"uri"},"thumbnailUrl":{"type":"string","format":"uri"},"processing":{"type":"boolean","description":"True while the uploaded original is still what both urls serve. A downscaled version replaces them shortly after, so a poller can skip fetching the image until this turns false."}},"required":["key","filename","url","thumbnailUrl","processing"],"additionalProperties":false}},"required":["createdAt","state","title","abstract","description","notes","duration","setupTime","teardownTime","teaserImage"],"additionalProperties":false},"relationships":{"type":"object","properties":{"hosts":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"host"}},"required":["id","type"]}}},"required":["data"]},"sessionType":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"session_type"}},"required":["id","type"]}},"required":["data"]},"track":{"type":"object","properties":{"data":{"oneOf":[{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"track"}},"required":["id","type"]},{"type":"null"}]}},"required":["data"]},"responses":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"response"}},"required":["id","type"]}}},"required":["data"]}},"required":["hosts","sessionType","track","responses"]},"meta":{"type":"object","properties":{"hostTransitions":{"type":"array","items":{"type":"string","enum":["submitted","accepted","confirmed","rejected","withdrawn","canceled"]},"description":"States this caller may move the session to as a host of it, empty where they host it but may make no move, or do not host it at all."},"managerTransitions":{"type":"array","items":{"type":"string","enum":["submitted","accepted","confirmed","rejected","withdrawn","canceled"]},"description":"States this caller may move the session to as a manager, empty for everyone else. Scoped separately from hostTransitions so each surface offers the moves of the role it is for: an organizer who submitted their own session decides on it where they organize, not where they speak."},"hosting":{"type":"boolean","description":"Whether this caller hosts the session. Not derivable from the transition lists: a manager receives managerTransitions without hosting it, and a host may receive hostTransitions empty."}},"required":["hostTransitions","managerTransitions","hosting"],"additionalProperties":false}},"required":["id","type","attributes","relationships","meta"]},"included":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"host"},"attributes":{"type":"object","properties":{"displayName":{"type":"string","minLength":1},"emailAddress":{"type":"string","format":"email"},"biography":{"type":"string"},"avatar":{"type":["object","null"],"properties":{"key":{"type":"string"},"filename":{"type":"string"},"url":{"type":"string","format":"uri"},"thumbnailUrl":{"type":"string","format":"uri"},"processing":{"type":"boolean","description":"True while the uploaded original is still what both urls serve. A downscaled version replaces them shortly after, so a poller can skip fetching the image until this turns false."}},"required":["key","filename","url","thumbnailUrl","processing"],"additionalProperties":false}},"required":["displayName","biography","avatar"],"additionalProperties":false,"description":"emailAddress is only present for managers and admins."},"relationships":{"type":"object","properties":{"responses":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"response"}},"required":["id","type"]}}},"required":["data"]}},"required":["responses"]}},"required":["id","type","attributes","relationships"]},{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"session_type"},"attributes":{"type":"object","properties":{"name":{"type":"string","minLength":1},"externalKey":{"type":["string","null"],"minLength":1},"defaultDuration":{"type":"string","title":"Duration","format":"duration","example":"PT1H"},"internal":{"type":"boolean"},"selectionDefault":{"type":"boolean"}},"required":["name","externalKey","defaultDuration","internal","selectionDefault"],"additionalProperties":false}},"required":["id","type","attributes"]},{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"track"},"attributes":{"type":"object","properties":{"name":{"type":"string","minLength":1},"externalKey":{"type":["string","null"],"minLength":1},"description":{"type":"string"},"color":{"type":"string","format":"rgb","example":"#ff0000"},"internal":{"type":"boolean"}},"required":["name","externalKey","description","color","internal"],"additionalProperties":false}},"required":["id","type","attributes"]},{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"response"},"attributes":{"type":"object","properties":{"value":{}},"required":["value"],"additionalProperties":false},"relationships":{"type":"object","properties":{"customField":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"custom_field"}},"required":["id","type"]}},"required":["data"]}},"required":["customField"]}},"required":["id","type","attributes","relationships"]}]}}},"required":["data"]}}}},"403":{"description":"Forbidden","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"errors":{"type":"array","minItems":1,"items":{"type":"object","properties":{"status":{"type":"string","description":"HTTP status code"},"code":{"type":"string"},"title":{"type":"string"},"detail":{"type":"string"},"source":{"type":"object","properties":{"pointer":{"type":"string"},"parameter":{"type":"string"},"header":{"type":"string"}}}},"required":["status"]}}},"required":["errors"]}}}},"404":{"description":"Edition or session not found","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"errors":{"type":"array","minItems":1,"items":{"type":"object","properties":{"status":{"type":"string","description":"HTTP status code"},"code":{"type":"string"},"title":{"type":"string"},"detail":{"type":"string"},"source":{"type":"object","properties":{"pointer":{"type":"string"},"parameter":{"type":"string"},"header":{"type":"string"}}}},"required":["status"]}}},"required":["errors"]}}}}}},"patch":{"tags":["Sessions"],"summary":"Update a session","description":"Updates the session. An attribute or relationship that is left out keeps its stored value, while a `responses` relationship that is sent has to name every question that applies to the session after the update. A frozen one takes no new value from anyone: its stored answer has to be named by id, and one with no stored answer is left out; anything else for it is refused with frozen_response. A question that does not apply to the session after the update is treated the same way, refused with inapplicable_response. When `responses` is left out and the session type or track changes, the stored answers have to cover every question that applies afterward, frozen ones excepted, or the patch is refused with missing_responses. Requires an authenticated user who hosts the session, or the manager role. Hosts may only edit while the session is submitted and the deadline has not passed, or while it is accepted. `meta.selfService` is accepted for symmetry with the create route and ignored here, since hosting is read from the session. The documented attributes and relationships are the widest set: which built-in fields exist, and whether each one is optional or required, follows the edition's `sessionFieldOptions`, and a field the edition does not configure is rejected with session_fields_changed, as is a create that leaves out one it does. Responses travel as included `response` resources referenced by local id from the `responses` relationship. On an update, a stored answer can instead be referenced by its id, which keeps it as it is without its value being sent or validated again. Only an answer of this session can be referenced that way, including one whose question no longer applies to it.","operationId":"updateSession","parameters":[{"name":"editionId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"sessionId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":true,"content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"type":{"type":"string","const":"session"},"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"attributes":{"type":"object","properties":{"title":{"type":"string"},"abstract":{"type":"string"},"description":{"type":"string"},"notes":{"type":"string"},"duration":{"anyOf":[{"type":"string","format":"duration","examples":["PT1H"]},{"type":"null"}]},"setupTime":{"anyOf":[{"type":"string","format":"duration","examples":["PT1H"]},{"type":"null"}]},"teardownTime":{"anyOf":[{"type":"string","format":"duration","examples":["PT1H"]},{"type":"null"}]},"teaserImage":{"anyOf":[{"type":"object","properties":{"key":{"type":"string","minLength":1,"maxLength":255,"pattern":"^temp\\/[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}\\.[a-z0-9]+$"},"filename":{"type":"string","minLength":1,"maxLength":255,"pattern":"^[^\\p{Cc}\\u2028\\u2029\\u202a-\\u202e\\u2066-\\u2069]+$"}},"required":["key","filename"],"additionalProperties":false},{"type":"null"}]}},"additionalProperties":false},"relationships":{"type":"object","properties":{"sessionType":{"type":"object","properties":{"data":{"type":"object","properties":{"type":{"type":"string","const":"session_type"},"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"required":["type","id"],"additionalProperties":false}},"required":["data"],"additionalProperties":false},"responses":{"type":"object","properties":{"data":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","const":"response"},"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"required":["type","id"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","const":"response"},"lid":{"type":"string"}},"required":["type","lid"],"additionalProperties":false}]}}},"required":["data"],"additionalProperties":false},"track":{"type":"object","properties":{"data":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","const":"track"},"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"required":["type","id"],"additionalProperties":false},{"type":"null"}]}},"required":["data"],"additionalProperties":false}},"additionalProperties":false},"meta":{"default":{},"type":"object","properties":{"selfService":{"default":false,"type":"boolean"}},"additionalProperties":false}},"required":["type","id"],"additionalProperties":false},"included":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","const":"response"},"lid":{"type":"string"},"attributes":{"type":"object","properties":{"value":{}},"required":["value"],"additionalProperties":false},"relationships":{"type":"object","properties":{"customField":{"type":"object","properties":{"data":{"type":"object","properties":{"type":{"type":"string","const":"custom_field"},"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"required":["type","id"],"additionalProperties":false}},"required":["data"],"additionalProperties":false}},"required":["customField"],"additionalProperties":false}},"required":["type","lid","attributes","relationships"],"additionalProperties":false}]}}},"required":["data"],"additionalProperties":false}}}},"responses":{"200":{"description":"OK","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"session"},"attributes":{"type":"object","properties":{"createdAt":{"type":"string","format":"date-time"},"state":{"type":"string","enum":["submitted","accepted","confirmed","rejected","withdrawn","canceled"]},"title":{"type":["string"],"minLength":1},"abstract":{"type":["string"]},"description":{"type":["string"]},"notes":{"type":["string"]},"duration":{"oneOf":[{"type":"string","title":"Duration","format":"duration","example":"PT1H"},{"type":"null"}]},"setupTime":{"oneOf":[{"type":"string","title":"Duration","format":"duration","example":"PT1H"},{"type":"null"}]},"teardownTime":{"oneOf":[{"type":"string","title":"Duration","format":"duration","example":"PT1H"},{"type":"null"}]},"teaserImage":{"type":["object","null"],"properties":{"key":{"type":"string"},"filename":{"type":"string"},"url":{"type":"string","format":"uri"},"thumbnailUrl":{"type":"string","format":"uri"},"processing":{"type":"boolean","description":"True while the uploaded original is still what both urls serve. A downscaled version replaces them shortly after, so a poller can skip fetching the image until this turns false."}},"required":["key","filename","url","thumbnailUrl","processing"],"additionalProperties":false}},"required":["createdAt","state","title","abstract","description","notes","duration","setupTime","teardownTime","teaserImage"],"additionalProperties":false},"relationships":{"type":"object","properties":{"hosts":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"host"}},"required":["id","type"]}}},"required":["data"]},"sessionType":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"session_type"}},"required":["id","type"]}},"required":["data"]},"track":{"type":"object","properties":{"data":{"oneOf":[{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"track"}},"required":["id","type"]},{"type":"null"}]}},"required":["data"]},"responses":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"response"}},"required":["id","type"]}}},"required":["data"]}},"required":["hosts","sessionType","track","responses"]},"meta":{"type":"object","properties":{"hostTransitions":{"type":"array","items":{"type":"string","enum":["submitted","accepted","confirmed","rejected","withdrawn","canceled"]},"description":"States this caller may move the session to as a host of it, empty where they host it but may make no move, or do not host it at all."},"managerTransitions":{"type":"array","items":{"type":"string","enum":["submitted","accepted","confirmed","rejected","withdrawn","canceled"]},"description":"States this caller may move the session to as a manager, empty for everyone else. Scoped separately from hostTransitions so each surface offers the moves of the role it is for: an organizer who submitted their own session decides on it where they organize, not where they speak."},"hosting":{"type":"boolean","description":"Whether this caller hosts the session. Not derivable from the transition lists: a manager receives managerTransitions without hosting it, and a host may receive hostTransitions empty."}},"required":["hostTransitions","managerTransitions","hosting"],"additionalProperties":false}},"required":["id","type","attributes","relationships","meta"]},"included":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"host"},"attributes":{"type":"object","properties":{"displayName":{"type":"string","minLength":1},"emailAddress":{"type":"string","format":"email"},"biography":{"type":"string"},"avatar":{"type":["object","null"],"properties":{"key":{"type":"string"},"filename":{"type":"string"},"url":{"type":"string","format":"uri"},"thumbnailUrl":{"type":"string","format":"uri"},"processing":{"type":"boolean","description":"True while the uploaded original is still what both urls serve. A downscaled version replaces them shortly after, so a poller can skip fetching the image until this turns false."}},"required":["key","filename","url","thumbnailUrl","processing"],"additionalProperties":false}},"required":["displayName","biography","avatar"],"additionalProperties":false,"description":"emailAddress is only present for managers and admins."},"relationships":{"type":"object","properties":{"responses":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"response"}},"required":["id","type"]}}},"required":["data"]}},"required":["responses"]}},"required":["id","type","attributes","relationships"]},{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"session_type"},"attributes":{"type":"object","properties":{"name":{"type":"string","minLength":1},"externalKey":{"type":["string","null"],"minLength":1},"defaultDuration":{"type":"string","title":"Duration","format":"duration","example":"PT1H"},"internal":{"type":"boolean"},"selectionDefault":{"type":"boolean"}},"required":["name","externalKey","defaultDuration","internal","selectionDefault"],"additionalProperties":false}},"required":["id","type","attributes"]},{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"track"},"attributes":{"type":"object","properties":{"name":{"type":"string","minLength":1},"externalKey":{"type":["string","null"],"minLength":1},"description":{"type":"string"},"color":{"type":"string","format":"rgb","example":"#ff0000"},"internal":{"type":"boolean"}},"required":["name","externalKey","description","color","internal"],"additionalProperties":false}},"required":["id","type","attributes"]},{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"response"},"attributes":{"type":"object","properties":{"value":{}},"required":["value"],"additionalProperties":false},"relationships":{"type":"object","properties":{"customField":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"custom_field"}},"required":["id","type"]}},"required":["data"]}},"required":["customField"]}},"required":["id","type","attributes","relationships"]}]}}},"required":["data"]}}}},"403":{"description":"Forbidden (forbidden, not_editable)","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"errors":{"type":"array","minItems":1,"items":{"type":"object","properties":{"status":{"type":"string","description":"HTTP status code"},"code":{"type":"string"},"title":{"type":"string"},"detail":{"type":"string"},"source":{"type":"object","properties":{"pointer":{"type":"string"},"parameter":{"type":"string"},"header":{"type":"string"}}}},"required":["status"]}}},"required":["errors"]}}}},"404":{"description":"Edition, session, session type, track or uploaded file not found (missing_file, whose meta echoes the upload's key and the attribute or customFieldId it was sent for)","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"errors":{"type":"array","minItems":1,"items":{"type":"object","properties":{"status":{"type":"string","description":"HTTP status code"},"code":{"type":"string"},"title":{"type":"string"},"detail":{"type":"string"},"source":{"type":"object","properties":{"pointer":{"type":"string"},"parameter":{"type":"string"},"header":{"type":"string"}}}},"required":["status"]}}},"required":["errors"]}}}},"422":{"description":"Unprocessable request (missing_responses, inapplicable_response, frozen_response, unknown_custom_field, unknown_response, duplicate_response, invalid_responses, session_fields_changed, unsupported_image_type, image_type_mismatch, image_file_too_large, image_too_small, image_too_large, aspect_ratio_mismatch, animated_image)","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"errors":{"type":"array","minItems":1,"items":{"type":"object","properties":{"status":{"type":"string","description":"HTTP status code"},"code":{"type":"string"},"title":{"type":"string"},"detail":{"type":"string"},"source":{"type":"object","properties":{"pointer":{"type":"string"},"parameter":{"type":"string"},"header":{"type":"string"}}}},"required":["status"]}}},"required":["errors"]}}}}}},"delete":{"tags":["Sessions"],"summary":"Delete a session","description":"Deletes a session that is still submitted and has no transition history. Any other session has to be canceled, rejected or withdrawn instead. Requires the manager role.","operationId":"deleteSession","parameters":[{"name":"editionId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"sessionId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"204":{"description":"No content"},"403":{"description":"Forbidden","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"errors":{"type":"array","minItems":1,"items":{"type":"object","properties":{"status":{"type":"string","description":"HTTP status code"},"code":{"type":"string"},"title":{"type":"string"},"detail":{"type":"string"},"source":{"type":"object","properties":{"pointer":{"type":"string"},"parameter":{"type":"string"},"header":{"type":"string"}}}},"required":["status"]}}},"required":["errors"]}}}},"404":{"description":"Edition or session not found","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"errors":{"type":"array","minItems":1,"items":{"type":"object","properties":{"status":{"type":"string","description":"HTTP status code"},"code":{"type":"string"},"title":{"type":"string"},"detail":{"type":"string"},"source":{"type":"object","properties":{"pointer":{"type":"string"},"parameter":{"type":"string"},"header":{"type":"string"}}}},"required":["status"]}}},"required":["errors"]}}}},"409":{"description":"Conflict (not_deletable, entity_in_use)","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"errors":{"type":"array","minItems":1,"items":{"type":"object","properties":{"status":{"type":"string","description":"HTTP status code"},"code":{"type":"string"},"title":{"type":"string"},"detail":{"type":"string"},"source":{"type":"object","properties":{"pointer":{"type":"string"},"parameter":{"type":"string"},"header":{"type":"string"}}}},"required":["status"]}}},"required":["errors"]}}}}}}},"/editions/{editionId}/sessions/{sessionId}/relationships/hosts":{"delete":{"tags":["Sessions"],"summary":"Remove session hosts","description":"Removes the given hosts from the session. Requires the manager role: a host adds a co-host by invite and detaches nobody, so a session cannot be left without hosts by anyone but an organizer.","operationId":"removeSessionHosts","parameters":[{"name":"editionId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"sessionId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":true,"content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"type":{"const":"host"},"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"required":["id","type"],"additionalProperties":false}}},"required":["data"],"additionalProperties":false}}}},"responses":{"204":{"description":"No content"},"403":{"description":"Forbidden","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"errors":{"type":"array","minItems":1,"items":{"type":"object","properties":{"status":{"type":"string","description":"HTTP status code"},"code":{"type":"string"},"title":{"type":"string"},"detail":{"type":"string"},"source":{"type":"object","properties":{"pointer":{"type":"string"},"parameter":{"type":"string"},"header":{"type":"string"}}}},"required":["status"]}}},"required":["errors"]}}}},"404":{"description":"Edition or session not found","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"errors":{"type":"array","minItems":1,"items":{"type":"object","properties":{"status":{"type":"string","description":"HTTP status code"},"code":{"type":"string"},"title":{"type":"string"},"detail":{"type":"string"},"source":{"type":"object","properties":{"pointer":{"type":"string"},"parameter":{"type":"string"},"header":{"type":"string"}}}},"required":["status"]}}},"required":["errors"]}}}},"422":{"description":"Unprocessable request","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"errors":{"type":"array","minItems":1,"items":{"type":"object","properties":{"status":{"type":"string","description":"HTTP status code"},"code":{"type":"string"},"title":{"type":"string"},"detail":{"type":"string"},"source":{"type":"object","properties":{"pointer":{"type":"string"},"parameter":{"type":"string"},"header":{"type":"string"}}}},"required":["status"]}}},"required":["errors"]}}}}}}},"/editions/{editionId}/sessions/{sessionId}/transitions":{"get":{"tags":["Session Transitions"],"summary":"List session transitions","description":"Lists the session's state changes in chronological order. Requires an authenticated user who hosts the session, or the manager role. The actor is included under their display name alone, and is null where the change had none.","operationId":"listSessionTransitions","parameters":[{"name":"editionId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"sessionId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"OK","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"session_transition"},"attributes":{"type":"object","properties":{"createdAt":{"type":"string","format":"date-time"},"fromState":{"type":"string","enum":["submitted","accepted","confirmed","rejected","withdrawn","canceled"]},"toState":{"type":"string","enum":["submitted","accepted","confirmed","rejected","withdrawn","canceled"]},"note":{"type":["string","null"]}},"required":["createdAt","fromState","toState","note"],"additionalProperties":false},"relationships":{"type":"object","properties":{"session":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"session"}},"required":["id","type"]}},"required":["data"]},"actor":{"type":"object","properties":{"data":{"oneOf":[{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"user"}},"required":["id","type"]},{"type":"null"}]}},"required":["data"]}},"required":["session","actor"]}},"required":["id","type","attributes","relationships"]}},"included":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"user"},"attributes":{"type":"object","properties":{"displayName":{"type":"string","minLength":1}},"required":["displayName"],"additionalProperties":false}},"required":["id","type","attributes"]}]}}},"required":["data"]}}}},"403":{"description":"Forbidden","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"errors":{"type":"array","minItems":1,"items":{"type":"object","properties":{"status":{"type":"string","description":"HTTP status code"},"code":{"type":"string"},"title":{"type":"string"},"detail":{"type":"string"},"source":{"type":"object","properties":{"pointer":{"type":"string"},"parameter":{"type":"string"},"header":{"type":"string"}}}},"required":["status"]}}},"required":["errors"]}}}},"404":{"description":"Edition or session not found","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"errors":{"type":"array","minItems":1,"items":{"type":"object","properties":{"status":{"type":"string","description":"HTTP status code"},"code":{"type":"string"},"title":{"type":"string"},"detail":{"type":"string"},"source":{"type":"object","properties":{"pointer":{"type":"string"},"parameter":{"type":"string"},"header":{"type":"string"}}}},"required":["status"]}}},"required":["errors"]}}}}}},"post":{"tags":["Session Transitions"],"summary":"Transition a session","description":"Moves the session into another state and records the transition with an optional note. Requires an authenticated user who hosts the session, or the manager role; Allowed targets depend on the current state and the caller: a submitted session is accepted or rejected by a manager and withdrawn by a host; an accepted one is confirmed or canceled by either and sent back to submitted by a manager; a confirmed one is canceled by either and reopened to accepted by a manager; rejected, withdrawn and canceled sessions are revived by a manager only. Rejecting mails every host, and so does accepting, except returning a confirmed session to accepted, which mails nobody. Leaving a slottable state keeps the session's slots in the draft schedule, where they cannot be reshaped until the session is slottable again.","operationId":"transitionSession","parameters":[{"name":"editionId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"sessionId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":true,"content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"type":{"type":"string","const":"session_transition"},"attributes":{"type":"object","properties":{"state":{"type":"string","enum":["submitted","accepted","confirmed","rejected","withdrawn","canceled"]},"note":{"anyOf":[{"type":"string","minLength":1,"maxLength":2000},{"type":"null"}]}},"required":["state"],"additionalProperties":false}},"required":["type","attributes"],"additionalProperties":false}},"required":["data"],"additionalProperties":false}}}},"responses":{"201":{"description":"Created","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"session_transition"},"attributes":{"type":"object","properties":{"createdAt":{"type":"string","format":"date-time"},"fromState":{"type":"string","enum":["submitted","accepted","confirmed","rejected","withdrawn","canceled"]},"toState":{"type":"string","enum":["submitted","accepted","confirmed","rejected","withdrawn","canceled"]},"note":{"type":["string","null"]}},"required":["createdAt","fromState","toState","note"],"additionalProperties":false},"relationships":{"type":"object","properties":{"session":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"session"}},"required":["id","type"]}},"required":["data"]},"actor":{"type":"object","properties":{"data":{"oneOf":[{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"user"}},"required":["id","type"]},{"type":"null"}]}},"required":["data"]}},"required":["session","actor"]}},"required":["id","type","attributes","relationships"]}},"required":["data"]}}}},"403":{"description":"Forbidden; users not involved with the session get this before any state is disclosed","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"errors":{"type":"array","minItems":1,"items":{"type":"object","properties":{"status":{"type":"string","description":"HTTP status code"},"code":{"type":"string"},"title":{"type":"string"},"detail":{"type":"string"},"source":{"type":"object","properties":{"pointer":{"type":"string"},"parameter":{"type":"string"},"header":{"type":"string"}}}},"required":["status"]}}},"required":["errors"]}}}},"404":{"description":"Edition or session not found","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"errors":{"type":"array","minItems":1,"items":{"type":"object","properties":{"status":{"type":"string","description":"HTTP status code"},"code":{"type":"string"},"title":{"type":"string"},"detail":{"type":"string"},"source":{"type":"object","properties":{"pointer":{"type":"string"},"parameter":{"type":"string"},"header":{"type":"string"}}}},"required":["status"]}}},"required":["errors"]}}}},"409":{"description":"Illegal transition (illegal_transition)","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"errors":{"type":"array","minItems":1,"items":{"type":"object","properties":{"status":{"type":"string","description":"HTTP status code"},"code":{"type":"string"},"title":{"type":"string"},"detail":{"type":"string"},"source":{"type":"object","properties":{"pointer":{"type":"string"},"parameter":{"type":"string"},"header":{"type":"string"}}}},"required":["status"]}}},"required":["errors"]}}}},"422":{"description":"Unprocessable request","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"errors":{"type":"array","minItems":1,"items":{"type":"object","properties":{"status":{"type":"string","description":"HTTP status code"},"code":{"type":"string"},"title":{"type":"string"},"detail":{"type":"string"},"source":{"type":"object","properties":{"pointer":{"type":"string"},"parameter":{"type":"string"},"header":{"type":"string"}}}},"required":["status"]}}},"required":["errors"]}}}}}}},"/editions/{editionId}/sessions/{sessionId}/host-invites":{"get":{"tags":["Session Host Invites"],"summary":"List session host invites","description":"Lists the invites pending for the session, oldest first. Requires an authenticated user who hosts the session, or the manager role.","operationId":"listSessionHostInvites","parameters":[{"name":"editionId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"sessionId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"OK","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"session_host_invite"},"attributes":{"type":"object","properties":{"createdAt":{"type":"string","format":"date-time"},"emailAddress":{"type":"string","format":"email"}},"required":["createdAt","emailAddress"],"additionalProperties":false},"relationships":{"type":"object","properties":{"session":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"session"}},"required":["id","type"]}},"required":["data"]}},"required":["session"]}},"required":["id","type","attributes","relationships"]}}},"required":["data"]}}}},"403":{"description":"Forbidden","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"errors":{"type":"array","minItems":1,"items":{"type":"object","properties":{"status":{"type":"string","description":"HTTP status code"},"code":{"type":"string"},"title":{"type":"string"},"detail":{"type":"string"},"source":{"type":"object","properties":{"pointer":{"type":"string"},"parameter":{"type":"string"},"header":{"type":"string"}}}},"required":["status"]}}},"required":["errors"]}}}},"404":{"description":"Edition or session not found","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"errors":{"type":"array","minItems":1,"items":{"type":"object","properties":{"status":{"type":"string","description":"HTTP status code"},"code":{"type":"string"},"title":{"type":"string"},"detail":{"type":"string"},"source":{"type":"object","properties":{"pointer":{"type":"string"},"parameter":{"type":"string"},"header":{"type":"string"}}}},"required":["status"]}}},"required":["errors"]}}}}}},"post":{"tags":["Session Host Invites"],"summary":"Invite a session host","description":"Invites an email address to co-host the session and mails it an acceptance link. Requires an authenticated user who hosts the session, or the manager role; hosts can only invite while the session is submitted or accepted. An expired invite to the same address is replaced, a pending one is not.","operationId":"inviteSessionHost","parameters":[{"name":"editionId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"sessionId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":true,"content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"type":{"type":"string","const":"session_host_invite"},"attributes":{"type":"object","properties":{"emailAddress":{"type":"string","maxLength":254,"format":"email","pattern":"^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"}},"required":["emailAddress"]}},"required":["type","attributes"],"additionalProperties":false}},"required":["data"],"additionalProperties":false}}}},"responses":{"201":{"description":"Created","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"session_host_invite"},"attributes":{"type":"object","properties":{"createdAt":{"type":"string","format":"date-time"},"emailAddress":{"type":"string","format":"email"}},"required":["createdAt","emailAddress"],"additionalProperties":false},"relationships":{"type":"object","properties":{"session":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"session"}},"required":["id","type"]}},"required":["data"]}},"required":["session"]}},"required":["id","type","attributes","relationships"]}},"required":["data"]}}}},"403":{"description":"Forbidden (forbidden, session_frozen)","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"errors":{"type":"array","minItems":1,"items":{"type":"object","properties":{"status":{"type":"string","description":"HTTP status code"},"code":{"type":"string"},"title":{"type":"string"},"detail":{"type":"string"},"source":{"type":"object","properties":{"pointer":{"type":"string"},"parameter":{"type":"string"},"header":{"type":"string"}}}},"required":["status"]}}},"required":["errors"]}}}},"404":{"description":"Edition or session not found","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"errors":{"type":"array","minItems":1,"items":{"type":"object","properties":{"status":{"type":"string","description":"HTTP status code"},"code":{"type":"string"},"title":{"type":"string"},"detail":{"type":"string"},"source":{"type":"object","properties":{"pointer":{"type":"string"},"parameter":{"type":"string"},"header":{"type":"string"}}}},"required":["status"]}}},"required":["errors"]}}}},"409":{"description":"Invite exists (invite_exists)","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"errors":{"type":"array","minItems":1,"items":{"type":"object","properties":{"status":{"type":"string","description":"HTTP status code"},"code":{"type":"string"},"title":{"type":"string"},"detail":{"type":"string"},"source":{"type":"object","properties":{"pointer":{"type":"string"},"parameter":{"type":"string"},"header":{"type":"string"}}}},"required":["status"]}}},"required":["errors"]}}}},"422":{"description":"Unprocessable request","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"errors":{"type":"array","minItems":1,"items":{"type":"object","properties":{"status":{"type":"string","description":"HTTP status code"},"code":{"type":"string"},"title":{"type":"string"},"detail":{"type":"string"},"source":{"type":"object","properties":{"pointer":{"type":"string"},"parameter":{"type":"string"},"header":{"type":"string"}}}},"required":["status"]}}},"required":["errors"]}}}},"429":{"description":"Invite quota reached (invite_quota_reached)","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"errors":{"type":"array","minItems":1,"items":{"type":"object","properties":{"status":{"type":"string","description":"HTTP status code"},"code":{"type":"string"},"title":{"type":"string"},"detail":{"type":"string"},"source":{"type":"object","properties":{"pointer":{"type":"string"},"parameter":{"type":"string"},"header":{"type":"string"}}}},"required":["status"]}}},"required":["errors"]}}}}}}},"/editions/{editionId}/sessions/{sessionId}/host-invites/{inviteId}":{"delete":{"tags":["Session Host Invites"],"summary":"Revoke a session host invite","description":"Revokes a pending invite. Requires an authenticated user who hosts the session, or the manager role; unlike inviting, this stays possible in every session state.","operationId":"revokeSessionHostInvite","parameters":[{"name":"editionId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"sessionId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"inviteId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"204":{"description":"No content"},"403":{"description":"Forbidden","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"errors":{"type":"array","minItems":1,"items":{"type":"object","properties":{"status":{"type":"string","description":"HTTP status code"},"code":{"type":"string"},"title":{"type":"string"},"detail":{"type":"string"},"source":{"type":"object","properties":{"pointer":{"type":"string"},"parameter":{"type":"string"},"header":{"type":"string"}}}},"required":["status"]}}},"required":["errors"]}}}},"404":{"description":"Edition, session or invite not found","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"errors":{"type":"array","minItems":1,"items":{"type":"object","properties":{"status":{"type":"string","description":"HTTP status code"},"code":{"type":"string"},"title":{"type":"string"},"detail":{"type":"string"},"source":{"type":"object","properties":{"pointer":{"type":"string"},"parameter":{"type":"string"},"header":{"type":"string"}}}},"required":["status"]}}},"required":["errors"]}}}}}}},"/session-host-invites/{code}":{"get":{"tags":["Session Host Invites"],"summary":"Preview a session host invite","description":"Describes what an invite code grants, so the acceptance page can name the session and look up what the edition asks of a host, before the user accepts. Requires an authenticated user whose email address matches the invite, and refuses a session that no longer takes new hosts, as the acceptance does.","operationId":"previewSessionHostInvite","parameters":[{"name":"code","in":"path","required":true,"schema":{"type":"string","format":"uuid"},"description":"The invite code from the invite email"}],"responses":{"200":{"description":"OK","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"session_host_invite_preview"},"attributes":{"type":"object","properties":{"emailAddress":{"type":"string","format":"email"},"expiresAt":{"type":"string","format":"date-time"}},"required":["emailAddress","expiresAt"],"additionalProperties":false},"relationships":{"type":"object","properties":{"session":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"session"}},"required":["id","type"]}},"required":["data"]},"edition":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"edition"}},"required":["id","type"]}},"required":["data"]}},"required":["session","edition"]}},"required":["id","type","attributes","relationships"]},"included":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"session"},"attributes":{"type":"object","properties":{"title":{"type":"string"}},"required":["title"],"additionalProperties":false}},"required":["id","type","attributes"]},{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"edition"},"attributes":{"type":"object","properties":{"name":{"type":"string"}},"required":["name"],"additionalProperties":false}},"required":["id","type","attributes"]}]}}},"required":["data"]}}}},"403":{"description":"Forbidden (invalid_code, invite_expired, invite_email_mismatch)","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"errors":{"type":"array","minItems":1,"items":{"type":"object","properties":{"status":{"type":"string","description":"HTTP status code"},"code":{"type":"string"},"title":{"type":"string"},"detail":{"type":"string"},"source":{"type":"object","properties":{"pointer":{"type":"string"},"parameter":{"type":"string"},"header":{"type":"string"}}}},"required":["status"]}}},"required":["errors"]}}}},"409":{"description":"Session takes no new hosts (session_not_acceptable)","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"errors":{"type":"array","minItems":1,"items":{"type":"object","properties":{"status":{"type":"string","description":"HTTP status code"},"code":{"type":"string"},"title":{"type":"string"},"detail":{"type":"string"},"source":{"type":"object","properties":{"pointer":{"type":"string"},"parameter":{"type":"string"},"header":{"type":"string"}}}},"required":["status"]}}},"required":["errors"]}}}}}}},"/session-host-invites/{code}/acceptance":{"post":{"tags":["Session Host Invites"],"summary":"Accept a session host invite","description":"Accepts an invite by its code and adds the calling user to the session's hosts. Requires an authenticated user whose email address matches the invite, and the profile the edition asks them for to be complete; the session must still be submitted, accepted or confirmed.","operationId":"acceptSessionHostInvite","parameters":[{"name":"code","in":"path","required":true,"schema":{"type":"string","format":"uuid"},"description":"The invite code from the invite email"}],"responses":{"204":{"description":"No content"},"403":{"description":"Forbidden (invalid_code, invite_expired, invite_email_mismatch)","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"errors":{"type":"array","minItems":1,"items":{"type":"object","properties":{"status":{"type":"string","description":"HTTP status code"},"code":{"type":"string"},"title":{"type":"string"},"detail":{"type":"string"},"source":{"type":"object","properties":{"pointer":{"type":"string"},"parameter":{"type":"string"},"header":{"type":"string"}}}},"required":["status"]}}},"required":["errors"]}}}},"409":{"description":"Session takes no new hosts (session_not_acceptable)","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"errors":{"type":"array","minItems":1,"items":{"type":"object","properties":{"status":{"type":"string","description":"HTTP status code"},"code":{"type":"string"},"title":{"type":"string"},"detail":{"type":"string"},"source":{"type":"object","properties":{"pointer":{"type":"string"},"parameter":{"type":"string"},"header":{"type":"string"}}}},"required":["status"]}}},"required":["errors"]}}}},"422":{"description":"Unprocessable request (incomplete_profile)","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"errors":{"type":"array","minItems":1,"items":{"type":"object","properties":{"status":{"type":"string","description":"HTTP status code"},"code":{"type":"string"},"title":{"type":"string"},"detail":{"type":"string"},"source":{"type":"object","properties":{"pointer":{"type":"string"},"parameter":{"type":"string"},"header":{"type":"string"}}}},"required":["status"]}}},"required":["errors"]}}}}}}},"/editions/{editionId}/schedules":{"get":{"tags":["Schedules"],"summary":"List schedules","description":"Lists the schedules of an edition, newest first. Requires the viewer role. Carries a resource identifier per slot of each schedule, so a client that does not need them should name the fields it wants: `fields[schedule]` both narrows the document and stops the slots being read at all.","operationId":"listSchedules","parameters":[{"name":"editionId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"fields","in":"query","style":"deepObject","schema":{"type":"object","properties":{"schedule":{"type":"string","description":"Comma-separated list of fields to include for this type. Leave empty to omit all fields. Allowed fields are: `createdAt`, `publishedAt`, `startDate`, `endDate`, `timeZone`, `preliminary`, `edition`, `slots`"}},"additionalProperties":false}}],"responses":{"200":{"description":"OK","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"schedule"},"attributes":{"type":"object","properties":{"createdAt":{"type":"string","format":"date-time"},"publishedAt":{"type":["string","null"],"format":"date-time"},"startDate":{"type":["string","null"],"format":"date","description":"The window this schedule was published for, together with endDate and timeZone. Set when publishedAt is, and never after: a publication records what was announced, and the edition is free to move away from it. Null on a draft, whose window is the edition's current one."},"endDate":{"type":["string","null"],"format":"date"},"timeZone":{"type":["string","null"],"description":"The zone the slot instants of this publication were laid out in. Read them against this rather than the edition's, which may have changed since."},"preliminary":{"type":"boolean","description":"Whether this publication is provisional. Only meaningful once publishedAt is set, and never true for a publication that follows a final one."}},"required":["createdAt","publishedAt","startDate","endDate","timeZone","preliminary"],"additionalProperties":false},"relationships":{"type":"object","properties":{"edition":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"edition"}},"required":["id","type"]}},"required":["data"]},"slots":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"slot"}},"required":["id","type"]}}},"required":["data"]}},"required":["edition","slots"]}},"required":["id","type","attributes","relationships"]}}},"required":["data"]}}}},"403":{"description":"Forbidden","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"errors":{"type":"array","minItems":1,"items":{"type":"object","properties":{"status":{"type":"string","description":"HTTP status code"},"code":{"type":"string"},"title":{"type":"string"},"detail":{"type":"string"},"source":{"type":"object","properties":{"pointer":{"type":"string"},"parameter":{"type":"string"},"header":{"type":"string"}}}},"required":["status"]}}},"required":["errors"]}}}},"404":{"description":"Edition not found","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"errors":{"type":"array","minItems":1,"items":{"type":"object","properties":{"status":{"type":"string","description":"HTTP status code"},"code":{"type":"string"},"title":{"type":"string"},"detail":{"type":"string"},"source":{"type":"object","properties":{"pointer":{"type":"string"},"parameter":{"type":"string"},"header":{"type":"string"}}}},"required":["status"]}}},"required":["errors"]}}}}}}},"/editions/{editionId}/schedules/current":{"get":{"tags":["Schedules"],"summary":"Show the current schedule","description":"Retrieves the most recent publication of an edition, preliminary or final. This is the route an integration reads. Requires the viewer role or an integration token; the latter sees slots for confirmed sessions only and is the only caller given a validator.\n\nThe document is a complete snapshot rather than a delta: anything absent from a fresh fetch is gone, and there is no tombstone saying so. Match slots against a previously held copy by `stableId`, since `id` changes on every publication, and everything else by `id`. The validator covers this document alone. Other routes an integration reads, the edition and the location, venue, track, session type and custom field lists, carry no validator and can change without moving it, so refetch those unconditionally.","operationId":"showCurrentSchedule","parameters":[{"name":"editionId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"If-None-Match","in":"header","required":false,"description":"A validator from an earlier read of this route. Answers 304 when it still holds, without building the document. Honored for integration tokens only.","schema":{"type":"string"}},{"name":"include","in":"query","schema":{"type":"array","items":{"type":"string","enum":["slots","slots.location","slots.location.venue","slots.session","slots.session.responses","slots.session.responses.customField","slots.session.hosts","slots.session.hosts.responses","slots.session.hosts.responses.customField","slots.session.track","slots.session.sessionType"]},"default":["slots"]}},{"name":"fields","in":"query","style":"deepObject","schema":{"type":"object","properties":{"schedule":{"type":"string","description":"Comma-separated list of fields to include for this type. Leave empty to omit all fields. Allowed fields are: `createdAt`, `publishedAt`, `startDate`, `endDate`, `timeZone`, `preliminary`, `edition`, `slots`"},"edition":{"type":"string","description":"Comma-separated list of fields to include for this type. Leave empty to omit all fields. Allowed fields are: `name`, `startDate`, `endDate`, `timeZone`, `submissionDeadline`, `sessionFieldOptions`, `profileFieldOptions`"},"slot":{"type":"string","description":"Comma-separated list of fields to include for this type. Leave empty to omit all fields. Allowed fields are: `stableId`, `startsAt`, `endsAt`, `setupTime`, `teardownTime`, `session`, `location`"},"location":{"type":"string","description":"Comma-separated list of fields to include for this type. Leave empty to omit all fields. Allowed fields are: `name`, `externalKey`, `position`, `venue`"},"venue":{"type":"string","description":"Comma-separated list of fields to include for this type. Leave empty to omit all fields. Allowed fields are: `name`, `address`, `externalKey`, `position`"},"session":{"type":"string","description":"Comma-separated list of fields to include for this type. Leave empty to omit all fields. Allowed fields are: `createdAt`, `state`, `title`, `abstract`, `description`, `notes`, `duration`, `setupTime`, `teardownTime`, `teaserImage`, `hosts`, `sessionType`, `track`, `responses`"},"host":{"type":"string","description":"Comma-separated list of fields to include for this type. Leave empty to omit all fields. Allowed fields are: `displayName`, `emailAddress`, `biography`, `avatar`, `responses`"},"response":{"type":"string","description":"Comma-separated list of fields to include for this type. Leave empty to omit all fields. Allowed fields are: `value`, `customField`"},"custom_field":{"type":"string","description":"Comma-separated list of fields to include for this type. Leave empty to omit all fields. Allowed fields are: `externalKey`, `target`, `requirement`, `title`, `helperText`, `options`, `deadline`, `freezeAfter`, `confidential`, `position`"},"track":{"type":"string","description":"Comma-separated list of fields to include for this type. Leave empty to omit all fields. Allowed fields are: `name`, `externalKey`, `description`, `color`, `internal`"},"session_type":{"type":"string","description":"Comma-separated list of fields to include for this type. Leave empty to omit all fields. Allowed fields are: `name`, `externalKey`, `defaultDuration`, `internal`, `selectionDefault`"}},"additionalProperties":false}}],"responses":{"200":{"description":"OK","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"schedule"},"attributes":{"type":"object","properties":{"createdAt":{"type":"string","format":"date-time"},"publishedAt":{"type":["string","null"],"format":"date-time"},"startDate":{"type":["string","null"],"format":"date","description":"The window this schedule was published for, together with endDate and timeZone. Set when publishedAt is, and never after: a publication records what was announced, and the edition is free to move away from it. Null on a draft, whose window is the edition's current one."},"endDate":{"type":["string","null"],"format":"date"},"timeZone":{"type":["string","null"],"description":"The zone the slot instants of this publication were laid out in. Read them against this rather than the edition's, which may have changed since."},"preliminary":{"type":"boolean","description":"Whether this publication is provisional. Only meaningful once publishedAt is set, and never true for a publication that follows a final one."}},"required":["createdAt","publishedAt","startDate","endDate","timeZone","preliminary"],"additionalProperties":false},"relationships":{"type":"object","properties":{"edition":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"edition"}},"required":["id","type"]}},"required":["data"]},"slots":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"slot"}},"required":["id","type"]}}},"required":["data"]}},"required":["edition","slots"]}},"required":["id","type","attributes","relationships"]},"included":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"edition"},"attributes":{"type":"object","properties":{"name":{"type":"string","minLength":1},"startDate":{"type":"string","format":"date"},"endDate":{"type":"string","format":"date"},"timeZone":{"type":"string"},"submissionDeadline":{"type":["string","null"],"format":"date-time"},"sessionFieldOptions":{"type":"object","properties":{"title":{"type":"object","properties":{"label":{"type":"string","minLength":1},"helperText":{"type":"string","minLength":1},"position":{"type":"integer"},"minLength":{"type":"integer","minimum":1},"maxLength":{"type":"integer","minimum":1}},"additionalProperties":false},"sessionType":{"type":"object","properties":{"label":{"type":"string","minLength":1},"helperText":{"type":"string","minLength":1},"position":{"type":"integer"}},"additionalProperties":false},"abstract":{"type":"object","properties":{"label":{"type":"string","minLength":1},"helperText":{"type":"string","minLength":1},"position":{"type":"integer"},"requirement":{"type":"string","enum":["optional","required"]},"minLength":{"type":"integer","minimum":1},"maxLength":{"type":"integer","minimum":1}},"required":["requirement"],"additionalProperties":false},"description":{"type":"object","properties":{"label":{"type":"string","minLength":1},"helperText":{"type":"string","minLength":1},"position":{"type":"integer"},"requirement":{"type":"string","enum":["optional","required"]},"minLength":{"type":"integer","minimum":1},"maxLength":{"type":"integer","minimum":1}},"required":["requirement"],"additionalProperties":false},"notes":{"type":"object","properties":{"label":{"type":"string","minLength":1},"helperText":{"type":"string","minLength":1},"position":{"type":"integer"},"requirement":{"type":"string","enum":["optional","required"]},"minLength":{"type":"integer","minimum":1},"maxLength":{"type":"integer","minimum":1}},"required":["requirement"],"additionalProperties":false},"track":{"type":"object","properties":{"label":{"type":"string","minLength":1},"helperText":{"type":"string","minLength":1},"position":{"type":"integer"},"requirement":{"type":"string","enum":["optional","required"]}},"required":["requirement"],"additionalProperties":false},"duration":{"type":"object","properties":{"label":{"type":"string","minLength":1},"helperText":{"type":"string","minLength":1},"position":{"type":"integer"},"requirement":{"type":"string","enum":["optional","required"]}},"required":["requirement"],"additionalProperties":false},"setupTime":{"type":"object","properties":{"label":{"type":"string","minLength":1},"helperText":{"type":"string","minLength":1},"position":{"type":"integer"},"requirement":{"type":"string","enum":["optional","required"]}},"required":["requirement"],"additionalProperties":false},"teardownTime":{"type":"object","properties":{"label":{"type":"string","minLength":1},"helperText":{"type":"string","minLength":1},"position":{"type":"integer"},"requirement":{"type":"string","enum":["optional","required"]}},"required":["requirement"],"additionalProperties":false},"teaserImage":{"type":"object","properties":{"label":{"type":"string","minLength":1},"helperText":{"type":"string","minLength":1},"position":{"type":"integer"},"requirement":{"type":"string","enum":["optional","required"]},"minWidth":{"type":"integer","minimum":1,"maximum":16383},"minHeight":{"type":"integer","minimum":1,"maximum":16383},"maxWidth":{"type":"integer","minimum":1,"maximum":16383},"maxHeight":{"type":"integer","minimum":1,"maximum":16383},"aspectRatio":{"type":"object","properties":{"width":{"type":"integer","minimum":1},"height":{"type":"integer","minimum":1}},"required":["width","height"],"additionalProperties":false}},"required":["requirement"],"additionalProperties":false}},"additionalProperties":false},"profileFieldOptions":{"type":"object","properties":{"displayName":{"type":"object","properties":{"label":{"type":"string","minLength":1},"helperText":{"type":"string","minLength":1},"position":{"type":"integer"},"minLength":{"type":"integer","minimum":1},"maxLength":{"type":"integer","minimum":1}},"additionalProperties":false},"emailAddress":{"type":"object","properties":{"label":{"type":"string","minLength":1},"helperText":{"type":"string","minLength":1},"position":{"type":"integer"},"minLength":{"type":"integer","minimum":1},"maxLength":{"type":"integer","minimum":1}},"additionalProperties":false},"avatar":{"type":"object","properties":{"label":{"type":"string","minLength":1},"helperText":{"type":"string","minLength":1},"position":{"type":"integer"},"requirement":{"type":"string","enum":["optional","required"]}},"required":["requirement"],"additionalProperties":false},"biography":{"type":"object","properties":{"label":{"type":"string","minLength":1},"helperText":{"type":"string","minLength":1},"position":{"type":"integer"},"requirement":{"type":"string","enum":["optional","required"]},"minLength":{"type":"integer","minimum":1},"maxLength":{"type":"integer","minimum":1}},"required":["requirement"],"additionalProperties":false},"availability":{"type":"object","properties":{"label":{"type":"string","minLength":1},"helperText":{"type":"string","minLength":1},"position":{"type":"integer"},"requirement":{"type":"string","enum":["optional","required"]}},"required":["requirement"],"additionalProperties":false}},"additionalProperties":false}},"required":["name","startDate","endDate","timeZone","submissionDeadline"],"additionalProperties":false,"description":"sessionFieldOptions and profileFieldOptions are absent for integration tokens."},"meta":{"type":"object","properties":{"version":{"type":"integer","description":"Counts writes to this edition. A write names the one it read and is refused with edition_changed if another has landed since."}},"required":["version"],"additionalProperties":false,"description":"Absent for integration tokens."}},"required":["id","type","attributes"]},{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"slot"},"attributes":{"type":"object","properties":{"stableId":{"description":"An ID which is stable across all schedule versions. Publishing copies each slot into the next draft under a fresh `id`, so this is the key to match a slot against one held from an earlier fetch; `id` is not.","type":"string","format":"uuid"},"startsAt":{"type":"string","format":"date-time"},"endsAt":{"type":"string","format":"date-time"},"setupTime":{"type":"string","title":"Duration","format":"duration","example":"PT1H"},"teardownTime":{"type":"string","title":"Duration","format":"duration","example":"PT1H"}},"required":["stableId","startsAt","endsAt","setupTime","teardownTime"],"additionalProperties":false},"relationships":{"type":"object","properties":{"session":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"session"}},"required":["id","type"]}},"required":["data"]},"location":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"location"}},"required":["id","type"]}},"required":["data"]}},"required":["session","location"]}},"required":["id","type","attributes","relationships"]},{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"location"},"attributes":{"type":"object","properties":{"name":{"type":"string","minLength":1},"position":{"description":"Which column this room is, on a grid that reads left to right","type":"integer","minimum":0},"externalKey":{"type":["string","null"],"minLength":1}},"required":["name","externalKey","position"],"additionalProperties":false},"relationships":{"type":"object","properties":{"venue":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"venue"}},"required":["id","type"]}},"required":["data"]},"availabilities":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"location_availability"}},"required":["id","type"]}}},"required":["data"]}},"required":["venue"]}},"required":["id","type","attributes","relationships"]},{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"venue"},"attributes":{"type":"object","properties":{"name":{"type":"string","minLength":1},"address":{"type":["string","null"],"minLength":1},"externalKey":{"type":["string","null"],"minLength":1},"position":{"description":"Which venue this is, in the order an organizer put them in","type":"integer","minimum":0}},"required":["name","address","externalKey","position"],"additionalProperties":false}},"required":["id","type","attributes"]},{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"session"},"attributes":{"type":"object","properties":{"createdAt":{"type":"string","format":"date-time"},"state":{"type":"string","enum":["submitted","accepted","confirmed","rejected","withdrawn","canceled"]},"title":{"type":["string"],"minLength":1},"abstract":{"type":["string"]},"description":{"type":["string"]},"notes":{"type":["string"]},"duration":{"oneOf":[{"type":"string","title":"Duration","format":"duration","example":"PT1H"},{"type":"null"}]},"setupTime":{"oneOf":[{"type":"string","title":"Duration","format":"duration","example":"PT1H"},{"type":"null"}]},"teardownTime":{"oneOf":[{"type":"string","title":"Duration","format":"duration","example":"PT1H"},{"type":"null"}]},"teaserImage":{"type":["object","null"],"properties":{"key":{"type":"string"},"filename":{"type":"string"},"url":{"type":"string","format":"uri"},"thumbnailUrl":{"type":"string","format":"uri"},"processing":{"type":"boolean","description":"True while the uploaded original is still what both urls serve. A downscaled version replaces them shortly after, so a poller can skip fetching the image until this turns false."}},"required":["key","filename","url","thumbnailUrl","processing"],"additionalProperties":false}},"required":["createdAt","state","title","abstract","description","duration","setupTime","teardownTime","teaserImage"],"additionalProperties":false,"description":"notes is absent for an integration token."},"relationships":{"type":"object","properties":{"hosts":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"host"}},"required":["id","type"]}}},"required":["data"]},"sessionType":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"session_type"}},"required":["id","type"]}},"required":["data"]},"track":{"type":"object","properties":{"data":{"oneOf":[{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"track"}},"required":["id","type"]},{"type":"null"}]}},"required":["data"]},"responses":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"response"}},"required":["id","type"]}}},"required":["data"]}},"required":["hosts","sessionType","track","responses"]}},"required":["id","type","attributes","relationships"]},{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"host"},"attributes":{"type":"object","properties":{"displayName":{"type":"string","minLength":1},"emailAddress":{"type":"string","format":"email"},"biography":{"type":"string"},"avatar":{"type":["object","null"],"properties":{"key":{"type":"string"},"filename":{"type":"string"},"url":{"type":"string","format":"uri"},"thumbnailUrl":{"type":"string","format":"uri"},"processing":{"type":"boolean","description":"True while the uploaded original is still what both urls serve. A downscaled version replaces them shortly after, so a poller can skip fetching the image until this turns false."}},"required":["key","filename","url","thumbnailUrl","processing"],"additionalProperties":false}},"required":["displayName","biography","avatar"],"additionalProperties":false,"description":"emailAddress is only present for managers and admins."},"relationships":{"type":"object","properties":{"responses":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"response"}},"required":["id","type"]}}},"required":["data"]}},"required":["responses"]}},"required":["id","type","attributes","relationships"]},{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"response"},"attributes":{"type":"object","properties":{"value":{}},"required":["value"],"additionalProperties":false},"relationships":{"type":"object","properties":{"customField":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"custom_field"}},"required":["id","type"]}},"required":["data"]}},"required":["customField"]}},"required":["id","type","attributes","relationships"]},{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"custom_field"},"attributes":{"type":"object","properties":{"externalKey":{"type":["string","null"],"minLength":1},"target":{"type":"string","enum":["per_proposal","per_host"]},"requirement":{"type":"string","enum":["always_optional","always_required","required_after_deadline"]},"title":{"type":"string","minLength":1},"helperText":{"type":"string"},"deadline":{"type":["string","null"],"format":"date-time"},"freezeAfter":{"type":["string","null"],"format":"date-time"},"position":{"type":"integer"},"confidential":{"type":"boolean","description":"Responses to confidential custom fields reach managers and admins, a caller who hosts the session a response belongs to, and the host who answered it. An integration never receives them, and one host does not see another's. A withheld response is absent from linkage as well as from the included resources, so it cannot be told apart from one that was never given."},"options":{"oneOf":[{"title":"Simple","type":"object","properties":{"type":{"type":"string","enum":["boolean","file","date","url"]}},"required":["type"]},{"title":"Number","type":"object","properties":{"type":{"type":"string","const":"number"},"min":{"type":"integer","minimum":0},"max":{"type":"integer","minimum":0}},"required":["type"]},{"title":"Text","type":"object","properties":{"type":{"type":"string","enum":["single_line_text","multi_line_text"]},"minLength":{"type":"integer","minimum":1},"maxLength":{"type":"integer","minimum":1}},"required":["type"]},{"title":"Choice","type":"object","properties":{"type":{"type":"string","enum":["single_choice","multiple_choice"]},"items":{"type":"array","minItems":1,"items":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"label":{"type":"string","minLength":1}},"required":["id","label"]}}},"required":["type","items"]}]}},"required":["externalKey","target","title","options"],"additionalProperties":false,"description":"requirement, helperText, deadline, freezeAfter, position and confidential are absent for an integration token, which receives a custom field to render an answer rather than to run a submission."},"relationships":{"type":"object","properties":{"sessionTypes":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"session_type"}},"required":["id","type"]}}},"required":["data"]},"tracks":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"track"}},"required":["id","type"]}}},"required":["data"]}}}},"required":["id","type","attributes"]},{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"track"},"attributes":{"type":"object","properties":{"name":{"type":"string","minLength":1},"externalKey":{"type":["string","null"],"minLength":1},"description":{"type":"string"},"color":{"type":"string","format":"rgb","example":"#ff0000"},"internal":{"type":"boolean"}},"required":["name","externalKey","description","color","internal"],"additionalProperties":false}},"required":["id","type","attributes"]},{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"session_type"},"attributes":{"type":"object","properties":{"name":{"type":"string","minLength":1},"externalKey":{"type":["string","null"],"minLength":1},"defaultDuration":{"type":"string","title":"Duration","format":"duration","example":"PT1H"},"internal":{"type":"boolean"},"selectionDefault":{"type":"boolean"}},"required":["name","externalKey","internal"],"additionalProperties":false,"description":"defaultDuration and selectionDefault are absent for an integration token, which receives a session type to label a slot rather than to run a submission."}},"required":["id","type","attributes"]}]}}},"required":["data"]}}},"headers":{"ETag":{"description":"Opaque weak validator. It changes whenever the published schedule an integration reads changes, and a new publication always yields a new one. Store it and send it back verbatim; nothing about its structure is contractual.","schema":{"type":"string","example":"W/\"9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08\""}},"Vary":{"description":"Always authorization: the representation depends on the caller, so a cache must not serve one caller's copy to another.","schema":{"type":"string"}}}},"304":{"description":"The held validator still matches; the body is empty","headers":{"ETag":{"description":"Opaque weak validator. It changes whenever the published schedule an integration reads changes, and a new publication always yields a new one. Store it and send it back verbatim; nothing about its structure is contractual.","schema":{"type":"string","example":"W/\"9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08\""}},"Vary":{"description":"Always authorization: the representation depends on the caller, so a cache must not serve one caller's copy to another.","schema":{"type":"string"}}}},"403":{"description":"Forbidden","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"errors":{"type":"array","minItems":1,"items":{"type":"object","properties":{"status":{"type":"string","description":"HTTP status code"},"code":{"type":"string"},"title":{"type":"string"},"detail":{"type":"string"},"source":{"type":"object","properties":{"pointer":{"type":"string"},"parameter":{"type":"string"},"header":{"type":"string"}}}},"required":["status"]}}},"required":["errors"]}}}},"404":{"description":"Edition or schedule not found","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"errors":{"type":"array","minItems":1,"items":{"type":"object","properties":{"status":{"type":"string","description":"HTTP status code"},"code":{"type":"string"},"title":{"type":"string"},"detail":{"type":"string"},"source":{"type":"object","properties":{"pointer":{"type":"string"},"parameter":{"type":"string"},"header":{"type":"string"}}}},"required":["status"]}}},"required":["errors"]}}}}}}},"/editions/{editionId}/schedules/latest":{"get":{"tags":["Schedules"],"summary":"Show the working draft","description":"Retrieves the newest draft schedule, which is where further edits go. Requires the viewer role; integration tokens cannot read drafts.","operationId":"showLatestSchedule","parameters":[{"name":"editionId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"include","in":"query","schema":{"type":"array","items":{"type":"string","enum":["slots","slots.location","slots.location.venue","slots.session","slots.session.responses","slots.session.responses.customField","slots.session.hosts","slots.session.hosts.responses","slots.session.hosts.responses.customField","slots.session.track","slots.session.sessionType"]},"default":["slots"]}},{"name":"fields","in":"query","style":"deepObject","schema":{"type":"object","properties":{"schedule":{"type":"string","description":"Comma-separated list of fields to include for this type. Leave empty to omit all fields. Allowed fields are: `createdAt`, `publishedAt`, `startDate`, `endDate`, `timeZone`, `preliminary`, `edition`, `slots`"},"edition":{"type":"string","description":"Comma-separated list of fields to include for this type. Leave empty to omit all fields. Allowed fields are: `name`, `startDate`, `endDate`, `timeZone`, `submissionDeadline`, `sessionFieldOptions`, `profileFieldOptions`"},"slot":{"type":"string","description":"Comma-separated list of fields to include for this type. Leave empty to omit all fields. Allowed fields are: `stableId`, `startsAt`, `endsAt`, `setupTime`, `teardownTime`, `session`, `location`"},"location":{"type":"string","description":"Comma-separated list of fields to include for this type. Leave empty to omit all fields. Allowed fields are: `name`, `externalKey`, `position`, `venue`"},"venue":{"type":"string","description":"Comma-separated list of fields to include for this type. Leave empty to omit all fields. Allowed fields are: `name`, `address`, `externalKey`, `position`"},"session":{"type":"string","description":"Comma-separated list of fields to include for this type. Leave empty to omit all fields. Allowed fields are: `createdAt`, `state`, `title`, `abstract`, `description`, `notes`, `duration`, `setupTime`, `teardownTime`, `teaserImage`, `hosts`, `sessionType`, `track`, `responses`"},"host":{"type":"string","description":"Comma-separated list of fields to include for this type. Leave empty to omit all fields. Allowed fields are: `displayName`, `emailAddress`, `biography`, `avatar`, `responses`"},"response":{"type":"string","description":"Comma-separated list of fields to include for this type. Leave empty to omit all fields. Allowed fields are: `value`, `customField`"},"custom_field":{"type":"string","description":"Comma-separated list of fields to include for this type. Leave empty to omit all fields. Allowed fields are: `externalKey`, `target`, `requirement`, `title`, `helperText`, `options`, `deadline`, `freezeAfter`, `confidential`, `position`"},"track":{"type":"string","description":"Comma-separated list of fields to include for this type. Leave empty to omit all fields. Allowed fields are: `name`, `externalKey`, `description`, `color`, `internal`"},"session_type":{"type":"string","description":"Comma-separated list of fields to include for this type. Leave empty to omit all fields. Allowed fields are: `name`, `externalKey`, `defaultDuration`, `internal`, `selectionDefault`"}},"additionalProperties":false}}],"responses":{"200":{"description":"OK","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"schedule"},"attributes":{"type":"object","properties":{"createdAt":{"type":"string","format":"date-time"},"publishedAt":{"type":["string","null"],"format":"date-time"},"startDate":{"type":["string","null"],"format":"date","description":"The window this schedule was published for, together with endDate and timeZone. Set when publishedAt is, and never after: a publication records what was announced, and the edition is free to move away from it. Null on a draft, whose window is the edition's current one."},"endDate":{"type":["string","null"],"format":"date"},"timeZone":{"type":["string","null"],"description":"The zone the slot instants of this publication were laid out in. Read them against this rather than the edition's, which may have changed since."},"preliminary":{"type":"boolean","description":"Whether this publication is provisional. Only meaningful once publishedAt is set, and never true for a publication that follows a final one."}},"required":["createdAt","publishedAt","startDate","endDate","timeZone","preliminary"],"additionalProperties":false},"relationships":{"type":"object","properties":{"edition":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"edition"}},"required":["id","type"]}},"required":["data"]},"slots":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"slot"}},"required":["id","type"]}}},"required":["data"]}},"required":["edition","slots"]}},"required":["id","type","attributes","relationships"]},"included":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"edition"},"attributes":{"type":"object","properties":{"name":{"type":"string","minLength":1},"startDate":{"type":"string","format":"date"},"endDate":{"type":"string","format":"date"},"timeZone":{"type":"string"},"submissionDeadline":{"type":["string","null"],"format":"date-time"},"sessionFieldOptions":{"type":"object","properties":{"title":{"type":"object","properties":{"label":{"type":"string","minLength":1},"helperText":{"type":"string","minLength":1},"position":{"type":"integer"},"minLength":{"type":"integer","minimum":1},"maxLength":{"type":"integer","minimum":1}},"additionalProperties":false},"sessionType":{"type":"object","properties":{"label":{"type":"string","minLength":1},"helperText":{"type":"string","minLength":1},"position":{"type":"integer"}},"additionalProperties":false},"abstract":{"type":"object","properties":{"label":{"type":"string","minLength":1},"helperText":{"type":"string","minLength":1},"position":{"type":"integer"},"requirement":{"type":"string","enum":["optional","required"]},"minLength":{"type":"integer","minimum":1},"maxLength":{"type":"integer","minimum":1}},"required":["requirement"],"additionalProperties":false},"description":{"type":"object","properties":{"label":{"type":"string","minLength":1},"helperText":{"type":"string","minLength":1},"position":{"type":"integer"},"requirement":{"type":"string","enum":["optional","required"]},"minLength":{"type":"integer","minimum":1},"maxLength":{"type":"integer","minimum":1}},"required":["requirement"],"additionalProperties":false},"notes":{"type":"object","properties":{"label":{"type":"string","minLength":1},"helperText":{"type":"string","minLength":1},"position":{"type":"integer"},"requirement":{"type":"string","enum":["optional","required"]},"minLength":{"type":"integer","minimum":1},"maxLength":{"type":"integer","minimum":1}},"required":["requirement"],"additionalProperties":false},"track":{"type":"object","properties":{"label":{"type":"string","minLength":1},"helperText":{"type":"string","minLength":1},"position":{"type":"integer"},"requirement":{"type":"string","enum":["optional","required"]}},"required":["requirement"],"additionalProperties":false},"duration":{"type":"object","properties":{"label":{"type":"string","minLength":1},"helperText":{"type":"string","minLength":1},"position":{"type":"integer"},"requirement":{"type":"string","enum":["optional","required"]}},"required":["requirement"],"additionalProperties":false},"setupTime":{"type":"object","properties":{"label":{"type":"string","minLength":1},"helperText":{"type":"string","minLength":1},"position":{"type":"integer"},"requirement":{"type":"string","enum":["optional","required"]}},"required":["requirement"],"additionalProperties":false},"teardownTime":{"type":"object","properties":{"label":{"type":"string","minLength":1},"helperText":{"type":"string","minLength":1},"position":{"type":"integer"},"requirement":{"type":"string","enum":["optional","required"]}},"required":["requirement"],"additionalProperties":false},"teaserImage":{"type":"object","properties":{"label":{"type":"string","minLength":1},"helperText":{"type":"string","minLength":1},"position":{"type":"integer"},"requirement":{"type":"string","enum":["optional","required"]},"minWidth":{"type":"integer","minimum":1,"maximum":16383},"minHeight":{"type":"integer","minimum":1,"maximum":16383},"maxWidth":{"type":"integer","minimum":1,"maximum":16383},"maxHeight":{"type":"integer","minimum":1,"maximum":16383},"aspectRatio":{"type":"object","properties":{"width":{"type":"integer","minimum":1},"height":{"type":"integer","minimum":1}},"required":["width","height"],"additionalProperties":false}},"required":["requirement"],"additionalProperties":false}},"additionalProperties":false},"profileFieldOptions":{"type":"object","properties":{"displayName":{"type":"object","properties":{"label":{"type":"string","minLength":1},"helperText":{"type":"string","minLength":1},"position":{"type":"integer"},"minLength":{"type":"integer","minimum":1},"maxLength":{"type":"integer","minimum":1}},"additionalProperties":false},"emailAddress":{"type":"object","properties":{"label":{"type":"string","minLength":1},"helperText":{"type":"string","minLength":1},"position":{"type":"integer"},"minLength":{"type":"integer","minimum":1},"maxLength":{"type":"integer","minimum":1}},"additionalProperties":false},"avatar":{"type":"object","properties":{"label":{"type":"string","minLength":1},"helperText":{"type":"string","minLength":1},"position":{"type":"integer"},"requirement":{"type":"string","enum":["optional","required"]}},"required":["requirement"],"additionalProperties":false},"biography":{"type":"object","properties":{"label":{"type":"string","minLength":1},"helperText":{"type":"string","minLength":1},"position":{"type":"integer"},"requirement":{"type":"string","enum":["optional","required"]},"minLength":{"type":"integer","minimum":1},"maxLength":{"type":"integer","minimum":1}},"required":["requirement"],"additionalProperties":false},"availability":{"type":"object","properties":{"label":{"type":"string","minLength":1},"helperText":{"type":"string","minLength":1},"position":{"type":"integer"},"requirement":{"type":"string","enum":["optional","required"]}},"required":["requirement"],"additionalProperties":false}},"additionalProperties":false}},"required":["name","startDate","endDate","timeZone","submissionDeadline"],"additionalProperties":false,"description":"sessionFieldOptions and profileFieldOptions are absent for integration tokens."},"meta":{"type":"object","properties":{"version":{"type":"integer","description":"Counts writes to this edition. A write names the one it read and is refused with edition_changed if another has landed since."}},"required":["version"],"additionalProperties":false,"description":"Absent for integration tokens."}},"required":["id","type","attributes"]},{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"slot"},"attributes":{"type":"object","properties":{"stableId":{"description":"An ID which is stable across all schedule versions. Publishing copies each slot into the next draft under a fresh `id`, so this is the key to match a slot against one held from an earlier fetch; `id` is not.","type":"string","format":"uuid"},"startsAt":{"type":"string","format":"date-time"},"endsAt":{"type":"string","format":"date-time"},"setupTime":{"type":"string","title":"Duration","format":"duration","example":"PT1H"},"teardownTime":{"type":"string","title":"Duration","format":"duration","example":"PT1H"}},"required":["stableId","startsAt","endsAt","setupTime","teardownTime"],"additionalProperties":false},"relationships":{"type":"object","properties":{"session":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"session"}},"required":["id","type"]}},"required":["data"]},"location":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"location"}},"required":["id","type"]}},"required":["data"]}},"required":["session","location"]}},"required":["id","type","attributes","relationships"]},{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"location"},"attributes":{"type":"object","properties":{"name":{"type":"string","minLength":1},"position":{"description":"Which column this room is, on a grid that reads left to right","type":"integer","minimum":0},"externalKey":{"type":["string","null"],"minLength":1}},"required":["name","externalKey","position"],"additionalProperties":false},"relationships":{"type":"object","properties":{"venue":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"venue"}},"required":["id","type"]}},"required":["data"]},"availabilities":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"location_availability"}},"required":["id","type"]}}},"required":["data"]}},"required":["venue"]}},"required":["id","type","attributes","relationships"]},{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"venue"},"attributes":{"type":"object","properties":{"name":{"type":"string","minLength":1},"address":{"type":["string","null"],"minLength":1},"externalKey":{"type":["string","null"],"minLength":1},"position":{"description":"Which venue this is, in the order an organizer put them in","type":"integer","minimum":0}},"required":["name","address","externalKey","position"],"additionalProperties":false}},"required":["id","type","attributes"]},{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"session"},"attributes":{"type":"object","properties":{"createdAt":{"type":"string","format":"date-time"},"state":{"type":"string","enum":["submitted","accepted","confirmed","rejected","withdrawn","canceled"]},"title":{"type":["string"],"minLength":1},"abstract":{"type":["string"]},"description":{"type":["string"]},"notes":{"type":["string"]},"duration":{"oneOf":[{"type":"string","title":"Duration","format":"duration","example":"PT1H"},{"type":"null"}]},"setupTime":{"oneOf":[{"type":"string","title":"Duration","format":"duration","example":"PT1H"},{"type":"null"}]},"teardownTime":{"oneOf":[{"type":"string","title":"Duration","format":"duration","example":"PT1H"},{"type":"null"}]},"teaserImage":{"type":["object","null"],"properties":{"key":{"type":"string"},"filename":{"type":"string"},"url":{"type":"string","format":"uri"},"thumbnailUrl":{"type":"string","format":"uri"},"processing":{"type":"boolean","description":"True while the uploaded original is still what both urls serve. A downscaled version replaces them shortly after, so a poller can skip fetching the image until this turns false."}},"required":["key","filename","url","thumbnailUrl","processing"],"additionalProperties":false}},"required":["createdAt","state","title","abstract","description","duration","setupTime","teardownTime","teaserImage"],"additionalProperties":false,"description":"notes is absent for an integration token."},"relationships":{"type":"object","properties":{"hosts":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"host"}},"required":["id","type"]}}},"required":["data"]},"sessionType":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"session_type"}},"required":["id","type"]}},"required":["data"]},"track":{"type":"object","properties":{"data":{"oneOf":[{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"track"}},"required":["id","type"]},{"type":"null"}]}},"required":["data"]},"responses":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"response"}},"required":["id","type"]}}},"required":["data"]}},"required":["hosts","sessionType","track","responses"]}},"required":["id","type","attributes","relationships"]},{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"host"},"attributes":{"type":"object","properties":{"displayName":{"type":"string","minLength":1},"emailAddress":{"type":"string","format":"email"},"biography":{"type":"string"},"avatar":{"type":["object","null"],"properties":{"key":{"type":"string"},"filename":{"type":"string"},"url":{"type":"string","format":"uri"},"thumbnailUrl":{"type":"string","format":"uri"},"processing":{"type":"boolean","description":"True while the uploaded original is still what both urls serve. A downscaled version replaces them shortly after, so a poller can skip fetching the image until this turns false."}},"required":["key","filename","url","thumbnailUrl","processing"],"additionalProperties":false}},"required":["displayName","biography","avatar"],"additionalProperties":false,"description":"emailAddress is only present for managers and admins."},"relationships":{"type":"object","properties":{"responses":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"response"}},"required":["id","type"]}}},"required":["data"]}},"required":["responses"]}},"required":["id","type","attributes","relationships"]},{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"response"},"attributes":{"type":"object","properties":{"value":{}},"required":["value"],"additionalProperties":false},"relationships":{"type":"object","properties":{"customField":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"custom_field"}},"required":["id","type"]}},"required":["data"]}},"required":["customField"]}},"required":["id","type","attributes","relationships"]},{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"custom_field"},"attributes":{"type":"object","properties":{"externalKey":{"type":["string","null"],"minLength":1},"target":{"type":"string","enum":["per_proposal","per_host"]},"requirement":{"type":"string","enum":["always_optional","always_required","required_after_deadline"]},"title":{"type":"string","minLength":1},"helperText":{"type":"string"},"deadline":{"type":["string","null"],"format":"date-time"},"freezeAfter":{"type":["string","null"],"format":"date-time"},"position":{"type":"integer"},"confidential":{"type":"boolean","description":"Responses to confidential custom fields reach managers and admins, a caller who hosts the session a response belongs to, and the host who answered it. An integration never receives them, and one host does not see another's. A withheld response is absent from linkage as well as from the included resources, so it cannot be told apart from one that was never given."},"options":{"oneOf":[{"title":"Simple","type":"object","properties":{"type":{"type":"string","enum":["boolean","file","date","url"]}},"required":["type"]},{"title":"Number","type":"object","properties":{"type":{"type":"string","const":"number"},"min":{"type":"integer","minimum":0},"max":{"type":"integer","minimum":0}},"required":["type"]},{"title":"Text","type":"object","properties":{"type":{"type":"string","enum":["single_line_text","multi_line_text"]},"minLength":{"type":"integer","minimum":1},"maxLength":{"type":"integer","minimum":1}},"required":["type"]},{"title":"Choice","type":"object","properties":{"type":{"type":"string","enum":["single_choice","multiple_choice"]},"items":{"type":"array","minItems":1,"items":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"label":{"type":"string","minLength":1}},"required":["id","label"]}}},"required":["type","items"]}]}},"required":["externalKey","target","title","options"],"additionalProperties":false,"description":"requirement, helperText, deadline, freezeAfter, position and confidential are absent for an integration token, which receives a custom field to render an answer rather than to run a submission."},"relationships":{"type":"object","properties":{"sessionTypes":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"session_type"}},"required":["id","type"]}}},"required":["data"]},"tracks":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"track"}},"required":["id","type"]}}},"required":["data"]}}}},"required":["id","type","attributes"]},{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"track"},"attributes":{"type":"object","properties":{"name":{"type":"string","minLength":1},"externalKey":{"type":["string","null"],"minLength":1},"description":{"type":"string"},"color":{"type":"string","format":"rgb","example":"#ff0000"},"internal":{"type":"boolean"}},"required":["name","externalKey","description","color","internal"],"additionalProperties":false}},"required":["id","type","attributes"]},{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"session_type"},"attributes":{"type":"object","properties":{"name":{"type":"string","minLength":1},"externalKey":{"type":["string","null"],"minLength":1},"defaultDuration":{"type":"string","title":"Duration","format":"duration","example":"PT1H"},"internal":{"type":"boolean"},"selectionDefault":{"type":"boolean"}},"required":["name","externalKey","internal"],"additionalProperties":false,"description":"defaultDuration and selectionDefault are absent for an integration token, which receives a session type to label a slot rather than to run a submission."}},"required":["id","type","attributes"]}]}}},"required":["data"]}}}},"403":{"description":"Forbidden","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"errors":{"type":"array","minItems":1,"items":{"type":"object","properties":{"status":{"type":"string","description":"HTTP status code"},"code":{"type":"string"},"title":{"type":"string"},"detail":{"type":"string"},"source":{"type":"object","properties":{"pointer":{"type":"string"},"parameter":{"type":"string"},"header":{"type":"string"}}}},"required":["status"]}}},"required":["errors"]}}}},"404":{"description":"Edition or schedule not found","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"errors":{"type":"array","minItems":1,"items":{"type":"object","properties":{"status":{"type":"string","description":"HTTP status code"},"code":{"type":"string"},"title":{"type":"string"},"detail":{"type":"string"},"source":{"type":"object","properties":{"pointer":{"type":"string"},"parameter":{"type":"string"},"header":{"type":"string"}}}},"required":["status"]}}},"required":["errors"]}}}}}}},"/editions/{editionId}/schedules/{scheduleId}":{"get":{"tags":["Schedules"],"summary":"Show a schedule","description":"Retrieves a single schedule by id. Requires the viewer role. An integration reads the current publication instead.","operationId":"showSchedule","parameters":[{"name":"editionId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"scheduleId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"include","in":"query","schema":{"type":"array","items":{"type":"string","enum":["slots","slots.location","slots.location.venue","slots.session","slots.session.responses","slots.session.responses.customField","slots.session.hosts","slots.session.hosts.responses","slots.session.hosts.responses.customField","slots.session.track","slots.session.sessionType"]},"default":["slots"]}},{"name":"fields","in":"query","style":"deepObject","schema":{"type":"object","properties":{"schedule":{"type":"string","description":"Comma-separated list of fields to include for this type. Leave empty to omit all fields. Allowed fields are: `createdAt`, `publishedAt`, `startDate`, `endDate`, `timeZone`, `preliminary`, `edition`, `slots`"},"edition":{"type":"string","description":"Comma-separated list of fields to include for this type. Leave empty to omit all fields. Allowed fields are: `name`, `startDate`, `endDate`, `timeZone`, `submissionDeadline`, `sessionFieldOptions`, `profileFieldOptions`"},"slot":{"type":"string","description":"Comma-separated list of fields to include for this type. Leave empty to omit all fields. Allowed fields are: `stableId`, `startsAt`, `endsAt`, `setupTime`, `teardownTime`, `session`, `location`"},"location":{"type":"string","description":"Comma-separated list of fields to include for this type. Leave empty to omit all fields. Allowed fields are: `name`, `externalKey`, `position`, `venue`"},"venue":{"type":"string","description":"Comma-separated list of fields to include for this type. Leave empty to omit all fields. Allowed fields are: `name`, `address`, `externalKey`, `position`"},"session":{"type":"string","description":"Comma-separated list of fields to include for this type. Leave empty to omit all fields. Allowed fields are: `createdAt`, `state`, `title`, `abstract`, `description`, `notes`, `duration`, `setupTime`, `teardownTime`, `teaserImage`, `hosts`, `sessionType`, `track`, `responses`"},"host":{"type":"string","description":"Comma-separated list of fields to include for this type. Leave empty to omit all fields. Allowed fields are: `displayName`, `emailAddress`, `biography`, `avatar`, `responses`"},"response":{"type":"string","description":"Comma-separated list of fields to include for this type. Leave empty to omit all fields. Allowed fields are: `value`, `customField`"},"custom_field":{"type":"string","description":"Comma-separated list of fields to include for this type. Leave empty to omit all fields. Allowed fields are: `externalKey`, `target`, `requirement`, `title`, `helperText`, `options`, `deadline`, `freezeAfter`, `confidential`, `position`"},"track":{"type":"string","description":"Comma-separated list of fields to include for this type. Leave empty to omit all fields. Allowed fields are: `name`, `externalKey`, `description`, `color`, `internal`"},"session_type":{"type":"string","description":"Comma-separated list of fields to include for this type. Leave empty to omit all fields. Allowed fields are: `name`, `externalKey`, `defaultDuration`, `internal`, `selectionDefault`"}},"additionalProperties":false}}],"responses":{"200":{"description":"OK","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"schedule"},"attributes":{"type":"object","properties":{"createdAt":{"type":"string","format":"date-time"},"publishedAt":{"type":["string","null"],"format":"date-time"},"startDate":{"type":["string","null"],"format":"date","description":"The window this schedule was published for, together with endDate and timeZone. Set when publishedAt is, and never after: a publication records what was announced, and the edition is free to move away from it. Null on a draft, whose window is the edition's current one."},"endDate":{"type":["string","null"],"format":"date"},"timeZone":{"type":["string","null"],"description":"The zone the slot instants of this publication were laid out in. Read them against this rather than the edition's, which may have changed since."},"preliminary":{"type":"boolean","description":"Whether this publication is provisional. Only meaningful once publishedAt is set, and never true for a publication that follows a final one."}},"required":["createdAt","publishedAt","startDate","endDate","timeZone","preliminary"],"additionalProperties":false},"relationships":{"type":"object","properties":{"edition":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"edition"}},"required":["id","type"]}},"required":["data"]},"slots":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"slot"}},"required":["id","type"]}}},"required":["data"]}},"required":["edition","slots"]}},"required":["id","type","attributes","relationships"]},"included":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"edition"},"attributes":{"type":"object","properties":{"name":{"type":"string","minLength":1},"startDate":{"type":"string","format":"date"},"endDate":{"type":"string","format":"date"},"timeZone":{"type":"string"},"submissionDeadline":{"type":["string","null"],"format":"date-time"},"sessionFieldOptions":{"type":"object","properties":{"title":{"type":"object","properties":{"label":{"type":"string","minLength":1},"helperText":{"type":"string","minLength":1},"position":{"type":"integer"},"minLength":{"type":"integer","minimum":1},"maxLength":{"type":"integer","minimum":1}},"additionalProperties":false},"sessionType":{"type":"object","properties":{"label":{"type":"string","minLength":1},"helperText":{"type":"string","minLength":1},"position":{"type":"integer"}},"additionalProperties":false},"abstract":{"type":"object","properties":{"label":{"type":"string","minLength":1},"helperText":{"type":"string","minLength":1},"position":{"type":"integer"},"requirement":{"type":"string","enum":["optional","required"]},"minLength":{"type":"integer","minimum":1},"maxLength":{"type":"integer","minimum":1}},"required":["requirement"],"additionalProperties":false},"description":{"type":"object","properties":{"label":{"type":"string","minLength":1},"helperText":{"type":"string","minLength":1},"position":{"type":"integer"},"requirement":{"type":"string","enum":["optional","required"]},"minLength":{"type":"integer","minimum":1},"maxLength":{"type":"integer","minimum":1}},"required":["requirement"],"additionalProperties":false},"notes":{"type":"object","properties":{"label":{"type":"string","minLength":1},"helperText":{"type":"string","minLength":1},"position":{"type":"integer"},"requirement":{"type":"string","enum":["optional","required"]},"minLength":{"type":"integer","minimum":1},"maxLength":{"type":"integer","minimum":1}},"required":["requirement"],"additionalProperties":false},"track":{"type":"object","properties":{"label":{"type":"string","minLength":1},"helperText":{"type":"string","minLength":1},"position":{"type":"integer"},"requirement":{"type":"string","enum":["optional","required"]}},"required":["requirement"],"additionalProperties":false},"duration":{"type":"object","properties":{"label":{"type":"string","minLength":1},"helperText":{"type":"string","minLength":1},"position":{"type":"integer"},"requirement":{"type":"string","enum":["optional","required"]}},"required":["requirement"],"additionalProperties":false},"setupTime":{"type":"object","properties":{"label":{"type":"string","minLength":1},"helperText":{"type":"string","minLength":1},"position":{"type":"integer"},"requirement":{"type":"string","enum":["optional","required"]}},"required":["requirement"],"additionalProperties":false},"teardownTime":{"type":"object","properties":{"label":{"type":"string","minLength":1},"helperText":{"type":"string","minLength":1},"position":{"type":"integer"},"requirement":{"type":"string","enum":["optional","required"]}},"required":["requirement"],"additionalProperties":false},"teaserImage":{"type":"object","properties":{"label":{"type":"string","minLength":1},"helperText":{"type":"string","minLength":1},"position":{"type":"integer"},"requirement":{"type":"string","enum":["optional","required"]},"minWidth":{"type":"integer","minimum":1,"maximum":16383},"minHeight":{"type":"integer","minimum":1,"maximum":16383},"maxWidth":{"type":"integer","minimum":1,"maximum":16383},"maxHeight":{"type":"integer","minimum":1,"maximum":16383},"aspectRatio":{"type":"object","properties":{"width":{"type":"integer","minimum":1},"height":{"type":"integer","minimum":1}},"required":["width","height"],"additionalProperties":false}},"required":["requirement"],"additionalProperties":false}},"additionalProperties":false},"profileFieldOptions":{"type":"object","properties":{"displayName":{"type":"object","properties":{"label":{"type":"string","minLength":1},"helperText":{"type":"string","minLength":1},"position":{"type":"integer"},"minLength":{"type":"integer","minimum":1},"maxLength":{"type":"integer","minimum":1}},"additionalProperties":false},"emailAddress":{"type":"object","properties":{"label":{"type":"string","minLength":1},"helperText":{"type":"string","minLength":1},"position":{"type":"integer"},"minLength":{"type":"integer","minimum":1},"maxLength":{"type":"integer","minimum":1}},"additionalProperties":false},"avatar":{"type":"object","properties":{"label":{"type":"string","minLength":1},"helperText":{"type":"string","minLength":1},"position":{"type":"integer"},"requirement":{"type":"string","enum":["optional","required"]}},"required":["requirement"],"additionalProperties":false},"biography":{"type":"object","properties":{"label":{"type":"string","minLength":1},"helperText":{"type":"string","minLength":1},"position":{"type":"integer"},"requirement":{"type":"string","enum":["optional","required"]},"minLength":{"type":"integer","minimum":1},"maxLength":{"type":"integer","minimum":1}},"required":["requirement"],"additionalProperties":false},"availability":{"type":"object","properties":{"label":{"type":"string","minLength":1},"helperText":{"type":"string","minLength":1},"position":{"type":"integer"},"requirement":{"type":"string","enum":["optional","required"]}},"required":["requirement"],"additionalProperties":false}},"additionalProperties":false}},"required":["name","startDate","endDate","timeZone","submissionDeadline"],"additionalProperties":false,"description":"sessionFieldOptions and profileFieldOptions are absent for integration tokens."},"meta":{"type":"object","properties":{"version":{"type":"integer","description":"Counts writes to this edition. A write names the one it read and is refused with edition_changed if another has landed since."}},"required":["version"],"additionalProperties":false,"description":"Absent for integration tokens."}},"required":["id","type","attributes"]},{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"slot"},"attributes":{"type":"object","properties":{"stableId":{"description":"An ID which is stable across all schedule versions. Publishing copies each slot into the next draft under a fresh `id`, so this is the key to match a slot against one held from an earlier fetch; `id` is not.","type":"string","format":"uuid"},"startsAt":{"type":"string","format":"date-time"},"endsAt":{"type":"string","format":"date-time"},"setupTime":{"type":"string","title":"Duration","format":"duration","example":"PT1H"},"teardownTime":{"type":"string","title":"Duration","format":"duration","example":"PT1H"}},"required":["stableId","startsAt","endsAt","setupTime","teardownTime"],"additionalProperties":false},"relationships":{"type":"object","properties":{"session":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"session"}},"required":["id","type"]}},"required":["data"]},"location":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"location"}},"required":["id","type"]}},"required":["data"]}},"required":["session","location"]}},"required":["id","type","attributes","relationships"]},{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"location"},"attributes":{"type":"object","properties":{"name":{"type":"string","minLength":1},"position":{"description":"Which column this room is, on a grid that reads left to right","type":"integer","minimum":0},"externalKey":{"type":["string","null"],"minLength":1}},"required":["name","externalKey","position"],"additionalProperties":false},"relationships":{"type":"object","properties":{"venue":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"venue"}},"required":["id","type"]}},"required":["data"]},"availabilities":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"location_availability"}},"required":["id","type"]}}},"required":["data"]}},"required":["venue"]}},"required":["id","type","attributes","relationships"]},{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"venue"},"attributes":{"type":"object","properties":{"name":{"type":"string","minLength":1},"address":{"type":["string","null"],"minLength":1},"externalKey":{"type":["string","null"],"minLength":1},"position":{"description":"Which venue this is, in the order an organizer put them in","type":"integer","minimum":0}},"required":["name","address","externalKey","position"],"additionalProperties":false}},"required":["id","type","attributes"]},{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"session"},"attributes":{"type":"object","properties":{"createdAt":{"type":"string","format":"date-time"},"state":{"type":"string","enum":["submitted","accepted","confirmed","rejected","withdrawn","canceled"]},"title":{"type":["string"],"minLength":1},"abstract":{"type":["string"]},"description":{"type":["string"]},"notes":{"type":["string"]},"duration":{"oneOf":[{"type":"string","title":"Duration","format":"duration","example":"PT1H"},{"type":"null"}]},"setupTime":{"oneOf":[{"type":"string","title":"Duration","format":"duration","example":"PT1H"},{"type":"null"}]},"teardownTime":{"oneOf":[{"type":"string","title":"Duration","format":"duration","example":"PT1H"},{"type":"null"}]},"teaserImage":{"type":["object","null"],"properties":{"key":{"type":"string"},"filename":{"type":"string"},"url":{"type":"string","format":"uri"},"thumbnailUrl":{"type":"string","format":"uri"},"processing":{"type":"boolean","description":"True while the uploaded original is still what both urls serve. A downscaled version replaces them shortly after, so a poller can skip fetching the image until this turns false."}},"required":["key","filename","url","thumbnailUrl","processing"],"additionalProperties":false}},"required":["createdAt","state","title","abstract","description","duration","setupTime","teardownTime","teaserImage"],"additionalProperties":false,"description":"notes is absent for an integration token."},"relationships":{"type":"object","properties":{"hosts":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"host"}},"required":["id","type"]}}},"required":["data"]},"sessionType":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"session_type"}},"required":["id","type"]}},"required":["data"]},"track":{"type":"object","properties":{"data":{"oneOf":[{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"track"}},"required":["id","type"]},{"type":"null"}]}},"required":["data"]},"responses":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"response"}},"required":["id","type"]}}},"required":["data"]}},"required":["hosts","sessionType","track","responses"]}},"required":["id","type","attributes","relationships"]},{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"host"},"attributes":{"type":"object","properties":{"displayName":{"type":"string","minLength":1},"emailAddress":{"type":"string","format":"email"},"biography":{"type":"string"},"avatar":{"type":["object","null"],"properties":{"key":{"type":"string"},"filename":{"type":"string"},"url":{"type":"string","format":"uri"},"thumbnailUrl":{"type":"string","format":"uri"},"processing":{"type":"boolean","description":"True while the uploaded original is still what both urls serve. A downscaled version replaces them shortly after, so a poller can skip fetching the image until this turns false."}},"required":["key","filename","url","thumbnailUrl","processing"],"additionalProperties":false}},"required":["displayName","biography","avatar"],"additionalProperties":false,"description":"emailAddress is only present for managers and admins."},"relationships":{"type":"object","properties":{"responses":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"response"}},"required":["id","type"]}}},"required":["data"]}},"required":["responses"]}},"required":["id","type","attributes","relationships"]},{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"response"},"attributes":{"type":"object","properties":{"value":{}},"required":["value"],"additionalProperties":false},"relationships":{"type":"object","properties":{"customField":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"custom_field"}},"required":["id","type"]}},"required":["data"]}},"required":["customField"]}},"required":["id","type","attributes","relationships"]},{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"custom_field"},"attributes":{"type":"object","properties":{"externalKey":{"type":["string","null"],"minLength":1},"target":{"type":"string","enum":["per_proposal","per_host"]},"requirement":{"type":"string","enum":["always_optional","always_required","required_after_deadline"]},"title":{"type":"string","minLength":1},"helperText":{"type":"string"},"deadline":{"type":["string","null"],"format":"date-time"},"freezeAfter":{"type":["string","null"],"format":"date-time"},"position":{"type":"integer"},"confidential":{"type":"boolean","description":"Responses to confidential custom fields reach managers and admins, a caller who hosts the session a response belongs to, and the host who answered it. An integration never receives them, and one host does not see another's. A withheld response is absent from linkage as well as from the included resources, so it cannot be told apart from one that was never given."},"options":{"oneOf":[{"title":"Simple","type":"object","properties":{"type":{"type":"string","enum":["boolean","file","date","url"]}},"required":["type"]},{"title":"Number","type":"object","properties":{"type":{"type":"string","const":"number"},"min":{"type":"integer","minimum":0},"max":{"type":"integer","minimum":0}},"required":["type"]},{"title":"Text","type":"object","properties":{"type":{"type":"string","enum":["single_line_text","multi_line_text"]},"minLength":{"type":"integer","minimum":1},"maxLength":{"type":"integer","minimum":1}},"required":["type"]},{"title":"Choice","type":"object","properties":{"type":{"type":"string","enum":["single_choice","multiple_choice"]},"items":{"type":"array","minItems":1,"items":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"label":{"type":"string","minLength":1}},"required":["id","label"]}}},"required":["type","items"]}]}},"required":["externalKey","target","title","options"],"additionalProperties":false,"description":"requirement, helperText, deadline, freezeAfter, position and confidential are absent for an integration token, which receives a custom field to render an answer rather than to run a submission."},"relationships":{"type":"object","properties":{"sessionTypes":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"session_type"}},"required":["id","type"]}}},"required":["data"]},"tracks":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"track"}},"required":["id","type"]}}},"required":["data"]}}}},"required":["id","type","attributes"]},{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"track"},"attributes":{"type":"object","properties":{"name":{"type":"string","minLength":1},"externalKey":{"type":["string","null"],"minLength":1},"description":{"type":"string"},"color":{"type":"string","format":"rgb","example":"#ff0000"},"internal":{"type":"boolean"}},"required":["name","externalKey","description","color","internal"],"additionalProperties":false}},"required":["id","type","attributes"]},{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"session_type"},"attributes":{"type":"object","properties":{"name":{"type":"string","minLength":1},"externalKey":{"type":["string","null"],"minLength":1},"defaultDuration":{"type":"string","title":"Duration","format":"duration","example":"PT1H"},"internal":{"type":"boolean"},"selectionDefault":{"type":"boolean"}},"required":["name","externalKey","internal"],"additionalProperties":false,"description":"defaultDuration and selectionDefault are absent for an integration token, which receives a session type to label a slot rather than to run a submission."}},"required":["id","type","attributes"]}]}}},"required":["data"]}}}},"403":{"description":"Forbidden","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"errors":{"type":"array","minItems":1,"items":{"type":"object","properties":{"status":{"type":"string","description":"HTTP status code"},"code":{"type":"string"},"title":{"type":"string"},"detail":{"type":"string"},"source":{"type":"object","properties":{"pointer":{"type":"string"},"parameter":{"type":"string"},"header":{"type":"string"}}}},"required":["status"]}}},"required":["errors"]}}}},"404":{"description":"Edition or schedule not found","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"errors":{"type":"array","minItems":1,"items":{"type":"object","properties":{"status":{"type":"string","description":"HTTP status code"},"code":{"type":"string"},"title":{"type":"string"},"detail":{"type":"string"},"source":{"type":"object","properties":{"pointer":{"type":"string"},"parameter":{"type":"string"},"header":{"type":"string"}}}},"required":["status"]}}},"required":["errors"]}}}}}}},"/editions/{editionId}/schedules/{scheduleId}/publication":{"post":{"tags":["Schedules"],"summary":"Publish a schedule","description":"Publishes a draft schedule and copies its slots into a fresh draft, which becomes the schedule further edits go to. Answers with no content: read the successor from the schedules list, or from /schedules/latest. A publication is either preliminary or final, and a preliminary one cannot follow a final one. Requires the manager role.","operationId":"publishSchedule","parameters":[{"name":"editionId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"scheduleId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":true,"content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"type":{"type":"string","const":"schedule_publication"},"attributes":{"type":"object","properties":{"preliminary":{"type":"boolean"}},"required":["preliminary"],"additionalProperties":false}},"required":["type","attributes"],"additionalProperties":false}},"required":["data"],"additionalProperties":false}}}},"responses":{"204":{"description":"No content"},"403":{"description":"Forbidden","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"errors":{"type":"array","minItems":1,"items":{"type":"object","properties":{"status":{"type":"string","description":"HTTP status code"},"code":{"type":"string"},"title":{"type":"string"},"detail":{"type":"string"},"source":{"type":"object","properties":{"pointer":{"type":"string"},"parameter":{"type":"string"},"header":{"type":"string"}}}},"required":["status"]}}},"required":["errors"]}}}},"404":{"description":"Edition or schedule not found","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"errors":{"type":"array","minItems":1,"items":{"type":"object","properties":{"status":{"type":"string","description":"HTTP status code"},"code":{"type":"string"},"title":{"type":"string"},"detail":{"type":"string"},"source":{"type":"object","properties":{"pointer":{"type":"string"},"parameter":{"type":"string"},"header":{"type":"string"}}}},"required":["status"]}}},"required":["errors"]}}}},"409":{"description":"Schedule already published (already_published), or a preliminary publication was requested after a final one (already_final)","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"errors":{"type":"array","minItems":1,"items":{"type":"object","properties":{"status":{"type":"string","description":"HTTP status code"},"code":{"type":"string"},"title":{"type":"string"},"detail":{"type":"string"},"source":{"type":"object","properties":{"pointer":{"type":"string"},"parameter":{"type":"string"},"header":{"type":"string"}}}},"required":["status"]}}},"required":["errors"]}}}},"422":{"description":"Unprocessable request","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"errors":{"type":"array","minItems":1,"items":{"type":"object","properties":{"status":{"type":"string","description":"HTTP status code"},"code":{"type":"string"},"title":{"type":"string"},"detail":{"type":"string"},"source":{"type":"object","properties":{"pointer":{"type":"string"},"parameter":{"type":"string"},"header":{"type":"string"}}}},"required":["status"]}}},"required":["errors"]}}}}}}},"/editions/{editionId}/schedules/{scheduleId}/reversion":{"post":{"tags":["Schedules"],"summary":"Revert a draft schedule to the last publication","description":"Discards the draft's slots and refills it from the current publication, which is left untouched. An edition with nothing published yet gets an empty draft. Slots settle against the window the publication was announced for, so a slot the edition has since moved away from is dropped and reported in meta.settled; when the days moved, startDateBecomes says where the first day lands, exactly as it does on an edition patch. Requires the manager role.","operationId":"revertSchedule","parameters":[{"name":"editionId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"scheduleId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":true,"content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"type":{"type":"string","const":"schedule_reversion"},"attributes":{"type":"object","properties":{},"additionalProperties":false},"meta":{"type":"object","properties":{"startDateBecomes":{"type":"string","format":"date","examples":["2020-01-01"]}},"additionalProperties":false}},"required":["type","attributes"],"additionalProperties":false}},"required":["data"],"additionalProperties":false}}}},"responses":{"200":{"description":"OK","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"schedule"},"attributes":{"type":"object","properties":{"createdAt":{"type":"string","format":"date-time"},"publishedAt":{"type":["string","null"],"format":"date-time"},"startDate":{"type":["string","null"],"format":"date","description":"The window this schedule was published for, together with endDate and timeZone. Set when publishedAt is, and never after: a publication records what was announced, and the edition is free to move away from it. Null on a draft, whose window is the edition's current one."},"endDate":{"type":["string","null"],"format":"date"},"timeZone":{"type":["string","null"],"description":"The zone the slot instants of this publication were laid out in. Read them against this rather than the edition's, which may have changed since."},"preliminary":{"type":"boolean","description":"Whether this publication is provisional. Only meaningful once publishedAt is set, and never true for a publication that follows a final one."}},"required":["createdAt","publishedAt","startDate","endDate","timeZone","preliminary"],"additionalProperties":false},"relationships":{"type":"object","properties":{"edition":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"edition"}},"required":["id","type"]}},"required":["data"]},"slots":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"slot"}},"required":["id","type"]}}},"required":["data"]}},"required":["edition","slots"]}},"required":["id","type","attributes","relationships"]},"meta":{"type":"object","properties":{"settled":{"type":"object","properties":{"sessions":{"type":"array","description":"Sessions that lost at least one slot, each said once. The sessions themselves are untouched: a slot that cannot follow the edition is removed and its session waits to be scheduled again. slotsLeft of zero means it is nowhere in the draft, though a publication may still carry it.","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"title":{"type":"string"},"slotsRemoved":{"type":"integer","minimum":1},"slotsLeft":{"type":"integer","minimum":0}},"required":["id","title","slotsRemoved","slotsLeft"],"additionalProperties":false}}},"required":["sessions"],"additionalProperties":false}},"required":["settled"],"additionalProperties":false}},"required":["data","meta"]}}}},"403":{"description":"Forbidden","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"errors":{"type":"array","minItems":1,"items":{"type":"object","properties":{"status":{"type":"string","description":"HTTP status code"},"code":{"type":"string"},"title":{"type":"string"},"detail":{"type":"string"},"source":{"type":"object","properties":{"pointer":{"type":"string"},"parameter":{"type":"string"},"header":{"type":"string"}}}},"required":["status"]}}},"required":["errors"]}}}},"404":{"description":"Edition or schedule not found","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"errors":{"type":"array","minItems":1,"items":{"type":"object","properties":{"status":{"type":"string","description":"HTTP status code"},"code":{"type":"string"},"title":{"type":"string"},"detail":{"type":"string"},"source":{"type":"object","properties":{"pointer":{"type":"string"},"parameter":{"type":"string"},"header":{"type":"string"}}}},"required":["status"]}}},"required":["errors"]}}}},"409":{"description":"Schedule already published (already_published), or the edition moved since the publication and startDateBecomes was not given (start_date_required)","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"errors":{"type":"array","minItems":1,"items":{"type":"object","properties":{"status":{"type":"string","description":"HTTP status code"},"code":{"type":"string"},"title":{"type":"string"},"detail":{"type":"string"},"source":{"type":"object","properties":{"pointer":{"type":"string"},"parameter":{"type":"string"},"header":{"type":"string"}}}},"required":["status"]}}},"required":["errors"]}}}},"422":{"description":"Unprocessable request","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"errors":{"type":"array","minItems":1,"items":{"type":"object","properties":{"status":{"type":"string","description":"HTTP status code"},"code":{"type":"string"},"title":{"type":"string"},"detail":{"type":"string"},"source":{"type":"object","properties":{"pointer":{"type":"string"},"parameter":{"type":"string"},"header":{"type":"string"}}}},"required":["status"]}}},"required":["errors"]}}}}}}},"/editions/{editionId}/schedules/{scheduleId}/slots":{"post":{"tags":["Slots"],"summary":"Create a slot","description":"Adds a slot for a session to a draft schedule. Requires the manager role.","operationId":"createSlot","parameters":[{"name":"editionId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"scheduleId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":true,"content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"type":{"type":"string","const":"slot"},"attributes":{"type":"object","properties":{"startsAt":{"type":"string","format":"date-time","examples":["2020-01-01T14:00:00Z"]},"endsAt":{"type":"string","format":"date-time","examples":["2020-01-01T14:00:00Z"]},"setupTime":{"type":"string","format":"duration","examples":["PT1H"]},"teardownTime":{"type":"string","format":"duration","examples":["PT1H"]}},"required":["startsAt","endsAt","setupTime","teardownTime"],"additionalProperties":false},"relationships":{"type":"object","properties":{"session":{"type":"object","properties":{"data":{"type":"object","properties":{"type":{"type":"string","const":"session"},"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"required":["type","id"],"additionalProperties":false}},"required":["data"],"additionalProperties":false},"location":{"type":"object","properties":{"data":{"type":"object","properties":{"type":{"type":"string","const":"location"},"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"required":["type","id"],"additionalProperties":false}},"required":["data"],"additionalProperties":false}},"required":["session","location"],"additionalProperties":false}},"required":["type","attributes","relationships"],"additionalProperties":false}},"required":["data"],"additionalProperties":false}}}},"responses":{"201":{"description":"Created","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"slot"},"attributes":{"type":"object","properties":{"stableId":{"description":"An ID which is stable across all schedule versions. Publishing copies each slot into the next draft under a fresh `id`, so this is the key to match a slot against one held from an earlier fetch; `id` is not.","type":"string","format":"uuid"},"startsAt":{"type":"string","format":"date-time"},"endsAt":{"type":"string","format":"date-time"},"setupTime":{"type":"string","title":"Duration","format":"duration","example":"PT1H"},"teardownTime":{"type":"string","title":"Duration","format":"duration","example":"PT1H"}},"required":["stableId","startsAt","endsAt","setupTime","teardownTime"],"additionalProperties":false},"relationships":{"type":"object","properties":{"session":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"session"}},"required":["id","type"]}},"required":["data"]},"location":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"location"}},"required":["id","type"]}},"required":["data"]}},"required":["session","location"]}},"required":["id","type","attributes","relationships"]}},"required":["data"]}}}},"403":{"description":"Forbidden","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"errors":{"type":"array","minItems":1,"items":{"type":"object","properties":{"status":{"type":"string","description":"HTTP status code"},"code":{"type":"string"},"title":{"type":"string"},"detail":{"type":"string"},"source":{"type":"object","properties":{"pointer":{"type":"string"},"parameter":{"type":"string"},"header":{"type":"string"}}}},"required":["status"]}}},"required":["errors"]}}}},"404":{"description":"Edition, schedule, session or location not found","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"errors":{"type":"array","minItems":1,"items":{"type":"object","properties":{"status":{"type":"string","description":"HTTP status code"},"code":{"type":"string"},"title":{"type":"string"},"detail":{"type":"string"},"source":{"type":"object","properties":{"pointer":{"type":"string"},"parameter":{"type":"string"},"header":{"type":"string"}}}},"required":["status"]}}},"required":["errors"]}}}},"409":{"description":"Schedule already published (already_published), session not accepted or confirmed (session_not_slottable), or location occupied for the requested time including setup and teardown (already_occupied)","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"errors":{"type":"array","minItems":1,"items":{"type":"object","properties":{"status":{"type":"string","description":"HTTP status code"},"code":{"type":"string"},"title":{"type":"string"},"detail":{"type":"string"},"source":{"type":"object","properties":{"pointer":{"type":"string"},"parameter":{"type":"string"},"header":{"type":"string"}}}},"required":["status"]}}},"required":["errors"]}}}},"422":{"description":"Unprocessable request (outside_edition, reversed_interval)","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"errors":{"type":"array","minItems":1,"items":{"type":"object","properties":{"status":{"type":"string","description":"HTTP status code"},"code":{"type":"string"},"title":{"type":"string"},"detail":{"type":"string"},"source":{"type":"object","properties":{"pointer":{"type":"string"},"parameter":{"type":"string"},"header":{"type":"string"}}}},"required":["status"]}}},"required":["errors"]}}}}}}},"/editions/{editionId}/schedules/{scheduleId}/slots/{slotId}":{"patch":{"tags":["Slots"],"summary":"Update a slot","description":"Patches the timing or the location of a slot in a draft schedule, leaving out what is not sent. The session a slot belongs to cannot be changed. Requires the manager role.","operationId":"updateSlot","parameters":[{"name":"editionId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"scheduleId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"slotId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":true,"content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"type":{"type":"string","const":"slot"},"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"attributes":{"type":"object","properties":{"startsAt":{"type":"string","format":"date-time","examples":["2020-01-01T14:00:00Z"]},"endsAt":{"type":"string","format":"date-time","examples":["2020-01-01T14:00:00Z"]},"setupTime":{"type":"string","format":"duration","examples":["PT1H"]},"teardownTime":{"type":"string","format":"duration","examples":["PT1H"]}},"additionalProperties":false},"relationships":{"type":"object","properties":{"location":{"type":"object","properties":{"data":{"type":"object","properties":{"type":{"type":"string","const":"location"},"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"required":["type","id"],"additionalProperties":false}},"required":["data"],"additionalProperties":false}},"additionalProperties":false}},"required":["type","id"],"additionalProperties":false}},"required":["data"],"additionalProperties":false}}}},"responses":{"200":{"description":"OK","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"slot"},"attributes":{"type":"object","properties":{"stableId":{"description":"An ID which is stable across all schedule versions. Publishing copies each slot into the next draft under a fresh `id`, so this is the key to match a slot against one held from an earlier fetch; `id` is not.","type":"string","format":"uuid"},"startsAt":{"type":"string","format":"date-time"},"endsAt":{"type":"string","format":"date-time"},"setupTime":{"type":"string","title":"Duration","format":"duration","example":"PT1H"},"teardownTime":{"type":"string","title":"Duration","format":"duration","example":"PT1H"}},"required":["stableId","startsAt","endsAt","setupTime","teardownTime"],"additionalProperties":false},"relationships":{"type":"object","properties":{"session":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"session"}},"required":["id","type"]}},"required":["data"]},"location":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"location"}},"required":["id","type"]}},"required":["data"]}},"required":["session","location"]}},"required":["id","type","attributes","relationships"]}},"required":["data"]}}}},"403":{"description":"Forbidden","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"errors":{"type":"array","minItems":1,"items":{"type":"object","properties":{"status":{"type":"string","description":"HTTP status code"},"code":{"type":"string"},"title":{"type":"string"},"detail":{"type":"string"},"source":{"type":"object","properties":{"pointer":{"type":"string"},"parameter":{"type":"string"},"header":{"type":"string"}}}},"required":["status"]}}},"required":["errors"]}}}},"404":{"description":"Edition, schedule or location not found, or the slot does not belong to the schedule","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"errors":{"type":"array","minItems":1,"items":{"type":"object","properties":{"status":{"type":"string","description":"HTTP status code"},"code":{"type":"string"},"title":{"type":"string"},"detail":{"type":"string"},"source":{"type":"object","properties":{"pointer":{"type":"string"},"parameter":{"type":"string"},"header":{"type":"string"}}}},"required":["status"]}}},"required":["errors"]}}}},"409":{"description":"Schedule already published (already_published), session not accepted or confirmed (session_not_slottable), or location occupied for the requested time including setup and teardown (already_occupied)","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"errors":{"type":"array","minItems":1,"items":{"type":"object","properties":{"status":{"type":"string","description":"HTTP status code"},"code":{"type":"string"},"title":{"type":"string"},"detail":{"type":"string"},"source":{"type":"object","properties":{"pointer":{"type":"string"},"parameter":{"type":"string"},"header":{"type":"string"}}}},"required":["status"]}}},"required":["errors"]}}}},"422":{"description":"Unprocessable request (outside_edition, reversed_interval)","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"errors":{"type":"array","minItems":1,"items":{"type":"object","properties":{"status":{"type":"string","description":"HTTP status code"},"code":{"type":"string"},"title":{"type":"string"},"detail":{"type":"string"},"source":{"type":"object","properties":{"pointer":{"type":"string"},"parameter":{"type":"string"},"header":{"type":"string"}}}},"required":["status"]}}},"required":["errors"]}}}}}},"delete":{"tags":["Slots"],"summary":"Delete a slot","description":"Removes a slot from a draft schedule. Requires the manager role.","operationId":"deleteSlot","parameters":[{"name":"editionId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"scheduleId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"slotId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"204":{"description":"No content"},"403":{"description":"Forbidden","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"errors":{"type":"array","minItems":1,"items":{"type":"object","properties":{"status":{"type":"string","description":"HTTP status code"},"code":{"type":"string"},"title":{"type":"string"},"detail":{"type":"string"},"source":{"type":"object","properties":{"pointer":{"type":"string"},"parameter":{"type":"string"},"header":{"type":"string"}}}},"required":["status"]}}},"required":["errors"]}}}},"404":{"description":"Edition or schedule not found, or the slot does not belong to the schedule","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"errors":{"type":"array","minItems":1,"items":{"type":"object","properties":{"status":{"type":"string","description":"HTTP status code"},"code":{"type":"string"},"title":{"type":"string"},"detail":{"type":"string"},"source":{"type":"object","properties":{"pointer":{"type":"string"},"parameter":{"type":"string"},"header":{"type":"string"}}}},"required":["status"]}}},"required":["errors"]}}}},"409":{"description":"Schedule already published (already_published)","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"errors":{"type":"array","minItems":1,"items":{"type":"object","properties":{"status":{"type":"string","description":"HTTP status code"},"code":{"type":"string"},"title":{"type":"string"},"detail":{"type":"string"},"source":{"type":"object","properties":{"pointer":{"type":"string"},"parameter":{"type":"string"},"header":{"type":"string"}}}},"required":["status"]}}},"required":["errors"]}}}}}}},"/editions/{editionId}/me/host":{"get":{"tags":["Hosts"],"summary":"Show the caller's own host record","description":"Retrieves the caller's host record for this edition, with their answers to per-host custom fields and the times they said they are available. The record is created on first read, prefilled from the caller's user record, so this never reports that a host is missing.","operationId":"showMeHost","parameters":[{"name":"editionId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"OK","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"host"},"attributes":{"type":"object","properties":{"displayName":{"type":"string","minLength":1},"emailAddress":{"type":"string","format":"email"},"biography":{"type":"string"},"avatar":{"type":["object","null"],"properties":{"key":{"type":"string"},"filename":{"type":"string"},"url":{"type":"string","format":"uri"},"thumbnailUrl":{"type":"string","format":"uri"},"processing":{"type":"boolean","description":"True while the uploaded original is still what both urls serve. A downscaled version replaces them shortly after, so a poller can skip fetching the image until this turns false."}},"required":["key","filename","url","thumbnailUrl","processing"],"additionalProperties":false}},"required":["displayName","emailAddress","biography","avatar"],"additionalProperties":false},"relationships":{"type":"object","properties":{"responses":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"response"}},"required":["id","type"]}}},"required":["data"]},"availabilities":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"host_availability"}},"required":["id","type"]}}},"required":["data"]}},"required":["responses","availabilities"]}},"required":["id","type","attributes","relationships"]},"included":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"response"},"attributes":{"type":"object","properties":{"value":{}},"required":["value"],"additionalProperties":false},"relationships":{"type":"object","properties":{"customField":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"custom_field"}},"required":["id","type"]}},"required":["data"]}},"required":["customField"]}},"required":["id","type","attributes","relationships"]},{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"host_availability"},"attributes":{"type":"object","description":"One stretch of time the host said they can present in. A host with none of these has not narrowed anything down and counts as available throughout the edition; the first one added is what limits them to the times given.","properties":{"startsAt":{"type":"string","format":"date-time"},"endsAt":{"type":"string","format":"date-time"}},"required":["startsAt","endsAt"],"additionalProperties":false}},"required":["id","type","attributes"]}]}}},"required":["data"]}}}},"403":{"description":"Forbidden","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"errors":{"type":"array","minItems":1,"items":{"type":"object","properties":{"status":{"type":"string","description":"HTTP status code"},"code":{"type":"string"},"title":{"type":"string"},"detail":{"type":"string"},"source":{"type":"object","properties":{"pointer":{"type":"string"},"parameter":{"type":"string"},"header":{"type":"string"}}}},"required":["status"]}}},"required":["errors"]}}}},"404":{"description":"Edition not found","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"errors":{"type":"array","minItems":1,"items":{"type":"object","properties":{"status":{"type":"string","description":"HTTP status code"},"code":{"type":"string"},"title":{"type":"string"},"detail":{"type":"string"},"source":{"type":"object","properties":{"pointer":{"type":"string"},"parameter":{"type":"string"},"header":{"type":"string"}}}},"required":["status"]}}},"required":["errors"]}}}}}},"patch":{"tags":["Hosts"],"summary":"Update the caller's own host record","description":"Updates the caller's host record. Which attributes are accepted follows the edition's profile field configuration, and every one of them is optional: an attribute that is left out keeps its stored value, while one that is sent has to satisfy the requirement the organizer set, so a field marked required may be left untouched but not emptied. Whether a required field was ever answered is checked where it matters, not here. The same holds one level up for the relationships: leaving `responses` or `availabilities` out keeps that collection as it stands, and sending either one replaces it entirely. The two differ in what a replacement may contain. A set of answers has to name every question the edition still asks, so an empty one is refused unless it asks none; availabilities carry no such rule here: an empty set is accepted whether the edition asks for availability optionally or requires it, and reads as free throughout, though where it requires them a host with none is refused once they submit a session or accept an invite. Availabilities are only accepted while the edition asks for them at all. In the `responses` relationship, an answer already stored on this record can be named by its id, which keeps it as it is without its value being sent or checked again. A frozen question is no longer asked, but a stored answer to it has to be named by id: leaving it out, or sending a value for it, is refused with frozen_response.","operationId":"updateMeHost","parameters":[{"name":"editionId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"type":{"type":"string","const":"host"},"attributes":{"type":"object","properties":{"displayName":{"type":"string"},"emailAddress":{"type":"string"},"biography":{"type":"string"},"avatar":{"anyOf":[{"type":"object","properties":{"key":{"type":"string","minLength":1,"maxLength":255,"pattern":"^temp\\/[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}\\.[a-z0-9]+$"},"filename":{"type":"string","minLength":1,"maxLength":255,"pattern":"^[^\\p{Cc}\\u2028\\u2029\\u202a-\\u202e\\u2066-\\u2069]+$"}},"required":["key","filename"],"additionalProperties":false},{"type":"null"}]}},"additionalProperties":false},"relationships":{"type":"object","properties":{"responses":{"type":"object","properties":{"data":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","const":"response"},"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"required":["type","id"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","const":"response"},"lid":{"type":"string"}},"required":["type","lid"],"additionalProperties":false}]}}},"required":["data"],"additionalProperties":false},"availabilities":{"type":"object","properties":{"data":{"maxItems":500,"type":"array","items":{"type":"object","properties":{"type":{"type":"string","const":"host_availability"},"lid":{"type":"string"}},"required":["type","lid"],"additionalProperties":false}}},"required":["data"],"additionalProperties":false}},"additionalProperties":false}},"required":["type"],"additionalProperties":false},"included":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","const":"response"},"lid":{"type":"string"},"attributes":{"type":"object","properties":{"value":{}},"required":["value"],"additionalProperties":false},"relationships":{"type":"object","properties":{"customField":{"type":"object","properties":{"data":{"type":"object","properties":{"type":{"type":"string","const":"custom_field"},"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"required":["type","id"],"additionalProperties":false}},"required":["data"],"additionalProperties":false}},"required":["customField"],"additionalProperties":false}},"required":["type","lid","attributes","relationships"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","const":"host_availability"},"lid":{"type":"string"},"attributes":{"type":"object","properties":{"startsAt":{"type":"string","format":"date-time","examples":["2020-01-01T14:00:00Z"]},"endsAt":{"type":"string","format":"date-time","examples":["2020-01-01T14:00:00Z"]}},"required":["startsAt","endsAt"],"additionalProperties":false}},"required":["type","lid","attributes"],"additionalProperties":false}]}}},"required":["data"],"additionalProperties":false}}},"required":true},"responses":{"200":{"description":"OK","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"host"},"attributes":{"type":"object","properties":{"displayName":{"type":"string","minLength":1},"emailAddress":{"type":"string","format":"email"},"biography":{"type":"string"},"avatar":{"type":["object","null"],"properties":{"key":{"type":"string"},"filename":{"type":"string"},"url":{"type":"string","format":"uri"},"thumbnailUrl":{"type":"string","format":"uri"},"processing":{"type":"boolean","description":"True while the uploaded original is still what both urls serve. A downscaled version replaces them shortly after, so a poller can skip fetching the image until this turns false."}},"required":["key","filename","url","thumbnailUrl","processing"],"additionalProperties":false}},"required":["displayName","emailAddress","biography","avatar"],"additionalProperties":false},"relationships":{"type":"object","properties":{"responses":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"response"}},"required":["id","type"]}}},"required":["data"]},"availabilities":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"host_availability"}},"required":["id","type"]}}},"required":["data"]}},"required":["responses","availabilities"]}},"required":["id","type","attributes","relationships"]},"included":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"response"},"attributes":{"type":"object","properties":{"value":{}},"required":["value"],"additionalProperties":false},"relationships":{"type":"object","properties":{"customField":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"custom_field"}},"required":["id","type"]}},"required":["data"]}},"required":["customField"]}},"required":["id","type","attributes","relationships"]},{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"host_availability"},"attributes":{"type":"object","description":"One stretch of time the host said they can present in. A host with none of these has not narrowed anything down and counts as available throughout the edition; the first one added is what limits them to the times given.","properties":{"startsAt":{"type":"string","format":"date-time"},"endsAt":{"type":"string","format":"date-time"}},"required":["startsAt","endsAt"],"additionalProperties":false}},"required":["id","type","attributes"]}]}}},"required":["data"]}}}},"403":{"description":"Forbidden","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"errors":{"type":"array","minItems":1,"items":{"type":"object","properties":{"status":{"type":"string","description":"HTTP status code"},"code":{"type":"string"},"title":{"type":"string"},"detail":{"type":"string"},"source":{"type":"object","properties":{"pointer":{"type":"string"},"parameter":{"type":"string"},"header":{"type":"string"}}}},"required":["status"]}}},"required":["errors"]}}}},"404":{"description":"Edition or uploaded file not found (missing_file, whose meta echoes the upload's key and the attribute or customFieldId it was sent for)","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"errors":{"type":"array","minItems":1,"items":{"type":"object","properties":{"status":{"type":"string","description":"HTTP status code"},"code":{"type":"string"},"title":{"type":"string"},"detail":{"type":"string"},"source":{"type":"object","properties":{"pointer":{"type":"string"},"parameter":{"type":"string"},"header":{"type":"string"}}}},"required":["status"]}}},"required":["errors"]}}}},"422":{"description":"The record does not satisfy the edition's configuration (availability_not_asked, outside_edition, reversed_interval, sub_minute_interval, missing_responses, frozen_response, unknown_custom_field, unknown_response, duplicate_response, invalid_responses), the request body is invalid, or an image is refused (unsupported_image_type, image_type_mismatch, image_file_too_large, image_too_small, image_too_large, aspect_ratio_mismatch, animated_image)","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"errors":{"type":"array","minItems":1,"items":{"type":"object","properties":{"status":{"type":"string","description":"HTTP status code"},"code":{"type":"string"},"title":{"type":"string"},"detail":{"type":"string"},"source":{"type":"object","properties":{"pointer":{"type":"string"},"parameter":{"type":"string"},"header":{"type":"string"}}}},"required":["status"]}}},"required":["errors"]}}}}}}},"/editions/{editionId}/me/sessions":{"get":{"tags":["Me"],"summary":"List my sessions","description":"Lists the sessions of an edition that the calling user hosts, whatever their state. Unpaginated, unlike the edition's session list. Requires an authenticated user.","operationId":"listMeSessions","parameters":[{"name":"editionId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"OK","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"session"},"attributes":{"type":"object","properties":{"createdAt":{"type":"string","format":"date-time"},"state":{"type":"string","enum":["submitted","accepted","confirmed","rejected","withdrawn","canceled"]},"title":{"type":["string"],"minLength":1},"abstract":{"type":["string"]},"description":{"type":["string"]},"notes":{"type":["string"]},"duration":{"oneOf":[{"type":"string","title":"Duration","format":"duration","example":"PT1H"},{"type":"null"}]},"setupTime":{"oneOf":[{"type":"string","title":"Duration","format":"duration","example":"PT1H"},{"type":"null"}]},"teardownTime":{"oneOf":[{"type":"string","title":"Duration","format":"duration","example":"PT1H"},{"type":"null"}]},"teaserImage":{"type":["object","null"],"properties":{"key":{"type":"string"},"filename":{"type":"string"},"url":{"type":"string","format":"uri"},"thumbnailUrl":{"type":"string","format":"uri"},"processing":{"type":"boolean","description":"True while the uploaded original is still what both urls serve. A downscaled version replaces them shortly after, so a poller can skip fetching the image until this turns false."}},"required":["key","filename","url","thumbnailUrl","processing"],"additionalProperties":false}},"required":["createdAt","state","title","abstract","description","notes","duration","setupTime","teardownTime","teaserImage"],"additionalProperties":false},"relationships":{"type":"object","properties":{"hosts":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"host"}},"required":["id","type"]}}},"required":["data"]},"sessionType":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"session_type"}},"required":["id","type"]}},"required":["data"]},"track":{"type":"object","properties":{"data":{"oneOf":[{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"track"}},"required":["id","type"]},{"type":"null"}]}},"required":["data"]},"responses":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"response"}},"required":["id","type"]}}},"required":["data"]}},"required":["hosts","sessionType","track","responses"]},"meta":{"type":"object","properties":{"hostTransitions":{"type":"array","items":{"type":"string","enum":["submitted","accepted","confirmed","rejected","withdrawn","canceled"]},"description":"States this caller may move the session to as a host of it, empty where they host it but may make no move, or do not host it at all."},"managerTransitions":{"type":"array","items":{"type":"string","enum":["submitted","accepted","confirmed","rejected","withdrawn","canceled"]},"description":"States this caller may move the session to as a manager, empty for everyone else. Scoped separately from hostTransitions so each surface offers the moves of the role it is for: an organizer who submitted their own session decides on it where they organize, not where they speak."},"hosting":{"type":"boolean","description":"Whether this caller hosts the session. Not derivable from the transition lists: a manager receives managerTransitions without hosting it, and a host may receive hostTransitions empty."}},"required":["hostTransitions","managerTransitions","hosting"],"additionalProperties":false}},"required":["id","type","attributes","relationships","meta"]}},"included":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"session_type"},"attributes":{"type":"object","properties":{"name":{"type":"string","minLength":1},"externalKey":{"type":["string","null"],"minLength":1},"defaultDuration":{"type":"string","title":"Duration","format":"duration","example":"PT1H"},"internal":{"type":"boolean"},"selectionDefault":{"type":"boolean"}},"required":["name","externalKey","defaultDuration","internal","selectionDefault"],"additionalProperties":false}},"required":["id","type","attributes"]},{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"track"},"attributes":{"type":"object","properties":{"name":{"type":"string","minLength":1},"externalKey":{"type":["string","null"],"minLength":1},"description":{"type":"string"},"color":{"type":"string","format":"rgb","example":"#ff0000"},"internal":{"type":"boolean"}},"required":["name","externalKey","description","color","internal"],"additionalProperties":false}},"required":["id","type","attributes"]}]}}},"required":["data"]}}}},"403":{"description":"Forbidden","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"errors":{"type":"array","minItems":1,"items":{"type":"object","properties":{"status":{"type":"string","description":"HTTP status code"},"code":{"type":"string"},"title":{"type":"string"},"detail":{"type":"string"},"source":{"type":"object","properties":{"pointer":{"type":"string"},"parameter":{"type":"string"},"header":{"type":"string"}}}},"required":["status"]}}},"required":["errors"]}}}},"404":{"description":"Edition not found","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"errors":{"type":"array","minItems":1,"items":{"type":"object","properties":{"status":{"type":"string","description":"HTTP status code"},"code":{"type":"string"},"title":{"type":"string"},"detail":{"type":"string"},"source":{"type":"object","properties":{"pointer":{"type":"string"},"parameter":{"type":"string"},"header":{"type":"string"}}}},"required":["status"]}}},"required":["errors"]}}}}}}},"/user":{"get":{"tags":["Users"],"summary":"Show the current user","description":"Returns the profile of the authenticated caller, creating it on first call and syncing display name and email address from the identity provider. The data is null as long as the identity provider does not supply both of them. The caller's teams are included. Open to any authenticated subject; integration tokens are rejected.","operationId":"showCurrentUser","responses":{"200":{"description":"OK","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"data":{"oneOf":[{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"user"},"attributes":{"type":"object","properties":{"displayName":{"type":"string","minLength":1},"emailAddress":{"type":"string","format":"email"}},"required":["displayName","emailAddress"],"additionalProperties":false},"relationships":{"type":"object","properties":{"teams":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"team"}},"required":["id","type"]}}},"required":["data"]}},"required":["teams"]}},"required":["id","type","attributes","relationships"]},{"type":"null"}]},"meta":{"type":"object","properties":{"editableFields":{"type":"array","description":"Profile fields the identity provider does not supply, so the caller may set them","items":{"type":"string","enum":["displayName","emailAddress"]}},"highestRole":{"type":["string","null"],"enum":["admin","manager","viewer",null]},"superAdmin":{"description":"Whether the claim itself grants operator access. Not derivable from highestRole, which reads `admin` for a superadmin with no team at all.","type":"boolean"}},"required":["editableFields","highestRole","superAdmin"]},"included":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"team"},"attributes":{"type":"object","properties":{"name":{"type":"string","minLength":1},"role":{"type":["string"],"enum":["admin","manager","viewer"]}},"required":["name","role"],"additionalProperties":false},"relationships":{"type":"object","properties":{"users":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"user"}},"required":["id","type"]}}},"required":["data"]},"invites":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"team_invite"}},"required":["id","type"]}}},"required":["data"]}}}},"required":["id","type","attributes"]}]}}},"required":["data","meta"]}}}},"403":{"description":"Machine tokens cannot have a user profile (forbidden), or the sign-in provider sent no usable value for a claim the configuration reads (missing_profile_claim)","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"errors":{"type":"array","minItems":1,"items":{"type":"object","properties":{"status":{"type":"string","description":"HTTP status code"},"code":{"type":"string"},"title":{"type":"string"},"detail":{"type":"string"},"source":{"type":"object","properties":{"pointer":{"type":"string"},"parameter":{"type":"string"},"header":{"type":"string"}}}},"required":["status"]}}},"required":["errors"]}}}}}},"put":{"tags":["Users"],"summary":"Replace the current user","description":"Creates or replaces the profile of the authenticated caller. Values the identity provider supplies take precedence over the request body, which only has to carry the fields listed in the response meta. The request always refetches the identity provider profile instead of using the cached one. Open to any authenticated subject; integration tokens are rejected.","operationId":"replaceCurrentUser","requestBody":{"required":true,"content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"type":{"type":"string","const":"user"},"attributes":{"type":"object","properties":{"displayName":{"type":"string","minLength":1,"maxLength":200},"emailAddress":{"type":"string","maxLength":254,"format":"email","pattern":"^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"}},"additionalProperties":false}},"required":["type","attributes"],"additionalProperties":false}},"required":["data"],"additionalProperties":false}}}},"responses":{"200":{"description":"OK","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"user"},"attributes":{"type":"object","properties":{"displayName":{"type":"string","minLength":1},"emailAddress":{"type":"string","format":"email"}},"required":["displayName","emailAddress"],"additionalProperties":false},"relationships":{"type":"object","properties":{"teams":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"team"}},"required":["id","type"]}}},"required":["data"]}},"required":["teams"]}},"required":["id","type","attributes","relationships"]},"meta":{"type":"object","properties":{"editableFields":{"type":"array","description":"Profile fields the identity provider does not supply, so the caller may set them","items":{"type":"string","enum":["displayName","emailAddress"]}}},"required":["editableFields"]},"included":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"team"},"attributes":{"type":"object","properties":{"name":{"type":"string","minLength":1},"role":{"type":["string"],"enum":["admin","manager","viewer"]}},"required":["name","role"],"additionalProperties":false},"relationships":{"type":"object","properties":{"users":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"user"}},"required":["id","type"]}}},"required":["data"]},"invites":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"team_invite"}},"required":["id","type"]}}},"required":["data"]}}}},"required":["id","type","attributes"]}]}}},"required":["data","meta"]}}}},"403":{"description":"Machine tokens cannot have a user profile (forbidden), or the sign-in provider sent no usable value for a claim the configuration reads (missing_profile_claim)","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"errors":{"type":"array","minItems":1,"items":{"type":"object","properties":{"status":{"type":"string","description":"HTTP status code"},"code":{"type":"string"},"title":{"type":"string"},"detail":{"type":"string"},"source":{"type":"object","properties":{"pointer":{"type":"string"},"parameter":{"type":"string"},"header":{"type":"string"}}}},"required":["status"]}}},"required":["errors"]}}}},"422":{"description":"Unprocessable request","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"errors":{"type":"array","minItems":1,"items":{"type":"object","properties":{"status":{"type":"string","description":"HTTP status code"},"code":{"type":"string"},"title":{"type":"string"},"detail":{"type":"string"},"source":{"type":"object","properties":{"pointer":{"type":"string"},"parameter":{"type":"string"},"header":{"type":"string"}}}},"required":["status"]}}},"required":["errors"]}}}}}}},"/teams":{"get":{"tags":["Teams"],"summary":"List teams","description":"Lists all teams, ordered by name. Requires the admin role.","operationId":"listTeams","responses":{"200":{"description":"OK","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"team"},"attributes":{"type":"object","properties":{"name":{"type":"string","minLength":1},"role":{"type":["string"],"enum":["admin","manager","viewer"]}},"required":["name","role"],"additionalProperties":false},"relationships":{"type":"object","properties":{"users":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"user"}},"required":["id","type"]}}},"required":["data"]},"invites":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"team_invite"}},"required":["id","type"]}}},"required":["data"]}},"required":["users","invites"]}},"required":["id","type","attributes","relationships"]}}},"required":["data"]}}}},"403":{"description":"Forbidden","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"errors":{"type":"array","minItems":1,"items":{"type":"object","properties":{"status":{"type":"string","description":"HTTP status code"},"code":{"type":"string"},"title":{"type":"string"},"detail":{"type":"string"},"source":{"type":"object","properties":{"pointer":{"type":"string"},"parameter":{"type":"string"},"header":{"type":"string"}}}},"required":["status"]}}},"required":["errors"]}}}}}},"post":{"tags":["Teams"],"summary":"Create a team","description":"Creates a team with the given name and role. Requires the admin role.","operationId":"createTeam","requestBody":{"required":true,"content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"type":{"type":"string","const":"team"},"attributes":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":200},"role":{"type":"string","enum":["admin","manager","viewer"]}},"required":["name","role"],"additionalProperties":false}},"required":["type","attributes"],"additionalProperties":false}},"required":["data"],"additionalProperties":false}}}},"responses":{"201":{"description":"Created","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"team"},"attributes":{"type":"object","properties":{"name":{"type":"string","minLength":1},"role":{"type":["string"],"enum":["admin","manager","viewer"]}},"required":["name","role"],"additionalProperties":false},"relationships":{"type":"object","properties":{"users":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"user"}},"required":["id","type"]}}},"required":["data"]},"invites":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"team_invite"}},"required":["id","type"]}}},"required":["data"]}},"required":["users","invites"]}},"required":["id","type","attributes","relationships"]}},"required":["data"]}}}},"403":{"description":"Forbidden","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"errors":{"type":"array","minItems":1,"items":{"type":"object","properties":{"status":{"type":"string","description":"HTTP status code"},"code":{"type":"string"},"title":{"type":"string"},"detail":{"type":"string"},"source":{"type":"object","properties":{"pointer":{"type":"string"},"parameter":{"type":"string"},"header":{"type":"string"}}}},"required":["status"]}}},"required":["errors"]}}}},"422":{"description":"Unprocessable request","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"errors":{"type":"array","minItems":1,"items":{"type":"object","properties":{"status":{"type":"string","description":"HTTP status code"},"code":{"type":"string"},"title":{"type":"string"},"detail":{"type":"string"},"source":{"type":"object","properties":{"pointer":{"type":"string"},"parameter":{"type":"string"},"header":{"type":"string"}}}},"required":["status"]}}},"required":["errors"]}}}}}}},"/teams/{teamId}":{"get":{"tags":["Teams"],"summary":"Show a team","description":"Retrieves a single team together with its members and pending invites. Requires the admin role.","operationId":"showTeam","parameters":[{"name":"teamId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"OK","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"team"},"attributes":{"type":"object","properties":{"name":{"type":"string","minLength":1},"role":{"type":["string"],"enum":["admin","manager","viewer"]}},"required":["name","role"],"additionalProperties":false},"relationships":{"type":"object","properties":{"users":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"user"}},"required":["id","type"]}}},"required":["data"]},"invites":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"team_invite"}},"required":["id","type"]}}},"required":["data"]}},"required":["users","invites"]}},"required":["id","type","attributes","relationships"]},"included":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"user"},"attributes":{"type":"object","properties":{"displayName":{"type":"string","minLength":1},"emailAddress":{"type":"string","format":"email"}},"required":["displayName","emailAddress"],"additionalProperties":false}},"required":["id","type","attributes"]},{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"team_invite"},"attributes":{"type":"object","properties":{"emailAddress":{"type":"string","format":"email"}},"required":["emailAddress"],"additionalProperties":false}},"required":["id","type","attributes"]}]}}},"required":["data"]}}}},"403":{"description":"Forbidden","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"errors":{"type":"array","minItems":1,"items":{"type":"object","properties":{"status":{"type":"string","description":"HTTP status code"},"code":{"type":"string"},"title":{"type":"string"},"detail":{"type":"string"},"source":{"type":"object","properties":{"pointer":{"type":"string"},"parameter":{"type":"string"},"header":{"type":"string"}}}},"required":["status"]}}},"required":["errors"]}}}},"404":{"description":"Team not found","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"errors":{"type":"array","minItems":1,"items":{"type":"object","properties":{"status":{"type":"string","description":"HTTP status code"},"code":{"type":"string"},"title":{"type":"string"},"detail":{"type":"string"},"source":{"type":"object","properties":{"pointer":{"type":"string"},"parameter":{"type":"string"},"header":{"type":"string"}}}},"required":["status"]}}},"required":["errors"]}}}}}},"patch":{"tags":["Teams"],"summary":"Update a team","description":"Updates the name and role of a team. Requires the admin role.","operationId":"updateTeam","parameters":[{"name":"teamId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":true,"content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"type":{"type":"string","const":"team"},"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"attributes":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":200},"role":{"type":"string","enum":["admin","manager","viewer"]}},"required":["name","role"],"additionalProperties":false}},"required":["type","id","attributes"],"additionalProperties":false}},"required":["data"],"additionalProperties":false}}}},"responses":{"200":{"description":"OK","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"team"},"attributes":{"type":"object","properties":{"name":{"type":"string","minLength":1},"role":{"type":["string"],"enum":["admin","manager","viewer"]}},"required":["name","role"],"additionalProperties":false},"relationships":{"type":"object","properties":{"users":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"user"}},"required":["id","type"]}}},"required":["data"]},"invites":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"team_invite"}},"required":["id","type"]}}},"required":["data"]}},"required":["users","invites"]}},"required":["id","type","attributes","relationships"]}},"required":["data"]}}}},"403":{"description":"Forbidden","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"errors":{"type":"array","minItems":1,"items":{"type":"object","properties":{"status":{"type":"string","description":"HTTP status code"},"code":{"type":"string"},"title":{"type":"string"},"detail":{"type":"string"},"source":{"type":"object","properties":{"pointer":{"type":"string"},"parameter":{"type":"string"},"header":{"type":"string"}}}},"required":["status"]}}},"required":["errors"]}}}},"404":{"description":"Team not found","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"errors":{"type":"array","minItems":1,"items":{"type":"object","properties":{"status":{"type":"string","description":"HTTP status code"},"code":{"type":"string"},"title":{"type":"string"},"detail":{"type":"string"},"source":{"type":"object","properties":{"pointer":{"type":"string"},"parameter":{"type":"string"},"header":{"type":"string"}}}},"required":["status"]}}},"required":["errors"]}}}},"422":{"description":"Unprocessable request","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"errors":{"type":"array","minItems":1,"items":{"type":"object","properties":{"status":{"type":"string","description":"HTTP status code"},"code":{"type":"string"},"title":{"type":"string"},"detail":{"type":"string"},"source":{"type":"object","properties":{"pointer":{"type":"string"},"parameter":{"type":"string"},"header":{"type":"string"}}}},"required":["status"]}}},"required":["errors"]}}}}}},"delete":{"tags":["Teams"],"summary":"Delete a team","description":"Deletes a team along with its memberships and pending invites. Requires the admin role.","operationId":"deleteTeam","parameters":[{"name":"teamId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"204":{"description":"No content"},"403":{"description":"Forbidden","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"errors":{"type":"array","minItems":1,"items":{"type":"object","properties":{"status":{"type":"string","description":"HTTP status code"},"code":{"type":"string"},"title":{"type":"string"},"detail":{"type":"string"},"source":{"type":"object","properties":{"pointer":{"type":"string"},"parameter":{"type":"string"},"header":{"type":"string"}}}},"required":["status"]}}},"required":["errors"]}}}},"404":{"description":"Team not found","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"errors":{"type":"array","minItems":1,"items":{"type":"object","properties":{"status":{"type":"string","description":"HTTP status code"},"code":{"type":"string"},"title":{"type":"string"},"detail":{"type":"string"},"source":{"type":"object","properties":{"pointer":{"type":"string"},"parameter":{"type":"string"},"header":{"type":"string"}}}},"required":["status"]}}},"required":["errors"]}}}}}}},"/teams/{teamId}/relationships/users":{"delete":{"tags":["Teams"],"summary":"Remove team members","description":"Removes users from a team. Ids that are not members are silently ignored. Requires the admin role.","operationId":"removeTeamUsers","parameters":[{"name":"teamId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":true,"content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"type":{"const":"user"},"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"required":["id","type"],"additionalProperties":false}}},"required":["data"],"additionalProperties":false}}}},"responses":{"204":{"description":"No content"},"403":{"description":"Forbidden","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"errors":{"type":"array","minItems":1,"items":{"type":"object","properties":{"status":{"type":"string","description":"HTTP status code"},"code":{"type":"string"},"title":{"type":"string"},"detail":{"type":"string"},"source":{"type":"object","properties":{"pointer":{"type":"string"},"parameter":{"type":"string"},"header":{"type":"string"}}}},"required":["status"]}}},"required":["errors"]}}}},"404":{"description":"Team not found","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"errors":{"type":"array","minItems":1,"items":{"type":"object","properties":{"status":{"type":"string","description":"HTTP status code"},"code":{"type":"string"},"title":{"type":"string"},"detail":{"type":"string"},"source":{"type":"object","properties":{"pointer":{"type":"string"},"parameter":{"type":"string"},"header":{"type":"string"}}}},"required":["status"]}}},"required":["errors"]}}}},"422":{"description":"Unprocessable request","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"errors":{"type":"array","minItems":1,"items":{"type":"object","properties":{"status":{"type":"string","description":"HTTP status code"},"code":{"type":"string"},"title":{"type":"string"},"detail":{"type":"string"},"source":{"type":"object","properties":{"pointer":{"type":"string"},"parameter":{"type":"string"},"header":{"type":"string"}}}},"required":["status"]}}},"required":["errors"]}}}}}}},"/teams/{teamId}/invites":{"post":{"tags":["Teams"],"summary":"Invite a team member","description":"Invites an email address to a team and sends the invite mail. An expired invite for the same address is replaced, a pending one blocks the request. Requires the admin role.","operationId":"inviteTeamMember","parameters":[{"name":"teamId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":true,"content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"type":{"type":"string","const":"team_invite"},"attributes":{"type":"object","properties":{"emailAddress":{"type":"string","maxLength":254,"format":"email","pattern":"^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"}},"required":["emailAddress"]}},"required":["type","attributes"],"additionalProperties":false}},"required":["data"],"additionalProperties":false}}}},"responses":{"201":{"description":"Created","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"team_invite"},"attributes":{"type":"object","properties":{"emailAddress":{"type":"string","format":"email"}},"required":["emailAddress"],"additionalProperties":false}},"required":["id","type","attributes"]}},"required":["data"]}}}},"403":{"description":"Forbidden","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"errors":{"type":"array","minItems":1,"items":{"type":"object","properties":{"status":{"type":"string","description":"HTTP status code"},"code":{"type":"string"},"title":{"type":"string"},"detail":{"type":"string"},"source":{"type":"object","properties":{"pointer":{"type":"string"},"parameter":{"type":"string"},"header":{"type":"string"}}}},"required":["status"]}}},"required":["errors"]}}}},"404":{"description":"Team not found","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"errors":{"type":"array","minItems":1,"items":{"type":"object","properties":{"status":{"type":"string","description":"HTTP status code"},"code":{"type":"string"},"title":{"type":"string"},"detail":{"type":"string"},"source":{"type":"object","properties":{"pointer":{"type":"string"},"parameter":{"type":"string"},"header":{"type":"string"}}}},"required":["status"]}}},"required":["errors"]}}}},"409":{"description":"Address already has a pending invite for this team (invite_exists)","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"errors":{"type":"array","minItems":1,"items":{"type":"object","properties":{"status":{"type":"string","description":"HTTP status code"},"code":{"type":"string"},"title":{"type":"string"},"detail":{"type":"string"},"source":{"type":"object","properties":{"pointer":{"type":"string"},"parameter":{"type":"string"},"header":{"type":"string"}}}},"required":["status"]}}},"required":["errors"]}}}},"422":{"description":"Unprocessable request","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"errors":{"type":"array","minItems":1,"items":{"type":"object","properties":{"status":{"type":"string","description":"HTTP status code"},"code":{"type":"string"},"title":{"type":"string"},"detail":{"type":"string"},"source":{"type":"object","properties":{"pointer":{"type":"string"},"parameter":{"type":"string"},"header":{"type":"string"}}}},"required":["status"]}}},"required":["errors"]}}}}}}},"/teams/{teamId}/invites/{inviteId}":{"delete":{"tags":["Teams"],"summary":"Revoke a team invite","description":"Revokes a pending team invite. Requires the admin role.","operationId":"revokeTeamInvite","parameters":[{"name":"teamId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"inviteId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"204":{"description":"No content"},"403":{"description":"Forbidden","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"errors":{"type":"array","minItems":1,"items":{"type":"object","properties":{"status":{"type":"string","description":"HTTP status code"},"code":{"type":"string"},"title":{"type":"string"},"detail":{"type":"string"},"source":{"type":"object","properties":{"pointer":{"type":"string"},"parameter":{"type":"string"},"header":{"type":"string"}}}},"required":["status"]}}},"required":["errors"]}}}},"404":{"description":"Invite not found for this team","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"errors":{"type":"array","minItems":1,"items":{"type":"object","properties":{"status":{"type":"string","description":"HTTP status code"},"code":{"type":"string"},"title":{"type":"string"},"detail":{"type":"string"},"source":{"type":"object","properties":{"pointer":{"type":"string"},"parameter":{"type":"string"},"header":{"type":"string"}}}},"required":["status"]}}},"required":["errors"]}}}}}}},"/team-invites/{code}":{"get":{"tags":["Teams"],"summary":"Preview a team invite","description":"Describes what an invite code grants, so the acceptance page can name the team before the user accepts. Requires an authenticated user whose email address matches the invite.","operationId":"previewTeamInvite","parameters":[{"name":"code","in":"path","required":true,"schema":{"type":"string","format":"uuid"},"description":"The invite code from the invite email"}],"responses":{"200":{"description":"OK","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"team_invite_preview"},"attributes":{"type":"object","properties":{"teamName":{"type":"string"},"emailAddress":{"type":"string","format":"email"},"expiresAt":{"type":"string","format":"date-time"}},"required":["teamName","emailAddress","expiresAt"],"additionalProperties":false}},"required":["id","type","attributes"]}},"required":["data"]}}}},"403":{"description":"Forbidden (invalid_code, invite_expired, invite_email_mismatch)","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"errors":{"type":"array","minItems":1,"items":{"type":"object","properties":{"status":{"type":"string","description":"HTTP status code"},"code":{"type":"string"},"title":{"type":"string"},"detail":{"type":"string"},"source":{"type":"object","properties":{"pointer":{"type":"string"},"parameter":{"type":"string"},"header":{"type":"string"}}}},"required":["status"]}}},"required":["errors"]}}}}}}},"/team-invites/{code}/acceptance":{"post":{"tags":["Teams"],"summary":"Accept a team invite","description":"Accepts an invite by its code and adds the calling user to the team. Requires an authenticated user whose email address matches the invite.","operationId":"acceptTeamInvite","parameters":[{"name":"code","in":"path","required":true,"schema":{"type":"string","format":"uuid"},"description":"The invite code from the invite email"}],"responses":{"204":{"description":"No content"},"403":{"description":"Forbidden (invalid_code, invite_expired, invite_email_mismatch)","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"errors":{"type":"array","minItems":1,"items":{"type":"object","properties":{"status":{"type":"string","description":"HTTP status code"},"code":{"type":"string"},"title":{"type":"string"},"detail":{"type":"string"},"source":{"type":"object","properties":{"pointer":{"type":"string"},"parameter":{"type":"string"},"header":{"type":"string"}}}},"required":["status"]}}},"required":["errors"]}}}}}}},"/user-purges":{"post":{"tags":["Users"],"summary":"Erase everything held about an address","description":"Removes every account with the given address along with what the address alone reaches: pending invites and unsent mail. Team memberships, session hosting and the answers a host gave about themselves follow the account. Sessions remain, lose the host, and keep the answers they carry about the proposal. Set meta.dryRun to report what would be removed without removing it, and the report echoes it back as an attribute. Requires the admin role.","operationId":"purgeUser","requestBody":{"required":true,"content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"type":{"type":"string","const":"user_purge"},"attributes":{"type":"object","properties":{"emailAddress":{"type":"string","maxLength":254,"format":"email","pattern":"^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"}},"required":["emailAddress"],"additionalProperties":false},"meta":{"type":"object","properties":{"dryRun":{"type":"boolean"}},"required":["dryRun"],"additionalProperties":false}},"required":["type","attributes","meta"],"additionalProperties":false}},"required":["data"],"additionalProperties":false}}}},"responses":{"200":{"description":"What was removed, or would be when dryRun is set","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","format":"email"},"type":{"type":"string","const":"user_purge"},"attributes":{"type":"object","properties":{"dryRun":{"type":"boolean"},"displayNames":{"type":"array","items":{"type":"string"}},"responses":{"type":"integer","minimum":0},"teamMemberships":{"type":"integer","minimum":0},"hostedSessions":{"type":"integer","minimum":0},"teamInvites":{"type":"integer","minimum":0},"sessionHostInvites":{"type":"integer","minimum":0},"pendingMails":{"description":"Mails to this address, or to a host address only these accounts use, in any state but completed, which the purge deletes","type":"integer","minimum":0}},"required":["dryRun","displayNames","responses","teamMemberships","hostedSessions","teamInvites","sessionHostInvites","pendingMails"],"additionalProperties":false}},"required":["id","type","attributes"]}},"required":["data"]}}}},"403":{"description":"Forbidden (forbidden), or the address belongs to the caller's own account (own_account), which another admin has to erase","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"errors":{"type":"array","minItems":1,"items":{"type":"object","properties":{"status":{"type":"string","description":"HTTP status code"},"code":{"type":"string"},"title":{"type":"string"},"detail":{"type":"string"},"source":{"type":"object","properties":{"pointer":{"type":"string"},"parameter":{"type":"string"},"header":{"type":"string"}}}},"required":["status"]}}},"required":["errors"]}}}},"409":{"description":"The address was added as a host in a further edition, taken by or from an account, invited again, or its accounts made transitions or sent invites while the purge ran, repeatedly, so it gave up rather than delete against a moving target (concurrent_change). Retryable.","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"errors":{"type":"array","minItems":1,"items":{"type":"object","properties":{"status":{"type":"string","description":"HTTP status code"},"code":{"type":"string"},"title":{"type":"string"},"detail":{"type":"string"},"source":{"type":"object","properties":{"pointer":{"type":"string"},"parameter":{"type":"string"},"header":{"type":"string"}}}},"required":["status"]}}},"required":["errors"]}}}},"422":{"description":"Unprocessable request","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"errors":{"type":"array","minItems":1,"items":{"type":"object","properties":{"status":{"type":"string","description":"HTTP status code"},"code":{"type":"string"},"title":{"type":"string"},"detail":{"type":"string"},"source":{"type":"object","properties":{"pointer":{"type":"string"},"parameter":{"type":"string"},"header":{"type":"string"}}}},"required":["status"]}}},"required":["errors"]}}}}}}},"/jobs":{"get":{"tags":["Jobs"],"summary":"List jobs","description":"Lists queued jobs, newest first. `filter[state]` takes a comma separated list and matches any of them. Pages are cursor-based: `page[after]` and `page[before]` take the opaque cursors carried by the returned links. Cursors are keyed on the id this list is ordered by, so a cursor whose row was since deleted still resolves to the right place. A row created mid-walk sorts above the first page and a forward walk never sees it. `meta.total` is recounted per request, so it may differ between one page and the next. The links replay the request's filters, `first` is null on the first page, and there is no `last`. `meta.total` counts every job the filter matched, not the page. Requires the superadmin claim.","operationId":"listJobs","parameters":[{"name":"filter","in":"query","style":"deepObject","schema":{"type":"object","properties":{"state":{"type":"string"}},"additionalProperties":false}},{"name":"page","in":"query","style":"deepObject","schema":{"type":"object","properties":{"before":{"type":"string"},"after":{"type":"string"},"size":{"default":50,"type":"integer","minimum":1,"maximum":500}}}}],"responses":{"200":{"description":"OK","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"job"},"attributes":{"type":"object","properties":{"createdAt":{"type":"string","format":"date-time"},"attemptedAt":{"type":["string","null"],"format":"date-time"},"scheduledAt":{"type":"string","format":"date-time"},"finalizedAt":{"type":["string","null"],"format":"date-time"},"attempt":{"type":"integer","minimum":0},"state":{"type":"string","enum":["available","running","retryable","scheduled","completed","canceled","discarded"]},"lastError":{"description":"Why the job last failed, capped at 2000 characters. Null until it fails, kept across an automatic retry so a running job still shows what went wrong last time, and cleared when it completes or an operator retries it.","type":["string","null"]},"type":{"type":"string","enum":["send_email","process_teaser_image","process_avatar"]},"summary":{"description":"What the job is for, in one line, built from the payload.","type":"string"}},"required":["createdAt","attemptedAt","scheduledAt","finalizedAt","attempt","state","lastError","type","summary"],"additionalProperties":false}},"required":["id","type","attributes"]}},"meta":{"type":"object","properties":{"total":{"type":"integer","description":"Jobs the filter matched, across every page rather than the one served."}},"required":["total"],"additionalProperties":false},"links":{"type":"object","properties":{"first":{"oneOf":[{"type":"string","format":"uri-reference"},{"type":"null"}]},"prev":{"oneOf":[{"type":"string","format":"uri-reference"},{"type":"null"}]},"next":{"oneOf":[{"type":"string","format":"uri-reference"},{"type":"null"}]}}}},"required":["data","meta"]}}}},"403":{"description":"Forbidden","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"errors":{"type":"array","minItems":1,"items":{"type":"object","properties":{"status":{"type":"string","description":"HTTP status code"},"code":{"type":"string"},"title":{"type":"string"},"detail":{"type":"string"},"source":{"type":"object","properties":{"pointer":{"type":"string"},"parameter":{"type":"string"},"header":{"type":"string"}}}},"required":["status"]}}},"required":["errors"]}}}}}}},"/jobs/{jobId}":{"get":{"tags":["Jobs"],"summary":"Show a job","description":"Serves one job with the payload its consumer was handed, which the list leaves out. Requires the superadmin claim.","operationId":"showJob","parameters":[{"name":"jobId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"OK","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"job"},"attributes":{"type":"object","properties":{"createdAt":{"type":"string","format":"date-time"},"attemptedAt":{"type":["string","null"],"format":"date-time"},"scheduledAt":{"type":"string","format":"date-time"},"finalizedAt":{"type":["string","null"],"format":"date-time"},"attempt":{"type":"integer","minimum":0},"state":{"type":"string","enum":["available","running","retryable","scheduled","completed","canceled","discarded"]},"lastError":{"description":"Why the job last failed, capped at 2000 characters. Null until it fails, kept across an automatic retry so a running job still shows what went wrong last time, and cleared when it completes or an operator retries it.","type":["string","null"]},"type":{"type":"string","enum":["send_email","process_teaser_image","process_avatar"]},"summary":{"description":"What the job is for, in one line, built from the payload.","type":"string"},"payload":{"description":"Everything the consumer was handed, shaped by the job type.","type":"object"}},"required":["createdAt","attemptedAt","scheduledAt","finalizedAt","attempt","state","lastError","type","summary","payload"],"additionalProperties":false}},"required":["id","type","attributes"]}},"required":["data"]}}}},"403":{"description":"Forbidden","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"errors":{"type":"array","minItems":1,"items":{"type":"object","properties":{"status":{"type":"string","description":"HTTP status code"},"code":{"type":"string"},"title":{"type":"string"},"detail":{"type":"string"},"source":{"type":"object","properties":{"pointer":{"type":"string"},"parameter":{"type":"string"},"header":{"type":"string"}}}},"required":["status"]}}},"required":["errors"]}}}},"404":{"description":"Job not found","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"errors":{"type":"array","minItems":1,"items":{"type":"object","properties":{"status":{"type":"string","description":"HTTP status code"},"code":{"type":"string"},"title":{"type":"string"},"detail":{"type":"string"},"source":{"type":"object","properties":{"pointer":{"type":"string"},"parameter":{"type":"string"},"header":{"type":"string"}}}},"required":["status"]}}},"required":["errors"]}}}}}}},"/jobs/{jobId}/cancellation":{"post":{"tags":["Jobs"],"summary":"Cancel a job","description":"Takes a job that is waiting to run out of the queue. A running job is refused, because the worker holding it writes its own outcome when it finishes. Requires the superadmin claim.","operationId":"cancelJob","parameters":[{"name":"jobId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":true,"content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"type":{"type":"string","const":"job_cancellation"}},"required":["type"],"additionalProperties":false}},"required":["data"],"additionalProperties":false}}}},"responses":{"200":{"description":"OK","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"job"},"attributes":{"type":"object","properties":{"createdAt":{"type":"string","format":"date-time"},"attemptedAt":{"type":["string","null"],"format":"date-time"},"scheduledAt":{"type":"string","format":"date-time"},"finalizedAt":{"type":["string","null"],"format":"date-time"},"attempt":{"type":"integer","minimum":0},"state":{"type":"string","enum":["available","running","retryable","scheduled","completed","canceled","discarded"]},"lastError":{"description":"Why the job last failed, capped at 2000 characters. Null until it fails, kept across an automatic retry so a running job still shows what went wrong last time, and cleared when it completes or an operator retries it.","type":["string","null"]},"type":{"type":"string","enum":["send_email","process_teaser_image","process_avatar"]},"summary":{"description":"What the job is for, in one line, built from the payload.","type":"string"}},"required":["createdAt","attemptedAt","scheduledAt","finalizedAt","attempt","state","lastError","type","summary"],"additionalProperties":false}},"required":["id","type","attributes"]}},"required":["data"]}}}},"403":{"description":"Forbidden","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"errors":{"type":"array","minItems":1,"items":{"type":"object","properties":{"status":{"type":"string","description":"HTTP status code"},"code":{"type":"string"},"title":{"type":"string"},"detail":{"type":"string"},"source":{"type":"object","properties":{"pointer":{"type":"string"},"parameter":{"type":"string"},"header":{"type":"string"}}}},"required":["status"]}}},"required":["errors"]}}}},"404":{"description":"Job not found","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"errors":{"type":"array","minItems":1,"items":{"type":"object","properties":{"status":{"type":"string","description":"HTTP status code"},"code":{"type":"string"},"title":{"type":"string"},"detail":{"type":"string"},"source":{"type":"object","properties":{"pointer":{"type":"string"},"parameter":{"type":"string"},"header":{"type":"string"}}}},"required":["status"]}}},"required":["errors"]}}}},"409":{"description":"The job is running or already finished (not_cancelable)","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"errors":{"type":"array","minItems":1,"items":{"type":"object","properties":{"status":{"type":"string","description":"HTTP status code"},"code":{"type":"string"},"title":{"type":"string"},"detail":{"type":"string"},"source":{"type":"object","properties":{"pointer":{"type":"string"},"parameter":{"type":"string"},"header":{"type":"string"}}}},"required":["status"]}}},"required":["errors"]}}}},"422":{"description":"Unprocessable request","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"errors":{"type":"array","minItems":1,"items":{"type":"object","properties":{"status":{"type":"string","description":"HTTP status code"},"code":{"type":"string"},"title":{"type":"string"},"detail":{"type":"string"},"source":{"type":"object","properties":{"pointer":{"type":"string"},"parameter":{"type":"string"},"header":{"type":"string"}}}},"required":["status"]}}},"required":["errors"]}}}}}}},"/jobs/{jobId}/retry":{"post":{"tags":["Jobs"],"summary":"Retry a job","description":"Puts a discarded or canceled job back into the queue with its attempt counter reset, and clears the reason it failed. Requires the superadmin claim.","operationId":"retryJob","parameters":[{"name":"jobId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":true,"content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"type":{"type":"string","const":"job_retry"}},"required":["type"],"additionalProperties":false}},"required":["data"],"additionalProperties":false}}}},"responses":{"200":{"description":"OK","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"job"},"attributes":{"type":"object","properties":{"createdAt":{"type":"string","format":"date-time"},"attemptedAt":{"type":["string","null"],"format":"date-time"},"scheduledAt":{"type":"string","format":"date-time"},"finalizedAt":{"type":["string","null"],"format":"date-time"},"attempt":{"type":"integer","minimum":0},"state":{"type":"string","enum":["available","running","retryable","scheduled","completed","canceled","discarded"]},"lastError":{"description":"Why the job last failed, capped at 2000 characters. Null until it fails, kept across an automatic retry so a running job still shows what went wrong last time, and cleared when it completes or an operator retries it.","type":["string","null"]},"type":{"type":"string","enum":["send_email","process_teaser_image","process_avatar"]},"summary":{"description":"What the job is for, in one line, built from the payload.","type":"string"}},"required":["createdAt","attemptedAt","scheduledAt","finalizedAt","attempt","state","lastError","type","summary"],"additionalProperties":false}},"required":["id","type","attributes"]}},"required":["data"]}}}},"403":{"description":"Forbidden","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"errors":{"type":"array","minItems":1,"items":{"type":"object","properties":{"status":{"type":"string","description":"HTTP status code"},"code":{"type":"string"},"title":{"type":"string"},"detail":{"type":"string"},"source":{"type":"object","properties":{"pointer":{"type":"string"},"parameter":{"type":"string"},"header":{"type":"string"}}}},"required":["status"]}}},"required":["errors"]}}}},"404":{"description":"Job not found","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"errors":{"type":"array","minItems":1,"items":{"type":"object","properties":{"status":{"type":"string","description":"HTTP status code"},"code":{"type":"string"},"title":{"type":"string"},"detail":{"type":"string"},"source":{"type":"object","properties":{"pointer":{"type":"string"},"parameter":{"type":"string"},"header":{"type":"string"}}}},"required":["status"]}}},"required":["errors"]}}}},"409":{"description":"Job is neither discarded nor canceled (not_retryable)","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"errors":{"type":"array","minItems":1,"items":{"type":"object","properties":{"status":{"type":"string","description":"HTTP status code"},"code":{"type":"string"},"title":{"type":"string"},"detail":{"type":"string"},"source":{"type":"object","properties":{"pointer":{"type":"string"},"parameter":{"type":"string"},"header":{"type":"string"}}}},"required":["status"]}}},"required":["errors"]}}}},"422":{"description":"Unprocessable request","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"errors":{"type":"array","minItems":1,"items":{"type":"object","properties":{"status":{"type":"string","description":"HTTP status code"},"code":{"type":"string"},"title":{"type":"string"},"detail":{"type":"string"},"source":{"type":"object","properties":{"pointer":{"type":"string"},"parameter":{"type":"string"},"header":{"type":"string"}}}},"required":["status"]}}},"required":["errors"]}}}}}}},"/signed-posts":{"post":{"tags":["Signed Posts"],"summary":"Create a signed post","description":"Creates a presigned S3 POST for a temporary upload. The signature pins the content type, which has to be one of the allowed image or document types, and the MD5 hash of the payload, and it caps the upload at the configured maximum file size. Open to any authenticated user with a profile.","operationId":"createSignedPost","requestBody":{"required":true,"content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"type":{"type":"string","const":"signed_post"},"attributes":{"type":"object","properties":{"contentType":{"type":"string","enum":["image/png","image/jpeg","image/webp","image/gif","image/bmp","image/tiff","application/pdf","text/plain","text/csv","application/zip","application/msword","application/vnd.openxmlformats-officedocument.wordprocessingml.document","application/rtf","application/vnd.ms-powerpoint","application/vnd.openxmlformats-officedocument.presentationml.presentation","application/vnd.ms-excel","application/vnd.openxmlformats-officedocument.spreadsheetml.sheet","application/vnd.oasis.opendocument.text","application/vnd.oasis.opendocument.spreadsheet","application/vnd.oasis.opendocument.presentation"]},"md5Hash":{"type":"string","pattern":"^[a-fA-F0-9]{32}$"}},"required":["contentType","md5Hash"],"additionalProperties":false}},"required":["type","attributes"],"additionalProperties":false}},"required":["data"],"additionalProperties":false}}}},"responses":{"200":{"description":"OK","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"signed_post"},"attributes":{"type":"object","properties":{"key":{"description":"Object key the upload is stored under","type":"string"},"url":{"description":"Endpoint the multipart form has to be posted to","type":"string","format":"uri"},"fields":{"description":"Form fields which have to be sent unchanged with the upload","type":"object","additionalProperties":{"type":"string"}},"expiresIn":{"description":"Seconds the signature stays valid","type":"integer"}},"required":["key","url","fields","expiresIn"],"additionalProperties":false}},"required":["id","type","attributes"]}},"required":["data"]}}}},"403":{"description":"Forbidden","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"errors":{"type":"array","minItems":1,"items":{"type":"object","properties":{"status":{"type":"string","description":"HTTP status code"},"code":{"type":"string"},"title":{"type":"string"},"detail":{"type":"string"},"source":{"type":"object","properties":{"pointer":{"type":"string"},"parameter":{"type":"string"},"header":{"type":"string"}}}},"required":["status"]}}},"required":["errors"]}}}},"422":{"description":"Unprocessable request","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"errors":{"type":"array","minItems":1,"items":{"type":"object","properties":{"status":{"type":"string","description":"HTTP status code"},"code":{"type":"string"},"title":{"type":"string"},"detail":{"type":"string"},"source":{"type":"object","properties":{"pointer":{"type":"string"},"parameter":{"type":"string"},"header":{"type":"string"}}}},"required":["status"]}}},"required":["errors"]}}}},"429":{"description":"Too many uploads are already waiting to be attached (pending_upload_quota_reached)","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"errors":{"type":"array","minItems":1,"items":{"type":"object","properties":{"status":{"type":"string","description":"HTTP status code"},"code":{"type":"string"},"title":{"type":"string"},"detail":{"type":"string"},"source":{"type":"object","properties":{"pointer":{"type":"string"},"parameter":{"type":"string"},"header":{"type":"string"}}}},"required":["status"]}}},"required":["errors"]}}}}}}},"/timezones":{"get":{"tags":["Timezones"],"operationId":"listTimezones","summary":"List time zones","description":"Lists every IANA time zone identifier the server accepts for edition time zones. Open to any authenticated subject.","responses":{"200":{"description":"OK","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"IANA time zone identifier"},"type":{"type":"string","const":"timezone"}},"required":["id","type"]}}},"required":["data"]}}}}}}},"/clock/now":{"get":{"tags":["Clock"],"operationId":"getClock","summary":"Read the server's clock","description":"Answers with the server's current time, which a client measures its own clock against so that deadlines and freezes fall when the server applies them. Open to any authenticated subject.","responses":{"200":{"description":"OK","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","const":"now"},"type":{"type":"string","const":"clock"},"attributes":{"type":"object","properties":{"time":{"type":"string","format":"date-time"}},"required":["time"],"additionalProperties":false}},"required":["id","type","attributes"]}},"required":["data"]}}}}}}}}}