diff --git a/.gitattributes b/.gitattributes index 19365756a..d020d0c8f 100644 --- a/.gitattributes +++ b/.gitattributes @@ -28,7 +28,7 @@ gradlew text eol=lf services/frontend/src/services/api/blueshell/** linguist-generated=true services/frontend/src/services/api/discord/** linguist-generated=true *.gen.ts linguist-generated=true -services/api/openapi.json linguist-generated=true +services/api/openapi.yaml linguist-generated=true # Yarn PnP runtime + lockfiles are tooling output, not source. services/frontend/.pnp.cjs linguist-generated=true diff --git a/.github/diff-stats.yml b/.github/diff-stats.yml index e761f1848..066b1fe34 100644 --- a/.github/diff-stats.yml +++ b/.github/diff-stats.yml @@ -28,7 +28,7 @@ service: frontend category: generated -- glob: "services/api/openapi.json" +- glob: "services/api/openapi.yaml" service: api category: generated diff --git a/.github/workflows/validate.yml b/.github/workflows/validate.yml index 17a256c92..b6d821d4a 100644 --- a/.github/workflows/validate.yml +++ b/.github/workflows/validate.yml @@ -523,7 +523,7 @@ jobs: - name: Assert Blueshell spec and client are in sync run: | git diff --exit-code -- \ - services/api/openapi.json \ + services/api/openapi.yaml \ services/frontend/src/services/api/blueshell \ services/frontend/src/services/api/blueshell.runtime.ts \ services/frontend/src/services/api/index.ts @@ -534,6 +534,6 @@ jobs: with: name: openapi-sync-logs path: | - services/api/build/openapi.raw.json + services/api/build/openapi.raw.yaml services/api/build/*.log if-no-files-found: ignore diff --git a/scripts/generate_openapi.sh b/scripts/generate_openapi.sh index fb91661ce..f90b52215 100755 --- a/scripts/generate_openapi.sh +++ b/scripts/generate_openapi.sh @@ -43,7 +43,7 @@ normalize_specs echo "Generating frontend TypeScript clients..." # `up -d frontend` is a no-op when the compose config is unchanged, # but forces a recreate when mounts or env have drifted (e.g. after -# the openapi.yaml → openapi.json rename). Without this, `exec` runs +# the spec path changing). Without this, `exec` runs # against a stale container that still has the old bind-mounts. docker compose up -d frontend docker compose exec frontend sh -c \ diff --git a/scripts/openapi-common.sh b/scripts/openapi-common.sh index 3dda2f4df..4a31c0d8a 100755 --- a/scripts/openapi-common.sh +++ b/scripts/openapi-common.sh @@ -6,12 +6,10 @@ DISCORD_OPENAPI_URL="${DISCORD_OPENAPI_URL:-https://raw.githubusercontent.com/di BREVO_OPENAPI_URL="${BREVO_OPENAPI_URL:-https://api.brevo.com/v3/swagger_definition_v3.yml}" SHARED_OPENAPI_DIR="${SHARED_OPENAPI_DIR:-libs/openapi-specs}" -# The spec is minified JSON produced by `jq -c` below. We keep the -# extension as `.json` so downstream tools that pick their parser by -# extension (notably @hey-api/openapi-ts, which otherwise parses -# `.yaml` as YAML and errors on single-line flow-style documents) -# read it correctly. -API_OPENAPI_SPEC="${API_OPENAPI_SPEC:-services/api/openapi.json}" +# Block-style YAML with its keys sorted, written by the generator test. One line per +# value, so two branches that each add an endpoint conflict only where they disagree +# rather than on the single line a minified document is. +API_OPENAPI_SPEC="${API_OPENAPI_SPEC:-services/api/openapi.yaml}" check_common_prerequisites() { for cmd in curl jq; do @@ -40,21 +38,11 @@ regen_brevo_client() { ./gradlew --no-daemon --build-cache :libs:clients:brevo:generate } -# Normalizes the Blueshell API spec in-place. Caller must have written -# either the normalized spec or its `.raw.json` upstream. +# The Blueshell spec needs no normalising: the generator test sorts its keys and writes +# block YAML. Kept as a no-op so the call sites read the same for every spec. normalize_api_spec() { - echo "Normalizing Blueshell OpenAPI spec..." - local tmp - tmp="$(mktemp)" - - if [ -f "${API_OPENAPI_SPEC%.json}.raw.json" ]; then - jq -S -c . "${API_OPENAPI_SPEC%.json}.raw.json" > "$tmp" && mv "$tmp" "$API_OPENAPI_SPEC" - rm -f "${API_OPENAPI_SPEC%.json}.raw.json" - elif [ -f "$API_OPENAPI_SPEC" ]; then - jq -S -c . "$API_OPENAPI_SPEC" > "$tmp" && mv "$tmp" "$API_OPENAPI_SPEC" - else - echo "$API_OPENAPI_SPEC (or .raw.json) not found" >&2 - rm -f "$tmp" + if [ ! -f "$API_OPENAPI_SPEC" ]; then + echo "$API_OPENAPI_SPEC not found" >&2 exit 1 fi } diff --git a/services/api/build.gradle.kts b/services/api/build.gradle.kts index d71166846..6397bafa5 100644 --- a/services/api/build.gradle.kts +++ b/services/api/build.gradle.kts @@ -272,15 +272,15 @@ val discordLiveTest by tasks.registering(Test::class) { } // Generate OpenAPI spec via in-memory H2 (no MariaDB required). -// Runs the openapi-gen-tagged test, extracts the spec from build/openapi.raw.json, -// and normalizes it (sorts keys, minifies) into services/api/openapi.json. +// Runs the openapi-gen-tagged test, which writes sorted block YAML to +// build/openapi.raw.yaml, and copies that to services/api/openapi.yaml. val openApiGenTest by tasks.registering(Test::class) { description = "Runs the OpenAPI spec generation test tagged with @Tag(\"openapi-gen\")." group = "verification" testClassesDirs = sourceSets["test"].output.classesDirs classpath = sourceSets["test"].runtimeClasspath useJUnitPlatform { includeTags("openapi-gen") } - // Disable caching so the test always runs and recreates openapi.raw.json. + // Disable caching so the test always runs and recreates openapi.raw.yaml. // The raw file is not declared as a cacheable output; it's a side effect // of the test used by dumpOpenApiSpec. Always running is fine since this // task only runs when dumpOpenApiSpec is invoked (openapi-sync CI + local regen). @@ -289,31 +289,25 @@ val openApiGenTest by tasks.registering(Test::class) { } val dumpOpenApiSpec by tasks.registering { - description = "Generates OpenAPI spec via in-memory H2 without database. Normalizes and writes to services/api/openapi.json." + description = "Generates the OpenAPI spec via in-memory H2 without a database, into services/api/openapi.yaml." group = "verification" dependsOn(openApiGenTest) doLast { - val rawFile = File(buildDir, "openapi.raw.json") - val outputFile = File(projectDir, "openapi.json") + // The generator test already sorts the keys and writes block YAML, so there is + // nothing to normalise here and no external tool to depend on. + val rawFile = File(buildDir, "openapi.raw.yaml") + val outputFile = File(projectDir, "openapi.yaml") if (!rawFile.exists()) { throw RuntimeException("OpenAPI raw spec not found at ${rawFile.absolutePath}") } - // Normalize using jq: sort keys (-S) and compact output (-c) - val process = ProcessBuilder("jq", "-S", "-c", ".", rawFile.absolutePath) - .redirectOutput(outputFile) - .redirectError(ProcessBuilder.Redirect.INHERIT) - .start() - val exitCode = process.waitFor() + rawFile.copyTo(outputFile, overwrite = true) + rawFile.delete() - if (exitCode != 0) { - throw RuntimeException("jq normalization failed with exit code $exitCode") - } - - println("OpenAPI spec normalized and written to ${outputFile.absolutePath}") + println("OpenAPI spec written to ${outputFile.absolutePath}") } } diff --git a/services/api/openapi.json b/services/api/openapi.json deleted file mode 100644 index 9c63bcc31..000000000 --- a/services/api/openapi.json +++ /dev/null @@ -1 +0,0 @@ -{"components":{"schemas":{"ActionActorType":{"enum":["USER","SYSTEM"],"type":"string"},"ActivationResponse":{"properties":{"membershipStarted":{"type":"boolean"}},"required":["membershipStarted"],"type":"object"},"Actor":{"properties":{"role":{"$ref":"#/components/schemas/Role"},"type":{"$ref":"#/components/schemas/ActionActorType"},"userId":{"format":"int64","type":["integer","null"]}},"required":["role","type"],"type":"object"},"AddBoardMemberRequest":{"properties":{"description":{"type":["string","null"]},"displayName":{"description":"Who held the seat, when no account can be attached to it","maxLength":128,"minLength":0,"type":["string","null"]},"endDate":{"format":"date","type":["string","null"]},"image":{"description":"Asset file name of the member's portrait","maxLength":255,"minLength":0,"type":["string","null"]},"nickname":{"description":"The name the seat was known by, without the quotes around it","maxLength":128,"minLength":0,"type":["string","null"]},"portrait":{"description":"Where the seat's portrait is stored; blank leaves the seat without one","maxLength":255,"minLength":0,"type":["string","null"]},"role":{"minLength":1,"type":"string"},"startDate":{"format":"date","type":"string"},"userId":{"description":"The member holding the seat; absent for somebody with no account","format":"int64","type":["integer","null"]}},"required":["role","startDate"],"type":"object"},"AddRosterEntryRequest":{"description":"Put somebody on a team's roster for a season","properties":{"description":{"description":"A short caption about them, in markdown","maxLength":280,"minLength":0,"type":["string","null"]},"displayName":{"maxLength":128,"minLength":0,"type":["string","null"]},"game":{"description":"The game the team is fielded in; naming somebody fields it there","maxLength":32,"minLength":1,"type":"string"},"handle":{"maxLength":128,"minLength":1,"type":"string"},"icon":{"description":"Where this entry's picture is stored; nothing leaves it without one","maxLength":255,"minLength":0,"type":["string","null"]},"role":{"$ref":"#/components/schemas/TeamRole"},"roleTitle":{"description":"What they did in the team's own words, beside the fixed part","maxLength":64,"minLength":0,"type":["string","null"]},"seasonId":{"format":"int64","type":"integer"},"userId":{"description":"The member this entry belongs to, when they are known","format":"int64","type":["integer","null"]}},"required":["game","handle","role","seasonId"],"type":"object"},"AddressResponse":{"properties":{"city":{"type":["string","null"]},"country":{"type":["string","null"]},"createdAt":{"format":"date-time","type":"string"},"houseNumber":{"type":["string","null"]},"id":{"format":"int64","type":"integer"},"street":{"type":["string","null"]},"updatedAt":{"format":"date-time","type":"string"},"userId":{"format":"int64","type":["integer","null"]},"version":{"format":"int64","type":"integer"},"zipCode":{"type":["string","null"]}},"required":["createdAt","id","updatedAt","version"],"type":"object"},"AnswerRequest":{"properties":{"optionSelections":{"items":{"type":"boolean"},"type":["array","null"]},"questionId":{"format":"int64","type":"integer"},"textResponse":{"type":["string","null"]}},"required":["questionId"],"type":"object"},"AnswerResponse":{"properties":{"createdAt":{"format":"date-time","type":"string"},"id":{"format":"int64","type":"integer"},"optionSelections":{"items":{"type":"boolean"},"type":["array","null"]},"questionId":{"format":"int64","type":"integer"},"textResponse":{"type":["string","null"]},"updatedAt":{"format":"date-time","type":"string"},"version":{"format":"int64","type":"integer"}},"required":["createdAt","id","questionId","updatedAt","version"],"type":"object"},"ApiError":{"description":"Problem Details for HTTP APIs including validation errors.","properties":{"detail":{"description":"Human-readable explanation specific to this occurrence.","example":"Validation failed for request.","type":"string"},"errors":{"description":"List of field/object validation errors (present when binding/validation fails).","items":{"$ref":"#/components/schemas/FieldValidationError"},"type":"array"},"instance":{"description":"A URI reference that identifies the specific occurrence.","example":"/api/v1/users","format":"uri","type":"string"},"status":{"description":"HTTP status code.","example":400,"format":"int32","type":"integer"},"title":{"description":"Short, human-readable summary of the problem.","example":"Bad Request","type":"string"},"traceId":{"description":"Trace or correlation id if available (Spring may add this via problem detail handlers).","example":"a8c0c4e5f1c24a7e","type":"string"},"type":{"description":"Problem type URI (RFC 7807).","example":"about:blank","type":"string"}}},"BlogResponse":{"properties":{"createdAt":{"format":"date-time","type":"string"},"html":{"type":"string"},"id":{"format":"int64","type":"integer"},"publishedAt":{"format":"date-time","type":"string"},"title":{"type":"string"},"updatedAt":{"format":"date-time","type":"string"},"url":{"type":"string"},"version":{"format":"int64","type":"integer"}},"required":["createdAt","html","id","publishedAt","title","updatedAt","url","version"],"type":"object"},"BoardCreateMembershipRequest":{"properties":{"endDate":{"format":"date","type":["string","null"]},"incasso":{"type":"boolean"},"memberType":{"$ref":"#/components/schemas/MemberType"},"startDate":{"format":"date","type":["string","null"]},"userId":{"format":"int64","type":"integer"}},"required":["incasso","memberType","startDate","userId"],"type":"object"},"BoardMemberResponse":{"properties":{"boardId":{"format":"int64","type":"integer"},"createdAt":{"format":"date-time","type":"string"},"description":{"description":"The personal note the board page shows beside a member","type":["string","null"]},"endDate":{"format":"date","type":["string","null"]},"id":{"description":"The seat's own id, which is how it is edited or removed","format":"int64","type":"integer"},"image":{"description":"Asset file name of the member's portrait","type":["string","null"]},"name":{"description":"Who held the seat: the linked member's name, or the recorded one","type":["string","null"]},"nickname":{"description":"The name the seat was known by, beside the name rather than inside it","type":["string","null"]},"portrait":{"description":"The seat's portrait, with its size and the widths it is stored at","oneOf":[{"$ref":"#/components/schemas/Image"},{"type":"null"}]},"role":{"type":"string"},"startDate":{"format":"date","type":"string"},"updatedAt":{"format":"date-time","type":"string"},"userId":{"description":"The member holding the seat, when one is linked to it","format":"int64","type":["integer","null"]},"version":{"format":"int64","type":"integer"}},"required":["boardId","createdAt","id","role","startDate","updatedAt","version"],"type":"object"},"BoardResponse":{"properties":{"accent":{"description":"The board's own colour; absent means the association's blue","type":["string","null"]},"candidate":{"type":"string"},"cheer":{"description":"The board's shouted line","type":["string","null"]},"createdAt":{"format":"date-time","type":"string"},"description":{"description":"What the year was about, in the board's own words","type":["string","null"]},"endDate":{"format":"date","type":["string","null"]},"id":{"format":"int64","type":"integer"},"image":{"description":"Asset file name of the board's own photograph","type":["string","null"]},"members":{"items":{"$ref":"#/components/schemas/BoardMemberResponse"},"type":"array"},"name":{"description":"The name the board chose for itself, where one is recorded","type":["string","null"]},"number":{"description":"The board's place in the line, unique among the boards that exist","format":"int32","type":"integer"},"photo":{"description":"The board's group photograph, with its size and the widths it is stored at","oneOf":[{"$ref":"#/components/schemas/Image"},{"type":"null"}]},"startDate":{"format":"date","type":"string"},"updatedAt":{"format":"date-time","type":"string"},"version":{"format":"int64","type":"integer"}},"required":["candidate","createdAt","id","members","number","startDate","updatedAt","version"],"type":"object"},"BulkActionResult":{"properties":{"applied":{"format":"int32","type":"integer"},"queued":{"format":"int32","type":"integer"},"skipped":{"format":"int32","type":"integer"}},"required":["applied","queued","skipped"],"type":"object"},"BulkFeeType":{"enum":["FULL_YEAR_FEE","HALF_YEAR_FEE","ALUMNI_FEE"],"type":"string"},"BulkMarkPaidRequest":{"properties":{"contributionPeriodId":{"format":"int64","minimum":0,"type":["integer","null"]},"userIds":{"items":{"format":"int64","type":"integer"},"maxItems":1000,"minItems":0,"type":"array"}},"required":["contributionPeriodId","userIds"],"type":"object"},"BulkMarkUnpaidRequest":{"properties":{"contributionPeriodId":{"format":"int64","minimum":0,"type":["integer","null"]},"userIds":{"items":{"format":"int64","type":"integer"},"maxItems":1000,"minItems":0,"type":"array"}},"required":["contributionPeriodId","userIds"],"type":"object"},"BulkMembershipPreview":{"properties":{"effectiveDate":{"format":"date","type":"string"},"rows":{"items":{"$ref":"#/components/schemas/BulkMembershipPreviewRow"},"type":"array"}},"required":["effectiveDate","rows"],"type":"object"},"BulkMembershipPreviewRow":{"properties":{"disposition":{"$ref":"#/components/schemas/BulkRowDisposition"},"reason":{"oneOf":[{"$ref":"#/components/schemas/BulkRowReason"},{"type":"null"}]},"userId":{"format":"int64","type":"integer"}},"required":["disposition","userId"],"type":"object"},"BulkMembershipRequest":{"properties":{"userIds":{"items":{"format":"int64","type":"integer"},"maxItems":1000,"minItems":0,"type":"array"}},"required":["userIds"],"type":"object"},"BulkMoveTargetsRequest":{"description":"Where to file several targets at once.","properties":{"externalIds":{"description":"The external ids of the targets to move, as the system itself names them.","example":["7","33"],"items":{"type":"string"},"minItems":1,"type":"array"},"folder":{"description":"The folder to move them into. Must already exist in the system.","example":"Committees","minLength":1,"type":"string"}},"required":["externalIds","folder"],"type":"object"},"BulkRowDisposition":{"enum":["INCLUDED","SKIPPED","EXCLUDED","WARNING"],"type":"string"},"BulkRowReason":{"enum":["ALREADY_PAID","NOT_PAID","HONORARY","INCASSO_MISMATCH","NO_ACTIVE_MEMBERSHIP","STARTED_TODAY","NO_EMAIL","DELETED","ALREADY_ACTIVE","NO_CONTRIBUTION_PERIOD","WILL_RESUME","WILL_START_NEW"],"type":"string"},"BulkRowVocabulary":{"description":"Contract-only holder that publishes the bulk-action enums. Not returned by any endpoint.","properties":{"disposition":{"$ref":"#/components/schemas/BulkRowDisposition"},"feeCycleGroup":{"$ref":"#/components/schemas/FeeCycleGroup"},"feeType":{"$ref":"#/components/schemas/BulkFeeType"},"reason":{"$ref":"#/components/schemas/BulkRowReason"}},"required":["disposition","feeCycleGroup","feeType","reason"]},"BulkTargetMoveResult":{"description":"The outcome of moving several targets.","properties":{"failed":{"description":"The targets the system refused, and what it said. Empty when all moved.","items":{"$ref":"#/components/schemas/FailedTargetMove"},"type":"array"},"moved":{"description":"The targets that were moved, as the system now describes them.","items":{"$ref":"#/components/schemas/ExternalTarget"},"type":"array"}},"required":["failed","moved"],"type":"object"},"CohortDetail":{"properties":{"definitionKey":{"description":"Which definition in code decides who belongs to this cohort","type":["string","null"]},"externalId":{"type":["string","null"]},"folder":{"type":["string","null"]},"id":{"format":"int64","type":"integer"},"kind":{"$ref":"#/components/schemas/CohortKind"},"label":{"type":"string"},"memberCount":{"format":"int32","type":"integer"},"members":{"items":{"$ref":"#/components/schemas/CohortMemberRow"},"type":"array"},"system":{"type":"string"}},"required":["id","kind","label","memberCount","members","system"],"type":"object"},"CohortKind":{"enum":["LIST","ROLE","GROUP"],"type":"string"},"CohortMapping":{"properties":{"cohortId":{"format":"int64","type":"integer"},"externalId":{"type":["string","null"]},"kind":{"$ref":"#/components/schemas/CohortKind"},"label":{"type":"string"},"lastReconciledAt":{"description":"When this cohort was last confirmed to agree with its target","format":"date-time","type":["string","null"]},"path":{"description":"Where the target sits on its system, outside in: the system, then any folder holding it. Read from what was recorded when the target was linked or moved, so a page costs no call to the system.","items":{"type":"string"},"type":"array"},"system":{"$ref":"#/components/schemas/TargetSystem","description":"External system this mapping targets"}},"required":["cohortId","kind","label","path","system"],"type":"object"},"CohortMemberRow":{"properties":{"cohortMemberId":{"format":"int64","type":"integer"},"isUserDeleted":{"type":"boolean"},"joinedAt":{"format":"date-time","type":"string"},"userEmail":{"type":["string","null"]},"userFullName":{"type":["string","null"]},"userId":{"format":"int64","type":"integer"}},"required":["cohortMemberId","isUserDeleted","joinedAt","userId"],"type":"object"},"CohortRepair":{"properties":{"cohortId":{"format":"int64","type":"integer"},"enqueuedAdds":{"format":"int32","type":"integer"}},"required":["cohortId","enqueuedAdds"],"type":"object"},"CohortSubjectCategory":{"enum":["COMMITTEES","PERIODS","MEMBERS"],"type":"string"},"CohortSubjectDetail":{"properties":{"category":{"$ref":"#/components/schemas/CohortSubjectCategory"},"definitionKey":{"description":"Which definition in code decides who belongs here","type":["string","null"]},"description":{"type":["string","null"]},"id":{"format":"int64","type":"integer"},"label":{"type":"string"},"mappings":{"items":{"$ref":"#/components/schemas/CohortMapping"},"type":"array"},"members":{"items":{"$ref":"#/components/schemas/CohortSubjectMember"},"type":"array"},"orphaned":{"description":"True when no definition produces this cohort any more","type":"boolean"},"type":{"$ref":"#/components/schemas/CohortSubjectType"}},"required":["category","id","label","mappings","members","orphaned","type"],"type":"object"},"CohortSubjectMember":{"properties":{"cohortMemberId":{"format":"int64","type":"integer"},"externalLabel":{"description":"What the external system calls this row","type":["string","null"]},"externalUserId":{"description":"The row's identity in the external system, where it has one","type":["string","null"]},"isUserDeleted":{"type":"boolean"},"joinedAt":{"format":"date-time","type":"string"},"state":{"description":"Whether this row is in step with the external system","enum":["DESIRED","SYNCED","VERIFIED","STRANGER","INVALID"],"type":["string","null"]},"system":{"description":"Which system's ledger this row belongs to","oneOf":[{"$ref":"#/components/schemas/TargetSystem"},{"type":"null"}]},"userEmail":{"type":["string","null"]},"userFullName":{"type":["string","null"]},"userId":{"description":"Null for a row present externally with no local account","format":"int64","type":["integer","null"]}},"required":["cohortMemberId","isUserDeleted","joinedAt"],"type":"object"},"CohortSubjectSummary":{"properties":{"category":{"$ref":"#/components/schemas/CohortSubjectCategory"},"id":{"format":"int64","type":"integer"},"label":{"type":"string"},"mappingCount":{"format":"int32","type":"integer"},"memberCount":{"format":"int32","type":"integer"},"type":{"$ref":"#/components/schemas/CohortSubjectType"}},"required":["category","id","label","mappingCount","memberCount","type"],"type":"object"},"CohortSubjectType":{"enum":["COMMITTEE_MEMBERS","PERIOD_PAYERS","PERIOD_MEMBERS","PERIOD_ACTIVE_MEMBERS","NEWSLETTER_SUBSCRIBERS"],"type":"string"},"CohortSummary":{"properties":{"externalId":{"type":["string","null"]},"folder":{"type":["string","null"]},"id":{"format":"int64","type":"integer"},"kind":{"$ref":"#/components/schemas/CohortKind"},"label":{"type":"string"},"memberCount":{"format":"int32","type":"integer"},"system":{"type":"string"}},"required":["id","kind","label","memberCount","system"],"type":"object"},"CommitteeDetailResponse":{"properties":{"createdAt":{"format":"date-time","type":"string"},"description":{"maxLength":4095,"minLength":0,"type":"string"},"id":{"format":"int64","type":"integer"},"members":{"items":{"$ref":"#/components/schemas/CommitteeMemberResponse"},"minItems":1,"type":"array"},"name":{"maxLength":255,"minLength":0,"type":"string"},"updatedAt":{"format":"date-time","type":"string"},"version":{"format":"int64","type":"integer"}},"required":["createdAt","description","id","members","name","updatedAt","version"],"type":"object"},"CommitteeMemberRequest":{"properties":{"role":{"description":"What this member does on the committee. Omitted for a member who simply sits on it, which is most of them.","example":"Chair","maxLength":50,"minLength":0,"type":["string","null"]},"userId":{"format":"int64","type":"integer"}},"required":["userId"],"type":"object"},"CommitteeMemberResponse":{"properties":{"committeeId":{"format":"int64","type":"integer"},"createdAt":{"format":"date-time","type":"string"},"role":{"minLength":1,"type":"string"},"updatedAt":{"format":"date-time","type":"string"},"userId":{"format":"int64","type":"integer"},"version":{"format":"int64","type":"integer"}},"required":["committeeId","createdAt","role","updatedAt","userId","version"],"type":"object"},"CommitteeResponse":{},"ContactSystem":{"enum":["BREVO"],"type":"string"},"ContributionPeriodResponse":{"properties":{"alumniFee":{"format":"double","type":"number"},"contactListId":{"format":"int64","type":["integer","null"]},"createdAt":{"format":"date-time","type":"string"},"endDate":{"format":"date","type":"string"},"fullYearFee":{"format":"double","type":"number"},"halfYearCutoffDate":{"format":"date","type":"string"},"halfYearFee":{"format":"double","type":"number"},"id":{"format":"int64","type":"integer"},"startDate":{"format":"date","type":"string"},"updatedAt":{"format":"date-time","type":"string"},"version":{"format":"int64","type":"integer"}},"required":["alumniFee","createdAt","endDate","fullYearFee","halfYearCutoffDate","halfYearFee","id","startDate","updatedAt","version"],"type":"object"},"ContributionReminderResponse":{"properties":{"amount":{"description":"The amount this ask asked for, as stated. Absent wherever the fee type is.","format":"double","type":["number","null"]},"askedAt":{"description":"When the member was asked.","format":"date-time","type":"string"},"contributionPeriodId":{"format":"int64","type":"integer"},"createdAt":{"format":"date-time","type":"string"},"feeType":{"description":"The fee type this ask stated. Absent when it quoted the period's options instead.","oneOf":[{"$ref":"#/components/schemas/BulkFeeType"},{"type":"null"}]},"id":{"format":"int64","type":"integer"},"paymentDueDate":{"description":"The date this ask asked to be paid by. Absent wherever the fee type is.","format":"date","type":["string","null"]},"updatedAt":{"format":"date-time","type":"string"},"userId":{"format":"int64","type":"integer"},"version":{"format":"int64","type":"integer"}},"required":["askedAt","contributionPeriodId","createdAt","id","updatedAt","userId","version"],"type":"object"},"ContributionResponse":{"properties":{"contributionPeriodId":{"format":"int64","type":"integer"},"createdAt":{"format":"date-time","type":"string"},"remindedAt":{"format":"date-time","type":["string","null"]},"updatedAt":{"format":"date-time","type":"string"},"userId":{"format":"int64","type":"integer"},"version":{"format":"int64","type":"integer"}},"required":["contributionPeriodId","createdAt","updatedAt","userId","version"],"type":"object"},"CreateAddressRequest":{"properties":{"city":{"minLength":1,"type":"string"},"country":{"minLength":1,"type":"string"},"houseNumber":{"minLength":1,"type":"string"},"street":{"minLength":1,"type":"string"},"userId":{"format":"int64","type":"integer"},"zipCode":{"minLength":1,"type":"string"}},"required":["city","country","houseNumber","street","userId","zipCode"],"type":"object"},"CreateBlogRequest":{"properties":{"html":{"minLength":1,"type":"string"},"publishedAt":{"format":"date-time","type":"string"},"title":{"maxLength":200,"minLength":1,"type":"string"}},"required":["html","publishedAt","title"],"type":"object"},"CreateBoardRequest":{"properties":{"accent":{"description":"The board's own colour; blank means the association's blue","maxLength":32,"minLength":0,"type":["string","null"]},"candidate":{"description":"Kept for the column behind it; the board's own name is used when blank","type":["string","null"]},"cheer":{"description":"The board's shouted line","maxLength":255,"minLength":0,"type":["string","null"]},"description":{"description":"What the year was about, in the board's own words","type":["string","null"]},"endDate":{"format":"date","type":["string","null"]},"image":{"description":"Asset file name of the board's photograph","maxLength":255,"minLength":0,"type":["string","null"]},"name":{"description":"The name the board chose for itself; blank for a board with none","maxLength":100,"minLength":0,"type":["string","null"]},"number":{"description":"The board's place in the line; the ninth board is 9","format":"int32","minimum":1,"type":"integer"},"photo":{"description":"Where the board's group photograph is stored; blank leaves it without one","maxLength":255,"minLength":0,"type":["string","null"]},"startDate":{"format":"date","type":"string"}},"required":["number","startDate"],"type":"object"},"CreateCommitteeRequest":{"properties":{"description":{"maxLength":1000,"minLength":1,"type":"string"},"members":{"items":{"$ref":"#/components/schemas/CommitteeMemberRequest"},"minItems":1,"type":"array"},"name":{"maxLength":100,"minLength":1,"type":"string"}},"required":["description","members","name"],"type":"object"},"CreateContributionPeriodRequest":{"properties":{"alumniFee":{"format":"double","minimum":0,"type":"number"},"contactListId":{"format":"int64","type":["integer","null"]},"endDate":{"format":"date","type":"string"},"fullYearFee":{"format":"double","minimum":0,"type":"number"},"halfYearCutoffDate":{"description":"A regular membership starting after this date pays the half-year fee.","format":"date","type":"string"},"halfYearFee":{"format":"double","minimum":0,"type":"number"},"startDate":{"format":"date","type":"string"}},"required":["alumniFee","endDate","fullYearFee","halfYearCutoffDate","halfYearFee","startDate"],"type":"object"},"CreateContributionReminderRequest":{"properties":{"contributionPeriodId":{"format":"int64","type":"integer"},"userId":{"format":"int64","type":"integer"}},"required":["contributionPeriodId","userId"],"type":"object"},"CreateContributionRequest":{"properties":{"contributionPeriodId":{"format":"int64","minimum":0,"type":"integer"},"userId":{"format":"int64","minimum":0,"type":"integer"}},"required":["contributionPeriodId","userId"],"type":"object"},"CreateEventRequest":{"properties":{"approved":{"type":"boolean"},"banner":{"oneOf":[{"$ref":"#/components/schemas/EventBannerRequest"},{"type":"null"}]},"committeeId":{"format":"int64","type":"integer"},"description":{"maxLength":4095,"minLength":1,"type":"string"},"endTime":{"format":"date-time","type":"string"},"location":{"type":["string","null"]},"memberPrice":{"format":"double","type":["number","null"]},"membersOnly":{"type":"boolean"},"publicPrice":{"format":"double","type":["number","null"]},"signUp":{"type":"boolean"},"signUpDeadline":{"format":"date-time","type":["string","null"]},"signUpForm":{"oneOf":[{"$ref":"#/components/schemas/SurveyRequest"},{"type":"null"}]},"signUpLimit":{"format":"int32","minimum":1,"type":["integer","null"]},"startTime":{"format":"date-time","type":"string"},"title":{"maxLength":200,"minLength":1,"type":"string"}},"required":["approved","committeeId","description","endTime","membersOnly","signUp","startTime","title"],"type":"object"},"CreateEventSignUpRequest":{"properties":{"answers":{"items":{"$ref":"#/components/schemas/AnswerRequest"},"type":["array","null"]},"guest":{"oneOf":[{"$ref":"#/components/schemas/CreateGuestRequest"},{"type":"null"}]},"userId":{"format":"int64","type":["integer","null"]}},"type":"object"},"CreateGameRequest":{"description":"A game the association has started playing","properties":{"accent":{"description":"The colour that carries this game, or nothing for the island's own","maxLength":32,"minLength":0,"type":["string","null"]},"banner":{"description":"Where the game's banner is stored","maxLength":255,"minLength":0,"type":["string","null"]},"icon":{"description":"Where the game's icon is stored","maxLength":255,"minLength":0,"type":["string","null"]},"intro":{"maxLength":4000,"minLength":0,"type":["string","null"]},"name":{"maxLength":64,"minLength":1,"type":"string"},"slug":{"description":"The address this game answers to","maxLength":64,"minLength":1,"type":"string"},"sortIndex":{"description":"Where it sits among the others; left out, it goes at the end","format":"int32","type":["integer","null"]}},"required":["name","slug"],"type":"object"},"CreateGuestRequest":{"properties":{"discord":{"minLength":1,"type":"string"},"email":{"minLength":1,"type":"string"},"name":{"minLength":1,"type":"string"},"phoneNumber":{"type":["string","null"]},"version":{"format":"int64","type":["integer","null"]}},"required":["discord","email","name"],"type":"object"},"CreateMemberProfileRequest":{"properties":{"bhv":{"type":"boolean"},"dateOfBirth":{"format":"date","type":"string"},"ehbo":{"type":"boolean"},"gender":{"type":["string","null"]},"nameOnRosters":{"description":"Whether this member's real name may appear in a roster","type":"boolean"},"nationality":{"minLength":1,"type":"string"},"studentNumber":{"type":["string","null"]},"userId":{"format":"int64","type":"integer"}},"required":["bhv","dateOfBirth","ehbo","nameOnRosters","nationality","userId"],"type":"object"},"CreateSponsorRequest":{"properties":{"description":{"maxLength":4095,"minLength":0,"type":"string"},"name":{"maxLength":255,"minLength":0,"type":"string"}},"required":["description","name"],"type":"object"},"CreateTargetRequest":{"properties":{"folderHint":{"type":["string","null"]},"label":{"minLength":1,"type":"string"},"system":{"$ref":"#/components/schemas/TargetSystem"}},"required":["label","system"],"type":"object"},"CreateTeamRequest":{"description":"Create a team. A team is the association's rather than a game's, so it names none","properties":{"icon":{"description":"Where the team's icon is stored; nothing leaves the team without one","maxLength":255,"minLength":0,"type":["string","null"]},"name":{"maxLength":128,"minLength":1,"type":"string"}},"required":["name"],"type":"object"},"CreateTelemetryRequest":{"properties":{"platform":{"$ref":"#/components/schemas/PlatformType"},"url":{"minLength":1,"type":"string"}},"required":["platform","url"],"type":"object"},"CreateUserRequest":{"properties":{"consentPrivacy":{"type":["boolean","null"]},"discord":{"minLength":1,"type":"string"},"email":{"minLength":1,"type":"string"},"firstName":{"minLength":1,"type":"string"},"fullName":{"type":["string","null"]},"initials":{"minLength":1,"type":"string"},"lastName":{"minLength":1,"type":"string"},"memberProfile":{"oneOf":[{"$ref":"#/components/schemas/UpsertMemberProfileRequest"},{"type":"null"}]},"newsletter":{"type":"boolean"},"password":{"type":["string","null"]},"phoneNumber":{"minLength":1,"type":"string"},"photoConsent":{"type":["boolean","null"]},"prefix":{"type":["string","null"]},"username":{"minLength":1,"type":"string"}},"required":["discord","email","firstName","initials","lastName","newsletter","phoneNumber","username"],"type":"object"},"CsrfToken":{"properties":{"headerName":{"type":"string"},"parameterName":{"type":"string"},"token":{"type":"string"}},"type":"object"},"Email":{"properties":{"attempts":{"format":"int32","type":["integer","null"]},"createdAt":{"format":"date-time","type":["string","null"]},"deliveredAt":{"format":"date-time","type":["string","null"]},"deliveryStatus":{"oneOf":[{"$ref":"#/components/schemas/EmailDeliveryStatus"},{"type":"null"}]},"emailType":{"type":["string","null"]},"errorReason":{"type":["string","null"]},"errorType":{"type":["string","null"]},"id":{"format":"int64","type":["integer","null"]},"jobExecutionId":{"format":"int64","type":["integer","null"]},"messageId":{"type":["string","null"]},"openedAt":{"format":"date-time","type":["string","null"]},"previewable":{"description":"Whether this email's body was stored, so it can be previewed","type":"boolean"},"recipientEmail":{"type":["string","null"]},"recipientName":{"type":["string","null"]},"sentAt":{"format":"date-time","type":["string","null"]},"subject":{"type":["string","null"]},"updatedAt":{"format":"date-time","type":["string","null"]}},"required":["previewable"],"type":"object"},"EmailDeliveryStatus":{"enum":["PENDING","SENT","DELIVERED","OPENED","BOUNCED","FAILED"],"type":"string"},"EmailStats":{"properties":{"bouncedCount":{"format":"int64","type":"integer"},"deliveredCount":{"format":"int64","type":"integer"},"failedCount":{"format":"int64","type":"integer"},"openedCount":{"format":"int64","type":"integer"},"pendingCount":{"format":"int64","type":"integer"},"sentCount":{"format":"int64","type":"integer"},"totalCount":{"format":"int64","type":"integer"}},"required":["bouncedCount","deliveredCount","failedCount","openedCount","pendingCount","sentCount","totalCount"],"type":"object"},"EnqueueJobRequest":{"properties":{"jobType":{"minLength":1,"type":"string"},"payload":{"additionalProperties":{},"description":"Job payload fields keyed by name; shape depends on the job type","type":["object","null"]}},"required":["jobType"],"type":"object"},"EventBannerRequest":{"properties":{"fileId":{"format":"int64","type":"integer"},"version":{"format":"int64","type":["integer","null"]}},"required":["fileId"],"type":"object"},"EventBannerResponse":{"properties":{"createdAt":{"format":"date-time","type":"string"},"eventId":{"format":"int64","type":"integer"},"fileId":{"format":"int64","type":"integer"},"updatedAt":{"format":"date-time","type":"string"},"version":{"format":"int64","type":"integer"}},"required":["createdAt","eventId","fileId","updatedAt","version"],"type":"object"},"EventResponse":{"properties":{"approved":{"type":"boolean"},"banner":{"oneOf":[{"$ref":"#/components/schemas/EventBannerResponse"},{"type":"null"}]},"committeeId":{"format":"int64","type":["integer","null"]},"createdAt":{"format":"date-time","type":"string"},"description":{"type":["string","null"]},"endTime":{"format":"date-time","type":"string"},"id":{"format":"int64","type":"integer"},"location":{"type":["string","null"]},"memberPrice":{"format":"double","type":["number","null"]},"membersOnly":{"type":"boolean"},"publicPrice":{"format":"double","type":["number","null"]},"signUp":{"type":"boolean"},"signUpCount":{"format":"int64","type":"integer"},"signUpDeadline":{"format":"date-time","type":["string","null"]},"signUpForm":{"oneOf":[{"$ref":"#/components/schemas/SurveyResponse"},{"type":"null"}]},"signUpLimit":{"format":"int32","type":["integer","null"]},"startTime":{"format":"date-time","type":"string"},"title":{"maxLength":255,"minLength":0,"type":"string"},"updatedAt":{"format":"date-time","type":"string"},"version":{"format":"int64","type":"integer"}},"required":["approved","createdAt","endTime","id","membersOnly","signUp","signUpCount","startTime","title","updatedAt","version"],"type":"object"},"EventSignUpResponse":{"properties":{"answers":{"items":{"$ref":"#/components/schemas/AnswerResponse"},"type":"array"},"createdAt":{"format":"date-time","type":"string"},"eventId":{"format":"int64","type":"integer"},"guest":{"oneOf":[{"$ref":"#/components/schemas/GuestResponse"},{"type":"null"}]},"id":{"format":"int64","type":"integer"},"updatedAt":{"format":"date-time","type":"string"},"user":{"oneOf":[{"$ref":"#/components/schemas/UserSummaryResponse"},{"type":"null"}]},"version":{"format":"int64","type":"integer"}},"required":["answers","createdAt","eventId","id","updatedAt","version"],"type":"object"},"ExternalTarget":{"properties":{"externalId":{"type":"string"},"folderLabel":{"type":["string","null"]},"kind":{"$ref":"#/components/schemas/CohortKind"},"label":{"type":"string"},"linkedCohortId":{"format":"int64","type":["integer","null"]},"memberCount":{"format":"int64","type":["integer","null"]},"path":{"items":{"type":"string"},"type":"array"},"system":{"$ref":"#/components/schemas/TargetSystem"}},"required":["externalId","kind","label","path","system"],"type":"object"},"FailedTargetMove":{"description":"One target the external system would not move.","properties":{"externalId":{"type":"string"},"label":{"type":"string"},"message":{"description":"What the system said, for an operator to act on rather than a stack trace.","type":"string"}},"required":["externalId","label","message"],"type":"object"},"FeeCycleEmailPreviewResponse":{"properties":{"feeType":{"$ref":"#/components/schemas/BulkFeeType","description":"The fee type the email states, and the reason it gives."},"group":{"$ref":"#/components/schemas/FeeCycleGroup","description":"Which statement this member receives, decided by their direct-debit flag."},"html":{"type":"string"},"recipientEmail":{"type":"string"},"recipientName":{"type":"string"},"subject":{"type":"string"}},"required":["feeType","group","html","recipientEmail","recipientName","subject"],"type":"object"},"FeeCycleGroup":{"enum":["DIRECT_DEBIT","TRANSFER"],"type":"string"},"FeeCyclePreviewResponse":{"properties":{"contributionPeriodId":{"format":"int64","type":"integer"},"rows":{"items":{"$ref":"#/components/schemas/FeeCycleRowResponse"},"type":"array"}},"required":["contributionPeriodId","rows"],"type":"object"},"FeeCycleResultResponse":{"properties":{"excluded":{"description":"Members in the cycle who were not written to.","format":"int32","type":"integer"},"paymentRequestsQueued":{"format":"int32","type":"integer"},"preNotificationsQueued":{"format":"int32","type":"integer"}},"required":["excluded","paymentRequestsQueued","preNotificationsQueued"],"type":"object"},"FeeCycleRowResponse":{"properties":{"amount":{"description":"Follows from the fee type and the period. Never typed.","format":"double","type":["number","null"]},"disposition":{"$ref":"#/components/schemas/BulkRowDisposition"},"feeType":{"description":"Absent only for honorary members, who owe nothing.","oneOf":[{"$ref":"#/components/schemas/BulkFeeType"},{"type":"null"}]},"group":{"$ref":"#/components/schemas/FeeCycleGroup","description":"Decided by the member's direct-debit flag, not by the operator."},"lastAskedOn":{"description":"When this member was last asked for this period, on this side of the partition.","format":"date","type":["string","null"]},"memberSince":{"description":"Start of the membership every decision on this row was judged against.","format":"date","type":["string","null"]},"memberType":{"$ref":"#/components/schemas/MemberType"},"name":{"type":"string"},"reason":{"description":"Why this member is not written to. Absent on an included row.","oneOf":[{"$ref":"#/components/schemas/BulkRowReason"},{"type":"null"}]},"userId":{"format":"int64","type":"integer"}},"required":["disposition","group","memberType","name","userId"],"type":"object"},"FieldTeamRequest":{"description":"Field a team in a game in a season, with or without the line-up it last had","properties":{"banner":{"description":"Where the art for this fielding is stored; nothing leaves what it has","maxLength":255,"minLength":0,"type":["string","null"]},"carryFrom":{"description":"Which of this team's line-ups to copy across; wins over carryLineup","oneOf":[{"$ref":"#/components/schemas/LineupSourceRequest"},{"type":"null"}]},"carryLineup":{"description":"Copy the line-up this team last had in this game into this season","type":"boolean"},"game":{"description":"The game it is being fielded in. A team may play more than one in a season","maxLength":32,"minLength":1,"type":"string"}},"required":["carryLineup","game"],"type":"object"},"FieldValidationError":{"description":"Details about a single field/object validation error.","properties":{"code":{"description":"Validation code / constraint key.","example":"Email","type":"string"},"field":{"description":"Field that failed validation (null for global errors).","example":"email","type":"string"},"message":{"description":"Human-readable validation message.","example":"must be a well-formed email address","type":"string"},"objectName":{"description":"Object (target) name that failed validation.","example":"createUserRequest","type":"string"},"refs":{"description":"Identifiers the error refers to when they are not numeric — an external system's own ids, for instance. The counterpart of `values`; an error carries one or the other, never both.","example":["7","33"],"items":{"description":"Identifiers the error refers to when they are not numeric — an external system's own ids, for instance. The counterpart of `values`; an error carries one or the other, never both.","example":"[\"7\",\"33\"]","type":"string"},"type":"array"},"values":{"description":"Identifiers the error refers to, when the failing field carries a collection. Lets a client name the offending rows and reload them rather than restate the whole request.","example":[42,57],"items":{"description":"Identifiers the error refers to, when the failing field carries a collection. Lets a client name the offending rows and reload them rather than restate the whole request.","format":"int64","type":"integer"},"type":"array"}}},"FieldedTeamResponse":{"description":"A team now fielded in a season, and whatever line-up came across with it","properties":{"banner":{"description":"The art it is drawn with this season, carried across from the last one it played","oneOf":[{"$ref":"#/components/schemas/Image"},{"type":"null"}]},"carried":{"description":"The entries copied from the team's last season; empty when nothing was carried","items":{"$ref":"#/components/schemas/RosterEntryResponse"},"type":"array"},"game":{"description":"The game it was fielded in","type":"string"},"season":{"$ref":"#/components/schemas/SeasonResponse"},"team":{"$ref":"#/components/schemas/TeamResponse"}},"required":["carried","game","season","team"],"type":"object"},"FieldingResponse":{"description":"A team fielded in a game in a season, which is where a line-up hangs","properties":{"game":{"type":"string"},"season":{"$ref":"#/components/schemas/SeasonResponse"}},"required":["game","season"],"type":"object"},"FileResponse":{"properties":{"createdAt":{"format":"date-time","type":"string"},"id":{"format":"int64","type":"integer"},"mediaType":{"type":"string"},"name":{"maxLength":255,"minLength":0,"type":"string"},"path":{"type":"string"},"size":{"format":"int64","type":["integer","null"]},"type":{"$ref":"#/components/schemas/FileType"},"updatedAt":{"format":"date-time","type":"string"},"version":{"format":"int64","type":"integer"}},"required":["createdAt","id","mediaType","name","path","type","updatedAt","version"],"type":"object"},"FileType":{"enum":["DOCUMENT","PROFILE_PICTURE","EVENT_BANNER","EVENT_PICTURE","SPONSOR_PICTURE","GAME_BANNER","GAME_ICON","TEAM_BANNER","TEAM_ICON","ROSTER_ICON","BOARD_PHOTO","BOARD_PORTRAIT"],"type":"string"},"GameAccountRequest":{"description":"Set what a member is called in one game","properties":{"handle":{"maxLength":128,"minLength":1,"type":"string"}},"required":["handle"],"type":"object"},"GameAccountResponse":{"description":"What one member is called in one game","properties":{"game":{"type":"string"},"handle":{"type":"string"},"id":{"format":"int64","type":"integer"},"userId":{"format":"int64","type":"integer"}},"required":["game","handle","id","userId"],"type":"object"},"GameContentsResponse":{"description":"What a game holds, for a removal to say before it happens","properties":{"players":{"description":"Roster places those teams carry","format":"int32","type":"integer"},"teams":{"description":"Teams recorded in it, across every season","format":"int32","type":"integer"}},"required":["players","teams"],"type":"object"},"GameResponse":{"description":"A game: what it is called, the art it is drawn with, and how it is presented","properties":{"accent":{"description":"The colour that carries this game, where one has been chosen","type":["string","null"]},"banner":{"description":"The game's own image","oneOf":[{"$ref":"#/components/schemas/Image"},{"type":"null"}]},"code":{"description":"The identifier teams, rosters and game accounts reference. Never changes","type":"string"},"current":{"description":"Whether the association currently plays it: a team played it this season or last","type":"boolean"},"icon":{"description":"The game's own icon","oneOf":[{"$ref":"#/components/schemas/Image"},{"type":"null"}]},"intro":{"description":"What is said about the game, where anything is said","type":["string","null"]},"name":{"description":"What this game is called","type":"string"},"slug":{"description":"The address this game answers to","type":"string"},"sortIndex":{"description":"Where the game sits among the others","format":"int32","type":"integer"}},"required":["code","current","name","slug","sortIndex"],"type":"object"},"GameRostersResponse":{"description":"A game's teams for one season, and the seasons that can be shown","properties":{"game":{"type":"string"},"season":{"description":"The season being shown; absent when the game has no rosters yet","oneOf":[{"$ref":"#/components/schemas/SeasonResponse"},{"type":"null"}]},"seasons":{"items":{"$ref":"#/components/schemas/SeasonResponse"},"type":"array"},"teams":{"items":{"$ref":"#/components/schemas/TeamRosterResponse"},"type":"array"}},"required":["game","seasons","teams"],"type":"object"},"GuestResponse":{"properties":{"createdAt":{"format":"date-time","type":"string"},"discord":{"type":"string"},"email":{"type":"string"},"id":{"format":"int64","type":"integer"},"name":{"type":"string"},"phoneNumber":{"type":["string","null"]},"updatedAt":{"format":"date-time","type":"string"},"version":{"format":"int64","type":"integer"}},"required":["createdAt","discord","email","id","name","updatedAt","version"],"type":"object"},"Image":{"description":"An image a public page draws, and the widths it is stored at","properties":{"height":{"description":"How tall it is, absent where its size could not be read","format":"int32","type":["integer","null"]},"path":{"description":"Where it is stored, which is what a save points at to put it on a record","type":"string"},"renditions":{"description":"The widths it is stored at, narrowest first","items":{"$ref":"#/components/schemas/ImageRendition"},"type":"array"},"url":{"description":"Where the full-size image is served","type":"string"},"width":{"description":"How wide it is, absent where its size could not be read","format":"int32","type":["integer","null"]}},"required":["path","renditions","url"],"type":"object"},"ImageRendition":{"description":"One stored width of an image","properties":{"url":{"description":"Where this width is served","type":"string"},"width":{"format":"int32","type":"integer"}},"required":["url","width"],"type":"object"},"InboundReconcileApplyRequest":{"properties":{"previewToken":{"type":"string"},"selectedExternalUserIds":{"items":{"type":"string"},"type":"array"}},"required":["previewToken","selectedExternalUserIds"],"type":"object"},"InboundReconcileApplyResponse":{"properties":{"acceptedCount":{"format":"int32","type":"integer"},"jobId":{"format":"int64","type":["integer","null"]},"skippedCount":{"format":"int32","type":"integer"}},"required":["acceptedCount","skippedCount"],"type":"object"},"InboundReconcilePreview":{"properties":{"cohortLabel":{"type":"string"},"definitionKey":{"type":"string"},"matched":{"items":{"$ref":"#/components/schemas/InboundReconcileRow"},"type":"array"},"previewToken":{"type":"string"},"remoteCount":{"format":"int32","type":"integer"},"skipped":{"items":{"$ref":"#/components/schemas/InboundReconcileRow"},"type":"array"},"writerSupported":{"type":"boolean"}},"required":["cohortLabel","definitionKey","matched","previewToken","remoteCount","skipped","writerSupported"],"type":"object"},"InboundReconcileRow":{"properties":{"alreadyMember":{"type":"boolean"},"externalLabel":{"type":["string","null"]},"externalUserId":{"type":"string"},"reason":{"enum":["DUPLICATE_REMOTE_ID","MAPPING_CONFLICT","DUPLICATE_USER_MATCH","MAPPED_USER_INACTIVE","UNMATCHED"],"type":["string","null"]},"userEmail":{"type":["string","null"]},"userFullName":{"type":["string","null"]},"userId":{"format":"int64","type":["integer","null"]},"writable":{"type":"boolean"}},"required":["alreadyMember","externalUserId","writable"],"type":"object"},"JobExecution":{"properties":{"actor":{"oneOf":[{"$ref":"#/components/schemas/Actor"},{"type":"null"}]},"attempts":{"format":"int32","type":["integer","null"]},"category":{"oneOf":[{"$ref":"#/components/schemas/JobExecutionCategory"},{"type":"null"}]},"createdAt":{"format":"date-time","type":["string","null"]},"dedupKey":{"type":["string","null"]},"errorMessage":{"type":["string","null"]},"errorReason":{"type":["string","null"]},"errorType":{"type":["string","null"]},"finishedAt":{"format":"date-time","type":["string","null"]},"id":{"format":"int64","type":["integer","null"]},"initiatedByDisplay":{"type":["string","null"]},"initiatedByFullName":{"type":["string","null"]},"initiatedByRole":{"oneOf":[{"$ref":"#/components/schemas/Role"},{"type":"null"}]},"initiatedByType":{"oneOf":[{"$ref":"#/components/schemas/ActionActorType"},{"type":"null"}]},"initiatedByUserId":{"format":"int64","type":["integer","null"]},"initiatedByUsername":{"type":["string","null"]},"jobType":{"minLength":1,"type":["string","null"]},"nextAttemptAt":{"format":"date-time","type":["string","null"]},"payload":{"additionalProperties":{},"type":["object","null"]},"queuedAt":{"format":"date-time","type":["string","null"]},"relatedEntities":{"items":{"$ref":"#/components/schemas/JobExecutionRelatedEntity"},"type":"array"},"stackTrace":{"type":["string","null"]},"startedAt":{"format":"date-time","type":["string","null"]},"status":{"oneOf":[{"$ref":"#/components/schemas/JobExecutionStatus"},{"type":"null"}]},"targetSystem":{"oneOf":[{"$ref":"#/components/schemas/ContactSystem"},{"type":"null"}]},"updatedAt":{"format":"date-time","type":["string","null"]}},"required":["attempts","jobType","relatedEntities","status"],"type":"object"},"JobExecutionCategory":{"enum":["calendar","contact","cohort","email","other"],"type":"string"},"JobExecutionRelatedEntity":{"properties":{"id":{"format":"int64","type":["integer","null"]},"label":{"type":"string"},"type":{"type":"string"}},"required":["label","type"],"type":"object"},"JobExecutionStatus":{"enum":["QUEUED","RUNNING","SUCCESS","FAILED","DEAD"],"type":"string"},"JobPayloadField":{"properties":{"enumValues":{"items":{"type":"string"},"type":["array","null"]},"kind":{"$ref":"#/components/schemas/JobPayloadFieldKind"},"name":{"type":"string"},"required":{"type":"boolean"},"type":{"type":"string"}},"required":["kind","name","required","type"],"type":"object"},"JobPayloadFieldKind":{"enum":["PRIMITIVE","ENUM","OBJECT"],"type":"string"},"JobStatsDTO":{"properties":{"avgSuccessDurationSeconds":{"format":"double","type":"number"},"deadCount":{"format":"int64","type":"integer"},"deadSinceStartup":{"format":"double","type":"number"},"failedCount":{"format":"int64","type":"integer"},"failedSinceStartup":{"format":"double","type":"number"},"queuedCount":{"format":"int64","type":"integer"},"recoveriesSinceStartup":{"format":"double","type":"number"},"runningCount":{"format":"int64","type":"integer"},"successCount":{"format":"int64","type":"integer"},"totalCount":{"format":"int64","type":"integer"}},"required":["avgSuccessDurationSeconds","deadCount","deadSinceStartup","failedCount","failedSinceStartup","queuedCount","recoveriesSinceStartup","runningCount","successCount","totalCount"],"type":"object"},"JobTypeDescriptor":{"properties":{"payloadFields":{"items":{"$ref":"#/components/schemas/JobPayloadField"},"type":"array"},"type":{"type":"string"}},"required":["payloadFields","type"],"type":"object"},"JwtRequest":{"properties":{"password":{"minLength":1,"type":"string"},"username":{"minLength":1,"type":"string"}},"required":["password","username"],"type":"object"},"LineupSourceRequest":{"description":"One line-up of a team's: which game it was played in, and which season","properties":{"game":{"maxLength":32,"minLength":1,"type":"string"},"seasonId":{"format":"int64","type":"integer"}},"required":["game","seasonId"],"type":"object"},"LinkBoardMemberRequest":{"properties":{"userId":{"description":"The member to attach to the seat; absent detaches it","format":"int64","type":["integer","null"]}},"type":"object"},"LinkExistingTargetRequest":{"properties":{"externalId":{"minLength":1,"type":"string"},"system":{"$ref":"#/components/schemas/TargetSystem"}},"required":["externalId","system"],"type":"object"},"LinkRosterEntryRequest":{"description":"Attach a roster entry to a member, or detach it with a null id","properties":{"userId":{"format":"int64","type":["integer","null"]}},"type":"object"},"LinkUserRequest":{"properties":{"externalUserId":{"minLength":1,"type":"string"},"system":{"$ref":"#/components/schemas/TargetSystem"},"userId":{"format":"int64","type":"integer"}},"required":["externalUserId","system","userId"],"type":"object"},"LinkedUser":{"properties":{"externalUserId":{"type":"string"},"system":{"$ref":"#/components/schemas/TargetSystem"},"userId":{"format":"int64","type":"integer"}},"required":["externalUserId","system","userId"],"type":"object"},"LoginResponse":{"properties":{"addressId":{"format":"int64","type":["integer","null"]},"expiration":{"format":"int64","type":"integer"},"roles":{"items":{"$ref":"#/components/schemas/Role"},"minItems":1,"type":"array"},"token":{"minLength":1,"type":"string"},"userId":{"format":"int64","type":"integer"},"username":{"minLength":1,"type":"string"}},"required":["expiration","roles","token","userId","username"],"type":"object"},"MemberActivationRequest":{"properties":{"password":{"maxLength":100,"minLength":8,"pattern":"^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)(?=.*[@$!%*?&])[A-Za-z\\d@$!%*?&]+$","type":"string"},"token":{"minLength":1,"type":"string"},"username":{"minLength":1,"type":"string"}},"required":["password","token","username"],"type":"object"},"MemberProfileResponse":{"properties":{"bhv":{"type":"boolean"},"conditionsAcceptedAt":{"format":"date-time","type":"string"},"createdAt":{"format":"date-time","type":"string"},"dateOfBirth":{"format":"date","type":"string"},"ehbo":{"type":"boolean"},"gender":{"type":"string"},"id":{"format":"int64","type":"integer"},"nameOnRosters":{"description":"Whether this member's real name may appear in a roster","type":"boolean"},"nationality":{"type":"string"},"studentNumber":{"type":"string"},"updatedAt":{"format":"date-time","type":"string"},"userId":{"format":"int64","type":"integer"},"version":{"format":"int64","type":"integer"}},"required":["bhv","createdAt","ehbo","id","nameOnRosters","updatedAt","userId","version"]},"MemberType":{"enum":["ALUMNI","HONORARY","REGULAR","NONE"],"type":"string"},"MembershipApplicationRequest":{"properties":{"conditionsAccepted":{"type":["boolean","null"]}},"type":"object"},"MembershipResponse":{"properties":{"createdAt":{"format":"date-time","type":"string"},"endDate":{"format":"date","type":["string","null"]},"id":{"format":"int64","type":"integer"},"incasso":{"type":"boolean"},"memberType":{"$ref":"#/components/schemas/MemberType"},"startDate":{"format":"date","type":"string"},"updatedAt":{"format":"date-time","type":"string"},"userId":{"format":"int64","type":"integer"},"version":{"format":"int64","type":"integer"}},"required":["createdAt","id","incasso","memberType","startDate","updatedAt","userId","version"],"type":"object"},"MoveTargetRequest":{"description":"Where to file a target.","properties":{"folder":{"description":"The folder to move the target into. Must already exist in the system.","example":"Contribution periods","minLength":1,"type":"string"}},"required":["folder"],"type":"object"},"PageMetadata":{"properties":{"number":{"format":"int64","type":"integer"},"size":{"format":"int64","type":"integer"},"totalElements":{"format":"int64","type":"integer"},"totalPages":{"format":"int64","type":"integer"}},"type":"object"},"PagedModelEmail":{"properties":{"content":{"items":{"$ref":"#/components/schemas/Email"},"type":"array"},"page":{"$ref":"#/components/schemas/PageMetadata"}},"type":"object"},"PagedModelEventResponse":{"properties":{"content":{"items":{"$ref":"#/components/schemas/EventResponse"},"type":"array"},"page":{"$ref":"#/components/schemas/PageMetadata"}},"type":"object"},"PagedModelJobExecution":{"properties":{"content":{"items":{"$ref":"#/components/schemas/JobExecution"},"type":"array"},"page":{"$ref":"#/components/schemas/PageMetadata"}},"type":"object"},"PagedModelUserDetailResponse":{"properties":{"content":{"items":{"$ref":"#/components/schemas/UserDetailResponse"},"type":"array"},"page":{"$ref":"#/components/schemas/PageMetadata"}},"type":"object"},"PasswordResetRequest":{"properties":{"password":{"maxLength":100,"minLength":8,"pattern":"^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)(?=.*[@$!%*?&])[A-Za-z\\d@$!%*?&]+$","type":"string"},"token":{"minLength":1,"type":"string"}},"required":["password","token"],"type":"object"},"PendingActivation":{"description":"The activation email an account that has not been activated takes.","properties":{"purpose":{"$ref":"#/components/schemas/TokenPurpose","description":"Which activation email applies to it."},"userId":{"description":"The account.","example":42,"format":"int64","type":"integer"}},"required":["purpose","userId"],"type":"object"},"PendingActivationsResponse":{"description":"Which activation email applies to each account that has not been activated. Accounts that are already active do not appear.","properties":{"activations":{"items":{"$ref":"#/components/schemas/PendingActivation"},"type":"array"}},"required":["activations"],"type":"object"},"PlatformType":{"enum":["FACEBOOK","LINKEDIN","TWITTER","INSTAGRAM"],"type":"string"},"QuestionRequest":{"properties":{"choiceLabels":{"items":{"type":"string"},"type":["array","null"]},"idx":{"format":"int64","type":"integer"},"label":{"maxLength":2055,"minLength":0,"type":"string"},"required":{"type":["boolean","null"]},"type":{"$ref":"#/components/schemas/QuestionType"}},"required":["idx","label","type"],"type":"object"},"QuestionResponse":{"properties":{"choiceLabels":{"items":{"type":"string"},"type":["array","null"]},"createdAt":{"format":"date-time","type":"string"},"id":{"format":"int64","type":"integer"},"idx":{"format":"int64","type":"integer"},"label":{"maxLength":2055,"minLength":0,"type":"string"},"required":{"type":["boolean","null"]},"surveyId":{"format":"int64","type":"integer"},"type":{"$ref":"#/components/schemas/QuestionType"},"updatedAt":{"format":"date-time","type":"string"},"version":{"format":"int64","type":"integer"}},"required":["createdAt","id","idx","label","surveyId","type","updatedAt","version"],"type":"object"},"QuestionType":{"enum":["OPEN","RADIO","CHECKBOX","DESCRIPTION"],"type":"string"},"RecoveryEmailPreviewResponse":{"description":"A recovery email rendered for inspection. No token was issued to produce it.","properties":{"html":{"description":"The rendered email, as delivered but for the inert recovery link.","type":"string"},"linkPlaceholder":{"description":"What the recovery link carries in place of a token, so the preview can say the link is inert.","example":"PREVIEW-ONLY-NO-TOKEN-ISSUED","type":"string"},"purpose":{"$ref":"#/components/schemas/TokenPurpose","description":"Which recovery email this is."},"recipientEmail":{"description":"Address the email would be sent to.","example":"member@example.com","type":"string"},"recipientName":{"description":"Name the email addresses the recipient by.","example":"Alice Regular","type":"string"},"subject":{"description":"Subject line the recipient would see.","example":"Activate your Account","type":"string"}},"required":["html","linkPlaceholder","purpose","recipientEmail","recipientName","subject"],"type":"object"},"RedirectResponse":{"properties":{"path":{"type":"string"}},"required":["path"],"type":"object"},"Role":{"enum":["ANONYMOUS","VEGAN","GUEST","COMPANY","MEMBER","COMMITTEE","BOARD","TREASURER","ADMIN","SYSTEM"],"type":"string"},"RosterEntryResponse":{"description":"A roster entry as an admin edits it, real name included","properties":{"description":{"description":"A short caption about them, in markdown","type":["string","null"]},"displayName":{"description":"The member's real name, shown to admins for identification","type":["string","null"]},"handle":{"type":"string"},"icon":{"description":"This entry's uploaded picture, where one was uploaded","oneOf":[{"$ref":"#/components/schemas/Image"},{"type":"null"}]},"id":{"format":"int64","type":"integer"},"role":{"$ref":"#/components/schemas/TeamRole"},"roleTitle":{"description":"What they did in the team's own words","type":["string","null"]},"seasonId":{"format":"int64","type":"integer"},"sortIndex":{"format":"int32","type":"integer"},"teamId":{"format":"int64","type":"integer"},"userId":{"description":"The member this entry belongs to, when anybody could be identified","format":"int64","type":["integer","null"]}},"required":["handle","id","role","seasonId","sortIndex","teamId"],"type":"object"},"RosterMemberResponse":{"description":"One person on a team's roster, as the public read has them","properties":{"description":{"description":"A short caption about them, in markdown, where anything was written","type":["string","null"]},"handle":{"description":"What this member is called in the game","type":"string"},"icon":{"description":"This entry's uploaded picture, where one was uploaded","oneOf":[{"$ref":"#/components/schemas/Image"},{"type":"null"}]},"name":{"description":"The member's real name, present only when they allow it to be shown","type":["string","null"]},"role":{"$ref":"#/components/schemas/TeamRole"},"roleTitle":{"description":"What they did in the team's own words, where anything was said","type":["string","null"]}},"required":["handle","role"],"type":"object"},"SeasonContentsResponse":{"description":"What a season holds, for a removal to say before it happens","properties":{"players":{"description":"Roster places held in it, across those teams","format":"int32","type":"integer"},"teams":{"description":"Teams fielded in it, across every game","format":"int32","type":"integer"}},"required":["players","teams"],"type":"object"},"SeasonGameResponse":{"description":"A game that ran in a season, with what it fielded","properties":{"game":{"type":"string"},"public":{"description":"Whether a visitor sees it: a game is public in a season once a team plays it","type":"boolean"},"teams":{"items":{"$ref":"#/components/schemas/TeamRosterResponse"},"type":"array"}},"required":["game","public","teams"],"type":"object"},"SeasonRequest":{"description":"Create or rename a season","properties":{"endDate":{"format":"date","type":"string"},"name":{"maxLength":64,"minLength":1,"type":"string"},"startDate":{"format":"date","type":"string"}},"required":["endDate","name","startDate"],"type":"object"},"SeasonResponse":{"description":"A stretch of play that rosters belong to","properties":{"endDate":{"format":"date","type":"string"},"id":{"format":"int64","type":"integer"},"name":{"type":"string"},"played":{"description":"Whether anything was fielded in it, which is which seasons a visitor is offered","type":"boolean"},"startDate":{"format":"date","type":"string"}},"required":["endDate","id","name","played","startDate"],"type":"object"},"SendFeeCycleRequest":{"properties":{"contributionPeriodId":{"format":"int64","minimum":0,"type":["integer","null"]},"debitDate":{"description":"The date the direct-debit group is told the money will be taken.","format":"date","type":["string","null"]},"feeTypeOverrides":{"additionalProperties":{"$ref":"#/components/schemas/BulkFeeType"},"description":"Fee type per member, where the treasurer changed it from the one that applies.","type":"object"},"paymentDueDate":{"description":"The date the transfer group is asked to have paid by.","format":"date","type":["string","null"]}},"required":["contributionPeriodId","debitDate","feeTypeOverrides","paymentDueDate"],"type":"object"},"SentEmailPreview":{"properties":{"html":{"description":"The email's html with every url stripped out","type":"string"},"linksRedacted":{"description":"Always true: the preview's links were removed before it left the api","type":"boolean"},"recipientEmail":{"type":"string"},"recipientName":{"type":"string"},"subject":{"type":"string"}},"required":["html","linksRedacted","recipientEmail","recipientName","subject"],"type":"object"},"ServiceEntry":{"properties":{"description":{"type":"string"},"iconUrl":{"type":"string"},"id":{"type":"string"},"name":{"type":"string"},"url":{"type":"string"}},"required":["description","iconUrl","id","name","url"],"type":"object"},"SignupAddressRequest":{"properties":{"city":{"minLength":1,"type":"string"},"country":{"minLength":1,"type":"string"},"houseNumber":{"minLength":1,"type":"string"},"street":{"minLength":1,"type":"string"},"zipCode":{"minLength":1,"type":"string"}},"required":["city","country","houseNumber","street","zipCode"],"type":"object"},"SignupApplicationRequest":{"properties":{"conditionsAccepted":{"type":["boolean","null"]}},"type":"object"},"SignupDetailsRequest":{"properties":{"discord":{"minLength":1,"type":"string"},"firstName":{"minLength":1,"type":"string"},"initials":{"minLength":1,"type":"string"},"lastName":{"minLength":1,"type":"string"},"memberProfile":{"oneOf":[{"$ref":"#/components/schemas/UpsertMemberProfileRequest"},{"type":"null"}]},"newsletter":{"type":"boolean"},"phoneNumber":{"minLength":1,"type":"string"},"photoConsent":{"type":["boolean","null"]},"prefix":{"type":["string","null"]},"username":{"minLength":1,"type":"string"}},"required":["discord","firstName","initials","lastName","newsletter","phoneNumber","username"],"type":"object"},"SignupEmailRequest":{"properties":{"email":{"format":"email","minLength":1,"type":"string"}},"required":["email"],"type":"object"},"SignupOutcomeResponse":{"properties":{"emailConfirmed":{"type":"boolean"},"membershipStarted":{"type":"boolean"}},"required":["emailConfirmed","membershipStarted"],"type":"object"},"SignupSessionResponse":{"properties":{"email":{"type":"string"},"expiresAt":{"format":"date-time","type":"string"},"signupToken":{"type":"string"},"userId":{"format":"int64","type":"integer"}},"required":["email","expiresAt","signupToken","userId"],"type":"object"},"SponsorResponse":{"properties":{"createdAt":{"format":"date-time","type":"string"},"description":{"type":"string"},"id":{"format":"int64","type":"integer"},"name":{"type":"string"},"updatedAt":{"format":"date-time","type":"string"},"version":{"format":"int64","type":"integer"}},"required":["createdAt","description","id","name","updatedAt","version"],"type":"object"},"SurveyRequest":{"properties":{"questions":{"items":{"$ref":"#/components/schemas/QuestionRequest"},"minItems":1,"type":"array"}},"required":["questions"],"type":"object"},"SurveyResponse":{"properties":{"createdAt":{"format":"date-time","type":"string"},"id":{"format":"int64","type":"integer"},"questions":{"items":{"$ref":"#/components/schemas/QuestionResponse"},"minItems":1,"type":"array"},"responseCount":{"format":"int64","type":"integer"},"updatedAt":{"format":"date-time","type":"string"},"version":{"format":"int64","type":"integer"}},"required":["createdAt","id","questions","responseCount","updatedAt","version"],"type":"object"},"SwitchTargetRequest":{"properties":{"deletePrevious":{"type":"boolean"},"externalId":{"minLength":1,"type":"string"},"reconcileNow":{"type":"boolean"}},"required":["deletePrevious","externalId","reconcileNow"],"type":"object"},"TargetDescriptor":{"properties":{"capabilities":{"items":{"enum":["CATALOG","CREATE","READ_MEMBERS","WRITE_MEMBERS","DELETE","MOVE"],"type":"string"},"type":"array","uniqueItems":true},"folderLabel":{"type":["string","null"]},"idLabel":{"type":"string"},"kind":{"$ref":"#/components/schemas/CohortKind"},"system":{"$ref":"#/components/schemas/TargetSystem"},"systemLabel":{"type":"string"},"targetLabel":{"type":"string"}},"required":["capabilities","idLabel","kind","system","systemLabel","targetLabel"],"type":"object"},"TargetSystem":{"enum":["BREVO","GOOGLE_CALENDAR"],"type":"string"},"TeamResponse":{"description":"A team the association fields in one game","properties":{"icon":{"description":"The team's own icon, drawn beside the name. The banner it is drawn on belongs to the fielding, not to the team","oneOf":[{"$ref":"#/components/schemas/Image"},{"type":"null"}]},"id":{"format":"int64","type":"integer"},"name":{"type":"string"}},"required":["id","name"],"type":"object"},"TeamRole":{"enum":["PLAYER","SUBSTITUTE","COACH"],"type":"string"},"TeamRosterResponse":{"description":"A team with the roster it fielded in one season","properties":{"banner":{"description":"The team's own banner","oneOf":[{"$ref":"#/components/schemas/Image"},{"type":"null"}]},"icon":{"description":"The team's own icon, shown beside the name","oneOf":[{"$ref":"#/components/schemas/Image"},{"type":"null"}]},"id":{"format":"int64","type":"integer"},"members":{"items":{"$ref":"#/components/schemas/RosterMemberResponse"},"type":"array"},"name":{"type":"string"}},"required":["id","members","name"],"type":"object"},"TelemetryResponse":{"properties":{"createdAt":{"format":"date-time","type":"string"},"id":{"format":"int64","type":"integer"},"platform":{"$ref":"#/components/schemas/PlatformType"},"updatedAt":{"format":"date-time","type":"string"},"url":{"type":"string"},"version":{"format":"int64","type":"integer"}},"required":["createdAt","id","platform","updatedAt","url","version"],"type":"object"},"TokenPurpose":{"enum":["USER_ACTIVATION","MEMBER_ACTIVATION","PASSWORD_RESET","SIGNUP_CONTINUATION"],"type":"string"},"UpdateAddressRequest":{"properties":{"city":{"minLength":1,"type":"string"},"country":{"minLength":1,"type":"string"},"houseNumber":{"minLength":1,"type":"string"},"street":{"minLength":1,"type":"string"},"version":{"format":"int64","type":"integer"},"zipCode":{"minLength":1,"type":"string"}},"required":["city","country","houseNumber","street","version","zipCode"],"type":"object"},"UpdateBlogRequest":{"properties":{"html":{"minLength":1,"type":"string"},"publishedAt":{"format":"date-time","type":"string"},"title":{"maxLength":200,"minLength":1,"type":"string"},"version":{"format":"int64","type":"integer"}},"required":["html","publishedAt","title","version"],"type":"object"},"UpdateBoardMemberRequest":{"properties":{"description":{"type":["string","null"]},"displayName":{"maxLength":128,"minLength":0,"type":["string","null"]},"endDate":{"format":"date","type":["string","null"]},"image":{"maxLength":255,"minLength":0,"type":["string","null"]},"nickname":{"description":"The name the seat was known by, without the quotes around it","maxLength":128,"minLength":0,"type":["string","null"]},"portrait":{"description":"Where the seat's portrait is stored; blank leaves the seat without one","maxLength":255,"minLength":0,"type":["string","null"]},"role":{"minLength":1,"type":"string"},"startDate":{"format":"date","type":"string"}},"required":["role","startDate"],"type":"object"},"UpdateBoardRequest":{"properties":{"accent":{"description":"The board's own colour; blank means the association's blue","maxLength":32,"minLength":0,"type":["string","null"]},"candidate":{"description":"Kept for the column behind it; the board's own name is used when blank","type":["string","null"]},"cheer":{"description":"The board's shouted line","maxLength":255,"minLength":0,"type":["string","null"]},"description":{"description":"What the year was about, in the board's own words","type":["string","null"]},"endDate":{"format":"date","type":["string","null"]},"image":{"description":"Asset file name of the board's photograph","maxLength":255,"minLength":0,"type":["string","null"]},"name":{"description":"The name the board chose for itself; blank for a board with none","maxLength":100,"minLength":0,"type":["string","null"]},"number":{"description":"The board's place in the line; the ninth board is 9","format":"int32","minimum":1,"type":"integer"},"photo":{"description":"Where the board's group photograph is stored; blank leaves it without one","maxLength":255,"minLength":0,"type":["string","null"]},"startDate":{"format":"date","type":"string"},"version":{"format":"int64","type":"integer"}},"required":["number","startDate","version"],"type":"object"},"UpdateCommitteeRequest":{"properties":{"description":{"maxLength":1000,"minLength":1,"type":"string"},"members":{"items":{"$ref":"#/components/schemas/CommitteeMemberRequest"},"minItems":1,"type":"array"},"name":{"maxLength":100,"minLength":1,"type":"string"},"version":{"format":"int64","type":"integer"}},"required":["description","members","name","version"],"type":"object"},"UpdateContributionPeriodRequest":{"properties":{"alumniFee":{"format":"double","minimum":0,"type":"number"},"contactListId":{"format":"int64","type":["integer","null"]},"endDate":{"format":"date","type":"string"},"fullYearFee":{"format":"double","minimum":0,"type":"number"},"halfYearCutoffDate":{"description":"A regular membership starting after this date pays the half-year fee.","format":"date","type":"string"},"halfYearFee":{"format":"double","minimum":0,"type":"number"},"startDate":{"format":"date","type":"string"},"version":{"format":"int64","type":"integer"}},"required":["alumniFee","endDate","fullYearFee","halfYearCutoffDate","halfYearFee","startDate","version"],"type":"object"},"UpdateEventRequest":{"properties":{"approved":{"type":"boolean"},"banner":{"oneOf":[{"$ref":"#/components/schemas/EventBannerRequest"},{"type":"null"}]},"committeeId":{"format":"int64","type":"integer"},"description":{"maxLength":4095,"minLength":1,"type":"string"},"endTime":{"format":"date-time","type":"string"},"location":{"type":["string","null"]},"memberPrice":{"format":"double","type":["number","null"]},"membersOnly":{"type":"boolean"},"publicPrice":{"format":"double","type":["number","null"]},"removeExistingSignUps":{"type":["boolean","null"]},"signUp":{"type":"boolean"},"signUpDeadline":{"format":"date-time","type":["string","null"]},"signUpForm":{"oneOf":[{"$ref":"#/components/schemas/SurveyRequest"},{"type":"null"}]},"signUpLimit":{"format":"int32","minimum":1,"type":["integer","null"]},"startTime":{"format":"date-time","type":"string"},"title":{"maxLength":200,"minLength":1,"type":"string"},"version":{"format":"int64","type":"integer"}},"required":["approved","committeeId","description","endTime","membersOnly","signUp","startTime","title","version"],"type":"object"},"UpdateEventSignUpRequest":{"properties":{"answers":{"items":{"$ref":"#/components/schemas/AnswerRequest"},"type":["array","null"]},"guest":{"oneOf":[{"$ref":"#/components/schemas/CreateGuestRequest"},{"type":"null"}]},"userId":{"format":"int64","type":["integer","null"]},"version":{"format":"int64","type":["integer","null"]}},"type":"object"},"UpdateGameRequest":{"description":"How a game presents itself","properties":{"accent":{"description":"The colour that carries this game, or nothing for the island's own","maxLength":32,"minLength":0,"type":["string","null"]},"banner":{"description":"Where the game's banner is stored; nothing takes the banner away","maxLength":255,"minLength":0,"type":["string","null"]},"icon":{"description":"Where the game's icon is stored; nothing takes the icon away","maxLength":255,"minLength":0,"type":["string","null"]},"intro":{"maxLength":4000,"minLength":0,"type":["string","null"]},"name":{"description":"What this game is called. Its code is not editable","maxLength":64,"minLength":1,"type":"string"},"slug":{"description":"The address this game answers to","maxLength":64,"minLength":0,"type":"string"},"sortIndex":{"format":"int32","type":"integer"}},"required":["name","slug","sortIndex"],"type":"object"},"UpdateMemberProfileRequest":{"properties":{"bhv":{"type":"boolean"},"dateOfBirth":{"format":"date","type":"string"},"ehbo":{"type":"boolean"},"gender":{"type":["string","null"]},"nameOnRosters":{"description":"Whether this member's real name may appear in a roster","type":"boolean"},"nationality":{"minLength":1,"type":"string"},"studentNumber":{"type":["string","null"]},"version":{"format":"int64","type":"integer"}},"required":["bhv","dateOfBirth","ehbo","nameOnRosters","nationality","version"],"type":"object"},"UpdateMembershipRequest":{"properties":{"endDate":{"format":"date","type":["string","null"]},"incasso":{"type":["boolean","null"]},"memberType":{"oneOf":[{"$ref":"#/components/schemas/MemberType"},{"type":"null"}]},"startDate":{"format":"date","type":["string","null"]},"userId":{"format":"int64","type":"integer"},"version":{"format":"int64","type":"integer"}},"required":["startDate","userId","version"],"type":"object"},"UpdateRosterEntryRequest":{"description":"Edit a roster entry","properties":{"description":{"description":"A short caption about them, in markdown","maxLength":280,"minLength":0,"type":["string","null"]},"displayName":{"maxLength":128,"minLength":0,"type":["string","null"]},"handle":{"maxLength":128,"minLength":1,"type":"string"},"icon":{"description":"Where this entry's picture is stored; nothing takes the picture away","maxLength":255,"minLength":0,"type":["string","null"]},"role":{"$ref":"#/components/schemas/TeamRole"},"roleTitle":{"description":"What they did in the team's own words, beside the fixed part","maxLength":64,"minLength":0,"type":["string","null"]},"sortIndex":{"format":"int32","type":"integer"}},"required":["handle","role","sortIndex"],"type":"object"},"UpdateSponsorRequest":{"properties":{"description":{"maxLength":4095,"minLength":0,"type":"string"},"name":{"maxLength":255,"minLength":0,"type":"string"},"version":{"format":"int64","type":"integer"}},"required":["description","name","version"],"type":"object"},"UpdateTeamRequest":{"description":"Rename a team or change its icon. Its banner belongs to the fielding","properties":{"icon":{"description":"Where the team's icon is stored; nothing takes the icon away","maxLength":255,"minLength":0,"type":["string","null"]},"name":{"maxLength":128,"minLength":1,"type":"string"}},"required":["name"],"type":"object"},"UpdateUserRequest":{"properties":{"discord":{"minLength":1,"type":"string"},"memberProfile":{"oneOf":[{"$ref":"#/components/schemas/UpsertMemberProfileRequest"},{"type":"null"}]},"newsletter":{"type":"boolean"},"phoneNumber":{"minLength":1,"type":"string"},"photoConsent":{"type":["boolean","null"]},"version":{"format":"int64","type":"integer"}},"required":["discord","newsletter","phoneNumber","version"],"type":"object"},"UpsertMemberProfileRequest":{"properties":{"bhv":{"type":"boolean"},"dateOfBirth":{"format":"date","type":"string"},"ehbo":{"type":"boolean"},"gender":{"type":["string","null"]},"nameOnRosters":{"description":"Whether this member's real name may appear in a roster","type":"boolean"},"nationality":{"minLength":1,"type":"string"},"studentNumber":{"type":["string","null"]},"version":{"format":"int64","type":["integer","null"]}},"required":["bhv","dateOfBirth","ehbo","nameOnRosters","nationality"],"type":"object"},"UserActivationRequest":{"properties":{"token":{"minLength":1,"type":"string"}},"required":["token"],"type":"object"},"UserDetailResponse":{"properties":{"addressId":{"format":"int64","type":["integer","null"]},"createdAt":{"format":"date-time","type":"string"},"discord":{"type":["string","null"]},"email":{"type":"string"},"enabled":{"type":"boolean"},"firstName":{"type":"string"},"fullName":{"type":"string"},"id":{"format":"int64","type":"integer"},"initials":{"type":"string"},"lastName":{"type":"string"},"newsletter":{"type":"boolean"},"phoneNumber":{"type":["string","null"]},"photoConsent":{"type":"boolean"},"prefix":{"type":["string","null"]},"restoreUntilAt":{"format":"date-time","type":["string","null"]},"roles":{"items":{"$ref":"#/components/schemas/Role"},"type":"array"},"updatedAt":{"format":"date-time","type":"string"},"username":{"type":"string"},"version":{"format":"int64","type":"integer"}},"required":["createdAt","email","enabled","firstName","fullName","id","initials","lastName","newsletter","photoConsent","roles","updatedAt","username","version"],"type":"object"},"UserSummaryResponse":{"properties":{"createdAt":{"format":"date-time","type":"string"},"discord":{"type":["string","null"]},"email":{"type":"string"},"fullName":{"type":"string"},"id":{"format":"int64","type":"integer"},"phoneNumber":{"type":["string","null"]},"updatedAt":{"format":"date-time","type":"string"},"version":{"format":"int64","type":"integer"}},"required":["createdAt","email","fullName","id","updatedAt","version"],"type":"object"}}},"info":{"title":"OpenAPI definition","version":"v0"},"openapi":"3.1.0","paths":{"/addresses":{"get":{"operationId":"findAllAddresses","responses":{"200":{"content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/AddressResponse"},"type":"array"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Addresses"]},"post":{"operationId":"createAddress","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateAddressRequest"}}},"required":true},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AddressResponse"}}},"description":"Created"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Addresses"]}},"/addresses/{id}":{"delete":{"operationId":"deleteAddressById","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"int64","type":"integer"}}],"responses":{"204":{"description":"No Content"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Addresses"]},"get":{"operationId":"findAddressById","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"int64","type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AddressResponse"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Addresses"]},"put":{"operationId":"updateAddress","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"int64","type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateAddressRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AddressResponse"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Addresses"]}},"/auth":{"post":{"operationId":"authenticate","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JwtRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LoginResponse"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Authentication"]}},"/auth/logout":{"post":{"operationId":"logout","responses":{"204":{"description":"No Content"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Authentication"]}},"/blogs":{"get":{"operationId":"findBlogs","responses":{"200":{"content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/BlogResponse"},"type":"array"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Blogs"]},"post":{"operationId":"createBlog","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateBlogRequest"}}},"required":true},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BlogResponse"}}},"description":"Created"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Blogs"]}},"/blogs/{id}":{"delete":{"operationId":"deleteById","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"int64","type":"integer"}}],"responses":{"204":{"description":"No Content"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Blogs"]},"get":{"operationId":"findBlogById","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"int64","type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BlogResponse"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Blogs"]},"post":{"operationId":"updateBlog","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"int64","type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateBlogRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BlogResponse"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Blogs"]}},"/boards":{"get":{"operationId":"findAllBoards","responses":{"200":{"content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/BoardResponse"},"type":"array"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Boards"]},"post":{"operationId":"createBoard","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateBoardRequest"}}},"required":true},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BoardResponse"}}},"description":"Created"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Boards"]}},"/boards/{boardId}/members":{"post":{"operationId":"addMember","parameters":[{"in":"path","name":"boardId","required":true,"schema":{"format":"int64","type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AddBoardMemberRequest"}}},"required":true},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BoardMemberResponse"}}},"description":"Created"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Boards"]}},"/boards/{boardId}/members/{id}":{"delete":{"operationId":"removeMember","parameters":[{"in":"path","name":"boardId","required":true,"schema":{"format":"int64","type":"integer"}},{"in":"path","name":"id","required":true,"schema":{"format":"int64","type":"integer"}}],"responses":{"204":{"description":"No Content"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Boards"]},"put":{"operationId":"updateMember","parameters":[{"in":"path","name":"boardId","required":true,"schema":{"format":"int64","type":"integer"}},{"in":"path","name":"id","required":true,"schema":{"format":"int64","type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateBoardMemberRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BoardMemberResponse"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Boards"]}},"/boards/{boardId}/members/{id}/member":{"put":{"operationId":"linkMember","parameters":[{"in":"path","name":"boardId","required":true,"schema":{"format":"int64","type":"integer"}},{"in":"path","name":"id","required":true,"schema":{"format":"int64","type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LinkBoardMemberRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BoardMemberResponse"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Boards"]}},"/boards/{id}":{"delete":{"operationId":"deleteBoard","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"int64","type":"integer"}}],"responses":{"204":{"description":"No Content"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Boards"]},"get":{"operationId":"findBoardById","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"int64","type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BoardResponse"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Boards"]},"put":{"operationId":"updateBoard","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"int64","type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateBoardRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BoardResponse"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Boards"]}},"/committeeMembers/committees":{"get":{"operationId":"findCommitteesByUserId","responses":{"200":{"content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/CommitteeResponse"},"type":"array"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Committees"]}},"/committees":{"get":{"operationId":"findCommittees","responses":{"200":{"content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/CommitteeResponse"},"type":"array"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Committees"]},"post":{"operationId":"createCommittee","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateCommitteeRequest"}}},"required":true},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommitteeDetailResponse"}}},"description":"Created"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Committees"]}},"/committees/{committeeId}":{"get":{"operationId":"findCommitteeById","parameters":[{"in":"path","name":"committeeId","required":true,"schema":{"format":"int64","type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommitteeResponse"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Committees"]}},"/committees/{id}":{"delete":{"operationId":"deleteCommitteeById","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"int64","type":"integer"}}],"responses":{"204":{"description":"No Content"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Committees"]},"put":{"operationId":"updateCommittee","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"int64","type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateCommitteeRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommitteeDetailResponse"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Committees"]}},"/contributionPeriods":{"get":{"operationId":"findContributionPeriods","responses":{"200":{"content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/ContributionPeriodResponse"},"type":"array"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["ContributionPeriods"]},"post":{"operationId":"createContributionPeriod","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateContributionPeriodRequest"}}},"required":true},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContributionPeriodResponse"}}},"description":"Created"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["ContributionPeriods"]}},"/contributionPeriods/current":{"get":{"operationId":"findCurrentContributionPeriod","responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContributionPeriodResponse"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["ContributionPeriods"]}},"/contributionPeriods/{contributionPeriodId}/users/{userId}/contributions":{"delete":{"operationId":"deleteContribution","parameters":[{"in":"path","name":"userId","required":true,"schema":{"format":"int64","type":"integer"}},{"in":"path","name":"contributionPeriodId","required":true,"schema":{"format":"int64","type":"integer"}}],"responses":{"204":{"description":"No Content"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Contributions"]}},"/contributionPeriods/{id}":{"delete":{"operationId":"deleteContributionPeriodById","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"int64","type":"integer"}}],"responses":{"204":{"description":"No Content"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["ContributionPeriods"]},"put":{"operationId":"updateContributionPeriod","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"int64","type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateContributionPeriodRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContributionPeriodResponse"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["ContributionPeriods"]}},"/contributionPeriods/{periodId}/contributions":{"get":{"operationId":"findContributionsByPeriodId","parameters":[{"in":"path","name":"periodId","required":true,"schema":{"format":"int64","type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/ContributionResponse"},"type":"array"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Contributions"]}},"/contributionReminders":{"get":{"operationId":"findContributionReminders","parameters":[{"in":"query","name":"contributionPeriodId","required":true,"schema":{"format":"int64","type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/ContributionReminderResponse"},"type":"array"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["ContributionReminders"]},"post":{"operationId":"sendContributionReminder","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateContributionReminderRequest"}}},"required":true},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContributionReminderResponse"}}},"description":"Created"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["ContributionReminders"]}},"/contributionReminders/batch":{"post":{"operationId":"sendContributionReminderBatch","requestBody":{"content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/CreateContributionReminderRequest"},"type":"array"}}},"required":true},"responses":{"201":{"content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/ContributionReminderResponse"},"type":"array"}}},"description":"Created"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["ContributionReminders"]}},"/contributions":{"get":{"operationId":"findContributions","parameters":[{"in":"query","name":"contributionPeriodId","required":true,"schema":{"format":"int64","type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/ContributionResponse"},"type":"array"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Contributions"]},"post":{"operationId":"createContribution","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateContributionRequest"}}},"required":true},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContributionResponse"}}},"description":"Created"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Contributions"]}},"/contributions/bulk/mark-paid":{"post":{"operationId":"markPaid","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkMarkPaidRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkActionResult"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Contributions"]}},"/contributions/bulk/mark-unpaid":{"post":{"operationId":"markUnpaid","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkMarkUnpaidRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkActionResult"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Contributions"]}},"/contributions/fee-cycle":{"get":{"operationId":"previewFeeCycle","parameters":[{"in":"query","name":"contributionPeriodId","required":true,"schema":{"format":"int64","type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FeeCyclePreviewResponse"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Contributions"]}},"/contributions/fee-cycle/email-preview":{"get":{"operationId":"previewFeeCycleEmail","parameters":[{"in":"query","name":"contributionPeriodId","required":true,"schema":{"format":"int64","type":"integer"}},{"in":"query","name":"userId","required":true,"schema":{"format":"int64","type":"integer"}},{"in":"query","name":"paymentDueDate","required":true,"schema":{"format":"date","type":"string"}},{"in":"query","name":"debitDate","required":true,"schema":{"format":"date","type":"string"}},{"in":"query","name":"feeType","required":false,"schema":{"$ref":"#/components/schemas/BulkFeeType"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FeeCycleEmailPreviewResponse"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Contributions"]}},"/contributions/fee-cycle/send":{"post":{"operationId":"sendFeeCycle","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SendFeeCycleRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FeeCycleResultResponse"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Contributions"]}},"/csrf":{"get":{"operationId":"csrf","parameters":[{"in":"query","name":"csrfToken","required":true,"schema":{"$ref":"#/components/schemas/CsrfToken"}}],"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":{"type":"string"},"type":"object"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Security"]}},"/esports/games":{"get":{"operationId":"findGames","responses":{"200":{"content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/GameResponse"},"type":"array"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Esports"]},"post":{"operationId":"createGame","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateGameRequest"}}},"required":true},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GameResponse"}}},"description":"Created"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Esports"]}},"/esports/games/{game}":{"delete":{"operationId":"deleteGame","parameters":[{"in":"path","name":"game","required":true,"schema":{"type":"string"}}],"responses":{"204":{"description":"No Content"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Esports"]},"get":{"operationId":"findGame","parameters":[{"in":"path","name":"game","required":true,"schema":{"type":"string"}},{"in":"query","name":"seasonId","required":false,"schema":{"format":"int64","type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GameRostersResponse"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Esports"]},"put":{"operationId":"updateGame","parameters":[{"in":"path","name":"game","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateGameRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GameResponse"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Esports"]}},"/esports/games/{game}/contents":{"get":{"operationId":"findGameContents","parameters":[{"in":"path","name":"game","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GameContentsResponse"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Esports"]}},"/esports/roster/{id}":{"delete":{"operationId":"removeRosterEntry","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"int64","type":"integer"}}],"responses":{"204":{"description":"No Content"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Esports"]},"put":{"operationId":"updateRosterEntry","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"int64","type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateRosterEntryRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RosterEntryResponse"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Esports"]}},"/esports/roster/{id}/member":{"put":{"operationId":"linkRosterEntry","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"int64","type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LinkRosterEntryRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RosterEntryResponse"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Esports"]}},"/esports/seasons":{"get":{"operationId":"findSeasons","responses":{"200":{"content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/SeasonResponse"},"type":"array"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Esports"]},"post":{"operationId":"createSeason","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SeasonRequest"}}},"required":true},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SeasonResponse"}}},"description":"Created"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Esports"]}},"/esports/seasons/{id}":{"delete":{"operationId":"deleteSeason","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"int64","type":"integer"}}],"responses":{"204":{"description":"No Content"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Esports"]},"put":{"operationId":"updateSeason","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"int64","type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SeasonRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SeasonResponse"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Esports"]}},"/esports/seasons/{id}/contents":{"get":{"operationId":"findSeasonContents","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"int64","type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SeasonContentsResponse"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Esports"]}},"/esports/seasons/{seasonId}/games":{"get":{"operationId":"findSeasonGames","parameters":[{"in":"path","name":"seasonId","required":true,"schema":{"format":"int64","type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/SeasonGameResponse"},"type":"array"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Esports"]}},"/esports/seasons/{seasonId}/games/{game}":{"delete":{"operationId":"leaveGame","parameters":[{"in":"path","name":"seasonId","required":true,"schema":{"format":"int64","type":"integer"}},{"in":"path","name":"game","required":true,"schema":{"type":"string"}}],"responses":{"204":{"description":"No Content"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Esports"]},"put":{"operationId":"enterGame","parameters":[{"in":"path","name":"seasonId","required":true,"schema":{"format":"int64","type":"integer"}},{"in":"path","name":"game","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SeasonGameResponse"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Esports"]}},"/esports/seasons/{seasonId}/teams/{teamId}":{"delete":{"operationId":"unfieldTeam","parameters":[{"in":"path","name":"seasonId","required":true,"schema":{"format":"int64","type":"integer"}},{"in":"path","name":"teamId","required":true,"schema":{"format":"int64","type":"integer"}},{"in":"query","name":"game","required":true,"schema":{"type":"string"}}],"responses":{"204":{"description":"No Content"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Esports"]},"put":{"operationId":"fieldTeam","parameters":[{"in":"path","name":"seasonId","required":true,"schema":{"format":"int64","type":"integer"}},{"in":"path","name":"teamId","required":true,"schema":{"format":"int64","type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FieldTeamRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FieldedTeamResponse"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Esports"]}},"/esports/teams":{"get":{"operationId":"findTeams","responses":{"200":{"content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/TeamResponse"},"type":"array"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Esports"]},"post":{"operationId":"createTeam","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateTeamRequest"}}},"required":true},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TeamResponse"}}},"description":"Created"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Esports"]}},"/esports/teams/{id}":{"delete":{"operationId":"deleteTeam","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"int64","type":"integer"}}],"responses":{"204":{"description":"No Content"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Esports"]},"put":{"operationId":"updateTeam","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"int64","type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateTeamRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TeamResponse"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Esports"]}},"/esports/teams/{teamId}/roster":{"get":{"operationId":"findRoster","parameters":[{"in":"path","name":"teamId","required":true,"schema":{"format":"int64","type":"integer"}},{"in":"query","name":"game","required":true,"schema":{"type":"string"}},{"in":"query","name":"seasonId","required":true,"schema":{"format":"int64","type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/RosterEntryResponse"},"type":"array"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Esports"]},"post":{"operationId":"addRosterEntry","parameters":[{"in":"path","name":"teamId","required":true,"schema":{"format":"int64","type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AddRosterEntryRequest"}}},"required":true},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RosterEntryResponse"}}},"description":"Created"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Esports"]}},"/esports/teams/{teamId}/seasons":{"get":{"operationId":"findTeamSeasons","parameters":[{"in":"path","name":"teamId","required":true,"schema":{"format":"int64","type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/FieldingResponse"},"type":"array"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Esports"]}},"/events":{"get":{"operationId":"findEvents","parameters":[{"description":"Zero-based page index (0..N)","in":"query","name":"page","required":false,"schema":{"default":0,"minimum":0,"type":"integer"}},{"description":"The size of the page to be returned","in":"query","name":"size","required":false,"schema":{"default":20,"minimum":1,"type":"integer"}},{"description":"Sorting criteria in the format: property,(asc|desc). Default sort order is ascending. Multiple sort criteria are supported.","in":"query","name":"sort","required":false,"schema":{"items":{"type":"string"},"type":"array"}},{"in":"query","name":"from","required":false,"schema":{"format":"date-time","type":"string"}},{"in":"query","name":"to","required":false,"schema":{"format":"date-time","type":"string"}},{"in":"query","name":"approved","required":false,"schema":{"type":"boolean"}},{"in":"query","name":"committeeId","required":false,"schema":{"format":"int64","type":"integer"}},{"in":"query","name":"titleContains","required":false,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PagedModelEventResponse"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Events"]},"post":{"operationId":"createEvent","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateEventRequest"}}},"required":true},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EventResponse"}}},"description":"Created"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Events"]}},"/events/banners":{"post":{"operationId":"uploadEventBanner","requestBody":{"content":{"multipart/form-data":{"schema":{"properties":{"file":{"format":"binary","type":"string"}},"required":["file"],"type":"object"}}},"required":true},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FileResponse"}}},"description":"Created"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Files"]}},"/events/signups":{"get":{"operationId":"findEventSignUps","parameters":[{"in":"query","name":"from","required":false,"schema":{"format":"date-time","type":"string"}},{"in":"query","name":"to","required":false,"schema":{"format":"date-time","type":"string"}},{"in":"query","name":"userId","required":false,"schema":{"format":"int64","type":"integer"}},{"in":"query","name":"committeeId","required":false,"schema":{"format":"int64","type":"integer"}},{"in":"query","name":"approved","required":false,"schema":{"type":"boolean"}},{"in":"query","name":"eventId","required":false,"schema":{"format":"int64","type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/EventSignUpResponse"},"type":"array"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["EventSignUps"]}},"/events/signups/byAccessToken":{"get":{"operationId":"findEventSignUpsByAccessToken","parameters":[{"in":"header","name":"X-Guest-Access-Token","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/EventSignUpResponse"},"type":"array"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["EventSignUps"]}},"/events/signups/{id}":{"delete":{"operationId":"deleteEventSignup","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"int64","type":"integer"}},{"in":"header","name":"X-Guest-Access-Token","required":false,"schema":{"type":"string"}}],"responses":{"204":{"description":"No Content"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["EventSignUps"]}},"/events/{eventId}":{"delete":{"operationId":"deleteEventById","parameters":[{"in":"path","name":"eventId","required":true,"schema":{"format":"int64","type":"integer"}}],"responses":{"204":{"description":"No Content"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Events"]}},"/events/{eventId}/banners":{"get":{"operationId":"downloadEventBanner","parameters":[{"in":"path","name":"eventId","required":true,"schema":{"format":"int64","type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"format":"binary","type":"string"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Files"]}},"/events/{eventId}/signups":{"get":{"operationId":"findEventSignUpsByEventId","parameters":[{"in":"path","name":"eventId","required":true,"schema":{"format":"int64","type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/EventSignUpResponse"},"type":"array"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["EventSignUps"]},"post":{"operationId":"createEventSignup","parameters":[{"in":"path","name":"eventId","required":true,"schema":{"format":"int64","type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateEventSignUpRequest"}}},"required":true},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EventSignUpResponse"}}},"description":"Created"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["EventSignUps"]},"put":{"operationId":"updateEventSignUp","parameters":[{"in":"path","name":"eventId","required":true,"schema":{"format":"int64","type":"integer"}},{"in":"header","name":"X-Guest-Access-Token","required":false,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateEventSignUpRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EventSignUpResponse"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["EventSignUps"]}},"/events/{id}":{"get":{"operationId":"findEventById","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"int64","type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EventResponse"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Events"]},"put":{"operationId":"updateEvent","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"int64","type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateEventRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EventResponse"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Events"]}},"/events/{id}/approve":{"put":{"operationId":"approveEvent","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"int64","type":"integer"}},{"in":"query","name":"approved","required":true,"schema":{"type":"boolean"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EventResponse"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Events"]}},"/files/images":{"post":{"operationId":"uploadPublicImage","parameters":[{"in":"query","name":"type","required":true,"schema":{"$ref":"#/components/schemas/FileType"}}],"requestBody":{"content":{"multipart/form-data":{"schema":{"properties":{"file":{"format":"binary","type":"string"}},"required":["file"],"type":"object"}}},"required":true},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Image"}}},"description":"Created"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Files"]}},"/files/public/{directory}/{filename}":{"get":{"operationId":"downloadPublicFile","parameters":[{"in":"path","name":"directory","required":true,"schema":{"type":"string"}},{"in":"path","name":"filename","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"format":"binary","type":"string"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Files"]}},"/health":{"get":{"operationId":"healthCheck","responses":{"200":{"content":{"application/json":{"schema":{"type":"boolean"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Health"]}},"/management/cohort-subjects":{"get":{"operationId":"findCohortSubjects","responses":{"200":{"content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/CohortSubjectSummary"},"type":"array"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Cohort Subjects"]}},"/management/cohort-subjects/{id}":{"get":{"operationId":"findCohortSubjectById","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"int64","type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CohortSubjectDetail"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Cohort Subjects"]}},"/management/cohort-subjects/{id}/drift/link-user":{"post":{"operationId":"linkUser","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"int64","type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LinkUserRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LinkedUser"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Cohort Subjects"]}},"/management/cohort-subjects/{id}/targets/existing":{"post":{"operationId":"linkExistingTarget","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"int64","type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LinkExistingTargetRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CohortMapping"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Cohort Subjects"]}},"/management/cohort-subjects/{id}/targets/new":{"post":{"operationId":"createTarget","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"int64","type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateTargetRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CohortMapping"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Cohort Subjects"]}},"/management/cohort-subjects/{id}/targets/{cohortId}":{"put":{"operationId":"switchTarget","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"int64","type":"integer"}},{"in":"path","name":"cohortId","required":true,"schema":{"format":"int64","type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SwitchTargetRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CohortMapping"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Cohort Subjects"]}},"/management/cohort-subjects/{id}/targets/{cohortId}/inbound-reconcile/apply":{"post":{"operationId":"applyInboundReconcile","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"int64","type":"integer"}},{"in":"path","name":"cohortId","required":true,"schema":{"format":"int64","type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InboundReconcileApplyRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InboundReconcileApplyResponse"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Cohort Subjects"]}},"/management/cohort-subjects/{id}/targets/{cohortId}/inbound-reconcile/preview":{"post":{"operationId":"previewInboundReconcile","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"int64","type":"integer"}},{"in":"path","name":"cohortId","required":true,"schema":{"format":"int64","type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InboundReconcilePreview"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Cohort Subjects"]}},"/management/cohort-targets/systems":{"get":{"operationId":"listCohortTargetSystems","responses":{"200":{"content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/TargetDescriptor"},"type":"array"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Cohort Targets"]}},"/management/cohort-targets/{system}":{"get":{"operationId":"searchCohortTargets","parameters":[{"in":"path","name":"system","required":true,"schema":{"$ref":"#/components/schemas/TargetSystem"}},{"in":"query","name":"query","required":false,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/ExternalTarget"},"type":"array"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Cohort Targets"]}},"/management/cohort-targets/{system}/folder":{"put":{"operationId":"moveCohortTargets","parameters":[{"in":"path","name":"system","required":true,"schema":{"$ref":"#/components/schemas/TargetSystem"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkMoveTargetsRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkTargetMoveResult"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Cohort Targets"]}},"/management/cohort-targets/{system}/folders":{"get":{"operationId":"listCohortTargetFolders","parameters":[{"in":"path","name":"system","required":true,"schema":{"$ref":"#/components/schemas/TargetSystem"}}],"responses":{"200":{"content":{"application/json":{"schema":{"items":{"type":"string"},"type":"array"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Cohort Targets"]}},"/management/cohort-targets/{system}/{externalId}/folder":{"put":{"operationId":"moveCohortTarget","parameters":[{"in":"path","name":"system","required":true,"schema":{"$ref":"#/components/schemas/TargetSystem"}},{"in":"path","name":"externalId","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MoveTargetRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExternalTarget"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Cohort Targets"]}},"/management/cohorts":{"get":{"operationId":"findCohorts","responses":{"200":{"content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/CohortSummary"},"type":"array"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Cohorts"]}},"/management/cohorts/{id}":{"get":{"operationId":"findCohortById","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"int64","type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CohortDetail"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Cohorts"]}},"/management/cohorts/{id}/repair-missing-adds":{"post":{"operationId":"repairMissingAdds","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"int64","type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CohortRepair"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Cohorts"]}},"/management/emails":{"get":{"operationId":"list_1","parameters":[{"description":"Zero-based page index (0..N)","in":"query","name":"page","required":false,"schema":{"default":0,"minimum":0,"type":"integer"}},{"description":"The size of the page to be returned","in":"query","name":"size","required":false,"schema":{"default":50,"minimum":1,"type":"integer"}},{"description":"Sorting criteria in the format: property,(asc|desc). Default sort order is ascending. Multiple sort criteria are supported.","in":"query","name":"sort","required":false,"schema":{"default":["createdAt,DESC"],"items":{"type":"string"},"type":"array"}},{"in":"query","name":"deliveryStatus","required":false,"schema":{"$ref":"#/components/schemas/EmailDeliveryStatus"}},{"in":"query","name":"emailType","required":false,"schema":{"type":"string"}},{"in":"query","name":"search","required":false,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PagedModelEmail"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Email Management"]}},"/management/emails/stats":{"get":{"operationId":"getStats_1","responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmailStats"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Email Management"]}},"/management/emails/{id}/preview":{"get":{"operationId":"previewSentEmail","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"int64","type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SentEmailPreview"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Email Management"]}},"/management/emails/{id}/retry":{"post":{"operationId":"retry_1","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"int64","type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Email"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Email Management"]}},"/management/jobs":{"get":{"operationId":"list","parameters":[{"description":"Zero-based page index (0..N)","in":"query","name":"page","required":false,"schema":{"default":0,"minimum":0,"type":"integer"}},{"description":"The size of the page to be returned","in":"query","name":"size","required":false,"schema":{"default":50,"minimum":1,"type":"integer"}},{"description":"Sorting criteria in the format: property,(asc|desc). Default sort order is ascending. Multiple sort criteria are supported.","in":"query","name":"sort","required":false,"schema":{"default":["updatedAt,DESC"],"items":{"type":"string"},"type":"array"}},{"in":"query","name":"status","required":false,"schema":{"$ref":"#/components/schemas/JobExecutionStatus"}},{"in":"query","name":"category","required":false,"schema":{"$ref":"#/components/schemas/JobExecutionCategory"}},{"in":"query","name":"search","required":false,"schema":{"type":"string"}},{"in":"query","name":"initiatedByType","required":false,"schema":{"$ref":"#/components/schemas/ActionActorType"}},{"in":"query","name":"jobType","required":false,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PagedModelJobExecution"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Job Management"]}},"/management/jobs/enqueue":{"post":{"operationId":"enqueue","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnqueueJobRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JobExecution"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Job Management"]}},"/management/jobs/stats":{"get":{"operationId":"getStats","responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JobStatsDTO"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Job Management"]}},"/management/jobs/types":{"get":{"operationId":"jobTypes","responses":{"200":{"content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/JobTypeDescriptor"},"type":"array"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Job Management"]}},"/management/jobs/{id}/retry":{"post":{"operationId":"retry","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"int64","type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JobExecution"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Job Management"]}},"/me/services":{"get":{"operationId":"myServices","responses":{"200":{"content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/ServiceEntry"},"type":"array"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["My Services"]}},"/memberProfiles":{"post":{"operationId":"createMemberProfile","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateMemberProfileRequest"}}},"required":true},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MemberProfileResponse"}}},"description":"Created"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Member Profiles"]}},"/memberships":{"get":{"operationId":"findMemberships","parameters":[{"in":"query","name":"from","required":false,"schema":{"format":"date","type":"string"}},{"in":"query","name":"to","required":false,"schema":{"format":"date","type":"string"}},{"in":"query","name":"userId","required":false,"schema":{"format":"int64","type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/MembershipResponse"},"type":"array"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Memberships"]},"post":{"operationId":"createMembership","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MembershipApplicationRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SignupOutcomeResponse"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Memberships"]}},"/memberships/bulk/end":{"post":{"operationId":"endMemberships","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkMembershipRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkActionResult"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Memberships"]}},"/memberships/bulk/end/preview":{"post":{"operationId":"previewBulkEnd","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkMembershipRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkMembershipPreview"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Memberships"]}},"/memberships/bulk/start":{"post":{"operationId":"startMemberships","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkMembershipRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkActionResult"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Memberships"]}},"/memberships/bulk/start/preview":{"post":{"operationId":"previewBulkStart","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkMembershipRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkMembershipPreview"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Memberships"]}},"/memberships/{id}":{"delete":{"operationId":"deleteMembership","parameters":[{"in":"path","name":"id","required":true,"schema":{"exclusiveMinimum":0,"format":"int64","type":"integer"}}],"responses":{"204":{"description":"No Content"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Memberships"]},"get":{"operationId":"findMembershipById","parameters":[{"in":"path","name":"id","required":true,"schema":{"exclusiveMinimum":0,"format":"int64","type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MembershipResponse"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Memberships"]},"put":{"operationId":"updateMembership","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"int64","type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateMembershipRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MembershipResponse"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Memberships"]}},"/memberships/{id}/end":{"post":{"operationId":"endMembership","parameters":[{"in":"path","name":"id","required":true,"schema":{"exclusiveMinimum":0,"format":"int64","type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MembershipResponse"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Memberships"]}},"/memberships/{id}/reopen":{"post":{"operationId":"reopenMembership","parameters":[{"in":"path","name":"id","required":true,"schema":{"exclusiveMinimum":0,"format":"int64","type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MembershipResponse"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Memberships"]}},"/memberships/{id}/restore":{"put":{"operationId":"restoreMembership","parameters":[{"in":"path","name":"id","required":true,"schema":{"exclusiveMinimum":0,"format":"int64","type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MembershipResponse"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Memberships"]}},"/oauth2/forward-auth":{"get":{"operationId":"forwardAuth","responses":{"200":{"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Forward Auth"]}},"/recovery/member/activate":{"post":{"operationId":"memberActivate","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MemberActivationRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RedirectResponse"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Recovery"]}},"/recovery/password":{"post":{"operationId":"setPassword","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PasswordResetRequest"}}},"required":true},"responses":{"204":{"description":"No Content"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Recovery"]}},"/recovery/password/reset/{username}":{"post":{"operationId":"resetPassword","parameters":[{"in":"path","name":"username","required":true,"schema":{"type":"string"}}],"responses":{"204":{"description":"No Content"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Recovery"]}},"/recovery/pending-activations":{"get":{"operationId":"pendingActivations","responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingActivationsResponse"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Recovery"]}},"/recovery/user/activate":{"post":{"operationId":"userActivate","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserActivationRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ActivationResponse"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Recovery"]}},"/recovery/user/activate/resend/{username}":{"post":{"operationId":"resendUserActivation","parameters":[{"in":"path","name":"username","required":true,"schema":{"type":"string"}}],"responses":{"204":{"description":"No Content"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Recovery"]}},"/recovery/users/{userId}/email-preview":{"get":{"operationId":"previewRecoveryEmail","parameters":[{"in":"path","name":"userId","required":true,"schema":{"format":"int64","type":"integer"}},{"in":"query","name":"purpose","required":true,"schema":{"$ref":"#/components/schemas/TokenPurpose"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RecoveryEmailPreviewResponse"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Recovery"]}},"/recovery/users/{userId}/resend/recovery":{"post":{"operationId":"resendRecoveryEmail","parameters":[{"in":"path","name":"userId","required":true,"schema":{"format":"int64","type":"integer"}},{"in":"query","name":"purpose","required":false,"schema":{"$ref":"#/components/schemas/TokenPurpose"}}],"responses":{"204":{"description":"No Content"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Recovery"]}},"/signup":{"post":{"operationId":"signUp","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateUserRequest"}}},"required":true},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SignupSessionResponse"}}},"description":"Created"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Signup"]}},"/signup/address":{"post":{"operationId":"saveAddress","parameters":[{"in":"header","name":"X-Signup-Token","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SignupAddressRequest"}}},"required":true},"responses":{"204":{"description":"No Content"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Signup"]}},"/signup/apply":{"post":{"operationId":"apply","parameters":[{"in":"header","name":"X-Signup-Token","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SignupApplicationRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SignupOutcomeResponse"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Signup"]}},"/signup/details":{"patch":{"operationId":"updateDetails","parameters":[{"in":"header","name":"X-Signup-Token","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SignupDetailsRequest"}}},"required":true},"responses":{"204":{"description":"No Content"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Signup"]}},"/signup/email":{"patch":{"operationId":"correctEmail","parameters":[{"in":"header","name":"X-Signup-Token","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SignupEmailRequest"}}},"required":true},"responses":{"204":{"description":"No Content"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Signup"]}},"/sponsors":{"get":{"operationId":"findSponsors","responses":{"200":{"content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/SponsorResponse"},"type":"array"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Sponsors"]},"post":{"operationId":"createSponsor","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateSponsorRequest"}}},"required":true},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SponsorResponse"}}},"description":"Created"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Sponsors"]}},"/sponsors/{id}":{"delete":{"operationId":"deleteSponsorById","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"int64","type":"integer"}}],"responses":{"204":{"description":"No Content"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Sponsors"]},"get":{"operationId":"findSponsorById","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"int64","type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SponsorResponse"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Sponsors"]},"put":{"operationId":"updateSponsor","parameters":[{"in":"path","name":"id","required":true,"schema":{"exclusiveMinimum":0,"format":"int64","type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateSponsorRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SponsorResponse"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Sponsors"]}},"/telemetry":{"post":{"operationId":"createTelemetry","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateTelemetryRequest"}}},"required":true},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TelemetryResponse"}}},"description":"Created"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Telemetries"]}},"/telemetry/{id}":{"get":{"operationId":"findTelemetryById","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"int64","type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TelemetryResponse"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Telemetries"]}},"/users":{"get":{"operationId":"findUsers","parameters":[{"in":"query","name":"username","required":false,"schema":{"type":"string"}},{"in":"query","name":"enabled","required":false,"schema":{"type":"boolean"}},{"description":"Zero-based page index (0..N)","in":"query","name":"page","required":false,"schema":{"default":0,"minimum":0,"type":"integer"}},{"description":"The size of the page to be returned","in":"query","name":"size","required":false,"schema":{"default":20,"minimum":1,"type":"integer"}},{"description":"Sorting criteria in the format: property,(asc|desc). Default sort order is ascending. Multiple sort criteria are supported.","in":"query","name":"sort","required":false,"schema":{"items":{"type":"string"},"type":"array"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PagedModelUserDetailResponse"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Users"]},"post":{"operationId":"createUser","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateUserRequest"}}},"required":true},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserDetailResponse"}}},"description":"Created"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Users"]}},"/users/deleted":{"get":{"operationId":"findDeletedUsers","parameters":[{"description":"Zero-based page index (0..N)","in":"query","name":"page","required":false,"schema":{"default":0,"minimum":0,"type":"integer"}},{"description":"The size of the page to be returned","in":"query","name":"size","required":false,"schema":{"default":20,"minimum":1,"type":"integer"}},{"description":"Sorting criteria in the format: property,(asc|desc). Default sort order is ascending. Multiple sort criteria are supported.","in":"query","name":"sort","required":false,"schema":{"items":{"type":"string"},"type":"array"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PagedModelUserDetailResponse"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Users"]}},"/users/{id}":{"put":{"operationId":"updateUser","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"int64","type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateUserRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserDetailResponse"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Users"]}},"/users/{userId}":{"delete":{"operationId":"deleteUserById","parameters":[{"in":"path","name":"userId","required":true,"schema":{"format":"int64","type":"integer"}}],"responses":{"204":{"description":"No Content"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Users"]},"get":{"operationId":"findUserById","parameters":[{"in":"path","name":"userId","required":true,"schema":{"format":"int64","type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserDetailResponse"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Users"]}},"/users/{userId}/game-accounts":{"get":{"operationId":"findGameAccounts","parameters":[{"in":"path","name":"userId","required":true,"schema":{"format":"int64","type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/GameAccountResponse"},"type":"array"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Game accounts"]}},"/users/{userId}/game-accounts/{game}":{"delete":{"operationId":"clearGameAccount","parameters":[{"in":"path","name":"userId","required":true,"schema":{"format":"int64","type":"integer"}},{"in":"path","name":"game","required":true,"schema":{"type":"string"}}],"responses":{"204":{"description":"No Content"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Game accounts"]},"put":{"operationId":"setGameAccount","parameters":[{"in":"path","name":"userId","required":true,"schema":{"format":"int64","type":"integer"}},{"in":"path","name":"game","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GameAccountRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GameAccountResponse"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Game accounts"]}},"/users/{userId}/memberProfiles":{"get":{"operationId":"findMemberProfileByUserId","parameters":[{"in":"path","name":"userId","required":true,"schema":{"format":"int64","type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MemberProfileResponse"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Member Profiles"]},"put":{"operationId":"updateMemberProfile","parameters":[{"in":"path","name":"userId","required":true,"schema":{"format":"int64","type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateMemberProfileRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MemberProfileResponse"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Member Profiles"]}},"/users/{userId}/memberships":{"post":{"operationId":"boardCreateMembership","parameters":[{"in":"path","name":"userId","required":true,"schema":{"format":"int64","type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BoardCreateMembershipRequest"}}},"required":true},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MembershipResponse"}}},"description":"Created"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Memberships"]}},"/users/{userId}/memberships/deleted":{"get":{"operationId":"findDeletedMemberships","parameters":[{"in":"path","name":"userId","required":true,"schema":{"exclusiveMinimum":0,"format":"int64","type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/MembershipResponse"},"type":"array"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Memberships"]}},"/users/{userId}/restore":{"put":{"operationId":"restoreDeletedUserById","parameters":[{"in":"path","name":"userId","required":true,"schema":{"format":"int64","type":"integer"}}],"responses":{"204":{"description":"No Content"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Users"]}},"/users/{userId}/roles":{"put":{"operationId":"toggleUserRole","parameters":[{"in":"path","name":"userId","required":true,"schema":{"format":"int64","type":"integer"}},{"in":"query","name":"role","required":true,"schema":{"$ref":"#/components/schemas/Role"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserDetailResponse"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Users"]}}},"servers":[{"description":"Generated server url","url":"http://localhost:8080"}],"tags":[{"description":"Admin cohort listings + detail","name":"Cohorts"},{"description":"API for managing outbound emails","name":"Email Management"},{"description":"Per-member, per-game handles","name":"Game accounts"},{"description":"Admin: external cohort target catalog","name":"Cohort Targets"},{"description":"Teams, seasons and rosters","name":"Esports"},{"description":"Admin: logical subjects + their per-system mappings","name":"Cohort Subjects"},{"description":"API for managing job executions","name":"Job Management"}]} diff --git a/services/api/openapi.yaml b/services/api/openapi.yaml new file mode 100644 index 000000000..95e1643be --- /dev/null +++ b/services/api/openapi.yaml @@ -0,0 +1,22450 @@ +components: + schemas: + ActionActorType: + enum: + - USER + - SYSTEM + type: string + ActivationResponse: + properties: + membershipStarted: + type: boolean + required: + - membershipStarted + type: object + Actor: + properties: + role: + $ref: '#/components/schemas/Role' + type: + $ref: '#/components/schemas/ActionActorType' + userId: + format: int64 + type: + - integer + - 'null' + required: + - role + - type + type: object + AddBoardMemberRequest: + properties: + description: + type: + - string + - 'null' + displayName: + description: Who held the seat, when no account can be attached to it + maxLength: 128 + minLength: 0 + type: + - string + - 'null' + endDate: + format: date + type: + - string + - 'null' + image: + description: Asset file name of the member's portrait + maxLength: 255 + minLength: 0 + type: + - string + - 'null' + nickname: + description: The name the seat was known by, without the quotes around it + maxLength: 128 + minLength: 0 + type: + - string + - 'null' + portrait: + description: Where the seat's portrait is stored; blank leaves the seat without one + maxLength: 255 + minLength: 0 + type: + - string + - 'null' + role: + minLength: 1 + type: string + startDate: + format: date + type: string + userId: + description: The member holding the seat; absent for somebody with no account + format: int64 + type: + - integer + - 'null' + required: + - role + - startDate + type: object + AddRosterEntryRequest: + description: Put somebody on a team's roster for a season + properties: + description: + description: A short caption about them, in markdown + maxLength: 280 + minLength: 0 + type: + - string + - 'null' + displayName: + maxLength: 128 + minLength: 0 + type: + - string + - 'null' + game: + description: The game the team is fielded in; naming somebody fields it there + maxLength: 32 + minLength: 1 + type: string + handle: + maxLength: 128 + minLength: 1 + type: string + icon: + description: Where this entry's picture is stored; nothing leaves it without one + maxLength: 255 + minLength: 0 + type: + - string + - 'null' + role: + $ref: '#/components/schemas/TeamRole' + roleTitle: + description: What they did in the team's own words, beside the fixed part + maxLength: 64 + minLength: 0 + type: + - string + - 'null' + seasonId: + format: int64 + type: integer + userId: + description: The member this entry belongs to, when they are known + format: int64 + type: + - integer + - 'null' + required: + - game + - handle + - role + - seasonId + type: object + AddressResponse: + properties: + city: + type: + - string + - 'null' + country: + type: + - string + - 'null' + createdAt: + format: date-time + type: string + houseNumber: + type: + - string + - 'null' + id: + format: int64 + type: integer + street: + type: + - string + - 'null' + updatedAt: + format: date-time + type: string + userId: + format: int64 + type: + - integer + - 'null' + version: + format: int64 + type: integer + zipCode: + type: + - string + - 'null' + required: + - createdAt + - id + - updatedAt + - version + type: object + AnswerRequest: + properties: + optionSelections: + items: + type: boolean + type: + - array + - 'null' + questionId: + format: int64 + type: integer + textResponse: + type: + - string + - 'null' + required: + - questionId + type: object + AnswerResponse: + properties: + createdAt: + format: date-time + type: string + id: + format: int64 + type: integer + optionSelections: + items: + type: boolean + type: + - array + - 'null' + questionId: + format: int64 + type: integer + textResponse: + type: + - string + - 'null' + updatedAt: + format: date-time + type: string + version: + format: int64 + type: integer + required: + - createdAt + - id + - questionId + - updatedAt + - version + type: object + ApiError: + description: Problem Details for HTTP APIs including validation errors. + properties: + detail: + description: Human-readable explanation specific to this occurrence. + example: Validation failed for request. + type: string + errors: + description: List of field/object validation errors (present when binding/validation fails). + items: + $ref: '#/components/schemas/FieldValidationError' + type: array + instance: + description: A URI reference that identifies the specific occurrence. + example: /api/v1/users + format: uri + type: string + status: + description: HTTP status code. + example: 400 + format: int32 + type: integer + title: + description: Short, human-readable summary of the problem. + example: Bad Request + type: string + traceId: + description: Trace or correlation id if available (Spring may add this via problem detail handlers). + example: a8c0c4e5f1c24a7e + type: string + type: + description: Problem type URI (RFC 7807). + example: about:blank + type: string + BlogResponse: + properties: + createdAt: + format: date-time + type: string + html: + type: string + id: + format: int64 + type: integer + publishedAt: + format: date-time + type: string + title: + type: string + updatedAt: + format: date-time + type: string + url: + type: string + version: + format: int64 + type: integer + required: + - createdAt + - html + - id + - publishedAt + - title + - updatedAt + - url + - version + type: object + BoardCreateMembershipRequest: + properties: + endDate: + format: date + type: + - string + - 'null' + incasso: + type: boolean + memberType: + $ref: '#/components/schemas/MemberType' + startDate: + format: date + type: + - string + - 'null' + userId: + format: int64 + type: integer + required: + - incasso + - memberType + - startDate + - userId + type: object + BoardMemberResponse: + properties: + boardId: + format: int64 + type: integer + createdAt: + format: date-time + type: string + description: + description: The personal note the board page shows beside a member + type: + - string + - 'null' + endDate: + format: date + type: + - string + - 'null' + id: + description: The seat's own id, which is how it is edited or removed + format: int64 + type: integer + image: + description: Asset file name of the member's portrait + type: + - string + - 'null' + name: + description: 'Who held the seat: the linked member''s name, or the recorded one' + type: + - string + - 'null' + nickname: + description: The name the seat was known by, beside the name rather than inside it + type: + - string + - 'null' + portrait: + description: The seat's portrait, with its size and the widths it is stored at + oneOf: + - $ref: '#/components/schemas/Image' + - type: 'null' + role: + type: string + startDate: + format: date + type: string + updatedAt: + format: date-time + type: string + userId: + description: The member holding the seat, when one is linked to it + format: int64 + type: + - integer + - 'null' + version: + format: int64 + type: integer + required: + - boardId + - createdAt + - id + - role + - startDate + - updatedAt + - version + type: object + BoardResponse: + properties: + accent: + description: The board's own colour; absent means the association's blue + type: + - string + - 'null' + candidate: + type: string + cheer: + description: The board's shouted line + type: + - string + - 'null' + createdAt: + format: date-time + type: string + description: + description: What the year was about, in the board's own words + type: + - string + - 'null' + endDate: + format: date + type: + - string + - 'null' + id: + format: int64 + type: integer + image: + description: Asset file name of the board's own photograph + type: + - string + - 'null' + members: + items: + $ref: '#/components/schemas/BoardMemberResponse' + type: array + name: + description: The name the board chose for itself, where one is recorded + type: + - string + - 'null' + number: + description: The board's place in the line, unique among the boards that exist + format: int32 + type: integer + photo: + description: The board's group photograph, with its size and the widths it is stored at + oneOf: + - $ref: '#/components/schemas/Image' + - type: 'null' + startDate: + format: date + type: string + updatedAt: + format: date-time + type: string + version: + format: int64 + type: integer + required: + - candidate + - createdAt + - id + - members + - number + - startDate + - updatedAt + - version + type: object + BulkActionResult: + properties: + applied: + format: int32 + type: integer + queued: + format: int32 + type: integer + skipped: + format: int32 + type: integer + required: + - applied + - queued + - skipped + type: object + BulkFeeType: + enum: + - FULL_YEAR_FEE + - HALF_YEAR_FEE + - ALUMNI_FEE + type: string + BulkMarkPaidRequest: + properties: + contributionPeriodId: + format: int64 + minimum: 0 + type: + - integer + - 'null' + userIds: + items: + format: int64 + type: integer + maxItems: 1000 + minItems: 0 + type: array + required: + - contributionPeriodId + - userIds + type: object + BulkMarkUnpaidRequest: + properties: + contributionPeriodId: + format: int64 + minimum: 0 + type: + - integer + - 'null' + userIds: + items: + format: int64 + type: integer + maxItems: 1000 + minItems: 0 + type: array + required: + - contributionPeriodId + - userIds + type: object + BulkMembershipPreview: + properties: + effectiveDate: + format: date + type: string + rows: + items: + $ref: '#/components/schemas/BulkMembershipPreviewRow' + type: array + required: + - effectiveDate + - rows + type: object + BulkMembershipPreviewRow: + properties: + disposition: + $ref: '#/components/schemas/BulkRowDisposition' + reason: + oneOf: + - $ref: '#/components/schemas/BulkRowReason' + - type: 'null' + userId: + format: int64 + type: integer + required: + - disposition + - userId + type: object + BulkMembershipRequest: + properties: + userIds: + items: + format: int64 + type: integer + maxItems: 1000 + minItems: 0 + type: array + required: + - userIds + type: object + BulkMoveTargetsRequest: + description: Where to file several targets at once. + properties: + externalIds: + description: The external ids of the targets to move, as the system itself names them. + example: + - '7' + - '33' + items: + type: string + minItems: 1 + type: array + folder: + description: The folder to move them into. Must already exist in the system. + example: Committees + minLength: 1 + type: string + required: + - externalIds + - folder + type: object + BulkRowDisposition: + enum: + - INCLUDED + - SKIPPED + - EXCLUDED + - WARNING + type: string + BulkRowReason: + enum: + - ALREADY_PAID + - NOT_PAID + - HONORARY + - INCASSO_MISMATCH + - NO_ACTIVE_MEMBERSHIP + - STARTED_TODAY + - NO_EMAIL + - DELETED + - ALREADY_ACTIVE + - NO_CONTRIBUTION_PERIOD + - WILL_RESUME + - WILL_START_NEW + type: string + BulkRowVocabulary: + description: Contract-only holder that publishes the bulk-action enums. Not returned by any endpoint. + properties: + disposition: + $ref: '#/components/schemas/BulkRowDisposition' + feeCycleGroup: + $ref: '#/components/schemas/FeeCycleGroup' + feeType: + $ref: '#/components/schemas/BulkFeeType' + reason: + $ref: '#/components/schemas/BulkRowReason' + required: + - disposition + - feeCycleGroup + - feeType + - reason + BulkTargetMoveResult: + description: The outcome of moving several targets. + properties: + failed: + description: The targets the system refused, and what it said. Empty when all moved. + items: + $ref: '#/components/schemas/FailedTargetMove' + type: array + moved: + description: The targets that were moved, as the system now describes them. + items: + $ref: '#/components/schemas/ExternalTarget' + type: array + required: + - failed + - moved + type: object + CohortDetail: + properties: + definitionKey: + description: Which definition in code decides who belongs to this cohort + type: + - string + - 'null' + externalId: + type: + - string + - 'null' + folder: + type: + - string + - 'null' + id: + format: int64 + type: integer + kind: + $ref: '#/components/schemas/CohortKind' + label: + type: string + memberCount: + format: int32 + type: integer + members: + items: + $ref: '#/components/schemas/CohortMemberRow' + type: array + system: + type: string + required: + - id + - kind + - label + - memberCount + - members + - system + type: object + CohortKind: + enum: + - LIST + - ROLE + - GROUP + type: string + CohortMapping: + properties: + cohortId: + format: int64 + type: integer + externalId: + type: + - string + - 'null' + kind: + $ref: '#/components/schemas/CohortKind' + label: + type: string + lastReconciledAt: + description: When this cohort was last confirmed to agree with its target + format: date-time + type: + - string + - 'null' + path: + description: 'Where the target sits on its system, outside in: the system, then any folder holding it. Read from what was recorded when the target was linked or moved, so a page costs no call to the system.' + items: + type: string + type: array + system: + $ref: '#/components/schemas/TargetSystem' + description: External system this mapping targets + required: + - cohortId + - kind + - label + - path + - system + type: object + CohortMemberRow: + properties: + cohortMemberId: + format: int64 + type: integer + isUserDeleted: + type: boolean + joinedAt: + format: date-time + type: string + userEmail: + type: + - string + - 'null' + userFullName: + type: + - string + - 'null' + userId: + format: int64 + type: integer + required: + - cohortMemberId + - isUserDeleted + - joinedAt + - userId + type: object + CohortRepair: + properties: + cohortId: + format: int64 + type: integer + enqueuedAdds: + format: int32 + type: integer + required: + - cohortId + - enqueuedAdds + type: object + CohortSubjectCategory: + enum: + - COMMITTEES + - PERIODS + - MEMBERS + type: string + CohortSubjectDetail: + properties: + category: + $ref: '#/components/schemas/CohortSubjectCategory' + definitionKey: + description: Which definition in code decides who belongs here + type: + - string + - 'null' + description: + type: + - string + - 'null' + id: + format: int64 + type: integer + label: + type: string + mappings: + items: + $ref: '#/components/schemas/CohortMapping' + type: array + members: + items: + $ref: '#/components/schemas/CohortSubjectMember' + type: array + orphaned: + description: True when no definition produces this cohort any more + type: boolean + type: + $ref: '#/components/schemas/CohortSubjectType' + required: + - category + - id + - label + - mappings + - members + - orphaned + - type + type: object + CohortSubjectMember: + properties: + cohortMemberId: + format: int64 + type: integer + externalLabel: + description: What the external system calls this row + type: + - string + - 'null' + externalUserId: + description: The row's identity in the external system, where it has one + type: + - string + - 'null' + isUserDeleted: + type: boolean + joinedAt: + format: date-time + type: string + state: + description: Whether this row is in step with the external system + enum: + - DESIRED + - SYNCED + - VERIFIED + - STRANGER + - INVALID + type: + - string + - 'null' + system: + description: Which system's ledger this row belongs to + oneOf: + - $ref: '#/components/schemas/TargetSystem' + - type: 'null' + userEmail: + type: + - string + - 'null' + userFullName: + type: + - string + - 'null' + userId: + description: Null for a row present externally with no local account + format: int64 + type: + - integer + - 'null' + required: + - cohortMemberId + - isUserDeleted + - joinedAt + type: object + CohortSubjectSummary: + properties: + category: + $ref: '#/components/schemas/CohortSubjectCategory' + id: + format: int64 + type: integer + label: + type: string + mappingCount: + format: int32 + type: integer + memberCount: + format: int32 + type: integer + type: + $ref: '#/components/schemas/CohortSubjectType' + required: + - category + - id + - label + - mappingCount + - memberCount + - type + type: object + CohortSubjectType: + enum: + - COMMITTEE_MEMBERS + - PERIOD_PAYERS + - PERIOD_MEMBERS + - PERIOD_ACTIVE_MEMBERS + - NEWSLETTER_SUBSCRIBERS + type: string + CohortSummary: + properties: + externalId: + type: + - string + - 'null' + folder: + type: + - string + - 'null' + id: + format: int64 + type: integer + kind: + $ref: '#/components/schemas/CohortKind' + label: + type: string + memberCount: + format: int32 + type: integer + system: + type: string + required: + - id + - kind + - label + - memberCount + - system + type: object + CommitteeDetailResponse: + properties: + createdAt: + format: date-time + type: string + description: + maxLength: 4095 + minLength: 0 + type: string + id: + format: int64 + type: integer + members: + items: + $ref: '#/components/schemas/CommitteeMemberResponse' + minItems: 1 + type: array + name: + maxLength: 255 + minLength: 0 + type: string + updatedAt: + format: date-time + type: string + version: + format: int64 + type: integer + required: + - createdAt + - description + - id + - members + - name + - updatedAt + - version + type: object + CommitteeMemberRequest: + properties: + role: + description: What this member does on the committee. Omitted for a member who simply sits on it, which is most of them. + example: Chair + maxLength: 50 + minLength: 0 + type: + - string + - 'null' + userId: + format: int64 + type: integer + required: + - userId + type: object + CommitteeMemberResponse: + properties: + committeeId: + format: int64 + type: integer + createdAt: + format: date-time + type: string + role: + minLength: 1 + type: string + updatedAt: + format: date-time + type: string + userId: + format: int64 + type: integer + version: + format: int64 + type: integer + required: + - committeeId + - createdAt + - role + - updatedAt + - userId + - version + type: object + CommitteeResponse: { + } + ContactSystem: + enum: + - BREVO + type: string + ContributionPeriodResponse: + properties: + alumniFee: + format: double + type: number + contactListId: + format: int64 + type: + - integer + - 'null' + createdAt: + format: date-time + type: string + endDate: + format: date + type: string + fullYearFee: + format: double + type: number + halfYearCutoffDate: + format: date + type: string + halfYearFee: + format: double + type: number + id: + format: int64 + type: integer + startDate: + format: date + type: string + updatedAt: + format: date-time + type: string + version: + format: int64 + type: integer + required: + - alumniFee + - createdAt + - endDate + - fullYearFee + - halfYearCutoffDate + - halfYearFee + - id + - startDate + - updatedAt + - version + type: object + ContributionReminderResponse: + properties: + amount: + description: The amount this ask asked for, as stated. Absent wherever the fee type is. + format: double + type: + - number + - 'null' + askedAt: + description: When the member was asked. + format: date-time + type: string + contributionPeriodId: + format: int64 + type: integer + createdAt: + format: date-time + type: string + feeType: + description: The fee type this ask stated. Absent when it quoted the period's options instead. + oneOf: + - $ref: '#/components/schemas/BulkFeeType' + - type: 'null' + id: + format: int64 + type: integer + paymentDueDate: + description: The date this ask asked to be paid by. Absent wherever the fee type is. + format: date + type: + - string + - 'null' + updatedAt: + format: date-time + type: string + userId: + format: int64 + type: integer + version: + format: int64 + type: integer + required: + - askedAt + - contributionPeriodId + - createdAt + - id + - updatedAt + - userId + - version + type: object + ContributionResponse: + properties: + contributionPeriodId: + format: int64 + type: integer + createdAt: + format: date-time + type: string + remindedAt: + format: date-time + type: + - string + - 'null' + updatedAt: + format: date-time + type: string + userId: + format: int64 + type: integer + version: + format: int64 + type: integer + required: + - contributionPeriodId + - createdAt + - updatedAt + - userId + - version + type: object + CreateAddressRequest: + properties: + city: + minLength: 1 + type: string + country: + minLength: 1 + type: string + houseNumber: + minLength: 1 + type: string + street: + minLength: 1 + type: string + userId: + format: int64 + type: integer + zipCode: + minLength: 1 + type: string + required: + - city + - country + - houseNumber + - street + - userId + - zipCode + type: object + CreateBlogRequest: + properties: + html: + minLength: 1 + type: string + publishedAt: + format: date-time + type: string + title: + maxLength: 200 + minLength: 1 + type: string + required: + - html + - publishedAt + - title + type: object + CreateBoardRequest: + properties: + accent: + description: The board's own colour; blank means the association's blue + maxLength: 32 + minLength: 0 + type: + - string + - 'null' + candidate: + description: Kept for the column behind it; the board's own name is used when blank + type: + - string + - 'null' + cheer: + description: The board's shouted line + maxLength: 255 + minLength: 0 + type: + - string + - 'null' + description: + description: What the year was about, in the board's own words + type: + - string + - 'null' + endDate: + format: date + type: + - string + - 'null' + image: + description: Asset file name of the board's photograph + maxLength: 255 + minLength: 0 + type: + - string + - 'null' + name: + description: The name the board chose for itself; blank for a board with none + maxLength: 100 + minLength: 0 + type: + - string + - 'null' + number: + description: The board's place in the line; the ninth board is 9 + format: int32 + minimum: 1 + type: integer + photo: + description: Where the board's group photograph is stored; blank leaves it without one + maxLength: 255 + minLength: 0 + type: + - string + - 'null' + startDate: + format: date + type: string + required: + - number + - startDate + type: object + CreateCommitteeRequest: + properties: + description: + maxLength: 1000 + minLength: 1 + type: string + members: + items: + $ref: '#/components/schemas/CommitteeMemberRequest' + minItems: 1 + type: array + name: + maxLength: 100 + minLength: 1 + type: string + required: + - description + - members + - name + type: object + CreateContributionPeriodRequest: + properties: + alumniFee: + format: double + minimum: 0 + type: number + contactListId: + format: int64 + type: + - integer + - 'null' + endDate: + format: date + type: string + fullYearFee: + format: double + minimum: 0 + type: number + halfYearCutoffDate: + description: A regular membership starting after this date pays the half-year fee. + format: date + type: string + halfYearFee: + format: double + minimum: 0 + type: number + startDate: + format: date + type: string + required: + - alumniFee + - endDate + - fullYearFee + - halfYearCutoffDate + - halfYearFee + - startDate + type: object + CreateContributionReminderRequest: + properties: + contributionPeriodId: + format: int64 + type: integer + userId: + format: int64 + type: integer + required: + - contributionPeriodId + - userId + type: object + CreateContributionRequest: + properties: + contributionPeriodId: + format: int64 + minimum: 0 + type: integer + userId: + format: int64 + minimum: 0 + type: integer + required: + - contributionPeriodId + - userId + type: object + CreateEventRequest: + properties: + approved: + type: boolean + banner: + oneOf: + - $ref: '#/components/schemas/EventBannerRequest' + - type: 'null' + committeeId: + format: int64 + type: integer + description: + maxLength: 4095 + minLength: 1 + type: string + endTime: + format: date-time + type: string + location: + type: + - string + - 'null' + memberPrice: + format: double + type: + - number + - 'null' + membersOnly: + type: boolean + publicPrice: + format: double + type: + - number + - 'null' + signUp: + type: boolean + signUpDeadline: + format: date-time + type: + - string + - 'null' + signUpForm: + oneOf: + - $ref: '#/components/schemas/SurveyRequest' + - type: 'null' + signUpLimit: + format: int32 + minimum: 1 + type: + - integer + - 'null' + startTime: + format: date-time + type: string + title: + maxLength: 200 + minLength: 1 + type: string + required: + - approved + - committeeId + - description + - endTime + - membersOnly + - signUp + - startTime + - title + type: object + CreateEventSignUpRequest: + properties: + answers: + items: + $ref: '#/components/schemas/AnswerRequest' + type: + - array + - 'null' + guest: + oneOf: + - $ref: '#/components/schemas/CreateGuestRequest' + - type: 'null' + userId: + format: int64 + type: + - integer + - 'null' + type: object + CreateGameRequest: + description: A game the association has started playing + properties: + accent: + description: The colour that carries this game, or nothing for the island's own + maxLength: 32 + minLength: 0 + type: + - string + - 'null' + banner: + description: Where the game's banner is stored + maxLength: 255 + minLength: 0 + type: + - string + - 'null' + icon: + description: Where the game's icon is stored + maxLength: 255 + minLength: 0 + type: + - string + - 'null' + intro: + maxLength: 4000 + minLength: 0 + type: + - string + - 'null' + name: + maxLength: 64 + minLength: 1 + type: string + slug: + description: The address this game answers to + maxLength: 64 + minLength: 1 + type: string + sortIndex: + description: Where it sits among the others; left out, it goes at the end + format: int32 + type: + - integer + - 'null' + required: + - name + - slug + type: object + CreateGuestRequest: + properties: + discord: + minLength: 1 + type: string + email: + minLength: 1 + type: string + name: + minLength: 1 + type: string + phoneNumber: + type: + - string + - 'null' + version: + format: int64 + type: + - integer + - 'null' + required: + - discord + - email + - name + type: object + CreateMemberProfileRequest: + properties: + bhv: + type: boolean + dateOfBirth: + format: date + type: string + ehbo: + type: boolean + gender: + type: + - string + - 'null' + nameOnRosters: + description: Whether this member's real name may appear in a roster + type: boolean + nationality: + minLength: 1 + type: string + studentNumber: + type: + - string + - 'null' + userId: + format: int64 + type: integer + required: + - bhv + - dateOfBirth + - ehbo + - nameOnRosters + - nationality + - userId + type: object + CreateSponsorRequest: + properties: + description: + maxLength: 4095 + minLength: 0 + type: string + name: + maxLength: 255 + minLength: 0 + type: string + required: + - description + - name + type: object + CreateTargetRequest: + properties: + folderHint: + type: + - string + - 'null' + label: + minLength: 1 + type: string + system: + $ref: '#/components/schemas/TargetSystem' + required: + - label + - system + type: object + CreateTeamRequest: + description: Create a team. A team is the association's rather than a game's, so it names none + properties: + icon: + description: Where the team's icon is stored; nothing leaves the team without one + maxLength: 255 + minLength: 0 + type: + - string + - 'null' + name: + maxLength: 128 + minLength: 1 + type: string + required: + - name + type: object + CreateTelemetryRequest: + properties: + platform: + $ref: '#/components/schemas/PlatformType' + url: + minLength: 1 + type: string + required: + - platform + - url + type: object + CreateUserRequest: + properties: + consentPrivacy: + type: + - boolean + - 'null' + discord: + minLength: 1 + type: string + email: + minLength: 1 + type: string + firstName: + minLength: 1 + type: string + fullName: + type: + - string + - 'null' + initials: + minLength: 1 + type: string + lastName: + minLength: 1 + type: string + memberProfile: + oneOf: + - $ref: '#/components/schemas/UpsertMemberProfileRequest' + - type: 'null' + newsletter: + type: boolean + password: + type: + - string + - 'null' + phoneNumber: + minLength: 1 + type: string + photoConsent: + type: + - boolean + - 'null' + prefix: + type: + - string + - 'null' + username: + minLength: 1 + type: string + required: + - discord + - email + - firstName + - initials + - lastName + - newsletter + - phoneNumber + - username + type: object + CsrfToken: + properties: + headerName: + type: string + parameterName: + type: string + token: + type: string + type: object + Email: + properties: + attempts: + format: int32 + type: + - integer + - 'null' + createdAt: + format: date-time + type: + - string + - 'null' + deliveredAt: + format: date-time + type: + - string + - 'null' + deliveryStatus: + oneOf: + - $ref: '#/components/schemas/EmailDeliveryStatus' + - type: 'null' + emailType: + type: + - string + - 'null' + errorReason: + type: + - string + - 'null' + errorType: + type: + - string + - 'null' + id: + format: int64 + type: + - integer + - 'null' + jobExecutionId: + format: int64 + type: + - integer + - 'null' + messageId: + type: + - string + - 'null' + openedAt: + format: date-time + type: + - string + - 'null' + previewable: + description: Whether this email's body was stored, so it can be previewed + type: boolean + recipientEmail: + type: + - string + - 'null' + recipientName: + type: + - string + - 'null' + sentAt: + format: date-time + type: + - string + - 'null' + subject: + type: + - string + - 'null' + updatedAt: + format: date-time + type: + - string + - 'null' + required: + - previewable + type: object + EmailDeliveryStatus: + enum: + - PENDING + - SENT + - DELIVERED + - OPENED + - BOUNCED + - FAILED + type: string + EmailStats: + properties: + bouncedCount: + format: int64 + type: integer + deliveredCount: + format: int64 + type: integer + failedCount: + format: int64 + type: integer + openedCount: + format: int64 + type: integer + pendingCount: + format: int64 + type: integer + sentCount: + format: int64 + type: integer + totalCount: + format: int64 + type: integer + required: + - bouncedCount + - deliveredCount + - failedCount + - openedCount + - pendingCount + - sentCount + - totalCount + type: object + EnqueueJobRequest: + properties: + jobType: + minLength: 1 + type: string + payload: + additionalProperties: { + } + description: Job payload fields keyed by name; shape depends on the job type + type: + - object + - 'null' + required: + - jobType + type: object + EventBannerRequest: + properties: + fileId: + format: int64 + type: integer + version: + format: int64 + type: + - integer + - 'null' + required: + - fileId + type: object + EventBannerResponse: + properties: + createdAt: + format: date-time + type: string + eventId: + format: int64 + type: integer + fileId: + format: int64 + type: integer + updatedAt: + format: date-time + type: string + version: + format: int64 + type: integer + required: + - createdAt + - eventId + - fileId + - updatedAt + - version + type: object + EventResponse: + properties: + approved: + type: boolean + banner: + oneOf: + - $ref: '#/components/schemas/EventBannerResponse' + - type: 'null' + committeeId: + format: int64 + type: + - integer + - 'null' + createdAt: + format: date-time + type: string + description: + type: + - string + - 'null' + endTime: + format: date-time + type: string + id: + format: int64 + type: integer + location: + type: + - string + - 'null' + memberPrice: + format: double + type: + - number + - 'null' + membersOnly: + type: boolean + publicPrice: + format: double + type: + - number + - 'null' + signUp: + type: boolean + signUpCount: + format: int64 + type: integer + signUpDeadline: + format: date-time + type: + - string + - 'null' + signUpForm: + oneOf: + - $ref: '#/components/schemas/SurveyResponse' + - type: 'null' + signUpLimit: + format: int32 + type: + - integer + - 'null' + startTime: + format: date-time + type: string + title: + maxLength: 255 + minLength: 0 + type: string + updatedAt: + format: date-time + type: string + version: + format: int64 + type: integer + required: + - approved + - createdAt + - endTime + - id + - membersOnly + - signUp + - signUpCount + - startTime + - title + - updatedAt + - version + type: object + EventSignUpResponse: + properties: + answers: + items: + $ref: '#/components/schemas/AnswerResponse' + type: array + createdAt: + format: date-time + type: string + eventId: + format: int64 + type: integer + guest: + oneOf: + - $ref: '#/components/schemas/GuestResponse' + - type: 'null' + id: + format: int64 + type: integer + updatedAt: + format: date-time + type: string + user: + oneOf: + - $ref: '#/components/schemas/UserSummaryResponse' + - type: 'null' + version: + format: int64 + type: integer + required: + - answers + - createdAt + - eventId + - id + - updatedAt + - version + type: object + ExternalTarget: + properties: + externalId: + type: string + folderLabel: + type: + - string + - 'null' + kind: + $ref: '#/components/schemas/CohortKind' + label: + type: string + linkedCohortId: + format: int64 + type: + - integer + - 'null' + memberCount: + format: int64 + type: + - integer + - 'null' + path: + items: + type: string + type: array + system: + $ref: '#/components/schemas/TargetSystem' + required: + - externalId + - kind + - label + - path + - system + type: object + FailedTargetMove: + description: One target the external system would not move. + properties: + externalId: + type: string + label: + type: string + message: + description: What the system said, for an operator to act on rather than a stack trace. + type: string + required: + - externalId + - label + - message + type: object + FeeCycleEmailPreviewResponse: + properties: + feeType: + $ref: '#/components/schemas/BulkFeeType' + description: The fee type the email states, and the reason it gives. + group: + $ref: '#/components/schemas/FeeCycleGroup' + description: Which statement this member receives, decided by their direct-debit flag. + html: + type: string + recipientEmail: + type: string + recipientName: + type: string + subject: + type: string + required: + - feeType + - group + - html + - recipientEmail + - recipientName + - subject + type: object + FeeCycleGroup: + enum: + - DIRECT_DEBIT + - TRANSFER + type: string + FeeCyclePreviewResponse: + properties: + contributionPeriodId: + format: int64 + type: integer + rows: + items: + $ref: '#/components/schemas/FeeCycleRowResponse' + type: array + required: + - contributionPeriodId + - rows + type: object + FeeCycleResultResponse: + properties: + excluded: + description: Members in the cycle who were not written to. + format: int32 + type: integer + paymentRequestsQueued: + format: int32 + type: integer + preNotificationsQueued: + format: int32 + type: integer + required: + - excluded + - paymentRequestsQueued + - preNotificationsQueued + type: object + FeeCycleRowResponse: + properties: + amount: + description: Follows from the fee type and the period. Never typed. + format: double + type: + - number + - 'null' + disposition: + $ref: '#/components/schemas/BulkRowDisposition' + feeType: + description: Absent only for honorary members, who owe nothing. + oneOf: + - $ref: '#/components/schemas/BulkFeeType' + - type: 'null' + group: + $ref: '#/components/schemas/FeeCycleGroup' + description: Decided by the member's direct-debit flag, not by the operator. + lastAskedOn: + description: When this member was last asked for this period, on this side of the partition. + format: date + type: + - string + - 'null' + memberSince: + description: Start of the membership every decision on this row was judged against. + format: date + type: + - string + - 'null' + memberType: + $ref: '#/components/schemas/MemberType' + name: + type: string + reason: + description: Why this member is not written to. Absent on an included row. + oneOf: + - $ref: '#/components/schemas/BulkRowReason' + - type: 'null' + userId: + format: int64 + type: integer + required: + - disposition + - group + - memberType + - name + - userId + type: object + FieldTeamRequest: + description: Field a team in a game in a season, with or without the line-up it last had + properties: + banner: + description: Where the art for this fielding is stored; nothing leaves what it has + maxLength: 255 + minLength: 0 + type: + - string + - 'null' + carryFrom: + description: Which of this team's line-ups to copy across; wins over carryLineup + oneOf: + - $ref: '#/components/schemas/LineupSourceRequest' + - type: 'null' + carryLineup: + description: Copy the line-up this team last had in this game into this season + type: boolean + game: + description: The game it is being fielded in. A team may play more than one in a season + maxLength: 32 + minLength: 1 + type: string + required: + - carryLineup + - game + type: object + FieldValidationError: + description: Details about a single field/object validation error. + properties: + code: + description: Validation code / constraint key. + example: Email + type: string + field: + description: Field that failed validation (null for global errors). + example: email + type: string + message: + description: Human-readable validation message. + example: must be a well-formed email address + type: string + objectName: + description: Object (target) name that failed validation. + example: createUserRequest + type: string + refs: + description: Identifiers the error refers to when they are not numeric — an external system's own ids, for instance. The counterpart of `values`; an error carries one or the other, never both. + example: + - '7' + - '33' + items: + description: Identifiers the error refers to when they are not numeric — an external system's own ids, for instance. The counterpart of `values`; an error carries one or the other, never both. + example: '["7","33"]' + type: string + type: array + values: + description: Identifiers the error refers to, when the failing field carries a collection. Lets a client name the offending rows and reload them rather than restate the whole request. + example: + - 42 + - 57 + items: + description: Identifiers the error refers to, when the failing field carries a collection. Lets a client name the offending rows and reload them rather than restate the whole request. + format: int64 + type: integer + type: array + FieldedTeamResponse: + description: A team now fielded in a season, and whatever line-up came across with it + properties: + banner: + description: The art it is drawn with this season, carried across from the last one it played + oneOf: + - $ref: '#/components/schemas/Image' + - type: 'null' + carried: + description: The entries copied from the team's last season; empty when nothing was carried + items: + $ref: '#/components/schemas/RosterEntryResponse' + type: array + game: + description: The game it was fielded in + type: string + season: + $ref: '#/components/schemas/SeasonResponse' + team: + $ref: '#/components/schemas/TeamResponse' + required: + - carried + - game + - season + - team + type: object + FieldingResponse: + description: A team fielded in a game in a season, which is where a line-up hangs + properties: + game: + type: string + season: + $ref: '#/components/schemas/SeasonResponse' + required: + - game + - season + type: object + FileResponse: + properties: + createdAt: + format: date-time + type: string + id: + format: int64 + type: integer + mediaType: + type: string + name: + maxLength: 255 + minLength: 0 + type: string + path: + type: string + size: + format: int64 + type: + - integer + - 'null' + type: + $ref: '#/components/schemas/FileType' + updatedAt: + format: date-time + type: string + version: + format: int64 + type: integer + required: + - createdAt + - id + - mediaType + - name + - path + - type + - updatedAt + - version + type: object + FileType: + enum: + - DOCUMENT + - PROFILE_PICTURE + - EVENT_BANNER + - EVENT_PICTURE + - SPONSOR_PICTURE + - GAME_BANNER + - GAME_ICON + - TEAM_BANNER + - TEAM_ICON + - ROSTER_ICON + - BOARD_PHOTO + - BOARD_PORTRAIT + type: string + GameAccountRequest: + description: Set what a member is called in one game + properties: + handle: + maxLength: 128 + minLength: 1 + type: string + required: + - handle + type: object + GameAccountResponse: + description: What one member is called in one game + properties: + game: + type: string + handle: + type: string + id: + format: int64 + type: integer + userId: + format: int64 + type: integer + required: + - game + - handle + - id + - userId + type: object + GameContentsResponse: + description: What a game holds, for a removal to say before it happens + properties: + players: + description: Roster places those teams carry + format: int32 + type: integer + teams: + description: Teams recorded in it, across every season + format: int32 + type: integer + required: + - players + - teams + type: object + GameResponse: + description: 'A game: what it is called, the art it is drawn with, and how it is presented' + properties: + accent: + description: The colour that carries this game, where one has been chosen + type: + - string + - 'null' + banner: + description: The game's own image + oneOf: + - $ref: '#/components/schemas/Image' + - type: 'null' + code: + description: The identifier teams, rosters and game accounts reference. Never changes + type: string + current: + description: 'Whether the association currently plays it: a team played it this season or last' + type: boolean + icon: + description: The game's own icon + oneOf: + - $ref: '#/components/schemas/Image' + - type: 'null' + intro: + description: What is said about the game, where anything is said + type: + - string + - 'null' + name: + description: What this game is called + type: string + slug: + description: The address this game answers to + type: string + sortIndex: + description: Where the game sits among the others + format: int32 + type: integer + required: + - code + - current + - name + - slug + - sortIndex + type: object + GameRostersResponse: + description: A game's teams for one season, and the seasons that can be shown + properties: + game: + type: string + season: + description: The season being shown; absent when the game has no rosters yet + oneOf: + - $ref: '#/components/schemas/SeasonResponse' + - type: 'null' + seasons: + items: + $ref: '#/components/schemas/SeasonResponse' + type: array + teams: + items: + $ref: '#/components/schemas/TeamRosterResponse' + type: array + required: + - game + - seasons + - teams + type: object + GuestResponse: + properties: + createdAt: + format: date-time + type: string + discord: + type: string + email: + type: string + id: + format: int64 + type: integer + name: + type: string + phoneNumber: + type: + - string + - 'null' + updatedAt: + format: date-time + type: string + version: + format: int64 + type: integer + required: + - createdAt + - discord + - email + - id + - name + - updatedAt + - version + type: object + Image: + description: An image a public page draws, and the widths it is stored at + properties: + height: + description: How tall it is, absent where its size could not be read + format: int32 + type: + - integer + - 'null' + path: + description: Where it is stored, which is what a save points at to put it on a record + type: string + renditions: + description: The widths it is stored at, narrowest first + items: + $ref: '#/components/schemas/ImageRendition' + type: array + url: + description: Where the full-size image is served + type: string + width: + description: How wide it is, absent where its size could not be read + format: int32 + type: + - integer + - 'null' + required: + - path + - renditions + - url + type: object + ImageRendition: + description: One stored width of an image + properties: + url: + description: Where this width is served + type: string + width: + format: int32 + type: integer + required: + - url + - width + type: object + InboundReconcileApplyRequest: + properties: + previewToken: + type: string + selectedExternalUserIds: + items: + type: string + type: array + required: + - previewToken + - selectedExternalUserIds + type: object + InboundReconcileApplyResponse: + properties: + acceptedCount: + format: int32 + type: integer + jobId: + format: int64 + type: + - integer + - 'null' + skippedCount: + format: int32 + type: integer + required: + - acceptedCount + - skippedCount + type: object + InboundReconcilePreview: + properties: + cohortLabel: + type: string + definitionKey: + type: string + matched: + items: + $ref: '#/components/schemas/InboundReconcileRow' + type: array + previewToken: + type: string + remoteCount: + format: int32 + type: integer + skipped: + items: + $ref: '#/components/schemas/InboundReconcileRow' + type: array + writerSupported: + type: boolean + required: + - cohortLabel + - definitionKey + - matched + - previewToken + - remoteCount + - skipped + - writerSupported + type: object + InboundReconcileRow: + properties: + alreadyMember: + type: boolean + externalLabel: + type: + - string + - 'null' + externalUserId: + type: string + reason: + enum: + - DUPLICATE_REMOTE_ID + - MAPPING_CONFLICT + - DUPLICATE_USER_MATCH + - MAPPED_USER_INACTIVE + - UNMATCHED + type: + - string + - 'null' + userEmail: + type: + - string + - 'null' + userFullName: + type: + - string + - 'null' + userId: + format: int64 + type: + - integer + - 'null' + writable: + type: boolean + required: + - alreadyMember + - externalUserId + - writable + type: object + JobExecution: + properties: + actor: + oneOf: + - $ref: '#/components/schemas/Actor' + - type: 'null' + attempts: + format: int32 + type: + - integer + - 'null' + category: + oneOf: + - $ref: '#/components/schemas/JobExecutionCategory' + - type: 'null' + createdAt: + format: date-time + type: + - string + - 'null' + dedupKey: + type: + - string + - 'null' + errorMessage: + type: + - string + - 'null' + errorReason: + type: + - string + - 'null' + errorType: + type: + - string + - 'null' + finishedAt: + format: date-time + type: + - string + - 'null' + id: + format: int64 + type: + - integer + - 'null' + initiatedByDisplay: + type: + - string + - 'null' + initiatedByFullName: + type: + - string + - 'null' + initiatedByRole: + oneOf: + - $ref: '#/components/schemas/Role' + - type: 'null' + initiatedByType: + oneOf: + - $ref: '#/components/schemas/ActionActorType' + - type: 'null' + initiatedByUserId: + format: int64 + type: + - integer + - 'null' + initiatedByUsername: + type: + - string + - 'null' + jobType: + minLength: 1 + type: + - string + - 'null' + nextAttemptAt: + format: date-time + type: + - string + - 'null' + payload: + additionalProperties: { + } + type: + - object + - 'null' + queuedAt: + format: date-time + type: + - string + - 'null' + relatedEntities: + items: + $ref: '#/components/schemas/JobExecutionRelatedEntity' + type: array + stackTrace: + type: + - string + - 'null' + startedAt: + format: date-time + type: + - string + - 'null' + status: + oneOf: + - $ref: '#/components/schemas/JobExecutionStatus' + - type: 'null' + targetSystem: + oneOf: + - $ref: '#/components/schemas/ContactSystem' + - type: 'null' + updatedAt: + format: date-time + type: + - string + - 'null' + required: + - attempts + - jobType + - relatedEntities + - status + type: object + JobExecutionCategory: + enum: + - calendar + - contact + - cohort + - email + - other + type: string + JobExecutionRelatedEntity: + properties: + id: + format: int64 + type: + - integer + - 'null' + label: + type: string + type: + type: string + required: + - label + - type + type: object + JobExecutionStatus: + enum: + - QUEUED + - RUNNING + - SUCCESS + - FAILED + - DEAD + type: string + JobPayloadField: + properties: + enumValues: + items: + type: string + type: + - array + - 'null' + kind: + $ref: '#/components/schemas/JobPayloadFieldKind' + name: + type: string + required: + type: boolean + type: + type: string + required: + - kind + - name + - required + - type + type: object + JobPayloadFieldKind: + enum: + - PRIMITIVE + - ENUM + - OBJECT + type: string + JobStatsDTO: + properties: + avgSuccessDurationSeconds: + format: double + type: number + deadCount: + format: int64 + type: integer + deadSinceStartup: + format: double + type: number + failedCount: + format: int64 + type: integer + failedSinceStartup: + format: double + type: number + queuedCount: + format: int64 + type: integer + recoveriesSinceStartup: + format: double + type: number + runningCount: + format: int64 + type: integer + successCount: + format: int64 + type: integer + totalCount: + format: int64 + type: integer + required: + - avgSuccessDurationSeconds + - deadCount + - deadSinceStartup + - failedCount + - failedSinceStartup + - queuedCount + - recoveriesSinceStartup + - runningCount + - successCount + - totalCount + type: object + JobTypeDescriptor: + properties: + payloadFields: + items: + $ref: '#/components/schemas/JobPayloadField' + type: array + type: + type: string + required: + - payloadFields + - type + type: object + JwtRequest: + properties: + password: + minLength: 1 + type: string + username: + minLength: 1 + type: string + required: + - password + - username + type: object + LineupSourceRequest: + description: 'One line-up of a team''s: which game it was played in, and which season' + properties: + game: + maxLength: 32 + minLength: 1 + type: string + seasonId: + format: int64 + type: integer + required: + - game + - seasonId + type: object + LinkBoardMemberRequest: + properties: + userId: + description: The member to attach to the seat; absent detaches it + format: int64 + type: + - integer + - 'null' + type: object + LinkExistingTargetRequest: + properties: + externalId: + minLength: 1 + type: string + system: + $ref: '#/components/schemas/TargetSystem' + required: + - externalId + - system + type: object + LinkRosterEntryRequest: + description: Attach a roster entry to a member, or detach it with a null id + properties: + userId: + format: int64 + type: + - integer + - 'null' + type: object + LinkUserRequest: + properties: + externalUserId: + minLength: 1 + type: string + system: + $ref: '#/components/schemas/TargetSystem' + userId: + format: int64 + type: integer + required: + - externalUserId + - system + - userId + type: object + LinkedUser: + properties: + externalUserId: + type: string + system: + $ref: '#/components/schemas/TargetSystem' + userId: + format: int64 + type: integer + required: + - externalUserId + - system + - userId + type: object + LoginResponse: + properties: + addressId: + format: int64 + type: + - integer + - 'null' + expiration: + format: int64 + type: integer + roles: + items: + $ref: '#/components/schemas/Role' + minItems: 1 + type: array + token: + minLength: 1 + type: string + userId: + format: int64 + type: integer + username: + minLength: 1 + type: string + required: + - expiration + - roles + - token + - userId + - username + type: object + MemberActivationRequest: + properties: + password: + maxLength: 100 + minLength: 8 + pattern: ^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*?&])[A-Za-z\d@$!%*?&]+$ + type: string + token: + minLength: 1 + type: string + username: + minLength: 1 + type: string + required: + - password + - token + - username + type: object + MemberProfileResponse: + properties: + bhv: + type: boolean + conditionsAcceptedAt: + format: date-time + type: string + createdAt: + format: date-time + type: string + dateOfBirth: + format: date + type: string + ehbo: + type: boolean + gender: + type: string + id: + format: int64 + type: integer + nameOnRosters: + description: Whether this member's real name may appear in a roster + type: boolean + nationality: + type: string + studentNumber: + type: string + updatedAt: + format: date-time + type: string + userId: + format: int64 + type: integer + version: + format: int64 + type: integer + required: + - bhv + - createdAt + - ehbo + - id + - nameOnRosters + - updatedAt + - userId + - version + MemberType: + enum: + - ALUMNI + - HONORARY + - REGULAR + - NONE + type: string + MembershipApplicationRequest: + properties: + conditionsAccepted: + type: + - boolean + - 'null' + type: object + MembershipResponse: + properties: + createdAt: + format: date-time + type: string + endDate: + format: date + type: + - string + - 'null' + id: + format: int64 + type: integer + incasso: + type: boolean + memberType: + $ref: '#/components/schemas/MemberType' + startDate: + format: date + type: string + updatedAt: + format: date-time + type: string + userId: + format: int64 + type: integer + version: + format: int64 + type: integer + required: + - createdAt + - id + - incasso + - memberType + - startDate + - updatedAt + - userId + - version + type: object + MoveTargetRequest: + description: Where to file a target. + properties: + folder: + description: The folder to move the target into. Must already exist in the system. + example: Contribution periods + minLength: 1 + type: string + required: + - folder + type: object + PageMetadata: + properties: + number: + format: int64 + type: integer + size: + format: int64 + type: integer + totalElements: + format: int64 + type: integer + totalPages: + format: int64 + type: integer + type: object + PagedModelEmail: + properties: + content: + items: + $ref: '#/components/schemas/Email' + type: array + page: + $ref: '#/components/schemas/PageMetadata' + type: object + PagedModelEventResponse: + properties: + content: + items: + $ref: '#/components/schemas/EventResponse' + type: array + page: + $ref: '#/components/schemas/PageMetadata' + type: object + PagedModelJobExecution: + properties: + content: + items: + $ref: '#/components/schemas/JobExecution' + type: array + page: + $ref: '#/components/schemas/PageMetadata' + type: object + PagedModelUserDetailResponse: + properties: + content: + items: + $ref: '#/components/schemas/UserDetailResponse' + type: array + page: + $ref: '#/components/schemas/PageMetadata' + type: object + PasswordResetRequest: + properties: + password: + maxLength: 100 + minLength: 8 + pattern: ^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*?&])[A-Za-z\d@$!%*?&]+$ + type: string + token: + minLength: 1 + type: string + required: + - password + - token + type: object + PendingActivation: + description: The activation email an account that has not been activated takes. + properties: + purpose: + $ref: '#/components/schemas/TokenPurpose' + description: Which activation email applies to it. + userId: + description: The account. + example: 42 + format: int64 + type: integer + required: + - purpose + - userId + type: object + PendingActivationsResponse: + description: Which activation email applies to each account that has not been activated. Accounts that are already active do not appear. + properties: + activations: + items: + $ref: '#/components/schemas/PendingActivation' + type: array + required: + - activations + type: object + PlatformType: + enum: + - FACEBOOK + - LINKEDIN + - TWITTER + - INSTAGRAM + type: string + QuestionRequest: + properties: + choiceLabels: + items: + type: string + type: + - array + - 'null' + idx: + format: int64 + type: integer + label: + maxLength: 2055 + minLength: 0 + type: string + required: + type: + - boolean + - 'null' + type: + $ref: '#/components/schemas/QuestionType' + required: + - idx + - label + - type + type: object + QuestionResponse: + properties: + choiceLabels: + items: + type: string + type: + - array + - 'null' + createdAt: + format: date-time + type: string + id: + format: int64 + type: integer + idx: + format: int64 + type: integer + label: + maxLength: 2055 + minLength: 0 + type: string + required: + type: + - boolean + - 'null' + surveyId: + format: int64 + type: integer + type: + $ref: '#/components/schemas/QuestionType' + updatedAt: + format: date-time + type: string + version: + format: int64 + type: integer + required: + - createdAt + - id + - idx + - label + - surveyId + - type + - updatedAt + - version + type: object + QuestionType: + enum: + - OPEN + - RADIO + - CHECKBOX + - DESCRIPTION + type: string + RecoveryEmailPreviewResponse: + description: A recovery email rendered for inspection. No token was issued to produce it. + properties: + html: + description: The rendered email, as delivered but for the inert recovery link. + type: string + linkPlaceholder: + description: What the recovery link carries in place of a token, so the preview can say the link is inert. + example: PREVIEW-ONLY-NO-TOKEN-ISSUED + type: string + purpose: + $ref: '#/components/schemas/TokenPurpose' + description: Which recovery email this is. + recipientEmail: + description: Address the email would be sent to. + example: member@example.com + type: string + recipientName: + description: Name the email addresses the recipient by. + example: Alice Regular + type: string + subject: + description: Subject line the recipient would see. + example: Activate your Account + type: string + required: + - html + - linkPlaceholder + - purpose + - recipientEmail + - recipientName + - subject + type: object + RedirectResponse: + properties: + path: + type: string + required: + - path + type: object + Role: + enum: + - ANONYMOUS + - VEGAN + - GUEST + - COMPANY + - MEMBER + - COMMITTEE + - BOARD + - TREASURER + - ADMIN + - SYSTEM + type: string + RosterEntryResponse: + description: A roster entry as an admin edits it, real name included + properties: + description: + description: A short caption about them, in markdown + type: + - string + - 'null' + displayName: + description: The member's real name, shown to admins for identification + type: + - string + - 'null' + handle: + type: string + icon: + description: This entry's uploaded picture, where one was uploaded + oneOf: + - $ref: '#/components/schemas/Image' + - type: 'null' + id: + format: int64 + type: integer + role: + $ref: '#/components/schemas/TeamRole' + roleTitle: + description: What they did in the team's own words + type: + - string + - 'null' + seasonId: + format: int64 + type: integer + sortIndex: + format: int32 + type: integer + teamId: + format: int64 + type: integer + userId: + description: The member this entry belongs to, when anybody could be identified + format: int64 + type: + - integer + - 'null' + required: + - handle + - id + - role + - seasonId + - sortIndex + - teamId + type: object + RosterMemberResponse: + description: One person on a team's roster, as the public read has them + properties: + description: + description: A short caption about them, in markdown, where anything was written + type: + - string + - 'null' + handle: + description: What this member is called in the game + type: string + icon: + description: This entry's uploaded picture, where one was uploaded + oneOf: + - $ref: '#/components/schemas/Image' + - type: 'null' + name: + description: The member's real name, present only when they allow it to be shown + type: + - string + - 'null' + role: + $ref: '#/components/schemas/TeamRole' + roleTitle: + description: What they did in the team's own words, where anything was said + type: + - string + - 'null' + required: + - handle + - role + type: object + SeasonContentsResponse: + description: What a season holds, for a removal to say before it happens + properties: + players: + description: Roster places held in it, across those teams + format: int32 + type: integer + teams: + description: Teams fielded in it, across every game + format: int32 + type: integer + required: + - players + - teams + type: object + SeasonGameResponse: + description: A game that ran in a season, with what it fielded + properties: + game: + type: string + public: + description: 'Whether a visitor sees it: a game is public in a season once a team plays it' + type: boolean + teams: + items: + $ref: '#/components/schemas/TeamRosterResponse' + type: array + required: + - game + - public + - teams + type: object + SeasonRequest: + description: Create or rename a season + properties: + endDate: + format: date + type: string + name: + maxLength: 64 + minLength: 1 + type: string + startDate: + format: date + type: string + required: + - endDate + - name + - startDate + type: object + SeasonResponse: + description: A stretch of play that rosters belong to + properties: + endDate: + format: date + type: string + id: + format: int64 + type: integer + name: + type: string + played: + description: Whether anything was fielded in it, which is which seasons a visitor is offered + type: boolean + startDate: + format: date + type: string + required: + - endDate + - id + - name + - played + - startDate + type: object + SendFeeCycleRequest: + properties: + contributionPeriodId: + format: int64 + minimum: 0 + type: + - integer + - 'null' + debitDate: + description: The date the direct-debit group is told the money will be taken. + format: date + type: + - string + - 'null' + feeTypeOverrides: + additionalProperties: + $ref: '#/components/schemas/BulkFeeType' + description: Fee type per member, where the treasurer changed it from the one that applies. + type: object + paymentDueDate: + description: The date the transfer group is asked to have paid by. + format: date + type: + - string + - 'null' + required: + - contributionPeriodId + - debitDate + - feeTypeOverrides + - paymentDueDate + type: object + SentEmailPreview: + properties: + html: + description: The email's html with every url stripped out + type: string + linksRedacted: + description: 'Always true: the preview''s links were removed before it left the api' + type: boolean + recipientEmail: + type: string + recipientName: + type: string + subject: + type: string + required: + - html + - linksRedacted + - recipientEmail + - recipientName + - subject + type: object + ServiceEntry: + properties: + description: + type: string + iconUrl: + type: string + id: + type: string + name: + type: string + url: + type: string + required: + - description + - iconUrl + - id + - name + - url + type: object + SignupAddressRequest: + properties: + city: + minLength: 1 + type: string + country: + minLength: 1 + type: string + houseNumber: + minLength: 1 + type: string + street: + minLength: 1 + type: string + zipCode: + minLength: 1 + type: string + required: + - city + - country + - houseNumber + - street + - zipCode + type: object + SignupApplicationRequest: + properties: + conditionsAccepted: + type: + - boolean + - 'null' + type: object + SignupDetailsRequest: + properties: + discord: + minLength: 1 + type: string + firstName: + minLength: 1 + type: string + initials: + minLength: 1 + type: string + lastName: + minLength: 1 + type: string + memberProfile: + oneOf: + - $ref: '#/components/schemas/UpsertMemberProfileRequest' + - type: 'null' + newsletter: + type: boolean + phoneNumber: + minLength: 1 + type: string + photoConsent: + type: + - boolean + - 'null' + prefix: + type: + - string + - 'null' + username: + minLength: 1 + type: string + required: + - discord + - firstName + - initials + - lastName + - newsletter + - phoneNumber + - username + type: object + SignupEmailRequest: + properties: + email: + format: email + minLength: 1 + type: string + required: + - email + type: object + SignupOutcomeResponse: + properties: + emailConfirmed: + type: boolean + membershipStarted: + type: boolean + required: + - emailConfirmed + - membershipStarted + type: object + SignupSessionResponse: + properties: + email: + type: string + expiresAt: + format: date-time + type: string + signupToken: + type: string + userId: + format: int64 + type: integer + required: + - email + - expiresAt + - signupToken + - userId + type: object + SponsorResponse: + properties: + createdAt: + format: date-time + type: string + description: + type: string + id: + format: int64 + type: integer + name: + type: string + updatedAt: + format: date-time + type: string + version: + format: int64 + type: integer + required: + - createdAt + - description + - id + - name + - updatedAt + - version + type: object + SurveyRequest: + properties: + questions: + items: + $ref: '#/components/schemas/QuestionRequest' + minItems: 1 + type: array + required: + - questions + type: object + SurveyResponse: + properties: + createdAt: + format: date-time + type: string + id: + format: int64 + type: integer + questions: + items: + $ref: '#/components/schemas/QuestionResponse' + minItems: 1 + type: array + responseCount: + format: int64 + type: integer + updatedAt: + format: date-time + type: string + version: + format: int64 + type: integer + required: + - createdAt + - id + - questions + - responseCount + - updatedAt + - version + type: object + SwitchTargetRequest: + properties: + deletePrevious: + type: boolean + externalId: + minLength: 1 + type: string + reconcileNow: + type: boolean + required: + - deletePrevious + - externalId + - reconcileNow + type: object + TargetDescriptor: + properties: + capabilities: + items: + enum: + - CATALOG + - CREATE + - READ_MEMBERS + - WRITE_MEMBERS + - DELETE + - MOVE + type: string + type: array + uniqueItems: true + folderLabel: + type: + - string + - 'null' + idLabel: + type: string + kind: + $ref: '#/components/schemas/CohortKind' + system: + $ref: '#/components/schemas/TargetSystem' + systemLabel: + type: string + targetLabel: + type: string + required: + - capabilities + - idLabel + - kind + - system + - systemLabel + - targetLabel + type: object + TargetSystem: + enum: + - BREVO + - GOOGLE_CALENDAR + type: string + TeamResponse: + description: A team the association fields in one game + properties: + icon: + description: The team's own icon, drawn beside the name. The banner it is drawn on belongs to the fielding, not to the team + oneOf: + - $ref: '#/components/schemas/Image' + - type: 'null' + id: + format: int64 + type: integer + name: + type: string + required: + - id + - name + type: object + TeamRole: + enum: + - PLAYER + - SUBSTITUTE + - COACH + type: string + TeamRosterResponse: + description: A team with the roster it fielded in one season + properties: + banner: + description: The team's own banner + oneOf: + - $ref: '#/components/schemas/Image' + - type: 'null' + icon: + description: The team's own icon, shown beside the name + oneOf: + - $ref: '#/components/schemas/Image' + - type: 'null' + id: + format: int64 + type: integer + members: + items: + $ref: '#/components/schemas/RosterMemberResponse' + type: array + name: + type: string + required: + - id + - members + - name + type: object + TelemetryResponse: + properties: + createdAt: + format: date-time + type: string + id: + format: int64 + type: integer + platform: + $ref: '#/components/schemas/PlatformType' + updatedAt: + format: date-time + type: string + url: + type: string + version: + format: int64 + type: integer + required: + - createdAt + - id + - platform + - updatedAt + - url + - version + type: object + TokenPurpose: + enum: + - USER_ACTIVATION + - MEMBER_ACTIVATION + - PASSWORD_RESET + - SIGNUP_CONTINUATION + type: string + UpdateAddressRequest: + properties: + city: + minLength: 1 + type: string + country: + minLength: 1 + type: string + houseNumber: + minLength: 1 + type: string + street: + minLength: 1 + type: string + version: + format: int64 + type: integer + zipCode: + minLength: 1 + type: string + required: + - city + - country + - houseNumber + - street + - version + - zipCode + type: object + UpdateBlogRequest: + properties: + html: + minLength: 1 + type: string + publishedAt: + format: date-time + type: string + title: + maxLength: 200 + minLength: 1 + type: string + version: + format: int64 + type: integer + required: + - html + - publishedAt + - title + - version + type: object + UpdateBoardMemberRequest: + properties: + description: + type: + - string + - 'null' + displayName: + maxLength: 128 + minLength: 0 + type: + - string + - 'null' + endDate: + format: date + type: + - string + - 'null' + image: + maxLength: 255 + minLength: 0 + type: + - string + - 'null' + nickname: + description: The name the seat was known by, without the quotes around it + maxLength: 128 + minLength: 0 + type: + - string + - 'null' + portrait: + description: Where the seat's portrait is stored; blank leaves the seat without one + maxLength: 255 + minLength: 0 + type: + - string + - 'null' + role: + minLength: 1 + type: string + startDate: + format: date + type: string + required: + - role + - startDate + type: object + UpdateBoardRequest: + properties: + accent: + description: The board's own colour; blank means the association's blue + maxLength: 32 + minLength: 0 + type: + - string + - 'null' + candidate: + description: Kept for the column behind it; the board's own name is used when blank + type: + - string + - 'null' + cheer: + description: The board's shouted line + maxLength: 255 + minLength: 0 + type: + - string + - 'null' + description: + description: What the year was about, in the board's own words + type: + - string + - 'null' + endDate: + format: date + type: + - string + - 'null' + image: + description: Asset file name of the board's photograph + maxLength: 255 + minLength: 0 + type: + - string + - 'null' + name: + description: The name the board chose for itself; blank for a board with none + maxLength: 100 + minLength: 0 + type: + - string + - 'null' + number: + description: The board's place in the line; the ninth board is 9 + format: int32 + minimum: 1 + type: integer + photo: + description: Where the board's group photograph is stored; blank leaves it without one + maxLength: 255 + minLength: 0 + type: + - string + - 'null' + startDate: + format: date + type: string + version: + format: int64 + type: integer + required: + - number + - startDate + - version + type: object + UpdateCommitteeRequest: + properties: + description: + maxLength: 1000 + minLength: 1 + type: string + members: + items: + $ref: '#/components/schemas/CommitteeMemberRequest' + minItems: 1 + type: array + name: + maxLength: 100 + minLength: 1 + type: string + version: + format: int64 + type: integer + required: + - description + - members + - name + - version + type: object + UpdateContributionPeriodRequest: + properties: + alumniFee: + format: double + minimum: 0 + type: number + contactListId: + format: int64 + type: + - integer + - 'null' + endDate: + format: date + type: string + fullYearFee: + format: double + minimum: 0 + type: number + halfYearCutoffDate: + description: A regular membership starting after this date pays the half-year fee. + format: date + type: string + halfYearFee: + format: double + minimum: 0 + type: number + startDate: + format: date + type: string + version: + format: int64 + type: integer + required: + - alumniFee + - endDate + - fullYearFee + - halfYearCutoffDate + - halfYearFee + - startDate + - version + type: object + UpdateEventRequest: + properties: + approved: + type: boolean + banner: + oneOf: + - $ref: '#/components/schemas/EventBannerRequest' + - type: 'null' + committeeId: + format: int64 + type: integer + description: + maxLength: 4095 + minLength: 1 + type: string + endTime: + format: date-time + type: string + location: + type: + - string + - 'null' + memberPrice: + format: double + type: + - number + - 'null' + membersOnly: + type: boolean + publicPrice: + format: double + type: + - number + - 'null' + removeExistingSignUps: + type: + - boolean + - 'null' + signUp: + type: boolean + signUpDeadline: + format: date-time + type: + - string + - 'null' + signUpForm: + oneOf: + - $ref: '#/components/schemas/SurveyRequest' + - type: 'null' + signUpLimit: + format: int32 + minimum: 1 + type: + - integer + - 'null' + startTime: + format: date-time + type: string + title: + maxLength: 200 + minLength: 1 + type: string + version: + format: int64 + type: integer + required: + - approved + - committeeId + - description + - endTime + - membersOnly + - signUp + - startTime + - title + - version + type: object + UpdateEventSignUpRequest: + properties: + answers: + items: + $ref: '#/components/schemas/AnswerRequest' + type: + - array + - 'null' + guest: + oneOf: + - $ref: '#/components/schemas/CreateGuestRequest' + - type: 'null' + userId: + format: int64 + type: + - integer + - 'null' + version: + format: int64 + type: + - integer + - 'null' + type: object + UpdateGameRequest: + description: How a game presents itself + properties: + accent: + description: The colour that carries this game, or nothing for the island's own + maxLength: 32 + minLength: 0 + type: + - string + - 'null' + banner: + description: Where the game's banner is stored; nothing takes the banner away + maxLength: 255 + minLength: 0 + type: + - string + - 'null' + icon: + description: Where the game's icon is stored; nothing takes the icon away + maxLength: 255 + minLength: 0 + type: + - string + - 'null' + intro: + maxLength: 4000 + minLength: 0 + type: + - string + - 'null' + name: + description: What this game is called. Its code is not editable + maxLength: 64 + minLength: 1 + type: string + slug: + description: The address this game answers to + maxLength: 64 + minLength: 0 + type: string + sortIndex: + format: int32 + type: integer + required: + - name + - slug + - sortIndex + type: object + UpdateMemberProfileRequest: + properties: + bhv: + type: boolean + dateOfBirth: + format: date + type: string + ehbo: + type: boolean + gender: + type: + - string + - 'null' + nameOnRosters: + description: Whether this member's real name may appear in a roster + type: boolean + nationality: + minLength: 1 + type: string + studentNumber: + type: + - string + - 'null' + version: + format: int64 + type: integer + required: + - bhv + - dateOfBirth + - ehbo + - nameOnRosters + - nationality + - version + type: object + UpdateMembershipRequest: + properties: + endDate: + format: date + type: + - string + - 'null' + incasso: + type: + - boolean + - 'null' + memberType: + oneOf: + - $ref: '#/components/schemas/MemberType' + - type: 'null' + startDate: + format: date + type: + - string + - 'null' + userId: + format: int64 + type: integer + version: + format: int64 + type: integer + required: + - startDate + - userId + - version + type: object + UpdateRosterEntryRequest: + description: Edit a roster entry + properties: + description: + description: A short caption about them, in markdown + maxLength: 280 + minLength: 0 + type: + - string + - 'null' + displayName: + maxLength: 128 + minLength: 0 + type: + - string + - 'null' + handle: + maxLength: 128 + minLength: 1 + type: string + icon: + description: Where this entry's picture is stored; nothing takes the picture away + maxLength: 255 + minLength: 0 + type: + - string + - 'null' + role: + $ref: '#/components/schemas/TeamRole' + roleTitle: + description: What they did in the team's own words, beside the fixed part + maxLength: 64 + minLength: 0 + type: + - string + - 'null' + sortIndex: + format: int32 + type: integer + required: + - handle + - role + - sortIndex + type: object + UpdateSponsorRequest: + properties: + description: + maxLength: 4095 + minLength: 0 + type: string + name: + maxLength: 255 + minLength: 0 + type: string + version: + format: int64 + type: integer + required: + - description + - name + - version + type: object + UpdateTeamRequest: + description: Rename a team or change its icon. Its banner belongs to the fielding + properties: + icon: + description: Where the team's icon is stored; nothing takes the icon away + maxLength: 255 + minLength: 0 + type: + - string + - 'null' + name: + maxLength: 128 + minLength: 1 + type: string + required: + - name + type: object + UpdateUserRequest: + properties: + discord: + minLength: 1 + type: string + memberProfile: + oneOf: + - $ref: '#/components/schemas/UpsertMemberProfileRequest' + - type: 'null' + newsletter: + type: boolean + phoneNumber: + minLength: 1 + type: string + photoConsent: + type: + - boolean + - 'null' + version: + format: int64 + type: integer + required: + - discord + - newsletter + - phoneNumber + - version + type: object + UpsertMemberProfileRequest: + properties: + bhv: + type: boolean + dateOfBirth: + format: date + type: string + ehbo: + type: boolean + gender: + type: + - string + - 'null' + nameOnRosters: + description: Whether this member's real name may appear in a roster + type: boolean + nationality: + minLength: 1 + type: string + studentNumber: + type: + - string + - 'null' + version: + format: int64 + type: + - integer + - 'null' + required: + - bhv + - dateOfBirth + - ehbo + - nameOnRosters + - nationality + type: object + UserActivationRequest: + properties: + token: + minLength: 1 + type: string + required: + - token + type: object + UserDetailResponse: + properties: + addressId: + format: int64 + type: + - integer + - 'null' + createdAt: + format: date-time + type: string + discord: + type: + - string + - 'null' + email: + type: string + enabled: + type: boolean + firstName: + type: string + fullName: + type: string + id: + format: int64 + type: integer + initials: + type: string + lastName: + type: string + newsletter: + type: boolean + phoneNumber: + type: + - string + - 'null' + photoConsent: + type: boolean + prefix: + type: + - string + - 'null' + restoreUntilAt: + format: date-time + type: + - string + - 'null' + roles: + items: + $ref: '#/components/schemas/Role' + type: array + updatedAt: + format: date-time + type: string + username: + type: string + version: + format: int64 + type: integer + required: + - createdAt + - email + - enabled + - firstName + - fullName + - id + - initials + - lastName + - newsletter + - photoConsent + - roles + - updatedAt + - username + - version + type: object + UserSummaryResponse: + properties: + createdAt: + format: date-time + type: string + discord: + type: + - string + - 'null' + email: + type: string + fullName: + type: string + id: + format: int64 + type: integer + phoneNumber: + type: + - string + - 'null' + updatedAt: + format: date-time + type: string + version: + format: int64 + type: integer + required: + - createdAt + - email + - fullName + - id + - updatedAt + - version + type: object +info: + title: OpenAPI definition + version: v0 +openapi: 3.1.0 +paths: + /addresses: + get: + operationId: findAllAddresses + responses: + '200': + content: + application/json: + schema: + items: + $ref: '#/components/schemas/AddressResponse' + type: array + description: OK + '400': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Bad Request", + "status": 400, + "detail": "Validation failed for request.", + "instance": "/api/users", + "errors": [ + { + "objectName": "createUserRequest", + "field": "email", + "message": "must be a well-formed email address", + "code": "Email" + }, + { + "objectName": "createUserRequest", + "field": "age", + "message": "must be greater than or equal to 0", + "code": "Min" + } + ], + "traceId": "a8c0c4e5f1c24a7e" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Validation error + '401': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Unauthorized", + "status": 401, + "detail": "Full authentication is required to access this resource", + "instance": "/api/users", + "traceId": "401401401401" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Unauthorized + '403': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Forbidden", + "status": 403, + "detail": "Access is denied", + "instance": "/api/users", + "traceId": "403403403403" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Forbidden (access denied) + '404': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Not Found", + "status": 404, + "detail": "User not found with id: 42", + "instance": "/api/users/42", + "traceId": "cdef1234abcd5678" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Not Found + '500': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Internal Server Error", + "status": 500, + "detail": "An unexpected error occurred.", + "instance": "/api/users", + "traceId": "ab12cd34ef56" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Server error + tags: + - Addresses + post: + operationId: createAddress + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/CreateAddressRequest' + required: true + responses: + '201': + content: + application/json: + schema: + $ref: '#/components/schemas/AddressResponse' + description: Created + '400': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Bad Request", + "status": 400, + "detail": "Validation failed for request.", + "instance": "/api/users", + "errors": [ + { + "objectName": "createUserRequest", + "field": "email", + "message": "must be a well-formed email address", + "code": "Email" + }, + { + "objectName": "createUserRequest", + "field": "age", + "message": "must be greater than or equal to 0", + "code": "Min" + } + ], + "traceId": "a8c0c4e5f1c24a7e" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Validation error + '401': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Unauthorized", + "status": 401, + "detail": "Full authentication is required to access this resource", + "instance": "/api/users", + "traceId": "401401401401" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Unauthorized + '403': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Forbidden", + "status": 403, + "detail": "Access is denied", + "instance": "/api/users", + "traceId": "403403403403" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Forbidden (access denied) + '404': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Not Found", + "status": 404, + "detail": "User not found with id: 42", + "instance": "/api/users/42", + "traceId": "cdef1234abcd5678" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Not Found + '500': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Internal Server Error", + "status": 500, + "detail": "An unexpected error occurred.", + "instance": "/api/users", + "traceId": "ab12cd34ef56" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Server error + tags: + - Addresses + /addresses/{id}: + delete: + operationId: deleteAddressById + parameters: + - in: path + name: id + required: true + schema: + format: int64 + type: integer + responses: + '204': + description: No Content + '400': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Bad Request", + "status": 400, + "detail": "Validation failed for request.", + "instance": "/api/users", + "errors": [ + { + "objectName": "createUserRequest", + "field": "email", + "message": "must be a well-formed email address", + "code": "Email" + }, + { + "objectName": "createUserRequest", + "field": "age", + "message": "must be greater than or equal to 0", + "code": "Min" + } + ], + "traceId": "a8c0c4e5f1c24a7e" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Validation error + '401': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Unauthorized", + "status": 401, + "detail": "Full authentication is required to access this resource", + "instance": "/api/users", + "traceId": "401401401401" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Unauthorized + '403': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Forbidden", + "status": 403, + "detail": "Access is denied", + "instance": "/api/users", + "traceId": "403403403403" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Forbidden (access denied) + '404': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Not Found", + "status": 404, + "detail": "User not found with id: 42", + "instance": "/api/users/42", + "traceId": "cdef1234abcd5678" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Not Found + '500': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Internal Server Error", + "status": 500, + "detail": "An unexpected error occurred.", + "instance": "/api/users", + "traceId": "ab12cd34ef56" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Server error + tags: + - Addresses + get: + operationId: findAddressById + parameters: + - in: path + name: id + required: true + schema: + format: int64 + type: integer + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/AddressResponse' + description: OK + '400': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Bad Request", + "status": 400, + "detail": "Validation failed for request.", + "instance": "/api/users", + "errors": [ + { + "objectName": "createUserRequest", + "field": "email", + "message": "must be a well-formed email address", + "code": "Email" + }, + { + "objectName": "createUserRequest", + "field": "age", + "message": "must be greater than or equal to 0", + "code": "Min" + } + ], + "traceId": "a8c0c4e5f1c24a7e" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Validation error + '401': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Unauthorized", + "status": 401, + "detail": "Full authentication is required to access this resource", + "instance": "/api/users", + "traceId": "401401401401" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Unauthorized + '403': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Forbidden", + "status": 403, + "detail": "Access is denied", + "instance": "/api/users", + "traceId": "403403403403" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Forbidden (access denied) + '404': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Not Found", + "status": 404, + "detail": "User not found with id: 42", + "instance": "/api/users/42", + "traceId": "cdef1234abcd5678" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Not Found + '500': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Internal Server Error", + "status": 500, + "detail": "An unexpected error occurred.", + "instance": "/api/users", + "traceId": "ab12cd34ef56" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Server error + tags: + - Addresses + put: + operationId: updateAddress + parameters: + - in: path + name: id + required: true + schema: + format: int64 + type: integer + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/UpdateAddressRequest' + required: true + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/AddressResponse' + description: OK + '400': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Bad Request", + "status": 400, + "detail": "Validation failed for request.", + "instance": "/api/users", + "errors": [ + { + "objectName": "createUserRequest", + "field": "email", + "message": "must be a well-formed email address", + "code": "Email" + }, + { + "objectName": "createUserRequest", + "field": "age", + "message": "must be greater than or equal to 0", + "code": "Min" + } + ], + "traceId": "a8c0c4e5f1c24a7e" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Validation error + '401': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Unauthorized", + "status": 401, + "detail": "Full authentication is required to access this resource", + "instance": "/api/users", + "traceId": "401401401401" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Unauthorized + '403': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Forbidden", + "status": 403, + "detail": "Access is denied", + "instance": "/api/users", + "traceId": "403403403403" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Forbidden (access denied) + '404': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Not Found", + "status": 404, + "detail": "User not found with id: 42", + "instance": "/api/users/42", + "traceId": "cdef1234abcd5678" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Not Found + '500': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Internal Server Error", + "status": 500, + "detail": "An unexpected error occurred.", + "instance": "/api/users", + "traceId": "ab12cd34ef56" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Server error + tags: + - Addresses + /auth: + post: + operationId: authenticate + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/JwtRequest' + required: true + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/LoginResponse' + description: OK + '400': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Bad Request", + "status": 400, + "detail": "Validation failed for request.", + "instance": "/api/users", + "errors": [ + { + "objectName": "createUserRequest", + "field": "email", + "message": "must be a well-formed email address", + "code": "Email" + }, + { + "objectName": "createUserRequest", + "field": "age", + "message": "must be greater than or equal to 0", + "code": "Min" + } + ], + "traceId": "a8c0c4e5f1c24a7e" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Validation error + '401': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Unauthorized", + "status": 401, + "detail": "Full authentication is required to access this resource", + "instance": "/api/users", + "traceId": "401401401401" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Unauthorized + '403': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Forbidden", + "status": 403, + "detail": "Access is denied", + "instance": "/api/users", + "traceId": "403403403403" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Forbidden (access denied) + '404': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Not Found", + "status": 404, + "detail": "User not found with id: 42", + "instance": "/api/users/42", + "traceId": "cdef1234abcd5678" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Not Found + '500': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Internal Server Error", + "status": 500, + "detail": "An unexpected error occurred.", + "instance": "/api/users", + "traceId": "ab12cd34ef56" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Server error + tags: + - Authentication + /auth/logout: + post: + operationId: logout + responses: + '204': + description: No Content + '400': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Bad Request", + "status": 400, + "detail": "Validation failed for request.", + "instance": "/api/users", + "errors": [ + { + "objectName": "createUserRequest", + "field": "email", + "message": "must be a well-formed email address", + "code": "Email" + }, + { + "objectName": "createUserRequest", + "field": "age", + "message": "must be greater than or equal to 0", + "code": "Min" + } + ], + "traceId": "a8c0c4e5f1c24a7e" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Validation error + '401': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Unauthorized", + "status": 401, + "detail": "Full authentication is required to access this resource", + "instance": "/api/users", + "traceId": "401401401401" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Unauthorized + '403': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Forbidden", + "status": 403, + "detail": "Access is denied", + "instance": "/api/users", + "traceId": "403403403403" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Forbidden (access denied) + '404': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Not Found", + "status": 404, + "detail": "User not found with id: 42", + "instance": "/api/users/42", + "traceId": "cdef1234abcd5678" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Not Found + '500': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Internal Server Error", + "status": 500, + "detail": "An unexpected error occurred.", + "instance": "/api/users", + "traceId": "ab12cd34ef56" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Server error + tags: + - Authentication + /blogs: + get: + operationId: findBlogs + responses: + '200': + content: + application/json: + schema: + items: + $ref: '#/components/schemas/BlogResponse' + type: array + description: OK + '400': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Bad Request", + "status": 400, + "detail": "Validation failed for request.", + "instance": "/api/users", + "errors": [ + { + "objectName": "createUserRequest", + "field": "email", + "message": "must be a well-formed email address", + "code": "Email" + }, + { + "objectName": "createUserRequest", + "field": "age", + "message": "must be greater than or equal to 0", + "code": "Min" + } + ], + "traceId": "a8c0c4e5f1c24a7e" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Validation error + '401': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Unauthorized", + "status": 401, + "detail": "Full authentication is required to access this resource", + "instance": "/api/users", + "traceId": "401401401401" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Unauthorized + '403': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Forbidden", + "status": 403, + "detail": "Access is denied", + "instance": "/api/users", + "traceId": "403403403403" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Forbidden (access denied) + '404': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Not Found", + "status": 404, + "detail": "User not found with id: 42", + "instance": "/api/users/42", + "traceId": "cdef1234abcd5678" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Not Found + '500': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Internal Server Error", + "status": 500, + "detail": "An unexpected error occurred.", + "instance": "/api/users", + "traceId": "ab12cd34ef56" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Server error + tags: + - Blogs + post: + operationId: createBlog + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/CreateBlogRequest' + required: true + responses: + '201': + content: + application/json: + schema: + $ref: '#/components/schemas/BlogResponse' + description: Created + '400': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Bad Request", + "status": 400, + "detail": "Validation failed for request.", + "instance": "/api/users", + "errors": [ + { + "objectName": "createUserRequest", + "field": "email", + "message": "must be a well-formed email address", + "code": "Email" + }, + { + "objectName": "createUserRequest", + "field": "age", + "message": "must be greater than or equal to 0", + "code": "Min" + } + ], + "traceId": "a8c0c4e5f1c24a7e" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Validation error + '401': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Unauthorized", + "status": 401, + "detail": "Full authentication is required to access this resource", + "instance": "/api/users", + "traceId": "401401401401" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Unauthorized + '403': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Forbidden", + "status": 403, + "detail": "Access is denied", + "instance": "/api/users", + "traceId": "403403403403" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Forbidden (access denied) + '404': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Not Found", + "status": 404, + "detail": "User not found with id: 42", + "instance": "/api/users/42", + "traceId": "cdef1234abcd5678" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Not Found + '500': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Internal Server Error", + "status": 500, + "detail": "An unexpected error occurred.", + "instance": "/api/users", + "traceId": "ab12cd34ef56" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Server error + tags: + - Blogs + /blogs/{id}: + delete: + operationId: deleteById + parameters: + - in: path + name: id + required: true + schema: + format: int64 + type: integer + responses: + '204': + description: No Content + '400': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Bad Request", + "status": 400, + "detail": "Validation failed for request.", + "instance": "/api/users", + "errors": [ + { + "objectName": "createUserRequest", + "field": "email", + "message": "must be a well-formed email address", + "code": "Email" + }, + { + "objectName": "createUserRequest", + "field": "age", + "message": "must be greater than or equal to 0", + "code": "Min" + } + ], + "traceId": "a8c0c4e5f1c24a7e" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Validation error + '401': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Unauthorized", + "status": 401, + "detail": "Full authentication is required to access this resource", + "instance": "/api/users", + "traceId": "401401401401" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Unauthorized + '403': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Forbidden", + "status": 403, + "detail": "Access is denied", + "instance": "/api/users", + "traceId": "403403403403" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Forbidden (access denied) + '404': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Not Found", + "status": 404, + "detail": "User not found with id: 42", + "instance": "/api/users/42", + "traceId": "cdef1234abcd5678" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Not Found + '500': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Internal Server Error", + "status": 500, + "detail": "An unexpected error occurred.", + "instance": "/api/users", + "traceId": "ab12cd34ef56" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Server error + tags: + - Blogs + get: + operationId: findBlogById + parameters: + - in: path + name: id + required: true + schema: + format: int64 + type: integer + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/BlogResponse' + description: OK + '400': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Bad Request", + "status": 400, + "detail": "Validation failed for request.", + "instance": "/api/users", + "errors": [ + { + "objectName": "createUserRequest", + "field": "email", + "message": "must be a well-formed email address", + "code": "Email" + }, + { + "objectName": "createUserRequest", + "field": "age", + "message": "must be greater than or equal to 0", + "code": "Min" + } + ], + "traceId": "a8c0c4e5f1c24a7e" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Validation error + '401': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Unauthorized", + "status": 401, + "detail": "Full authentication is required to access this resource", + "instance": "/api/users", + "traceId": "401401401401" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Unauthorized + '403': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Forbidden", + "status": 403, + "detail": "Access is denied", + "instance": "/api/users", + "traceId": "403403403403" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Forbidden (access denied) + '404': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Not Found", + "status": 404, + "detail": "User not found with id: 42", + "instance": "/api/users/42", + "traceId": "cdef1234abcd5678" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Not Found + '500': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Internal Server Error", + "status": 500, + "detail": "An unexpected error occurred.", + "instance": "/api/users", + "traceId": "ab12cd34ef56" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Server error + tags: + - Blogs + post: + operationId: updateBlog + parameters: + - in: path + name: id + required: true + schema: + format: int64 + type: integer + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/UpdateBlogRequest' + required: true + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/BlogResponse' + description: OK + '400': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Bad Request", + "status": 400, + "detail": "Validation failed for request.", + "instance": "/api/users", + "errors": [ + { + "objectName": "createUserRequest", + "field": "email", + "message": "must be a well-formed email address", + "code": "Email" + }, + { + "objectName": "createUserRequest", + "field": "age", + "message": "must be greater than or equal to 0", + "code": "Min" + } + ], + "traceId": "a8c0c4e5f1c24a7e" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Validation error + '401': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Unauthorized", + "status": 401, + "detail": "Full authentication is required to access this resource", + "instance": "/api/users", + "traceId": "401401401401" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Unauthorized + '403': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Forbidden", + "status": 403, + "detail": "Access is denied", + "instance": "/api/users", + "traceId": "403403403403" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Forbidden (access denied) + '404': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Not Found", + "status": 404, + "detail": "User not found with id: 42", + "instance": "/api/users/42", + "traceId": "cdef1234abcd5678" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Not Found + '500': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Internal Server Error", + "status": 500, + "detail": "An unexpected error occurred.", + "instance": "/api/users", + "traceId": "ab12cd34ef56" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Server error + tags: + - Blogs + /boards: + get: + operationId: findAllBoards + responses: + '200': + content: + application/json: + schema: + items: + $ref: '#/components/schemas/BoardResponse' + type: array + description: OK + '400': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Bad Request", + "status": 400, + "detail": "Validation failed for request.", + "instance": "/api/users", + "errors": [ + { + "objectName": "createUserRequest", + "field": "email", + "message": "must be a well-formed email address", + "code": "Email" + }, + { + "objectName": "createUserRequest", + "field": "age", + "message": "must be greater than or equal to 0", + "code": "Min" + } + ], + "traceId": "a8c0c4e5f1c24a7e" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Validation error + '401': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Unauthorized", + "status": 401, + "detail": "Full authentication is required to access this resource", + "instance": "/api/users", + "traceId": "401401401401" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Unauthorized + '403': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Forbidden", + "status": 403, + "detail": "Access is denied", + "instance": "/api/users", + "traceId": "403403403403" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Forbidden (access denied) + '404': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Not Found", + "status": 404, + "detail": "User not found with id: 42", + "instance": "/api/users/42", + "traceId": "cdef1234abcd5678" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Not Found + '500': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Internal Server Error", + "status": 500, + "detail": "An unexpected error occurred.", + "instance": "/api/users", + "traceId": "ab12cd34ef56" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Server error + tags: + - Boards + post: + operationId: createBoard + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/CreateBoardRequest' + required: true + responses: + '201': + content: + application/json: + schema: + $ref: '#/components/schemas/BoardResponse' + description: Created + '400': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Bad Request", + "status": 400, + "detail": "Validation failed for request.", + "instance": "/api/users", + "errors": [ + { + "objectName": "createUserRequest", + "field": "email", + "message": "must be a well-formed email address", + "code": "Email" + }, + { + "objectName": "createUserRequest", + "field": "age", + "message": "must be greater than or equal to 0", + "code": "Min" + } + ], + "traceId": "a8c0c4e5f1c24a7e" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Validation error + '401': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Unauthorized", + "status": 401, + "detail": "Full authentication is required to access this resource", + "instance": "/api/users", + "traceId": "401401401401" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Unauthorized + '403': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Forbidden", + "status": 403, + "detail": "Access is denied", + "instance": "/api/users", + "traceId": "403403403403" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Forbidden (access denied) + '404': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Not Found", + "status": 404, + "detail": "User not found with id: 42", + "instance": "/api/users/42", + "traceId": "cdef1234abcd5678" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Not Found + '500': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Internal Server Error", + "status": 500, + "detail": "An unexpected error occurred.", + "instance": "/api/users", + "traceId": "ab12cd34ef56" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Server error + tags: + - Boards + /boards/{boardId}/members: + post: + operationId: addMember + parameters: + - in: path + name: boardId + required: true + schema: + format: int64 + type: integer + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/AddBoardMemberRequest' + required: true + responses: + '201': + content: + application/json: + schema: + $ref: '#/components/schemas/BoardMemberResponse' + description: Created + '400': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Bad Request", + "status": 400, + "detail": "Validation failed for request.", + "instance": "/api/users", + "errors": [ + { + "objectName": "createUserRequest", + "field": "email", + "message": "must be a well-formed email address", + "code": "Email" + }, + { + "objectName": "createUserRequest", + "field": "age", + "message": "must be greater than or equal to 0", + "code": "Min" + } + ], + "traceId": "a8c0c4e5f1c24a7e" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Validation error + '401': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Unauthorized", + "status": 401, + "detail": "Full authentication is required to access this resource", + "instance": "/api/users", + "traceId": "401401401401" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Unauthorized + '403': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Forbidden", + "status": 403, + "detail": "Access is denied", + "instance": "/api/users", + "traceId": "403403403403" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Forbidden (access denied) + '404': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Not Found", + "status": 404, + "detail": "User not found with id: 42", + "instance": "/api/users/42", + "traceId": "cdef1234abcd5678" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Not Found + '500': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Internal Server Error", + "status": 500, + "detail": "An unexpected error occurred.", + "instance": "/api/users", + "traceId": "ab12cd34ef56" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Server error + tags: + - Boards + /boards/{boardId}/members/{id}: + delete: + operationId: removeMember + parameters: + - in: path + name: boardId + required: true + schema: + format: int64 + type: integer + - in: path + name: id + required: true + schema: + format: int64 + type: integer + responses: + '204': + description: No Content + '400': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Bad Request", + "status": 400, + "detail": "Validation failed for request.", + "instance": "/api/users", + "errors": [ + { + "objectName": "createUserRequest", + "field": "email", + "message": "must be a well-formed email address", + "code": "Email" + }, + { + "objectName": "createUserRequest", + "field": "age", + "message": "must be greater than or equal to 0", + "code": "Min" + } + ], + "traceId": "a8c0c4e5f1c24a7e" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Validation error + '401': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Unauthorized", + "status": 401, + "detail": "Full authentication is required to access this resource", + "instance": "/api/users", + "traceId": "401401401401" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Unauthorized + '403': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Forbidden", + "status": 403, + "detail": "Access is denied", + "instance": "/api/users", + "traceId": "403403403403" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Forbidden (access denied) + '404': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Not Found", + "status": 404, + "detail": "User not found with id: 42", + "instance": "/api/users/42", + "traceId": "cdef1234abcd5678" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Not Found + '500': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Internal Server Error", + "status": 500, + "detail": "An unexpected error occurred.", + "instance": "/api/users", + "traceId": "ab12cd34ef56" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Server error + tags: + - Boards + put: + operationId: updateMember + parameters: + - in: path + name: boardId + required: true + schema: + format: int64 + type: integer + - in: path + name: id + required: true + schema: + format: int64 + type: integer + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/UpdateBoardMemberRequest' + required: true + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/BoardMemberResponse' + description: OK + '400': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Bad Request", + "status": 400, + "detail": "Validation failed for request.", + "instance": "/api/users", + "errors": [ + { + "objectName": "createUserRequest", + "field": "email", + "message": "must be a well-formed email address", + "code": "Email" + }, + { + "objectName": "createUserRequest", + "field": "age", + "message": "must be greater than or equal to 0", + "code": "Min" + } + ], + "traceId": "a8c0c4e5f1c24a7e" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Validation error + '401': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Unauthorized", + "status": 401, + "detail": "Full authentication is required to access this resource", + "instance": "/api/users", + "traceId": "401401401401" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Unauthorized + '403': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Forbidden", + "status": 403, + "detail": "Access is denied", + "instance": "/api/users", + "traceId": "403403403403" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Forbidden (access denied) + '404': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Not Found", + "status": 404, + "detail": "User not found with id: 42", + "instance": "/api/users/42", + "traceId": "cdef1234abcd5678" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Not Found + '500': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Internal Server Error", + "status": 500, + "detail": "An unexpected error occurred.", + "instance": "/api/users", + "traceId": "ab12cd34ef56" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Server error + tags: + - Boards + /boards/{boardId}/members/{id}/member: + put: + operationId: linkMember + parameters: + - in: path + name: boardId + required: true + schema: + format: int64 + type: integer + - in: path + name: id + required: true + schema: + format: int64 + type: integer + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/LinkBoardMemberRequest' + required: true + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/BoardMemberResponse' + description: OK + '400': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Bad Request", + "status": 400, + "detail": "Validation failed for request.", + "instance": "/api/users", + "errors": [ + { + "objectName": "createUserRequest", + "field": "email", + "message": "must be a well-formed email address", + "code": "Email" + }, + { + "objectName": "createUserRequest", + "field": "age", + "message": "must be greater than or equal to 0", + "code": "Min" + } + ], + "traceId": "a8c0c4e5f1c24a7e" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Validation error + '401': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Unauthorized", + "status": 401, + "detail": "Full authentication is required to access this resource", + "instance": "/api/users", + "traceId": "401401401401" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Unauthorized + '403': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Forbidden", + "status": 403, + "detail": "Access is denied", + "instance": "/api/users", + "traceId": "403403403403" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Forbidden (access denied) + '404': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Not Found", + "status": 404, + "detail": "User not found with id: 42", + "instance": "/api/users/42", + "traceId": "cdef1234abcd5678" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Not Found + '500': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Internal Server Error", + "status": 500, + "detail": "An unexpected error occurred.", + "instance": "/api/users", + "traceId": "ab12cd34ef56" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Server error + tags: + - Boards + /boards/{id}: + delete: + operationId: deleteBoard + parameters: + - in: path + name: id + required: true + schema: + format: int64 + type: integer + responses: + '204': + description: No Content + '400': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Bad Request", + "status": 400, + "detail": "Validation failed for request.", + "instance": "/api/users", + "errors": [ + { + "objectName": "createUserRequest", + "field": "email", + "message": "must be a well-formed email address", + "code": "Email" + }, + { + "objectName": "createUserRequest", + "field": "age", + "message": "must be greater than or equal to 0", + "code": "Min" + } + ], + "traceId": "a8c0c4e5f1c24a7e" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Validation error + '401': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Unauthorized", + "status": 401, + "detail": "Full authentication is required to access this resource", + "instance": "/api/users", + "traceId": "401401401401" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Unauthorized + '403': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Forbidden", + "status": 403, + "detail": "Access is denied", + "instance": "/api/users", + "traceId": "403403403403" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Forbidden (access denied) + '404': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Not Found", + "status": 404, + "detail": "User not found with id: 42", + "instance": "/api/users/42", + "traceId": "cdef1234abcd5678" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Not Found + '500': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Internal Server Error", + "status": 500, + "detail": "An unexpected error occurred.", + "instance": "/api/users", + "traceId": "ab12cd34ef56" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Server error + tags: + - Boards + get: + operationId: findBoardById + parameters: + - in: path + name: id + required: true + schema: + format: int64 + type: integer + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/BoardResponse' + description: OK + '400': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Bad Request", + "status": 400, + "detail": "Validation failed for request.", + "instance": "/api/users", + "errors": [ + { + "objectName": "createUserRequest", + "field": "email", + "message": "must be a well-formed email address", + "code": "Email" + }, + { + "objectName": "createUserRequest", + "field": "age", + "message": "must be greater than or equal to 0", + "code": "Min" + } + ], + "traceId": "a8c0c4e5f1c24a7e" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Validation error + '401': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Unauthorized", + "status": 401, + "detail": "Full authentication is required to access this resource", + "instance": "/api/users", + "traceId": "401401401401" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Unauthorized + '403': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Forbidden", + "status": 403, + "detail": "Access is denied", + "instance": "/api/users", + "traceId": "403403403403" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Forbidden (access denied) + '404': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Not Found", + "status": 404, + "detail": "User not found with id: 42", + "instance": "/api/users/42", + "traceId": "cdef1234abcd5678" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Not Found + '500': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Internal Server Error", + "status": 500, + "detail": "An unexpected error occurred.", + "instance": "/api/users", + "traceId": "ab12cd34ef56" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Server error + tags: + - Boards + put: + operationId: updateBoard + parameters: + - in: path + name: id + required: true + schema: + format: int64 + type: integer + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/UpdateBoardRequest' + required: true + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/BoardResponse' + description: OK + '400': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Bad Request", + "status": 400, + "detail": "Validation failed for request.", + "instance": "/api/users", + "errors": [ + { + "objectName": "createUserRequest", + "field": "email", + "message": "must be a well-formed email address", + "code": "Email" + }, + { + "objectName": "createUserRequest", + "field": "age", + "message": "must be greater than or equal to 0", + "code": "Min" + } + ], + "traceId": "a8c0c4e5f1c24a7e" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Validation error + '401': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Unauthorized", + "status": 401, + "detail": "Full authentication is required to access this resource", + "instance": "/api/users", + "traceId": "401401401401" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Unauthorized + '403': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Forbidden", + "status": 403, + "detail": "Access is denied", + "instance": "/api/users", + "traceId": "403403403403" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Forbidden (access denied) + '404': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Not Found", + "status": 404, + "detail": "User not found with id: 42", + "instance": "/api/users/42", + "traceId": "cdef1234abcd5678" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Not Found + '500': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Internal Server Error", + "status": 500, + "detail": "An unexpected error occurred.", + "instance": "/api/users", + "traceId": "ab12cd34ef56" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Server error + tags: + - Boards + /committeeMembers/committees: + get: + operationId: findCommitteesByUserId + responses: + '200': + content: + application/json: + schema: + items: + $ref: '#/components/schemas/CommitteeResponse' + type: array + description: OK + '400': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Bad Request", + "status": 400, + "detail": "Validation failed for request.", + "instance": "/api/users", + "errors": [ + { + "objectName": "createUserRequest", + "field": "email", + "message": "must be a well-formed email address", + "code": "Email" + }, + { + "objectName": "createUserRequest", + "field": "age", + "message": "must be greater than or equal to 0", + "code": "Min" + } + ], + "traceId": "a8c0c4e5f1c24a7e" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Validation error + '401': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Unauthorized", + "status": 401, + "detail": "Full authentication is required to access this resource", + "instance": "/api/users", + "traceId": "401401401401" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Unauthorized + '403': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Forbidden", + "status": 403, + "detail": "Access is denied", + "instance": "/api/users", + "traceId": "403403403403" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Forbidden (access denied) + '404': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Not Found", + "status": 404, + "detail": "User not found with id: 42", + "instance": "/api/users/42", + "traceId": "cdef1234abcd5678" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Not Found + '500': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Internal Server Error", + "status": 500, + "detail": "An unexpected error occurred.", + "instance": "/api/users", + "traceId": "ab12cd34ef56" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Server error + tags: + - Committees + /committees: + get: + operationId: findCommittees + responses: + '200': + content: + application/json: + schema: + items: + $ref: '#/components/schemas/CommitteeResponse' + type: array + description: OK + '400': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Bad Request", + "status": 400, + "detail": "Validation failed for request.", + "instance": "/api/users", + "errors": [ + { + "objectName": "createUserRequest", + "field": "email", + "message": "must be a well-formed email address", + "code": "Email" + }, + { + "objectName": "createUserRequest", + "field": "age", + "message": "must be greater than or equal to 0", + "code": "Min" + } + ], + "traceId": "a8c0c4e5f1c24a7e" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Validation error + '401': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Unauthorized", + "status": 401, + "detail": "Full authentication is required to access this resource", + "instance": "/api/users", + "traceId": "401401401401" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Unauthorized + '403': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Forbidden", + "status": 403, + "detail": "Access is denied", + "instance": "/api/users", + "traceId": "403403403403" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Forbidden (access denied) + '404': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Not Found", + "status": 404, + "detail": "User not found with id: 42", + "instance": "/api/users/42", + "traceId": "cdef1234abcd5678" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Not Found + '500': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Internal Server Error", + "status": 500, + "detail": "An unexpected error occurred.", + "instance": "/api/users", + "traceId": "ab12cd34ef56" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Server error + tags: + - Committees + post: + operationId: createCommittee + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/CreateCommitteeRequest' + required: true + responses: + '201': + content: + application/json: + schema: + $ref: '#/components/schemas/CommitteeDetailResponse' + description: Created + '400': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Bad Request", + "status": 400, + "detail": "Validation failed for request.", + "instance": "/api/users", + "errors": [ + { + "objectName": "createUserRequest", + "field": "email", + "message": "must be a well-formed email address", + "code": "Email" + }, + { + "objectName": "createUserRequest", + "field": "age", + "message": "must be greater than or equal to 0", + "code": "Min" + } + ], + "traceId": "a8c0c4e5f1c24a7e" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Validation error + '401': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Unauthorized", + "status": 401, + "detail": "Full authentication is required to access this resource", + "instance": "/api/users", + "traceId": "401401401401" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Unauthorized + '403': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Forbidden", + "status": 403, + "detail": "Access is denied", + "instance": "/api/users", + "traceId": "403403403403" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Forbidden (access denied) + '404': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Not Found", + "status": 404, + "detail": "User not found with id: 42", + "instance": "/api/users/42", + "traceId": "cdef1234abcd5678" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Not Found + '500': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Internal Server Error", + "status": 500, + "detail": "An unexpected error occurred.", + "instance": "/api/users", + "traceId": "ab12cd34ef56" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Server error + tags: + - Committees + /committees/{committeeId}: + get: + operationId: findCommitteeById + parameters: + - in: path + name: committeeId + required: true + schema: + format: int64 + type: integer + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/CommitteeResponse' + description: OK + '400': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Bad Request", + "status": 400, + "detail": "Validation failed for request.", + "instance": "/api/users", + "errors": [ + { + "objectName": "createUserRequest", + "field": "email", + "message": "must be a well-formed email address", + "code": "Email" + }, + { + "objectName": "createUserRequest", + "field": "age", + "message": "must be greater than or equal to 0", + "code": "Min" + } + ], + "traceId": "a8c0c4e5f1c24a7e" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Validation error + '401': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Unauthorized", + "status": 401, + "detail": "Full authentication is required to access this resource", + "instance": "/api/users", + "traceId": "401401401401" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Unauthorized + '403': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Forbidden", + "status": 403, + "detail": "Access is denied", + "instance": "/api/users", + "traceId": "403403403403" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Forbidden (access denied) + '404': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Not Found", + "status": 404, + "detail": "User not found with id: 42", + "instance": "/api/users/42", + "traceId": "cdef1234abcd5678" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Not Found + '500': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Internal Server Error", + "status": 500, + "detail": "An unexpected error occurred.", + "instance": "/api/users", + "traceId": "ab12cd34ef56" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Server error + tags: + - Committees + /committees/{id}: + delete: + operationId: deleteCommitteeById + parameters: + - in: path + name: id + required: true + schema: + format: int64 + type: integer + responses: + '204': + description: No Content + '400': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Bad Request", + "status": 400, + "detail": "Validation failed for request.", + "instance": "/api/users", + "errors": [ + { + "objectName": "createUserRequest", + "field": "email", + "message": "must be a well-formed email address", + "code": "Email" + }, + { + "objectName": "createUserRequest", + "field": "age", + "message": "must be greater than or equal to 0", + "code": "Min" + } + ], + "traceId": "a8c0c4e5f1c24a7e" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Validation error + '401': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Unauthorized", + "status": 401, + "detail": "Full authentication is required to access this resource", + "instance": "/api/users", + "traceId": "401401401401" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Unauthorized + '403': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Forbidden", + "status": 403, + "detail": "Access is denied", + "instance": "/api/users", + "traceId": "403403403403" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Forbidden (access denied) + '404': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Not Found", + "status": 404, + "detail": "User not found with id: 42", + "instance": "/api/users/42", + "traceId": "cdef1234abcd5678" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Not Found + '500': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Internal Server Error", + "status": 500, + "detail": "An unexpected error occurred.", + "instance": "/api/users", + "traceId": "ab12cd34ef56" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Server error + tags: + - Committees + put: + operationId: updateCommittee + parameters: + - in: path + name: id + required: true + schema: + format: int64 + type: integer + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/UpdateCommitteeRequest' + required: true + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/CommitteeDetailResponse' + description: OK + '400': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Bad Request", + "status": 400, + "detail": "Validation failed for request.", + "instance": "/api/users", + "errors": [ + { + "objectName": "createUserRequest", + "field": "email", + "message": "must be a well-formed email address", + "code": "Email" + }, + { + "objectName": "createUserRequest", + "field": "age", + "message": "must be greater than or equal to 0", + "code": "Min" + } + ], + "traceId": "a8c0c4e5f1c24a7e" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Validation error + '401': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Unauthorized", + "status": 401, + "detail": "Full authentication is required to access this resource", + "instance": "/api/users", + "traceId": "401401401401" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Unauthorized + '403': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Forbidden", + "status": 403, + "detail": "Access is denied", + "instance": "/api/users", + "traceId": "403403403403" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Forbidden (access denied) + '404': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Not Found", + "status": 404, + "detail": "User not found with id: 42", + "instance": "/api/users/42", + "traceId": "cdef1234abcd5678" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Not Found + '500': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Internal Server Error", + "status": 500, + "detail": "An unexpected error occurred.", + "instance": "/api/users", + "traceId": "ab12cd34ef56" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Server error + tags: + - Committees + /contributionPeriods: + get: + operationId: findContributionPeriods + responses: + '200': + content: + application/json: + schema: + items: + $ref: '#/components/schemas/ContributionPeriodResponse' + type: array + description: OK + '400': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Bad Request", + "status": 400, + "detail": "Validation failed for request.", + "instance": "/api/users", + "errors": [ + { + "objectName": "createUserRequest", + "field": "email", + "message": "must be a well-formed email address", + "code": "Email" + }, + { + "objectName": "createUserRequest", + "field": "age", + "message": "must be greater than or equal to 0", + "code": "Min" + } + ], + "traceId": "a8c0c4e5f1c24a7e" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Validation error + '401': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Unauthorized", + "status": 401, + "detail": "Full authentication is required to access this resource", + "instance": "/api/users", + "traceId": "401401401401" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Unauthorized + '403': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Forbidden", + "status": 403, + "detail": "Access is denied", + "instance": "/api/users", + "traceId": "403403403403" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Forbidden (access denied) + '404': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Not Found", + "status": 404, + "detail": "User not found with id: 42", + "instance": "/api/users/42", + "traceId": "cdef1234abcd5678" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Not Found + '500': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Internal Server Error", + "status": 500, + "detail": "An unexpected error occurred.", + "instance": "/api/users", + "traceId": "ab12cd34ef56" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Server error + tags: + - ContributionPeriods + post: + operationId: createContributionPeriod + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/CreateContributionPeriodRequest' + required: true + responses: + '201': + content: + application/json: + schema: + $ref: '#/components/schemas/ContributionPeriodResponse' + description: Created + '400': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Bad Request", + "status": 400, + "detail": "Validation failed for request.", + "instance": "/api/users", + "errors": [ + { + "objectName": "createUserRequest", + "field": "email", + "message": "must be a well-formed email address", + "code": "Email" + }, + { + "objectName": "createUserRequest", + "field": "age", + "message": "must be greater than or equal to 0", + "code": "Min" + } + ], + "traceId": "a8c0c4e5f1c24a7e" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Validation error + '401': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Unauthorized", + "status": 401, + "detail": "Full authentication is required to access this resource", + "instance": "/api/users", + "traceId": "401401401401" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Unauthorized + '403': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Forbidden", + "status": 403, + "detail": "Access is denied", + "instance": "/api/users", + "traceId": "403403403403" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Forbidden (access denied) + '404': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Not Found", + "status": 404, + "detail": "User not found with id: 42", + "instance": "/api/users/42", + "traceId": "cdef1234abcd5678" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Not Found + '500': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Internal Server Error", + "status": 500, + "detail": "An unexpected error occurred.", + "instance": "/api/users", + "traceId": "ab12cd34ef56" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Server error + tags: + - ContributionPeriods + /contributionPeriods/current: + get: + operationId: findCurrentContributionPeriod + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/ContributionPeriodResponse' + description: OK + '400': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Bad Request", + "status": 400, + "detail": "Validation failed for request.", + "instance": "/api/users", + "errors": [ + { + "objectName": "createUserRequest", + "field": "email", + "message": "must be a well-formed email address", + "code": "Email" + }, + { + "objectName": "createUserRequest", + "field": "age", + "message": "must be greater than or equal to 0", + "code": "Min" + } + ], + "traceId": "a8c0c4e5f1c24a7e" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Validation error + '401': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Unauthorized", + "status": 401, + "detail": "Full authentication is required to access this resource", + "instance": "/api/users", + "traceId": "401401401401" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Unauthorized + '403': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Forbidden", + "status": 403, + "detail": "Access is denied", + "instance": "/api/users", + "traceId": "403403403403" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Forbidden (access denied) + '404': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Not Found", + "status": 404, + "detail": "User not found with id: 42", + "instance": "/api/users/42", + "traceId": "cdef1234abcd5678" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Not Found + '500': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Internal Server Error", + "status": 500, + "detail": "An unexpected error occurred.", + "instance": "/api/users", + "traceId": "ab12cd34ef56" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Server error + tags: + - ContributionPeriods + /contributionPeriods/{contributionPeriodId}/users/{userId}/contributions: + delete: + operationId: deleteContribution + parameters: + - in: path + name: userId + required: true + schema: + format: int64 + type: integer + - in: path + name: contributionPeriodId + required: true + schema: + format: int64 + type: integer + responses: + '204': + description: No Content + '400': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Bad Request", + "status": 400, + "detail": "Validation failed for request.", + "instance": "/api/users", + "errors": [ + { + "objectName": "createUserRequest", + "field": "email", + "message": "must be a well-formed email address", + "code": "Email" + }, + { + "objectName": "createUserRequest", + "field": "age", + "message": "must be greater than or equal to 0", + "code": "Min" + } + ], + "traceId": "a8c0c4e5f1c24a7e" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Validation error + '401': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Unauthorized", + "status": 401, + "detail": "Full authentication is required to access this resource", + "instance": "/api/users", + "traceId": "401401401401" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Unauthorized + '403': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Forbidden", + "status": 403, + "detail": "Access is denied", + "instance": "/api/users", + "traceId": "403403403403" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Forbidden (access denied) + '404': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Not Found", + "status": 404, + "detail": "User not found with id: 42", + "instance": "/api/users/42", + "traceId": "cdef1234abcd5678" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Not Found + '500': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Internal Server Error", + "status": 500, + "detail": "An unexpected error occurred.", + "instance": "/api/users", + "traceId": "ab12cd34ef56" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Server error + tags: + - Contributions + /contributionPeriods/{id}: + delete: + operationId: deleteContributionPeriodById + parameters: + - in: path + name: id + required: true + schema: + format: int64 + type: integer + responses: + '204': + description: No Content + '400': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Bad Request", + "status": 400, + "detail": "Validation failed for request.", + "instance": "/api/users", + "errors": [ + { + "objectName": "createUserRequest", + "field": "email", + "message": "must be a well-formed email address", + "code": "Email" + }, + { + "objectName": "createUserRequest", + "field": "age", + "message": "must be greater than or equal to 0", + "code": "Min" + } + ], + "traceId": "a8c0c4e5f1c24a7e" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Validation error + '401': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Unauthorized", + "status": 401, + "detail": "Full authentication is required to access this resource", + "instance": "/api/users", + "traceId": "401401401401" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Unauthorized + '403': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Forbidden", + "status": 403, + "detail": "Access is denied", + "instance": "/api/users", + "traceId": "403403403403" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Forbidden (access denied) + '404': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Not Found", + "status": 404, + "detail": "User not found with id: 42", + "instance": "/api/users/42", + "traceId": "cdef1234abcd5678" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Not Found + '500': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Internal Server Error", + "status": 500, + "detail": "An unexpected error occurred.", + "instance": "/api/users", + "traceId": "ab12cd34ef56" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Server error + tags: + - ContributionPeriods + put: + operationId: updateContributionPeriod + parameters: + - in: path + name: id + required: true + schema: + format: int64 + type: integer + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/UpdateContributionPeriodRequest' + required: true + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/ContributionPeriodResponse' + description: OK + '400': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Bad Request", + "status": 400, + "detail": "Validation failed for request.", + "instance": "/api/users", + "errors": [ + { + "objectName": "createUserRequest", + "field": "email", + "message": "must be a well-formed email address", + "code": "Email" + }, + { + "objectName": "createUserRequest", + "field": "age", + "message": "must be greater than or equal to 0", + "code": "Min" + } + ], + "traceId": "a8c0c4e5f1c24a7e" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Validation error + '401': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Unauthorized", + "status": 401, + "detail": "Full authentication is required to access this resource", + "instance": "/api/users", + "traceId": "401401401401" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Unauthorized + '403': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Forbidden", + "status": 403, + "detail": "Access is denied", + "instance": "/api/users", + "traceId": "403403403403" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Forbidden (access denied) + '404': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Not Found", + "status": 404, + "detail": "User not found with id: 42", + "instance": "/api/users/42", + "traceId": "cdef1234abcd5678" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Not Found + '500': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Internal Server Error", + "status": 500, + "detail": "An unexpected error occurred.", + "instance": "/api/users", + "traceId": "ab12cd34ef56" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Server error + tags: + - ContributionPeriods + /contributionPeriods/{periodId}/contributions: + get: + operationId: findContributionsByPeriodId + parameters: + - in: path + name: periodId + required: true + schema: + format: int64 + type: integer + responses: + '200': + content: + application/json: + schema: + items: + $ref: '#/components/schemas/ContributionResponse' + type: array + description: OK + '400': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Bad Request", + "status": 400, + "detail": "Validation failed for request.", + "instance": "/api/users", + "errors": [ + { + "objectName": "createUserRequest", + "field": "email", + "message": "must be a well-formed email address", + "code": "Email" + }, + { + "objectName": "createUserRequest", + "field": "age", + "message": "must be greater than or equal to 0", + "code": "Min" + } + ], + "traceId": "a8c0c4e5f1c24a7e" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Validation error + '401': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Unauthorized", + "status": 401, + "detail": "Full authentication is required to access this resource", + "instance": "/api/users", + "traceId": "401401401401" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Unauthorized + '403': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Forbidden", + "status": 403, + "detail": "Access is denied", + "instance": "/api/users", + "traceId": "403403403403" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Forbidden (access denied) + '404': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Not Found", + "status": 404, + "detail": "User not found with id: 42", + "instance": "/api/users/42", + "traceId": "cdef1234abcd5678" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Not Found + '500': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Internal Server Error", + "status": 500, + "detail": "An unexpected error occurred.", + "instance": "/api/users", + "traceId": "ab12cd34ef56" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Server error + tags: + - Contributions + /contributionReminders: + get: + operationId: findContributionReminders + parameters: + - in: query + name: contributionPeriodId + required: true + schema: + format: int64 + type: integer + responses: + '200': + content: + application/json: + schema: + items: + $ref: '#/components/schemas/ContributionReminderResponse' + type: array + description: OK + '400': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Bad Request", + "status": 400, + "detail": "Validation failed for request.", + "instance": "/api/users", + "errors": [ + { + "objectName": "createUserRequest", + "field": "email", + "message": "must be a well-formed email address", + "code": "Email" + }, + { + "objectName": "createUserRequest", + "field": "age", + "message": "must be greater than or equal to 0", + "code": "Min" + } + ], + "traceId": "a8c0c4e5f1c24a7e" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Validation error + '401': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Unauthorized", + "status": 401, + "detail": "Full authentication is required to access this resource", + "instance": "/api/users", + "traceId": "401401401401" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Unauthorized + '403': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Forbidden", + "status": 403, + "detail": "Access is denied", + "instance": "/api/users", + "traceId": "403403403403" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Forbidden (access denied) + '404': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Not Found", + "status": 404, + "detail": "User not found with id: 42", + "instance": "/api/users/42", + "traceId": "cdef1234abcd5678" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Not Found + '500': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Internal Server Error", + "status": 500, + "detail": "An unexpected error occurred.", + "instance": "/api/users", + "traceId": "ab12cd34ef56" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Server error + tags: + - ContributionReminders + post: + operationId: sendContributionReminder + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/CreateContributionReminderRequest' + required: true + responses: + '201': + content: + application/json: + schema: + $ref: '#/components/schemas/ContributionReminderResponse' + description: Created + '400': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Bad Request", + "status": 400, + "detail": "Validation failed for request.", + "instance": "/api/users", + "errors": [ + { + "objectName": "createUserRequest", + "field": "email", + "message": "must be a well-formed email address", + "code": "Email" + }, + { + "objectName": "createUserRequest", + "field": "age", + "message": "must be greater than or equal to 0", + "code": "Min" + } + ], + "traceId": "a8c0c4e5f1c24a7e" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Validation error + '401': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Unauthorized", + "status": 401, + "detail": "Full authentication is required to access this resource", + "instance": "/api/users", + "traceId": "401401401401" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Unauthorized + '403': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Forbidden", + "status": 403, + "detail": "Access is denied", + "instance": "/api/users", + "traceId": "403403403403" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Forbidden (access denied) + '404': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Not Found", + "status": 404, + "detail": "User not found with id: 42", + "instance": "/api/users/42", + "traceId": "cdef1234abcd5678" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Not Found + '500': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Internal Server Error", + "status": 500, + "detail": "An unexpected error occurred.", + "instance": "/api/users", + "traceId": "ab12cd34ef56" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Server error + tags: + - ContributionReminders + /contributionReminders/batch: + post: + operationId: sendContributionReminderBatch + requestBody: + content: + application/json: + schema: + items: + $ref: '#/components/schemas/CreateContributionReminderRequest' + type: array + required: true + responses: + '201': + content: + application/json: + schema: + items: + $ref: '#/components/schemas/ContributionReminderResponse' + type: array + description: Created + '400': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Bad Request", + "status": 400, + "detail": "Validation failed for request.", + "instance": "/api/users", + "errors": [ + { + "objectName": "createUserRequest", + "field": "email", + "message": "must be a well-formed email address", + "code": "Email" + }, + { + "objectName": "createUserRequest", + "field": "age", + "message": "must be greater than or equal to 0", + "code": "Min" + } + ], + "traceId": "a8c0c4e5f1c24a7e" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Validation error + '401': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Unauthorized", + "status": 401, + "detail": "Full authentication is required to access this resource", + "instance": "/api/users", + "traceId": "401401401401" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Unauthorized + '403': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Forbidden", + "status": 403, + "detail": "Access is denied", + "instance": "/api/users", + "traceId": "403403403403" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Forbidden (access denied) + '404': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Not Found", + "status": 404, + "detail": "User not found with id: 42", + "instance": "/api/users/42", + "traceId": "cdef1234abcd5678" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Not Found + '500': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Internal Server Error", + "status": 500, + "detail": "An unexpected error occurred.", + "instance": "/api/users", + "traceId": "ab12cd34ef56" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Server error + tags: + - ContributionReminders + /contributions: + get: + operationId: findContributions + parameters: + - in: query + name: contributionPeriodId + required: true + schema: + format: int64 + type: integer + responses: + '200': + content: + application/json: + schema: + items: + $ref: '#/components/schemas/ContributionResponse' + type: array + description: OK + '400': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Bad Request", + "status": 400, + "detail": "Validation failed for request.", + "instance": "/api/users", + "errors": [ + { + "objectName": "createUserRequest", + "field": "email", + "message": "must be a well-formed email address", + "code": "Email" + }, + { + "objectName": "createUserRequest", + "field": "age", + "message": "must be greater than or equal to 0", + "code": "Min" + } + ], + "traceId": "a8c0c4e5f1c24a7e" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Validation error + '401': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Unauthorized", + "status": 401, + "detail": "Full authentication is required to access this resource", + "instance": "/api/users", + "traceId": "401401401401" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Unauthorized + '403': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Forbidden", + "status": 403, + "detail": "Access is denied", + "instance": "/api/users", + "traceId": "403403403403" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Forbidden (access denied) + '404': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Not Found", + "status": 404, + "detail": "User not found with id: 42", + "instance": "/api/users/42", + "traceId": "cdef1234abcd5678" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Not Found + '500': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Internal Server Error", + "status": 500, + "detail": "An unexpected error occurred.", + "instance": "/api/users", + "traceId": "ab12cd34ef56" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Server error + tags: + - Contributions + post: + operationId: createContribution + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/CreateContributionRequest' + required: true + responses: + '201': + content: + application/json: + schema: + $ref: '#/components/schemas/ContributionResponse' + description: Created + '400': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Bad Request", + "status": 400, + "detail": "Validation failed for request.", + "instance": "/api/users", + "errors": [ + { + "objectName": "createUserRequest", + "field": "email", + "message": "must be a well-formed email address", + "code": "Email" + }, + { + "objectName": "createUserRequest", + "field": "age", + "message": "must be greater than or equal to 0", + "code": "Min" + } + ], + "traceId": "a8c0c4e5f1c24a7e" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Validation error + '401': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Unauthorized", + "status": 401, + "detail": "Full authentication is required to access this resource", + "instance": "/api/users", + "traceId": "401401401401" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Unauthorized + '403': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Forbidden", + "status": 403, + "detail": "Access is denied", + "instance": "/api/users", + "traceId": "403403403403" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Forbidden (access denied) + '404': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Not Found", + "status": 404, + "detail": "User not found with id: 42", + "instance": "/api/users/42", + "traceId": "cdef1234abcd5678" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Not Found + '500': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Internal Server Error", + "status": 500, + "detail": "An unexpected error occurred.", + "instance": "/api/users", + "traceId": "ab12cd34ef56" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Server error + tags: + - Contributions + /contributions/bulk/mark-paid: + post: + operationId: markPaid + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/BulkMarkPaidRequest' + required: true + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/BulkActionResult' + description: OK + '400': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Bad Request", + "status": 400, + "detail": "Validation failed for request.", + "instance": "/api/users", + "errors": [ + { + "objectName": "createUserRequest", + "field": "email", + "message": "must be a well-formed email address", + "code": "Email" + }, + { + "objectName": "createUserRequest", + "field": "age", + "message": "must be greater than or equal to 0", + "code": "Min" + } + ], + "traceId": "a8c0c4e5f1c24a7e" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Validation error + '401': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Unauthorized", + "status": 401, + "detail": "Full authentication is required to access this resource", + "instance": "/api/users", + "traceId": "401401401401" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Unauthorized + '403': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Forbidden", + "status": 403, + "detail": "Access is denied", + "instance": "/api/users", + "traceId": "403403403403" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Forbidden (access denied) + '404': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Not Found", + "status": 404, + "detail": "User not found with id: 42", + "instance": "/api/users/42", + "traceId": "cdef1234abcd5678" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Not Found + '500': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Internal Server Error", + "status": 500, + "detail": "An unexpected error occurred.", + "instance": "/api/users", + "traceId": "ab12cd34ef56" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Server error + tags: + - Contributions + /contributions/bulk/mark-unpaid: + post: + operationId: markUnpaid + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/BulkMarkUnpaidRequest' + required: true + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/BulkActionResult' + description: OK + '400': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Bad Request", + "status": 400, + "detail": "Validation failed for request.", + "instance": "/api/users", + "errors": [ + { + "objectName": "createUserRequest", + "field": "email", + "message": "must be a well-formed email address", + "code": "Email" + }, + { + "objectName": "createUserRequest", + "field": "age", + "message": "must be greater than or equal to 0", + "code": "Min" + } + ], + "traceId": "a8c0c4e5f1c24a7e" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Validation error + '401': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Unauthorized", + "status": 401, + "detail": "Full authentication is required to access this resource", + "instance": "/api/users", + "traceId": "401401401401" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Unauthorized + '403': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Forbidden", + "status": 403, + "detail": "Access is denied", + "instance": "/api/users", + "traceId": "403403403403" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Forbidden (access denied) + '404': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Not Found", + "status": 404, + "detail": "User not found with id: 42", + "instance": "/api/users/42", + "traceId": "cdef1234abcd5678" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Not Found + '500': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Internal Server Error", + "status": 500, + "detail": "An unexpected error occurred.", + "instance": "/api/users", + "traceId": "ab12cd34ef56" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Server error + tags: + - Contributions + /contributions/fee-cycle: + get: + operationId: previewFeeCycle + parameters: + - in: query + name: contributionPeriodId + required: true + schema: + format: int64 + type: integer + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/FeeCyclePreviewResponse' + description: OK + '400': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Bad Request", + "status": 400, + "detail": "Validation failed for request.", + "instance": "/api/users", + "errors": [ + { + "objectName": "createUserRequest", + "field": "email", + "message": "must be a well-formed email address", + "code": "Email" + }, + { + "objectName": "createUserRequest", + "field": "age", + "message": "must be greater than or equal to 0", + "code": "Min" + } + ], + "traceId": "a8c0c4e5f1c24a7e" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Validation error + '401': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Unauthorized", + "status": 401, + "detail": "Full authentication is required to access this resource", + "instance": "/api/users", + "traceId": "401401401401" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Unauthorized + '403': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Forbidden", + "status": 403, + "detail": "Access is denied", + "instance": "/api/users", + "traceId": "403403403403" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Forbidden (access denied) + '404': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Not Found", + "status": 404, + "detail": "User not found with id: 42", + "instance": "/api/users/42", + "traceId": "cdef1234abcd5678" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Not Found + '500': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Internal Server Error", + "status": 500, + "detail": "An unexpected error occurred.", + "instance": "/api/users", + "traceId": "ab12cd34ef56" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Server error + tags: + - Contributions + /contributions/fee-cycle/email-preview: + get: + operationId: previewFeeCycleEmail + parameters: + - in: query + name: contributionPeriodId + required: true + schema: + format: int64 + type: integer + - in: query + name: userId + required: true + schema: + format: int64 + type: integer + - in: query + name: paymentDueDate + required: true + schema: + format: date + type: string + - in: query + name: debitDate + required: true + schema: + format: date + type: string + - in: query + name: feeType + required: false + schema: + $ref: '#/components/schemas/BulkFeeType' + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/FeeCycleEmailPreviewResponse' + description: OK + '400': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Bad Request", + "status": 400, + "detail": "Validation failed for request.", + "instance": "/api/users", + "errors": [ + { + "objectName": "createUserRequest", + "field": "email", + "message": "must be a well-formed email address", + "code": "Email" + }, + { + "objectName": "createUserRequest", + "field": "age", + "message": "must be greater than or equal to 0", + "code": "Min" + } + ], + "traceId": "a8c0c4e5f1c24a7e" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Validation error + '401': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Unauthorized", + "status": 401, + "detail": "Full authentication is required to access this resource", + "instance": "/api/users", + "traceId": "401401401401" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Unauthorized + '403': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Forbidden", + "status": 403, + "detail": "Access is denied", + "instance": "/api/users", + "traceId": "403403403403" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Forbidden (access denied) + '404': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Not Found", + "status": 404, + "detail": "User not found with id: 42", + "instance": "/api/users/42", + "traceId": "cdef1234abcd5678" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Not Found + '500': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Internal Server Error", + "status": 500, + "detail": "An unexpected error occurred.", + "instance": "/api/users", + "traceId": "ab12cd34ef56" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Server error + tags: + - Contributions + /contributions/fee-cycle/send: + post: + operationId: sendFeeCycle + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/SendFeeCycleRequest' + required: true + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/FeeCycleResultResponse' + description: OK + '400': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Bad Request", + "status": 400, + "detail": "Validation failed for request.", + "instance": "/api/users", + "errors": [ + { + "objectName": "createUserRequest", + "field": "email", + "message": "must be a well-formed email address", + "code": "Email" + }, + { + "objectName": "createUserRequest", + "field": "age", + "message": "must be greater than or equal to 0", + "code": "Min" + } + ], + "traceId": "a8c0c4e5f1c24a7e" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Validation error + '401': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Unauthorized", + "status": 401, + "detail": "Full authentication is required to access this resource", + "instance": "/api/users", + "traceId": "401401401401" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Unauthorized + '403': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Forbidden", + "status": 403, + "detail": "Access is denied", + "instance": "/api/users", + "traceId": "403403403403" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Forbidden (access denied) + '404': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Not Found", + "status": 404, + "detail": "User not found with id: 42", + "instance": "/api/users/42", + "traceId": "cdef1234abcd5678" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Not Found + '500': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Internal Server Error", + "status": 500, + "detail": "An unexpected error occurred.", + "instance": "/api/users", + "traceId": "ab12cd34ef56" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Server error + tags: + - Contributions + /csrf: + get: + operationId: csrf + parameters: + - in: query + name: csrfToken + required: true + schema: + $ref: '#/components/schemas/CsrfToken' + responses: + '200': + content: + application/json: + schema: + additionalProperties: + type: string + type: object + description: OK + '400': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Bad Request", + "status": 400, + "detail": "Validation failed for request.", + "instance": "/api/users", + "errors": [ + { + "objectName": "createUserRequest", + "field": "email", + "message": "must be a well-formed email address", + "code": "Email" + }, + { + "objectName": "createUserRequest", + "field": "age", + "message": "must be greater than or equal to 0", + "code": "Min" + } + ], + "traceId": "a8c0c4e5f1c24a7e" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Validation error + '401': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Unauthorized", + "status": 401, + "detail": "Full authentication is required to access this resource", + "instance": "/api/users", + "traceId": "401401401401" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Unauthorized + '403': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Forbidden", + "status": 403, + "detail": "Access is denied", + "instance": "/api/users", + "traceId": "403403403403" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Forbidden (access denied) + '404': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Not Found", + "status": 404, + "detail": "User not found with id: 42", + "instance": "/api/users/42", + "traceId": "cdef1234abcd5678" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Not Found + '500': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Internal Server Error", + "status": 500, + "detail": "An unexpected error occurred.", + "instance": "/api/users", + "traceId": "ab12cd34ef56" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Server error + tags: + - Security + /esports/games: + get: + operationId: findGames + responses: + '200': + content: + application/json: + schema: + items: + $ref: '#/components/schemas/GameResponse' + type: array + description: OK + '400': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Bad Request", + "status": 400, + "detail": "Validation failed for request.", + "instance": "/api/users", + "errors": [ + { + "objectName": "createUserRequest", + "field": "email", + "message": "must be a well-formed email address", + "code": "Email" + }, + { + "objectName": "createUserRequest", + "field": "age", + "message": "must be greater than or equal to 0", + "code": "Min" + } + ], + "traceId": "a8c0c4e5f1c24a7e" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Validation error + '401': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Unauthorized", + "status": 401, + "detail": "Full authentication is required to access this resource", + "instance": "/api/users", + "traceId": "401401401401" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Unauthorized + '403': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Forbidden", + "status": 403, + "detail": "Access is denied", + "instance": "/api/users", + "traceId": "403403403403" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Forbidden (access denied) + '404': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Not Found", + "status": 404, + "detail": "User not found with id: 42", + "instance": "/api/users/42", + "traceId": "cdef1234abcd5678" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Not Found + '500': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Internal Server Error", + "status": 500, + "detail": "An unexpected error occurred.", + "instance": "/api/users", + "traceId": "ab12cd34ef56" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Server error + tags: + - Esports + post: + operationId: createGame + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/CreateGameRequest' + required: true + responses: + '201': + content: + application/json: + schema: + $ref: '#/components/schemas/GameResponse' + description: Created + '400': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Bad Request", + "status": 400, + "detail": "Validation failed for request.", + "instance": "/api/users", + "errors": [ + { + "objectName": "createUserRequest", + "field": "email", + "message": "must be a well-formed email address", + "code": "Email" + }, + { + "objectName": "createUserRequest", + "field": "age", + "message": "must be greater than or equal to 0", + "code": "Min" + } + ], + "traceId": "a8c0c4e5f1c24a7e" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Validation error + '401': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Unauthorized", + "status": 401, + "detail": "Full authentication is required to access this resource", + "instance": "/api/users", + "traceId": "401401401401" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Unauthorized + '403': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Forbidden", + "status": 403, + "detail": "Access is denied", + "instance": "/api/users", + "traceId": "403403403403" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Forbidden (access denied) + '404': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Not Found", + "status": 404, + "detail": "User not found with id: 42", + "instance": "/api/users/42", + "traceId": "cdef1234abcd5678" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Not Found + '500': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Internal Server Error", + "status": 500, + "detail": "An unexpected error occurred.", + "instance": "/api/users", + "traceId": "ab12cd34ef56" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Server error + tags: + - Esports + /esports/games/{game}: + delete: + operationId: deleteGame + parameters: + - in: path + name: game + required: true + schema: + type: string + responses: + '204': + description: No Content + '400': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Bad Request", + "status": 400, + "detail": "Validation failed for request.", + "instance": "/api/users", + "errors": [ + { + "objectName": "createUserRequest", + "field": "email", + "message": "must be a well-formed email address", + "code": "Email" + }, + { + "objectName": "createUserRequest", + "field": "age", + "message": "must be greater than or equal to 0", + "code": "Min" + } + ], + "traceId": "a8c0c4e5f1c24a7e" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Validation error + '401': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Unauthorized", + "status": 401, + "detail": "Full authentication is required to access this resource", + "instance": "/api/users", + "traceId": "401401401401" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Unauthorized + '403': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Forbidden", + "status": 403, + "detail": "Access is denied", + "instance": "/api/users", + "traceId": "403403403403" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Forbidden (access denied) + '404': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Not Found", + "status": 404, + "detail": "User not found with id: 42", + "instance": "/api/users/42", + "traceId": "cdef1234abcd5678" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Not Found + '500': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Internal Server Error", + "status": 500, + "detail": "An unexpected error occurred.", + "instance": "/api/users", + "traceId": "ab12cd34ef56" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Server error + tags: + - Esports + get: + operationId: findGame + parameters: + - in: path + name: game + required: true + schema: + type: string + - in: query + name: seasonId + required: false + schema: + format: int64 + type: integer + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/GameRostersResponse' + description: OK + '400': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Bad Request", + "status": 400, + "detail": "Validation failed for request.", + "instance": "/api/users", + "errors": [ + { + "objectName": "createUserRequest", + "field": "email", + "message": "must be a well-formed email address", + "code": "Email" + }, + { + "objectName": "createUserRequest", + "field": "age", + "message": "must be greater than or equal to 0", + "code": "Min" + } + ], + "traceId": "a8c0c4e5f1c24a7e" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Validation error + '401': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Unauthorized", + "status": 401, + "detail": "Full authentication is required to access this resource", + "instance": "/api/users", + "traceId": "401401401401" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Unauthorized + '403': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Forbidden", + "status": 403, + "detail": "Access is denied", + "instance": "/api/users", + "traceId": "403403403403" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Forbidden (access denied) + '404': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Not Found", + "status": 404, + "detail": "User not found with id: 42", + "instance": "/api/users/42", + "traceId": "cdef1234abcd5678" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Not Found + '500': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Internal Server Error", + "status": 500, + "detail": "An unexpected error occurred.", + "instance": "/api/users", + "traceId": "ab12cd34ef56" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Server error + tags: + - Esports + put: + operationId: updateGame + parameters: + - in: path + name: game + required: true + schema: + type: string + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/UpdateGameRequest' + required: true + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/GameResponse' + description: OK + '400': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Bad Request", + "status": 400, + "detail": "Validation failed for request.", + "instance": "/api/users", + "errors": [ + { + "objectName": "createUserRequest", + "field": "email", + "message": "must be a well-formed email address", + "code": "Email" + }, + { + "objectName": "createUserRequest", + "field": "age", + "message": "must be greater than or equal to 0", + "code": "Min" + } + ], + "traceId": "a8c0c4e5f1c24a7e" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Validation error + '401': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Unauthorized", + "status": 401, + "detail": "Full authentication is required to access this resource", + "instance": "/api/users", + "traceId": "401401401401" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Unauthorized + '403': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Forbidden", + "status": 403, + "detail": "Access is denied", + "instance": "/api/users", + "traceId": "403403403403" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Forbidden (access denied) + '404': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Not Found", + "status": 404, + "detail": "User not found with id: 42", + "instance": "/api/users/42", + "traceId": "cdef1234abcd5678" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Not Found + '500': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Internal Server Error", + "status": 500, + "detail": "An unexpected error occurred.", + "instance": "/api/users", + "traceId": "ab12cd34ef56" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Server error + tags: + - Esports + /esports/games/{game}/contents: + get: + operationId: findGameContents + parameters: + - in: path + name: game + required: true + schema: + type: string + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/GameContentsResponse' + description: OK + '400': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Bad Request", + "status": 400, + "detail": "Validation failed for request.", + "instance": "/api/users", + "errors": [ + { + "objectName": "createUserRequest", + "field": "email", + "message": "must be a well-formed email address", + "code": "Email" + }, + { + "objectName": "createUserRequest", + "field": "age", + "message": "must be greater than or equal to 0", + "code": "Min" + } + ], + "traceId": "a8c0c4e5f1c24a7e" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Validation error + '401': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Unauthorized", + "status": 401, + "detail": "Full authentication is required to access this resource", + "instance": "/api/users", + "traceId": "401401401401" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Unauthorized + '403': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Forbidden", + "status": 403, + "detail": "Access is denied", + "instance": "/api/users", + "traceId": "403403403403" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Forbidden (access denied) + '404': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Not Found", + "status": 404, + "detail": "User not found with id: 42", + "instance": "/api/users/42", + "traceId": "cdef1234abcd5678" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Not Found + '500': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Internal Server Error", + "status": 500, + "detail": "An unexpected error occurred.", + "instance": "/api/users", + "traceId": "ab12cd34ef56" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Server error + tags: + - Esports + /esports/roster/{id}: + delete: + operationId: removeRosterEntry + parameters: + - in: path + name: id + required: true + schema: + format: int64 + type: integer + responses: + '204': + description: No Content + '400': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Bad Request", + "status": 400, + "detail": "Validation failed for request.", + "instance": "/api/users", + "errors": [ + { + "objectName": "createUserRequest", + "field": "email", + "message": "must be a well-formed email address", + "code": "Email" + }, + { + "objectName": "createUserRequest", + "field": "age", + "message": "must be greater than or equal to 0", + "code": "Min" + } + ], + "traceId": "a8c0c4e5f1c24a7e" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Validation error + '401': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Unauthorized", + "status": 401, + "detail": "Full authentication is required to access this resource", + "instance": "/api/users", + "traceId": "401401401401" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Unauthorized + '403': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Forbidden", + "status": 403, + "detail": "Access is denied", + "instance": "/api/users", + "traceId": "403403403403" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Forbidden (access denied) + '404': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Not Found", + "status": 404, + "detail": "User not found with id: 42", + "instance": "/api/users/42", + "traceId": "cdef1234abcd5678" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Not Found + '500': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Internal Server Error", + "status": 500, + "detail": "An unexpected error occurred.", + "instance": "/api/users", + "traceId": "ab12cd34ef56" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Server error + tags: + - Esports + put: + operationId: updateRosterEntry + parameters: + - in: path + name: id + required: true + schema: + format: int64 + type: integer + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/UpdateRosterEntryRequest' + required: true + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/RosterEntryResponse' + description: OK + '400': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Bad Request", + "status": 400, + "detail": "Validation failed for request.", + "instance": "/api/users", + "errors": [ + { + "objectName": "createUserRequest", + "field": "email", + "message": "must be a well-formed email address", + "code": "Email" + }, + { + "objectName": "createUserRequest", + "field": "age", + "message": "must be greater than or equal to 0", + "code": "Min" + } + ], + "traceId": "a8c0c4e5f1c24a7e" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Validation error + '401': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Unauthorized", + "status": 401, + "detail": "Full authentication is required to access this resource", + "instance": "/api/users", + "traceId": "401401401401" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Unauthorized + '403': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Forbidden", + "status": 403, + "detail": "Access is denied", + "instance": "/api/users", + "traceId": "403403403403" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Forbidden (access denied) + '404': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Not Found", + "status": 404, + "detail": "User not found with id: 42", + "instance": "/api/users/42", + "traceId": "cdef1234abcd5678" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Not Found + '500': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Internal Server Error", + "status": 500, + "detail": "An unexpected error occurred.", + "instance": "/api/users", + "traceId": "ab12cd34ef56" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Server error + tags: + - Esports + /esports/roster/{id}/member: + put: + operationId: linkRosterEntry + parameters: + - in: path + name: id + required: true + schema: + format: int64 + type: integer + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/LinkRosterEntryRequest' + required: true + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/RosterEntryResponse' + description: OK + '400': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Bad Request", + "status": 400, + "detail": "Validation failed for request.", + "instance": "/api/users", + "errors": [ + { + "objectName": "createUserRequest", + "field": "email", + "message": "must be a well-formed email address", + "code": "Email" + }, + { + "objectName": "createUserRequest", + "field": "age", + "message": "must be greater than or equal to 0", + "code": "Min" + } + ], + "traceId": "a8c0c4e5f1c24a7e" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Validation error + '401': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Unauthorized", + "status": 401, + "detail": "Full authentication is required to access this resource", + "instance": "/api/users", + "traceId": "401401401401" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Unauthorized + '403': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Forbidden", + "status": 403, + "detail": "Access is denied", + "instance": "/api/users", + "traceId": "403403403403" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Forbidden (access denied) + '404': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Not Found", + "status": 404, + "detail": "User not found with id: 42", + "instance": "/api/users/42", + "traceId": "cdef1234abcd5678" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Not Found + '500': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Internal Server Error", + "status": 500, + "detail": "An unexpected error occurred.", + "instance": "/api/users", + "traceId": "ab12cd34ef56" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Server error + tags: + - Esports + /esports/seasons: + get: + operationId: findSeasons + responses: + '200': + content: + application/json: + schema: + items: + $ref: '#/components/schemas/SeasonResponse' + type: array + description: OK + '400': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Bad Request", + "status": 400, + "detail": "Validation failed for request.", + "instance": "/api/users", + "errors": [ + { + "objectName": "createUserRequest", + "field": "email", + "message": "must be a well-formed email address", + "code": "Email" + }, + { + "objectName": "createUserRequest", + "field": "age", + "message": "must be greater than or equal to 0", + "code": "Min" + } + ], + "traceId": "a8c0c4e5f1c24a7e" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Validation error + '401': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Unauthorized", + "status": 401, + "detail": "Full authentication is required to access this resource", + "instance": "/api/users", + "traceId": "401401401401" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Unauthorized + '403': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Forbidden", + "status": 403, + "detail": "Access is denied", + "instance": "/api/users", + "traceId": "403403403403" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Forbidden (access denied) + '404': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Not Found", + "status": 404, + "detail": "User not found with id: 42", + "instance": "/api/users/42", + "traceId": "cdef1234abcd5678" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Not Found + '500': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Internal Server Error", + "status": 500, + "detail": "An unexpected error occurred.", + "instance": "/api/users", + "traceId": "ab12cd34ef56" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Server error + tags: + - Esports + post: + operationId: createSeason + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/SeasonRequest' + required: true + responses: + '201': + content: + application/json: + schema: + $ref: '#/components/schemas/SeasonResponse' + description: Created + '400': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Bad Request", + "status": 400, + "detail": "Validation failed for request.", + "instance": "/api/users", + "errors": [ + { + "objectName": "createUserRequest", + "field": "email", + "message": "must be a well-formed email address", + "code": "Email" + }, + { + "objectName": "createUserRequest", + "field": "age", + "message": "must be greater than or equal to 0", + "code": "Min" + } + ], + "traceId": "a8c0c4e5f1c24a7e" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Validation error + '401': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Unauthorized", + "status": 401, + "detail": "Full authentication is required to access this resource", + "instance": "/api/users", + "traceId": "401401401401" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Unauthorized + '403': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Forbidden", + "status": 403, + "detail": "Access is denied", + "instance": "/api/users", + "traceId": "403403403403" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Forbidden (access denied) + '404': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Not Found", + "status": 404, + "detail": "User not found with id: 42", + "instance": "/api/users/42", + "traceId": "cdef1234abcd5678" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Not Found + '500': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Internal Server Error", + "status": 500, + "detail": "An unexpected error occurred.", + "instance": "/api/users", + "traceId": "ab12cd34ef56" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Server error + tags: + - Esports + /esports/seasons/{id}: + delete: + operationId: deleteSeason + parameters: + - in: path + name: id + required: true + schema: + format: int64 + type: integer + responses: + '204': + description: No Content + '400': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Bad Request", + "status": 400, + "detail": "Validation failed for request.", + "instance": "/api/users", + "errors": [ + { + "objectName": "createUserRequest", + "field": "email", + "message": "must be a well-formed email address", + "code": "Email" + }, + { + "objectName": "createUserRequest", + "field": "age", + "message": "must be greater than or equal to 0", + "code": "Min" + } + ], + "traceId": "a8c0c4e5f1c24a7e" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Validation error + '401': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Unauthorized", + "status": 401, + "detail": "Full authentication is required to access this resource", + "instance": "/api/users", + "traceId": "401401401401" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Unauthorized + '403': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Forbidden", + "status": 403, + "detail": "Access is denied", + "instance": "/api/users", + "traceId": "403403403403" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Forbidden (access denied) + '404': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Not Found", + "status": 404, + "detail": "User not found with id: 42", + "instance": "/api/users/42", + "traceId": "cdef1234abcd5678" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Not Found + '500': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Internal Server Error", + "status": 500, + "detail": "An unexpected error occurred.", + "instance": "/api/users", + "traceId": "ab12cd34ef56" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Server error + tags: + - Esports + put: + operationId: updateSeason + parameters: + - in: path + name: id + required: true + schema: + format: int64 + type: integer + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/SeasonRequest' + required: true + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/SeasonResponse' + description: OK + '400': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Bad Request", + "status": 400, + "detail": "Validation failed for request.", + "instance": "/api/users", + "errors": [ + { + "objectName": "createUserRequest", + "field": "email", + "message": "must be a well-formed email address", + "code": "Email" + }, + { + "objectName": "createUserRequest", + "field": "age", + "message": "must be greater than or equal to 0", + "code": "Min" + } + ], + "traceId": "a8c0c4e5f1c24a7e" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Validation error + '401': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Unauthorized", + "status": 401, + "detail": "Full authentication is required to access this resource", + "instance": "/api/users", + "traceId": "401401401401" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Unauthorized + '403': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Forbidden", + "status": 403, + "detail": "Access is denied", + "instance": "/api/users", + "traceId": "403403403403" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Forbidden (access denied) + '404': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Not Found", + "status": 404, + "detail": "User not found with id: 42", + "instance": "/api/users/42", + "traceId": "cdef1234abcd5678" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Not Found + '500': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Internal Server Error", + "status": 500, + "detail": "An unexpected error occurred.", + "instance": "/api/users", + "traceId": "ab12cd34ef56" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Server error + tags: + - Esports + /esports/seasons/{id}/contents: + get: + operationId: findSeasonContents + parameters: + - in: path + name: id + required: true + schema: + format: int64 + type: integer + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/SeasonContentsResponse' + description: OK + '400': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Bad Request", + "status": 400, + "detail": "Validation failed for request.", + "instance": "/api/users", + "errors": [ + { + "objectName": "createUserRequest", + "field": "email", + "message": "must be a well-formed email address", + "code": "Email" + }, + { + "objectName": "createUserRequest", + "field": "age", + "message": "must be greater than or equal to 0", + "code": "Min" + } + ], + "traceId": "a8c0c4e5f1c24a7e" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Validation error + '401': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Unauthorized", + "status": 401, + "detail": "Full authentication is required to access this resource", + "instance": "/api/users", + "traceId": "401401401401" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Unauthorized + '403': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Forbidden", + "status": 403, + "detail": "Access is denied", + "instance": "/api/users", + "traceId": "403403403403" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Forbidden (access denied) + '404': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Not Found", + "status": 404, + "detail": "User not found with id: 42", + "instance": "/api/users/42", + "traceId": "cdef1234abcd5678" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Not Found + '500': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Internal Server Error", + "status": 500, + "detail": "An unexpected error occurred.", + "instance": "/api/users", + "traceId": "ab12cd34ef56" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Server error + tags: + - Esports + /esports/seasons/{seasonId}/games: + get: + operationId: findSeasonGames + parameters: + - in: path + name: seasonId + required: true + schema: + format: int64 + type: integer + responses: + '200': + content: + application/json: + schema: + items: + $ref: '#/components/schemas/SeasonGameResponse' + type: array + description: OK + '400': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Bad Request", + "status": 400, + "detail": "Validation failed for request.", + "instance": "/api/users", + "errors": [ + { + "objectName": "createUserRequest", + "field": "email", + "message": "must be a well-formed email address", + "code": "Email" + }, + { + "objectName": "createUserRequest", + "field": "age", + "message": "must be greater than or equal to 0", + "code": "Min" + } + ], + "traceId": "a8c0c4e5f1c24a7e" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Validation error + '401': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Unauthorized", + "status": 401, + "detail": "Full authentication is required to access this resource", + "instance": "/api/users", + "traceId": "401401401401" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Unauthorized + '403': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Forbidden", + "status": 403, + "detail": "Access is denied", + "instance": "/api/users", + "traceId": "403403403403" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Forbidden (access denied) + '404': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Not Found", + "status": 404, + "detail": "User not found with id: 42", + "instance": "/api/users/42", + "traceId": "cdef1234abcd5678" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Not Found + '500': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Internal Server Error", + "status": 500, + "detail": "An unexpected error occurred.", + "instance": "/api/users", + "traceId": "ab12cd34ef56" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Server error + tags: + - Esports + /esports/seasons/{seasonId}/games/{game}: + delete: + operationId: leaveGame + parameters: + - in: path + name: seasonId + required: true + schema: + format: int64 + type: integer + - in: path + name: game + required: true + schema: + type: string + responses: + '204': + description: No Content + '400': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Bad Request", + "status": 400, + "detail": "Validation failed for request.", + "instance": "/api/users", + "errors": [ + { + "objectName": "createUserRequest", + "field": "email", + "message": "must be a well-formed email address", + "code": "Email" + }, + { + "objectName": "createUserRequest", + "field": "age", + "message": "must be greater than or equal to 0", + "code": "Min" + } + ], + "traceId": "a8c0c4e5f1c24a7e" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Validation error + '401': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Unauthorized", + "status": 401, + "detail": "Full authentication is required to access this resource", + "instance": "/api/users", + "traceId": "401401401401" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Unauthorized + '403': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Forbidden", + "status": 403, + "detail": "Access is denied", + "instance": "/api/users", + "traceId": "403403403403" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Forbidden (access denied) + '404': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Not Found", + "status": 404, + "detail": "User not found with id: 42", + "instance": "/api/users/42", + "traceId": "cdef1234abcd5678" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Not Found + '500': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Internal Server Error", + "status": 500, + "detail": "An unexpected error occurred.", + "instance": "/api/users", + "traceId": "ab12cd34ef56" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Server error + tags: + - Esports + put: + operationId: enterGame + parameters: + - in: path + name: seasonId + required: true + schema: + format: int64 + type: integer + - in: path + name: game + required: true + schema: + type: string + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/SeasonGameResponse' + description: OK + '400': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Bad Request", + "status": 400, + "detail": "Validation failed for request.", + "instance": "/api/users", + "errors": [ + { + "objectName": "createUserRequest", + "field": "email", + "message": "must be a well-formed email address", + "code": "Email" + }, + { + "objectName": "createUserRequest", + "field": "age", + "message": "must be greater than or equal to 0", + "code": "Min" + } + ], + "traceId": "a8c0c4e5f1c24a7e" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Validation error + '401': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Unauthorized", + "status": 401, + "detail": "Full authentication is required to access this resource", + "instance": "/api/users", + "traceId": "401401401401" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Unauthorized + '403': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Forbidden", + "status": 403, + "detail": "Access is denied", + "instance": "/api/users", + "traceId": "403403403403" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Forbidden (access denied) + '404': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Not Found", + "status": 404, + "detail": "User not found with id: 42", + "instance": "/api/users/42", + "traceId": "cdef1234abcd5678" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Not Found + '500': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Internal Server Error", + "status": 500, + "detail": "An unexpected error occurred.", + "instance": "/api/users", + "traceId": "ab12cd34ef56" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Server error + tags: + - Esports + /esports/seasons/{seasonId}/teams/{teamId}: + delete: + operationId: unfieldTeam + parameters: + - in: path + name: seasonId + required: true + schema: + format: int64 + type: integer + - in: path + name: teamId + required: true + schema: + format: int64 + type: integer + - in: query + name: game + required: true + schema: + type: string + responses: + '204': + description: No Content + '400': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Bad Request", + "status": 400, + "detail": "Validation failed for request.", + "instance": "/api/users", + "errors": [ + { + "objectName": "createUserRequest", + "field": "email", + "message": "must be a well-formed email address", + "code": "Email" + }, + { + "objectName": "createUserRequest", + "field": "age", + "message": "must be greater than or equal to 0", + "code": "Min" + } + ], + "traceId": "a8c0c4e5f1c24a7e" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Validation error + '401': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Unauthorized", + "status": 401, + "detail": "Full authentication is required to access this resource", + "instance": "/api/users", + "traceId": "401401401401" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Unauthorized + '403': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Forbidden", + "status": 403, + "detail": "Access is denied", + "instance": "/api/users", + "traceId": "403403403403" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Forbidden (access denied) + '404': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Not Found", + "status": 404, + "detail": "User not found with id: 42", + "instance": "/api/users/42", + "traceId": "cdef1234abcd5678" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Not Found + '500': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Internal Server Error", + "status": 500, + "detail": "An unexpected error occurred.", + "instance": "/api/users", + "traceId": "ab12cd34ef56" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Server error + tags: + - Esports + put: + operationId: fieldTeam + parameters: + - in: path + name: seasonId + required: true + schema: + format: int64 + type: integer + - in: path + name: teamId + required: true + schema: + format: int64 + type: integer + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/FieldTeamRequest' + required: true + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/FieldedTeamResponse' + description: OK + '400': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Bad Request", + "status": 400, + "detail": "Validation failed for request.", + "instance": "/api/users", + "errors": [ + { + "objectName": "createUserRequest", + "field": "email", + "message": "must be a well-formed email address", + "code": "Email" + }, + { + "objectName": "createUserRequest", + "field": "age", + "message": "must be greater than or equal to 0", + "code": "Min" + } + ], + "traceId": "a8c0c4e5f1c24a7e" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Validation error + '401': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Unauthorized", + "status": 401, + "detail": "Full authentication is required to access this resource", + "instance": "/api/users", + "traceId": "401401401401" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Unauthorized + '403': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Forbidden", + "status": 403, + "detail": "Access is denied", + "instance": "/api/users", + "traceId": "403403403403" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Forbidden (access denied) + '404': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Not Found", + "status": 404, + "detail": "User not found with id: 42", + "instance": "/api/users/42", + "traceId": "cdef1234abcd5678" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Not Found + '500': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Internal Server Error", + "status": 500, + "detail": "An unexpected error occurred.", + "instance": "/api/users", + "traceId": "ab12cd34ef56" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Server error + tags: + - Esports + /esports/teams: + get: + operationId: findTeams + responses: + '200': + content: + application/json: + schema: + items: + $ref: '#/components/schemas/TeamResponse' + type: array + description: OK + '400': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Bad Request", + "status": 400, + "detail": "Validation failed for request.", + "instance": "/api/users", + "errors": [ + { + "objectName": "createUserRequest", + "field": "email", + "message": "must be a well-formed email address", + "code": "Email" + }, + { + "objectName": "createUserRequest", + "field": "age", + "message": "must be greater than or equal to 0", + "code": "Min" + } + ], + "traceId": "a8c0c4e5f1c24a7e" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Validation error + '401': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Unauthorized", + "status": 401, + "detail": "Full authentication is required to access this resource", + "instance": "/api/users", + "traceId": "401401401401" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Unauthorized + '403': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Forbidden", + "status": 403, + "detail": "Access is denied", + "instance": "/api/users", + "traceId": "403403403403" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Forbidden (access denied) + '404': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Not Found", + "status": 404, + "detail": "User not found with id: 42", + "instance": "/api/users/42", + "traceId": "cdef1234abcd5678" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Not Found + '500': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Internal Server Error", + "status": 500, + "detail": "An unexpected error occurred.", + "instance": "/api/users", + "traceId": "ab12cd34ef56" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Server error + tags: + - Esports + post: + operationId: createTeam + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/CreateTeamRequest' + required: true + responses: + '201': + content: + application/json: + schema: + $ref: '#/components/schemas/TeamResponse' + description: Created + '400': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Bad Request", + "status": 400, + "detail": "Validation failed for request.", + "instance": "/api/users", + "errors": [ + { + "objectName": "createUserRequest", + "field": "email", + "message": "must be a well-formed email address", + "code": "Email" + }, + { + "objectName": "createUserRequest", + "field": "age", + "message": "must be greater than or equal to 0", + "code": "Min" + } + ], + "traceId": "a8c0c4e5f1c24a7e" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Validation error + '401': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Unauthorized", + "status": 401, + "detail": "Full authentication is required to access this resource", + "instance": "/api/users", + "traceId": "401401401401" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Unauthorized + '403': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Forbidden", + "status": 403, + "detail": "Access is denied", + "instance": "/api/users", + "traceId": "403403403403" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Forbidden (access denied) + '404': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Not Found", + "status": 404, + "detail": "User not found with id: 42", + "instance": "/api/users/42", + "traceId": "cdef1234abcd5678" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Not Found + '500': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Internal Server Error", + "status": 500, + "detail": "An unexpected error occurred.", + "instance": "/api/users", + "traceId": "ab12cd34ef56" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Server error + tags: + - Esports + /esports/teams/{id}: + delete: + operationId: deleteTeam + parameters: + - in: path + name: id + required: true + schema: + format: int64 + type: integer + responses: + '204': + description: No Content + '400': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Bad Request", + "status": 400, + "detail": "Validation failed for request.", + "instance": "/api/users", + "errors": [ + { + "objectName": "createUserRequest", + "field": "email", + "message": "must be a well-formed email address", + "code": "Email" + }, + { + "objectName": "createUserRequest", + "field": "age", + "message": "must be greater than or equal to 0", + "code": "Min" + } + ], + "traceId": "a8c0c4e5f1c24a7e" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Validation error + '401': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Unauthorized", + "status": 401, + "detail": "Full authentication is required to access this resource", + "instance": "/api/users", + "traceId": "401401401401" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Unauthorized + '403': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Forbidden", + "status": 403, + "detail": "Access is denied", + "instance": "/api/users", + "traceId": "403403403403" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Forbidden (access denied) + '404': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Not Found", + "status": 404, + "detail": "User not found with id: 42", + "instance": "/api/users/42", + "traceId": "cdef1234abcd5678" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Not Found + '500': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Internal Server Error", + "status": 500, + "detail": "An unexpected error occurred.", + "instance": "/api/users", + "traceId": "ab12cd34ef56" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Server error + tags: + - Esports + put: + operationId: updateTeam + parameters: + - in: path + name: id + required: true + schema: + format: int64 + type: integer + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/UpdateTeamRequest' + required: true + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/TeamResponse' + description: OK + '400': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Bad Request", + "status": 400, + "detail": "Validation failed for request.", + "instance": "/api/users", + "errors": [ + { + "objectName": "createUserRequest", + "field": "email", + "message": "must be a well-formed email address", + "code": "Email" + }, + { + "objectName": "createUserRequest", + "field": "age", + "message": "must be greater than or equal to 0", + "code": "Min" + } + ], + "traceId": "a8c0c4e5f1c24a7e" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Validation error + '401': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Unauthorized", + "status": 401, + "detail": "Full authentication is required to access this resource", + "instance": "/api/users", + "traceId": "401401401401" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Unauthorized + '403': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Forbidden", + "status": 403, + "detail": "Access is denied", + "instance": "/api/users", + "traceId": "403403403403" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Forbidden (access denied) + '404': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Not Found", + "status": 404, + "detail": "User not found with id: 42", + "instance": "/api/users/42", + "traceId": "cdef1234abcd5678" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Not Found + '500': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Internal Server Error", + "status": 500, + "detail": "An unexpected error occurred.", + "instance": "/api/users", + "traceId": "ab12cd34ef56" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Server error + tags: + - Esports + /esports/teams/{teamId}/roster: + get: + operationId: findRoster + parameters: + - in: path + name: teamId + required: true + schema: + format: int64 + type: integer + - in: query + name: game + required: true + schema: + type: string + - in: query + name: seasonId + required: true + schema: + format: int64 + type: integer + responses: + '200': + content: + application/json: + schema: + items: + $ref: '#/components/schemas/RosterEntryResponse' + type: array + description: OK + '400': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Bad Request", + "status": 400, + "detail": "Validation failed for request.", + "instance": "/api/users", + "errors": [ + { + "objectName": "createUserRequest", + "field": "email", + "message": "must be a well-formed email address", + "code": "Email" + }, + { + "objectName": "createUserRequest", + "field": "age", + "message": "must be greater than or equal to 0", + "code": "Min" + } + ], + "traceId": "a8c0c4e5f1c24a7e" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Validation error + '401': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Unauthorized", + "status": 401, + "detail": "Full authentication is required to access this resource", + "instance": "/api/users", + "traceId": "401401401401" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Unauthorized + '403': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Forbidden", + "status": 403, + "detail": "Access is denied", + "instance": "/api/users", + "traceId": "403403403403" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Forbidden (access denied) + '404': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Not Found", + "status": 404, + "detail": "User not found with id: 42", + "instance": "/api/users/42", + "traceId": "cdef1234abcd5678" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Not Found + '500': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Internal Server Error", + "status": 500, + "detail": "An unexpected error occurred.", + "instance": "/api/users", + "traceId": "ab12cd34ef56" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Server error + tags: + - Esports + post: + operationId: addRosterEntry + parameters: + - in: path + name: teamId + required: true + schema: + format: int64 + type: integer + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/AddRosterEntryRequest' + required: true + responses: + '201': + content: + application/json: + schema: + $ref: '#/components/schemas/RosterEntryResponse' + description: Created + '400': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Bad Request", + "status": 400, + "detail": "Validation failed for request.", + "instance": "/api/users", + "errors": [ + { + "objectName": "createUserRequest", + "field": "email", + "message": "must be a well-formed email address", + "code": "Email" + }, + { + "objectName": "createUserRequest", + "field": "age", + "message": "must be greater than or equal to 0", + "code": "Min" + } + ], + "traceId": "a8c0c4e5f1c24a7e" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Validation error + '401': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Unauthorized", + "status": 401, + "detail": "Full authentication is required to access this resource", + "instance": "/api/users", + "traceId": "401401401401" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Unauthorized + '403': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Forbidden", + "status": 403, + "detail": "Access is denied", + "instance": "/api/users", + "traceId": "403403403403" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Forbidden (access denied) + '404': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Not Found", + "status": 404, + "detail": "User not found with id: 42", + "instance": "/api/users/42", + "traceId": "cdef1234abcd5678" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Not Found + '500': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Internal Server Error", + "status": 500, + "detail": "An unexpected error occurred.", + "instance": "/api/users", + "traceId": "ab12cd34ef56" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Server error + tags: + - Esports + /esports/teams/{teamId}/seasons: + get: + operationId: findTeamSeasons + parameters: + - in: path + name: teamId + required: true + schema: + format: int64 + type: integer + responses: + '200': + content: + application/json: + schema: + items: + $ref: '#/components/schemas/FieldingResponse' + type: array + description: OK + '400': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Bad Request", + "status": 400, + "detail": "Validation failed for request.", + "instance": "/api/users", + "errors": [ + { + "objectName": "createUserRequest", + "field": "email", + "message": "must be a well-formed email address", + "code": "Email" + }, + { + "objectName": "createUserRequest", + "field": "age", + "message": "must be greater than or equal to 0", + "code": "Min" + } + ], + "traceId": "a8c0c4e5f1c24a7e" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Validation error + '401': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Unauthorized", + "status": 401, + "detail": "Full authentication is required to access this resource", + "instance": "/api/users", + "traceId": "401401401401" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Unauthorized + '403': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Forbidden", + "status": 403, + "detail": "Access is denied", + "instance": "/api/users", + "traceId": "403403403403" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Forbidden (access denied) + '404': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Not Found", + "status": 404, + "detail": "User not found with id: 42", + "instance": "/api/users/42", + "traceId": "cdef1234abcd5678" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Not Found + '500': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Internal Server Error", + "status": 500, + "detail": "An unexpected error occurred.", + "instance": "/api/users", + "traceId": "ab12cd34ef56" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Server error + tags: + - Esports + /events: + get: + operationId: findEvents + parameters: + - description: Zero-based page index (0..N) + in: query + name: page + required: false + schema: + default: 0 + minimum: 0 + type: integer + - description: The size of the page to be returned + in: query + name: size + required: false + schema: + default: 20 + minimum: 1 + type: integer + - description: 'Sorting criteria in the format: property,(asc|desc). Default sort order is ascending. Multiple sort criteria are supported.' + in: query + name: sort + required: false + schema: + items: + type: string + type: array + - in: query + name: from + required: false + schema: + format: date-time + type: string + - in: query + name: to + required: false + schema: + format: date-time + type: string + - in: query + name: approved + required: false + schema: + type: boolean + - in: query + name: committeeId + required: false + schema: + format: int64 + type: integer + - in: query + name: titleContains + required: false + schema: + type: string + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/PagedModelEventResponse' + description: OK + '400': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Bad Request", + "status": 400, + "detail": "Validation failed for request.", + "instance": "/api/users", + "errors": [ + { + "objectName": "createUserRequest", + "field": "email", + "message": "must be a well-formed email address", + "code": "Email" + }, + { + "objectName": "createUserRequest", + "field": "age", + "message": "must be greater than or equal to 0", + "code": "Min" + } + ], + "traceId": "a8c0c4e5f1c24a7e" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Validation error + '401': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Unauthorized", + "status": 401, + "detail": "Full authentication is required to access this resource", + "instance": "/api/users", + "traceId": "401401401401" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Unauthorized + '403': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Forbidden", + "status": 403, + "detail": "Access is denied", + "instance": "/api/users", + "traceId": "403403403403" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Forbidden (access denied) + '404': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Not Found", + "status": 404, + "detail": "User not found with id: 42", + "instance": "/api/users/42", + "traceId": "cdef1234abcd5678" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Not Found + '500': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Internal Server Error", + "status": 500, + "detail": "An unexpected error occurred.", + "instance": "/api/users", + "traceId": "ab12cd34ef56" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Server error + tags: + - Events + post: + operationId: createEvent + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/CreateEventRequest' + required: true + responses: + '201': + content: + application/json: + schema: + $ref: '#/components/schemas/EventResponse' + description: Created + '400': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Bad Request", + "status": 400, + "detail": "Validation failed for request.", + "instance": "/api/users", + "errors": [ + { + "objectName": "createUserRequest", + "field": "email", + "message": "must be a well-formed email address", + "code": "Email" + }, + { + "objectName": "createUserRequest", + "field": "age", + "message": "must be greater than or equal to 0", + "code": "Min" + } + ], + "traceId": "a8c0c4e5f1c24a7e" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Validation error + '401': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Unauthorized", + "status": 401, + "detail": "Full authentication is required to access this resource", + "instance": "/api/users", + "traceId": "401401401401" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Unauthorized + '403': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Forbidden", + "status": 403, + "detail": "Access is denied", + "instance": "/api/users", + "traceId": "403403403403" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Forbidden (access denied) + '404': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Not Found", + "status": 404, + "detail": "User not found with id: 42", + "instance": "/api/users/42", + "traceId": "cdef1234abcd5678" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Not Found + '500': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Internal Server Error", + "status": 500, + "detail": "An unexpected error occurred.", + "instance": "/api/users", + "traceId": "ab12cd34ef56" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Server error + tags: + - Events + /events/banners: + post: + operationId: uploadEventBanner + requestBody: + content: + multipart/form-data: + schema: + properties: + file: + format: binary + type: string + required: + - file + type: object + required: true + responses: + '201': + content: + application/json: + schema: + $ref: '#/components/schemas/FileResponse' + description: Created + '400': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Bad Request", + "status": 400, + "detail": "Validation failed for request.", + "instance": "/api/users", + "errors": [ + { + "objectName": "createUserRequest", + "field": "email", + "message": "must be a well-formed email address", + "code": "Email" + }, + { + "objectName": "createUserRequest", + "field": "age", + "message": "must be greater than or equal to 0", + "code": "Min" + } + ], + "traceId": "a8c0c4e5f1c24a7e" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Validation error + '401': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Unauthorized", + "status": 401, + "detail": "Full authentication is required to access this resource", + "instance": "/api/users", + "traceId": "401401401401" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Unauthorized + '403': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Forbidden", + "status": 403, + "detail": "Access is denied", + "instance": "/api/users", + "traceId": "403403403403" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Forbidden (access denied) + '404': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Not Found", + "status": 404, + "detail": "User not found with id: 42", + "instance": "/api/users/42", + "traceId": "cdef1234abcd5678" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Not Found + '500': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Internal Server Error", + "status": 500, + "detail": "An unexpected error occurred.", + "instance": "/api/users", + "traceId": "ab12cd34ef56" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Server error + tags: + - Files + /events/signups: + get: + operationId: findEventSignUps + parameters: + - in: query + name: from + required: false + schema: + format: date-time + type: string + - in: query + name: to + required: false + schema: + format: date-time + type: string + - in: query + name: userId + required: false + schema: + format: int64 + type: integer + - in: query + name: committeeId + required: false + schema: + format: int64 + type: integer + - in: query + name: approved + required: false + schema: + type: boolean + - in: query + name: eventId + required: false + schema: + format: int64 + type: integer + responses: + '200': + content: + application/json: + schema: + items: + $ref: '#/components/schemas/EventSignUpResponse' + type: array + description: OK + '400': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Bad Request", + "status": 400, + "detail": "Validation failed for request.", + "instance": "/api/users", + "errors": [ + { + "objectName": "createUserRequest", + "field": "email", + "message": "must be a well-formed email address", + "code": "Email" + }, + { + "objectName": "createUserRequest", + "field": "age", + "message": "must be greater than or equal to 0", + "code": "Min" + } + ], + "traceId": "a8c0c4e5f1c24a7e" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Validation error + '401': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Unauthorized", + "status": 401, + "detail": "Full authentication is required to access this resource", + "instance": "/api/users", + "traceId": "401401401401" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Unauthorized + '403': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Forbidden", + "status": 403, + "detail": "Access is denied", + "instance": "/api/users", + "traceId": "403403403403" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Forbidden (access denied) + '404': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Not Found", + "status": 404, + "detail": "User not found with id: 42", + "instance": "/api/users/42", + "traceId": "cdef1234abcd5678" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Not Found + '500': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Internal Server Error", + "status": 500, + "detail": "An unexpected error occurred.", + "instance": "/api/users", + "traceId": "ab12cd34ef56" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Server error + tags: + - EventSignUps + /events/signups/byAccessToken: + get: + operationId: findEventSignUpsByAccessToken + parameters: + - in: header + name: X-Guest-Access-Token + required: true + schema: + type: string + responses: + '200': + content: + application/json: + schema: + items: + $ref: '#/components/schemas/EventSignUpResponse' + type: array + description: OK + '400': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Bad Request", + "status": 400, + "detail": "Validation failed for request.", + "instance": "/api/users", + "errors": [ + { + "objectName": "createUserRequest", + "field": "email", + "message": "must be a well-formed email address", + "code": "Email" + }, + { + "objectName": "createUserRequest", + "field": "age", + "message": "must be greater than or equal to 0", + "code": "Min" + } + ], + "traceId": "a8c0c4e5f1c24a7e" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Validation error + '401': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Unauthorized", + "status": 401, + "detail": "Full authentication is required to access this resource", + "instance": "/api/users", + "traceId": "401401401401" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Unauthorized + '403': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Forbidden", + "status": 403, + "detail": "Access is denied", + "instance": "/api/users", + "traceId": "403403403403" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Forbidden (access denied) + '404': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Not Found", + "status": 404, + "detail": "User not found with id: 42", + "instance": "/api/users/42", + "traceId": "cdef1234abcd5678" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Not Found + '500': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Internal Server Error", + "status": 500, + "detail": "An unexpected error occurred.", + "instance": "/api/users", + "traceId": "ab12cd34ef56" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Server error + tags: + - EventSignUps + /events/signups/{id}: + delete: + operationId: deleteEventSignup + parameters: + - in: path + name: id + required: true + schema: + format: int64 + type: integer + - in: header + name: X-Guest-Access-Token + required: false + schema: + type: string + responses: + '204': + description: No Content + '400': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Bad Request", + "status": 400, + "detail": "Validation failed for request.", + "instance": "/api/users", + "errors": [ + { + "objectName": "createUserRequest", + "field": "email", + "message": "must be a well-formed email address", + "code": "Email" + }, + { + "objectName": "createUserRequest", + "field": "age", + "message": "must be greater than or equal to 0", + "code": "Min" + } + ], + "traceId": "a8c0c4e5f1c24a7e" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Validation error + '401': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Unauthorized", + "status": 401, + "detail": "Full authentication is required to access this resource", + "instance": "/api/users", + "traceId": "401401401401" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Unauthorized + '403': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Forbidden", + "status": 403, + "detail": "Access is denied", + "instance": "/api/users", + "traceId": "403403403403" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Forbidden (access denied) + '404': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Not Found", + "status": 404, + "detail": "User not found with id: 42", + "instance": "/api/users/42", + "traceId": "cdef1234abcd5678" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Not Found + '500': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Internal Server Error", + "status": 500, + "detail": "An unexpected error occurred.", + "instance": "/api/users", + "traceId": "ab12cd34ef56" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Server error + tags: + - EventSignUps + /events/{eventId}: + delete: + operationId: deleteEventById + parameters: + - in: path + name: eventId + required: true + schema: + format: int64 + type: integer + responses: + '204': + description: No Content + '400': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Bad Request", + "status": 400, + "detail": "Validation failed for request.", + "instance": "/api/users", + "errors": [ + { + "objectName": "createUserRequest", + "field": "email", + "message": "must be a well-formed email address", + "code": "Email" + }, + { + "objectName": "createUserRequest", + "field": "age", + "message": "must be greater than or equal to 0", + "code": "Min" + } + ], + "traceId": "a8c0c4e5f1c24a7e" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Validation error + '401': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Unauthorized", + "status": 401, + "detail": "Full authentication is required to access this resource", + "instance": "/api/users", + "traceId": "401401401401" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Unauthorized + '403': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Forbidden", + "status": 403, + "detail": "Access is denied", + "instance": "/api/users", + "traceId": "403403403403" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Forbidden (access denied) + '404': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Not Found", + "status": 404, + "detail": "User not found with id: 42", + "instance": "/api/users/42", + "traceId": "cdef1234abcd5678" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Not Found + '500': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Internal Server Error", + "status": 500, + "detail": "An unexpected error occurred.", + "instance": "/api/users", + "traceId": "ab12cd34ef56" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Server error + tags: + - Events + /events/{eventId}/banners: + get: + operationId: downloadEventBanner + parameters: + - in: path + name: eventId + required: true + schema: + format: int64 + type: integer + responses: + '200': + content: + application/json: + schema: + format: binary + type: string + description: OK + '400': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Bad Request", + "status": 400, + "detail": "Validation failed for request.", + "instance": "/api/users", + "errors": [ + { + "objectName": "createUserRequest", + "field": "email", + "message": "must be a well-formed email address", + "code": "Email" + }, + { + "objectName": "createUserRequest", + "field": "age", + "message": "must be greater than or equal to 0", + "code": "Min" + } + ], + "traceId": "a8c0c4e5f1c24a7e" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Validation error + '401': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Unauthorized", + "status": 401, + "detail": "Full authentication is required to access this resource", + "instance": "/api/users", + "traceId": "401401401401" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Unauthorized + '403': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Forbidden", + "status": 403, + "detail": "Access is denied", + "instance": "/api/users", + "traceId": "403403403403" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Forbidden (access denied) + '404': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Not Found", + "status": 404, + "detail": "User not found with id: 42", + "instance": "/api/users/42", + "traceId": "cdef1234abcd5678" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Not Found + '500': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Internal Server Error", + "status": 500, + "detail": "An unexpected error occurred.", + "instance": "/api/users", + "traceId": "ab12cd34ef56" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Server error + tags: + - Files + /events/{eventId}/signups: + get: + operationId: findEventSignUpsByEventId + parameters: + - in: path + name: eventId + required: true + schema: + format: int64 + type: integer + responses: + '200': + content: + application/json: + schema: + items: + $ref: '#/components/schemas/EventSignUpResponse' + type: array + description: OK + '400': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Bad Request", + "status": 400, + "detail": "Validation failed for request.", + "instance": "/api/users", + "errors": [ + { + "objectName": "createUserRequest", + "field": "email", + "message": "must be a well-formed email address", + "code": "Email" + }, + { + "objectName": "createUserRequest", + "field": "age", + "message": "must be greater than or equal to 0", + "code": "Min" + } + ], + "traceId": "a8c0c4e5f1c24a7e" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Validation error + '401': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Unauthorized", + "status": 401, + "detail": "Full authentication is required to access this resource", + "instance": "/api/users", + "traceId": "401401401401" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Unauthorized + '403': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Forbidden", + "status": 403, + "detail": "Access is denied", + "instance": "/api/users", + "traceId": "403403403403" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Forbidden (access denied) + '404': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Not Found", + "status": 404, + "detail": "User not found with id: 42", + "instance": "/api/users/42", + "traceId": "cdef1234abcd5678" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Not Found + '500': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Internal Server Error", + "status": 500, + "detail": "An unexpected error occurred.", + "instance": "/api/users", + "traceId": "ab12cd34ef56" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Server error + tags: + - EventSignUps + post: + operationId: createEventSignup + parameters: + - in: path + name: eventId + required: true + schema: + format: int64 + type: integer + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/CreateEventSignUpRequest' + required: true + responses: + '201': + content: + application/json: + schema: + $ref: '#/components/schemas/EventSignUpResponse' + description: Created + '400': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Bad Request", + "status": 400, + "detail": "Validation failed for request.", + "instance": "/api/users", + "errors": [ + { + "objectName": "createUserRequest", + "field": "email", + "message": "must be a well-formed email address", + "code": "Email" + }, + { + "objectName": "createUserRequest", + "field": "age", + "message": "must be greater than or equal to 0", + "code": "Min" + } + ], + "traceId": "a8c0c4e5f1c24a7e" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Validation error + '401': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Unauthorized", + "status": 401, + "detail": "Full authentication is required to access this resource", + "instance": "/api/users", + "traceId": "401401401401" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Unauthorized + '403': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Forbidden", + "status": 403, + "detail": "Access is denied", + "instance": "/api/users", + "traceId": "403403403403" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Forbidden (access denied) + '404': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Not Found", + "status": 404, + "detail": "User not found with id: 42", + "instance": "/api/users/42", + "traceId": "cdef1234abcd5678" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Not Found + '500': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Internal Server Error", + "status": 500, + "detail": "An unexpected error occurred.", + "instance": "/api/users", + "traceId": "ab12cd34ef56" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Server error + tags: + - EventSignUps + put: + operationId: updateEventSignUp + parameters: + - in: path + name: eventId + required: true + schema: + format: int64 + type: integer + - in: header + name: X-Guest-Access-Token + required: false + schema: + type: string + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/UpdateEventSignUpRequest' + required: true + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/EventSignUpResponse' + description: OK + '400': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Bad Request", + "status": 400, + "detail": "Validation failed for request.", + "instance": "/api/users", + "errors": [ + { + "objectName": "createUserRequest", + "field": "email", + "message": "must be a well-formed email address", + "code": "Email" + }, + { + "objectName": "createUserRequest", + "field": "age", + "message": "must be greater than or equal to 0", + "code": "Min" + } + ], + "traceId": "a8c0c4e5f1c24a7e" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Validation error + '401': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Unauthorized", + "status": 401, + "detail": "Full authentication is required to access this resource", + "instance": "/api/users", + "traceId": "401401401401" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Unauthorized + '403': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Forbidden", + "status": 403, + "detail": "Access is denied", + "instance": "/api/users", + "traceId": "403403403403" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Forbidden (access denied) + '404': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Not Found", + "status": 404, + "detail": "User not found with id: 42", + "instance": "/api/users/42", + "traceId": "cdef1234abcd5678" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Not Found + '500': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Internal Server Error", + "status": 500, + "detail": "An unexpected error occurred.", + "instance": "/api/users", + "traceId": "ab12cd34ef56" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Server error + tags: + - EventSignUps + /events/{id}: + get: + operationId: findEventById + parameters: + - in: path + name: id + required: true + schema: + format: int64 + type: integer + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/EventResponse' + description: OK + '400': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Bad Request", + "status": 400, + "detail": "Validation failed for request.", + "instance": "/api/users", + "errors": [ + { + "objectName": "createUserRequest", + "field": "email", + "message": "must be a well-formed email address", + "code": "Email" + }, + { + "objectName": "createUserRequest", + "field": "age", + "message": "must be greater than or equal to 0", + "code": "Min" + } + ], + "traceId": "a8c0c4e5f1c24a7e" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Validation error + '401': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Unauthorized", + "status": 401, + "detail": "Full authentication is required to access this resource", + "instance": "/api/users", + "traceId": "401401401401" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Unauthorized + '403': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Forbidden", + "status": 403, + "detail": "Access is denied", + "instance": "/api/users", + "traceId": "403403403403" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Forbidden (access denied) + '404': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Not Found", + "status": 404, + "detail": "User not found with id: 42", + "instance": "/api/users/42", + "traceId": "cdef1234abcd5678" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Not Found + '500': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Internal Server Error", + "status": 500, + "detail": "An unexpected error occurred.", + "instance": "/api/users", + "traceId": "ab12cd34ef56" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Server error + tags: + - Events + put: + operationId: updateEvent + parameters: + - in: path + name: id + required: true + schema: + format: int64 + type: integer + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/UpdateEventRequest' + required: true + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/EventResponse' + description: OK + '400': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Bad Request", + "status": 400, + "detail": "Validation failed for request.", + "instance": "/api/users", + "errors": [ + { + "objectName": "createUserRequest", + "field": "email", + "message": "must be a well-formed email address", + "code": "Email" + }, + { + "objectName": "createUserRequest", + "field": "age", + "message": "must be greater than or equal to 0", + "code": "Min" + } + ], + "traceId": "a8c0c4e5f1c24a7e" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Validation error + '401': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Unauthorized", + "status": 401, + "detail": "Full authentication is required to access this resource", + "instance": "/api/users", + "traceId": "401401401401" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Unauthorized + '403': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Forbidden", + "status": 403, + "detail": "Access is denied", + "instance": "/api/users", + "traceId": "403403403403" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Forbidden (access denied) + '404': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Not Found", + "status": 404, + "detail": "User not found with id: 42", + "instance": "/api/users/42", + "traceId": "cdef1234abcd5678" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Not Found + '500': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Internal Server Error", + "status": 500, + "detail": "An unexpected error occurred.", + "instance": "/api/users", + "traceId": "ab12cd34ef56" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Server error + tags: + - Events + /events/{id}/approve: + put: + operationId: approveEvent + parameters: + - in: path + name: id + required: true + schema: + format: int64 + type: integer + - in: query + name: approved + required: true + schema: + type: boolean + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/EventResponse' + description: OK + '400': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Bad Request", + "status": 400, + "detail": "Validation failed for request.", + "instance": "/api/users", + "errors": [ + { + "objectName": "createUserRequest", + "field": "email", + "message": "must be a well-formed email address", + "code": "Email" + }, + { + "objectName": "createUserRequest", + "field": "age", + "message": "must be greater than or equal to 0", + "code": "Min" + } + ], + "traceId": "a8c0c4e5f1c24a7e" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Validation error + '401': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Unauthorized", + "status": 401, + "detail": "Full authentication is required to access this resource", + "instance": "/api/users", + "traceId": "401401401401" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Unauthorized + '403': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Forbidden", + "status": 403, + "detail": "Access is denied", + "instance": "/api/users", + "traceId": "403403403403" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Forbidden (access denied) + '404': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Not Found", + "status": 404, + "detail": "User not found with id: 42", + "instance": "/api/users/42", + "traceId": "cdef1234abcd5678" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Not Found + '500': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Internal Server Error", + "status": 500, + "detail": "An unexpected error occurred.", + "instance": "/api/users", + "traceId": "ab12cd34ef56" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Server error + tags: + - Events + /files/images: + post: + operationId: uploadPublicImage + parameters: + - in: query + name: type + required: true + schema: + $ref: '#/components/schemas/FileType' + requestBody: + content: + multipart/form-data: + schema: + properties: + file: + format: binary + type: string + required: + - file + type: object + required: true + responses: + '201': + content: + application/json: + schema: + $ref: '#/components/schemas/Image' + description: Created + '400': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Bad Request", + "status": 400, + "detail": "Validation failed for request.", + "instance": "/api/users", + "errors": [ + { + "objectName": "createUserRequest", + "field": "email", + "message": "must be a well-formed email address", + "code": "Email" + }, + { + "objectName": "createUserRequest", + "field": "age", + "message": "must be greater than or equal to 0", + "code": "Min" + } + ], + "traceId": "a8c0c4e5f1c24a7e" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Validation error + '401': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Unauthorized", + "status": 401, + "detail": "Full authentication is required to access this resource", + "instance": "/api/users", + "traceId": "401401401401" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Unauthorized + '403': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Forbidden", + "status": 403, + "detail": "Access is denied", + "instance": "/api/users", + "traceId": "403403403403" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Forbidden (access denied) + '404': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Not Found", + "status": 404, + "detail": "User not found with id: 42", + "instance": "/api/users/42", + "traceId": "cdef1234abcd5678" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Not Found + '500': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Internal Server Error", + "status": 500, + "detail": "An unexpected error occurred.", + "instance": "/api/users", + "traceId": "ab12cd34ef56" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Server error + tags: + - Files + /files/public/{directory}/{filename}: + get: + operationId: downloadPublicFile + parameters: + - in: path + name: directory + required: true + schema: + type: string + - in: path + name: filename + required: true + schema: + type: string + responses: + '200': + content: + application/json: + schema: + format: binary + type: string + description: OK + '400': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Bad Request", + "status": 400, + "detail": "Validation failed for request.", + "instance": "/api/users", + "errors": [ + { + "objectName": "createUserRequest", + "field": "email", + "message": "must be a well-formed email address", + "code": "Email" + }, + { + "objectName": "createUserRequest", + "field": "age", + "message": "must be greater than or equal to 0", + "code": "Min" + } + ], + "traceId": "a8c0c4e5f1c24a7e" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Validation error + '401': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Unauthorized", + "status": 401, + "detail": "Full authentication is required to access this resource", + "instance": "/api/users", + "traceId": "401401401401" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Unauthorized + '403': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Forbidden", + "status": 403, + "detail": "Access is denied", + "instance": "/api/users", + "traceId": "403403403403" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Forbidden (access denied) + '404': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Not Found", + "status": 404, + "detail": "User not found with id: 42", + "instance": "/api/users/42", + "traceId": "cdef1234abcd5678" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Not Found + '500': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Internal Server Error", + "status": 500, + "detail": "An unexpected error occurred.", + "instance": "/api/users", + "traceId": "ab12cd34ef56" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Server error + tags: + - Files + /health: + get: + operationId: healthCheck + responses: + '200': + content: + application/json: + schema: + type: boolean + description: OK + '400': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Bad Request", + "status": 400, + "detail": "Validation failed for request.", + "instance": "/api/users", + "errors": [ + { + "objectName": "createUserRequest", + "field": "email", + "message": "must be a well-formed email address", + "code": "Email" + }, + { + "objectName": "createUserRequest", + "field": "age", + "message": "must be greater than or equal to 0", + "code": "Min" + } + ], + "traceId": "a8c0c4e5f1c24a7e" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Validation error + '401': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Unauthorized", + "status": 401, + "detail": "Full authentication is required to access this resource", + "instance": "/api/users", + "traceId": "401401401401" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Unauthorized + '403': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Forbidden", + "status": 403, + "detail": "Access is denied", + "instance": "/api/users", + "traceId": "403403403403" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Forbidden (access denied) + '404': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Not Found", + "status": 404, + "detail": "User not found with id: 42", + "instance": "/api/users/42", + "traceId": "cdef1234abcd5678" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Not Found + '500': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Internal Server Error", + "status": 500, + "detail": "An unexpected error occurred.", + "instance": "/api/users", + "traceId": "ab12cd34ef56" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Server error + tags: + - Health + /management/cohort-subjects: + get: + operationId: findCohortSubjects + responses: + '200': + content: + application/json: + schema: + items: + $ref: '#/components/schemas/CohortSubjectSummary' + type: array + description: OK + '400': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Bad Request", + "status": 400, + "detail": "Validation failed for request.", + "instance": "/api/users", + "errors": [ + { + "objectName": "createUserRequest", + "field": "email", + "message": "must be a well-formed email address", + "code": "Email" + }, + { + "objectName": "createUserRequest", + "field": "age", + "message": "must be greater than or equal to 0", + "code": "Min" + } + ], + "traceId": "a8c0c4e5f1c24a7e" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Validation error + '401': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Unauthorized", + "status": 401, + "detail": "Full authentication is required to access this resource", + "instance": "/api/users", + "traceId": "401401401401" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Unauthorized + '403': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Forbidden", + "status": 403, + "detail": "Access is denied", + "instance": "/api/users", + "traceId": "403403403403" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Forbidden (access denied) + '404': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Not Found", + "status": 404, + "detail": "User not found with id: 42", + "instance": "/api/users/42", + "traceId": "cdef1234abcd5678" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Not Found + '500': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Internal Server Error", + "status": 500, + "detail": "An unexpected error occurred.", + "instance": "/api/users", + "traceId": "ab12cd34ef56" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Server error + tags: + - Cohort Subjects + /management/cohort-subjects/{id}: + get: + operationId: findCohortSubjectById + parameters: + - in: path + name: id + required: true + schema: + format: int64 + type: integer + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/CohortSubjectDetail' + description: OK + '400': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Bad Request", + "status": 400, + "detail": "Validation failed for request.", + "instance": "/api/users", + "errors": [ + { + "objectName": "createUserRequest", + "field": "email", + "message": "must be a well-formed email address", + "code": "Email" + }, + { + "objectName": "createUserRequest", + "field": "age", + "message": "must be greater than or equal to 0", + "code": "Min" + } + ], + "traceId": "a8c0c4e5f1c24a7e" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Validation error + '401': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Unauthorized", + "status": 401, + "detail": "Full authentication is required to access this resource", + "instance": "/api/users", + "traceId": "401401401401" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Unauthorized + '403': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Forbidden", + "status": 403, + "detail": "Access is denied", + "instance": "/api/users", + "traceId": "403403403403" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Forbidden (access denied) + '404': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Not Found", + "status": 404, + "detail": "User not found with id: 42", + "instance": "/api/users/42", + "traceId": "cdef1234abcd5678" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Not Found + '500': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Internal Server Error", + "status": 500, + "detail": "An unexpected error occurred.", + "instance": "/api/users", + "traceId": "ab12cd34ef56" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Server error + tags: + - Cohort Subjects + /management/cohort-subjects/{id}/drift/link-user: + post: + operationId: linkUser + parameters: + - in: path + name: id + required: true + schema: + format: int64 + type: integer + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/LinkUserRequest' + required: true + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/LinkedUser' + description: OK + '400': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Bad Request", + "status": 400, + "detail": "Validation failed for request.", + "instance": "/api/users", + "errors": [ + { + "objectName": "createUserRequest", + "field": "email", + "message": "must be a well-formed email address", + "code": "Email" + }, + { + "objectName": "createUserRequest", + "field": "age", + "message": "must be greater than or equal to 0", + "code": "Min" + } + ], + "traceId": "a8c0c4e5f1c24a7e" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Validation error + '401': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Unauthorized", + "status": 401, + "detail": "Full authentication is required to access this resource", + "instance": "/api/users", + "traceId": "401401401401" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Unauthorized + '403': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Forbidden", + "status": 403, + "detail": "Access is denied", + "instance": "/api/users", + "traceId": "403403403403" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Forbidden (access denied) + '404': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Not Found", + "status": 404, + "detail": "User not found with id: 42", + "instance": "/api/users/42", + "traceId": "cdef1234abcd5678" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Not Found + '500': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Internal Server Error", + "status": 500, + "detail": "An unexpected error occurred.", + "instance": "/api/users", + "traceId": "ab12cd34ef56" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Server error + tags: + - Cohort Subjects + /management/cohort-subjects/{id}/targets/existing: + post: + operationId: linkExistingTarget + parameters: + - in: path + name: id + required: true + schema: + format: int64 + type: integer + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/LinkExistingTargetRequest' + required: true + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/CohortMapping' + description: OK + '400': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Bad Request", + "status": 400, + "detail": "Validation failed for request.", + "instance": "/api/users", + "errors": [ + { + "objectName": "createUserRequest", + "field": "email", + "message": "must be a well-formed email address", + "code": "Email" + }, + { + "objectName": "createUserRequest", + "field": "age", + "message": "must be greater than or equal to 0", + "code": "Min" + } + ], + "traceId": "a8c0c4e5f1c24a7e" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Validation error + '401': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Unauthorized", + "status": 401, + "detail": "Full authentication is required to access this resource", + "instance": "/api/users", + "traceId": "401401401401" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Unauthorized + '403': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Forbidden", + "status": 403, + "detail": "Access is denied", + "instance": "/api/users", + "traceId": "403403403403" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Forbidden (access denied) + '404': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Not Found", + "status": 404, + "detail": "User not found with id: 42", + "instance": "/api/users/42", + "traceId": "cdef1234abcd5678" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Not Found + '500': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Internal Server Error", + "status": 500, + "detail": "An unexpected error occurred.", + "instance": "/api/users", + "traceId": "ab12cd34ef56" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Server error + tags: + - Cohort Subjects + /management/cohort-subjects/{id}/targets/new: + post: + operationId: createTarget + parameters: + - in: path + name: id + required: true + schema: + format: int64 + type: integer + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/CreateTargetRequest' + required: true + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/CohortMapping' + description: OK + '400': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Bad Request", + "status": 400, + "detail": "Validation failed for request.", + "instance": "/api/users", + "errors": [ + { + "objectName": "createUserRequest", + "field": "email", + "message": "must be a well-formed email address", + "code": "Email" + }, + { + "objectName": "createUserRequest", + "field": "age", + "message": "must be greater than or equal to 0", + "code": "Min" + } + ], + "traceId": "a8c0c4e5f1c24a7e" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Validation error + '401': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Unauthorized", + "status": 401, + "detail": "Full authentication is required to access this resource", + "instance": "/api/users", + "traceId": "401401401401" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Unauthorized + '403': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Forbidden", + "status": 403, + "detail": "Access is denied", + "instance": "/api/users", + "traceId": "403403403403" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Forbidden (access denied) + '404': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Not Found", + "status": 404, + "detail": "User not found with id: 42", + "instance": "/api/users/42", + "traceId": "cdef1234abcd5678" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Not Found + '500': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Internal Server Error", + "status": 500, + "detail": "An unexpected error occurred.", + "instance": "/api/users", + "traceId": "ab12cd34ef56" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Server error + tags: + - Cohort Subjects + /management/cohort-subjects/{id}/targets/{cohortId}: + put: + operationId: switchTarget + parameters: + - in: path + name: id + required: true + schema: + format: int64 + type: integer + - in: path + name: cohortId + required: true + schema: + format: int64 + type: integer + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/SwitchTargetRequest' + required: true + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/CohortMapping' + description: OK + '400': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Bad Request", + "status": 400, + "detail": "Validation failed for request.", + "instance": "/api/users", + "errors": [ + { + "objectName": "createUserRequest", + "field": "email", + "message": "must be a well-formed email address", + "code": "Email" + }, + { + "objectName": "createUserRequest", + "field": "age", + "message": "must be greater than or equal to 0", + "code": "Min" + } + ], + "traceId": "a8c0c4e5f1c24a7e" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Validation error + '401': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Unauthorized", + "status": 401, + "detail": "Full authentication is required to access this resource", + "instance": "/api/users", + "traceId": "401401401401" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Unauthorized + '403': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Forbidden", + "status": 403, + "detail": "Access is denied", + "instance": "/api/users", + "traceId": "403403403403" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Forbidden (access denied) + '404': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Not Found", + "status": 404, + "detail": "User not found with id: 42", + "instance": "/api/users/42", + "traceId": "cdef1234abcd5678" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Not Found + '500': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Internal Server Error", + "status": 500, + "detail": "An unexpected error occurred.", + "instance": "/api/users", + "traceId": "ab12cd34ef56" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Server error + tags: + - Cohort Subjects + /management/cohort-subjects/{id}/targets/{cohortId}/inbound-reconcile/apply: + post: + operationId: applyInboundReconcile + parameters: + - in: path + name: id + required: true + schema: + format: int64 + type: integer + - in: path + name: cohortId + required: true + schema: + format: int64 + type: integer + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/InboundReconcileApplyRequest' + required: true + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/InboundReconcileApplyResponse' + description: OK + '400': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Bad Request", + "status": 400, + "detail": "Validation failed for request.", + "instance": "/api/users", + "errors": [ + { + "objectName": "createUserRequest", + "field": "email", + "message": "must be a well-formed email address", + "code": "Email" + }, + { + "objectName": "createUserRequest", + "field": "age", + "message": "must be greater than or equal to 0", + "code": "Min" + } + ], + "traceId": "a8c0c4e5f1c24a7e" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Validation error + '401': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Unauthorized", + "status": 401, + "detail": "Full authentication is required to access this resource", + "instance": "/api/users", + "traceId": "401401401401" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Unauthorized + '403': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Forbidden", + "status": 403, + "detail": "Access is denied", + "instance": "/api/users", + "traceId": "403403403403" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Forbidden (access denied) + '404': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Not Found", + "status": 404, + "detail": "User not found with id: 42", + "instance": "/api/users/42", + "traceId": "cdef1234abcd5678" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Not Found + '500': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Internal Server Error", + "status": 500, + "detail": "An unexpected error occurred.", + "instance": "/api/users", + "traceId": "ab12cd34ef56" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Server error + tags: + - Cohort Subjects + /management/cohort-subjects/{id}/targets/{cohortId}/inbound-reconcile/preview: + post: + operationId: previewInboundReconcile + parameters: + - in: path + name: id + required: true + schema: + format: int64 + type: integer + - in: path + name: cohortId + required: true + schema: + format: int64 + type: integer + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/InboundReconcilePreview' + description: OK + '400': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Bad Request", + "status": 400, + "detail": "Validation failed for request.", + "instance": "/api/users", + "errors": [ + { + "objectName": "createUserRequest", + "field": "email", + "message": "must be a well-formed email address", + "code": "Email" + }, + { + "objectName": "createUserRequest", + "field": "age", + "message": "must be greater than or equal to 0", + "code": "Min" + } + ], + "traceId": "a8c0c4e5f1c24a7e" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Validation error + '401': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Unauthorized", + "status": 401, + "detail": "Full authentication is required to access this resource", + "instance": "/api/users", + "traceId": "401401401401" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Unauthorized + '403': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Forbidden", + "status": 403, + "detail": "Access is denied", + "instance": "/api/users", + "traceId": "403403403403" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Forbidden (access denied) + '404': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Not Found", + "status": 404, + "detail": "User not found with id: 42", + "instance": "/api/users/42", + "traceId": "cdef1234abcd5678" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Not Found + '500': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Internal Server Error", + "status": 500, + "detail": "An unexpected error occurred.", + "instance": "/api/users", + "traceId": "ab12cd34ef56" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Server error + tags: + - Cohort Subjects + /management/cohort-targets/systems: + get: + operationId: listCohortTargetSystems + responses: + '200': + content: + application/json: + schema: + items: + $ref: '#/components/schemas/TargetDescriptor' + type: array + description: OK + '400': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Bad Request", + "status": 400, + "detail": "Validation failed for request.", + "instance": "/api/users", + "errors": [ + { + "objectName": "createUserRequest", + "field": "email", + "message": "must be a well-formed email address", + "code": "Email" + }, + { + "objectName": "createUserRequest", + "field": "age", + "message": "must be greater than or equal to 0", + "code": "Min" + } + ], + "traceId": "a8c0c4e5f1c24a7e" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Validation error + '401': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Unauthorized", + "status": 401, + "detail": "Full authentication is required to access this resource", + "instance": "/api/users", + "traceId": "401401401401" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Unauthorized + '403': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Forbidden", + "status": 403, + "detail": "Access is denied", + "instance": "/api/users", + "traceId": "403403403403" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Forbidden (access denied) + '404': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Not Found", + "status": 404, + "detail": "User not found with id: 42", + "instance": "/api/users/42", + "traceId": "cdef1234abcd5678" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Not Found + '500': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Internal Server Error", + "status": 500, + "detail": "An unexpected error occurred.", + "instance": "/api/users", + "traceId": "ab12cd34ef56" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Server error + tags: + - Cohort Targets + /management/cohort-targets/{system}: + get: + operationId: searchCohortTargets + parameters: + - in: path + name: system + required: true + schema: + $ref: '#/components/schemas/TargetSystem' + - in: query + name: query + required: false + schema: + type: string + responses: + '200': + content: + application/json: + schema: + items: + $ref: '#/components/schemas/ExternalTarget' + type: array + description: OK + '400': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Bad Request", + "status": 400, + "detail": "Validation failed for request.", + "instance": "/api/users", + "errors": [ + { + "objectName": "createUserRequest", + "field": "email", + "message": "must be a well-formed email address", + "code": "Email" + }, + { + "objectName": "createUserRequest", + "field": "age", + "message": "must be greater than or equal to 0", + "code": "Min" + } + ], + "traceId": "a8c0c4e5f1c24a7e" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Validation error + '401': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Unauthorized", + "status": 401, + "detail": "Full authentication is required to access this resource", + "instance": "/api/users", + "traceId": "401401401401" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Unauthorized + '403': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Forbidden", + "status": 403, + "detail": "Access is denied", + "instance": "/api/users", + "traceId": "403403403403" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Forbidden (access denied) + '404': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Not Found", + "status": 404, + "detail": "User not found with id: 42", + "instance": "/api/users/42", + "traceId": "cdef1234abcd5678" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Not Found + '500': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Internal Server Error", + "status": 500, + "detail": "An unexpected error occurred.", + "instance": "/api/users", + "traceId": "ab12cd34ef56" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Server error + tags: + - Cohort Targets + /management/cohort-targets/{system}/folder: + put: + operationId: moveCohortTargets + parameters: + - in: path + name: system + required: true + schema: + $ref: '#/components/schemas/TargetSystem' + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/BulkMoveTargetsRequest' + required: true + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/BulkTargetMoveResult' + description: OK + '400': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Bad Request", + "status": 400, + "detail": "Validation failed for request.", + "instance": "/api/users", + "errors": [ + { + "objectName": "createUserRequest", + "field": "email", + "message": "must be a well-formed email address", + "code": "Email" + }, + { + "objectName": "createUserRequest", + "field": "age", + "message": "must be greater than or equal to 0", + "code": "Min" + } + ], + "traceId": "a8c0c4e5f1c24a7e" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Validation error + '401': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Unauthorized", + "status": 401, + "detail": "Full authentication is required to access this resource", + "instance": "/api/users", + "traceId": "401401401401" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Unauthorized + '403': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Forbidden", + "status": 403, + "detail": "Access is denied", + "instance": "/api/users", + "traceId": "403403403403" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Forbidden (access denied) + '404': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Not Found", + "status": 404, + "detail": "User not found with id: 42", + "instance": "/api/users/42", + "traceId": "cdef1234abcd5678" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Not Found + '500': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Internal Server Error", + "status": 500, + "detail": "An unexpected error occurred.", + "instance": "/api/users", + "traceId": "ab12cd34ef56" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Server error + tags: + - Cohort Targets + /management/cohort-targets/{system}/folders: + get: + operationId: listCohortTargetFolders + parameters: + - in: path + name: system + required: true + schema: + $ref: '#/components/schemas/TargetSystem' + responses: + '200': + content: + application/json: + schema: + items: + type: string + type: array + description: OK + '400': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Bad Request", + "status": 400, + "detail": "Validation failed for request.", + "instance": "/api/users", + "errors": [ + { + "objectName": "createUserRequest", + "field": "email", + "message": "must be a well-formed email address", + "code": "Email" + }, + { + "objectName": "createUserRequest", + "field": "age", + "message": "must be greater than or equal to 0", + "code": "Min" + } + ], + "traceId": "a8c0c4e5f1c24a7e" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Validation error + '401': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Unauthorized", + "status": 401, + "detail": "Full authentication is required to access this resource", + "instance": "/api/users", + "traceId": "401401401401" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Unauthorized + '403': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Forbidden", + "status": 403, + "detail": "Access is denied", + "instance": "/api/users", + "traceId": "403403403403" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Forbidden (access denied) + '404': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Not Found", + "status": 404, + "detail": "User not found with id: 42", + "instance": "/api/users/42", + "traceId": "cdef1234abcd5678" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Not Found + '500': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Internal Server Error", + "status": 500, + "detail": "An unexpected error occurred.", + "instance": "/api/users", + "traceId": "ab12cd34ef56" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Server error + tags: + - Cohort Targets + /management/cohort-targets/{system}/{externalId}/folder: + put: + operationId: moveCohortTarget + parameters: + - in: path + name: system + required: true + schema: + $ref: '#/components/schemas/TargetSystem' + - in: path + name: externalId + required: true + schema: + type: string + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/MoveTargetRequest' + required: true + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/ExternalTarget' + description: OK + '400': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Bad Request", + "status": 400, + "detail": "Validation failed for request.", + "instance": "/api/users", + "errors": [ + { + "objectName": "createUserRequest", + "field": "email", + "message": "must be a well-formed email address", + "code": "Email" + }, + { + "objectName": "createUserRequest", + "field": "age", + "message": "must be greater than or equal to 0", + "code": "Min" + } + ], + "traceId": "a8c0c4e5f1c24a7e" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Validation error + '401': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Unauthorized", + "status": 401, + "detail": "Full authentication is required to access this resource", + "instance": "/api/users", + "traceId": "401401401401" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Unauthorized + '403': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Forbidden", + "status": 403, + "detail": "Access is denied", + "instance": "/api/users", + "traceId": "403403403403" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Forbidden (access denied) + '404': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Not Found", + "status": 404, + "detail": "User not found with id: 42", + "instance": "/api/users/42", + "traceId": "cdef1234abcd5678" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Not Found + '500': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Internal Server Error", + "status": 500, + "detail": "An unexpected error occurred.", + "instance": "/api/users", + "traceId": "ab12cd34ef56" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Server error + tags: + - Cohort Targets + /management/cohorts: + get: + operationId: findCohorts + responses: + '200': + content: + application/json: + schema: + items: + $ref: '#/components/schemas/CohortSummary' + type: array + description: OK + '400': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Bad Request", + "status": 400, + "detail": "Validation failed for request.", + "instance": "/api/users", + "errors": [ + { + "objectName": "createUserRequest", + "field": "email", + "message": "must be a well-formed email address", + "code": "Email" + }, + { + "objectName": "createUserRequest", + "field": "age", + "message": "must be greater than or equal to 0", + "code": "Min" + } + ], + "traceId": "a8c0c4e5f1c24a7e" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Validation error + '401': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Unauthorized", + "status": 401, + "detail": "Full authentication is required to access this resource", + "instance": "/api/users", + "traceId": "401401401401" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Unauthorized + '403': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Forbidden", + "status": 403, + "detail": "Access is denied", + "instance": "/api/users", + "traceId": "403403403403" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Forbidden (access denied) + '404': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Not Found", + "status": 404, + "detail": "User not found with id: 42", + "instance": "/api/users/42", + "traceId": "cdef1234abcd5678" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Not Found + '500': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Internal Server Error", + "status": 500, + "detail": "An unexpected error occurred.", + "instance": "/api/users", + "traceId": "ab12cd34ef56" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Server error + tags: + - Cohorts + /management/cohorts/{id}: + get: + operationId: findCohortById + parameters: + - in: path + name: id + required: true + schema: + format: int64 + type: integer + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/CohortDetail' + description: OK + '400': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Bad Request", + "status": 400, + "detail": "Validation failed for request.", + "instance": "/api/users", + "errors": [ + { + "objectName": "createUserRequest", + "field": "email", + "message": "must be a well-formed email address", + "code": "Email" + }, + { + "objectName": "createUserRequest", + "field": "age", + "message": "must be greater than or equal to 0", + "code": "Min" + } + ], + "traceId": "a8c0c4e5f1c24a7e" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Validation error + '401': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Unauthorized", + "status": 401, + "detail": "Full authentication is required to access this resource", + "instance": "/api/users", + "traceId": "401401401401" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Unauthorized + '403': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Forbidden", + "status": 403, + "detail": "Access is denied", + "instance": "/api/users", + "traceId": "403403403403" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Forbidden (access denied) + '404': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Not Found", + "status": 404, + "detail": "User not found with id: 42", + "instance": "/api/users/42", + "traceId": "cdef1234abcd5678" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Not Found + '500': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Internal Server Error", + "status": 500, + "detail": "An unexpected error occurred.", + "instance": "/api/users", + "traceId": "ab12cd34ef56" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Server error + tags: + - Cohorts + /management/cohorts/{id}/repair-missing-adds: + post: + operationId: repairMissingAdds + parameters: + - in: path + name: id + required: true + schema: + format: int64 + type: integer + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/CohortRepair' + description: OK + '400': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Bad Request", + "status": 400, + "detail": "Validation failed for request.", + "instance": "/api/users", + "errors": [ + { + "objectName": "createUserRequest", + "field": "email", + "message": "must be a well-formed email address", + "code": "Email" + }, + { + "objectName": "createUserRequest", + "field": "age", + "message": "must be greater than or equal to 0", + "code": "Min" + } + ], + "traceId": "a8c0c4e5f1c24a7e" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Validation error + '401': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Unauthorized", + "status": 401, + "detail": "Full authentication is required to access this resource", + "instance": "/api/users", + "traceId": "401401401401" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Unauthorized + '403': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Forbidden", + "status": 403, + "detail": "Access is denied", + "instance": "/api/users", + "traceId": "403403403403" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Forbidden (access denied) + '404': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Not Found", + "status": 404, + "detail": "User not found with id: 42", + "instance": "/api/users/42", + "traceId": "cdef1234abcd5678" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Not Found + '500': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Internal Server Error", + "status": 500, + "detail": "An unexpected error occurred.", + "instance": "/api/users", + "traceId": "ab12cd34ef56" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Server error + tags: + - Cohorts + /management/emails: + get: + operationId: list_1 + parameters: + - description: Zero-based page index (0..N) + in: query + name: page + required: false + schema: + default: 0 + minimum: 0 + type: integer + - description: The size of the page to be returned + in: query + name: size + required: false + schema: + default: 50 + minimum: 1 + type: integer + - description: 'Sorting criteria in the format: property,(asc|desc). Default sort order is ascending. Multiple sort criteria are supported.' + in: query + name: sort + required: false + schema: + default: + - createdAt,DESC + items: + type: string + type: array + - in: query + name: deliveryStatus + required: false + schema: + $ref: '#/components/schemas/EmailDeliveryStatus' + - in: query + name: emailType + required: false + schema: + type: string + - in: query + name: search + required: false + schema: + type: string + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/PagedModelEmail' + description: OK + '400': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Bad Request", + "status": 400, + "detail": "Validation failed for request.", + "instance": "/api/users", + "errors": [ + { + "objectName": "createUserRequest", + "field": "email", + "message": "must be a well-formed email address", + "code": "Email" + }, + { + "objectName": "createUserRequest", + "field": "age", + "message": "must be greater than or equal to 0", + "code": "Min" + } + ], + "traceId": "a8c0c4e5f1c24a7e" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Validation error + '401': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Unauthorized", + "status": 401, + "detail": "Full authentication is required to access this resource", + "instance": "/api/users", + "traceId": "401401401401" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Unauthorized + '403': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Forbidden", + "status": 403, + "detail": "Access is denied", + "instance": "/api/users", + "traceId": "403403403403" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Forbidden (access denied) + '404': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Not Found", + "status": 404, + "detail": "User not found with id: 42", + "instance": "/api/users/42", + "traceId": "cdef1234abcd5678" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Not Found + '500': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Internal Server Error", + "status": 500, + "detail": "An unexpected error occurred.", + "instance": "/api/users", + "traceId": "ab12cd34ef56" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Server error + tags: + - Email Management + /management/emails/stats: + get: + operationId: getStats_1 + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/EmailStats' + description: OK + '400': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Bad Request", + "status": 400, + "detail": "Validation failed for request.", + "instance": "/api/users", + "errors": [ + { + "objectName": "createUserRequest", + "field": "email", + "message": "must be a well-formed email address", + "code": "Email" + }, + { + "objectName": "createUserRequest", + "field": "age", + "message": "must be greater than or equal to 0", + "code": "Min" + } + ], + "traceId": "a8c0c4e5f1c24a7e" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Validation error + '401': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Unauthorized", + "status": 401, + "detail": "Full authentication is required to access this resource", + "instance": "/api/users", + "traceId": "401401401401" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Unauthorized + '403': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Forbidden", + "status": 403, + "detail": "Access is denied", + "instance": "/api/users", + "traceId": "403403403403" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Forbidden (access denied) + '404': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Not Found", + "status": 404, + "detail": "User not found with id: 42", + "instance": "/api/users/42", + "traceId": "cdef1234abcd5678" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Not Found + '500': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Internal Server Error", + "status": 500, + "detail": "An unexpected error occurred.", + "instance": "/api/users", + "traceId": "ab12cd34ef56" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Server error + tags: + - Email Management + /management/emails/{id}/preview: + get: + operationId: previewSentEmail + parameters: + - in: path + name: id + required: true + schema: + format: int64 + type: integer + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/SentEmailPreview' + description: OK + '400': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Bad Request", + "status": 400, + "detail": "Validation failed for request.", + "instance": "/api/users", + "errors": [ + { + "objectName": "createUserRequest", + "field": "email", + "message": "must be a well-formed email address", + "code": "Email" + }, + { + "objectName": "createUserRequest", + "field": "age", + "message": "must be greater than or equal to 0", + "code": "Min" + } + ], + "traceId": "a8c0c4e5f1c24a7e" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Validation error + '401': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Unauthorized", + "status": 401, + "detail": "Full authentication is required to access this resource", + "instance": "/api/users", + "traceId": "401401401401" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Unauthorized + '403': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Forbidden", + "status": 403, + "detail": "Access is denied", + "instance": "/api/users", + "traceId": "403403403403" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Forbidden (access denied) + '404': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Not Found", + "status": 404, + "detail": "User not found with id: 42", + "instance": "/api/users/42", + "traceId": "cdef1234abcd5678" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Not Found + '500': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Internal Server Error", + "status": 500, + "detail": "An unexpected error occurred.", + "instance": "/api/users", + "traceId": "ab12cd34ef56" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Server error + tags: + - Email Management + /management/emails/{id}/retry: + post: + operationId: retry_1 + parameters: + - in: path + name: id + required: true + schema: + format: int64 + type: integer + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/Email' + description: OK + '400': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Bad Request", + "status": 400, + "detail": "Validation failed for request.", + "instance": "/api/users", + "errors": [ + { + "objectName": "createUserRequest", + "field": "email", + "message": "must be a well-formed email address", + "code": "Email" + }, + { + "objectName": "createUserRequest", + "field": "age", + "message": "must be greater than or equal to 0", + "code": "Min" + } + ], + "traceId": "a8c0c4e5f1c24a7e" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Validation error + '401': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Unauthorized", + "status": 401, + "detail": "Full authentication is required to access this resource", + "instance": "/api/users", + "traceId": "401401401401" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Unauthorized + '403': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Forbidden", + "status": 403, + "detail": "Access is denied", + "instance": "/api/users", + "traceId": "403403403403" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Forbidden (access denied) + '404': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Not Found", + "status": 404, + "detail": "User not found with id: 42", + "instance": "/api/users/42", + "traceId": "cdef1234abcd5678" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Not Found + '500': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Internal Server Error", + "status": 500, + "detail": "An unexpected error occurred.", + "instance": "/api/users", + "traceId": "ab12cd34ef56" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Server error + tags: + - Email Management + /management/jobs: + get: + operationId: list + parameters: + - description: Zero-based page index (0..N) + in: query + name: page + required: false + schema: + default: 0 + minimum: 0 + type: integer + - description: The size of the page to be returned + in: query + name: size + required: false + schema: + default: 50 + minimum: 1 + type: integer + - description: 'Sorting criteria in the format: property,(asc|desc). Default sort order is ascending. Multiple sort criteria are supported.' + in: query + name: sort + required: false + schema: + default: + - updatedAt,DESC + items: + type: string + type: array + - in: query + name: status + required: false + schema: + $ref: '#/components/schemas/JobExecutionStatus' + - in: query + name: category + required: false + schema: + $ref: '#/components/schemas/JobExecutionCategory' + - in: query + name: search + required: false + schema: + type: string + - in: query + name: initiatedByType + required: false + schema: + $ref: '#/components/schemas/ActionActorType' + - in: query + name: jobType + required: false + schema: + type: string + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/PagedModelJobExecution' + description: OK + '400': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Bad Request", + "status": 400, + "detail": "Validation failed for request.", + "instance": "/api/users", + "errors": [ + { + "objectName": "createUserRequest", + "field": "email", + "message": "must be a well-formed email address", + "code": "Email" + }, + { + "objectName": "createUserRequest", + "field": "age", + "message": "must be greater than or equal to 0", + "code": "Min" + } + ], + "traceId": "a8c0c4e5f1c24a7e" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Validation error + '401': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Unauthorized", + "status": 401, + "detail": "Full authentication is required to access this resource", + "instance": "/api/users", + "traceId": "401401401401" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Unauthorized + '403': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Forbidden", + "status": 403, + "detail": "Access is denied", + "instance": "/api/users", + "traceId": "403403403403" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Forbidden (access denied) + '404': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Not Found", + "status": 404, + "detail": "User not found with id: 42", + "instance": "/api/users/42", + "traceId": "cdef1234abcd5678" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Not Found + '500': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Internal Server Error", + "status": 500, + "detail": "An unexpected error occurred.", + "instance": "/api/users", + "traceId": "ab12cd34ef56" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Server error + tags: + - Job Management + /management/jobs/enqueue: + post: + operationId: enqueue + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/EnqueueJobRequest' + required: true + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/JobExecution' + description: OK + '400': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Bad Request", + "status": 400, + "detail": "Validation failed for request.", + "instance": "/api/users", + "errors": [ + { + "objectName": "createUserRequest", + "field": "email", + "message": "must be a well-formed email address", + "code": "Email" + }, + { + "objectName": "createUserRequest", + "field": "age", + "message": "must be greater than or equal to 0", + "code": "Min" + } + ], + "traceId": "a8c0c4e5f1c24a7e" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Validation error + '401': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Unauthorized", + "status": 401, + "detail": "Full authentication is required to access this resource", + "instance": "/api/users", + "traceId": "401401401401" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Unauthorized + '403': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Forbidden", + "status": 403, + "detail": "Access is denied", + "instance": "/api/users", + "traceId": "403403403403" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Forbidden (access denied) + '404': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Not Found", + "status": 404, + "detail": "User not found with id: 42", + "instance": "/api/users/42", + "traceId": "cdef1234abcd5678" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Not Found + '500': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Internal Server Error", + "status": 500, + "detail": "An unexpected error occurred.", + "instance": "/api/users", + "traceId": "ab12cd34ef56" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Server error + tags: + - Job Management + /management/jobs/stats: + get: + operationId: getStats + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/JobStatsDTO' + description: OK + '400': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Bad Request", + "status": 400, + "detail": "Validation failed for request.", + "instance": "/api/users", + "errors": [ + { + "objectName": "createUserRequest", + "field": "email", + "message": "must be a well-formed email address", + "code": "Email" + }, + { + "objectName": "createUserRequest", + "field": "age", + "message": "must be greater than or equal to 0", + "code": "Min" + } + ], + "traceId": "a8c0c4e5f1c24a7e" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Validation error + '401': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Unauthorized", + "status": 401, + "detail": "Full authentication is required to access this resource", + "instance": "/api/users", + "traceId": "401401401401" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Unauthorized + '403': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Forbidden", + "status": 403, + "detail": "Access is denied", + "instance": "/api/users", + "traceId": "403403403403" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Forbidden (access denied) + '404': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Not Found", + "status": 404, + "detail": "User not found with id: 42", + "instance": "/api/users/42", + "traceId": "cdef1234abcd5678" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Not Found + '500': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Internal Server Error", + "status": 500, + "detail": "An unexpected error occurred.", + "instance": "/api/users", + "traceId": "ab12cd34ef56" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Server error + tags: + - Job Management + /management/jobs/types: + get: + operationId: jobTypes + responses: + '200': + content: + application/json: + schema: + items: + $ref: '#/components/schemas/JobTypeDescriptor' + type: array + description: OK + '400': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Bad Request", + "status": 400, + "detail": "Validation failed for request.", + "instance": "/api/users", + "errors": [ + { + "objectName": "createUserRequest", + "field": "email", + "message": "must be a well-formed email address", + "code": "Email" + }, + { + "objectName": "createUserRequest", + "field": "age", + "message": "must be greater than or equal to 0", + "code": "Min" + } + ], + "traceId": "a8c0c4e5f1c24a7e" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Validation error + '401': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Unauthorized", + "status": 401, + "detail": "Full authentication is required to access this resource", + "instance": "/api/users", + "traceId": "401401401401" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Unauthorized + '403': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Forbidden", + "status": 403, + "detail": "Access is denied", + "instance": "/api/users", + "traceId": "403403403403" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Forbidden (access denied) + '404': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Not Found", + "status": 404, + "detail": "User not found with id: 42", + "instance": "/api/users/42", + "traceId": "cdef1234abcd5678" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Not Found + '500': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Internal Server Error", + "status": 500, + "detail": "An unexpected error occurred.", + "instance": "/api/users", + "traceId": "ab12cd34ef56" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Server error + tags: + - Job Management + /management/jobs/{id}/retry: + post: + operationId: retry + parameters: + - in: path + name: id + required: true + schema: + format: int64 + type: integer + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/JobExecution' + description: OK + '400': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Bad Request", + "status": 400, + "detail": "Validation failed for request.", + "instance": "/api/users", + "errors": [ + { + "objectName": "createUserRequest", + "field": "email", + "message": "must be a well-formed email address", + "code": "Email" + }, + { + "objectName": "createUserRequest", + "field": "age", + "message": "must be greater than or equal to 0", + "code": "Min" + } + ], + "traceId": "a8c0c4e5f1c24a7e" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Validation error + '401': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Unauthorized", + "status": 401, + "detail": "Full authentication is required to access this resource", + "instance": "/api/users", + "traceId": "401401401401" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Unauthorized + '403': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Forbidden", + "status": 403, + "detail": "Access is denied", + "instance": "/api/users", + "traceId": "403403403403" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Forbidden (access denied) + '404': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Not Found", + "status": 404, + "detail": "User not found with id: 42", + "instance": "/api/users/42", + "traceId": "cdef1234abcd5678" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Not Found + '500': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Internal Server Error", + "status": 500, + "detail": "An unexpected error occurred.", + "instance": "/api/users", + "traceId": "ab12cd34ef56" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Server error + tags: + - Job Management + /me/services: + get: + operationId: myServices + responses: + '200': + content: + application/json: + schema: + items: + $ref: '#/components/schemas/ServiceEntry' + type: array + description: OK + '400': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Bad Request", + "status": 400, + "detail": "Validation failed for request.", + "instance": "/api/users", + "errors": [ + { + "objectName": "createUserRequest", + "field": "email", + "message": "must be a well-formed email address", + "code": "Email" + }, + { + "objectName": "createUserRequest", + "field": "age", + "message": "must be greater than or equal to 0", + "code": "Min" + } + ], + "traceId": "a8c0c4e5f1c24a7e" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Validation error + '401': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Unauthorized", + "status": 401, + "detail": "Full authentication is required to access this resource", + "instance": "/api/users", + "traceId": "401401401401" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Unauthorized + '403': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Forbidden", + "status": 403, + "detail": "Access is denied", + "instance": "/api/users", + "traceId": "403403403403" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Forbidden (access denied) + '404': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Not Found", + "status": 404, + "detail": "User not found with id: 42", + "instance": "/api/users/42", + "traceId": "cdef1234abcd5678" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Not Found + '500': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Internal Server Error", + "status": 500, + "detail": "An unexpected error occurred.", + "instance": "/api/users", + "traceId": "ab12cd34ef56" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Server error + tags: + - My Services + /memberProfiles: + post: + operationId: createMemberProfile + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/CreateMemberProfileRequest' + required: true + responses: + '201': + content: + application/json: + schema: + $ref: '#/components/schemas/MemberProfileResponse' + description: Created + '400': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Bad Request", + "status": 400, + "detail": "Validation failed for request.", + "instance": "/api/users", + "errors": [ + { + "objectName": "createUserRequest", + "field": "email", + "message": "must be a well-formed email address", + "code": "Email" + }, + { + "objectName": "createUserRequest", + "field": "age", + "message": "must be greater than or equal to 0", + "code": "Min" + } + ], + "traceId": "a8c0c4e5f1c24a7e" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Validation error + '401': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Unauthorized", + "status": 401, + "detail": "Full authentication is required to access this resource", + "instance": "/api/users", + "traceId": "401401401401" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Unauthorized + '403': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Forbidden", + "status": 403, + "detail": "Access is denied", + "instance": "/api/users", + "traceId": "403403403403" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Forbidden (access denied) + '404': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Not Found", + "status": 404, + "detail": "User not found with id: 42", + "instance": "/api/users/42", + "traceId": "cdef1234abcd5678" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Not Found + '500': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Internal Server Error", + "status": 500, + "detail": "An unexpected error occurred.", + "instance": "/api/users", + "traceId": "ab12cd34ef56" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Server error + tags: + - Member Profiles + /memberships: + get: + operationId: findMemberships + parameters: + - in: query + name: from + required: false + schema: + format: date + type: string + - in: query + name: to + required: false + schema: + format: date + type: string + - in: query + name: userId + required: false + schema: + format: int64 + type: integer + responses: + '200': + content: + application/json: + schema: + items: + $ref: '#/components/schemas/MembershipResponse' + type: array + description: OK + '400': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Bad Request", + "status": 400, + "detail": "Validation failed for request.", + "instance": "/api/users", + "errors": [ + { + "objectName": "createUserRequest", + "field": "email", + "message": "must be a well-formed email address", + "code": "Email" + }, + { + "objectName": "createUserRequest", + "field": "age", + "message": "must be greater than or equal to 0", + "code": "Min" + } + ], + "traceId": "a8c0c4e5f1c24a7e" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Validation error + '401': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Unauthorized", + "status": 401, + "detail": "Full authentication is required to access this resource", + "instance": "/api/users", + "traceId": "401401401401" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Unauthorized + '403': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Forbidden", + "status": 403, + "detail": "Access is denied", + "instance": "/api/users", + "traceId": "403403403403" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Forbidden (access denied) + '404': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Not Found", + "status": 404, + "detail": "User not found with id: 42", + "instance": "/api/users/42", + "traceId": "cdef1234abcd5678" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Not Found + '500': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Internal Server Error", + "status": 500, + "detail": "An unexpected error occurred.", + "instance": "/api/users", + "traceId": "ab12cd34ef56" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Server error + tags: + - Memberships + post: + operationId: createMembership + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/MembershipApplicationRequest' + required: true + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/SignupOutcomeResponse' + description: OK + '400': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Bad Request", + "status": 400, + "detail": "Validation failed for request.", + "instance": "/api/users", + "errors": [ + { + "objectName": "createUserRequest", + "field": "email", + "message": "must be a well-formed email address", + "code": "Email" + }, + { + "objectName": "createUserRequest", + "field": "age", + "message": "must be greater than or equal to 0", + "code": "Min" + } + ], + "traceId": "a8c0c4e5f1c24a7e" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Validation error + '401': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Unauthorized", + "status": 401, + "detail": "Full authentication is required to access this resource", + "instance": "/api/users", + "traceId": "401401401401" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Unauthorized + '403': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Forbidden", + "status": 403, + "detail": "Access is denied", + "instance": "/api/users", + "traceId": "403403403403" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Forbidden (access denied) + '404': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Not Found", + "status": 404, + "detail": "User not found with id: 42", + "instance": "/api/users/42", + "traceId": "cdef1234abcd5678" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Not Found + '500': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Internal Server Error", + "status": 500, + "detail": "An unexpected error occurred.", + "instance": "/api/users", + "traceId": "ab12cd34ef56" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Server error + tags: + - Memberships + /memberships/bulk/end: + post: + operationId: endMemberships + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/BulkMembershipRequest' + required: true + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/BulkActionResult' + description: OK + '400': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Bad Request", + "status": 400, + "detail": "Validation failed for request.", + "instance": "/api/users", + "errors": [ + { + "objectName": "createUserRequest", + "field": "email", + "message": "must be a well-formed email address", + "code": "Email" + }, + { + "objectName": "createUserRequest", + "field": "age", + "message": "must be greater than or equal to 0", + "code": "Min" + } + ], + "traceId": "a8c0c4e5f1c24a7e" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Validation error + '401': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Unauthorized", + "status": 401, + "detail": "Full authentication is required to access this resource", + "instance": "/api/users", + "traceId": "401401401401" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Unauthorized + '403': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Forbidden", + "status": 403, + "detail": "Access is denied", + "instance": "/api/users", + "traceId": "403403403403" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Forbidden (access denied) + '404': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Not Found", + "status": 404, + "detail": "User not found with id: 42", + "instance": "/api/users/42", + "traceId": "cdef1234abcd5678" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Not Found + '500': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Internal Server Error", + "status": 500, + "detail": "An unexpected error occurred.", + "instance": "/api/users", + "traceId": "ab12cd34ef56" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Server error + tags: + - Memberships + /memberships/bulk/end/preview: + post: + operationId: previewBulkEnd + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/BulkMembershipRequest' + required: true + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/BulkMembershipPreview' + description: OK + '400': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Bad Request", + "status": 400, + "detail": "Validation failed for request.", + "instance": "/api/users", + "errors": [ + { + "objectName": "createUserRequest", + "field": "email", + "message": "must be a well-formed email address", + "code": "Email" + }, + { + "objectName": "createUserRequest", + "field": "age", + "message": "must be greater than or equal to 0", + "code": "Min" + } + ], + "traceId": "a8c0c4e5f1c24a7e" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Validation error + '401': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Unauthorized", + "status": 401, + "detail": "Full authentication is required to access this resource", + "instance": "/api/users", + "traceId": "401401401401" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Unauthorized + '403': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Forbidden", + "status": 403, + "detail": "Access is denied", + "instance": "/api/users", + "traceId": "403403403403" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Forbidden (access denied) + '404': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Not Found", + "status": 404, + "detail": "User not found with id: 42", + "instance": "/api/users/42", + "traceId": "cdef1234abcd5678" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Not Found + '500': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Internal Server Error", + "status": 500, + "detail": "An unexpected error occurred.", + "instance": "/api/users", + "traceId": "ab12cd34ef56" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Server error + tags: + - Memberships + /memberships/bulk/start: + post: + operationId: startMemberships + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/BulkMembershipRequest' + required: true + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/BulkActionResult' + description: OK + '400': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Bad Request", + "status": 400, + "detail": "Validation failed for request.", + "instance": "/api/users", + "errors": [ + { + "objectName": "createUserRequest", + "field": "email", + "message": "must be a well-formed email address", + "code": "Email" + }, + { + "objectName": "createUserRequest", + "field": "age", + "message": "must be greater than or equal to 0", + "code": "Min" + } + ], + "traceId": "a8c0c4e5f1c24a7e" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Validation error + '401': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Unauthorized", + "status": 401, + "detail": "Full authentication is required to access this resource", + "instance": "/api/users", + "traceId": "401401401401" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Unauthorized + '403': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Forbidden", + "status": 403, + "detail": "Access is denied", + "instance": "/api/users", + "traceId": "403403403403" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Forbidden (access denied) + '404': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Not Found", + "status": 404, + "detail": "User not found with id: 42", + "instance": "/api/users/42", + "traceId": "cdef1234abcd5678" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Not Found + '500': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Internal Server Error", + "status": 500, + "detail": "An unexpected error occurred.", + "instance": "/api/users", + "traceId": "ab12cd34ef56" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Server error + tags: + - Memberships + /memberships/bulk/start/preview: + post: + operationId: previewBulkStart + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/BulkMembershipRequest' + required: true + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/BulkMembershipPreview' + description: OK + '400': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Bad Request", + "status": 400, + "detail": "Validation failed for request.", + "instance": "/api/users", + "errors": [ + { + "objectName": "createUserRequest", + "field": "email", + "message": "must be a well-formed email address", + "code": "Email" + }, + { + "objectName": "createUserRequest", + "field": "age", + "message": "must be greater than or equal to 0", + "code": "Min" + } + ], + "traceId": "a8c0c4e5f1c24a7e" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Validation error + '401': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Unauthorized", + "status": 401, + "detail": "Full authentication is required to access this resource", + "instance": "/api/users", + "traceId": "401401401401" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Unauthorized + '403': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Forbidden", + "status": 403, + "detail": "Access is denied", + "instance": "/api/users", + "traceId": "403403403403" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Forbidden (access denied) + '404': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Not Found", + "status": 404, + "detail": "User not found with id: 42", + "instance": "/api/users/42", + "traceId": "cdef1234abcd5678" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Not Found + '500': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Internal Server Error", + "status": 500, + "detail": "An unexpected error occurred.", + "instance": "/api/users", + "traceId": "ab12cd34ef56" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Server error + tags: + - Memberships + /memberships/{id}: + delete: + operationId: deleteMembership + parameters: + - in: path + name: id + required: true + schema: + exclusiveMinimum: 0 + format: int64 + type: integer + responses: + '204': + description: No Content + '400': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Bad Request", + "status": 400, + "detail": "Validation failed for request.", + "instance": "/api/users", + "errors": [ + { + "objectName": "createUserRequest", + "field": "email", + "message": "must be a well-formed email address", + "code": "Email" + }, + { + "objectName": "createUserRequest", + "field": "age", + "message": "must be greater than or equal to 0", + "code": "Min" + } + ], + "traceId": "a8c0c4e5f1c24a7e" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Validation error + '401': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Unauthorized", + "status": 401, + "detail": "Full authentication is required to access this resource", + "instance": "/api/users", + "traceId": "401401401401" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Unauthorized + '403': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Forbidden", + "status": 403, + "detail": "Access is denied", + "instance": "/api/users", + "traceId": "403403403403" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Forbidden (access denied) + '404': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Not Found", + "status": 404, + "detail": "User not found with id: 42", + "instance": "/api/users/42", + "traceId": "cdef1234abcd5678" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Not Found + '500': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Internal Server Error", + "status": 500, + "detail": "An unexpected error occurred.", + "instance": "/api/users", + "traceId": "ab12cd34ef56" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Server error + tags: + - Memberships + get: + operationId: findMembershipById + parameters: + - in: path + name: id + required: true + schema: + exclusiveMinimum: 0 + format: int64 + type: integer + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/MembershipResponse' + description: OK + '400': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Bad Request", + "status": 400, + "detail": "Validation failed for request.", + "instance": "/api/users", + "errors": [ + { + "objectName": "createUserRequest", + "field": "email", + "message": "must be a well-formed email address", + "code": "Email" + }, + { + "objectName": "createUserRequest", + "field": "age", + "message": "must be greater than or equal to 0", + "code": "Min" + } + ], + "traceId": "a8c0c4e5f1c24a7e" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Validation error + '401': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Unauthorized", + "status": 401, + "detail": "Full authentication is required to access this resource", + "instance": "/api/users", + "traceId": "401401401401" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Unauthorized + '403': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Forbidden", + "status": 403, + "detail": "Access is denied", + "instance": "/api/users", + "traceId": "403403403403" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Forbidden (access denied) + '404': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Not Found", + "status": 404, + "detail": "User not found with id: 42", + "instance": "/api/users/42", + "traceId": "cdef1234abcd5678" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Not Found + '500': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Internal Server Error", + "status": 500, + "detail": "An unexpected error occurred.", + "instance": "/api/users", + "traceId": "ab12cd34ef56" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Server error + tags: + - Memberships + put: + operationId: updateMembership + parameters: + - in: path + name: id + required: true + schema: + format: int64 + type: integer + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/UpdateMembershipRequest' + required: true + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/MembershipResponse' + description: OK + '400': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Bad Request", + "status": 400, + "detail": "Validation failed for request.", + "instance": "/api/users", + "errors": [ + { + "objectName": "createUserRequest", + "field": "email", + "message": "must be a well-formed email address", + "code": "Email" + }, + { + "objectName": "createUserRequest", + "field": "age", + "message": "must be greater than or equal to 0", + "code": "Min" + } + ], + "traceId": "a8c0c4e5f1c24a7e" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Validation error + '401': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Unauthorized", + "status": 401, + "detail": "Full authentication is required to access this resource", + "instance": "/api/users", + "traceId": "401401401401" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Unauthorized + '403': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Forbidden", + "status": 403, + "detail": "Access is denied", + "instance": "/api/users", + "traceId": "403403403403" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Forbidden (access denied) + '404': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Not Found", + "status": 404, + "detail": "User not found with id: 42", + "instance": "/api/users/42", + "traceId": "cdef1234abcd5678" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Not Found + '500': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Internal Server Error", + "status": 500, + "detail": "An unexpected error occurred.", + "instance": "/api/users", + "traceId": "ab12cd34ef56" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Server error + tags: + - Memberships + /memberships/{id}/end: + post: + operationId: endMembership + parameters: + - in: path + name: id + required: true + schema: + exclusiveMinimum: 0 + format: int64 + type: integer + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/MembershipResponse' + description: OK + '400': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Bad Request", + "status": 400, + "detail": "Validation failed for request.", + "instance": "/api/users", + "errors": [ + { + "objectName": "createUserRequest", + "field": "email", + "message": "must be a well-formed email address", + "code": "Email" + }, + { + "objectName": "createUserRequest", + "field": "age", + "message": "must be greater than or equal to 0", + "code": "Min" + } + ], + "traceId": "a8c0c4e5f1c24a7e" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Validation error + '401': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Unauthorized", + "status": 401, + "detail": "Full authentication is required to access this resource", + "instance": "/api/users", + "traceId": "401401401401" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Unauthorized + '403': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Forbidden", + "status": 403, + "detail": "Access is denied", + "instance": "/api/users", + "traceId": "403403403403" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Forbidden (access denied) + '404': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Not Found", + "status": 404, + "detail": "User not found with id: 42", + "instance": "/api/users/42", + "traceId": "cdef1234abcd5678" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Not Found + '500': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Internal Server Error", + "status": 500, + "detail": "An unexpected error occurred.", + "instance": "/api/users", + "traceId": "ab12cd34ef56" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Server error + tags: + - Memberships + /memberships/{id}/reopen: + post: + operationId: reopenMembership + parameters: + - in: path + name: id + required: true + schema: + exclusiveMinimum: 0 + format: int64 + type: integer + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/MembershipResponse' + description: OK + '400': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Bad Request", + "status": 400, + "detail": "Validation failed for request.", + "instance": "/api/users", + "errors": [ + { + "objectName": "createUserRequest", + "field": "email", + "message": "must be a well-formed email address", + "code": "Email" + }, + { + "objectName": "createUserRequest", + "field": "age", + "message": "must be greater than or equal to 0", + "code": "Min" + } + ], + "traceId": "a8c0c4e5f1c24a7e" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Validation error + '401': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Unauthorized", + "status": 401, + "detail": "Full authentication is required to access this resource", + "instance": "/api/users", + "traceId": "401401401401" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Unauthorized + '403': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Forbidden", + "status": 403, + "detail": "Access is denied", + "instance": "/api/users", + "traceId": "403403403403" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Forbidden (access denied) + '404': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Not Found", + "status": 404, + "detail": "User not found with id: 42", + "instance": "/api/users/42", + "traceId": "cdef1234abcd5678" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Not Found + '500': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Internal Server Error", + "status": 500, + "detail": "An unexpected error occurred.", + "instance": "/api/users", + "traceId": "ab12cd34ef56" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Server error + tags: + - Memberships + /memberships/{id}/restore: + put: + operationId: restoreMembership + parameters: + - in: path + name: id + required: true + schema: + exclusiveMinimum: 0 + format: int64 + type: integer + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/MembershipResponse' + description: OK + '400': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Bad Request", + "status": 400, + "detail": "Validation failed for request.", + "instance": "/api/users", + "errors": [ + { + "objectName": "createUserRequest", + "field": "email", + "message": "must be a well-formed email address", + "code": "Email" + }, + { + "objectName": "createUserRequest", + "field": "age", + "message": "must be greater than or equal to 0", + "code": "Min" + } + ], + "traceId": "a8c0c4e5f1c24a7e" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Validation error + '401': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Unauthorized", + "status": 401, + "detail": "Full authentication is required to access this resource", + "instance": "/api/users", + "traceId": "401401401401" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Unauthorized + '403': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Forbidden", + "status": 403, + "detail": "Access is denied", + "instance": "/api/users", + "traceId": "403403403403" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Forbidden (access denied) + '404': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Not Found", + "status": 404, + "detail": "User not found with id: 42", + "instance": "/api/users/42", + "traceId": "cdef1234abcd5678" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Not Found + '500': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Internal Server Error", + "status": 500, + "detail": "An unexpected error occurred.", + "instance": "/api/users", + "traceId": "ab12cd34ef56" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Server error + tags: + - Memberships + /oauth2/forward-auth: + get: + operationId: forwardAuth + responses: + '200': + description: OK + '400': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Bad Request", + "status": 400, + "detail": "Validation failed for request.", + "instance": "/api/users", + "errors": [ + { + "objectName": "createUserRequest", + "field": "email", + "message": "must be a well-formed email address", + "code": "Email" + }, + { + "objectName": "createUserRequest", + "field": "age", + "message": "must be greater than or equal to 0", + "code": "Min" + } + ], + "traceId": "a8c0c4e5f1c24a7e" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Validation error + '401': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Unauthorized", + "status": 401, + "detail": "Full authentication is required to access this resource", + "instance": "/api/users", + "traceId": "401401401401" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Unauthorized + '403': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Forbidden", + "status": 403, + "detail": "Access is denied", + "instance": "/api/users", + "traceId": "403403403403" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Forbidden (access denied) + '404': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Not Found", + "status": 404, + "detail": "User not found with id: 42", + "instance": "/api/users/42", + "traceId": "cdef1234abcd5678" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Not Found + '500': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Internal Server Error", + "status": 500, + "detail": "An unexpected error occurred.", + "instance": "/api/users", + "traceId": "ab12cd34ef56" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Server error + tags: + - Forward Auth + /recovery/member/activate: + post: + operationId: memberActivate + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/MemberActivationRequest' + required: true + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/RedirectResponse' + description: OK + '400': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Bad Request", + "status": 400, + "detail": "Validation failed for request.", + "instance": "/api/users", + "errors": [ + { + "objectName": "createUserRequest", + "field": "email", + "message": "must be a well-formed email address", + "code": "Email" + }, + { + "objectName": "createUserRequest", + "field": "age", + "message": "must be greater than or equal to 0", + "code": "Min" + } + ], + "traceId": "a8c0c4e5f1c24a7e" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Validation error + '401': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Unauthorized", + "status": 401, + "detail": "Full authentication is required to access this resource", + "instance": "/api/users", + "traceId": "401401401401" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Unauthorized + '403': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Forbidden", + "status": 403, + "detail": "Access is denied", + "instance": "/api/users", + "traceId": "403403403403" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Forbidden (access denied) + '404': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Not Found", + "status": 404, + "detail": "User not found with id: 42", + "instance": "/api/users/42", + "traceId": "cdef1234abcd5678" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Not Found + '500': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Internal Server Error", + "status": 500, + "detail": "An unexpected error occurred.", + "instance": "/api/users", + "traceId": "ab12cd34ef56" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Server error + tags: + - Recovery + /recovery/password: + post: + operationId: setPassword + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/PasswordResetRequest' + required: true + responses: + '204': + description: No Content + '400': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Bad Request", + "status": 400, + "detail": "Validation failed for request.", + "instance": "/api/users", + "errors": [ + { + "objectName": "createUserRequest", + "field": "email", + "message": "must be a well-formed email address", + "code": "Email" + }, + { + "objectName": "createUserRequest", + "field": "age", + "message": "must be greater than or equal to 0", + "code": "Min" + } + ], + "traceId": "a8c0c4e5f1c24a7e" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Validation error + '401': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Unauthorized", + "status": 401, + "detail": "Full authentication is required to access this resource", + "instance": "/api/users", + "traceId": "401401401401" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Unauthorized + '403': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Forbidden", + "status": 403, + "detail": "Access is denied", + "instance": "/api/users", + "traceId": "403403403403" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Forbidden (access denied) + '404': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Not Found", + "status": 404, + "detail": "User not found with id: 42", + "instance": "/api/users/42", + "traceId": "cdef1234abcd5678" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Not Found + '500': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Internal Server Error", + "status": 500, + "detail": "An unexpected error occurred.", + "instance": "/api/users", + "traceId": "ab12cd34ef56" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Server error + tags: + - Recovery + /recovery/password/reset/{username}: + post: + operationId: resetPassword + parameters: + - in: path + name: username + required: true + schema: + type: string + responses: + '204': + description: No Content + '400': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Bad Request", + "status": 400, + "detail": "Validation failed for request.", + "instance": "/api/users", + "errors": [ + { + "objectName": "createUserRequest", + "field": "email", + "message": "must be a well-formed email address", + "code": "Email" + }, + { + "objectName": "createUserRequest", + "field": "age", + "message": "must be greater than or equal to 0", + "code": "Min" + } + ], + "traceId": "a8c0c4e5f1c24a7e" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Validation error + '401': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Unauthorized", + "status": 401, + "detail": "Full authentication is required to access this resource", + "instance": "/api/users", + "traceId": "401401401401" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Unauthorized + '403': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Forbidden", + "status": 403, + "detail": "Access is denied", + "instance": "/api/users", + "traceId": "403403403403" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Forbidden (access denied) + '404': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Not Found", + "status": 404, + "detail": "User not found with id: 42", + "instance": "/api/users/42", + "traceId": "cdef1234abcd5678" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Not Found + '500': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Internal Server Error", + "status": 500, + "detail": "An unexpected error occurred.", + "instance": "/api/users", + "traceId": "ab12cd34ef56" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Server error + tags: + - Recovery + /recovery/pending-activations: + get: + operationId: pendingActivations + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/PendingActivationsResponse' + description: OK + '400': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Bad Request", + "status": 400, + "detail": "Validation failed for request.", + "instance": "/api/users", + "errors": [ + { + "objectName": "createUserRequest", + "field": "email", + "message": "must be a well-formed email address", + "code": "Email" + }, + { + "objectName": "createUserRequest", + "field": "age", + "message": "must be greater than or equal to 0", + "code": "Min" + } + ], + "traceId": "a8c0c4e5f1c24a7e" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Validation error + '401': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Unauthorized", + "status": 401, + "detail": "Full authentication is required to access this resource", + "instance": "/api/users", + "traceId": "401401401401" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Unauthorized + '403': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Forbidden", + "status": 403, + "detail": "Access is denied", + "instance": "/api/users", + "traceId": "403403403403" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Forbidden (access denied) + '404': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Not Found", + "status": 404, + "detail": "User not found with id: 42", + "instance": "/api/users/42", + "traceId": "cdef1234abcd5678" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Not Found + '500': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Internal Server Error", + "status": 500, + "detail": "An unexpected error occurred.", + "instance": "/api/users", + "traceId": "ab12cd34ef56" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Server error + tags: + - Recovery + /recovery/user/activate: + post: + operationId: userActivate + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/UserActivationRequest' + required: true + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/ActivationResponse' + description: OK + '400': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Bad Request", + "status": 400, + "detail": "Validation failed for request.", + "instance": "/api/users", + "errors": [ + { + "objectName": "createUserRequest", + "field": "email", + "message": "must be a well-formed email address", + "code": "Email" + }, + { + "objectName": "createUserRequest", + "field": "age", + "message": "must be greater than or equal to 0", + "code": "Min" + } + ], + "traceId": "a8c0c4e5f1c24a7e" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Validation error + '401': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Unauthorized", + "status": 401, + "detail": "Full authentication is required to access this resource", + "instance": "/api/users", + "traceId": "401401401401" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Unauthorized + '403': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Forbidden", + "status": 403, + "detail": "Access is denied", + "instance": "/api/users", + "traceId": "403403403403" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Forbidden (access denied) + '404': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Not Found", + "status": 404, + "detail": "User not found with id: 42", + "instance": "/api/users/42", + "traceId": "cdef1234abcd5678" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Not Found + '500': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Internal Server Error", + "status": 500, + "detail": "An unexpected error occurred.", + "instance": "/api/users", + "traceId": "ab12cd34ef56" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Server error + tags: + - Recovery + /recovery/user/activate/resend/{username}: + post: + operationId: resendUserActivation + parameters: + - in: path + name: username + required: true + schema: + type: string + responses: + '204': + description: No Content + '400': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Bad Request", + "status": 400, + "detail": "Validation failed for request.", + "instance": "/api/users", + "errors": [ + { + "objectName": "createUserRequest", + "field": "email", + "message": "must be a well-formed email address", + "code": "Email" + }, + { + "objectName": "createUserRequest", + "field": "age", + "message": "must be greater than or equal to 0", + "code": "Min" + } + ], + "traceId": "a8c0c4e5f1c24a7e" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Validation error + '401': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Unauthorized", + "status": 401, + "detail": "Full authentication is required to access this resource", + "instance": "/api/users", + "traceId": "401401401401" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Unauthorized + '403': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Forbidden", + "status": 403, + "detail": "Access is denied", + "instance": "/api/users", + "traceId": "403403403403" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Forbidden (access denied) + '404': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Not Found", + "status": 404, + "detail": "User not found with id: 42", + "instance": "/api/users/42", + "traceId": "cdef1234abcd5678" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Not Found + '500': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Internal Server Error", + "status": 500, + "detail": "An unexpected error occurred.", + "instance": "/api/users", + "traceId": "ab12cd34ef56" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Server error + tags: + - Recovery + /recovery/users/{userId}/email-preview: + get: + operationId: previewRecoveryEmail + parameters: + - in: path + name: userId + required: true + schema: + format: int64 + type: integer + - in: query + name: purpose + required: true + schema: + $ref: '#/components/schemas/TokenPurpose' + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/RecoveryEmailPreviewResponse' + description: OK + '400': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Bad Request", + "status": 400, + "detail": "Validation failed for request.", + "instance": "/api/users", + "errors": [ + { + "objectName": "createUserRequest", + "field": "email", + "message": "must be a well-formed email address", + "code": "Email" + }, + { + "objectName": "createUserRequest", + "field": "age", + "message": "must be greater than or equal to 0", + "code": "Min" + } + ], + "traceId": "a8c0c4e5f1c24a7e" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Validation error + '401': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Unauthorized", + "status": 401, + "detail": "Full authentication is required to access this resource", + "instance": "/api/users", + "traceId": "401401401401" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Unauthorized + '403': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Forbidden", + "status": 403, + "detail": "Access is denied", + "instance": "/api/users", + "traceId": "403403403403" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Forbidden (access denied) + '404': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Not Found", + "status": 404, + "detail": "User not found with id: 42", + "instance": "/api/users/42", + "traceId": "cdef1234abcd5678" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Not Found + '500': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Internal Server Error", + "status": 500, + "detail": "An unexpected error occurred.", + "instance": "/api/users", + "traceId": "ab12cd34ef56" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Server error + tags: + - Recovery + /recovery/users/{userId}/resend/recovery: + post: + operationId: resendRecoveryEmail + parameters: + - in: path + name: userId + required: true + schema: + format: int64 + type: integer + - in: query + name: purpose + required: false + schema: + $ref: '#/components/schemas/TokenPurpose' + responses: + '204': + description: No Content + '400': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Bad Request", + "status": 400, + "detail": "Validation failed for request.", + "instance": "/api/users", + "errors": [ + { + "objectName": "createUserRequest", + "field": "email", + "message": "must be a well-formed email address", + "code": "Email" + }, + { + "objectName": "createUserRequest", + "field": "age", + "message": "must be greater than or equal to 0", + "code": "Min" + } + ], + "traceId": "a8c0c4e5f1c24a7e" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Validation error + '401': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Unauthorized", + "status": 401, + "detail": "Full authentication is required to access this resource", + "instance": "/api/users", + "traceId": "401401401401" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Unauthorized + '403': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Forbidden", + "status": 403, + "detail": "Access is denied", + "instance": "/api/users", + "traceId": "403403403403" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Forbidden (access denied) + '404': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Not Found", + "status": 404, + "detail": "User not found with id: 42", + "instance": "/api/users/42", + "traceId": "cdef1234abcd5678" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Not Found + '500': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Internal Server Error", + "status": 500, + "detail": "An unexpected error occurred.", + "instance": "/api/users", + "traceId": "ab12cd34ef56" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Server error + tags: + - Recovery + /signup: + post: + operationId: signUp + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/CreateUserRequest' + required: true + responses: + '201': + content: + application/json: + schema: + $ref: '#/components/schemas/SignupSessionResponse' + description: Created + '400': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Bad Request", + "status": 400, + "detail": "Validation failed for request.", + "instance": "/api/users", + "errors": [ + { + "objectName": "createUserRequest", + "field": "email", + "message": "must be a well-formed email address", + "code": "Email" + }, + { + "objectName": "createUserRequest", + "field": "age", + "message": "must be greater than or equal to 0", + "code": "Min" + } + ], + "traceId": "a8c0c4e5f1c24a7e" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Validation error + '401': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Unauthorized", + "status": 401, + "detail": "Full authentication is required to access this resource", + "instance": "/api/users", + "traceId": "401401401401" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Unauthorized + '403': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Forbidden", + "status": 403, + "detail": "Access is denied", + "instance": "/api/users", + "traceId": "403403403403" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Forbidden (access denied) + '404': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Not Found", + "status": 404, + "detail": "User not found with id: 42", + "instance": "/api/users/42", + "traceId": "cdef1234abcd5678" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Not Found + '500': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Internal Server Error", + "status": 500, + "detail": "An unexpected error occurred.", + "instance": "/api/users", + "traceId": "ab12cd34ef56" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Server error + tags: + - Signup + /signup/address: + post: + operationId: saveAddress + parameters: + - in: header + name: X-Signup-Token + required: true + schema: + type: string + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/SignupAddressRequest' + required: true + responses: + '204': + description: No Content + '400': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Bad Request", + "status": 400, + "detail": "Validation failed for request.", + "instance": "/api/users", + "errors": [ + { + "objectName": "createUserRequest", + "field": "email", + "message": "must be a well-formed email address", + "code": "Email" + }, + { + "objectName": "createUserRequest", + "field": "age", + "message": "must be greater than or equal to 0", + "code": "Min" + } + ], + "traceId": "a8c0c4e5f1c24a7e" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Validation error + '401': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Unauthorized", + "status": 401, + "detail": "Full authentication is required to access this resource", + "instance": "/api/users", + "traceId": "401401401401" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Unauthorized + '403': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Forbidden", + "status": 403, + "detail": "Access is denied", + "instance": "/api/users", + "traceId": "403403403403" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Forbidden (access denied) + '404': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Not Found", + "status": 404, + "detail": "User not found with id: 42", + "instance": "/api/users/42", + "traceId": "cdef1234abcd5678" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Not Found + '500': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Internal Server Error", + "status": 500, + "detail": "An unexpected error occurred.", + "instance": "/api/users", + "traceId": "ab12cd34ef56" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Server error + tags: + - Signup + /signup/apply: + post: + operationId: apply + parameters: + - in: header + name: X-Signup-Token + required: true + schema: + type: string + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/SignupApplicationRequest' + required: true + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/SignupOutcomeResponse' + description: OK + '400': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Bad Request", + "status": 400, + "detail": "Validation failed for request.", + "instance": "/api/users", + "errors": [ + { + "objectName": "createUserRequest", + "field": "email", + "message": "must be a well-formed email address", + "code": "Email" + }, + { + "objectName": "createUserRequest", + "field": "age", + "message": "must be greater than or equal to 0", + "code": "Min" + } + ], + "traceId": "a8c0c4e5f1c24a7e" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Validation error + '401': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Unauthorized", + "status": 401, + "detail": "Full authentication is required to access this resource", + "instance": "/api/users", + "traceId": "401401401401" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Unauthorized + '403': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Forbidden", + "status": 403, + "detail": "Access is denied", + "instance": "/api/users", + "traceId": "403403403403" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Forbidden (access denied) + '404': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Not Found", + "status": 404, + "detail": "User not found with id: 42", + "instance": "/api/users/42", + "traceId": "cdef1234abcd5678" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Not Found + '500': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Internal Server Error", + "status": 500, + "detail": "An unexpected error occurred.", + "instance": "/api/users", + "traceId": "ab12cd34ef56" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Server error + tags: + - Signup + /signup/details: + patch: + operationId: updateDetails + parameters: + - in: header + name: X-Signup-Token + required: true + schema: + type: string + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/SignupDetailsRequest' + required: true + responses: + '204': + description: No Content + '400': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Bad Request", + "status": 400, + "detail": "Validation failed for request.", + "instance": "/api/users", + "errors": [ + { + "objectName": "createUserRequest", + "field": "email", + "message": "must be a well-formed email address", + "code": "Email" + }, + { + "objectName": "createUserRequest", + "field": "age", + "message": "must be greater than or equal to 0", + "code": "Min" + } + ], + "traceId": "a8c0c4e5f1c24a7e" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Validation error + '401': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Unauthorized", + "status": 401, + "detail": "Full authentication is required to access this resource", + "instance": "/api/users", + "traceId": "401401401401" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Unauthorized + '403': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Forbidden", + "status": 403, + "detail": "Access is denied", + "instance": "/api/users", + "traceId": "403403403403" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Forbidden (access denied) + '404': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Not Found", + "status": 404, + "detail": "User not found with id: 42", + "instance": "/api/users/42", + "traceId": "cdef1234abcd5678" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Not Found + '500': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Internal Server Error", + "status": 500, + "detail": "An unexpected error occurred.", + "instance": "/api/users", + "traceId": "ab12cd34ef56" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Server error + tags: + - Signup + /signup/email: + patch: + operationId: correctEmail + parameters: + - in: header + name: X-Signup-Token + required: true + schema: + type: string + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/SignupEmailRequest' + required: true + responses: + '204': + description: No Content + '400': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Bad Request", + "status": 400, + "detail": "Validation failed for request.", + "instance": "/api/users", + "errors": [ + { + "objectName": "createUserRequest", + "field": "email", + "message": "must be a well-formed email address", + "code": "Email" + }, + { + "objectName": "createUserRequest", + "field": "age", + "message": "must be greater than or equal to 0", + "code": "Min" + } + ], + "traceId": "a8c0c4e5f1c24a7e" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Validation error + '401': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Unauthorized", + "status": 401, + "detail": "Full authentication is required to access this resource", + "instance": "/api/users", + "traceId": "401401401401" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Unauthorized + '403': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Forbidden", + "status": 403, + "detail": "Access is denied", + "instance": "/api/users", + "traceId": "403403403403" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Forbidden (access denied) + '404': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Not Found", + "status": 404, + "detail": "User not found with id: 42", + "instance": "/api/users/42", + "traceId": "cdef1234abcd5678" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Not Found + '500': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Internal Server Error", + "status": 500, + "detail": "An unexpected error occurred.", + "instance": "/api/users", + "traceId": "ab12cd34ef56" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Server error + tags: + - Signup + /sponsors: + get: + operationId: findSponsors + responses: + '200': + content: + application/json: + schema: + items: + $ref: '#/components/schemas/SponsorResponse' + type: array + description: OK + '400': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Bad Request", + "status": 400, + "detail": "Validation failed for request.", + "instance": "/api/users", + "errors": [ + { + "objectName": "createUserRequest", + "field": "email", + "message": "must be a well-formed email address", + "code": "Email" + }, + { + "objectName": "createUserRequest", + "field": "age", + "message": "must be greater than or equal to 0", + "code": "Min" + } + ], + "traceId": "a8c0c4e5f1c24a7e" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Validation error + '401': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Unauthorized", + "status": 401, + "detail": "Full authentication is required to access this resource", + "instance": "/api/users", + "traceId": "401401401401" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Unauthorized + '403': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Forbidden", + "status": 403, + "detail": "Access is denied", + "instance": "/api/users", + "traceId": "403403403403" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Forbidden (access denied) + '404': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Not Found", + "status": 404, + "detail": "User not found with id: 42", + "instance": "/api/users/42", + "traceId": "cdef1234abcd5678" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Not Found + '500': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Internal Server Error", + "status": 500, + "detail": "An unexpected error occurred.", + "instance": "/api/users", + "traceId": "ab12cd34ef56" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Server error + tags: + - Sponsors + post: + operationId: createSponsor + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/CreateSponsorRequest' + required: true + responses: + '201': + content: + application/json: + schema: + $ref: '#/components/schemas/SponsorResponse' + description: Created + '400': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Bad Request", + "status": 400, + "detail": "Validation failed for request.", + "instance": "/api/users", + "errors": [ + { + "objectName": "createUserRequest", + "field": "email", + "message": "must be a well-formed email address", + "code": "Email" + }, + { + "objectName": "createUserRequest", + "field": "age", + "message": "must be greater than or equal to 0", + "code": "Min" + } + ], + "traceId": "a8c0c4e5f1c24a7e" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Validation error + '401': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Unauthorized", + "status": 401, + "detail": "Full authentication is required to access this resource", + "instance": "/api/users", + "traceId": "401401401401" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Unauthorized + '403': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Forbidden", + "status": 403, + "detail": "Access is denied", + "instance": "/api/users", + "traceId": "403403403403" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Forbidden (access denied) + '404': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Not Found", + "status": 404, + "detail": "User not found with id: 42", + "instance": "/api/users/42", + "traceId": "cdef1234abcd5678" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Not Found + '500': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Internal Server Error", + "status": 500, + "detail": "An unexpected error occurred.", + "instance": "/api/users", + "traceId": "ab12cd34ef56" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Server error + tags: + - Sponsors + /sponsors/{id}: + delete: + operationId: deleteSponsorById + parameters: + - in: path + name: id + required: true + schema: + format: int64 + type: integer + responses: + '204': + description: No Content + '400': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Bad Request", + "status": 400, + "detail": "Validation failed for request.", + "instance": "/api/users", + "errors": [ + { + "objectName": "createUserRequest", + "field": "email", + "message": "must be a well-formed email address", + "code": "Email" + }, + { + "objectName": "createUserRequest", + "field": "age", + "message": "must be greater than or equal to 0", + "code": "Min" + } + ], + "traceId": "a8c0c4e5f1c24a7e" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Validation error + '401': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Unauthorized", + "status": 401, + "detail": "Full authentication is required to access this resource", + "instance": "/api/users", + "traceId": "401401401401" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Unauthorized + '403': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Forbidden", + "status": 403, + "detail": "Access is denied", + "instance": "/api/users", + "traceId": "403403403403" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Forbidden (access denied) + '404': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Not Found", + "status": 404, + "detail": "User not found with id: 42", + "instance": "/api/users/42", + "traceId": "cdef1234abcd5678" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Not Found + '500': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Internal Server Error", + "status": 500, + "detail": "An unexpected error occurred.", + "instance": "/api/users", + "traceId": "ab12cd34ef56" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Server error + tags: + - Sponsors + get: + operationId: findSponsorById + parameters: + - in: path + name: id + required: true + schema: + format: int64 + type: integer + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/SponsorResponse' + description: OK + '400': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Bad Request", + "status": 400, + "detail": "Validation failed for request.", + "instance": "/api/users", + "errors": [ + { + "objectName": "createUserRequest", + "field": "email", + "message": "must be a well-formed email address", + "code": "Email" + }, + { + "objectName": "createUserRequest", + "field": "age", + "message": "must be greater than or equal to 0", + "code": "Min" + } + ], + "traceId": "a8c0c4e5f1c24a7e" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Validation error + '401': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Unauthorized", + "status": 401, + "detail": "Full authentication is required to access this resource", + "instance": "/api/users", + "traceId": "401401401401" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Unauthorized + '403': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Forbidden", + "status": 403, + "detail": "Access is denied", + "instance": "/api/users", + "traceId": "403403403403" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Forbidden (access denied) + '404': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Not Found", + "status": 404, + "detail": "User not found with id: 42", + "instance": "/api/users/42", + "traceId": "cdef1234abcd5678" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Not Found + '500': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Internal Server Error", + "status": 500, + "detail": "An unexpected error occurred.", + "instance": "/api/users", + "traceId": "ab12cd34ef56" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Server error + tags: + - Sponsors + put: + operationId: updateSponsor + parameters: + - in: path + name: id + required: true + schema: + exclusiveMinimum: 0 + format: int64 + type: integer + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/UpdateSponsorRequest' + required: true + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/SponsorResponse' + description: OK + '400': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Bad Request", + "status": 400, + "detail": "Validation failed for request.", + "instance": "/api/users", + "errors": [ + { + "objectName": "createUserRequest", + "field": "email", + "message": "must be a well-formed email address", + "code": "Email" + }, + { + "objectName": "createUserRequest", + "field": "age", + "message": "must be greater than or equal to 0", + "code": "Min" + } + ], + "traceId": "a8c0c4e5f1c24a7e" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Validation error + '401': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Unauthorized", + "status": 401, + "detail": "Full authentication is required to access this resource", + "instance": "/api/users", + "traceId": "401401401401" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Unauthorized + '403': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Forbidden", + "status": 403, + "detail": "Access is denied", + "instance": "/api/users", + "traceId": "403403403403" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Forbidden (access denied) + '404': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Not Found", + "status": 404, + "detail": "User not found with id: 42", + "instance": "/api/users/42", + "traceId": "cdef1234abcd5678" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Not Found + '500': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Internal Server Error", + "status": 500, + "detail": "An unexpected error occurred.", + "instance": "/api/users", + "traceId": "ab12cd34ef56" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Server error + tags: + - Sponsors + /telemetry: + post: + operationId: createTelemetry + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/CreateTelemetryRequest' + required: true + responses: + '201': + content: + application/json: + schema: + $ref: '#/components/schemas/TelemetryResponse' + description: Created + '400': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Bad Request", + "status": 400, + "detail": "Validation failed for request.", + "instance": "/api/users", + "errors": [ + { + "objectName": "createUserRequest", + "field": "email", + "message": "must be a well-formed email address", + "code": "Email" + }, + { + "objectName": "createUserRequest", + "field": "age", + "message": "must be greater than or equal to 0", + "code": "Min" + } + ], + "traceId": "a8c0c4e5f1c24a7e" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Validation error + '401': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Unauthorized", + "status": 401, + "detail": "Full authentication is required to access this resource", + "instance": "/api/users", + "traceId": "401401401401" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Unauthorized + '403': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Forbidden", + "status": 403, + "detail": "Access is denied", + "instance": "/api/users", + "traceId": "403403403403" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Forbidden (access denied) + '404': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Not Found", + "status": 404, + "detail": "User not found with id: 42", + "instance": "/api/users/42", + "traceId": "cdef1234abcd5678" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Not Found + '500': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Internal Server Error", + "status": 500, + "detail": "An unexpected error occurred.", + "instance": "/api/users", + "traceId": "ab12cd34ef56" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Server error + tags: + - Telemetries + /telemetry/{id}: + get: + operationId: findTelemetryById + parameters: + - in: path + name: id + required: true + schema: + format: int64 + type: integer + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/TelemetryResponse' + description: OK + '400': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Bad Request", + "status": 400, + "detail": "Validation failed for request.", + "instance": "/api/users", + "errors": [ + { + "objectName": "createUserRequest", + "field": "email", + "message": "must be a well-formed email address", + "code": "Email" + }, + { + "objectName": "createUserRequest", + "field": "age", + "message": "must be greater than or equal to 0", + "code": "Min" + } + ], + "traceId": "a8c0c4e5f1c24a7e" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Validation error + '401': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Unauthorized", + "status": 401, + "detail": "Full authentication is required to access this resource", + "instance": "/api/users", + "traceId": "401401401401" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Unauthorized + '403': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Forbidden", + "status": 403, + "detail": "Access is denied", + "instance": "/api/users", + "traceId": "403403403403" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Forbidden (access denied) + '404': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Not Found", + "status": 404, + "detail": "User not found with id: 42", + "instance": "/api/users/42", + "traceId": "cdef1234abcd5678" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Not Found + '500': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Internal Server Error", + "status": 500, + "detail": "An unexpected error occurred.", + "instance": "/api/users", + "traceId": "ab12cd34ef56" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Server error + tags: + - Telemetries + /users: + get: + operationId: findUsers + parameters: + - in: query + name: username + required: false + schema: + type: string + - in: query + name: enabled + required: false + schema: + type: boolean + - description: Zero-based page index (0..N) + in: query + name: page + required: false + schema: + default: 0 + minimum: 0 + type: integer + - description: The size of the page to be returned + in: query + name: size + required: false + schema: + default: 20 + minimum: 1 + type: integer + - description: 'Sorting criteria in the format: property,(asc|desc). Default sort order is ascending. Multiple sort criteria are supported.' + in: query + name: sort + required: false + schema: + items: + type: string + type: array + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/PagedModelUserDetailResponse' + description: OK + '400': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Bad Request", + "status": 400, + "detail": "Validation failed for request.", + "instance": "/api/users", + "errors": [ + { + "objectName": "createUserRequest", + "field": "email", + "message": "must be a well-formed email address", + "code": "Email" + }, + { + "objectName": "createUserRequest", + "field": "age", + "message": "must be greater than or equal to 0", + "code": "Min" + } + ], + "traceId": "a8c0c4e5f1c24a7e" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Validation error + '401': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Unauthorized", + "status": 401, + "detail": "Full authentication is required to access this resource", + "instance": "/api/users", + "traceId": "401401401401" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Unauthorized + '403': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Forbidden", + "status": 403, + "detail": "Access is denied", + "instance": "/api/users", + "traceId": "403403403403" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Forbidden (access denied) + '404': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Not Found", + "status": 404, + "detail": "User not found with id: 42", + "instance": "/api/users/42", + "traceId": "cdef1234abcd5678" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Not Found + '500': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Internal Server Error", + "status": 500, + "detail": "An unexpected error occurred.", + "instance": "/api/users", + "traceId": "ab12cd34ef56" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Server error + tags: + - Users + post: + operationId: createUser + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/CreateUserRequest' + required: true + responses: + '201': + content: + application/json: + schema: + $ref: '#/components/schemas/UserDetailResponse' + description: Created + '400': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Bad Request", + "status": 400, + "detail": "Validation failed for request.", + "instance": "/api/users", + "errors": [ + { + "objectName": "createUserRequest", + "field": "email", + "message": "must be a well-formed email address", + "code": "Email" + }, + { + "objectName": "createUserRequest", + "field": "age", + "message": "must be greater than or equal to 0", + "code": "Min" + } + ], + "traceId": "a8c0c4e5f1c24a7e" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Validation error + '401': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Unauthorized", + "status": 401, + "detail": "Full authentication is required to access this resource", + "instance": "/api/users", + "traceId": "401401401401" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Unauthorized + '403': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Forbidden", + "status": 403, + "detail": "Access is denied", + "instance": "/api/users", + "traceId": "403403403403" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Forbidden (access denied) + '404': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Not Found", + "status": 404, + "detail": "User not found with id: 42", + "instance": "/api/users/42", + "traceId": "cdef1234abcd5678" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Not Found + '500': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Internal Server Error", + "status": 500, + "detail": "An unexpected error occurred.", + "instance": "/api/users", + "traceId": "ab12cd34ef56" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Server error + tags: + - Users + /users/deleted: + get: + operationId: findDeletedUsers + parameters: + - description: Zero-based page index (0..N) + in: query + name: page + required: false + schema: + default: 0 + minimum: 0 + type: integer + - description: The size of the page to be returned + in: query + name: size + required: false + schema: + default: 20 + minimum: 1 + type: integer + - description: 'Sorting criteria in the format: property,(asc|desc). Default sort order is ascending. Multiple sort criteria are supported.' + in: query + name: sort + required: false + schema: + items: + type: string + type: array + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/PagedModelUserDetailResponse' + description: OK + '400': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Bad Request", + "status": 400, + "detail": "Validation failed for request.", + "instance": "/api/users", + "errors": [ + { + "objectName": "createUserRequest", + "field": "email", + "message": "must be a well-formed email address", + "code": "Email" + }, + { + "objectName": "createUserRequest", + "field": "age", + "message": "must be greater than or equal to 0", + "code": "Min" + } + ], + "traceId": "a8c0c4e5f1c24a7e" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Validation error + '401': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Unauthorized", + "status": 401, + "detail": "Full authentication is required to access this resource", + "instance": "/api/users", + "traceId": "401401401401" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Unauthorized + '403': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Forbidden", + "status": 403, + "detail": "Access is denied", + "instance": "/api/users", + "traceId": "403403403403" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Forbidden (access denied) + '404': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Not Found", + "status": 404, + "detail": "User not found with id: 42", + "instance": "/api/users/42", + "traceId": "cdef1234abcd5678" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Not Found + '500': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Internal Server Error", + "status": 500, + "detail": "An unexpected error occurred.", + "instance": "/api/users", + "traceId": "ab12cd34ef56" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Server error + tags: + - Users + /users/{id}: + put: + operationId: updateUser + parameters: + - in: path + name: id + required: true + schema: + format: int64 + type: integer + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/UpdateUserRequest' + required: true + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/UserDetailResponse' + description: OK + '400': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Bad Request", + "status": 400, + "detail": "Validation failed for request.", + "instance": "/api/users", + "errors": [ + { + "objectName": "createUserRequest", + "field": "email", + "message": "must be a well-formed email address", + "code": "Email" + }, + { + "objectName": "createUserRequest", + "field": "age", + "message": "must be greater than or equal to 0", + "code": "Min" + } + ], + "traceId": "a8c0c4e5f1c24a7e" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Validation error + '401': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Unauthorized", + "status": 401, + "detail": "Full authentication is required to access this resource", + "instance": "/api/users", + "traceId": "401401401401" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Unauthorized + '403': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Forbidden", + "status": 403, + "detail": "Access is denied", + "instance": "/api/users", + "traceId": "403403403403" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Forbidden (access denied) + '404': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Not Found", + "status": 404, + "detail": "User not found with id: 42", + "instance": "/api/users/42", + "traceId": "cdef1234abcd5678" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Not Found + '500': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Internal Server Error", + "status": 500, + "detail": "An unexpected error occurred.", + "instance": "/api/users", + "traceId": "ab12cd34ef56" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Server error + tags: + - Users + /users/{userId}: + delete: + operationId: deleteUserById + parameters: + - in: path + name: userId + required: true + schema: + format: int64 + type: integer + responses: + '204': + description: No Content + '400': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Bad Request", + "status": 400, + "detail": "Validation failed for request.", + "instance": "/api/users", + "errors": [ + { + "objectName": "createUserRequest", + "field": "email", + "message": "must be a well-formed email address", + "code": "Email" + }, + { + "objectName": "createUserRequest", + "field": "age", + "message": "must be greater than or equal to 0", + "code": "Min" + } + ], + "traceId": "a8c0c4e5f1c24a7e" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Validation error + '401': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Unauthorized", + "status": 401, + "detail": "Full authentication is required to access this resource", + "instance": "/api/users", + "traceId": "401401401401" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Unauthorized + '403': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Forbidden", + "status": 403, + "detail": "Access is denied", + "instance": "/api/users", + "traceId": "403403403403" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Forbidden (access denied) + '404': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Not Found", + "status": 404, + "detail": "User not found with id: 42", + "instance": "/api/users/42", + "traceId": "cdef1234abcd5678" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Not Found + '500': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Internal Server Error", + "status": 500, + "detail": "An unexpected error occurred.", + "instance": "/api/users", + "traceId": "ab12cd34ef56" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Server error + tags: + - Users + get: + operationId: findUserById + parameters: + - in: path + name: userId + required: true + schema: + format: int64 + type: integer + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/UserDetailResponse' + description: OK + '400': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Bad Request", + "status": 400, + "detail": "Validation failed for request.", + "instance": "/api/users", + "errors": [ + { + "objectName": "createUserRequest", + "field": "email", + "message": "must be a well-formed email address", + "code": "Email" + }, + { + "objectName": "createUserRequest", + "field": "age", + "message": "must be greater than or equal to 0", + "code": "Min" + } + ], + "traceId": "a8c0c4e5f1c24a7e" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Validation error + '401': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Unauthorized", + "status": 401, + "detail": "Full authentication is required to access this resource", + "instance": "/api/users", + "traceId": "401401401401" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Unauthorized + '403': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Forbidden", + "status": 403, + "detail": "Access is denied", + "instance": "/api/users", + "traceId": "403403403403" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Forbidden (access denied) + '404': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Not Found", + "status": 404, + "detail": "User not found with id: 42", + "instance": "/api/users/42", + "traceId": "cdef1234abcd5678" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Not Found + '500': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Internal Server Error", + "status": 500, + "detail": "An unexpected error occurred.", + "instance": "/api/users", + "traceId": "ab12cd34ef56" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Server error + tags: + - Users + /users/{userId}/game-accounts: + get: + operationId: findGameAccounts + parameters: + - in: path + name: userId + required: true + schema: + format: int64 + type: integer + responses: + '200': + content: + application/json: + schema: + items: + $ref: '#/components/schemas/GameAccountResponse' + type: array + description: OK + '400': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Bad Request", + "status": 400, + "detail": "Validation failed for request.", + "instance": "/api/users", + "errors": [ + { + "objectName": "createUserRequest", + "field": "email", + "message": "must be a well-formed email address", + "code": "Email" + }, + { + "objectName": "createUserRequest", + "field": "age", + "message": "must be greater than or equal to 0", + "code": "Min" + } + ], + "traceId": "a8c0c4e5f1c24a7e" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Validation error + '401': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Unauthorized", + "status": 401, + "detail": "Full authentication is required to access this resource", + "instance": "/api/users", + "traceId": "401401401401" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Unauthorized + '403': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Forbidden", + "status": 403, + "detail": "Access is denied", + "instance": "/api/users", + "traceId": "403403403403" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Forbidden (access denied) + '404': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Not Found", + "status": 404, + "detail": "User not found with id: 42", + "instance": "/api/users/42", + "traceId": "cdef1234abcd5678" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Not Found + '500': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Internal Server Error", + "status": 500, + "detail": "An unexpected error occurred.", + "instance": "/api/users", + "traceId": "ab12cd34ef56" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Server error + tags: + - Game accounts + /users/{userId}/game-accounts/{game}: + delete: + operationId: clearGameAccount + parameters: + - in: path + name: userId + required: true + schema: + format: int64 + type: integer + - in: path + name: game + required: true + schema: + type: string + responses: + '204': + description: No Content + '400': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Bad Request", + "status": 400, + "detail": "Validation failed for request.", + "instance": "/api/users", + "errors": [ + { + "objectName": "createUserRequest", + "field": "email", + "message": "must be a well-formed email address", + "code": "Email" + }, + { + "objectName": "createUserRequest", + "field": "age", + "message": "must be greater than or equal to 0", + "code": "Min" + } + ], + "traceId": "a8c0c4e5f1c24a7e" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Validation error + '401': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Unauthorized", + "status": 401, + "detail": "Full authentication is required to access this resource", + "instance": "/api/users", + "traceId": "401401401401" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Unauthorized + '403': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Forbidden", + "status": 403, + "detail": "Access is denied", + "instance": "/api/users", + "traceId": "403403403403" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Forbidden (access denied) + '404': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Not Found", + "status": 404, + "detail": "User not found with id: 42", + "instance": "/api/users/42", + "traceId": "cdef1234abcd5678" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Not Found + '500': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Internal Server Error", + "status": 500, + "detail": "An unexpected error occurred.", + "instance": "/api/users", + "traceId": "ab12cd34ef56" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Server error + tags: + - Game accounts + put: + operationId: setGameAccount + parameters: + - in: path + name: userId + required: true + schema: + format: int64 + type: integer + - in: path + name: game + required: true + schema: + type: string + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/GameAccountRequest' + required: true + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/GameAccountResponse' + description: OK + '400': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Bad Request", + "status": 400, + "detail": "Validation failed for request.", + "instance": "/api/users", + "errors": [ + { + "objectName": "createUserRequest", + "field": "email", + "message": "must be a well-formed email address", + "code": "Email" + }, + { + "objectName": "createUserRequest", + "field": "age", + "message": "must be greater than or equal to 0", + "code": "Min" + } + ], + "traceId": "a8c0c4e5f1c24a7e" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Validation error + '401': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Unauthorized", + "status": 401, + "detail": "Full authentication is required to access this resource", + "instance": "/api/users", + "traceId": "401401401401" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Unauthorized + '403': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Forbidden", + "status": 403, + "detail": "Access is denied", + "instance": "/api/users", + "traceId": "403403403403" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Forbidden (access denied) + '404': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Not Found", + "status": 404, + "detail": "User not found with id: 42", + "instance": "/api/users/42", + "traceId": "cdef1234abcd5678" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Not Found + '500': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Internal Server Error", + "status": 500, + "detail": "An unexpected error occurred.", + "instance": "/api/users", + "traceId": "ab12cd34ef56" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Server error + tags: + - Game accounts + /users/{userId}/memberProfiles: + get: + operationId: findMemberProfileByUserId + parameters: + - in: path + name: userId + required: true + schema: + format: int64 + type: integer + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/MemberProfileResponse' + description: OK + '400': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Bad Request", + "status": 400, + "detail": "Validation failed for request.", + "instance": "/api/users", + "errors": [ + { + "objectName": "createUserRequest", + "field": "email", + "message": "must be a well-formed email address", + "code": "Email" + }, + { + "objectName": "createUserRequest", + "field": "age", + "message": "must be greater than or equal to 0", + "code": "Min" + } + ], + "traceId": "a8c0c4e5f1c24a7e" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Validation error + '401': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Unauthorized", + "status": 401, + "detail": "Full authentication is required to access this resource", + "instance": "/api/users", + "traceId": "401401401401" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Unauthorized + '403': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Forbidden", + "status": 403, + "detail": "Access is denied", + "instance": "/api/users", + "traceId": "403403403403" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Forbidden (access denied) + '404': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Not Found", + "status": 404, + "detail": "User not found with id: 42", + "instance": "/api/users/42", + "traceId": "cdef1234abcd5678" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Not Found + '500': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Internal Server Error", + "status": 500, + "detail": "An unexpected error occurred.", + "instance": "/api/users", + "traceId": "ab12cd34ef56" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Server error + tags: + - Member Profiles + put: + operationId: updateMemberProfile + parameters: + - in: path + name: userId + required: true + schema: + format: int64 + type: integer + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/UpdateMemberProfileRequest' + required: true + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/MemberProfileResponse' + description: OK + '400': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Bad Request", + "status": 400, + "detail": "Validation failed for request.", + "instance": "/api/users", + "errors": [ + { + "objectName": "createUserRequest", + "field": "email", + "message": "must be a well-formed email address", + "code": "Email" + }, + { + "objectName": "createUserRequest", + "field": "age", + "message": "must be greater than or equal to 0", + "code": "Min" + } + ], + "traceId": "a8c0c4e5f1c24a7e" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Validation error + '401': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Unauthorized", + "status": 401, + "detail": "Full authentication is required to access this resource", + "instance": "/api/users", + "traceId": "401401401401" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Unauthorized + '403': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Forbidden", + "status": 403, + "detail": "Access is denied", + "instance": "/api/users", + "traceId": "403403403403" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Forbidden (access denied) + '404': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Not Found", + "status": 404, + "detail": "User not found with id: 42", + "instance": "/api/users/42", + "traceId": "cdef1234abcd5678" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Not Found + '500': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Internal Server Error", + "status": 500, + "detail": "An unexpected error occurred.", + "instance": "/api/users", + "traceId": "ab12cd34ef56" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Server error + tags: + - Member Profiles + /users/{userId}/memberships: + post: + operationId: boardCreateMembership + parameters: + - in: path + name: userId + required: true + schema: + format: int64 + type: integer + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/BoardCreateMembershipRequest' + required: true + responses: + '201': + content: + application/json: + schema: + $ref: '#/components/schemas/MembershipResponse' + description: Created + '400': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Bad Request", + "status": 400, + "detail": "Validation failed for request.", + "instance": "/api/users", + "errors": [ + { + "objectName": "createUserRequest", + "field": "email", + "message": "must be a well-formed email address", + "code": "Email" + }, + { + "objectName": "createUserRequest", + "field": "age", + "message": "must be greater than or equal to 0", + "code": "Min" + } + ], + "traceId": "a8c0c4e5f1c24a7e" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Validation error + '401': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Unauthorized", + "status": 401, + "detail": "Full authentication is required to access this resource", + "instance": "/api/users", + "traceId": "401401401401" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Unauthorized + '403': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Forbidden", + "status": 403, + "detail": "Access is denied", + "instance": "/api/users", + "traceId": "403403403403" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Forbidden (access denied) + '404': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Not Found", + "status": 404, + "detail": "User not found with id: 42", + "instance": "/api/users/42", + "traceId": "cdef1234abcd5678" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Not Found + '500': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Internal Server Error", + "status": 500, + "detail": "An unexpected error occurred.", + "instance": "/api/users", + "traceId": "ab12cd34ef56" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Server error + tags: + - Memberships + /users/{userId}/memberships/deleted: + get: + operationId: findDeletedMemberships + parameters: + - in: path + name: userId + required: true + schema: + exclusiveMinimum: 0 + format: int64 + type: integer + responses: + '200': + content: + application/json: + schema: + items: + $ref: '#/components/schemas/MembershipResponse' + type: array + description: OK + '400': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Bad Request", + "status": 400, + "detail": "Validation failed for request.", + "instance": "/api/users", + "errors": [ + { + "objectName": "createUserRequest", + "field": "email", + "message": "must be a well-formed email address", + "code": "Email" + }, + { + "objectName": "createUserRequest", + "field": "age", + "message": "must be greater than or equal to 0", + "code": "Min" + } + ], + "traceId": "a8c0c4e5f1c24a7e" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Validation error + '401': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Unauthorized", + "status": 401, + "detail": "Full authentication is required to access this resource", + "instance": "/api/users", + "traceId": "401401401401" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Unauthorized + '403': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Forbidden", + "status": 403, + "detail": "Access is denied", + "instance": "/api/users", + "traceId": "403403403403" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Forbidden (access denied) + '404': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Not Found", + "status": 404, + "detail": "User not found with id: 42", + "instance": "/api/users/42", + "traceId": "cdef1234abcd5678" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Not Found + '500': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Internal Server Error", + "status": 500, + "detail": "An unexpected error occurred.", + "instance": "/api/users", + "traceId": "ab12cd34ef56" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Server error + tags: + - Memberships + /users/{userId}/restore: + put: + operationId: restoreDeletedUserById + parameters: + - in: path + name: userId + required: true + schema: + format: int64 + type: integer + responses: + '204': + description: No Content + '400': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Bad Request", + "status": 400, + "detail": "Validation failed for request.", + "instance": "/api/users", + "errors": [ + { + "objectName": "createUserRequest", + "field": "email", + "message": "must be a well-formed email address", + "code": "Email" + }, + { + "objectName": "createUserRequest", + "field": "age", + "message": "must be greater than or equal to 0", + "code": "Min" + } + ], + "traceId": "a8c0c4e5f1c24a7e" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Validation error + '401': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Unauthorized", + "status": 401, + "detail": "Full authentication is required to access this resource", + "instance": "/api/users", + "traceId": "401401401401" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Unauthorized + '403': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Forbidden", + "status": 403, + "detail": "Access is denied", + "instance": "/api/users", + "traceId": "403403403403" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Forbidden (access denied) + '404': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Not Found", + "status": 404, + "detail": "User not found with id: 42", + "instance": "/api/users/42", + "traceId": "cdef1234abcd5678" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Not Found + '500': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Internal Server Error", + "status": 500, + "detail": "An unexpected error occurred.", + "instance": "/api/users", + "traceId": "ab12cd34ef56" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Server error + tags: + - Users + /users/{userId}/roles: + put: + operationId: toggleUserRole + parameters: + - in: path + name: userId + required: true + schema: + format: int64 + type: integer + - in: query + name: role + required: true + schema: + $ref: '#/components/schemas/Role' + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/UserDetailResponse' + description: OK + '400': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Bad Request", + "status": 400, + "detail": "Validation failed for request.", + "instance": "/api/users", + "errors": [ + { + "objectName": "createUserRequest", + "field": "email", + "message": "must be a well-formed email address", + "code": "Email" + }, + { + "objectName": "createUserRequest", + "field": "age", + "message": "must be greater than or equal to 0", + "code": "Min" + } + ], + "traceId": "a8c0c4e5f1c24a7e" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Validation error + '401': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Unauthorized", + "status": 401, + "detail": "Full authentication is required to access this resource", + "instance": "/api/users", + "traceId": "401401401401" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Unauthorized + '403': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Forbidden", + "status": 403, + "detail": "Access is denied", + "instance": "/api/users", + "traceId": "403403403403" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Forbidden (access denied) + '404': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Not Found", + "status": 404, + "detail": "User not found with id: 42", + "instance": "/api/users/42", + "traceId": "cdef1234abcd5678" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Not Found + '500': + content: + application/json: + example: | + { + "type": "about:blank", + "title": "Internal Server Error", + "status": 500, + "detail": "An unexpected error occurred.", + "instance": "/api/users", + "traceId": "ab12cd34ef56" + } + schema: + $ref: '#/components/schemas/ApiError' + description: Server error + tags: + - Users +servers: +- description: Generated server url + url: http://localhost:8080 +tags: +- description: Admin cohort listings + detail + name: Cohorts +- description: API for managing outbound emails + name: Email Management +- description: Per-member, per-game handles + name: Game accounts +- description: 'Admin: external cohort target catalog' + name: Cohort Targets +- description: Teams, seasons and rosters + name: Esports +- description: 'Admin: logical subjects + their per-system mappings' + name: Cohort Subjects +- description: API for managing job executions + name: Job Management diff --git a/services/api/src/test/kotlin/net/blueshell/api/platform/config/OpenApiSpecGeneratorTest.kt b/services/api/src/test/kotlin/net/blueshell/api/platform/config/OpenApiSpecGeneratorTest.kt index 5d14f54d4..6c2c20f9d 100644 --- a/services/api/src/test/kotlin/net/blueshell/api/platform/config/OpenApiSpecGeneratorTest.kt +++ b/services/api/src/test/kotlin/net/blueshell/api/platform/config/OpenApiSpecGeneratorTest.kt @@ -15,7 +15,11 @@ import org.springframework.test.web.servlet.result.MockMvcResultMatchers.status import org.springframework.test.web.servlet.setup.DefaultMockMvcBuilder import org.springframework.test.web.servlet.setup.MockMvcBuilders import org.springframework.web.context.WebApplicationContext +import org.yaml.snakeyaml.DumperOptions +import org.yaml.snakeyaml.Yaml +import tools.jackson.databind.ObjectMapper import java.io.File +import java.util.TreeMap /** * Generates the OpenAPI specification via in-memory H2 database (no MariaDB required). @@ -25,9 +29,14 @@ import java.io.File * hibernate ddl-auto=create-drop allows the app to bootstrap without a real database. * * The test GETs the /v3/api-docs endpoint with MockMvc configured to return server - * URLs as http://localhost:8080, then writes the raw JSON response to build/openapi.raw.json. - * The Gradle dumpOpenApiSpec task then normalizes this via `jq -S -c` into the committed - * services/api/openapi.json. + * URLs as http://localhost:8080, then writes the response to build/openapi.raw.yaml as + * block-style YAML with its keys sorted. The Gradle dumpOpenApiSpec task copies that to the + * committed services/api/openapi.yaml. + * + * YAML with a line per value rather than minified JSON, because the committed spec is a + * generated file that every branch touching a controller regenerates. One line per value + * means two branches adding an endpoint each conflict only where they actually disagree, + * where a single-line document conflicts on the whole file every time. * * This test is tagged "openapi-gen" and excluded from the normal test task, so it only * runs when explicitly invoked via the dumpOpenApiSpec task. @@ -71,17 +80,38 @@ class OpenApiSpecGeneratorTest { .andReturn() val rawSpec = response.response.contentAsString - // Write to the build directory; gradle's layout.buildDirectory resolves relative to the current project. - // The dumpOpenApiSpec task will read from here. - val outputDir = File(System.getProperty("java.io.tmpdir")).resolve("openapi-spec-gen-${System.currentTimeMillis()}") - outputDir.mkdirs() - // Also write to the standard Gradle build directory path for this module. + // Keys sorted so the diff is about what the api changed, not about the order springdoc + // happened to walk the beans in. + val sorted = sortKeys(ObjectMapper().readValue(rawSpec, Any::class.java)) + + val options = DumperOptions().apply { + defaultFlowStyle = DumperOptions.FlowStyle.BLOCK + isPrettyFlow = true + indent = 2 + // Long descriptions stay on their line rather than being folded, so a reworded + // sentence is a one-line diff. + width = Int.MAX_VALUE + splitLines = false + } + val yaml = Yaml(options).dump(sorted) + + // gradle's layout.buildDirectory resolves relative to the current project, so the + // dumpOpenApiSpec task reads from here. val buildDir = File(System.getProperty("user.dir")).resolve("build") buildDir.mkdirs() - val outputFile = File(buildDir, "openapi.raw.json") - outputFile.writeText(rawSpec) + val outputFile = File(buildDir, "openapi.raw.yaml") + outputFile.writeText(yaml) println("OpenAPI raw spec written to ${outputFile.absolutePath}") } + + /** Recursively sorts every object's keys; arrays keep the order the api gave them. */ + private fun sortKeys(node: Any?): Any? = when (node) { + is Map<*, *> -> TreeMap().apply { + node.forEach { (key, value) -> put(key as String, sortKeys(value)) } + } + is List<*> -> node.map { sortKeys(it) } + else -> node + } } diff --git a/services/frontend/docker-compose.yml b/services/frontend/docker-compose.yml index a3afa1229..c4e43bc4e 100644 --- a/services/frontend/docker-compose.yml +++ b/services/frontend/docker-compose.yml @@ -11,7 +11,7 @@ services: - "3000:3000" volumes: - .:/usr/app - - ../api/openapi.json:/usr/api/openapi.json:ro + - ../api/openapi.yaml:/usr/api/openapi.yaml:ro - ../../libs/openapi-specs:/libs/openapi-specs:ro - /usr/app/.yarn - /usr/app/node_modules diff --git a/services/frontend/openapi-ts.blueshell.config.ts b/services/frontend/openapi-ts.blueshell.config.ts index 5ea2c5205..1f069d800 100644 --- a/services/frontend/openapi-ts.blueshell.config.ts +++ b/services/frontend/openapi-ts.blueshell.config.ts @@ -1,5 +1,5 @@ export default { - input: '../api/openapi.json', + input: '../api/openapi.yaml', output: { path: 'src/services/api/blueshell', },