From 0921e2b059497c84cf581281559eaf8a5e351c4a Mon Sep 17 00:00:00 2001 From: Joris Wouter Jonkers Date: Wed, 2 Sep 2026 09:39:51 +0200 Subject: [PATCH] build(api): the committed spec is block yaml, a line per value Every branch that touches a controller regenerates the spec, and the spec was one line of minified JSON. Two such branches conflicted on that line every time, whatever they had each changed, and resolving it meant regenerating rather than reading a diff. This branch hit it three times. It is `openapi.yaml` now, block style, keys sorted: 22,495 lines where there was one. Two branches adding an endpoint each conflict only where they actually disagree. The old comment in openapi-common.sh said the extension had to stay .json because @hey-api/openapi-ts parses .yaml as YAML "and errors on single-line flow-style documents". That was a consequence of keeping minified content in a .yaml file, not a reason to keep minifying. Block YAML reads fine, which the generated client proves: it is byte-identical to the one the JSON produced. The generator test writes the YAML with snakeyaml, which the api already bundles, so `dumpOpenApiSpec` is a copy and the jq dependency is gone. `normalize_api_spec` has nothing left to normalise and is kept as a presence check so the call sites still read the same for every spec. --- .gitattributes | 2 +- .github/diff-stats.yml | 2 +- .github/workflows/validate.yml | 4 +- scripts/generate_openapi.sh | 2 +- scripts/openapi-common.sh | 28 +- services/api/build.gradle.kts | 28 +- services/api/openapi.json | 1 - services/api/openapi.yaml | 22450 ++++++++++++++++ .../config/OpenApiSpecGeneratorTest.kt | 50 +- services/frontend/docker-compose.yml | 2 +- .../frontend/openapi-ts.blueshell.config.ts | 2 +- 11 files changed, 22516 insertions(+), 55 deletions(-) delete mode 100644 services/api/openapi.json create mode 100644 services/api/openapi.yaml 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', },