{"openapi":"3.0.0","paths":{"/api/v1/health/live":{"get":{"operationId":"healthLive","parameters":[],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HealthLiveDto"}}}}},"security":[],"summary":"","tags":["health"]}},"/api/v1/health/ready":{"get":{"operationId":"healthReady","parameters":[],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HealthReadyDto"}}}}},"security":[],"summary":"","tags":["health"]}},"/api/v1/auth/login":{"post":{"operationId":"authLogin","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LoginDto"}}}},"responses":{"201":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AuthTokensDto"}}}},"400":{"description":"Validation failed","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}},"security":[],"summary":"","tags":["auth"]}},"/api/v1/auth/refresh":{"post":{"operationId":"authRefresh","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RefreshDto"}}}},"responses":{"201":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AuthTokensDto"}}}},"400":{"description":"Validation failed","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}},"security":[],"summary":"","tags":["auth"]}},"/api/v1/auth/logout":{"post":{"operationId":"authLogout","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LogoutDto"}}}},"responses":{"201":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessDto"}}}},"400":{"description":"Validation failed","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"401":{"description":"Unauthorized","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"403":{"description":"Forbidden","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}},"security":[{"bearer":[]}],"summary":"","tags":["auth"]}},"/api/v1/auth/me":{"get":{"operationId":"authMe","parameters":[],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AuthUserDto"}}}},"401":{"description":"Unauthorized","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"403":{"description":"Forbidden","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}},"security":[{"bearer":[]}],"summary":"","tags":["auth"]},"patch":{"operationId":"authMeUpdate","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateMeDto"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AuthUserDto"}}}},"400":{"description":"Validation failed","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"401":{"description":"Unauthorized","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"403":{"description":"Forbidden","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}},"security":[{"bearer":[]}],"summary":"","tags":["auth"]}},"/api/v1/auth/account-claims":{"post":{"operationId":"authAccountClaim","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AccountClaimDto"}}}},"responses":{"201":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AuthTokensDto"}}}},"400":{"description":"Validation failed","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}},"security":[],"summary":"","tags":["auth"]}},"/api/v1/auth/magic-link/request":{"post":{"operationId":"authMagicLinkRequest","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MagicLinkRequestDto"}}}},"responses":{"201":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MagicLinkRequestResultDto"}}}},"400":{"description":"Validation failed","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}},"security":[],"summary":"","tags":["auth"]}},"/api/v1/auth/magic-link/exchange":{"post":{"operationId":"authMagicLinkExchange","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MagicLinkExchangeDto"}}}},"responses":{"201":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AuthTokensDto"}}}},"400":{"description":"Validation failed","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}},"security":[],"summary":"","tags":["auth"]}},"/api/v1/auth/password-resets":{"post":{"operationId":"authPasswordResetRequest","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PasswordResetRequestDto"}}}},"responses":{"201":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessDto"}}}},"400":{"description":"Validation failed","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}},"security":[],"summary":"","tags":["auth"]}},"/api/v1/auth/password-resets/consume":{"post":{"operationId":"authPasswordResetConsume","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PasswordResetConsumeDto"}}}},"responses":{"201":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessDto"}}}},"400":{"description":"Validation failed","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}},"security":[],"summary":"","tags":["auth"]}},"/api/v1/mail/unsubscribe":{"post":{"operationId":"mailUnsubscribe","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnsubscribeDto"}}}},"responses":{"201":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessDto"}}}},"400":{"description":"Validation failed","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}},"security":[],"summary":"","tags":["mail"]}},"/api/v1/mail/webhooks/{provider}":{"post":{"operationId":"mailEventsWebhook","parameters":[{"name":"provider","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookDto"}}}},"responses":{"201":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MailWebhookResultDto"}}}},"400":{"description":"Validation failed","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}},"security":[],"summary":"","tags":["mail"]}},"/api/v1/mail/inbox":{"get":{"operationId":"mailInboxList","parameters":[{"name":"recipient","required":false,"in":"query","schema":{"type":"string"}},{"name":"limit","required":false,"in":"query","schema":{"type":"number"}},{"name":"offset","required":false,"in":"query","schema":{"type":"number"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MailInboxPageDto"}}}},"401":{"description":"Unauthorized","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"403":{"description":"Forbidden","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}},"security":[{"bearer":[]}],"summary":"","tags":["mail"]}},"/api/v1/mail/inbox/{id}":{"get":{"operationId":"mailInboxGet","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MailInboxMessageDto"}}}},"401":{"description":"Unauthorized","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"403":{"description":"Forbidden","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}},"security":[{"bearer":[]}],"summary":"","tags":["mail"]}},"/api/v1/users":{"get":{"operationId":"usersList","parameters":[{"name":"q","required":false,"in":"query","schema":{"type":"string"}},{"name":"role","required":false,"in":"query","schema":{"type":"string"}},{"name":"tag","required":false,"in":"query","schema":{"type":"string"}},{"name":"includeStaff","required":false,"in":"query","schema":{"type":"boolean"}},{"name":"excludeEventId","required":false,"in":"query","schema":{"type":"string"}},{"name":"limit","required":false,"in":"query","schema":{"type":"number"}},{"name":"offset","required":false,"in":"query","schema":{"type":"number"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserPageDto"}}}},"401":{"description":"Unauthorized","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"403":{"description":"Forbidden","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}},"security":[{"bearer":[]}],"summary":"","tags":["users"]},"post":{"operationId":"usersCreate","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateUserDto"}}}},"responses":{"201":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserDto"}}}},"400":{"description":"Validation failed","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"401":{"description":"Unauthorized","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"403":{"description":"Forbidden","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}},"security":[{"bearer":[]}],"summary":"","tags":["users"]}},"/api/v1/users/export":{"get":{"operationId":"usersExport","parameters":[{"name":"q","required":false,"in":"query","schema":{"type":"string"}},{"name":"role","required":false,"in":"query","schema":{"type":"string"}},{"name":"tag","required":false,"in":"query","schema":{"type":"string"}},{"name":"ids","required":false,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"text/csv":{"schema":{"type":"string"}}}},"401":{"description":"Unauthorized","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"403":{"description":"Forbidden","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}},"security":[{"bearer":[]}],"summary":"","tags":["users"]}},"/api/v1/users/{id}":{"get":{"operationId":"usersGet","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserDto"}}}},"401":{"description":"Unauthorized","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"403":{"description":"Forbidden","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}},"security":[{"bearer":[]}],"summary":"","tags":["users"]},"patch":{"operationId":"usersUpdate","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateUserDto"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserDto"}}}},"400":{"description":"Validation failed","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"401":{"description":"Unauthorized","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"403":{"description":"Forbidden","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}},"security":[{"bearer":[]}],"summary":"","tags":["users"]},"delete":{"operationId":"usersDelete","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessDto"}}}},"401":{"description":"Unauthorized","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"403":{"description":"Forbidden","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"404":{"description":"User not found","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"409":{"description":"Cannot deactivate the last staff admin","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}},"security":[{"bearer":[]}],"summary":"","tags":["users"]}},"/api/v1/users/{id}/tags":{"post":{"operationId":"tagsAssign","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AssignTagsDto"}}}},"responses":{"201":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserDto"}}}},"400":{"description":"Validation failed","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"401":{"description":"Unauthorized","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"403":{"description":"Forbidden","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}},"security":[{"bearer":[]}],"summary":"","tags":["users"]}},"/api/v1/users/import":{"post":{"operationId":"usersImport","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ImportUsersDto"}}}},"responses":{"201":{"description":"","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/UserDto"}}}}},"400":{"description":"Validation failed","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"401":{"description":"Unauthorized","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"403":{"description":"Forbidden","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}},"security":[{"bearer":[]}],"summary":"","tags":["users"]}},"/api/v1/tags":{"get":{"operationId":"tagsList","parameters":[],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/TagDto"}}}}},"401":{"description":"Unauthorized","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"403":{"description":"Forbidden","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}},"security":[{"bearer":[]}],"summary":"","tags":["users"]},"post":{"operationId":"tagsCreate","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateTagDto"}}}},"responses":{"201":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TagDto"}}}},"400":{"description":"Validation failed","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"401":{"description":"Unauthorized","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"403":{"description":"Forbidden","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}},"security":[{"bearer":[]}],"summary":"","tags":["users"]}},"/api/v1/tags/{id}":{"patch":{"operationId":"tagsUpdate","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateTagDto"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TagDto"}}}},"400":{"description":"Validation failed","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"401":{"description":"Unauthorized","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"403":{"description":"Forbidden","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"404":{"description":"Tag not found","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"409":{"description":"Tag name already exists","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}},"security":[{"bearer":[]}],"summary":"","tags":["users"]},"delete":{"operationId":"tagsDelete","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessDto"}}}},"401":{"description":"Unauthorized","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"403":{"description":"Forbidden","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}},"security":[{"bearer":[]}],"summary":"","tags":["users"]}},"/api/v1/events":{"get":{"operationId":"eventsList","parameters":[{"name":"limit","required":false,"in":"query","schema":{"type":"number"}},{"name":"offset","required":false,"in":"query","schema":{"type":"number"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EventPageDto"}}}},"401":{"description":"Unauthorized","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"403":{"description":"Forbidden","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}},"security":[{"bearer":[]}],"summary":"","tags":["events"]},"post":{"operationId":"eventsCreate","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateEventDto"}}}},"responses":{"201":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EventDto"}}}},"400":{"description":"Validation failed","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"401":{"description":"Unauthorized","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"403":{"description":"Forbidden","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}},"security":[{"bearer":[]}],"summary":"","tags":["events"]}},"/api/v1/events/active":{"get":{"operationId":"eventsGetActive","parameters":[],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EventDto"}}}},"404":{"description":"No summit is marked as the mobile-active event","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}},"security":[],"summary":"","tags":["events"]}},"/api/v1/events/{id}":{"get":{"operationId":"eventsGet","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EventDto"}}}}},"security":[],"summary":"","tags":["events"]},"patch":{"operationId":"eventsUpdate","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateEventDto"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EventDto"}}}},"400":{"description":"Validation failed","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"401":{"description":"Unauthorized","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"403":{"description":"Forbidden","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}},"security":[{"bearer":[]}],"summary":"","tags":["events"]},"delete":{"operationId":"eventsDelete","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessDto"}}}},"401":{"description":"Unauthorized","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"403":{"description":"Forbidden","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}},"security":[{"bearer":[]}],"summary":"","tags":["events"]}},"/api/v1/events/{id}/statistics":{"get":{"operationId":"eventsStats","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EventStatsDto"}}}},"401":{"description":"Unauthorized","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"403":{"description":"Forbidden","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}},"security":[{"bearer":[]}],"summary":"","tags":["events"]}},"/api/v1/events/{id}/revenue":{"get":{"operationId":"eventsRevenue","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EventRevenueDto"}}}},"401":{"description":"Unauthorized","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"403":{"description":"Forbidden","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"404":{"description":"Not Found","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}},"security":[{"bearer":[]}],"summary":"","tags":["events"]}},"/api/v1/events/{id}/registrations/export":{"get":{"operationId":"eventsRegistrationsExport","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}},{"name":"q","required":false,"in":"query","schema":{"type":"string"}},{"name":"tag","required":false,"in":"query","schema":{"type":"string"}},{"name":"ids","required":false,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"text/csv":{"schema":{"type":"string"}}}},"401":{"description":"Unauthorized","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"403":{"description":"Forbidden","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"404":{"description":"Not Found","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}},"security":[{"bearer":[]}],"summary":"","tags":["events"]}},"/api/v1/sponsors":{"get":{"operationId":"sponsorsList","parameters":[],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/SponsorDto"}}}}},"401":{"description":"Unauthorized","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"403":{"description":"Forbidden","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}},"security":[{"bearer":[]}],"summary":"","tags":["events"]},"post":{"operationId":"sponsorsCreate","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateSponsorDto"}}}},"responses":{"201":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SponsorDto"}}}},"400":{"description":"Validation failed","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"401":{"description":"Unauthorized","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"403":{"description":"Forbidden","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}},"security":[{"bearer":[]}],"summary":"","tags":["events"]}},"/api/v1/sponsors/{id}":{"get":{"operationId":"sponsorsGet","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SponsorDto"}}}},"401":{"description":"Unauthorized","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"403":{"description":"Forbidden","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"404":{"description":"Sponsor not found","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}},"security":[{"bearer":[]}],"summary":"","tags":["events"]},"patch":{"operationId":"sponsorsUpdate","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateSponsorDto"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SponsorDto"}}}},"400":{"description":"Validation failed","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"401":{"description":"Unauthorized","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"403":{"description":"Forbidden","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"404":{"description":"Sponsor not found","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}},"security":[{"bearer":[]}],"summary":"","tags":["events"]},"delete":{"operationId":"sponsorsDelete","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessDto"}}}},"401":{"description":"Unauthorized","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"403":{"description":"Forbidden","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"404":{"description":"Sponsor not found","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}},"security":[{"bearer":[]}],"summary":"","tags":["events"]}},"/api/v1/events/{id}/sponsors":{"get":{"operationId":"eventSponsorsList","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/EventSponsorItemDto"}}}}},"401":{"description":"Unauthenticated","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"403":{"description":"Not eligible for this event","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"404":{"description":"Event not found","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}},"security":[{"bearer":[]}],"summary":"Event-scoped public sponsor hierarchy for the mobile Sponsors tab","tags":["events"]},"post":{"operationId":"eventsSetSponsors","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SetSponsorsDto"}}}},"responses":{"201":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EventDto"}}}},"400":{"description":"Validation failed","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"401":{"description":"Unauthorized","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"403":{"description":"Forbidden","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}},"security":[{"bearer":[]}],"summary":"","tags":["events"]}},"/api/v1/files":{"post":{"operationId":"filesCreate","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["purpose"],"properties":{"purpose":{"type":"string"},"key":{"type":"string"},"file":{"type":"string","format":"binary"}}}},"multipart/form-data":{"schema":{"type":"object","required":["purpose"],"properties":{"purpose":{"type":"string"},"key":{"type":"string"},"file":{"type":"string","format":"binary"}}}}}},"responses":{"201":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FileObjectDto"}}}},"400":{"description":"Validation failed","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"401":{"description":"Unauthorized","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"403":{"description":"Forbidden","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}},"security":[{"bearer":[]}],"summary":"","tags":["files"]}},"/api/v1/events/{id}/stages":{"get":{"operationId":"stagesList","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/StageDto"}}}}},"401":{"description":"Unauthorized","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"403":{"description":"Forbidden","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"404":{"description":"Event not found","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}},"security":[{"bearer":[]}],"summary":"","tags":["program"]},"post":{"operationId":"stagesCreate","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateStageDto"}}}},"responses":{"201":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StageDto"}}}},"400":{"description":"Validation failed","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"401":{"description":"Unauthorized","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"403":{"description":"Forbidden","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"404":{"description":"Event not found","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"409":{"description":"A stage with this name already exists for the event","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}},"security":[{"bearer":[]}],"summary":"","tags":["program"]}},"/api/v1/stages/{id}":{"patch":{"operationId":"stagesUpdate","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateStageDto"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StageDto"}}}},"400":{"description":"Validation failed","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"401":{"description":"Unauthorized","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"403":{"description":"Forbidden","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"404":{"description":"Stage not found","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"409":{"description":"A stage with this name already exists for the event","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}},"security":[{"bearer":[]}],"summary":"","tags":["program"]}},"/api/v1/events/{id}/stages/reorder":{"post":{"operationId":"stagesReorder","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReorderStagesDto"}}}},"responses":{"201":{"description":"","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/StageDto"}}}}},"400":{"description":"Invalid reorder input","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"401":{"description":"Unauthorized","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"403":{"description":"Forbidden","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}},"security":[{"bearer":[]}],"summary":"","tags":["program"]}},"/api/v1/events/{id}/sessions":{"get":{"operationId":"sessionsList","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}},{"name":"stageId","required":false,"in":"query","schema":{"type":"string"}},{"name":"includeDrafts","required":false,"in":"query","description":"Staff-only: include unpublished sessions","schema":{"type":"boolean"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/SessionDto"}}}}},"401":{"description":"Unauthorized","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"403":{"description":"Forbidden","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"404":{"description":"Event not found","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}},"security":[{"bearer":[]}],"summary":"","tags":["program"]},"post":{"operationId":"sessionsCreate","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateSessionDto"}}}},"responses":{"201":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SessionDto"}}}},"400":{"description":"Invalid session input","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"401":{"description":"Unauthorized","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"403":{"description":"Forbidden","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}},"security":[{"bearer":[]}],"summary":"","tags":["program"]}},"/api/v1/sessions/{id}":{"get":{"operationId":"sessionsGet","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SessionDto"}}}},"401":{"description":"Unauthorized","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"403":{"description":"Forbidden","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"404":{"description":"Session not found","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}},"security":[{"bearer":[]}],"summary":"","tags":["program"]},"patch":{"operationId":"sessionsUpdate","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateSessionDto"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SessionDto"}}}},"400":{"description":"Validation failed","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"401":{"description":"Unauthorized","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"403":{"description":"Forbidden","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"404":{"description":"Session not found","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}},"security":[{"bearer":[]}],"summary":"","tags":["program"]}},"/api/v1/events/{id}/sessions/reorder":{"post":{"operationId":"sessionsReorder","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReorderSessionsDto"}}}},"responses":{"201":{"description":"","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/SessionDto"}}}}},"400":{"description":"Invalid reorder input","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"401":{"description":"Unauthorized","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"403":{"description":"Forbidden","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}},"security":[{"bearer":[]}],"summary":"","tags":["program"]}},"/api/v1/sessions/{id}/publish":{"post":{"operationId":"sessionsPublish","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"201":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SessionDto"}}}},"401":{"description":"Unauthorized","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"403":{"description":"Forbidden","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"404":{"description":"Session not found","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}},"security":[{"bearer":[]}],"summary":"","tags":["program"]}},"/api/v1/sessions/{id}/unpublish":{"post":{"operationId":"sessionsUnpublish","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"201":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SessionDto"}}}},"401":{"description":"Unauthorized","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"403":{"description":"Forbidden","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"404":{"description":"Session not found","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}},"security":[{"bearer":[]}],"summary":"","tags":["program"]}},"/api/v1/events/{id}/blocks":{"post":{"description":"The blocked attendee is never notified. Requests, accepts, sends, and notifications for the pair stop server-side.","operationId":"blocksCreate","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateBlockDto"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BlockDto"}}}},"201":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BlockDto"}}}},"400":{"description":"Self-block","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"401":{"description":"Unauthenticated","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"403":{"description":"Not eligible for this event","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"404":{"description":"Event or attendee not found","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}},"security":[{"bearer":[]}],"summary":"Silently block another attendee (idempotent)","tags":["moderation"]},"get":{"description":"Never returns who blocked the current user.","operationId":"blocksList","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BlockListDto"}}}},"401":{"description":"Unauthenticated","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"403":{"description":"Not eligible for this event","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"404":{"description":"Event not found","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}},"security":[{"bearer":[]}],"summary":"List the current user's own blocks","tags":["moderation"]}},"/api/v1/events/{id}/blocks/{targetUserId}":{"delete":{"operationId":"blocksRemove","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}},{"name":"targetUserId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessDto"}}}},"401":{"description":"Unauthenticated","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"403":{"description":"Not eligible for this event","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"404":{"description":"Event not found","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}},"security":[{"bearer":[]}],"summary":"Remove an existing block (idempotent)","tags":["moderation"]}},"/api/v1/events/{id}/reports":{"post":{"description":"The reported user is derived server-side. The reported party is never notified and sees no report state.","operationId":"reportsCreate","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateReportDto"}}}},"responses":{"200":{"description":"Existing open duplicate returned","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReportReceiptDto"}}}},"201":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReportReceiptDto"}}}},"400":{"description":"Invalid reason, note, or target","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"401":{"description":"Unauthenticated","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"403":{"description":"Not eligible for this event","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"404":{"description":"Event, attendee, or message not found","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"429":{"description":"Report rate limit reached","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}},"security":[{"bearer":[]}],"summary":"Report a user or a conversation message","tags":["moderation"]},"get":{"operationId":"reportsList","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}},{"name":"status","required":false,"in":"query","schema":{"enum":["open","dismissed","actioned"]}},{"name":"limit","required":false,"in":"query","schema":{"type":"integer","minimum":0,"default":50}},{"name":"offset","required":false,"in":"query","schema":{"type":"integer","minimum":0,"default":0}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReportPageDto"}}}},"401":{"description":"Unauthenticated","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"403":{"description":"Staff only","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"404":{"description":"Event not found","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}},"security":[{"bearer":[]}],"summary":"Staff moderation queue (open reports first)","tags":["moderation"]}},"/api/v1/events/{id}/reports/{reportId}":{"get":{"operationId":"reportsDetail","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}},{"name":"reportId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReportDetailDto"}}}},"401":{"description":"Unauthenticated","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"403":{"description":"Staff only","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"404":{"description":"Report not found","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}},"security":[{"bearer":[]}],"summary":"Report context: evidence, account status, prior moderation actions","tags":["moderation"]}},"/api/v1/events/{id}/reports/{reportId}/dismiss":{"post":{"operationId":"reportsDismiss","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}},{"name":"reportId","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ModerationNoteDto"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReportDetailDto"}}}},"400":{"description":"Validation failed","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"401":{"description":"Unauthenticated","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"403":{"description":"Staff only","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"404":{"description":"Report not found","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"409":{"description":"Report already actioned","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}},"security":[{"bearer":[]}],"summary":"Dismiss a report with a staff resolution note (audited, idempotent)","tags":["moderation"]}},"/api/v1/events/{id}/moderation/messages/{messageId}/remove":{"post":{"description":"The database row and report snapshot are preserved. Attendees see a removed placeholder. No new realtime/push/email delivery includes the body.","operationId":"moderationRemoveMessage","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}},{"name":"messageId","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ModerationNoteDto"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessDto"}}}},"400":{"description":"Validation failed","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"401":{"description":"Unauthenticated","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"403":{"description":"Staff only","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"404":{"description":"Message or report not found","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}},"security":[{"bearer":[]}],"summary":"Hide a message from attendee display, preserving evidence (audited, idempotent)","tags":["moderation"]}},"/api/v1/events/{id}/moderation/users/{userId}/suspend":{"post":{"description":"Sets the event-scoped Registration.suspendedAt. The attendee fails all networking eligibility checks but keeps account, ticket, and check-in data. Does not cancel the registration.","operationId":"moderationSuspendUser","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}},{"name":"userId","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ModerationNoteDto"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessDto"}}}},"400":{"description":"Validation failed","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"401":{"description":"Unauthenticated","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"403":{"description":"Staff only","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"404":{"description":"Attendee or report not found","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}},"security":[{"bearer":[]}],"summary":"Suspend event-app/networking access for an attendee (audited, idempotent)","tags":["moderation"]}},"/api/v1/events/{id}/moderation/users/{userId}/reinstate":{"post":{"operationId":"moderationReinstateUser","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}},{"name":"userId","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OptionalNoteDto"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessDto"}}}},"400":{"description":"Validation failed","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"401":{"description":"Unauthenticated","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"403":{"description":"Staff only","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"404":{"description":"Attendee not found","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}},"security":[{"bearer":[]}],"summary":"Clear an event-scoped suspension (audited, idempotent)","tags":["moderation"]}},"/api/v1/events/{id}/attendees":{"get":{"operationId":"attendeesDirectory","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}},{"name":"limit","required":false,"in":"query","schema":{"type":"integer","minimum":0,"default":50}},{"name":"offset","required":false,"in":"query","schema":{"type":"integer","minimum":0,"default":0}},{"name":"q","required":false,"in":"query","description":"Case-insensitive partial match on first name, last name, first+last, or company. Blank or whitespace-only returns the unfiltered eligible list.","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicAttendeePageDto"}}}},"400":{"description":"Invalid pagination","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"401":{"description":"Unauthenticated","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"403":{"description":"Not eligible for this event","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"404":{"description":"Event not found","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}},"security":[{"bearer":[]}],"summary":"Event-scoped public attendee directory","tags":["directory"]}},"/api/v1/events/{id}/attendees/{userId}":{"get":{"operationId":"attendeesGet","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}},{"name":"userId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicAttendeeDto"}}}},"401":{"description":"Unauthenticated","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"403":{"description":"Not eligible for this event","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"404":{"description":"Attendee not found","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}},"security":[{"bearer":[]}],"summary":"Public attendee profile for one event","tags":["directory"]}},"/api/v1/events/{id}/message-requests":{"post":{"operationId":"messageRequestsCreate","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateMessageRequestDto"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MessageRequestRelationshipDto"}}}},"201":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MessageRequestRelationshipDto"}}}},"400":{"description":"Invalid introduction or self-request","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"401":{"description":"Unauthenticated","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"403":{"description":"Not eligible or blocked","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"404":{"description":"Event or attendee not found","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}},"security":[{"bearer":[]}],"summary":"Create or return the existing event-scoped message request for a pair","tags":["message-requests"]},"get":{"operationId":"messageRequestsInbox","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}},{"name":"limit","required":false,"in":"query","schema":{"type":"integer","minimum":0,"default":50}},{"name":"offset","required":false,"in":"query","schema":{"type":"integer","minimum":0,"default":0}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MessageRequestInboxPageDto"}}}},"401":{"description":"Unauthenticated","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"403":{"description":"Not eligible for this event","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"404":{"description":"Event not found","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}},"security":[{"bearer":[]}],"summary":"Pending message requests for the authenticated recipient","tags":["message-requests"]}},"/api/v1/events/{id}/message-requests/{requestId}/accept":{"post":{"operationId":"messageRequestsAccept","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}},{"name":"requestId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MessageRequestRelationshipDto"}}}},"401":{"description":"Unauthenticated","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"403":{"description":"Not the recipient","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"404":{"description":"Request not found","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"409":{"description":"Request already declined","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}},"security":[{"bearer":[]}],"summary":"Accept a pending request and open the pair conversation","tags":["message-requests"]}},"/api/v1/events/{id}/message-requests/{requestId}/decline":{"post":{"operationId":"messageRequestsDecline","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}},{"name":"requestId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessDto"}}}},"401":{"description":"Unauthenticated","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"403":{"description":"Not the recipient","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"404":{"description":"Request not found","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"409":{"description":"Request already accepted","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}},"security":[{"bearer":[]}],"summary":"Silently decline a pending request (recipient only)","tags":["message-requests"]}},"/api/v1/events/{id}/conversations":{"get":{"description":"Newest activity first, conversation id descending as the tie-breaker. Only conversations created by accepting a message request. Does not include pending requests.","operationId":"conversationsList","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}},{"name":"limit","required":false,"in":"query","schema":{"type":"integer","minimum":0,"default":50}},{"name":"offset","required":false,"in":"query","schema":{"type":"integer","minimum":0,"default":0}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConversationPageDto"}}}},"401":{"description":"Unauthenticated","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"403":{"description":"Not eligible for this event","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"404":{"description":"Event not found","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}},"security":[{"bearer":[]}],"summary":"Open conversations for the authenticated attendee on one event","tags":["conversations"]}},"/api/v1/conversations/{id}/messages":{"get":{"description":"Pages are newest-first. Reverse `items` for chronological display. Pass `before` with the previous `nextCursor` to load older messages. nextCursor includes a PostgreSQL snapshot from the first page so a later insert cannot appear on an older page, even with the same millisecond createdAt.","operationId":"conversationsMessages","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}},{"name":"limit","required":false,"in":"query","schema":{"type":"integer","minimum":0,"default":50}},{"name":"before","required":false,"in":"query","description":"Opaque cursor from a previous page nextCursor. Omit for the newest page.","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConversationMessagePageDto"}}}},"400":{"description":"Invalid cursor or pagination","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"401":{"description":"Unauthenticated","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"403":{"description":"Not eligible for this event","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"404":{"description":"Conversation not found or caller is not a participant","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}},"security":[{"bearer":[]}],"summary":"Paginated newest-first message history","tags":["conversations"]},"post":{"description":"Server assigns createdAt. The durable row commits before networking.message.created is visible to Socket.io/push workers. A later dispatch failure does not delete the message.","operationId":"conversationsSendMessage","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateConversationMessageDto"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConversationMessageDto"}}}},"201":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConversationMessageDto"}}}},"400":{"description":"Empty, invalid, or oversized body/key","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"401":{"description":"Unauthenticated","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"403":{"description":"Not eligible or blocked","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"404":{"description":"Conversation not found or caller is not a participant","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"409":{"description":"clientMessageId reused with a different body","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}},"security":[{"bearer":[]}],"summary":"Send a message with a client idempotency key","tags":["conversations"]}},"/api/v1/conversations/{id}/read":{"post":{"operationId":"conversationsMarkRead","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MarkConversationReadDto"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConversationReadDto"}}}},"400":{"description":"Validation failed","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"401":{"description":"Unauthenticated","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"403":{"description":"Not eligible for this event","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"404":{"description":"Conversation not found or caller is not a participant","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}},"security":[{"bearer":[]}],"summary":"Acknowledge conversation-level unread for the authenticated participant","tags":["conversations"]}},"/api/v1/me/push-devices":{"put":{"description":"The authenticated user owns the row. A client-supplied userId is ignored. The Expo token is never returned.","operationId":"pushDevicesUpsert","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpsertPushDeviceDto"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PushDeviceDto"}}}},"400":{"description":"Invalid device payload","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"401":{"description":"Unauthenticated","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"403":{"description":"Forbidden","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}},"security":[{"bearer":[]}],"summary":"Register or refresh the current installation Expo push token","tags":["push-devices"]},"delete":{"operationId":"pushDevicesDeactivate","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeactivatePushDeviceDto"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessDto"}}}},"400":{"description":"Validation failed","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"401":{"description":"Unauthenticated","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"403":{"description":"Forbidden","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}},"security":[{"bearer":[]}],"summary":"Deactivate the current installation token","tags":["push-devices"]}},"/api/v1/me/registrations":{"get":{"operationId":"meRegistrations","parameters":[{"name":"limit","required":false,"in":"query","schema":{"type":"number"}},{"name":"offset","required":false,"in":"query","schema":{"type":"number"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MyRegistrationPageDto"}}}},"401":{"description":"Unauthorized","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"403":{"description":"Forbidden","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}},"security":[{"bearer":[]}],"summary":"","tags":["registrations"]}},"/api/v1/events/{id}/registrations":{"get":{"operationId":"registrationsList","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/RegistrationDto"}}}}},"401":{"description":"Unauthorized","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"403":{"description":"Forbidden","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}},"security":[{"bearer":[]}],"summary":"","tags":["registrations"]},"post":{"operationId":"registrationsRequest","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RequestDto"}}}},"responses":{"201":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RegistrationDto"}}}},"400":{"description":"Validation failed","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}},"security":[],"summary":"","tags":["registrations"]}},"/api/v1/events/{id}/sponsor-interests/export":{"get":{"operationId":"sponsorInterestsExport","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"text/csv":{"schema":{"type":"string"}}}},"401":{"description":"Unauthorized","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"403":{"description":"Forbidden","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}},"security":[{"bearer":[]}],"summary":"","tags":["registrations"]}},"/api/v1/events/{id}/registrations/import":{"post":{"operationId":"registrationsImport","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ImportRegistrationsDto"}}}},"responses":{"201":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RegistrationImportResultDto"}}}},"400":{"description":"Validation failed","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"401":{"description":"Unauthorized","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"403":{"description":"Forbidden","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}},"security":[{"bearer":[]}],"summary":"","tags":["registrations"]}},"/api/v1/events/{id}/invitations":{"post":{"operationId":"registrationsInvite","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InviteDto"}}}},"responses":{"201":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InvitationDto"}}}},"400":{"description":"Validation failed","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"401":{"description":"Unauthorized","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"403":{"description":"Forbidden","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}},"security":[{"bearer":[]}],"summary":"","tags":["registrations"]}},"/api/v1/registrations/{id}":{"get":{"operationId":"registrationsGet","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}},{"name":"token","required":false,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RegistrationDto"}}}},"401":{"description":"Unauthorized","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"403":{"description":"Forbidden","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}},"security":[{"bearer":[]}],"summary":"","tags":["registrations"]},"patch":{"operationId":"registrationsAdminUpdate","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminUpdateDto"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RegistrationDto"}}}},"400":{"description":"Validation failed","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"401":{"description":"Unauthorized","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"403":{"description":"Forbidden","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}},"security":[{"bearer":[]}],"summary":"","tags":["registrations"]},"delete":{"operationId":"registrationsDelete","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessDto"}}}},"401":{"description":"Unauthorized","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"403":{"description":"Forbidden","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}},"security":[{"bearer":[]}],"summary":"","tags":["registrations"]}},"/api/v1/registrations/{id}/sponsor-interests":{"put":{"operationId":"sponsorInterestsReplace","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReplaceSponsorInterestsDto"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SponsorInterestIdsDto"}}}},"400":{"description":"Validation failed","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"401":{"description":"Unauthorized","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"403":{"description":"Forbidden","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}},"security":[{"bearer":[]}],"summary":"","tags":["registrations"]}},"/api/v1/registrations/{id}/notifications":{"post":{"operationId":"registrationsNotify","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotifyDto"}}}},"responses":{"201":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessDto"}}}},"400":{"description":"Validation failed","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"401":{"description":"Unauthorized","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"403":{"description":"Forbidden","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}},"security":[{"bearer":[]}],"summary":"","tags":["registrations"]}},"/api/v1/registrations/{id}/accept":{"post":{"operationId":"registrationsAccept","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AcceptDto"}}}},"responses":{"201":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RegistrationDto"}}}},"400":{"description":"Validation failed","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}},"security":[],"summary":"","tags":["registrations"]}},"/api/v1/registrations/{id}/decline":{"post":{"operationId":"registrationsDecline","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TokenDto"}}}},"responses":{"201":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RegistrationDto"}}}},"400":{"description":"Validation failed","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}},"security":[],"summary":"","tags":["registrations"]}},"/api/v1/registrations/{id}/approve":{"post":{"operationId":"registrationsApprove","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"201":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RegistrationDto"}}}},"401":{"description":"Unauthorized","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"403":{"description":"Forbidden","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}},"security":[{"bearer":[]}],"summary":"","tags":["registrations"]}},"/api/v1/registrations/{id}/reject":{"post":{"operationId":"registrationsReject","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"201":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RegistrationDto"}}}},"401":{"description":"Unauthorized","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"403":{"description":"Forbidden","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}},"security":[{"bearer":[]}],"summary":"","tags":["registrations"]}},"/api/v1/registrations/{id}/assign-ticket":{"post":{"operationId":"registrationsAssignTicket","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AssignTicketDto"}}}},"responses":{"201":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RegistrationDto"}}}},"400":{"description":"Validation failed","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"401":{"description":"Unauthorized","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"403":{"description":"Forbidden","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}},"security":[{"bearer":[]}],"summary":"","tags":["registrations"]}},"/api/v1/registrations/{id}/check-in":{"post":{"operationId":"registrationsCheckIn","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"201":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RegistrationDto"}}}},"401":{"description":"Unauthorized","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"403":{"description":"Forbidden","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}},"security":[{"bearer":[]}],"summary":"","tags":["registrations"]}},"/api/v1/events/{id}/ticket-tiers":{"get":{"operationId":"ticketTiersList","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/TicketTierDto"}}}}},"401":{"description":"Unauthorized","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"403":{"description":"Forbidden","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}},"security":[{"bearer":[]}],"summary":"","tags":["payments"]},"post":{"operationId":"ticketTiersCreate","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateTierDto"}}}},"responses":{"201":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TicketTierDto"}}}},"400":{"description":"Validation failed","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"401":{"description":"Unauthorized","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"403":{"description":"Forbidden","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}},"security":[{"bearer":[]}],"summary":"","tags":["payments"]}},"/api/v1/ticket-tiers/{id}":{"get":{"operationId":"ticketTiersPublic","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TicketTierDto"}}}},"404":{"description":"Ticket tier not found","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}},"security":[],"summary":"","tags":["payments"]},"patch":{"operationId":"ticketTiersUpdate","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateTierDto"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TicketTierDto"}}}},"400":{"description":"Validation failed","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"401":{"description":"Unauthorized","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"403":{"description":"Forbidden","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"404":{"description":"Ticket tier not found","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}},"security":[{"bearer":[]}],"summary":"","tags":["payments"]},"delete":{"operationId":"ticketTiersDelete","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessDto"}}}},"401":{"description":"Unauthorized","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"403":{"description":"Forbidden","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"404":{"description":"Ticket tier not found","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"409":{"description":"Ticket tier is referenced by registrations","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}},"security":[{"bearer":[]}],"summary":"","tags":["payments"]}},"/api/v1/payments/checkout":{"post":{"operationId":"paymentsCheckout","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CheckoutDto"}}}},"responses":{"201":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CheckoutResultDto"}}}},"400":{"description":"Validation failed","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}},"security":[],"summary":"","tags":["payments"]}},"/api/v1/payments/checkout/complete":{"post":{"description":"Fulfill a paid Checkout Session after the buyer returns from Stripe. Idempotent with the signed webhook.","operationId":"paymentsCheckoutComplete","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CompleteCheckoutDto"}}}},"responses":{"201":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StripeWebhookResultDto"}}}},"400":{"description":"Validation failed","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}},"security":[],"summary":"","tags":["payments"]}},"/api/v1/payments/stripe/webhook":{"post":{"description":"Raw Stripe Event JSON. Stripe-Signature is verified with stripe.webhooks.constructEvent.","operationId":"paymentsWebhook","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StripeWebhookDto"}}}},"responses":{"201":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StripeWebhookResultDto"}}}},"400":{"description":"Validation failed","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}},"security":[],"summary":"","tags":["payments"]}}},"info":{"title":"AGS API","description":"Clean NestJS AGS contract","version":"1.0.0","contact":{}},"tags":[],"servers":[],"components":{"securitySchemes":{"bearer":{"scheme":"bearer","bearerFormat":"JWT","type":"http"}},"schemas":{"HealthLiveDto":{"type":"object","properties":{"status":{"type":"string"}},"required":["status"]},"HealthReadyDto":{"type":"object","properties":{"status":{"type":"string"},"store":{"type":"string"}},"required":["status","store"]},"LoginDto":{"type":"object","properties":{"email":{"type":"string"},"password":{"type":"string"}},"required":["email","password"]},"AuthUserDto":{"type":"object","properties":{"id":{"type":"string"},"email":{"type":"string"},"role":{"type":"string","enum":["staff","door","attendee"]},"firstName":{"type":"string"},"lastName":{"type":"string"},"company":{"type":"string"},"title":{"type":"string"},"linkedin":{"type":"string"}},"required":["id","email","role","firstName","lastName"]},"AuthTokensDto":{"type":"object","properties":{"accessToken":{"type":"string"},"refreshToken":{"type":"string"},"tokenType":{"type":"string"},"user":{"$ref":"#/components/schemas/AuthUserDto"}},"required":["accessToken","refreshToken","tokenType","user"]},"RefreshDto":{"type":"object","properties":{"refreshToken":{"type":"string"}},"required":["refreshToken"]},"LogoutDto":{"type":"object","properties":{"refreshToken":{"type":"string"},"installationId":{"type":"string","maxLength":128}},"required":["refreshToken"]},"SuccessDto":{"type":"object","properties":{"success":{"type":"boolean"}},"required":["success"]},"UpdateMeDto":{"type":"object","properties":{"firstName":{"type":"string"},"lastName":{"type":"string"},"company":{"type":"string"},"title":{"type":"string"},"linkedin":{"type":"string"},"email":{"type":"string"}}},"AccountClaimDto":{"type":"object","properties":{"token":{"type":"string"},"password":{"type":"string","minLength":12,"maxLength":128}},"required":["token","password"]},"MagicLinkRequestDto":{"type":"object","properties":{"email":{"type":"string"}},"required":["email"]},"MagicLinkRequestResultDto":{"type":"object","properties":{"success":{"type":"boolean"},"retryAfterSeconds":{"type":"number"}},"required":["success","retryAfterSeconds"]},"MagicLinkExchangeDto":{"type":"object","properties":{"token":{"type":"string"},"role":{"type":"string"}},"required":["token"]},"PasswordResetRequestDto":{"type":"object","properties":{"email":{"type":"string"}},"required":["email"]},"PasswordResetConsumeDto":{"type":"object","properties":{"token":{"type":"string"},"password":{"type":"string","minLength":12,"maxLength":128}},"required":["token","password"]},"UnsubscribeDto":{"type":"object","properties":{"email":{"type":"string"}},"required":["email"]},"WebhookDto":{"type":"object","properties":{"messageId":{"type":"string"},"state":{"type":"string"},"timestamp":{"type":"string"},"token":{"type":"string"},"signature":{"type":"object"},"event-data":{"type":"object"}}},"MailWebhookResultDto":{"type":"object","properties":{"provider":{"type":"string"},"id":{"type":"string"},"state":{"type":"string"}},"required":["provider","id","state"]},"MailInboxItemDto":{"type":"object","properties":{"id":{"type":"string"},"recipient":{"type":"string"},"subject":{"type":"string"},"template":{"type":"string"},"provider":{"type":"string"},"providerMessageId":{"type":"string"},"state":{"type":"string"},"createdAt":{"type":"string","format":"date-time"}},"required":["id","recipient","subject","template","provider","state","createdAt"]},"MailInboxPageDto":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/MailInboxItemDto"}},"total":{"type":"number"},"limit":{"type":"number"},"offset":{"type":"number"}},"required":["items","total","limit","offset"]},"MailInboxMessageDto":{"type":"object","properties":{"id":{"type":"string"},"recipient":{"type":"string"},"subject":{"type":"string"},"template":{"type":"string"},"provider":{"type":"string"},"providerMessageId":{"type":"string"},"state":{"type":"string"},"createdAt":{"type":"string","format":"date-time"},"html":{"type":"string"},"text":{"type":"string"},"intentId":{"type":"string"}},"required":["id","recipient","subject","template","provider","state","createdAt","html","text","intentId"]},"UserDto":{"type":"object","properties":{"id":{"type":"string"},"email":{"type":"string"},"firstName":{"type":"string"},"lastName":{"type":"string"},"company":{"type":"string"},"title":{"type":"string"},"linkedin":{"type":"string"},"secondEmail":{"type":"string"},"thirdEmail":{"type":"string"},"role":{"type":"string","enum":["staff","door","attendee"]},"tags":{"type":"array","items":{"type":"string"}},"updatedAt":{"type":"string","format":"date-time"}},"required":["id","email","firstName","lastName","role","tags","updatedAt"]},"UserPageDto":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/UserDto"}},"total":{"type":"number"},"limit":{"type":"number"},"offset":{"type":"number"}},"required":["items","total","limit","offset"]},"CreateUserDto":{"type":"object","properties":{"email":{"type":"string"},"firstName":{"type":"string"},"lastName":{"type":"string"},"password":{"type":"string"},"company":{"type":"string"},"title":{"type":"string"},"linkedin":{"type":"string"},"role":{"type":"string","enum":["staff","door","attendee"]},"secondEmail":{"type":"string"},"thirdEmail":{"type":"string"},"location":{"type":"string"}},"required":["email","firstName","lastName"]},"UpdateUserDto":{"type":"object","properties":{"firstName":{"type":"string"},"lastName":{"type":"string"},"company":{"type":"string"},"title":{"type":"string"},"email":{"type":"string"},"role":{"type":"string","enum":["staff","door","attendee"]},"linkedin":{"type":"string"},"secondEmail":{"type":"string"},"thirdEmail":{"type":"string"}}},"AssignTagsDto":{"type":"object","properties":{"names":{"type":"array","items":{"type":"string"}}},"required":["names"]},"ImportUsersDto":{"type":"object","properties":{"rows":{"type":"array","items":{"$ref":"#/components/schemas/CreateUserDto"}}},"required":["rows"]},"TagDto":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]},"CreateTagDto":{"type":"object","properties":{"name":{"type":"string"}},"required":["name"]},"UpdateTagDto":{"type":"object","properties":{"name":{"type":"string","minLength":1}},"required":["name"]},"EventDto":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"slug":{"type":"string"},"type":{"type":"string"},"description":{"type":"string"},"address":{"type":"string"},"timezone":{"type":"string"},"startDate":{"type":"string","format":"date-time"},"endDate":{"type":"string","format":"date-time"},"paidEvent":{"type":"boolean"},"isMobileActive":{"type":"boolean","description":"Exactly one summit may be the mobile-active event shown on the attendee Agenda"},"autoApproveRegistrations":{"type":"boolean","description":"When true, accepted invitations and public requests are approved without a staff review"},"sendEventEmails":{"type":"boolean","description":"When true, invite, approval, rejection, request, out-of-town, and ticket-required mail are enqueued. Off by default."},"formUrl":{"type":"string","description":"Public Event Form path staff copy for request-invite"},"sponsorIds":{"type":"array","items":{"type":"string"}},"invitedCount":{"type":"number"},"attendeesCount":{"type":"number"},"logoKey":{"type":"string","nullable":true},"logoUrl":{"type":"string","nullable":true}},"required":["id","name","slug","type","description","address","timezone","startDate","endDate","paidEvent","isMobileActive","autoApproveRegistrations","sendEventEmails","formUrl","sponsorIds","invitedCount","attendeesCount"]},"EventPageDto":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/EventDto"}},"total":{"type":"number"},"limit":{"type":"number"},"offset":{"type":"number"}},"required":["items","total","limit","offset"]},"CreateEventDto":{"type":"object","properties":{"name":{"type":"string"},"timezone":{"type":"string"},"startDate":{"type":"string","format":"date-time"},"endDate":{"type":"string","format":"date-time"},"description":{"type":"string"},"type":{"type":"string","enum":["summit","webinar"]},"address":{"type":"string"},"paidEvent":{"type":"boolean"},"isMobileActive":{"type":"boolean"},"autoApproveRegistrations":{"type":"boolean"},"sendEventEmails":{"type":"boolean"}},"required":["name","timezone","startDate","endDate"]},"UpdateEventDto":{"type":"object","properties":{"name":{"type":"string"},"timezone":{"type":"string"},"startDate":{"type":"string","format":"date-time"},"endDate":{"type":"string","format":"date-time"},"description":{"type":"string"},"type":{"type":"string","enum":["summit","webinar"]},"address":{"type":"string"},"paidEvent":{"type":"boolean"},"autoApproveRegistrations":{"type":"boolean"},"sendEventEmails":{"type":"boolean"},"logoKey":{"type":"string"},"isMobileActive":{"type":"boolean"}}},"EventStatsDto":{"type":"object","properties":{"invited":{"type":"number"},"accepted":{"type":"number"},"approved":{"type":"number"},"checkedIn":{"type":"number"}},"required":["invited","accepted","approved","checkedIn"]},"EventRevenueCurrencyTotalDto":{"type":"object","properties":{"currency":{"type":"string"},"totalRevenue":{"type":"string"}},"required":["currency","totalRevenue"]},"EventRevenueTierDto":{"type":"object","properties":{"tierId":{"type":"string"},"tierName":{"type":"string"},"tierPrice":{"type":"string"},"displayPrice":{"type":"string"},"passFeesToBuyer":{"type":"boolean"},"quantitySold":{"type":"number"},"revenue":{"type":"string"},"currency":{"type":"string"}},"required":["tierId","tierName","tierPrice","displayPrice","passFeesToBuyer","quantitySold","revenue","currency"]},"EventRevenueDto":{"type":"object","properties":{"eventId":{"type":"string"},"eventName":{"type":"string"},"totalRevenue":{"type":"string","nullable":true},"totalSold":{"type":"number"},"currency":{"type":"string","nullable":true},"totalsByCurrency":{"type":"array","items":{"$ref":"#/components/schemas/EventRevenueCurrencyTotalDto"}},"tiers":{"type":"array","items":{"$ref":"#/components/schemas/EventRevenueTierDto"}}},"required":["eventId","eventName","totalRevenue","totalSold","currency","totalsByCurrency","tiers"]},"SponsorDto":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"url":{"type":"string"},"description":{"type":"string"},"imageKey":{"type":"string","nullable":true},"imageUrl":{"type":"string","nullable":true}},"required":["id","name","url","description"]},"CreateSponsorDto":{"type":"object","properties":{"name":{"type":"string","minLength":1},"url":{"type":"string"},"description":{"type":"string"},"imageKey":{"type":"string"}},"required":["name"]},"UpdateSponsorDto":{"type":"object","properties":{"name":{"type":"string","minLength":1},"url":{"type":"string"},"description":{"type":"string"},"imageKey":{"type":"string"}}},"EventSponsorItemDto":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"tier":{"type":"string","description":"Configured EventSponsor.type, lowercased. presenting is the highest mobile tier; contributing is the default."},"level":{"type":"number","description":"Normalized sort key: presenting=0, contributing=1, unknown or blank type=99. Mobile renders lowest level first."},"displayOrder":{"type":"number","nullable":true,"description":"Configured display order when present. Null today — EventSponsor has no display-order column. Fallback is name then id."},"imageUrl":{"type":"string","nullable":true,"description":"Resolved public file URL, or null when the sponsor has no logo"},"url":{"type":"string","nullable":true,"description":"Normalized public https website, or null when missing/invalid so mobile does not open a malformed link"}},"required":["id","name","tier","level","displayOrder","imageUrl","url"]},"SetSponsorsDto":{"type":"object","properties":{"sponsorIds":{"type":"array","items":{"type":"string"}}},"required":["sponsorIds"]},"FileObjectDto":{"type":"object","properties":{"id":{"type":"string"},"key":{"type":"string"},"url":{"type":"string"},"purpose":{"type":"string"}},"required":["id","key","url","purpose"]},"StageDto":{"type":"object","properties":{"id":{"type":"string"},"eventId":{"type":"string"},"name":{"type":"string"},"sortOrder":{"type":"number"}},"required":["id","eventId","name","sortOrder"]},"CreateStageDto":{"type":"object","properties":{"name":{"type":"string","minLength":1}},"required":["name"]},"UpdateStageDto":{"type":"object","properties":{"name":{"type":"string","minLength":1}}},"ReorderStagesDto":{"type":"object","properties":{"stageIds":{"description":"Every stage id of the event, in display order","type":"array","items":{"type":"string"}}},"required":["stageIds"]},"SessionSpeakerDto":{"type":"object","properties":{"id":{"type":"string"},"firstName":{"type":"string"},"lastName":{"type":"string"},"title":{"type":"string"},"company":{"type":"string"},"sortOrder":{"type":"number"}},"required":["id","firstName","lastName","title","company","sortOrder"]},"SessionDto":{"type":"object","properties":{"id":{"type":"string"},"eventId":{"type":"string"},"stageId":{"type":"string","nullable":true,"description":"null means a shared agenda item (e.g. a break) shown under every stage"},"title":{"type":"string"},"description":{"type":"string"},"type":{"type":"string","enum":["talk","workshop","break","other"]},"startsAt":{"type":"string","format":"date-time"},"endsAt":{"type":"string","format":"date-time"},"sortOrder":{"type":"number"},"publishedAt":{"type":"string","format":"date-time","nullable":true},"speakers":{"type":"array","items":{"$ref":"#/components/schemas/SessionSpeakerDto"}}},"required":["id","eventId","stageId","title","description","type","startsAt","endsAt","sortOrder","publishedAt","speakers"]},"SessionSpeakerInputDto":{"type":"object","properties":{"firstName":{"type":"string","minLength":1},"lastName":{"type":"string","minLength":1},"title":{"type":"string"},"company":{"type":"string"}},"required":["firstName","lastName"]},"CreateSessionDto":{"type":"object","properties":{"title":{"type":"string","minLength":1},"description":{"type":"string"},"type":{"type":"string","enum":["talk","workshop","break","other"]},"stageId":{"type":"string","nullable":true,"description":"Omit or null for a shared agenda item (e.g. a break) shown under every stage"},"startsAt":{"type":"string","format":"date-time"},"endsAt":{"type":"string","format":"date-time"},"speakers":{"type":"array","items":{"$ref":"#/components/schemas/SessionSpeakerInputDto"}}},"required":["title","startsAt","endsAt"]},"UpdateSessionDto":{"type":"object","properties":{"title":{"type":"string","minLength":1},"description":{"type":"string"},"type":{"type":"string","enum":["talk","workshop","break","other"]},"stageId":{"type":"string","nullable":true},"startsAt":{"type":"string","format":"date-time"},"endsAt":{"type":"string","format":"date-time"},"speakers":{"type":"array","items":{"$ref":"#/components/schemas/SessionSpeakerInputDto"}}}},"ReorderSessionsDto":{"type":"object","properties":{"sessionIds":{"description":"Every session id of the event, in display order","type":"array","items":{"type":"string"}}},"required":["sessionIds"]},"CreateBlockDto":{"type":"object","properties":{"targetUserId":{"type":"string"}},"required":["targetUserId"]},"BlockDto":{"type":"object","properties":{"targetUserId":{"type":"string"},"displayName":{"type":"string"},"initials":{"type":"string"},"createdAt":{"type":"string","format":"date-time"}},"required":["targetUserId","displayName","initials","createdAt"]},"BlockListDto":{"type":"object","properties":{"items":{"description":"The current user's own blocks only.","type":"array","items":{"$ref":"#/components/schemas/BlockDto"}}},"required":["items"]},"CreateReportDto":{"type":"object","properties":{"targetType":{"type":"string","enum":["user","message"]},"targetUserId":{"type":"string","description":"Required when targetType is user."},"messageId":{"type":"string","description":"Required when targetType is message."},"reason":{"type":"string","enum":["harassment","spam","inappropriate_content","impersonation","safety_concern","other"]},"note":{"type":"string","maxLength":1000}},"required":["targetType","reason"]},"ReportReceiptDto":{"type":"object","properties":{"id":{"type":"string"},"status":{"type":"string","enum":["open","dismissed","actioned"]},"createdAt":{"type":"string","format":"date-time"}},"required":["id","status","createdAt"]},"ModerationUserSummaryDto":{"type":"object","properties":{"userId":{"type":"string"},"displayName":{"type":"string"},"initials":{"type":"string"},"email":{"type":"string","description":"Staff-only surface. Never in attendee DTOs."}},"required":["userId","displayName","initials","email"]},"ReportListItemDto":{"type":"object","properties":{"id":{"type":"string"},"eventId":{"type":"string"},"targetType":{"type":"string","enum":["user","message"]},"reason":{"type":"string"},"status":{"type":"string","enum":["open","dismissed","actioned"]},"createdAt":{"type":"string","format":"date-time"},"reporter":{"$ref":"#/components/schemas/ModerationUserSummaryDto"},"reportedUser":{"nullable":true,"type":"object","allOf":[{"$ref":"#/components/schemas/ModerationUserSummaryDto"}]},"hasMessageContext":{"type":"boolean"}},"required":["id","eventId","targetType","reason","status","createdAt","reporter","reportedUser","hasMessageContext"]},"ReportPageDto":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/ReportListItemDto"}},"total":{"type":"number"},"limit":{"type":"number"},"offset":{"type":"number"}},"required":["items","total","limit","offset"]},"ModerationActionDto":{"type":"object","properties":{"id":{"type":"string"},"action":{"type":"string","enum":["report_dismissed","message_removed","user_suspended","user_reinstated"]},"note":{"type":"string"},"createdAt":{"type":"string","format":"date-time"},"actor":{"$ref":"#/components/schemas/ModerationUserSummaryDto"},"targetUserId":{"type":"string","nullable":true},"messageId":{"type":"string","nullable":true}},"required":["id","action","note","createdAt","actor","targetUserId","messageId"]},"ReportDetailDto":{"type":"object","properties":{"id":{"type":"string"},"eventId":{"type":"string"},"targetType":{"type":"string","enum":["user","message"]},"reason":{"type":"string"},"note":{"type":"string"},"status":{"type":"string","enum":["open","dismissed","actioned"]},"createdAt":{"type":"string","format":"date-time"},"resolvedAt":{"type":"string","format":"date-time","nullable":true},"resolution":{"type":"string","nullable":true},"reporter":{"nullable":true,"type":"object","allOf":[{"$ref":"#/components/schemas/ModerationUserSummaryDto"}]},"reportedUser":{"nullable":true,"type":"object","allOf":[{"$ref":"#/components/schemas/ModerationUserSummaryDto"}]},"messageId":{"type":"string","nullable":true},"messageBody":{"type":"string","nullable":true,"description":"Immutable evidence snapshot captured at report time. Survives removal."},"messageRemovedAt":{"type":"string","format":"date-time","nullable":true},"conversationId":{"type":"string","nullable":true},"reportedUserSuspendedAt":{"type":"string","format":"date-time","nullable":true},"actions":{"type":"array","items":{"$ref":"#/components/schemas/ModerationActionDto"}}},"required":["id","eventId","targetType","reason","note","status","createdAt","resolvedAt","resolution","reporter","reportedUser","messageId","messageBody","messageRemovedAt","conversationId","reportedUserSuspendedAt","actions"]},"ModerationNoteDto":{"type":"object","properties":{"note":{"type":"string","maxLength":1000},"reportId":{"type":"string","description":"Report to mark actioned."}},"required":["note"]},"OptionalNoteDto":{"type":"object","properties":{"note":{"type":"string","maxLength":1000}}},"PublicAttendeeDto":{"type":"object","properties":{"userId":{"type":"string"},"firstName":{"type":"string"},"lastName":{"type":"string"},"displayName":{"type":"string"},"initials":{"type":"string"},"company":{"type":"string","nullable":true},"title":{"type":"string","nullable":true},"linkedin":{"type":"string","nullable":true},"networkingState":{"type":"string","enum":["available","pending","connected","blocked"]},"conversationId":{"type":"string","nullable":true}},"required":["userId","firstName","lastName","displayName","initials","company","title","linkedin","networkingState","conversationId"]},"PublicAttendeePageDto":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/PublicAttendeeDto"}},"total":{"type":"number"},"limit":{"type":"number"},"offset":{"type":"number"}},"required":["items","total","limit","offset"]},"CreateMessageRequestDto":{"type":"object","properties":{"recipientUserId":{"type":"string"},"introduction":{"type":"string","maxLength":1000,"description":"Optional introduction. Blank/whitespace is stored as no introduction. Max 1000 Unicode characters."}},"required":["recipientUserId"]},"MessageRequestRelationshipDto":{"type":"object","properties":{"id":{"type":"string"},"eventId":{"type":"string"},"peerUserId":{"type":"string"},"networkingState":{"type":"string","enum":["available","pending","connected","blocked"],"description":"Sender-safe projection. A silent decline stays pending. Never declined."},"conversationId":{"type":"string","nullable":true},"createdAt":{"type":"string","format":"date-time"}},"required":["id","eventId","peerUserId","networkingState","conversationId","createdAt"]},"MessageRequestSenderDto":{"type":"object","properties":{"userId":{"type":"string"},"firstName":{"type":"string"},"lastName":{"type":"string"},"displayName":{"type":"string"},"initials":{"type":"string"},"company":{"type":"string","nullable":true},"title":{"type":"string","nullable":true},"linkedin":{"type":"string","nullable":true},"role":{"type":"string","enum":["staff","door","attendee"]}},"required":["userId","firstName","lastName","displayName","initials","company","title","linkedin","role"]},"PendingMessageRequestDto":{"type":"object","properties":{"id":{"type":"string"},"eventId":{"type":"string"},"introduction":{"type":"string","nullable":true,"description":"Trimmed introduction, or null when the sender omitted text"},"createdAt":{"type":"string","format":"date-time"},"sender":{"$ref":"#/components/schemas/MessageRequestSenderDto"}},"required":["id","eventId","introduction","createdAt","sender"]},"MessageRequestInboxPageDto":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/PendingMessageRequestDto"}},"total":{"type":"number"},"limit":{"type":"number"},"offset":{"type":"number"}},"required":["items","total","limit","offset"]},"ConversationPeerDto":{"type":"object","properties":{"userId":{"type":"string"},"firstName":{"type":"string"},"lastName":{"type":"string"},"displayName":{"type":"string"},"initials":{"type":"string"},"company":{"type":"string","nullable":true},"title":{"type":"string","nullable":true},"role":{"type":"string","enum":["staff","door","attendee"]}},"required":["userId","firstName","lastName","displayName","initials","company","title","role"]},"ConversationListItemDto":{"type":"object","properties":{"id":{"type":"string"},"eventId":{"type":"string"},"otherParticipant":{"$ref":"#/components/schemas/ConversationPeerDto"},"lastMessagePreview":{"type":"string","nullable":true,"description":"Up to 160 Unicode characters of the latest non-removed message body"},"lastActivityAt":{"type":"string","format":"date-time","description":"lastMessageAt, or conversation createdAt when there are no messages"},"unreadCount":{"type":"number","description":"Messages from the other participant after this viewer (lastReadAt, lastReadMessageId) boundary. Same-millisecond messages with a later id stay unread. Own messages and the accepted introduction are not unread."}},"required":["id","eventId","otherParticipant","lastMessagePreview","lastActivityAt","unreadCount"]},"ConversationPageDto":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/ConversationListItemDto"}},"total":{"type":"number"},"limit":{"type":"number"},"offset":{"type":"number"}},"required":["items","total","limit","offset"]},"ConversationMessageDto":{"type":"object","properties":{"id":{"type":"string"},"conversationId":{"type":"string"},"senderUserId":{"type":"string"},"body":{"type":"string","description":"Empty when kind is removed. Server-normalized body otherwise."},"kind":{"type":"string","enum":["chat","introduction","removed"],"description":"introduction is the accepted request intro (clientMessageId intro:<requestId>). removed hides the original body."},"clientMessageId":{"type":"string","nullable":true,"description":"Client idempotency key. Unique per conversation."},"createdAt":{"type":"string","format":"date-time","description":"Server-assigned creation time. Clients must not send this on create."},"removedAt":{"type":"string","format":"date-time","nullable":true}},"required":["id","conversationId","senderUserId","body","kind","clientMessageId","createdAt","removedAt"]},"ConversationMessagePageDto":{"type":"object","properties":{"items":{"description":"Newest-first page. Reverse items for chronological Gifted Chat display. Pass nextCursor as before to load older messages.","type":"array","items":{"$ref":"#/components/schemas/ConversationMessageDto"}},"nextCursor":{"type":"string","nullable":true,"description":"Opaque cursor of the oldest item on this page plus the first-page PostgreSQL snapshot. Pass as the before query param. Null when hasMore is false."},"hasMore":{"type":"boolean"}},"required":["items","nextCursor","hasMore"]},"CreateConversationMessageDto":{"type":"object","properties":{"body":{"type":"string","description":"Required chat body. No raw payload maxLength: outer whitespace is trimmed before the 4,000 Unicode-character limit; internal line breaks are kept. Whitespace-only is rejected."},"clientMessageId":{"type":"string","maxLength":128,"description":"Required client idempotency key, unique within the conversation. The reserved intro: prefix is rejected; only accept may create introduction messages. The same sender retrying the same key and body returns the existing message. A different body or sender for the same key is 409."}},"required":["body","clientMessageId"]},"MarkConversationReadDto":{"type":"object","properties":{"upToMessageId":{"type":"string","description":"Optional message id in this conversation. lastReadAt becomes that message createdAt plus its id tie-breaker. Omit the property to mark read through the newest committed message. null or empty is 400 — it must not fall through to implicit mark-read. Send and mark-read take the conversation row lock so an in-flight older send cannot be acked unseen. Does not change the other participant."}}},"ConversationReadDto":{"type":"object","properties":{"success":{"type":"boolean"},"lastReadAt":{"type":"string","format":"date-time"}},"required":["success","lastReadAt"]},"UpsertPushDeviceDto":{"type":"object","properties":{"token":{"type":"string","description":"Expo push token for this installation. Bound to the authenticated user."},"platform":{"type":"string","enum":["ios","android"]},"installationId":{"type":"string","maxLength":128},"expoProjectId":{"type":"string"},"appEnvironment":{"type":"string","enum":["development","preview","production"]},"bundleId":{"type":"string"},"userId":{"type":"string","description":"Ignored. The device is always bound to the authenticated session."}},"required":["token","platform","installationId","expoProjectId","appEnvironment"]},"PushDeviceDto":{"type":"object","properties":{"id":{"type":"string"},"platform":{"type":"string"},"installationId":{"type":"string"},"lastSeenAt":{"type":"string","format":"date-time"},"active":{"type":"boolean"}},"required":["id","platform","installationId","lastSeenAt","active"]},"DeactivatePushDeviceDto":{"type":"object","properties":{"installationId":{"type":"string","maxLength":128}},"required":["installationId"]},"MyRegistrationItemRegistrationDto":{"type":"object","properties":{"id":{"type":"string"},"eventId":{"type":"string"},"attendeeDecision":{"type":"string","enum":["pending","accepted","declined"]},"adminDecision":{"type":"string","enum":["pending","approved","rejected","ticket_assigned","out_of_town"]}},"required":["id","eventId","attendeeDecision","adminDecision"]},"MyRegistrationEventSponsorDto":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"url":{"type":"string"},"imageUrl":{"type":"string","nullable":true}},"required":["id","name","url"]},"MyRegistrationEventDto":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"startDate":{"type":"string","format":"date-time"},"endDate":{"type":"string","format":"date-time"},"logoUrl":{"type":"string","nullable":true},"sponsors":{"type":"array","items":{"$ref":"#/components/schemas/MyRegistrationEventSponsorDto"}}},"required":["id","name","startDate","endDate","sponsors"]},"MyRegistrationItemDto":{"type":"object","properties":{"registration":{"$ref":"#/components/schemas/MyRegistrationItemRegistrationDto"},"section":{"type":"string","enum":["pending","approved"]},"event":{"$ref":"#/components/schemas/MyRegistrationEventDto"},"selectedSponsorIds":{"type":"array","items":{"type":"string"}}},"required":["registration","section","event","selectedSponsorIds"]},"MyRegistrationPageDto":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/MyRegistrationItemDto"}},"total":{"type":"number"},"limit":{"type":"number"},"offset":{"type":"number"}},"required":["items","total","limit","offset"]},"RegistrationUserDto":{"type":"object","properties":{"id":{"type":"string"},"email":{"type":"string"},"firstName":{"type":"string"},"lastName":{"type":"string"},"company":{"type":"string"},"title":{"type":"string"},"linkedin":{"type":"string"},"secondEmail":{"type":"string"},"thirdEmail":{"type":"string"}},"required":["id","email","firstName","lastName","company","title","linkedin"]},"RegistrationDto":{"type":"object","properties":{"id":{"type":"string"},"userId":{"type":"string"},"eventId":{"type":"string"},"ticketTierId":{"type":"string"},"attendeeDecision":{"type":"string","enum":["pending","accepted","declined"]},"adminDecision":{"type":"string","enum":["pending","approved","rejected","ticket_assigned","out_of_town"]},"source":{"type":"string","enum":["invite","request"]},"checkedInAt":{"type":"string","format":"date-time"},"checkedIn":{"type":"boolean"},"updatedAt":{"type":"string","format":"date-time"},"user":{"$ref":"#/components/schemas/RegistrationUserDto"}},"required":["id","userId","eventId","attendeeDecision","adminDecision","source","checkedIn","updatedAt"]},"RequestDto":{"type":"object","properties":{"email":{"type":"string"},"firstName":{"type":"string"},"lastName":{"type":"string"},"company":{"type":"string"},"title":{"type":"string"},"linkedin":{"type":"string"}},"required":["email","firstName","lastName"]},"ImportRegistrationRowDto":{"type":"object","properties":{"email":{"type":"string"},"firstName":{"type":"string"},"lastName":{"type":"string"},"company":{"type":"string"},"title":{"type":"string"},"linkedin":{"type":"string"},"secondEmail":{"type":"string"},"thirdEmail":{"type":"string"},"location":{"type":"string"}},"required":["email","firstName","lastName"]},"ImportRegistrationsDto":{"type":"object","properties":{"rows":{"type":"array","items":{"$ref":"#/components/schemas/ImportRegistrationRowDto"}}},"required":["rows"]},"RegistrationImportWarningDto":{"type":"object","properties":{"row":{"type":"number"},"email":{"type":"string"},"message":{"type":"string"},"location":{"type":"string"}},"required":["row","email","message"]},"RegistrationImportResultDto":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/RegistrationDto"}},"total":{"type":"number"},"warnings":{"type":"array","items":{"$ref":"#/components/schemas/RegistrationImportWarningDto"}}},"required":["items","total","warnings"]},"InviteDto":{"type":"object","properties":{"userId":{"type":"string"}},"required":["userId"]},"InvitationDto":{"type":"object","properties":{"registration":{"$ref":"#/components/schemas/RegistrationDto"},"inviteToken":{"type":"string"}},"required":["registration","inviteToken"]},"AdminUpdateDto":{"type":"object","properties":{"adminDecision":{"type":"string","enum":["pending","out_of_town"]},"checkedIn":{"type":"boolean"}}},"ReplaceSponsorInterestsDto":{"type":"object","properties":{"sponsorIds":{"type":"array","items":{"type":"string"}}},"required":["sponsorIds"]},"SponsorInterestIdsDto":{"type":"object","properties":{"sponsorIds":{"type":"array","items":{"type":"string"}}},"required":["sponsorIds"]},"NotifyDto":{"type":"object","properties":{"type":{"type":"string","enum":["invite","approved"]}},"required":["type"]},"AcceptDto":{"type":"object","properties":{"token":{"type":"string"},"firstName":{"type":"string"},"lastName":{"type":"string"},"company":{"type":"string"},"title":{"type":"string"},"email":{"type":"string"},"linkedin":{"type":"string"}},"required":["token"]},"TokenDto":{"type":"object","properties":{"token":{"type":"string"}},"required":["token"]},"AssignTicketDto":{"type":"object","properties":{"ticketTierId":{"type":"string"}},"required":["ticketTierId"]},"TicketTierDto":{"type":"object","properties":{"id":{"type":"string"},"eventId":{"type":"string"},"name":{"type":"string"},"price":{"type":"number"},"currency":{"type":"string"},"stripeProductId":{"type":"string"},"description":{"type":"string"},"passFeesToBuyer":{"type":"boolean"}},"required":["id","eventId","name","price","currency","description","passFeesToBuyer"]},"CreateTierDto":{"type":"object","properties":{"name":{"type":"string","minLength":1},"price":{"type":"number","minimum":0},"currency":{"type":"string","minLength":1},"description":{"type":"string"},"passFeesToBuyer":{"type":"boolean"}},"required":["name","price"]},"UpdateTierDto":{"type":"object","properties":{"name":{"type":"string","minLength":1},"price":{"type":"number","minimum":0},"currency":{"type":"string","minLength":1},"description":{"type":"string"},"passFeesToBuyer":{"type":"boolean"}}},"CheckoutDto":{"type":"object","properties":{"ticketTierId":{"type":"string"},"email":{"type":"string"},"firstName":{"type":"string"},"lastName":{"type":"string"}},"required":["ticketTierId","email","firstName","lastName"]},"CheckoutResultDto":{"type":"object","properties":{"checkoutUrl":{"type":"string"},"sessionId":{"type":"string"},"ticketTierId":{"type":"string"},"email":{"type":"string"}},"required":["checkoutUrl","sessionId","ticketTierId","email"]},"CompleteCheckoutDto":{"type":"object","properties":{"sessionId":{"type":"string"}},"required":["sessionId"]},"StripeWebhookResultDto":{"type":"object","properties":{"status":{"type":"string"},"eventId":{"type":"string"},"eventType":{"type":"string"}},"required":["status","eventId"]},"StripeMetadataDto":{"type":"object","properties":{"eventId":{"type":"string"},"ticketTierId":{"type":"string"},"registrationId":{"type":"string"},"email":{"type":"string"},"firstName":{"type":"string"},"lastName":{"type":"string"}}},"StripeSessionDto":{"type":"object","properties":{"id":{"type":"string"},"metadata":{"$ref":"#/components/schemas/StripeMetadataDto"}}},"StripeDataDto":{"type":"object","properties":{"object":{"$ref":"#/components/schemas/StripeSessionDto"}},"required":["object"]},"StripeWebhookDto":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string"},"data":{"$ref":"#/components/schemas/StripeDataDto"}},"required":["id","type","data"]},"ProblemDetails":{"type":"object","required":["type","title","status","detail","instance","requestId"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"number"},"detail":{"type":"string"},"instance":{"type":"string"},"requestId":{"type":"string"}}}}}}